Procházet zdrojové kódy

fixed: 武器模块联调, 修改武器数据结构,增加与herouid的反向指向,

gwang před 5 roky
rodič
revize
637f08cc37

+ 32 - 23
Gameserver/Amfphp/process/StoreProc.php

@@ -899,34 +899,37 @@ class StoreProc {
         $user = $req->userInfo->game;                                           # user引用
         list($itemtype, $equipuid, $herouid) = $req->pars;                      # 提取参数: 装备类型, 装备的UID, 英雄的UID 
 
-        if (!CommUtil::isPropertyExists($user->store->equipment, $equipuid)) {  # 1.检测是否存在该装备
+
+        if (!CommUtil::isPropertyExists($user->store->equipment, $equipuid)) {  # 检测是否存在该装备
             Err(ErrCode::store_itemno_err);
         }
+        $equipVo = $user->store->equipment->$equipuid;                          # 取装备对象
+        if ($equipVo->herouid > 0 && $equipVo->herouid != $herouid) {           # 检测该装备是否装备到其他英雄身上 
+            Err(ErrCode::store_equipWeared_err);
+        }
         $collectHeros = $user->heros->collectHeros;
         if (!$collectHeros) {                                                   # 防御对象为空
             Err(ErrCode::err_innerfault);
         }
-        if (!CommUtil::isPropertyExists($collectHeros, $herouid)) {             # 2.检查是否存在需要装备的英雄
+        if (!CommUtil::isPropertyExists($collectHeros, $herouid)) {             # 检查是否存在需要装备的英雄
             Err(ErrCode::hero_no);
         }
 
-        foreach ($collectHeros as $tmpheroid => $tempvalue) {                   // 3.检测该装备是否装备到其他英雄身上 
-            if ($tempvalue->equip->weapon->itemuid == $equipuid) {              # 武器
-                Err(ErrCode::store_equipWeared_err);
-            } elseif ($tempvalue->equip->armor->itemuid == $equipuid) {         # 防具
-                Err(ErrCode::store_equipWeared_err);
-            } elseif ($tempvalue->equip->ring->itemuid == $equipuid) {          # 饰品
-                Err(ErrCode::store_equipWeared_err);
-            }
-        }
-        if ($itemtype == 1) {                                                   // 4.添加或替换英雄该部位的装备
-            $collectHeros->$herouid->equip->weapon->itemuid = $equipuid;
-        }
-        if ($itemtype == 2) {                                                   # 防具   
-            $collectHeros->$herouid->equip->armor->itemuid = $equipuid;
-        }
-        if ($itemtype == 3) {                                                   # 防具
-            $collectHeros->$herouid->equip->ring->itemuid = $equipuid;
+        $user->store->equipment->$equipuid->herouid = $herouid;                 # 装备上添加反向引用, 避免查询时的循环
+
+        switch ($itemtype) {                                                    # 添加或替换英雄该部位的装备
+            case 1:                                                             # 武器   
+                $collectHeros->$herouid->equip->weapon->itemuid = $equipuid;
+                break;
+            case 2:                                                             # 防具   
+                $collectHeros->$herouid->equip->armor->itemuid = $equipuid;
+                break;
+            case 3:                                                             # 饰品   
+                $collectHeros->$herouid->equip->ring->itemuid = $equipuid;
+                break;
+            default :
+                Err(ErrCode::store_equip_type);
+                break;
         }
 
         UserProc::updateUserInfo($req);                                         // 5.回写数据
@@ -949,15 +952,21 @@ class StoreProc {
         if (!$collectHeros) {
             Err(ErrCode::err_innerfault);
         }
-        if (!CommUtil::isPropertyExists($collectHeros, $herouid)) {             // 1.检测是否存在拥有该装备的英雄
+        if (!CommUtil::isPropertyExists($collectHeros, $herouid)) {             # 检测是否存在拥有该装备的英雄
             Err(ErrCode::hero_no);
         }
-        switch ($itemtype) {                                                    // 2.检测该装备是否装备在该英雄身上
+        if (!CommUtil::isPropertyExists($user->store->equipment, $equipuid)) {  # 检测是否存在该装备
+            Err(ErrCode::store_itemno_err);
+        }
+        if ($user->store->equipment->$equipuid->herouid == $herouid) {          # 取装备对象
+            $user->store->equipment->$equipuid->herouid = 0;
+        }
+        switch ($itemtype) {                                                    # 检测该装备是否装备在该英雄身上
             case 1:                                                             # 武器 
                 if ($collectHeros->$herouid->equip->weapon->itemuid != $equipuid) {
                     Err(ErrCode::store_noequip_err);
                 }
-                $collectHeros->$herouid->equip->weapon->itemuid = 0;            // 卸下
+                $collectHeros->$herouid->equip->weapon->itemuid = 0;            # 卸下
                 break;
             case 2:                                                             # 防具
                 if ($collectHeros->$herouid->equip->armor->itemuid != $equipuid) {
@@ -974,7 +983,7 @@ class StoreProc {
             default :
                 Err(ErrCode::store_equip_type);
         }
-        UserProc::updateUserInfo($req);                                         # 5.回写数据
+        UserProc::updateUserInfo($req);                                         # 回写数据
         $ret = array('resp' => "succeed!");
         $resp = Resp::ok($ret);                                                 // 返回 
 //        StoreProc::CheckItemNum($req);

+ 7 - 7
Gameserver/nbproject/private/private.xml

@@ -12,15 +12,15 @@
     </editor-bookmarks>
     <open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
         <group>
-            <file>file:/E:/www/ylsj2019/Gameserver/Amfphp/process/UserProc.php</file>
+            <file>file:/E:/www/ylsj2019/Gameserver/Amfphp/process/StatProc.php</file>
+            <file>file:/E:/www/ylsj2019/Gameserver/Amfphp/model/User/StoreModel.php</file>
+            <file>file:/E:/www/ylsj2019/Gameserver/Amfphp/model/User/UserGateDifficulty.php</file>
+            <file>file:/E:/www/ylsj2019/Gameserver/Amfphp/base/ErrCode.php</file>
+            <file>file:/E:/www/ylsj2019/Gameserver/Amfphp/model/User/UserGatesModel.php</file>
+            <file>file:/E:/www/ylsj2019/Gameserver/Amfphp/process/SystemProc.php</file>
+            <file>file:/E:/www/ylsj2019/Gameserver/Amfphp/process/StoreProc.php</file>
             <file>file:/E:/www/ylsj2019/Gameserver/Amfphp/process/FightProc.php</file>
-            <file>file:/E:/www/ylsj2019/Gameserver/Amfphp/process/ActiveProc.php</file>
-            <file>file:/E:/www/ylsj2019/Gameserver/Amfphp/model/User/UGateModel.php</file>
-            <file>file:/E:/www/ylsj2019/Gameserver/Amfphp/model/User/UserGameModel.php</file>
-            <file>file:/E:/www/ylsj2019/Gameserver/Amfphp/model/User/PrivateStateModel.php</file>
             <file>file:/E:/www/ylsj2019/Gameserver/Amfphp/process/FightProc/SweepGatesProc.php</file>
-            <file>file:/E:/www/ylsj2019/Gameserver/Amfphp/Services/TestServer.php</file>
-            <file>file:/E:/www/ylsj2019/Gameserver/Amfphp/process/ActiveProc/Day7Tasks.php</file>
         </group>
     </open-files>
 </project-private>