ソースを参照

mod: 增补扩展若干新的任务类型.

gwang 3 年 前
コミット
71bcbd3ae0

+ 12 - 3
Gameserver/Amfphp/model/User/Enum_TaskCmdType.php

@@ -15,14 +15,19 @@ class Enum_TaskCmdType extends Enum {
     const HeroWearupWeapon_quality = 16;                                        # 唤灵师装备X品质的武器(num:1,paras:[herotypeId,quality])(装备界面)
     const HeroWearupYanling = 17;                                               # 唤灵师装备xx(id)言灵 (num:1,paras:[herotypeId,yanlingid])(言灵配置界面)
     const AnyYanlingLevelUp = 18;                                               # 任意言灵等级提升(num:1,paras:[])(言灵详情界面)
+    const HeroWearUpXYanlingWithQualityN = 19;                                  # # 装备任意N品质言灵X次(num:数量x, paras:[品质n]) (跳英雄列表界面)
     // -----
     const PassGateN = 21;                                                       # 通过指定剧情关卡(num:1,paras:[关卡id, 难度(1,2,3)])(跳关卡选择)
-    const passEndlessCarbonN = 22;                                              # 通关无尽塔第xx层(num:1,paras:[关卡id, 层数])
-    const PassWorldBoss = 23;                                                   # 完成一次boss战胜利(num:1, paras:[关卡id])
+    const passEndlessCarbonN = 22;                                              # 通关无尽塔第xx层(num:1,paras:[关卡id, 层数]) (跳无尽塔)
+    const PassWorldBoss = 23;                                                   # 完成一次boss战胜利(num:1, paras:[关卡id]) (跳关卡id)
+    const PassMaterialCarbonN = 24;                                             # # 通关材料副本,xx层(num:1, paras:[关卡id,层级])(跳转待定)
+    // -------------
     const PvPWinNumberTo = 31;
     const PvPScoreTo = 32;
     const UserPowerTo = 33;
     const UserCollectScoreTo = 34;
+    // -----------------
+    const UserOwnXYanlingWithQualityN = 41;                                     # # 玩家拥有x个n品质的言灵(num:数量x, paras:[品质n]) (跳)
     // ----------- 每日任务 -------
     const DailyLogin = 101;
     const DailyHeroImprove = 102;
@@ -40,6 +45,10 @@ class Enum_TaskCmdType extends Enum {
     const GetSchoolTask = 207;                                                  # 领取任意一个学院课程(num:1,paras[])(学院界面)
     const FinishSchoolTask = 208;                                               # 完成任意一个学院课程(num:1,paras:[])(学院界面)
     const FinishAllSchoolTaskOfGrade = 209;                                     # 完成指课程的全部任务(num:1,paras:[courseId])(学院界面)
-    const TempleLottery = 210;                                                  # 完成一次神庙抽奖(num:1, paras:[])
+    const TempleLottery = 210;                                                  # 完成一次神庙抽奖(num:1, paras:[]) (跳转神庙界面)
+    const FinishXCardWithQualityN = 211;                                        # # 完成x张N品质的任务卡(num:数量x, paras:[品质n])(跳转任务卡背包)
+    const FinishXYanlingCardAboutQualityN = 212;                                # # 完成X张N品质的言灵召唤卡.(num:数量x, paras:[品质n])(跳转任务卡背包)
+    const UpgradeXYanlingToNStar = 213;                                         # # 将X个言灵突破到N星.(num:数量x, paras:[星阶n])(跳转言灵背包)
+    const UpgradeXWeaponToNStar = 214;                                          # # 将X武器突破到N星.(num:数量x, paras:[星阶n])(跳转武器背包)
 
 }

+ 10 - 0
Gameserver/Amfphp/model/User/Ins_TaskStep.php

@@ -197,6 +197,16 @@ class Ins_TaskStep extends Object_ext {
                     return $hero->level;
                 }
                 break;
+            case Enum_TaskCmdType::UserOwnXYanlingWithQualityN:                 # 拥有x个n品质的言灵
+                $store = new Info_Store(req()->userInfo->game->store);
+                $num = 0;
+                foreach ($store->yanling as $uid => $yanlingvo) {
+                    isEditor() and $yanlingvo = new \sm_item_base();
+                    if ($yanlingvo->quality >= $para0) {
+                        $num++;
+                    }
+                }
+                return $num;
         }
         return 0;
     }

+ 3 - 1
Gameserver/Amfphp/process/FightProc/SweepGatesProc.php

@@ -145,7 +145,9 @@ class SweepGatesProc {
             case 4:                                                             # 大厅/主城/召唤之类的
                 break;
             case 5:                                                             # 材料副本
-                TaskProc::OnPassGateN($gateId, $difficulty + 1);
+//                TaskProc::OnPassGateN($gateId, $difficulty + 1);
+                $level = substr($gateId, strlen($gateId) - 2);
+                TaskProc::OnPassMaterialCarbonN($gateId, $level);               # 材料副本
                 break;
             case 6:                                                             # 无尽塔
 

+ 72 - 69
Gameserver/Amfphp/process/HeroProc.php

@@ -298,7 +298,7 @@ class HeroProc {
         req()->userInfo->game = $user;
         $targetHero = new Ins_UserHero($collectHeros->$uid);
 
-        TaskProc::OnHeroGradeUp($targetHero->typeId,$targetHero->curStar);       #唤灵师突破       
+        TaskProc::OnHeroGradeUp($targetHero->typeId, $targetHero->curStar);       #唤灵师突破
         UserProc::updateUserInfo(); # 回写玩家数据
         $ret = array(
             'hero' => $targetHero,
@@ -307,7 +307,7 @@ class HeroProc {
         );
         return Resp::ok($ret);
     }
-    
+
     /**
      * 武器替换
      * @return type
@@ -315,34 +315,34 @@ class HeroProc {
     static function YanLingReplace() {
         list($heroId, $yanlingRank, $heroReplaceId, $yanlingReplaceRank) = req()->paras;                                  # 参数 言灵uid(指定进阶的言灵实例id)
         $user = req()->userInfo->game;
-        
+
         $collectHeros = $user->heros->collectHeros;
-        my_Assert(StlUtil::dictHasProperty($collectHeros, $heroId) && StlUtil::dictHasProperty($collectHeros, $heroReplaceId) , "找不到这个唤灵师");
-        
-        $yanling = $collectHeros->$heroId->yanling; 
-        $yanlingReplace = $collectHeros->$heroReplaceId->yanling; 
+        my_Assert(StlUtil::dictHasProperty($collectHeros, $heroId) && StlUtil::dictHasProperty($collectHeros, $heroReplaceId), "找不到这个唤灵师");
+
+        $yanling = $collectHeros->$heroId->yanling;
+        $yanlingReplace = $collectHeros->$heroReplaceId->yanling;
         my_Assert($yanling->$yanlingRank->itemuid != 0 && $yanlingReplace->$yanlingReplaceRank->itemuid != 0, "找不到这个言灵");
-        
+
         $itemuid = $yanling->$yanlingRank->itemuid;
         $replaceItemuid = $yanlingReplace->$yanlingReplaceRank->itemuid;
-        
-        $user->store->yanling->$itemuid->herouid = $heroReplaceId;        
+
+        $user->store->yanling->$itemuid->herouid = $heroReplaceId;
         $user->store->yanling->$replaceItemuid->herouid = $heroId;
-        
+
         $yanling->$yanlingRank->itemuid = $replaceItemuid;
         $yanlingReplace->$yanlingReplaceRank->itemuid = $itemuid;
-               
+
         $collectHeros->$heroId->yanling = $yanling;
         $collectHeros->$heroReplaceId->yanling = $yanlingReplace;
-        $user->heros->collectHeros = $collectHeros;               
+        $user->heros->collectHeros = $collectHeros;
         $user->store->yanling = $yanling;
-        
+
         req()->userInfo->game = $user;
-        
-        UserProc::updateUserInfo();                                             # 回写玩家数据 
+
+        UserProc::updateUserInfo();                                             # 回写玩家数据
         return Resp::ok(array(
                     "store" => $user->store, #                                  # 目前来看只涉及到items变化
-                    "hero"=> $user->heros,
+                    "hero" => $user->heros,
         ));
     }
 
@@ -582,26 +582,26 @@ class HeroProc {
         $lvs = GameConfig::hero_levelexp_getItem($hero->level + 1);
         $hero->maxXp = $lvs->requiredExp;
 
-        //  取可用武器中第一个初始化 -- 策划要求初始英雄要带有武器 -- 王刚 2020年1月      
+        //  取可用武器中第一个初始化 -- 策划要求初始英雄要带有武器 -- 王刚 2020年1月
         $wp = null;
         $arr = (array) GameConfig::item_weapon();
         ksort($arr);                                                            // todo: 排序不正常
         foreach ($arr as $id => $mo) {
-//            isEditor() and $mo = new \sm_item_weapon();           
-            $heroList = explode(',', $mo->hero_id); 
+//            isEditor() and $mo = new \sm_item_weapon();
+            $heroList = explode(',', $mo->hero_id);
             foreach ($heroList as $hero_id) {
-                if ($hero_id == $hero->typeId){
+                if ($hero_id == $hero->typeId) {
                     $wp = $mo;
                     break;
                 }
             }
-            
+
 //            if ($mo->hero_id == $hero->typeId) {
-//                $wp = $mo;                               
+//                $wp = $mo;
 //                break;
 //            }
         }
-               
+
         if (null != $wp) {
             $wuid = StoreProc::PutEquipInStore($wp->typeId);
             req()->userInfo->game->store->equipment->$wuid->herouid = $uid;
@@ -771,6 +771,7 @@ class HeroProc {
         UserProc::updateUserInfo();
         return Resp::ok(array('store' => req()->userInfo->game->store,));
     }
+
     /**
      * 新的突破
      * @return type
@@ -780,106 +781,108 @@ class HeroProc {
         $user = req()->userInfo->game;
         $yanling = $user->store->yanling;
         my_Assert(CommUtil::isPropertyExists($yanling, $uid), ErrCode::store_weapon_err); # 玩家拥有此英雄
-        
+
         $typeId = $yanling->$uid->typeId;
         $curStar = $yanling->$uid->starLv;
         my_Assert($curStar < 5, ErrCode::hero_yanling_canotTupo);
-        
-        $mo = GameConfig::yanlingextra_level_getItem($typeId, $curStar+1);
+
+        $mo = GameConfig::yanlingextra_level_getItem($typeId, $curStar + 1);
         my_Assert($mo != null, ErrCode::err_const_no);
-        
+
         my_Assert($yanling->$uid->level >= $mo->starlimitLv, ErrCode::hero_yanling_canotTupo);
         my_Assert($user->baseInfo->level >= $mo->userlvLimit, ErrCode::hero_yanling_canotTupo);
-        my_Assert($user->baseInfo->gold >= $mo->gold , ErrCode::notenough_gold_msg); 
-     
-        $costItemsList = explode(';',$mo->costItems);   
+        my_Assert($user->baseInfo->gold >= $mo->gold, ErrCode::notenough_gold_msg);
+
+        $costItemsList = explode(';', $mo->costItems);
         foreach ($costItemsList as $value) {
             $list = explode(',', $value);
-            StoreProc::removeItemFromStore($user->store, $list[0], $list[1]);             
+            StoreProc::removeItemFromStore($user->store, $list[0], $list[1]);
         }
-      
+
         $user->baseInfo->gold -= $mo->gold;
         $yanling->$uid->starLv += 1;
-        
+
         NormalEventProc::OnYanLingLvTuPo($uid, $yanling->$uid->starLv);         # 广播英雄升级事件
-        
+        TaskProc::OnYanlingStarUp($yanling->$uid->starLv);                      # 言灵突破 2021.7.30
+
         $user->store->yanling = $yanling;
         req()->userInfo->game = $user;
-        
-        UserProc::updateUserInfo();                                             # 回写玩家数据 
+
+        UserProc::updateUserInfo();                                             # 回写玩家数据
         return Resp::ok(array(
                     "store" => $user->store, #                                  # 目前来看只涉及到items变化
                     'gold' => $user->baseInfo->gold,
         ));
     }
+
     /**
      * 言灵升级
      * @return type
      */
     static function YanlinUpLevel() {
-        list($uid,$yanlingList, $items) = req()->paras;                                        # 参数 言灵uid(指定进阶的言灵实例id)
+        list($uid, $yanlingList, $items) = req()->paras;                                        # 参数 言灵uid(指定进阶的言灵实例id)
         $user = req()->userInfo->game;
-        $yanling =  $user->store->yanling;
-          
+        $yanling = $user->store->yanling;
+
         my_Assert(CommUtil::isPropertyExists($yanling, $uid), ErrCode::store_weapon_err); # 玩家拥有此英雄
         $myPacketItems = $user->store->items;
         //消耗材料道具
         $total = 0;
         $totalGold = 0;
-        foreach ($items as $costItemId => $costNumber) {       
-            my_Assert(CommUtil::isPropertyExists($myPacketItems,$costItemId), ErrCode::store_itemnotenough); # 
-            my_Assert($myPacketItems->$costItemId >= $costNumber, ErrCode::store_itemnotenough);# 检查道具的数量,在背包中是否充足
+        foreach ($items as $costItemId => $costNumber) {
+            my_Assert(CommUtil::isPropertyExists($myPacketItems, $costItemId), ErrCode::store_itemnotenough); #
+            my_Assert($myPacketItems->$costItemId >= $costNumber, ErrCode::store_itemnotenough); # 检查道具的数量,在背包中是否充足
             $mo = GameConfig::item_stones_getItem($costItemId);
             my_Assert($mo != null, ErrCode::err_const_no);
-            
-            StoreProc::removeItemFromStore($user->store, $costItemId, $costNumber);                      
-            $total += $mo->baseExp*$costNumber;          
-            $totalGold += $mo->costGold*$costNumber;
+
+            StoreProc::removeItemFromStore($user->store, $costItemId, $costNumber);
+            $total += $mo->baseExp * $costNumber;
+            $totalGold += $mo->costGold * $costNumber;
         }
-        
+
         $yanlingExp = 0;
-        //消耗言灵       
+        //消耗言灵
         foreach ($yanlingList as $yanlingId) {
-            my_Assert(CommUtil::isPropertyExists($yanling, $yanlingId), ErrCode::store_weapon_err); # 玩家拥有此英雄             
-            $mo = GameConfig::item_yanling_getItem($yanling->$yanlingId->typeId);           
-            $baseExp = $mo->baseExp;            
-            $yanlingExp += $baseExp + $yanling->$yanlingId->curStarExp *0.75;
+            my_Assert(CommUtil::isPropertyExists($yanling, $yanlingId), ErrCode::store_weapon_err); # 玩家拥有此英雄
+            $mo = GameConfig::item_yanling_getItem($yanling->$yanlingId->typeId);
+            $baseExp = $mo->baseExp;
+            $yanlingExp += $baseExp + $yanling->$yanlingId->curStarExp * 0.75;
             $totalGold += $mo->costGold;
-            StlUtil::dictRemove($user->store->yanling, $yanlingId);  
+            StlUtil::dictRemove($user->store->yanling, $yanlingId);
         }
         my_Assert($user->baseInfo->gold >= $totalGold, ErrCode::notenough_gold_msg);
-        
+
         $equipVo = new Ins_YanLin($yanling->$uid);
-        //$equipVo = new Ins_Weapon($equipment->$uid);      
+        //$equipVo = new Ins_Weapon($equipment->$uid);
         $initLevel = $equipVo->level;
-    
-        $equipVo->curStarExp += $total+(int)$yanlingExp;     
-        $curlevel = StoreProc::Upgrade($equipVo->curStarExp, GameConfig::item_base_getItem($equipVo->typeId)->quality,Enum_UpgradeType::YanLing);      
-        $curStar = $equipVo->starLv ; #当前星级
-        $equipVo->level = $curlevel; 
+
+        $equipVo->curStarExp += $total + (int) $yanlingExp;
+        $curlevel = StoreProc::Upgrade($equipVo->curStarExp, GameConfig::item_base_getItem($equipVo->typeId)->quality, Enum_UpgradeType::YanLing);
+        $curStar = $equipVo->starLv; #当前星级
+        $equipVo->level = $curlevel;
         if ($curStar < 5) {
             $starlimitLv = GameConfig::yanlingextra_level_getItem($equipVo->typeId, $curStar + 1)->starlimitLv;
             if ($starlimitLv < $curlevel) {
-                $equipVo->level = $starlimitLv;                
-                $equipVo->curStarExp = GameConfig::yanlingLevel_type_getItem(GameConfig::item_base_getItem($equipVo->typeId)->quality,$starlimitLv)->requiredExp;
+                $equipVo->level = $starlimitLv;
+                $equipVo->curStarExp = GameConfig::yanlingLevel_type_getItem(GameConfig::item_base_getItem($equipVo->typeId)->quality, $starlimitLv)->requiredExp;
             }
         }
-            
-        $user->store->yanling->$uid = $equipVo;        
+
+        $user->store->yanling->$uid = $equipVo;
         $user->baseInfo->gold -= $totalGold;
         req()->userInfo->game = $user;
         req()->userInfo->game->store->items = $myPacketItems;                    # 更新背包数据
         if ($equipVo->level != $initLevel) {
             NormalEventProc::OnYanLingLvlUp($uid, $equipVo->level);         # 广播英雄升级事件
-        }     
-        
-        UserProc::updateUserInfo();                                             # 回写玩家数据 
+        }
+
+        UserProc::updateUserInfo();                                             # 回写玩家数据
         return Resp::ok(array(
                     "store" => $user->store, #                                  # 目前来看只涉及到items变化
                     'gold' => $user->baseInfo->gold,
         ));
     }
-       
+
     /** 6327
      * 言灵升级  2021.4(cyzhao)
      */

+ 119 - 117
Gameserver/Amfphp/process/StoreProc.php

@@ -13,7 +13,7 @@ class StoreProc {
 
     /**
      * 逻辑分发
-     * 所有的Proc中必须有这样一个方法 
+     * 所有的Proc中必须有这样一个方法
      */
     static function procMain() {
         switch (req()->cmd) {
@@ -41,7 +41,7 @@ class StoreProc {
             case CmdCode::cmd_store_UnWieldEquip:                               # 6411 将该装备从指定英雄上脱下
                 return StoreProc::UnWieldEquip();
 
-// 
+//
             case CmdCode::cmd_store_AddMaxPacketNum:                            # 6412 扩展包裹格子数量
                 return StoreProc::AddPacketNum();
 //            case CmdCode::cmd_store_MeltEquip:                                  # 6413 装备融合
@@ -64,106 +64,107 @@ class StoreProc {
             case CmdCode::cmd_store__weapon_tupo:                               # 6422武器突破
                 return self::weaponTupo();
             case CmdCode::cmd_store__weaponReplace:                             # 6423武器替换
-                return self::weaponReplace();                    
+                return self::weaponReplace();
             default:
                 Err(ErrCode::cmd_err);
         }
     }
+
     /**
      * 武器升级
      */
     static function weaponUpgrade() {
-        list($uid,$wuqiList, $items) = req()->paras;                                        # 参数 言灵uid(指定进阶的言灵实例id)
+        list($uid, $wuqiList, $items) = req()->paras;                                        # 参数 言灵uid(指定进阶的言灵实例id)
         $user = req()->userInfo->game;
-        $equipment =  $user->store->equipment;
-        
+        $equipment = $user->store->equipment;
+
         my_Assert(CommUtil::isPropertyExists($equipment, $uid), ErrCode::store_weapon_err); # 玩家拥有此英雄
         $myPacketItems = $user->store->items;
         //消耗材料道具
         $total = 0;
         $totalGold = 0;
-        foreach ($items as $costItemId => $costNumber) {       
-            my_Assert(CommUtil::isPropertyExists($myPacketItems,$costItemId), ErrCode::store_itemnotenough); # 
-            my_Assert($myPacketItems->$costItemId >= $costNumber, ErrCode::store_itemnotenough);# 检查道具的数量,在背包中是否充足
+        foreach ($items as $costItemId => $costNumber) {
+            my_Assert(CommUtil::isPropertyExists($myPacketItems, $costItemId), ErrCode::store_itemnotenough); #
+            my_Assert($myPacketItems->$costItemId >= $costNumber, ErrCode::store_itemnotenough); # 检查道具的数量,在背包中是否充足
             $mo = GameConfig::item_stones_getItem($costItemId);
             my_Assert($mo != null, ErrCode::err_const_no);
-            
-            StoreProc::removeItemFromStore($user->store, $costItemId, $costNumber);                      
-            $total += $mo->baseExp*$costNumber;          
-            $totalGold += $mo->costGold*$costNumber;
+
+            StoreProc::removeItemFromStore($user->store, $costItemId, $costNumber);
+            $total += $mo->baseExp * $costNumber;
+            $totalGold += $mo->costGold * $costNumber;
         }
-        
+
         $wuqiExp = 0;
-        //消耗武器        
+        //消耗武器
         foreach ($wuqiList as $wuqiId) {
-            my_Assert(CommUtil::isPropertyExists($equipment, $wuqiId), ErrCode::store_weapon_err); # 玩家拥有此英雄             
-            $mo = GameConfig::item_weapon_getItem($equipment->$wuqiId->typeId);           
+            my_Assert(CommUtil::isPropertyExists($equipment, $wuqiId), ErrCode::store_weapon_err); # 玩家拥有此英雄
+            $mo = GameConfig::item_weapon_getItem($equipment->$wuqiId->typeId);
             $baseExp = $mo->baseExp;
             //$needExp = GameConfig::weapon_levelexp_getItem(GameConfig::item_base_getItem($equipment->$wuqiId->typeId)->quality,$equipment->$wuqiId->level)->needExp;
-            $wuqiExp += $baseExp + $equipment->$wuqiId->exp*0.75;
+            $wuqiExp += $baseExp + $equipment->$wuqiId->exp * 0.75;
             $totalGold += $mo->costGold;
-            StlUtil::dictRemove($user->store->equipment, $wuqiId);  
+            StlUtil::dictRemove($user->store->equipment, $wuqiId);
         }
         my_Assert($user->baseInfo->gold >= $totalGold, ErrCode::notenough_gold_msg);
-        
-        $equipVo = new Ins_Weapon($equipment->$uid);      
+
+        $equipVo = new Ins_Weapon($equipment->$uid);
         $initLevel = $equipVo->level;
-               
-        $equipVo->exp += $total+(int)$wuqiExp;     
-        $curlevel = self::Upgrade($equipVo->exp, GameConfig::item_base_getItem($equipVo->typeId)->quality, Enum_UpgradeType::Wuqi);      
-        $curStar = $equipVo->starLevel ; #当前星级
-        $equipVo->level = $curlevel; 
+
+        $equipVo->exp += $total + (int) $wuqiExp;
+        $curlevel = self::Upgrade($equipVo->exp, GameConfig::item_base_getItem($equipVo->typeId)->quality, Enum_UpgradeType::Wuqi);
+        $curStar = $equipVo->starLevel; #当前星级
+        $equipVo->level = $curlevel;
         if ($curStar < 5) {
             $starlimitLv = GameConfig::weaponextra_level_getItem($equipVo->typeId, $curStar + 1)->starlimitLv;
             if ($starlimitLv < $curlevel) {
-                $equipVo->level = $starlimitLv;                
-                $equipVo->xp = GameConfig::weapon_levelexp_getItem(GameConfig::item_base_getItem($equipVo->typeId)->quality,$starlimitLv)->requiredExp;
+                $equipVo->level = $starlimitLv;
+                $equipVo->xp = GameConfig::weapon_levelexp_getItem(GameConfig::item_base_getItem($equipVo->typeId)->quality, $starlimitLv)->requiredExp;
             }
         }
-            
-        $user->store->equipment->$uid = $equipVo;        
+
+        $user->store->equipment->$uid = $equipVo;
         $user->baseInfo->gold -= $totalGold;
         req()->userInfo->game = $user;
         req()->userInfo->game->store->items = $myPacketItems;                    # 更新背包数据
         if ($equipVo->level != $initLevel) {
             NormalEventProc::OnWeaponLvlUp($uid, $equipVo->level);         # 广播英雄升级事件
-        }     
-        
-        UserProc::updateUserInfo();                                             # 回写玩家数据 
+        }
+
+        UserProc::updateUserInfo();                                             # 回写玩家数据
         return Resp::ok(array(
                     "store" => $user->store, #                                  # 目前来看只涉及到items变化
                     'gold' => $user->baseInfo->gold,
         ));
     }
-    
+
     /**
      * 武器升级计算
      * @param type $xp
      * @param type $type
      * @return type
      */
-    static function Upgrade($xp,$qual,$type) {        
-        $curLv = 0;    
-        if($type==Enum_UpgradeType::Wuqi){
+    static function Upgrade($xp, $qual, $type) {
+        $curLv = 0;
+        if ($type == Enum_UpgradeType::Wuqi) {
             $heroLvDic = GameConfig::weapon_levelexp()->$qual;
         } else {
             $heroLvDic = GameConfig::yanlingLevel_type()->$qual;
         }
-                            
-        $f = (array) $heroLvDic;     
-        ksort($f);             
-        foreach ($f as $lv => $mo) {           
-            if($xp < $mo->requiredExp){
-                $curLv = $lv-1;
+
+        $f = (array) $heroLvDic;
+        ksort($f);
+        foreach ($f as $lv => $mo) {
+            if ($xp < $mo->requiredExp) {
+                $curLv = $lv - 1;
                 break;
             }
-                      
+
 //            if($lv>=glc()->Weapon_Upgrade_BasicMaxLevel){
 //                $curLv = glc()->Weapon_Upgrade_BasicMaxLevel;
 //                break;
 //            }
         }
-                   
+
         return $curLv;
     }
 
@@ -175,68 +176,69 @@ class StoreProc {
         $user = req()->userInfo->game;
         $equipment = $user->store->equipment;
         my_Assert(CommUtil::isPropertyExists($equipment, $uid), ErrCode::store_weapon_err); # 玩家拥有此英雄
-        
+
         $typeId = $equipment->$uid->typeId;
         $curStar = $equipment->$uid->starLevel;
         my_Assert($curStar < 5, ErrCode::hero_yanling_canotTupo);
-        
-        $mo = GameConfig::weaponextra_level_getItem($typeId, $curStar+1);
+
+        $mo = GameConfig::weaponextra_level_getItem($typeId, $curStar + 1);
         my_Assert($mo != null, ErrCode::err_const_no);
-        
+
         my_Assert($equipment->$uid->level >= $mo->starlimitLv, ErrCode::hero_yanling_canotTupo);
         my_Assert($user->baseInfo->level >= $mo->userlvLimit, ErrCode::hero_yanling_canotTupo);
-        my_Assert($user->baseInfo->gold >= $mo->gold , ErrCode::notenough_gold_msg); 
+        my_Assert($user->baseInfo->gold >= $mo->gold, ErrCode::notenough_gold_msg);
 //        $segID = $mo->segID;
-//        my_Assert(StlUtil::dictHasProperty($user->store->items,$segID) , ErrCode::store_itemnotenough); 
-//        my_Assert($user->store->items->$segID>=$mo->segNum , ErrCode::store_itemnotenough); 
-        
-        $costItemsList = explode(';',$mo->costItems);   
+//        my_Assert(StlUtil::dictHasProperty($user->store->items,$segID) , ErrCode::store_itemnotenough);
+//        my_Assert($user->store->items->$segID>=$mo->segNum , ErrCode::store_itemnotenough);
+
+        $costItemsList = explode(';', $mo->costItems);
         foreach ($costItemsList as $value) {
             $list = explode(',', $value);
-            StoreProc::removeItemFromStore($user->store, $list[0], $list[1]);             
+            StoreProc::removeItemFromStore($user->store, $list[0], $list[1]);
         }
-      
+
         $user->baseInfo->gold -= $mo->gold;
         $equipment->$uid->starLevel += 1;
-        
+
         NormalEventProc::OnWeaponLvTuPo($uid, $equipment->$uid->starLevel);         # 广播英雄升级事件
-        
+        TaskProc::OnWeaponStarUp($equipment->$uid->starLevel);
+
         $user->store->equipment = $equipment;
         req()->userInfo->game = $user;
-        
-        UserProc::updateUserInfo();                                             # 回写玩家数据 
+
+        UserProc::updateUserInfo();                                             # 回写玩家数据
         return Resp::ok(array(
                     "store" => $user->store, #                                  # 目前来看只涉及到items变化
                     'gold' => $user->baseInfo->gold,
         ));
     }
+
     /**
      * 武器替换
      * @return type
      */
     static function weaponReplace() {
-        list($uid ,$replaceId) = req()->paras;                                  # 参数 言灵uid(指定进阶的言灵实例id)
+        list($uid, $replaceId) = req()->paras;                                  # 参数 言灵uid(指定进阶的言灵实例id)
         $user = req()->userInfo->game;
         $equipment = $user->store->equipment;
         my_Assert(property_exists($equipment, $uid), "找不到这个言灵");
         my_Assert(property_exists($equipment, $replaceId), "找不到这个言灵");
-        
-        
+
         $herouid = $equipment->$uid->herouid;
         $herouid_replace = $equipment->$replaceId->herouid;
         $equipment->$replaceId->herouid = $herouid;
         $equipment->$uid->herouid = $herouid_replace;
         $user->store->equipment = $equipment;
         req()->userInfo->game = $user;
-        
-        UserProc::updateUserInfo();                                             # 回写玩家数据 
+
+        UserProc::updateUserInfo();                                             # 回写玩家数据
         return Resp::ok(array(
                     "store" => $user->store, #                                  # 目前来看只涉及到items变化
         ));
     }
 
     /**
-     * [6420] 言灵进阶 
+     * [6420] 言灵进阶
      */
     static function YanlingUpgrade() {
         list($yanlingUid) = req()->paras;                                        # 参数 言灵uid(指定进阶的言灵实例id)
@@ -248,7 +250,7 @@ class StoreProc {
         $toGrade = $curGrade + 1;                                               # 下一等阶
         my_Assert($toGrade <= 5, ErrCode::store_yanlingGrade_max);              # 已经进阶到最高
         $toGradeCfg = GameConfig::yanling_upgrade_getItem($yanlingMoId, $toGrade); # 下一阶配置
-        my_Assert(null != $toGradeCfg, ErrCode::err_const_no);                  # 找不到言灵进阶常量 
+        my_Assert(null != $toGradeCfg, ErrCode::err_const_no);                  # 找不到言灵进阶常量
         $costs = explode(';', $toGradeCfg->cost_materials);
         my_Assert(count($costs) > 0, ErrCode::store_yanlingGrade_cfg);          # 言灵进阶数据有误
         foreach ($costs as $c) {
@@ -257,15 +259,15 @@ class StoreProc {
             my_Assert(ErrCode::ok == $err, $err);                               # 防御扣除材料失败
         }
         $yanlingObj->grade = $toGrade;                                          # 修改进阶
-        $user->store->yanling->$yanlingUid = $yanlingObj;                       # 回写言灵数据 
-        UserProc::updateUserInfo();                                             # 回写玩家数据 
+        $user->store->yanling->$yanlingUid = $yanlingObj;                       # 回写言灵数据
+        UserProc::updateUserInfo();                                             # 回写玩家数据
         return Resp::ok(array(
                     "store" => $user->store, #                                  # 目前来看只涉及到items变化
         ));
     }
 
     /**
-     * [6418] 利用言灵召唤书碎片合成召唤书 
+     * [6418] 利用言灵召唤书碎片合成召唤书
      */
     static function MergeYanlingBook() {
         list($bookId) = req()->paras;                                            # 参数 言灵召唤书id
@@ -276,14 +278,14 @@ class StoreProc {
         $err = self::removeItemFromStore($user->store, $segId, $num);           # 扣除 碎片
         my_Assert(ErrCode::ok == $err, $err);                                   # 防御扣除碎片失败
         self::PutOverlyingItemInStore($bookId);                                 # 添加召唤书
-        UserProc::updateUserInfo();                                             # 回写数据 
+        UserProc::updateUserInfo();                                             # 回写数据
         return Resp::ok(array(
                     "store" => $user->store, #                                  # 目前来看只涉及到items变化
         ));
     }
 
     /**
-     * [6419] 利用言灵召唤书召唤言灵 
+     * [6419] 利用言灵召唤书召唤言灵
      */
     static function CallYanlingByBook() {
         list($bookId) = req()->paras;                                            # 参数 利用的言灵召唤书id
@@ -299,15 +301,15 @@ class StoreProc {
             $err = self::removeItemFromStore($user->store, $itemId, $num);      # 扣除 材料
             my_Assert(ErrCode::ok == $err, $err);                               # 防御扣除材料失败
         }
-        self::PutYanLingInStore($bookIdCfg->yanling_id);                        # 添加言灵 
-        UserProc::updateUserInfo();                                             # 回写数据 
+        self::PutYanLingInStore($bookIdCfg->yanling_id);                        # 添加言灵
+        UserProc::updateUserInfo();                                             # 回写数据
         return Resp::ok(array(
                     "store" => $user->store, #                                  # 目前来看只涉及到items变化
         ));
     }
 
     /**
-     * 测试方法 
+     * 测试方法
      * @return type
      */
     static public function Test() {
@@ -315,14 +317,14 @@ class StoreProc {
     }
 
     /**
-     * [6404] 使用仓库道具 
+     * [6404] 使用仓库道具
      */
     static function useItem() {
         Err(ErrCode::msg_method_obsoleted, "代码需更新");
     }
 
     /**
-     * [6405] 刷新仓库列表 
+     * [6405] 刷新仓库列表
      */
     static function refreshStore() {
         StoreProc::CheckItemNum();
@@ -330,7 +332,7 @@ class StoreProc {
     }
 
     /**
-     * [6406] 从仓库删除道具 
+     * [6406] 从仓库删除道具
      */
     static function delItemFromStore() {
         list($itemId, $num) = req()->paras;
@@ -348,7 +350,7 @@ class StoreProc {
     }
 
     /**
-     * [6409] 合成碎片(几个碎片合成获得同品质或者更高品质的新碎片) 
+     * [6409] 合成碎片(几个碎片合成获得同品质或者更高品质的新碎片)
      */
     static public function composePieces() {
         Err(ErrCode::err_method_notimplement);
@@ -445,7 +447,7 @@ class StoreProc {
 
     /**
      * 解包多种物品到玩家身上 【警告】此函数的异常处理功能残废,不安全
-     * 检测如果当前物品格子大于物品总数,则可以获取战利品,否则不可以 
+     * 检测如果当前物品格子大于物品总数,则可以获取战利品,否则不可以
      * @param string $goodsStr itemid,num;itemid,num;...
      * @param int $src 1:战斗奖励, 2: 任务奖励, 3: 抽奖奖品, 4: 邮件领取, 5: 现金充值
      * @deprecated since version 0
@@ -473,7 +475,7 @@ class StoreProc {
 //                    Data_UserGame::Add_Cash($user->baseInfo, $num);
                     $user->base()->Add_Cash($num);                              # 增加钻石
                     break;
-                case META_tili_ITEMID:                                          # 体力       
+                case META_tili_ITEMID:                                          # 体力
 //                    Data_UserGame::Add_tili($num);
                     $user->base()->Add_tili($num);                              # 增加体力
                     break;
@@ -491,7 +493,7 @@ class StoreProc {
                     $user->base()->Add_resPoint($num);                          # 增加资源点
 //                    Data_UserGame::Add_resPoint($user->baseInfo, $num);         # 资源点添加
                     break;
-                case 101:                                                       # 武器 
+                case 101:                                                       # 武器
                     for ($n = 0; $n < $num; $n++) {
                         $cid = StoreProc::PutEquipInStore($itemId);
                     }
@@ -503,7 +505,7 @@ class StoreProc {
                     }
                     CornerSignEventProc::OnBag_new_Yanling();
                     break;
-                case 501:                                                       # 限购礼包 
+                case 501:                                                       # 限购礼包
                     $itemMO = GameConfig::item_package_getItem($itemId);
                     my_Assert(null != $itemMO, ErrCode::err_const_no);
                     $err = StoreProc::AddMultiItemInStore($itemMO->contents);         # 发放奖励
@@ -513,13 +515,13 @@ class StoreProc {
                     $cid = StoreProc::PutTaskCardInStore($itemId);
                     break;
                 case 201:                                                       # 碎片
-                    $segMo = GameConfig::item_segment_getItem($itemId);                   
-                    my_Assert($segMo != null, ErrCode::err_const_no);                 
-                    TaskProc::OnHeroSegmengNum($segMo->protoHeroID, $num);                  
-                    CornerSignEventProc::OnBag_new_Fragment();   
+                    $segMo = GameConfig::item_segment_getItem($itemId);
+                    my_Assert($segMo != null, ErrCode::err_const_no);
+                    TaskProc::OnHeroSegmengNum($segMo->protoHeroID, $num);
+                    CornerSignEventProc::OnBag_new_Fragment();
                     StoreProc::PutOverlyingItemInStore($itemId, $num);          # 直接进包裹items
                     break;
-                case 202:                                                       # 召唤书碎片                           
+                case 202:                                                       # 召唤书碎片
                 case 351:                                                       # 言灵召唤书
                     StoreProc::PutOverlyingItemInStore($itemId, $num);          # 直接进包裹items
                     $book = GameConfig::item_yanlingbook_getItem($itemId);
@@ -548,7 +550,7 @@ class StoreProc {
                 case 333:
                 case 325:
                 case 326:
-                case 327:  
+                case 327:
                 case 328:
                 case 329:
                 case 330:
@@ -575,7 +577,7 @@ class StoreProc {
     }
 
     /**
-     * [6401]向包裹中添加物品 
+     * [6401]向包裹中添加物品
      */
     public static function AddItemInStore() {
         list($rwdStr) = req()->paras;
@@ -593,7 +595,7 @@ class StoreProc {
 
     /**
      * 将装备放入背包
-     * @param type $itemId 
+     * @param type $itemId
      */
     static function PutEquipInStore($itemId) {
         $privateState = req()->userInfo->game->privateState;
@@ -602,7 +604,7 @@ class StoreProc {
         }
         $cid = req()->userInfo->game->privateState->currentId++;
         //$equip = ObjectInit();
-        $equip = new Ins_Weapon();       
+        $equip = new Ins_Weapon();
         $equip->typeId = $itemId;
         req()->userInfo->game->store->equipment->$cid = $equip;
         return $cid;
@@ -611,7 +613,7 @@ class StoreProc {
 
     /**
      * 将言灵放入背包
-     * @param type $itemId 
+     * @param type $itemId
      */
     static function PutYanLingInStore($itemId) {
         my_Assert(count((array) req()->userInfo->game->store->yanling) < 100, ErrCode::store_yanling_bagfull);
@@ -629,7 +631,7 @@ class StoreProc {
 
     /**
      * 将任务卡放入背包
-     * @param type $itemId 
+     * @param type $itemId
      */
     static function PutTaskCardInStore($itemId) {
         $privateState = req()->userInfo->game->privateState;
@@ -688,7 +690,7 @@ class StoreProc {
 
     /**
      * 物品包裹打散成独立道具到仓库
-     * @param GoodsItemModel $itemModel 
+     * @param GoodsItemModel $itemModel
      * @deprecated since version now
      */
     static function addSeprateItem($itemModel) {
@@ -700,11 +702,11 @@ class StoreProc {
      */
     static function WearYanlingToHero() {
         $user = req()->userInfo->game;                                           # user引用
-        list($itemtype, $yanling_uid, $herouid) = req()->paras;                  # 提取参数: 装备类型, 装备的UID, 英雄的UID 
+        list($itemtype, $yanling_uid, $herouid) = req()->paras;                  # 提取参数: 装备类型, 装备的UID, 英雄的UID
         my_Assert(CommUtil::isPropertyExists($user->store->yanling, $yanling_uid), ErrCode::store_itemno_err); # 检测是否存在该言灵
         $yanlingVo = new Ins_YanLin($user->store->yanling->$yanling_uid);       # 取言灵对象
         if (isset($yanlingVo->herouid) && $yanlingVo->herouid > 0               #
-                && $yanlingVo->herouid != $herouid) {                           # 检测该言灵是否装备到其他英雄身上 
+                && $yanlingVo->herouid != $herouid) {                           # 检测该言灵是否装备到其他英雄身上
             Err(ErrCode::store_equipWeared_err);
         }
         $collectHeros = $user->heros->collectHeros;                             # 英雄集合
@@ -723,18 +725,18 @@ class StoreProc {
         UserProc::updateUserInfo();                                             # 5.回写数据
         $ret = array('resp' => "succeed!",
             'store' => $user->store);
-        $resp = Resp::ok($ret);                                                 // 返回 
+        $resp = Resp::ok($ret);                                                 // 返回
         HeroProc::CalcUserFightPower(req()->zoneid, req()->uid, $user);           # 更新总战力榜
         return $resp;
     }
 
     /**
-     * [6417] 给英雄卸下言灵 
+     * [6417] 给英雄卸下言灵
      * @deprecated since version 无法卸下,只能更换
      */
     static function UnWieldYanling() {
         $user = req()->userInfo->game;                                           # user引用
-        list($itemtype, $yanling_uid, $herouid) = req()->paras;                  # 提取参数: 装备类型, 装备的UID, 拥有该装备的英雄的UID 
+        list($itemtype, $yanling_uid, $herouid) = req()->paras;                  # 提取参数: 装备类型, 装备的UID, 拥有该装备的英雄的UID
 
         $collectHeros = $user->heros->collectHeros;
         my_Assert(null != $collectHeros, ErrCode::err_innerfault);              # 防御
@@ -752,20 +754,20 @@ class StoreProc {
         $collectHeros->$herouid->yanling->$itemtype->itemuid = 0;               # 卸下
 
         UserProc::updateUserInfo();                                             # 回写数据
-        $resp = Resp::ok(array('resp' => "succeed!"));                          // 返回 
+        $resp = Resp::ok(array('resp' => "succeed!"));                          // 返回
 //        StoreProc::CheckItemNum($req);
         return $resp;
     }
 
     /**
-     * [6410] 给英雄穿装备 
+     * [6410] 给英雄穿装备
      */
     static function WearEquipToHero() {
-        list($itemtype, $equipuid, $herouid) = req()->paras;                    # 提取参数: 装备类型, 装备的UID, 英雄的UID  
+        list($itemtype, $equipuid, $herouid) = req()->paras;                    # 提取参数: 装备类型, 装备的UID, 英雄的UID
         $user = req()->userInfo->game;                                          # user引用
         my_Assert(CommUtil::isPropertyExists($user->store->equipment, $equipuid), ErrCode::store_itemno_err);  # 检测是否存在该装备
         $equipVo = new Ins_Weapon($user->store->equipment->$equipuid);          # 取装备对象
-        if ($equipVo->herouid > 0) {                                            # 检测该装备是否装备到其他英雄身上 
+        if ($equipVo->herouid > 0) {                                            # 检测该装备是否装备到其他英雄身上
             my_Assert($equipVo->herouid == $herouid, ErrCode::store_equipWeared_err);
             $user->store->equipment->$equipuid->herouid = 0;                    # 清理原来已经装备的言灵的反指向
         }
@@ -777,15 +779,15 @@ class StoreProc {
         $user->store->equipment->$equipuid->herouid = $herouid;                 # 装备上添加反向引用, 避免查询时的循环
         $oldEquipId = 0;
         switch ($itemtype) {                                                    # 添加或替换英雄该部位的装备
-            case 1:                                                             # 武器   
+            case 1:                                                             # 武器
                 $oldEquipId = $collectHeros->$herouid->equip->weapon->itemuid;
                 $collectHeros->$herouid->equip->weapon->itemuid = $equipuid;
                 break;
-            case 2:                                                             # 防具 
+            case 2:                                                             # 防具
                 $oldEquipId = $collectHeros->$herouid->equip->armor->itemuid;
                 $collectHeros->$herouid->equip->armor->itemuid = $equipuid;
                 break;
-            case 3:                                                             # 饰品   
+            case 3:                                                             # 饰品
                 $oldEquipId = $collectHeros->$herouid->equip->ring->itemuid;
                 $collectHeros->$herouid->equip->ring->itemuid = $equipuid;
                 break;
@@ -801,15 +803,15 @@ class StoreProc {
         TaskProc::OnHeroWearWeapon($collectHeros->$herouid->typeId, $user->store->equipment->$equipuid->typeId);
         HeroProc::CalcUserFightPower(req()->zoneid, req()->uid, $user);           # 更新总战力榜
         return Resp::ok(array('resp' => "succeed!",
-                    'store' => $user->store));                           // 返回 
+                    'store' => $user->store));                           // 返回
     }
 
     /**
      * [6411] 给英雄脱装备
-     * @deprecated since version 不能卸下装备, 只能更换.  
+     * @deprecated since version 不能卸下装备, 只能更换.
      */
     static function UnWieldEquip() {
-        list($itemtype, $equipuid, $herouid) = req()->paras;                    # 提取参数: 装备类型, 装备的UID, 拥有该装备的英雄的UID 
+        list($itemtype, $equipuid, $herouid) = req()->paras;                    # 提取参数: 装备类型, 装备的UID, 拥有该装备的英雄的UID
         $user = req()->userInfo->game;                                          # user引用
 
         $collectHeros = $user->heros->collectHeros;
@@ -820,7 +822,7 @@ class StoreProc {
             $user->store->equipment->$equipuid->herouid = 0;
         }
         switch ($itemtype) {                                                    # 检测该装备是否装备在该英雄身上
-            case 1:                                                             # 武器 
+            case 1:                                                             # 武器
                 if ($collectHeros->$herouid->equip->weapon->itemuid != $equipuid) {
                     Err(ErrCode::store_noequip_err);
                 }
@@ -841,14 +843,14 @@ class StoreProc {
             default :
                 Err(ErrCode::store_equip_type);
         }
-        UserProc::updateUserInfo();                                             # 回写数据 
+        UserProc::updateUserInfo();                                             # 回写数据
         return Resp::ok(array('resp' => "succeed!"));                           // 返回
     }
 
 // </editor-fold>
 //
 // <editor-fold defaultstate="collapsed" desc="    辅助方法    ">
-//    
+//
 
     /**
      * 检查背包中物品的个数
@@ -927,9 +929,9 @@ class StoreProc {
     }
 
 // </editor-fold>
-//  
+//
 // <editor-fold defaultstate="collapsed" desc="   出售   ">
-// 
+//
 
     /**
      * 出售单一的物品
@@ -939,7 +941,7 @@ class StoreProc {
     }
 
     /**
-     * 卖出一堆物品时候,检测每个单个物品是否符合卖的条件 
+     * 卖出一堆物品时候,检测每个单个物品是否符合卖的条件
      */
     static function preSellSingleFromStore($type, $itemId, $count, $uid) {
         Err(ErrCode::err_method_obsoleted, "代码需要更新");
@@ -950,7 +952,7 @@ class StoreProc {
      */
     static function sellMultiItemFromStore() {
         Err(ErrCode::err_method_obsoleted, "代码需要更新");
-        $obj = req()->paras[0];                                                  // 获取物品的结构数组  
+        $obj = req()->paras[0];                                                  // 获取物品的结构数组
         foreach ($obj as $value) {
             $type = $value[0];
             $itemId = $value[1];

+ 55 - 11
Gameserver/Amfphp/process/TaskProc.php

@@ -528,6 +528,7 @@ class TaskProc {
      * [6201]更新任务状态
      */
     static function GetTaskInfo() {
+        self::autoRecoverStateMissions();                                       # 重新更新其它状态类的任务卡
         return Resp::ok(array("task" => req()->userInfo->game->task));
     }
 
@@ -724,7 +725,11 @@ class TaskProc {
      */
     static function OnHeroWearYanling($heroMoid, $yanlingMoId) {
         $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::HeroWearupYanling, Enum_PropelType::set, 1, array($heroMoid, $yanlingMoId));
-        self::CheckTaskCardConditions($taskEventArg);
+        self::CheckTaskCardConditions($taskEventArg);                           # 检查装备言灵任务
+        $ylmo = GameConfig::item_base_getItem($yanlingMoId);
+        my_Assert(null != $ylmo, ErrCode::err_const_no);
+        $taskEventArg2 = new Ins_TaskEventArgs(Enum_TaskCmdType::HeroWearUpXYanlingWithQualityN, Enum_PropelType::add, 1, array($ylmo->quality));
+        self::CheckTaskCardConditions($taskEventArg2);                          # 检查装备x个n品质言灵任务
     }
 
     /**
@@ -741,6 +746,16 @@ class TaskProc {
         self::CheckTaskCardConditions($taskEventArg);
     }
 
+    /**
+     * 通关材料副本第n层
+     * @param type $gateId
+     * @param type $level
+     */
+    static function OnPassMaterialCarbonN($gateId, $level) {
+        $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::PassMaterialCarbonN, Enum_PropelType::set, 1, array($gateId, $level));
+        self::CheckTaskCardConditions($taskEventArg);
+    }
+
     /**
      * 通关无尽塔副本关卡
      * @param type $gateId
@@ -959,7 +974,7 @@ class TaskProc {
      */
     static function OnPlotOver($gate_or_npc_id, $stage) {
         $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::PlotOver, Enum_PropelType::set, 1, array($gate_or_npc_id, "$stage"));
-        return self::CheckTaskCardConditions($taskParam);
+        self::CheckTaskCardConditions($taskParam);
     }
 
     /**
@@ -969,16 +984,23 @@ class TaskProc {
      */
     static function OnBuyTaskCard($_num = 1) {
         $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::BuyTaskCard_Num, Enum_PropelType::add, $_num, array());
-        return self::CheckTaskCardConditions($taskParam);
+        self::CheckTaskCardConditions($taskParam);
     }
 
     /**
      * 完成任务卡(不指定) 这是要造检查任务卡的任务卡[・_・?]
-     * @return type
+     * @param Ins_TaskCard $taskCard
      */
-    static function OnFinishTaskCard() {
+    static function OnFinishTaskCard($taskCard) {
         $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::FinishTaskCard_noID, Enum_PropelType::set, 1, array());
-        return self::CheckTaskCardConditions($taskParam);
+        self::CheckTaskCardConditions($taskParam);
+        $cardBase = GameConfig::item_base_getItem($taskCard->mo()->typeId);
+        $taskParam2 = new Ins_TaskEventArgs(Enum_TaskCmdType::FinishXCardWithQualityN, Enum_PropelType::add, 1, array($cardBase->quality));
+        self::CheckTaskCardConditions($taskParam2);
+        if ($taskCard->mo()->cardType == "言灵") {
+            $taskParam3 = new Ins_TaskEventArgs(Enum_TaskCmdType::FinishXYanlingCardAboutQualityN, Enum_PropelType::add, 1, array($cardBase->quality));
+            self::CheckTaskCardConditions($taskParam3);
+        }
     }
 
     /**
@@ -988,7 +1010,7 @@ class TaskProc {
      */
     static function OnDrawSysMail($mailId) {
         $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::DrawSysMail_ID, Enum_PropelType::set, 1, array($mailId));
-        return self::CheckTaskCardConditions($taskParam);
+        self::CheckTaskCardConditions($taskParam);
     }
 
     /**
@@ -999,7 +1021,29 @@ class TaskProc {
      */
     static function OnYanlingLevelUp($yanlingType, $level) {
         $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::AnyYanlingLevelUp, Enum_PropelType::set, 1, array($yanlingType, $level));
-        return self::CheckTaskCardConditions($taskParam);
+        self::CheckTaskCardConditions($taskParam);
+    }
+
+    /**
+     * 言灵升星(突破)
+     * @param type $newStar
+     */
+    static function OnYanlingStarUp($newStar) {
+        $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::UpgradeXYanlingToNStar, Enum_PropelType::add, 1, array($newStar));
+        self::CheckTaskCardConditions($taskParam);
+    }
+
+    static function OnWeaponUpgrade() {
+
+    }
+
+    /**
+     * 武器突破
+     * @param type $newStar
+     */
+    static function OnWeaponStarUp($newStar) {
+        $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::UpgradeXWeaponToNStar, Enum_PropelType::add, 1, array($newStar));
+        self::CheckTaskCardConditions($taskParam);
     }
 
     /**
@@ -1007,7 +1051,7 @@ class TaskProc {
      */
     static function OnGetSchoolTask() {
         $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::GetSchoolTask, Enum_PropelType::set, 1, array());
-        return self::CheckTaskCardConditions($taskParam);
+        self::CheckTaskCardConditions($taskParam);
     }
 
     /**
@@ -1015,7 +1059,7 @@ class TaskProc {
      */
     static function OnFinishSchoolTask() {
         $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::FinishSchoolTask, Enum_PropelType::set, 1, array());
-        return self::CheckTaskCardConditions($taskParam);
+        self::CheckTaskCardConditions($taskParam);
     }
 
     /**
@@ -1024,7 +1068,7 @@ class TaskProc {
      */
     static function OnFinishAllSchoolTaskOfGrade($courseId) {
         $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::FinishAllSchoolTaskOfGrade, Enum_PropelType::set, 1, array($courseId));
-        return self::CheckTaskCardConditions($taskParam);
+        self::CheckTaskCardConditions($taskParam);
     }
 
     //

+ 1 - 1
Gameserver/Amfphp/test.php

@@ -14,4 +14,4 @@ echoLine("phpver: " . PHP_VERSION . PHP_EOL);
 //
 //var_dump(date('YmdH'));
 
- 
+var_dump(ceil(3.6));