|
@@ -55,7 +55,7 @@ class StoreProc {
|
|
|
case CmdCode::store_equip_compose: # 6417 装备合成
|
|
|
return StoreProc::Equip_Compose();
|
|
|
case CmdCode::store_equip_OnekeyCompose: # 6418 装备一键合成
|
|
|
- return StoreProc::Equip_OnekeyCompose();
|
|
|
+ return StoreProc::Equip_OnekeyCompose_new();
|
|
|
case CmdCode::store_equip_downGradingLevel: # 6419 降级
|
|
|
return StoreProc::Equip_DownGradingLevel();
|
|
|
case CmdCode::store_equip_downGradingQual: # 6420 降品
|
|
@@ -189,7 +189,7 @@ class StoreProc {
|
|
|
$num = $arr[2];
|
|
|
|
|
|
$all_num = 0;
|
|
|
-
|
|
|
+
|
|
|
$materialItemType = 0;
|
|
|
$materialItemNum = 0;
|
|
|
if ($type == 2 && $composeMaterial_typeIds != null) {//部位去校验
|
|
@@ -231,11 +231,11 @@ class StoreProc {
|
|
|
StlUtil::dictRemove(ctx()->store(true)->equip, $eqUid);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- if($materialItemType != 0){
|
|
|
+
|
|
|
+ if ($materialItemType != 0) {
|
|
|
ctx()->store(true)->removeItem($materialItemType, $materialItemNum);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
UserProc::updateUserInfo();
|
|
|
return Resp::ok(array(
|
|
|
'gold' => ctx()->baseInfo->gold,
|
|
@@ -276,7 +276,7 @@ class StoreProc {
|
|
|
if ($ins_equip->qual < 4) {
|
|
|
$newEquipTypeId = substr($ins_equip->typeId, 0, strlen($ins_equip->typeId) - 5);
|
|
|
$rarity = substr($ins_equip->typeId, -3);
|
|
|
- $newEquipTypeId = $newEquipTypeId ."0".$qual.$rarity;
|
|
|
+ $newEquipTypeId = $newEquipTypeId . "0" . $qual . $rarity;
|
|
|
}
|
|
|
|
|
|
$ins_equip->typeId = $newEquipTypeId;
|
|
@@ -285,6 +285,67 @@ class StoreProc {
|
|
|
return $ins_equip;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 6418 装备一键合成 (gwang 2024年11月16日)
|
|
|
+ * @return type
|
|
|
+ */
|
|
|
+ public static function Equip_OnekeyCompose_new() {
|
|
|
+ $equipDic = ctx()->store(true)->equip;
|
|
|
+ $arr = array(); # 待处理装备临时数组
|
|
|
+ $composeEquip = array(); # 合成记录
|
|
|
+ foreach ($equipDic as $equip) {
|
|
|
+ if ($equip->qual <= 4) { # 4 品以上的不参与合成
|
|
|
+ $arr[] = new Ins_Equip($equip);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ usort($arr, function ($a, $b) { # 按等级大小排序, 等级大的放最后
|
|
|
+ if ($a->level > $b->level) {
|
|
|
+ return 1;
|
|
|
+ } else if ($a->level == $b->level) {
|
|
|
+ return 0;
|
|
|
+ } else {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ while (count($arr) > 0) { # 循环处理每一个装备
|
|
|
+ $equip_compose = array_pop($arr); # 从末尾弹出一个元素做合成运算
|
|
|
+ if (null == $equip_compose) { # 防御空对象
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $eqQualCfg = GameConfig::equip_compose_getItem($equip_compose->qual); # 按照品阶查询合成配置数据
|
|
|
+ my_Assert(null != $eqQualCfg, ErrCode::err_const_no); # 防御配置数据错误
|
|
|
+ list($type, $costQual, $num) = explode(',', $eqQualCfg->compose_condition); # 从配置提取合成条件
|
|
|
+ $composeArr = array(); # 消耗集合
|
|
|
+ foreach ($arr as $v) { # 从剩余元素中查找合成所需
|
|
|
+ if ($v->qual == $costQual) { # 同品阶
|
|
|
+ if (($type == 1) ? $v->typeId == $equip_compose->typeId # # type: 1 与本体相同 2 同部位即可
|
|
|
+ : $v->mo()->position == $equip_compose->mo()->position) {
|
|
|
+ $composeArr[] = $v; # 成为消耗品
|
|
|
+ }
|
|
|
+ if (count($composeArr) >= $num) { # 达到消耗数量就停
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (count($composeArr) >= $num) { # 合成的回收 不合成的可不能给回收了
|
|
|
+ $uid = $equip_compose->uid;
|
|
|
+ $equipDic->$uid = self::ComposeNewEquip($equip_compose); # 原地合成
|
|
|
+ $composeEquip[] = $uid; # 添加合成记录
|
|
|
+ foreach ($composeArr as $val) { # 回收消耗的装备中所含材料
|
|
|
+ self::equipLevelUp_Material_Recovery($val->mo()->rarity, $val->qual, $val->mo()->position, $val->level); # 回收材料
|
|
|
+ StlUtil::dictRemove(ctx()->store(true)->equip, $val->uid); # 背包删除
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ UserProc::updateUserInfo(); # 回存玩家数据
|
|
|
+ return Resp::ok(array(# # 返回给客户端的数据
|
|
|
+ 'gold' => ctx()->baseInfo->gold,
|
|
|
+ 'store' => ctx()->store,
|
|
|
+ 'composeEquip' => $composeEquip,
|
|
|
+ ));
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 6418 装备一键合成
|
|
|
* @return type
|
|
@@ -930,7 +991,7 @@ class StoreProc {
|
|
|
|
|
|
$ins_equip->level += 1;
|
|
|
ctx()->store->equip->$uid = $ins_equip;
|
|
|
-
|
|
|
+
|
|
|
TaskProc::OnAnyEquipUpLevel_X();
|
|
|
TaskProc::OnAllEquipUpLevel_X();
|
|
|
TaskProc::OnEquipLevelUpNum();
|
|
@@ -956,7 +1017,6 @@ class StoreProc {
|
|
|
$maxLevel = $ins_equip->Equip_MaxLevel();
|
|
|
my_Assert($ins_equip->level < $ins_equip->Equip_MaxLevel(), ErrCode::user_store_equipLevelLimit);
|
|
|
|
|
|
-
|
|
|
$tuzhiId = GameConfig::equip_position_getItem($ins_equip->mo()->position)->costTuzhiId;
|
|
|
$itemNum_store = 0;
|
|
|
if (StlUtil::dictHasProperty(ctx()->store->items, $tuzhiId)) {
|