Quellcode durchsuchen

装备宝石镶嵌

cyzhao vor 7 Monaten
Ursprung
Commit
e4dac65f07

+ 4 - 0
Gameserver/App/base/CmdCode.php

@@ -283,6 +283,10 @@ class CmdCode {
      */
     const store_remove_equip = 6415;
     
+    /**
+     * 购买装备的宝石槽
+     */
+    const store_equip_gemSlotBuy = 6416;
 // </editor-fold>
 // <editor-fold defaultstate="collapsed" desc="商城操作码 - 65xx">
 

+ 19 - 3
Gameserver/App/configs/GameConfig.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-10-24 11:57:47
+ // 日期: 2024-10-30 10:01:11
 ////////////////////
 
 namespace loyalsoft;
@@ -282,9 +282,9 @@ class GameConfig {
     /**
     * @return \sm_equip_levelupgrade equip_levelupgrade item数据 
     */
-    public static function equip_levelupgrade_getItem($itemid)
+    public static function equip_levelupgrade_getItem($rarity, $qual, $posId, $level)
     { 
-        return self::get_hash_item('equip_levelupgrade', $itemid);
+        return self::get_hash_item('equip_levelupgrade', "$rarity-$qual-$posId-$level");
     }
     /**
     * 章节礼包表
@@ -975,6 +975,22 @@ class GameConfig {
         return self::get_hash_item('equip', $itemid);
     }
     /**
+    * 宝石槽位表
+    * @return \gem_slotposition
+    */
+    public static function gem_slotposition()
+    { 
+        static $a = null; 
+        return self::initValue($a, 'gem_slotposition');
+    }
+    /**
+    * @return \sm_gem_slotposition gem_slotposition item数据 
+    */
+    public static function gem_slotposition_getItem($itemid)
+    { 
+        return self::get_hash_item('gem_slotposition', $itemid);
+    }
+    /**
     * 当前版本(时间戳)
     * @return \ver
     */

+ 19 - 3
Gameserver/App/model/Const/GameConfig.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-10-24 11:57:47
+ // 日期: 2024-10-30 15:01:06
 ////////////////////
 
 /**
@@ -280,9 +280,9 @@ class GameConfig {
     /**
     * @return \sm_equip_levelupgrade equip_levelupgrade item数据 
     */
-    public static function equip_levelupgrade_getItem($itemid)
+    public static function equip_levelupgrade_getItem($rarity, $qual, $posId, $level)
     { 
-        return self::get_hash_item('equip_levelupgrade', $itemid);
+        return self::get_hash_item('equip_levelupgrade', "$rarity-$qual-$posId-$level");
     }
     /**
     * 章节礼包表
@@ -973,6 +973,22 @@ class GameConfig {
         return self::get_hash_item('equip', $itemid);
     }
     /**
+    * 宝石槽位表
+    * @return \gem_slotposition
+    */
+    public static function gem_slotposition()
+    { 
+        static $a = null; 
+        return self::initValue($a, 'gem_slotposition');
+    }
+    /**
+    * @return \sm_gem_slotposition gem_slotposition item数据 
+    */
+    public static function gem_slotposition_getItem($itemid)
+    { 
+        return self::get_hash_item('gem_slotposition', $itemid);
+    }
+    /**
     * 当前版本(时间戳)
     * @return \ver
     */

+ 6 - 6
Gameserver/App/model/Const/sm_equip.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-10-23 15:48:58
+ // 日期: 2024-10-30 14:39:53
 ////////////////////
 
 
@@ -53,11 +53,6 @@ class sm_equip
     */
     public $icon;
 
-    /**
-    * @var Int32 基础属性值(1,3,5加攻击,246加hp) default(0) 
-    */
-    public $attrNum;
-
     /**
     * @var String 解锁词条ID (品质提升,多条词条逗号分隔,各词条是叠加关系)(从红色往前排,倒着填)  
     */
@@ -68,5 +63,10 @@ class sm_equip
     */
     public $etc;
 
+    /**
+    * @var Int32 套装标志id  
+    */
+    public $suitId;
+
 }
 

+ 16 - 1
Gameserver/App/model/Const/sm_equip_levelupgrade.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-09-29 18:03:17
+ // 日期: 2024-10-28 17:15:30
 ////////////////////
 
 
@@ -18,6 +18,21 @@ class sm_equip_levelupgrade
     */
     public $level;
 
+    /**
+    * @var Int32 装备稀有度 1:普通 2:S级  
+    */
+    public $rarity;
+
+    /**
+    * @var Int32 装备品阶  
+    */
+    public $qual;
+
+    /**
+    * @var Int32 部位  
+    */
+    public $posId;
+
     /**
     * @var Int32 需要金币数量  
     */

+ 42 - 0
Gameserver/App/model/Const/sm_gem_slotposition.php

@@ -0,0 +1,42 @@
+<?php
+////////////////////
+ // 由CodeGenerator创建。
+ // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
+ // author: gwang 
+ // 日期: 2024-10-29 16:16:44
+////////////////////
+
+
+/**
+ * Static Model gem_slotposition 宝石槽位表
+ */
+class sm_gem_slotposition
+{
+
+    /**
+    * @var Int32 自增的  
+    */
+    public $id;
+
+    /**
+    * @var Int32 宝石品阶  
+    */
+    public $qual;
+
+    /**
+    * @var Int32 初始槽位数量  
+    */
+    public $initNum_slot;
+
+    /**
+    * @var Int32 最大槽位数量  
+    */
+    public $buyNum_slot;
+
+    /**
+    * @var String 购买槽位  
+    */
+    public $cost;
+
+}
+

+ 1 - 1
Gameserver/App/model/Const/sm_hero.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-10-24 11:35:52
+ // 日期: 2024-10-24 14:35:52
 ////////////////////
 
 

+ 1 - 1
Gameserver/App/model/Const/sm_heroType_typeId.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-10-24 11:35:52
+ // 日期: 2024-10-24 14:35:52
 ////////////////////
 
 

+ 1 - 1
Gameserver/App/model/Const/sm_skills.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-10-22 15:04:58
+ // 日期: 2024-10-29 16:05:53
 ////////////////////
 
 

+ 1 - 1
Gameserver/App/model/Const/sm_waveItem.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-10-24 11:02:18
+ // 日期: 2024-10-30 14:49:31
 ////////////////////
 
 

+ 1 - 1
Gameserver/App/model/Const/sm_waves.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-10-24 11:02:18
+ // 日期: 2024-10-30 14:49:31
 ////////////////////
 
 

+ 33 - 0
Gameserver/App/model/User/Ins_Equip.php

@@ -30,6 +30,11 @@ class Ins_Equip extends Object_ext{
      */
     public $level = 0;
     
+    /**
+     * 宝石槽
+     * @var type
+     */
+    public $gemSetSlot;
 
     /**
      * 构造函数
@@ -38,6 +43,8 @@ class Ins_Equip extends Object_ext{
     public function __construct($args = null) {
         if($args !=null){
             parent::__construct($args);
+        } else {
+            $this->gemSetSlot = new \stdClass();
         }                
     }
     
@@ -51,4 +58,30 @@ class Ins_Equip extends Object_ext{
         return $mo;
     }
     
+    public function equipLevelMo() {
+        $mo = GameConfig::equip_levelupgrade_getItem($this->mo()->rarity, $this->mo()->qual,$this->mo()->position,$this->level);
+        my_Assert(null != $mo, ErrCode::err_const_no);
+        return $mo;
+    }
+    
+    
+    /*
+     * 装备最大等级
+     */
+    public function Equip_MaxLevel() {
+        $rarity = $this->mo()->rarity;
+        $qual = $this->mo()->qual;
+        $posId = $this->mo()->position;
+        $dic = GameConfig::equip_levelupgrade();
+        $max = 0;
+        foreach ($dic as $str => $mo) {
+            if($mo->rarity == $rarity && $mo->qual == $qual && $mo->posId == $posId){
+                if($mo->level > $max){
+                    $max = $mo->level;
+                }
+            }
+        }
+        return $max;
+    }
+    
 }

+ 25 - 12
Gameserver/App/process/FightProc.php

@@ -1668,21 +1668,34 @@ class FightProc {
 
         $heroBashAttack = $mo->attack;
         $heroBashHp = $mo->hp;
-
-        $equipDic = ctx()->store->equipPosition;
+        
         $attck = 0;
         $hp = 0;
+        $equipDic = ctx()->store->equipLocation;
         foreach ($equipDic as $index => $ins_equip) {
-            $Ins_Equip = new Ins_EquipPosition($ins_equip);
-            if ($Ins_Equip->mo()->upgradeType == 1) {//攻击力
-                $attck += GameConfig::equip_levelupgrade_getItem($ins_equip->level)->attckNum;
-            } elseif ($Ins_Equip->mo()->upgradeType == 2) {
-                $hp += GameConfig::equip_levelupgrade_getItem($ins_equip->level)->hpNum;
-            } else {
-                $attck += GameConfig::equip_levelupgrade_getItem($ins_equip->level)->attckNum;
-                $hp += GameConfig::equip_levelupgrade_getItem($ins_equip->level)->hpNum;
-            }
-        }
+            $ins_Equip = new Ins_Equip($ins_equip);
+            if($ins_Equip->mo()->position % 2 == 1){
+                $attck += GameConfig::equip_levelupgrade_getItem($ins_Equip->mo()->rarity,$ins_Equip->mo()->qual.$ins_Equip->mo()->position,$ins_Equip->level)->attckNum;
+            } elseif ($ins_Equip->mo()->position % 2 == 0) {
+                $hp += GameConfig::equip_levelupgrade_getItem($ins_Equip->mo()->rarity,$ins_Equip->mo()->qual.$ins_Equip->mo()->position,$ins_Equip->level)->hpNum;
+            }            
+        }
+        
+        
+//        $equipDic = ctx()->store->equipPosition;
+//        $attck = 0;
+//        $hp = 0;
+//        foreach ($equipDic as $index => $ins_equip) {
+//            $Ins_Equip = new Ins_EquipPosition($ins_equip);
+//            if ($Ins_Equip->mo()->upgradeType == 1) {//攻击力
+//                $attck += GameConfig::equip_levelupgrade_getItem($ins_equip->level)->attckNum;
+//            } elseif ($Ins_Equip->mo()->upgradeType == 2) {
+//                $hp += GameConfig::equip_levelupgrade_getItem($ins_equip->level)->hpNum;
+//            } else {
+//                $attck += GameConfig::equip_levelupgrade_getItem($ins_equip->level)->attckNum;
+//                $hp += GameConfig::equip_levelupgrade_getItem($ins_equip->level)->hpNum;
+//            }
+//        }
 
         $heroAttck = $heroBashAttack + $attck + $addAtk;                        # 英雄基础攻击力+装备宝石词条攻击力+启灵攻击力
         $heroHp = $heroBashHp + $hp + $addHp;                                   # 英雄基础hp + 装备宝石词条hp + 启灵hp

+ 104 - 59
Gameserver/App/process/StoreProc.php

@@ -42,7 +42,7 @@ class StoreProc {
                 return StoreProc::RemoveEquipUpgradeTip();
             case CmdCode::store_equip_removeNewGemTip:                          # 6411 移除是新宝石绿点提示
                 return StoreProc::RemoveNewGemTip();
-            case CmdCode::store_allEquipUpgrade:                                # 6412 所有装备的一键升级
+            case CmdCode::store_allEquipUpgrade:                                # 6412 所有装备的一键升级-------废弃
                 return StoreProc::AllEquipUpgrade();
             case CmdCode::store_gemXiLian:                                      # 6413 洗练
                 return StoreProc::GemXiLian();
@@ -50,11 +50,58 @@ class StoreProc {
                 return StoreProc::Equiped();    
             case CmdCode::store_remove_equip:                                   # 6413 卸下装备
                 return StoreProc::RemoveEquip();    
+            case CmdCode::store_equip_gemSlotBuy:                               # 6416 购买装备宝石槽         
+                return StoreProc::Gem_BuySlot();
             default:
                 Err(ErrCode::cmd_err);
         }
     }
     
+    /**
+     *  6416 购买装备宝石槽         
+     * @return type
+     */
+    public static function Gem_BuySlot() {
+        list($uid) = req()->paras;
+                       
+        $equipDic = ctx()->store->equip;
+        my_Assert(StlUtil::dictHasProperty($equipDic, $uid), ErrCode::user_store_NotExistEquip);
+        $ins_equip = new Ins_Equip($equipDic->$uid);
+        
+        $mo = GameConfig::gem_slotposition_getItem($ins_equip->mo()->qual);
+        my_Assert(null != $mo, ErrCode::err_const_no);
+        $initNum = $mo->initNum_slot;
+        $buyNum = $mo->buyNum_slot;
+        
+        $unlockIndex = 0;
+        if($buyNum > 0){
+            for ($i = $initNum+1; $i <= $initNum+$buyNum; $i++) {               
+                if(!StlUtil::dictHasProperty($ins_equip->gemSetSlot, $i)){
+                    $ins_equip->gemSetSlot->$i = 0;
+                    break;
+                }
+                $unlockIndex += 1;
+            }                    
+        }
+        $costArr = explode(';',$mo->cost); 
+        $cash = explode(',', $costArr[$unlockIndex]);
+        my_Assert(ctx()->base(true)->cash >= $cash[1], ErrCode::notenough_cash_msg);
+        
+        ctx()->base(true)->Consume_Cash($unlockIndex);       
+        ctx()->store(true)->equip->$uid = $ins_equip;          
+        
+        UserProc::updateUserInfo();
+        
+        return Resp::ok(array(        
+            'cash'=> ctx()->baseInfo->cash,
+            'store'=> ctx()->store,
+        ));
+    }
+    
+    /**
+     * 6413 装备
+     * @return type
+     */
     public static function Equiped() {
         list($uid) = req()->paras;
         
@@ -67,7 +114,10 @@ class StoreProc {
         UserProc::updateUserInfo();
         return Resp::ok(array());
     }
-    
+    /**
+     * 6413 卸下装备
+     * @return type
+     */
     public static function RemoveEquip() {
         list($uid) = req()->paras;
         
@@ -529,9 +579,10 @@ class StoreProc {
      * @return type
      */
     public static function GemSet() {
-        list($uid, $type, $replaceUId) = req()->paras; //宝石uid  手动的时候记得校验u
+        list($equipUid, $gemUid, $slotId) = req()->paras; //宝石uid
+              
         $user = ctx();
-
+                      
         my_Assert(StlUtil::dictHasProperty($user->store->gemStore, $uid), ErrCode::user_store_NoItem);
         $ins_gem = new Ins_Gem($user->store->gemStore->$uid);
 
@@ -661,37 +712,35 @@ class StoreProc {
     }
 
     /**
-     * 升级装备
+     * 6404 升级装备
      * @return type
      */
     public static function EquipUpgrade() {
-        list($posId) = req()->paras; //装备的部位id
-        $user = ctx();
-
-        $equip_levelDic = GameConfig::equip_levelupgrade();              
-        $maxLv = count(StlUtil::dictToArray($equip_levelDic));                     
-        $lv = $user->store->equipPosition->$posId->level;
-        my_Assert($lv < $maxLv, ErrCode::user_store_equipLevelLimit);
-        $mo = GameConfig::equip_levelupgrade_getItem($lv);
-        my_Assert($user->baseInfo->gold >= $mo->needGold, ErrCode::notenough_gold_msg);
-        $costTuzhiId = GameConfig::equip_position_getItem($posId)->costTuzhiId;
-
+        list($uid) = req()->paras; //装备uid
+        
+        my_Assert(StlUtil::dictHasProperty(ctx()->store->equip, $uid), ErrCode::user_store_NoEquip);
+        $ins_equip = new Ins_Equip(ctx()->store->equip->$uid);       
+        my_Assert($ins_equip->level < $ins_equip->Equip_MaxLevel(), ErrCode::user_store_equipLevelLimit);       
+        
+        $mo = GameConfig::equip_levelupgrade_getItem($ins_equip->mo()->rarity,$ins_equip->mo()->qual,$ins_equip->mo()->position,$ins_equip->level);
+        my_Assert(null != $mo, ErrCode::err_const_no);
+        my_Assert(ctx()->baseInfo->gold >= $mo->needGold, ErrCode::notenough_gold_msg);
+        
+        $costTuzhiId = GameConfig::equip_position_getItem($ins_equip->mo()->position)->costTuzhiId;
         $tuzhiNum = 0;
-        if (StlUtil::dictHasProperty($user->store->items, $costTuzhiId)) {
-            $tuzhiNum = $user->store->items->$costTuzhiId;
+        if (StlUtil::dictHasProperty(ctx()->store->items, $costTuzhiId)) {
+            $tuzhiNum = ctx()->store->items->$costTuzhiId;
         }
         my_Assert($tuzhiNum >= $mo->needItemNum, ErrCode::notenough_item);
-        $user->store->removeItem($costTuzhiId, $mo->needItemNum);
-        ctx()->baseInfo->Consume_Gold($mo->needGold);
-
-        $user->store->equipPosition->$posId->level += 1;
-
+        
+        ctx()->store(true)->removeItem($costTuzhiId, $mo->needItemNum);
+        ctx()->base(true)->Consume_Gold($mo->needGold);
+        
         TaskProc::OnAnyEquipUpLevel_X();
         TaskProc::OnAllEquipUpLevel_X();
         TaskProc::OnEquipLevelUpNum();
 
-        FightProc::Ranking_FightPower();
-        ctx($user);
+        FightProc::Ranking_FightPower();            
         UserProc::updateUserInfo();
         return Resp::ok(array(
                     'gold' => $user->baseInfo->gold,
@@ -699,66 +748,62 @@ class StoreProc {
                     'task' => $user->task,
         ));
     }
-
+       
     /**
-     * 单个装备部位一键升级
+     * 6405 单个装备部位一键升级
      * @return type
      */
     public static function EquipUpgrade_MaxLv() {
-        list($posId) = req()->paras; //mask = 1:表示战斗中掉落
-        $user = ctx();
-
-        $equip = $user->store->equipPosition->$posId;
-
-        $lv = $equip->level;
-        $levelupgrade = GameConfig::equip_levelupgrade();
-        $maxLv = count((array) $levelupgrade);
-
-        $need_gold = 0;
-        $need_item = 0;
-        $tuzhiId = GameConfig::equip_position_getItem($posId)->costTuzhiId;
-
+        list($uid) = req()->paras; 
+        
+        my_Assert(StlUtil::dictHasProperty(ctx()->store->equip, $uid), ErrCode::user_store_NoEquip);
+        $ins_equip = new Ins_Equip(ctx()->store->equip->$uid);  
+        $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($user->store->items, $tuzhiId)) {
-            $itemNum_store = $user->store->items->$tuzhiId;
+        if (StlUtil::dictHasProperty(ctx()->store->items, $tuzhiId)) {
+            $itemNum_store = ctx()->store->items->$tuzhiId;
         }
-
+        
         $up_Gold = 0;
         $up_needItem = 0;
         $up_lv = 0;
         
         $noUp_gold = false;
         $noUp_item = false;
-        for ($i = $lv; $i <= $maxLv; $i++) {
-            $up_Gold += GameConfig::equip_levelupgrade_getItem($i)->needGold;
-            $up_needItem += GameConfig::equip_levelupgrade_getItem($i)->needItemNum;
+        for ($i = $ins_equip->level; $i <= $maxLevel; $i++) {
+            $up_Gold += GameConfig::equip_levelupgrade_getItem($ins_equip->mo()->rarity,$ins_equip->mo()->qual,$ins_equip->mo()->position,$i)->needGold;
+            $up_needItem += GameConfig::equip_levelupgrade_getItem($ins_equip->mo()->rarity,$ins_equip->mo()->qual,$ins_equip->mo()->position,$i)->needItemNum;
                         
-            if ($user->baseInfo->gold >= $up_Gold) {             
+            if (ctx()->baseInfo->gold >= $up_Gold) {             
                 $noUp_gold = true;
             }
             if ($itemNum_store >= $up_needItem) {                          
                 $noUp_item = true;      
             }
                               
-            if ($user->baseInfo->gold >= $up_Gold && $itemNum_store >= $up_needItem) {
-                $need_gold = $up_Gold;
-                $need_item = $up_needItem;
+            if (ctx()->baseInfo->gold >= $up_Gold && $itemNum_store >= $up_needItem) {
+                //$need_gold = $up_Gold;
+                //$need_item = $up_needItem;
                 $up_lv = $i;
                 continue;
             }
 
             break;
         }
-
+        
         if($up_lv == 0){
-            my_Assert($noUp_gold, ErrCode::notenough_cash_msg);
+            my_Assert($noUp_gold, ErrCode::notenough_gold_msg);
             my_Assert($noUp_item, ErrCode::notenough_item);           
         }
             
-        $user->baseInfo->gold -= $need_gold;
-        $user->store->removeItem($tuzhiId, $need_item);
+        ctx()->base(true)->Consume_Gold($up_Gold);
+        ctx()->store(true)->removeItem($tuzhiId, $up_needItem);
         if($up_lv >0){
-            $user->store->equipPosition->$posId->level = $up_lv;
+            ctx()->store->equip->$uid->level = $up_lv;
         }
         
         TaskProc::OnAnyEquipUpLevel_X();
@@ -766,12 +811,12 @@ class StoreProc {
         TaskProc::OnEquipLevelUpNum();
 
         FightProc::Ranking_FightPower();
-        ctx($user);
+        
         UserProc::updateUserInfo();
         return Resp::ok(array(
-                    'gold' => $user->baseInfo->gold,
-                    'store' => $user->store,
-                    'task' => $user->task,
+                    'gold' => ctx()->baseInfo->gold,
+                    'store' => ctx()->store,
+                    'task' => ctx()->task,
         ));
     }