cyzhao 4 年之前
父节点
当前提交
3415591af7
共有 1 个文件被更改,包括 42 次插入25 次删除
  1. 42 25
      Gameserver/Amfphp/process/HeroProc.php

+ 42 - 25
Gameserver/Amfphp/process/HeroProc.php

@@ -207,7 +207,7 @@ class HeroProc {
     /**
      * [6301] 英雄升级 - 消耗经验道具,获得经验(按照经验提升等级) 
      */
-    static function HeroLevelUpCostExpItem() {
+    static function HeroLevelUpCostExpItem() {            
         list($huid, $costItemId, $costNumber) = req()->paras;                    # 提取参数: 玩家英雄实例编号, 消耗的道具ID, 消耗的道具数量 
         $user = req()->userInfo->game;                                           # user引用 
         $collectHeros = $user->heros->collectHeros;                             # 1. 检查是否存在要升级的英雄
@@ -215,7 +215,7 @@ class HeroProc {
         my_Assert(is_int($costNumber) && $costNumber >= 1, ErrCode::paras_err); # 参数合法性判断
         my_Assert(CommUtil::isPropertyExists($collectHeros, $huid), ErrCode::hero_no); # 玩家拥有此英雄
         $targetHero = new Ins_UserHero($collectHeros->$huid);                   #  
-        my_Assert($targetHero->HeroCanLevelUp(), "请提升指挥官等级.");            # 2. 检查玩家等级是否可以继续升级, Ps. 全局限制 + 指挥官等级限制
+        //my_Assert($targetHero->HeroCanLevelUp(), "请提升指挥官等级.");            # 2. 检查玩家等级是否可以继续升级, Ps. 全局限制 + 指挥官等级限制
         $myPacketItems = $user->store->items;                                   # 检查道具的数量,在背包中是否充足
         my_Assert(CommUtil::isPropertyExists($myPacketItems, $costItemId), ErrCode::store_itemnotenough); # 
         my_Assert($myPacketItems->$costItemId >= $costNumber, ErrCode::store_itemnotenough);                    
@@ -231,10 +231,10 @@ class HeroProc {
         $totalEXP += $costItemConst->baseExp;
         $heroConst = GameConfig::hero_getItem($targetHero->typeId);             # 英雄模板数据
         my_Assert(null != $heroConst, ErrCode::err_const_no, "英雄 模板数据");
-        if ($costItemConst->element != 0 #                                      # 相同元素加成
-                && $costItemConst->element == $heroConst->element) {
-            $totalEXP += $costItemConst->extraExp;
-        }
+//        if ($costItemConst->element != 0 #                                      # 相同元素加成
+//                && $costItemConst->element == $heroConst->element) {
+//            $totalEXP += $costItemConst->extraExp;
+//        }
         $totalEXP *= $costNumber;                                               # 消耗N个道具 
         $targetHero = self:: HeroAddEXP($huid, $totalEXP);                      # 获得经验 
         $myPacketItems->$costItemId -= $costNumber;                             # 消耗道具
@@ -271,7 +271,7 @@ class HeroProc {
         my_Assert($curStar < 5, ErrCode::hero_yanling_canotTupo);
         
         $mo = GameConfig::heroextra_level_tupo_getItem($typeId, $curStar+1);
-        my_Assert($mo == null, ErrCode::err_const_no); 
+        my_Assert($mo != null, ErrCode::err_const_no); 
         
         my_Assert($collectHeros->$uid->level >= $mo->starlimitLv, ErrCode::hero_yanling_canotTupo);
         my_Assert($user->baseInfo->level >= $mo->userlvLimit, ErrCode::hero_yanling_canotTupo);
@@ -585,29 +585,46 @@ class HeroProc {
         my_default_Obj($collectHeros);
         my_Assert(CommUtil::isPropertyExists($collectHeros, $heroUID), ErrCode::hero_no); # 要升级的英雄不存在
         $targetHero = new Ins_UserHero($collectHeros->$heroUID);                # 英雄对象 
-        $playerLimit = GameConfig::playerlevel_getItem(ctx()->base()->level)->hero_max_level;
-        $maxLevel = min(glc()->Hero_Upgrade_BasicMaxLevel, $playerLimit);       # 最大等级= max(英雄最高等级上限,玩家等级限制的上限)
-        if ($targetHero->level >= $maxLevel) {
-            return;                                                             # 已达顶级
-        }
+//        $playerLimit = GameConfig::playerlevel_getItem(ctx()->base()->level)->hero_max_level;
+//        $maxLevel = min(glc()->Hero_Upgrade_BasicMaxLevel, $playerLimit);       # 最大等级= max(英雄最高等级上限,玩家等级限制的上限)
+//        if ($targetHero->level >= $maxLevel) {
+//            return;                                                             # 已达顶级
+//        }
         $lvs = GameConfig::hero_levelexp_getItem($targetHero->level + 1);
-        $targetHero->xp += $totalEXP;
+        $targetHero->xp += $totalEXP;                            
         my_Assert($targetHero->xp >= 0, "[" . $req->uid . "] : HeroLevelUpgrade Exp is negative!");
         $initLevel = $targetHero->level;
-        while ($targetHero->xp >= $lvs->needExp) {
-            if ($targetHero->level < $maxLevel) {                               # 如果未到达最大等级
-                $targetHero->level += 1;
-                if ($targetHero->level >= $maxLevel) {
-                    $targetHero->xp = $lvs->needExp;
-                } else {
-                    $targetHero->xp -= $lvs->needExp;
-                }
-                $lvs = GameConfig::hero_levelexp_getItem($targetHero->level + 1);
-            } else {                                                            # 如果已到达最大等级则仅补齐缺失的经验即可
-                $targetHero->xp = $targetHero->maxXp;                           # 经验不能超过最大值
+        $curLv = 0;
+        $heroLvDic = GameConfig::hero_levelexp();
+        $f = (array) $heroLvDic;     
+        ksort($f); 
+        foreach ($f as $lv => $mo) {
+            if($targetHero->xp < $mo->needExp){
+                $curLv = $lv-1;
+                break;
+            }
+            
+            if($lv>=glc()->Hero_Upgrade_BasicMaxLevel){
+                $curLv = glc()->Hero_Upgrade_BasicMaxLevel;
                 break;
             }
-        } // end while
+        }
+        $targetHero->level = $curLv;
+        
+//        while ($targetHero->xp >= $lvs->needExp) {
+//            if ($targetHero->level < $maxLevel) {                               # 如果未到达最大等级
+//                $targetHero->level += 1;
+//                if ($targetHero->level >= $maxLevel) {
+//                    $targetHero->xp = $lvs->needExp;
+//                } else {
+//                    $targetHero->xp -= $lvs->needExp;
+//                }
+//                $lvs = GameConfig::hero_levelexp_getItem($targetHero->level + 1);
+//            } else {                                                            # 如果已到达最大等级则仅补齐缺失的经验即可
+//                $targetHero->xp = $targetHero->maxXp;                           # 经验不能超过最大值
+//                break;
+//            }
+//        } // end while
         my_Assert($targetHero->xp >= 0, "[" . $req->uid . "] : HeroLevelUpgrade Exp is negative!");
         $collectHeros->$heroUID = $targetHero;                                  # 更新英雄的数据 
         if ($targetHero->level != $initLevel) {