浏览代码

各个功能文件

cyzhao 1 年之前
父节点
当前提交
12014d3d92

+ 41 - 3
Gameserver/App/base/CmdCode.php

@@ -84,12 +84,50 @@ class CmdCode {
     /**
      * 常量信息指令
      */
-    const cmd_user_gameconstinfo = 6002;
+    const cmd_user_gameconstinfo = 6002; 
+            
+    // </editor-fold>
+    
+    // <editor-fold defaultstate="collapsed" desc="活动操作码 - 61xx">
+    
+    const cmd_active_sign = 6101;
+    
+    
+    // </editor-fold>
+          
+    // <editor-fold defaultstate="collapsed" desc="任务操作码 - 62xx">
+    
+    /**
+     * [6201] 任务 - 拉取最新任务信息
+     */
+    const cmd_task_getInfo = 6201;
 
     /**
-     *  注册新用户
+     * [6202] 任务 - 领取任务奖励
      */
-    //const cmd_user_registerNewRole = 6003;
+    const cmd_task_getReward = 6202;
+    
+    
+    // </editor-fold>
+    
+    // <editor-fold defaultstate="collapsed" desc="邮件操作码 - 63xx">
+    
+    const cmd_email_questEmailList = 6301;
+
+         
+    // </editor-fold>
+    
+    // <editor-fold defaultstate="collapsed" desc="背包操作码 - 64xx">
+    
+    const cmd_store_put = 6401;
+    
+    
+    // </editor-fold>
+    
+    // <editor-fold defaultstate="collapsed" desc="战斗操作码 - 68xx">
+    
+    const cmd_fight_settle = 6801;
+    
     
     // </editor-fold>
     

+ 1 - 1
Gameserver/App/model/User/Data_UserGame.php

@@ -32,7 +32,7 @@ class Data_UserGame extends HashSaver {
      */
     public function initialize() {
         //my_Assert(GameConfig::primordial_data(), "找不到账号初始化数据");         # 防御
-        $this->baseInfo = new Info_UserBase();
+        //$this->baseInfo = new Info_UserBase();
         $this->baseInfo->initialize();
     }
 

+ 34 - 0
Gameserver/App/process/ActiveProc.php

@@ -0,0 +1,34 @@
+<?php
+
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+namespace loyalsoft;
+
+/**
+ * Description of ActiveProc
+ *
+ * @author c'y'zhao
+ */
+class ActiveProc {
+    /**
+     * 逻辑分发
+     * 所有的Proc中必须有这样一个方法
+     * @param Req $req
+     */
+    public static function procMain($req) {
+        switch ($req->cmd) {
+            case CmdCode::cmd_active_sign:                                      # 6101 签到
+                return ActiveProc::sign();        
+            default:
+                Err(ErrCode::cmd_err);
+        }
+    }
+    
+    public static function sign() {
+        
+    }
+}

+ 35 - 0
Gameserver/App/process/FightProc.php

@@ -0,0 +1,35 @@
+<?php
+
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+namespace loyalsoft;
+
+/**
+ * Description of FightProc
+ *
+ * @author c'y'zhao
+ */
+class FightProc {
+    /**
+     * 逻辑分发
+     * 所有的Proc中必须有这样一个方法
+     * @param Req $req
+     */
+    public static function procMain($req) {
+        switch ($req->cmd) {
+            case CmdCode::cmd_fight_settle:                                     # 6801 
+                return FightProc::GetZoneList();           
+            default:
+                Err(ErrCode::cmd_err);
+        }
+    }
+    
+    public static function FightSettle() {
+        
+    }
+    
+}

+ 32 - 2096
Gameserver/App/process/StoreProc.php

@@ -1,2098 +1,34 @@
 <?php
 
-//
-//namespace loyalsoft;
-//
-///**
-// * Description of StoreProc
-// * 仓库/背包 处理流程
-// * ===========================
-// * 尚待处理的流程:道具售出时貌似存在多种格式....
-// * @author
-// */
-//class StoreProc {
-//
-//    /**
-//     * 逻辑分发
-//     * 所有的Proc中必须有这样一个方法
-//     */
-//    static function procMain() {
-//        switch (req()->cmd) {
-//            case CmdCode::cmd_store_put:                                        # 6401 放入仓库
-//                return StoreProc::AddItemInStore();
-//            case CmdCode::cmd_store_singleSell:                                 # 6402 出售单个道具
-//                return StoreProc::sellItem();
-//            case CmdCode::cmd_store_mutliSell:                                  # 6403 批量出售 卖掉
-//                return StoreProc::sellMultiItemFromStore();
-//            case CmdCode::cmd_store_use:                                        # 6404 使用道具
-//                return StoreProc::useItem();
-//            case CmdCode::cmd_store_refresh:                                    # 6405 获取最新的仓库数据
-//                return StoreProc::refreshStore();
-//            case CmdCode::cmd_store_delItem:                                    # 6406 从仓库删除道具
-//                return StoreProc::delItemFromStore();
-//            case CmdCode::cmd_store_Testcmd:                                    # 6407 测试方法
-//                return StoreProc::Test();
-////            case CmdCode::cmd_store_ItemUpgrade:                                # 6408 装备升级
-////                return StoreProc::ItemUpgrade($req);
-////            case CmdCode::cmd_store_GemCompose:                                 # 6408 装备合成
-////                return StoreProc::composeItem($req);
-////
-//            case CmdCode::cmd_store_WearEquip:                                  # 6410 给英雄穿装备
-//                return StoreProc::WearEquipToHero();
-//            case CmdCode::cmd_store_UnWieldEquip:                               # 6411 将该装备从指定英雄上脱下
-//                return StoreProc::UnWieldEquip();
-//
-////
-//            case CmdCode::cmd_store_AddMaxPacketNum:                            # 6412 扩展包裹格子数量
-//                return StoreProc::AddPacketNum();
-////            case CmdCode::cmd_store_MeltEquip:                                  # 6413 装备融合
-////                Err(ErrCode::err_method_obsoleted);
-//////                return StoreProc::MeltEquip($req);
-////            case CmdCode::cmd_store_PiecesCompose:                              # 6415 碎片合成
-////                return StoreProc::composePieces($req);
-//            case CmdCode::cmd_store_WearYanling:                                # 6416 装备言灵
-//                return StoreProc::WearYanlingToHero();
-//            case CmdCode::cmd_store_UnWieldYanling:                             # 6417 卸下言灵
-//                return StoreProc::UnWieldYanling();
-//            case CmdCode::cmd_store_mergeYanlingbook:                           # 6418 利用言灵召唤书碎片合成召唤书
-//                return self::MergeYanlingBook();
-//            case CmdCode::cmd_store_callyanling:                                # 6419 利用言灵召唤书召唤言灵
-//                return self::CallYanlingByBook();
-//            case CmdCode::cmd_store_yanling_upgrade:                            # 6420 言灵进阶
-//                return self::YanlingUpgrade();
-//            case CmdCode::cmd_store__weapon_upgrade:                            # 6421武器升级
-//                return self::weaponUpgrade();
-//            case CmdCode::cmd_store__weapon_tupo:                               # 6422武器突破
-//                return self::weaponTupo();
-//            case CmdCode::cmd_store_weaponReplace:                              # 6423武器替换
-//                return self::weaponReplace();
-//            case CmdCode::cmd_store_GemCompose:                                 #6424
-//                return StoreProc::GemComposeItem();
-//            case CmdCode::cmd_store_GemResearchLvUp:                            # 6425
-//                return StoreProc::GemResearchLvUp();
-//            case CmdCode::cmd_store_GemSet:                                     #6426 宝石镶嵌
-//                return StoreProc::GemSetYanLing();
-//            case CmdCode::cmd_store_GemRemove:
-//                return StoreProc::GemRemoveYanLing();
-//            case CmdCode::cmd_store_unlockStore:
-//                return StoreProc::unlockStore();
-//            case CmdCode::cmd_store_buyWeapon:                                  #6429
-//                return self::buyWeapon();
-//            case CmdCode::cmd_store_getShopWeapon:                              # 6430
-//                return self::getShopWeapon();
-//            case CmdCode::cmd_store_buySupplies:                                #6431 购买补给品
-//                return self::buySupplies();
-//            case CmdCode::cmd_store_expandStorage:                              # 6432
-//                return self::expandStorage();
-//            case CmdCode::cmd_store_changeStorage:                              # 6433
-//                return self::changeStorage();
-//            case CmdCode::cmd_store_changeBettleItem:                           # 6434
-//                return self::changeBettleItem();
-//            case CmdCode::cmd_store_useBettleItem:                              # 6435
-//                return self::useBettleItem();
-//            case CmdCode::cmd_store_setBettleItemUseVal:                        # 6436cmd_store_removeItem
-//                return self::setBettleItemUseVal();
-//            case CmdCode::cmd_store_removeItem:                                 # 6437 删除所有类型道具cmd_store_killMosterAddData
-//                return self::removeItem();
-//            case CmdCode::cmd_store_killMosterAddData:                          # 6438 击杀怪,唤灵师获得的信息加成,暂时是经验
-//                return self::killMosterAddData();
-//
-//            case CmdCode::cmd_store_refreshItem:                                # 6439
-//                return self::refreshItem();
-//            case CmdCode::cmd_store_yanlingEvolve:                              #6440 言灵进化
-//                return self::yanlingEvolve();
-//            case CmdCode::cmd_store_yanlingEvolve_overall:                      #6441 一键进化
-//                return self::yanlingEvolveCompose();
-//            case CmdCode::cmd_store_setBettleItemAutoVal:                       #6442
-//                return self::setBettleItemAutoVal();
-//            case CmdCode::cmd_store_UpdateFightPower:                           #6443
-//                return self::UpdateFightPower();
-//            default:
-//                Err(ErrCode::cmd_err);
-//        }
-//    }
-//
-//    public static function UpdateFightPower() {
-//        $fightPower = req()->paras[0];
-//
-//        self::GetFightPower(req()->zoneid, req()->uid, $fightPower);
-//
-//        RankProc::recordPlayerLevelInfo(req()->uid, req()->game->baseInfo->level, req()->zoneid);
-//
-//        return Resp::ok(array("ret" => 'ok',));
-//    }
-//
-//    static function GetFightPower($zoneid,$uid,$fightPower) {
-//        $key_fp = MemKey_GameRun::Game_FightPowerRank_zset($zoneid);            # 战力榜
-//        gMem()->zadd($key_fp, array($uid => $fightPower));
-//    }
-//
-//
-//    /**
-//     * 一键进化
-//     * @return type
-//     */
-//    public static function yanlingEvolveCompose() {
-//        $comList = req()->paras[0];
-//
-//        $yanling = ctx()->store->yanling;
-//        foreach ($comList as $str) {
-//            $list = explode(',', $str);
-//            $index = 0;
-//            $firstYanlingUId = $list[0];
-//            $yanlingMo = GameConfig::item_yanling_getItem($yanling->$firstYanlingUId->typeId);
-//            $yanlingQualityMo = GameConfig::yanlingQuality_getItem($yanlingMo->type, $yanling->$firstYanlingUId->quality);
-//
-//            $weekType = $yanlingMo->weakType;
-//            $arr = explode(',', $yanlingQualityMo->evolveCost);
-//            $qly = $arr[0];
-//            $type = $arr[1];
-//            $num = $arr[2];
-//            $n = 0;
-//
-//            foreach ($list as $uid) {
-//                my_Assert(StlUtil::dictHasProperty($yanling, $uid), ErrCode::hero_yanling_notfound);
-//
-//                if ($index == 0) {
-//                    $index += 1;
-//                    continue;
-//                }
-//
-//                my_Assert($yanling->$uid->herouid == 0, ErrCode::yanling_canotconsume);
-//                $costYanlingMo = GameConfig::item_yanling_getItem($yanling->$uid->typeId);
-//                if ($type == 1) {
-//                    if ($uid != $firstYanlingUId && $costYanlingMo->type == $yanlingMo->type && $yanling->$uid->quality == $qly) {
-//                        $n += 1;
-//                    }
-//                } elseif ($type == 2) {
-//                    $w = $costYanlingMo->weakType;
-//                    $q = $yanling->$uid->quality;
-//                    if ($uid != $firstYanlingUId && $w == $weekType && $q == $qly) {
-//                        $n += 1;
-//                    }
-//                }
-//            }
-//
-//            my_Assert($n >= $num, ErrCode::yanling_canotevolve);
-//        }
-//
-//        $retList = array();
-//        //进化
-//        foreach ($comList as $str) {
-//            $list = explode(',', $str);
-//
-//            $firstYanlingUId = $list[0];
-//            $yanling->$firstYanlingUId->quality += 1;
-//            $retList[] = $firstYanlingUId;
-//            array_shift($list);
-//            self::YanlingCost($list, $yanling);
-//        }
-//
-//        ctx()->store->yanling = $yanling;
-//
-//        UserProc::updateUserInfo();
-//
-//        return Resp::ok(array("store" => ctx()->store(), "gold" => ctx()->baseInfo->gold, "evolveYanling" => $retList,));
-//    }
-//
-//    /**
-//     * 6440 言灵进化
-//     */
-//    public static function yanlingEvolve() {
-//        $evolveYanlingUId = req()->paras[0];
-//        $ids = req()->paras[1];
-//
-//        my_Assert(StlUtil::dictHasProperty(ctx()->store->yanling, $evolveYanlingUId), ErrCode::hero_yanling_notfound);
-//        $yanling = ctx()->store->yanling;
-//        $evolveYanlingId = $yanling->$evolveYanlingUId->typeId;
-//        $itemMo = GameConfig::item_base_getItem($evolveYanlingId);
-//        my_Assert($itemMo != null, ErrCode::err_const_no);
-//        if (!StlUtil::dictHasProperty($yanling->$evolveYanlingUId, 'quality')) {
-//            $yanling->$evolveYanlingUId->quality = $itemMo->quality;
-//        }
-//
-//        $mo = GameConfig::item_yanling_getItem($evolveYanlingId);
-//        my_Assert($mo != null, ErrCode::err_const_no);
-//
-//        $yanlingQualityMo = GameConfig::yanlingQuality_getItem($mo->type, $yanling->$evolveYanlingUId->quality);
-//        my_Assert($yanlingQualityMo != null, ErrCode::err_const_no);
-//
-//        $arr = explode(',', $yanlingQualityMo->evolveCost);
-//        $qly = $arr[0];
-//        $type = $arr[1];
-//        $num = $arr[2];
-//
-//        $n = 0;
-//        $list = explode(',', $ids);
-//        foreach ($list as $uid) {
-//            $tId = $yanling->$uid->typeId;
-//            my_Assert($yanling->$uid->herouid == 0, ErrCode::yanling_canotconsume);
-//
-//            $costYanlingMo = GameConfig::item_yanling_getItem($tId);
-//            if ($type == 1) {//本体 同type 同$qly
-//                if ($uid != $evolveYanlingUId && $costYanlingMo->type == $mo->type && $yanling->$uid->quality == $qly) {
-//                    $n += 1;
-//                }
-//            } elseif ($type == 2) {//同元素 同品阶
-//                $weekType = $mo->weakType;
-//                //$quality = $yanling->$evolveYanlingUId->quality;
-//                $w = $costYanlingMo->weakType;
-//                $q = $yanling->$uid->quality;
-//                if ($uid != $evolveYanlingUId && $w == $weekType && $q == $qly) {
-//                    $n += 1;
-//                }
-//            }
-//        }
-//        my_Assert($n >= $num, ErrCode::yanling_canotevolve);
-//
-//        self::YanlingCost($list, $yanling);
-//
-//        $yanling->$evolveYanlingUId->quality += 1;
-//
-//        ctx()->store->yanling = $yanling;
-//        UserProc::updateUserInfo();
-//
-//        return Resp::ok(array("store" => ctx()->store(), "gold" => ctx()->baseInfo->gold,));
-//    }
-//
-//    public static function YanlingCost($list, &$yanling) {
-//        foreach ($list as $uid) {
-//            $curExp = $yanling->$uid->curStarExp;
-//            //经验 金币突破材料
-//            if ($yanling->$uid->starLv > 0) {
-//                $starlv = $yanling->$uid->starLv;
-//                for ($i = 1; $i <= $starlv; $i++) {
-//                    $goodsStr = GameConfig::yanlingextra_level_getItem($yanling->$uid->typeId, $starlv)->costItems;
-//                    $gold = GameConfig::yanlingextra_level_getItem($yanling->$uid->typeId, $starlv)->gold;
-//                    ctx()->base(true)->Add_Gold($gold);
-//                    StoreProc::AddMultiItemInStore($goodsStr);
-//                }
-//            }
-//
-//            self::giveBackYanlingDevelopMaterialDeal($curExp);
-//
-//            //删除言灵
-//            StlUtil::dictRemove($yanling, $uid);
-//        }
-//    }
-//
-//    public static function giveBackYanlingDevelopMaterialDeal($curExp) {
-//        if ($curExp < 100) {
-//            return "";
-//        }
-//        $stoneList = GameConfig::item_stones_type_getItemArray(2);
-//        $retArr = array();
-//        foreach ($stoneList as $stone) {
-//            $typeId = $stone->typeId;
-//            $exp = $stone->baseExp;
-//            $retArr[] = $typeId . '-' . $exp;
-//        }
-//        krsort($retArr);
-//
-//        $dic = new \stdClass();
-//        foreach ($stoneList as $stone) {
-//            $typeId = $stone->typeId;
-//            $exp = $stone->baseExp;
-//            $dic->$typeId = $exp;
-//        }
-//
-//        $tempExp = $curExp;
-//        foreach ($retArr as $val) {
-//            $valList = explode('-', $val);
-//            $itemId = $valList[0];
-//            $exp = $valList[1];
-//            $addNum = intval($tempExp / $exp);
-//            if ($addNum == 0) {//说明自己的经验比强化符的小
-//                continue;
-//            } else {
-//                $ctx = $itemId . ',' . $addNum;
-//                //$prizeArr[] = $ctx;
-//                StoreProc::AddMultiItemInStore($ctx);
-//                $stoneExp = $dic->$itemId;
-//                $tempExp = $tempExp - $addNum * $stoneExp;
-//            }
-//        }
-//    }
-//
-//    /**
-//     * 背包里新标志道具查看 0 系统 1武器,2碎片,3材料, 4 言灵, 5 礼包
-//     */
-//    public static function refreshItem() {
-//        $type = req()->paras[0];
-//        $uid = req()->paras[1];
-//
-//        if ($type == 101 && in_array($uid, ctx()->store->weaponRecord)) {
-//            StlUtil::arrayRemove(ctx()->store->weaponRecord, $uid);
-//        } elseif ($type == 401 && in_array($uid, ctx()->store->yanlingRecord)) {
-//            StlUtil::arrayRemove(ctx()->store->yanlingRecord, $uid);
-//        } else {
-//            if (in_array($uid, ctx()->store->itemRecord)) {
-//                StlUtil::arrayRemove(ctx()->store->itemRecord, $uid);
-//            }
-//        }
-//
-//
-//        UserProc::updateUserInfo();
-//
-//        return Resp::ok(array('store' => ctx()->store,));
-//    }
-//
-//    /**
-//     * 6438 击杀怪,唤灵师获得的信息加成,暂时是经验
-//     */
-//    public static function killMosterAddData() {
-//        $heroUID = req()->paras[0];
-//        $mosterId = req()->paras[1];      # 提取参数
-//
-//        $hero = ctx()->heros(true);
-//
-//        $mo = GameConfig::hero_getItem($mosterId);
-//        my_Assert($mo != null, ErrCode::err_const_no);
-//
-//        //经验修正率=1 + 0.05 × (怪物等级 - 角色(唤灵师)等级)
-//        //角色所得经验 = 怪物经验 * 经验修正率
-//
-//        $lv = substr($mo->heroId, -2);
-//        $n = substr($lv, 0, 1);
-//        if ($n == 0) {
-//            $lv = substr($lv, 1, 1);
-//        }
-//        $collectHeros = $hero->collectHeros;
-//        my_default_Obj($collectHeros);
-//        my_Assert(CommUtil::isPropertyExists($collectHeros, $heroUID), ErrCode::hero_no); # 要升级的英雄不存在
-//        $targetHero = new Ins_UserHero($collectHeros->$heroUID);                # 英雄对象
-//        $heroLv = $targetHero->level;
-//        $per = 1 + 0.05 * ($lv - $heroLv);
-//
-//        $totalExp = intval($mo->exp * $per);
-//        if ($totalExp < 0) {
-//            $totalExp = 0;
-//        }
-//
-//        $targetHero = HeroProc::HeroAddEXP($heroUID, $totalExp);
-//
-//        UserProc::updateUserInfo();
-//
-//        return Resp::ok(array('hero' => $targetHero, 'exp' => $mo->exp,));
-//    }
-//
-//    /**
-//     * 删除所有类型道具
-//     */
-//    public static function removeItem() {
-//        $str = req()->paras[0];      # 提取参数
-//
-//        $list = explode(';', $str);
-//        foreach ($list as $k => $val) {
-//            $slist = explode('-', $val);
-//            $itemType = $slist[0];      # 提取参数
-//            $uid = $slist[1];           # 提取参数
-//            $typeId = $slist[2];
-//            $num = $slist[3];           # 提取参数
-//
-//            self::removeStoreItem($itemType, $uid, $typeId, $num);
-//        }
-//
-//        UserProc::updateUserInfo();
-//
-//        return Resp::ok(array("store" => ctx()->store(),));
-//    }
-//
-//    public static function removeStoreItem($itemType, $uid, $typeId, $num) {
-//        $store = ctx()->store(true);
-//        switch ($itemType) {//物品大归类 0 系统 1武器,2碎片,3材料, 4 言灵, 5 礼包,6 宝石道具 7任务卡
-//            case 1:
-//                StoreProc::removeEquipFromStore($uid, $typeId);
-//                break;
-//            case 2:
-//            case 3:
-//            case 7:
-//            case 6:
-//                StoreProc::removeItemFromStore($store, $typeId, $num);
-//                break;
-//            case 4:
-//                StoreProc::removeYanlingFromStore($uid, $typeId);
-//                break;
-//            default:
-//                break;
-//        }
-//    }
-//
-//    /**
-//     * 6436
-//     * @return type
-//     */
-//    public static function setBettleItemUseVal() {
-//        $index = req()->paras[0];        # 提取参数
-//        $val = req()->paras[1];        # 提取参数
-//
-//        $store = ctx()->store(true);
-//
-//        //my_Assert($store->battleItem->$index->num >= 1, ErrCode::store_bettleitemNumNotEnough);
-//        //$store->battleItem->$index->isAuto = 1;
-//        $store->battleItem->$index->attrVal = $val;
-//
-//        UserProc::updateUserInfo();
-//
-//        return Resp::ok(array("store" => ctx()->store(),));
-//    }
-//
-//    /**
-//     * 6436
-//     * @return type
-//     */
-//    public static function setBettleItemAutoVal() {
-//        $index = req()->paras[0];        # 提取参数
-//        $val = req()->paras[1];        # 提取参数
-//
-//        $store = ctx()->store(true);
-//
-//        //my_Assert($store->battleItem->$index->num >= 1, ErrCode::store_bettleitemNumNotEnough);
-//        $store->battleItem->$index->isAuto = $val;
-//
-//        UserProc::updateUserInfo();
-//
-//        return Resp::ok(array("store" => ctx()->store(),));
-//    }
-//
-//    /**
-//     * 6435
-//     * @return type
-//     */
-//    public static function useBettleItem() {
-//        $index = req()->paras[0];        # 提取参数
-//
-//        $store = ctx()->store(true);
-//
-//        //my_Assert($store->battleItem->$index->num >= 1, ErrCode::store_bettleitemNumNotEnough);
-//        $id = $store->battleItem->$index->id;
-//
-//        //$store->battleItem->$index->num -= 1;
-//        StoreProc::removeItemFromStore($store, $id);
-////        if(StlUtil::dictHasProperty($store->items,$id)){
-////            $store->items->$id -= 1;
-////            if($store->items->$id <= 0){
-////                unset($store->items->$id);
-////            }
-////        }
-////        if ($store->battleItem->$index->num <= 0) {
-////            unset($store->battleItem->$index);
-////        }
-//
-//        UserProc::updateUserInfo();
-//
-//        return Resp::ok(array("store" => ctx()->store(),));
-//    }
-//
-//    /**
-//     * 6434
-//     * @return type
-//     */
-//    public static function changeBettleItem() {
-//        $type = req()->paras[0];        # 提取参数
-//        $index = req()->paras[1];       # 提取参数
-//        $itemid = req()->paras[2];      # 提取参数
-//
-//        $store = ctx()->store(true);
-//
-//        $str = GameConfig::globalsettings()->YaoPingAttrInitVal;
-//        $slist = explode(';', $str);
-//        $hp = explode(',', $slist[0])[1];
-//        $mp = explode(',', $slist[1])[1];
-//
-//        if ($type == 0) {//添加
-//            $item = new Ins_battleItem();
-//            $item->index = $index;
-//            $item->id = $itemid;
-//            $item->num = $store->items->$itemid;
-//
-//            $subType = GameConfig::item_base_getItem($itemid)->subType;
-//            if ($subType == 341) {
-//                $item->attrVal = $hp;
-//            } else {
-//                $item->attrVal = $mp;
-//            }
-//
-//            $store->battleItem->$index = $item;
-//        } else {
-//            unset($store->battleItem->$index);
-//        }
-//        UserProc::updateUserInfo();
-//        return Resp::ok(array("store" => ctx()->store(),));
-//    }
-//
-//    /**
-//     * 6432
-//     * @return type
-//     */
-//    public static function changeStorage() {
-//        $index = req()->paras[0];     # 选中的第几个格子
-//        $type = req()->paras[1];      # 1:放入 2移除到背包
-//        $itemType = req()->paras[2];  # 道具类型
-//        $uid = req()->paras[3];       # 道具的uid
-//
-//        $store = ctx()->store(true);
-//        my_Assert(StlUtil::dictHasProperty($store->storage, $index), ErrCode::store_NotHaveStorage);
-//
-//        $storage = $store->storage->$index;
-//        $num = 0;
-//        foreach ($storage as $k => $dic) {
-//            $num += count((array) $dic);
-//        }
-//
-//        switch ($itemType) {
-//            case 101://武器
-//                if ($type == 1) {
-//                    my_Assert($num < 50, ErrCode::store_StorageEnough);
-//                    $equipVo = $store->equipment->$uid;
-//                    $storage->equipment->$uid = $equipVo; //添加
-//
-//                    StoreProc::removeEquipFromStore($uid, $equipVo->typeId); //移除
-//                } else {
-//                    $equipVo = $storage->equipment->$uid;
-//                    $store->equipment->$uid = $equipVo;
-//
-//                    unset($storage->equipment->$uid);
-//                }
-//
-//                break;
-//            case 401://言灵
-//                if ($type == 1) {
-//                    my_Assert($num < 50, ErrCode::store_StorageEnough);
-//                    $yanlingVo = $store->yanling->$uid;
-//                    $storage->yanling->$uid = $yanlingVo; //添加
-//
-//                    StoreProc::removeYanlingFromStore($uid, $yanlingVo->typeId); //移除
-//                } else {
-//                    $yanlingVo = $storage->yanling->$uid;
-//                    $store->yanling->$uid = $yanlingVo;
-//
-//                    unset($storage->yanling->$uid);
-//                }
-//
-//                break;
-//            default://其他道具
-//                if ($type == 1) {
-//                    my_Assert($num < 50, ErrCode::store_StorageEnough);
-//                    $itemNum = $store->items->$uid;
-//                    if (!StlUtil::dictHasProperty($storage->itemDic, $uid)) {
-//                        $storage->itemDic->$uid = 0;
-//                    }
-//                    $storage->itemDic->$uid += $itemNum; //添加
-//                    StoreProc::removeItemFromStore($store, $uid, $itemNum);
-//                } else {
-//                    $itemNum = $storage->itemDic->$uid;
-//                    $goodsStr = $uid . "," . $itemNum;
-//                    StoreProc::AddMultiItemInStore($goodsStr);
-//
-//                    unset($storage->itemDic->$uid);
-//                }
-//
-//                break;
-//        }
-//
-//        $store->storage->$index = $storage;
-//
-//        //ctx()->store(true) = $store;
-//        UserProc::updateUserInfo();
-//
-//        return Resp::ok(array("store" => $store,));
-//    }
-//
-//    /**
-//     * 储物间扩容
-//     * @return type
-//     */
-//    public static function expandStorage() {
-//        $cost = GameConfig::globalsettings()->expandStorageCost;
-//        $list = explode(',', $cost);
-//
-//        $key = 3;
-//        my_Assert(!StlUtil::dictHasProperty(ctx()->store(true)->storage, $key), ErrCode::store_expandStorage);
-//
-//        if ($list[0] == 1) {
-//            my_Assert(ctx()->base(true)->gold >= $list[1], ErrCode::notenough_gold_msg);
-//            ctx()->base(true)->Consume_Gold($list[1]);
-//        } elseif ($list[0] == 2) {
-//            my_Assert(ctx()->base(true)->cash >= $list[1], ErrCode::notenough_cash_msg);
-//            ctx()->base(true)->Consume_Cash($list[1]);
-//        }
-//        $str = $list[0] . "," . $list[1];
-//        ctx()->store(true)->storage->$key = new Ins_storage();
-//
-//        UserProc::updateUserInfo();
-//
-//        return Resp::ok(array("storage" => ctx()->store(true)->storage, "cost" => $str,));
-//    }
-//
-//    /**
-//     * 6431 购买补给品
-//     */
-//    public static function buySupplies() {
-//        $npcid = req()->paras[0];       # 提取参数
-//        $itemid = req()->paras[1];      # 提取参数
-//        $num = req()->paras[2];         # 提取参数
-//        //补充shop_supplies的mo
-//        $mo = GameConfig::shop_supplies_getItem($npcid, $itemid);
-//        my_Assert($mo != null, ErrCode::err_const_no);
-//
-//        $cost = $mo->cost * $num;
-//        my_Assert($num <= $mo->num, ErrCode::err_const_no);
-//
-//        my_Assert(ctx()->base(true)->gold >= $cost, ErrCode::notenough_gold_msg);
-//
-//        ctx()->base(true)->Consume_Gold($cost);
-//        $goodsStr = $itemid . ',' . $num;
-//
-//        StoreProc::AddMultiItemInStore($goodsStr);
-//
-//        UserProc::updateUserInfo();
-//
-//        return Resp::ok(array("store" => ctx()->store(), "cost" => $cost,));
-//    }
-//
-//    /**
-//     *
-//     */
-//    public static function getShopWeapon() {
-//        $npcid = req()->paras[0];   # 提取参数
-//
-//        self::DailyRefreshWeapon($npcid);
-//
-//        UserProc::updateUserInfo();
-//
-//        return Resp::ok(array(
-//                    "store" => ctx()->store(), #
-//        ));
-//    }
-//
-//    /**
-//     *
-//     * @return type
-//     */
-//    public static function buyWeapon() {
-//        $npcid = req()->paras[0];   # 提取参数
-//        $weaponId = req()->paras[1];   # 提取参数
-//
-//        $store = ctx()->store(true);
-//        $type = 0;
-//
-//        $tag = true;
-//        if (StlUtil::dictHasProperty($store->weaponReward, $npcid)) {
-//            $dic = $store->weaponReward->$npcid;
-//            foreach ($dic as $k => $list) {
-//                if (in_array($weaponId, $list)) {
-//                    $tag = false;
-//                    break;
-//                }
-//            }
-//        }
-//
-//        my_Assert($tag == true, ErrCode::store_weaponCantBuy);
-//
-//        $list = GameConfig::shop_weapon_getItemArray($npcid);
-//        $cost = 0;
-//        foreach ($list as $item) {
-//            $weaponList = explode(';', $item->weaponlist);
-//            foreach ($weaponList as $value) {
-//                $pList = explode(',', $value);
-//                if (in_array($weaponId, $pList)) {
-//                    $type = $item->id;
-//                    $cost = $item->cost;
-//                    break 2;
-//                }
-//            }
-//        }
-//
-//        my_Assert(ctx()->base(true)->gold >= $cost, ErrCode::notenough_gold_msg);
-//        ctx()->base(true)->Consume_Gold($cost);
-//
-//        if (!StlUtil::dictHasProperty($store->weaponReward, $npcid)) {
-//            $store->weaponReward->$npcid = new \stdClass();
-//        }
-//        $store->weaponReward->$npcid->$type[] = $weaponId;
-//
-//        self::PutEquipInStore($weaponId);
-//
-//        ctx()->store = $store;
-//
-//        UserProc::updateUserInfo();
-//        return Resp::ok(array(
-//                    "store" => $store,
-//                    "cost" => $cost,
-//        ));
-//    }
-//
-//    /*
-//     * 每日刷新武器
-//     */
-//
-//    public static function DailyRefreshWeapon($npcid = null) {
-//        //没有数据初始化,有数据不在管
-//        if ($npcid != null && !StlUtil::dictHasProperty(ctx()->store()->weaponPool, $npcid)) {
-//            $list = GameConfig::shop_weapon_getItemArray($npcid);
-//
-//            foreach ($list as $value) {
-//                $ret = new \stdClass();
-//                $arr = explode(';', $value->weaponlist);
-//                foreach ($arr as $item) {
-//                    $itemList = explode(',', $item);
-//                    $id = $itemList[0];
-//                    $per = $itemList[1];
-//                    $ret->$id = $per;
-//                }
-//                $retArr = array();
-//                $type = $value->id;
-//                $pArr = self::randweapon($ret, $value->num);
-//                //数组合并
-//                $retArr = array_merge($retArr, $pArr);
-//                if (!StlUtil::dictHasProperty(ctx()->store()->weaponPool, $npcid)) {
-//                    ctx()->store()->weaponPool->$npcid = new \stdClass();
-//                }
-//                ctx()->store()->weaponPool->$npcid->$type = $retArr;
-//            }
-//        } else if ($npcid == null) {
-//            //每日登录刷新,刷新的时候把已经购买过的武器去掉;
-//            $dic = ctx()->store()->weaponPool;
-//            foreach ($dic as $npcid => $val) {
-//                $list = GameConfig::shop_weapon_getItemArray($npcid);
-//                foreach ($list as $value) {
-//                    $ret = new \stdClass();
-//                    $arr = explode(';', $value->weaponlist);
-//                    foreach ($arr as $item) {
-//                        $itemList = explode(',', $item);
-//                        $id = $itemList[0];
-//                        $per = $itemList[1];
-//                        $ret->$id = $per;
-//                    }
-//
-//                    $ret2 = $ret;
-//                    $type = $value->id;
-//                    if (StlUtil::dictHasProperty(ctx()->store()->weaponReward, $npcid)) {
-//                        $weaponList = ctx()->store()->weaponReward->$npcid->$type;
-//                        foreach ($weaponList as $wid) {
-//                            if (StlUtil::dictHasProperty($ret, $wid)) {
-//                                StlUtil::dictRemove($ret, $wid);
-//                            }
-//                        }
-//                    }
-//
-//                    $temp = $ret;
-//                    if (count((array) $ret) < $value->num) {//一旦所有的武器或是不够刷新数量了,重置当前档位
-//                        $temp = $ret2;
-//                        ctx()->store()->weaponReward->$npcid->$type = array();
-//                    }
-//                    $retArr = array();
-//
-//                    $pArr = self::randweapon($temp, $value->num);
-//
-//                    $retArr = array_merge($retArr, $pArr);
-//                    ctx()->store()->weaponPool->$npcid->$type = $retArr;
-//                }
-//            }
-//        }
-//    }
-//
-//    static function randweapon($temp, $limit) {
-//        $resultArr = array();
-//        $num = 0;
-//        while (true) {
-//            $total = 0;
-//            foreach ($temp as $k => $v) {
-//                $total += $v;
-//            }
-//
-//            $n = rand(1, $total);
-//            $start = 0;
-//            foreach ($temp as $id => $per) {
-//                $start += $per;
-//                if ($n <= $start) {
-//                    if (in_array($id, $resultArr)) {
-//                        StlUtil::dictRemove($temp, $id);
-//                        break;
-//                    } else {
-//                        $resultArr[] = $id;
-//                        $num += 1;
-//                        break;
-//                    }
-//                }
-//            }
-//
-//            if ($num >= $limit) {
-//                break;
-//            }
-//        }
-//
-//        return $resultArr;
-//    }
-//
-//    /**
-//     * 扩容
-//     * @return type
-//     */
-//    static function unlockStore() {
-//        //list() = req()->paras;
-//        $user = ctx();
-//
-//        $mo = GameConfig::expandStoreNum_getItem($user->privateState->expandNum + 1);
-//        my_Assert($mo != null, ErrCode::err_const_no);
-//        my_Assert($user->baseInfo->gold >= $mo->cost, ErrCode::notenough_gold_msg);
-//
-//        $user->base(true)->Consume_Gold($mo->cost);
-//        $user->privateState->expandNum += 1;
-//        ctx($user);
-//
-//        UserProc::updateUserInfo();                                             # 回写玩家数据
-//        return Resp::ok(array(
-//                    "gold" => $user->baseInfo->gold,
-//                    "expandNum" => $user->privateState->expandNum,
-//        ));
-//    }
-//
-//    /**
-//     * 宝石镶嵌
-//     */
-//    static function GemSetYanLing() {
-//        list($gemId, $yanlingUid) = req()->paras;
-//        $user = ctx();
-//
-//        $yanling = $user->store->yanling;
-//        my_Assert(CommUtil::isPropertyExists($yanling, $yanlingUid), ErrCode::hero_yanling_errorYanling);
-//        my_Assert(CommUtil::isPropertyExists($user->store->items, $gemId) && $user->store->items->$gemId > 0, ErrCode::store_itemno_err);
-//
-//        if (!StlUtil::dictHasProperty($yanling->$yanlingUid, "gemId")) {//临时
-//            $yanling->$yanlingUid->gemId = 0;
-//        }
-//
-//        my_Assert($yanling->$yanlingUid->gemId == 0, ErrCode::store_YanLingHaveGem);
-//
-//        StoreProc::removeItemFromStore($user->store, $gemId);
-//        $yanling->$yanlingUid->gemId = $gemId;
-//
-//        $user->store->yanling = $yanling;
-//        ctx($user);
-//
-//        UserProc::updateUserInfo();                                             # 回写玩家数据
-//        return Resp::ok(array(
-//                    "store" => $user->store, #                                  # 目前来看只涉及到items变化
-//        ));
-//    }
-//
-//    /**
-//     * 从严灵上卸下宝石
-//     */
-//    static function GemRemoveYanLing() {
-//        list($yanlingUid) = req()->paras;
-//        $user = ctx();
-//        my_Assert(CommUtil::isPropertyExists($user->store->yanling, $yanlingUid), ErrCode::hero_yanling_errorYanling);
-//        $gemId = $user->store->yanling->$yanlingUid->gemId;
-//
-//        my_Assert($gemId != 0, ErrCode::store_YanLingNotGem);
-//
-//        $goodsStr = $gemId . ",1";
-//        StoreProc::AddMultiItemInStore($goodsStr);
-//        $user->store->yanling->$yanlingUid->gemId = 0;
-//
-//        ctx($user);
-//
-//        UserProc::updateUserInfo();                                             # 回写玩家数据
-//        return Resp::ok(array(
-//                    "store" => $user->store, #                                  # 目前来看只涉及到items变化
-//        ));
-//    }
-//
-//    /**
-//     * 宝石合成
-//     */
-//    static function GemComposeItem() {
-//        list($gemId, $num) = req()->paras;                                        # 参数 言灵uid(指定进阶的言灵实例id)
-//        $user = ctx();
-//        //my_Assert(CommUtil::isPropertyExists($myPacketItems, $costItemId), ErrCode::store_itemnotenough); #
-//
-//        $mo = GameConfig::gem_formula_getItem($gemId);
-//        my_Assert($mo != null, ErrCode::err_const_no); #
-//        my_Assert($mo->levellimit <= $user->Gem->level, ErrCode::store_GemComplose_ResearchLevelLimit); #
-//        $itemId = $mo->drawItem;
-//        if ($itemId != "") {
-//            my_Assert(StlUtil::dictHasProperty($user->store->items, $itemId) && $user->store->items->$itemId > 0, ErrCode::store_GemComploseTuZhiNotEnough); #
-//        }
-//
-//        if ($mo->composeMaterial != "") {
-//            $mList = explode(',', $mo->composeMaterial);
-//            $itemId = $mList[0];
-//            $num = $mList[1];
-//            my_Assert(StlUtil::dictHasProperty($user->store->items, $itemId) && $user->store->items->$itemId > $num, ErrCode::store_GemComploseMaterialNotEnough);
-//
-//            //扣除材料
-//            StoreProc::removeItemFromStore($user->store, $itemId, $num);
-//        }
-//
-//        $gList = explode(',', $mo->composeGem);
-//        $itemId = $gList[0];
-//        my_Assert(StlUtil::dictHasProperty($user->store->items, $itemId) && $user->store->items->$itemId > $gList[1], ErrCode::store_ComploseGemNotEnough);
-//        my_Assert($user->baseInfo->gold >= $mo->composeGold, ErrCode::notenough_gold_msg);
-//
-//        //扣除配方金币 宝石
-//        $user->base(true)->Consume_Gold($mo->composeGold);
-//        StoreProc::removeItemFromStore($user->store, $gList[0], $gList[1]);
-//        $goodsStr = $gemId . ',1';
-//        StoreProc::AddMultiItemInStore($goodsStr);
-//        ctx($user);
-//
-//        UserProc::updateUserInfo();                                             # 回写玩家数据
-//        return Resp::ok(array(
-//                    "store" => $user->store, #                                  # 目前来看只涉及到items变化
-//                    'gold' => $user->baseInfo->gold,
-//        ));
-//    }
-//
-//    /**
-//     * 宝石合成的研究等级提升
-//     */
-//    static function GemResearchLvUp() {
-//        //list() = req()->paras;                                        # 参数 言灵uid(指定进阶的言灵实例id)
-//        $user = ctx();
-//        $researchLevel = $user->Gem->level; //研究等级
-//
-//        $mo = GameConfig::gem_researchlevel_getItem($researchLevel + 1);
-//
-//        my_Assert($mo != null, ErrCode::err_const_no);
-//        my_Assert($mo->userlevelLimit <= $user->baseInfo->level, ErrCode::store_GemResearchLvUp_UserLevelLimit);
-//        //$list = explode(',',$mo->unlockLevelGoldCost);
-//
-//        my_Assert($mo->unlockLevelGoldCost <= $user->baseInfo->gold, ErrCode::notenough_gold_msg);
-//
-//        $user->base(true)->Consume_Gold($mo->unlockLevelGoldCost);
-//        $user->Gem->level += 1;
-//        ctx($user);
-//
-//        UserProc::updateUserInfo();                                             # 回写玩家数据
-//        return Resp::ok(array(
-//                    "lv" => $user->Gem->level, #                                  # 目前来看只涉及到items变化
-//                    'gold' => $user->baseInfo->gold,
-//        ));
-//    }
-//
-//    /**
-//     * 武器升级
-//     */
-//    static function weaponUpgrade() {
-//        list($uid, $wuqiList, $items) = req()->paras;                                        # 参数 言灵uid(指定进阶的言灵实例id)
-//        $user = ctx();
-//        $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); # 检查道具的数量,在背包中是否充足
-//            $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;
-//        }
-//
-//        $wuqiExp = 0;
-//        //消耗武器
-//        foreach ($wuqiList as $wuqiId) {
-//            my_Assert(CommUtil::isPropertyExists($equipment, $wuqiId), ErrCode::store_weapon_err); # 玩家拥有此英雄
-//            my_Assert($equipment->$wuqiId->herouid == 0, ErrCode::store_WeaponCanotConsume); # 该言灵已经被装备不能在消耗
-//            $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;
-//            $totalGold += $mo->costGold;
-//            StlUtil::dictRemove($user->store->equipment, $wuqiId);
-//        }
-//        my_Assert($user->baseInfo->gold >= $totalGold, ErrCode::notenough_gold_msg);
-//
-//        $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;
-//
-//        $num = 0;
-//        $dic = GameConfig::weaponextra_level();
-//        foreach ($dic as $tId => $val) {
-//            if ($tId == $equipVo->typeId) {
-//                foreach ($val as $k => $v) {
-//                    $num += 1;
-//                }
-//                break;
-//            }
-//        }
-//        if ($curStar < $num - 1) {
-//            $starlimitLv = GameConfig::weaponextra_level_getItem($equipVo->typeId, $curStar + 1)->starlimitLv;
-//            if ($starlimitLv <= $curlevel) {
-//                $equipVo->level = $starlimitLv;
-//                $equipVo->exp = GameConfig::weapon_levelexp_getItem(GameConfig::item_base_getItem($equipVo->typeId)->quality, $starlimitLv)->requiredExp;
-//            }
-//        }
-//
-//        $user->store->equipment->$uid = $equipVo;
-//
-//        TaskProc::OnWeaponLevelUp($equipVo->typeId, $equipVo->level);
-//        UserProc::CollectUserBaseParam(req()->cmd, 2, $user->baseInfo->gold, $totalGold, $user->baseInfo->gold - $totalGold, "");
-//        $user->baseInfo->gold -= $totalGold;
-//        ctx($user);
-//        ctx()->store->items = $myPacketItems;                    # 更新背包数据
-//        if ($equipVo->level != $initLevel) {
-//            NormalEventProc::OnWeaponLvlUp($uid, $equipVo->level);         # 广播英雄升级事件
-//            StatisticsProc::TargetStatistics(Enum_TargetStatistics::WeaponIdLevel_UserNum, $equipVo->typeId, "$equipVo->level", $initLevel);
-//        }
-//
-//        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) {
-//            $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;
-//                break;
-//            }
-//
-////            if($lv>=glc()->Weapon_Upgrade_BasicMaxLevel){
-////                $curLv = glc()->Weapon_Upgrade_BasicMaxLevel;
-////                break;
-////            }
-//        }
-//
-//        return $curLv;
-//    }
-//
-//    /**
-//     * 武器突破
-//     */
-//    static function weaponTupo() {
-//        list($uid) = req()->paras;                                              # 参数 言灵uid(指定进阶的言灵实例id)
-//        $user = ctx();
-//        $equipment = $user->store->equipment;
-//        my_Assert(CommUtil::isPropertyExists($equipment, $uid), ErrCode::store_weapon_err); # 玩家拥有此英雄
-//
-//        $typeId = $equipment->$uid->typeId;
-//        $curStar = $equipment->$uid->starLevel;
-//
-//        $num = 0;
-//        $dic = GameConfig::weaponextra_level();
-//        foreach ($dic as $tId => $val) {
-//            if ($tId == $typeId) {
-//                foreach ($val as $k => $v) {
-//                    $num += 1;
-//                }
-//                break;
-//            }
-//        }
-//        my_Assert($curStar < $num - 1, ErrCode::hero_yanling_canotTupo);
-//
-//        $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);
-////        $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);
-//        foreach ($costItemsList as $value) {
-//            $list = explode(',', $value);
-//            StoreProc::removeItemFromStore($user->store, $list[0], $list[1]);
-//        }
-//
-//        UserProc::CollectUserBaseParam(req()->cmd, 2, $user->baseInfo->gold, $mo->gold, $user->baseInfo->gold - $mo->gold, "");
-//        $user->baseInfo->gold -= $mo->gold;
-//        $equipment->$uid->starLevel += 1;
-//
-//        NormalEventProc::OnWeaponLvTuPo($uid, $equipment->$uid->starLevel);         # 广播英雄升级事件
-//        TaskProc::OnWeaponStarUp($equipment->$uid->starLevel);
-//
-//        $user->store->equipment = $equipment;
-//        ctx($user);
-//
-//        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)
-//        $user = ctx();
-//        $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;
-//        ctx($user);
-//
-//        UserProc::updateUserInfo();                                             # 回写玩家数据
-//        return Resp::ok(array(
-//                    "store" => $user->store, #                                  # 目前来看只涉及到items变化
-//        ));
-//    }
-//
-//    /**
-//     * [6420] 言灵进阶
-//     */
-//    static function YanlingUpgrade() {
-//        list($yanlingUid) = req()->paras;                                        # 参数 言灵uid(指定进阶的言灵实例id)
-//        $user = ctx();
-//        my_Assert(property_exists($user->store->yanling, $yanlingUid), "找不到这个言灵");
-//        $yanlingObj = $user->store->yanling->$yanlingUid;
-//        $yanlingMoId = $yanlingObj->typeId;
-//        $curGrade = property_exists($yanlingObj, "grade") ? $yanlingObj->grade : 1; # 当前等阶
-//        $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);                  # 找不到言灵进阶常量
-//        $costs = explode(';', $toGradeCfg->cost_materials);
-//        my_Assert(count($costs) > 0, ErrCode::store_yanlingGrade_cfg);          # 言灵进阶数据有误
-//        foreach ($costs as $c) {
-//            list($itemId, $num) = explode(',', $c);                             # 解析材料
-//            $err = self::removeItemFromStore($user->store, $itemId, $num);      # 扣除 材料
-//            my_Assert(ErrCode::ok == $err, $err);                               # 防御扣除材料失败
-//        }
-//        $yanlingObj->grade = $toGrade;                                          # 修改进阶
-//        $user->store->yanling->$yanlingUid = $yanlingObj;                       # 回写言灵数据
-//        UserProc::updateUserInfo();                                             # 回写玩家数据
-//        return Resp::ok(array(
-//                    "store" => $user->store, #                                  # 目前来看只涉及到items变化
-//        ));
-//    }
-//
-//    /**
-//     * [6418] 利用言灵召唤书碎片合成召唤书
-//     */
-//    static function MergeYanlingBook() {
-//        list($bookId) = req()->paras;                                            # 参数 言灵召唤书id
-//        $user = ctx();
-//        $bookIdCfg = GameConfig::item_yanlingbook_getItem($bookId);
-//        my_Assert(null != $bookIdCfg, ErrCode::err_const_no);                   # 找不到言灵书常量
-//        list($segId, $num) = explode(',', $bookIdCfg->seg_num);                 # 解析所需碎片信息
-//        $err = self::removeItemFromStore($user->store, $segId, $num);           # 扣除 碎片
-//        my_Assert(ErrCode::ok == $err, $err);                                   # 防御扣除碎片失败
-//        self::PutOverlyingItemInStore($bookId);                                 # 添加召唤书
-//        UserProc::updateUserInfo();                                             # 回写数据
-//        return Resp::ok(array(
-//                    "store" => $user->store, #                                  # 目前来看只涉及到items变化
-//        ));
-//    }
-//
-//    /**
-//     * [6419] 利用言灵召唤书召唤言灵
-//     */
-//    static function CallYanlingByBook() {
-//        list($bookId) = req()->paras;                                            # 参数 利用的言灵召唤书id
-//        $user = ctx();
-//        $bookIdCfg = GameConfig::item_yanlingbook_getItem($bookId);
-//        my_Assert(null != $bookIdCfg, ErrCode::err_const_no);                   # 找不到言灵书常量
-//        $err = self::removeItemFromStore($user->store, $bookId);                # 扣除 召唤书
-//        my_Assert(ErrCode::ok == $err, $err);                                   # 防御扣除召唤书失败
-//        $costs = explode(';', $bookIdCfg->cost_materials);
-//        my_Assert(count($costs) > 0, ErrCode::store_book_info);                 # 召唤书数据有误
-//        foreach ($costs as $c) {
-//            list($itemId, $num) = explode(',', $c);                             # 解析材料
-//            $err = self::removeItemFromStore($user->store, $itemId, $num);      # 扣除 材料
-//            my_Assert(ErrCode::ok == $err, $err);                               # 防御扣除材料失败
-//        }
-//        self::PutYanLingInStore($bookIdCfg->yanling_id);                        # 添加言灵
-//        UserProc::updateUserInfo();                                             # 回写数据
-//        return Resp::ok(array(
-//                    "store" => $user->store, #                                  # 目前来看只涉及到items变化
-//        ));
-//    }
-//
-//    /**
-//     * 测试方法
-//     * @return type
-//     */
-//    static public function Test() {
-//        Err(ErrCode::msg_method_obsoleted, "代码需更新");
-//    }
-//
-//    /**
-//     * [6404] 使用仓库道具
-//     */
-//    static function useItem() {
-//        list($itemType, $num) = req()->paras;                                   # 提取参数
-//        $mo = GameConfig::item_base_getItem($itemType);
-//        my_Assert(null != $mo, ErrCode::err_const_no);
-//        $store = ctx()->store();
-//        $err = $store->RemoveItemFromStore($itemType, $num);                    # 扣除道具
-//        my_Assert(ErrCode::ok == $err, $err);
-//        switch ($mo->subType) {
-//            case 601:                                                           # 任务卡
-//                my_Assert($num == 1, "任务卡一次只能使用一张!");
-//                StoreProc::PutTaskCardInStore($itemType);                       # 任务卡放入任务卡
-//                ctx()->store = $store;
-//                break;
-//            case 303:                                                           # 体力药水
-//                $pillMo = GameConfig::item_pills_getItem($itemType);
-//                ctx()->base()->Add_tili($pillMo->number * $num);                # 加体力
-//                break;
-//            default :
-//                break;
-//        }
-//        UserProc::updateUserInfo();
-//        return Resp::ok(array(
-//                    'priv' => ctx()->privateState,
-//                    'store' => ctx()->store,
-//                    'tili' => ctx()->base()->tili,
-//        ));
-//
-////        Err(ErrCode::msg_method_obsoleted, "代码需更新");
-//    }
-//
-//    /**
-//     * [6405] 刷新仓库列表
-//     */
-//    static function refreshStore() {
-//        StoreProc::CheckItemNum();
-//        return Resp::ok(array('store' => ctx()->store));
-//    }
-//
-//    /**
-//     * [6406] 从仓库删除道具
-//     */
-//    static function delItemFromStore() {
-//        list($itemId, $num) = req()->paras;
-//        $err = self::removeItemFromStore(ctx()->store, $itemId, $num);
-//        my_Assert(ErrCode::ok == $err, $err);
-//        UserProc::updateUserInfo();
-//        return Resp::ok(array('store' => ctx()->store));
-//    }
-//
-//    /**
-//     * [6409] 合成道具
-//     */
-//    static public function composeItem() {
-//        Err(ErrCode::err_method_notimplement);
-//    }
-//
-//    /**
-//     * [6409] 合成碎片(几个碎片合成获得同品质或者更高品质的新碎片)
-//     */
-//    static public function composePieces() {
-//        Err(ErrCode::err_method_notimplement);
-//    }
-//
-//// </editor-fold>
-////  ---------------  以下为辅助方法  ------------------
-////
-//// <editor-fold defaultstate="collapsed" desc="   移除物品   ">
-//
-//    /**
-//     * 从仓库中移除指定数量的物品
-//     * @param Info_Store $store
-//     * @param type $itemId
-//     * @param type $itemcount
-//     * @return type
-//     */
-//    static function removeItemFromStore($store, $itemId, $itemcount = 1) {
-//        my_Assert(CommUtil::isPropertyExists($store->items, $itemId), ErrCode::store_itemno_err); # 没有这个道具
-//        my_Assert($store->items->$itemId >= $itemcount, ErrCode::store_itemnotenough); # 数量不足
-//        $store->items->$itemId -= $itemcount;
-//        if ($store->items->$itemId == 0) {
-//            unset($store->items->$itemId);
-//            if (in_array($itemId, ctx()->store->itemRecord)) {
-//                StlUtil::arrayRemove(ctx()->store->itemRecord, $itemId);
-//            }
-//        }
-//
-//        if (GameConfig::item_base_getItem($itemId)->subType == 341 || GameConfig::item_base_getItem($itemId)->subType == 342) {//血瓶/蓝瓶
-//            foreach (ctx()->store->battleItem as $index => $val) {
-//                if ($val->id == $itemId) {
-//                    if (!isset($store->items->$itemId) || $store->items->$itemId == 0) {
-//                        unset(ctx()->store->battleItem->$index);
-//                    } else {
-//                        ctx()->store->battleItem->$index->num = $store->items->$itemId;
-//                    }
-//                }
-//            }
-//        }
-//
-//        NormalEventProc::OnBag_Remove_Item($itemId, $itemcount);                # 插入事件
-//        return ErrCode::ok;
-//    }
-//
-//    /**
-//     * 从仓库移出装备
-//     * @param type $itemId  uid
-//     * @param Info_Store $store
-//     * @return boolean
-//     */
-//    static function removeEquipFromStore($uid, $typeId) {
-//        $ok = false;
-//        if (CommUtil::isPropertyExists(ctx()->store->equipment, $uid)) {
-//            my_Assert($typeId == ctx()->store->equipment->$uid->typeId, "typeid检验错误"); // typeid相同;
-//            my_Assert(ctx()->store->equipment->$uid->herouid == 0, "该武器被装备无法删除"); // typeid相同;
-//            unset(ctx()->store->equipment->$uid);
-//            if (in_array($uid, ctx()->store->weaponRecord)) {
-//                StlUtil::arrayRemove(ctx()->store->weaponRecord, $uid);
-//            }
-//
-//
-//            $ok = true;
-//        }
-//        return $ok;
-//    }
-//
-//    static function removeYanlingFromStore($uid, $typeId) {
-//        $ok = false;
-//        if (CommUtil::isPropertyExists(ctx()->store->yanling, $uid)) {
-//            my_Assert($typeId == ctx()->store->yanling->$uid->typeId, "typeid检验错误"); // typeid相同;
-//            unset(ctx()->store->yanling->$uid);
-//
-//            if (in_array($uid, ctx()->store->yanlingRecord)) {
-//                StlUtil::arrayRemove(ctx()->store->yanlingRecord, $uid);
-//            }
-//            $ok = true;
-//        }
-//        return $ok;
-//    }
-//
-//    /**
-//     * 从仓库移除碎片
-//     * @param Info_Store $store
-//     * @param int $segmentId
-//     * @param int $num
-//     * @return bool 成功/失败
-//     */
-//    static function removeSegmetFromStore($store, $segmentId, $num = 1) {
-//        if (CommUtil::isPropertyExists($store->segement, $segmentId)  #
-//                && $store->segement->$segmentId >= $num) {
-//            $store->segement->$segmentId -= $num;
-//            return TRUE;
-//        }
-//        return false;
-//    }
-//
-//    /**
-//     * 向仓库添加碎片
-//     * @param Info_Store $store
-//     * @param int $segmentId
-//     * @param int $num
-//     */
-//    static function addSegmentIntoStore($store, $segmentId, $num = 1) {
-//        if (CommUtil::isPropertyExists($store->segement, $segmentId)) {
-//            $store->segement->$segmentId += $num;
-//        } else {
-//            $store->segement->$segmentId = $num;
-//        }
-//        $segMo = GameConfig::item_segment_getItem($segmentId);
-//        my_Assert($segMo != null, ErrCode::err_const_no);
-//        TaskProc::OnHeroSegmengNum($segMo->protoHeroID, $num);
-//    }
-//
-//// </editor-fold>
-////
-//// <editor-fold defaultstate="collapsed" desc="   放入物品   ">
-//
-//    /**
-//     * 将其他物品放入仓库
-//     * @param type $itemId
-//     * @param Data_UserGame $game
-//     */
-//    static function PutItemInStore($itemId, &$game) {
-//        if (CommUtil::isPropertyExists($game->store->items, $itemId)) {         // 如果仓库中已经有这种元素,则其数目+1
-//            $game->store->items->$itemId += 1;
-//        } else {// 如果仓库中没有这种元素,则其数目置1
-//            $game->store->items->$itemId = 1;
-//        }
-//    }
-//
-//    /**
-//     * 解包多种物品到玩家身上 【警告】此函数的异常处理功能残废,不安全
-//     * 检测如果当前物品格子大于物品总数,则可以获取战利品,否则不可以
-//     * @param string $goodsStr itemid,num;itemid,num;...
-//     * @param int $src 1:战斗奖励, 2: 任务奖励, 3: 抽奖奖品, 4: 邮件领取, 5: 现金充值, 6: 活动领取
-//     * @deprecated since version 0
-//     * @return type
-//     */
-//    public static function AddMultiItemInStore($goodsStr, $src = 1, $mask = 0) {
-//        $user = ctx();
-//        $ary = explode(";", $goodsStr);
-//        //$unlockNum = $user->privateState->expandNum * 5;
-//        //$n = self::countStoreNum();
-//        foreach ($ary as $value) {
-//            $val = explode(",", $value);
-//            $cid = "";
-//            my_Assert(count($val) > 1, "解析奖励字符串出错");
-//
-//            list( $itemId, $num) = $val;                                        # ID, 数量
-//            $smItem = GameConfig::item_base_getItem($itemId);                   # 道具mo
-//            switch ($smItem->subType) {                                         # 根据类型分别添加到容器中
-//                case META_EXP:                                                  # 指挥官经验
-////                    Data_UserGame::Add_Exp($user->baseInfo, $num);
-//                    $user->base()->Add_Exp($num);                               # 加指挥官经验
-//                    break;
-//                case META_GOLD_ITEMID:                                          # 金币
-////                    Data_UserGame::Add_Gold($user->baseInfo, $num);
-//                    $user->base()->Add_Gold($num, $mask);                              # 增加金币
-//                    break;
-//                case META_CASH_ITEMID:                                          # 钻石
-////                    Data_UserGame::Add_Cash($user->baseInfo, $num);
-//                    $user->base()->Add_Cash($num, $mask);                              # 增加钻石
-//                    break;
-//                case META_tili_ITEMID:                                          # 体力
-////                    Data_UserGame::Add_tili($num);
-//                    $user->base()->Add_tili($num);                              # 增加体力
-//                    break;
-//                case META_FriendShipPoit_ItemId:                                # 友情值
-////                    Data_UserGame::Add_FriendPoint($user->baseInfo, $num);
-//                    $user->base()->Add_FriendPoint($num);                       # 加友情点
-//                    break;
-//                case META_PVPCOIN_ITEMID:                                       # 竞技币
-//                    $user->pvp->pvpCoins += $num;
-//                    break;
-//                case META_ActivePoint_ITEMID:
-////                    $user->task->dailyActivePoint += $num;                    # 每日任务活跃点
-//                    break;
-//                case META_RESPOINT_ITEMID:
-//                    $user->base()->Add_resPoint($num);                          # 增加资源点
-////                    Data_UserGame::Add_resPoint($user->baseInfo, $num);         # 资源点添加
-//                    break;
-//                case 101:                                                       # 武器
-//                    for ($n = 0; $n < $num; $n++) {
-//                        $cid = StoreProc::PutEquipInStore($itemId);
-//                    }
-//                    CornerSignEventProc::OnBag_new_Weapon();
-//                    CornerSignEventProc::OnRoleWeapon();
-//                    break;
-//                case 401:                                                       # 言灵
-//                    for ($n = 0; $n < $num; $n++) {
-//                        $cid = StoreProc::PutYanLingInStore($itemId);
-//                    }
-//                    CornerSignEventProc::OnBag_new_Yanling();
-//                    CornerSignEventProc::OnRoleYanling();
-//                    break;
-//                case 501:                                                       # 限购礼包
-//                    $itemMO = GameConfig::item_package_getItem($itemId);
-//                    my_Assert(null != $itemMO, ErrCode::err_const_no);
-//                    $err = StoreProc::AddMultiItemInStore($itemMO->contents);         # 发放奖励
-//                    my_Assert(ErrCode::ok == $err, $err);
-//                    break;
-//                case 601:                                                       # 任务卡
-//                    $cid = StoreProc::PutTaskCardInStore($itemId);
-//                    CornerSignEventProc::OnBag_new_TaskCard();
-//                    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();
-//                    StoreProc::PutOverlyingItemInStore($itemId, $num);          # 直接进包裹items
-//                    break;
-//                case 202:                                                       # 召唤书碎片
-//                case 351:                                                       # 言灵召唤书
-//                    StoreProc::PutOverlyingItemInStore($itemId, $num);          # 直接进包裹items
-////                    $book = GameConfig::item_yanlingbook_getItem($itemId);
-////                    my_Assert(null != $book, ErrCode::err_const_no);
-////                    $ylCfg = GameConfig::item_yanling_getItem($book->yanling_id);
-////                    my_Assert(null != $ylCfg, ErrCode::err_const_no);
-////                    switch ($ylCfg->career) {                                   # 根据不同职业更新角标系统
-////                        case 1:
-////                            CornerSignEventProc::OnCall_Warrior_new();          # 战士
-////                            break;
-////                        case 2:
-////                            CornerSignEventProc::OnCall_Magician_new();         # 法师
-////                            break;
-////                        case 3:
-////                            CornerSignEventProc::OnCall_Archer_new();           # 射手
-////                            break;
-////                        default :
-////                            break;
-////                    }
-//                    break;
-//                case 321:                                                       # 进阶材料
-//                case 322:                                                       # 进阶材料
-//                case 323:                                                       # 锻造材料
-//                case 324:                                                       # 魂器
-//
-//                case 325:                                                       #元素突破材料
-//                case 326:                                                       #职业突破材料
-//                case 327:                                                       #言灵的突破石
-//                case 328:                                                       #言灵的突破材料
-//                case 329:                                                       #武器的突破石
-//                case 330:                                                       #武器的突破材料
-//                //
-//                case 701:                                                       #宝石
-//                case 702:                                                       #设计图纸
-//                case 703:                                                       #宝石辅助材料
-//                    StoreProc::PutOverlyingItemInStore($itemId, $num);          # 直接进包裹items
-//                    CornerSignEventProc::OnBag_new_Material();
-//                    break;
-//
-//                case 332:                                                       #普通祈愿券
-//                case 333:                                                       #活动祈愿券
-//                // 补给品
-//                case 341:                                                       # 血瓶
-//                case 342:                                                       # 能量瓶
-//                case 343:                                                       #
-//                case 344:                                                       # 回城券 -2022.4.13 海哥
-//                case 303:                                                       # 体力药水 - 2023.3.15 海哥
-//                    StoreProc::PutOverlyingItemInStore($itemId, $num);          # 直接进包裹items
-//                    CornerSignEventProc::OnBag_new_Consume();
-//                    break;
-//                case 311:                                                       # 基因(经验丹)
-//                case 312:                                                       # 强化道具
-//                case 313:
-//                    StoreProc::PutOverlyingItemInStore($itemId, $num);          # 直接进包裹items
-//                    break;
-//                case 801:
-//                case 802:
-//                    //头像款,不入背包。直接解锁
-//                    self::HeadImgFrameUnLock($itemId, $num);
-//                    break;
-//
-//                default :
-//                    Err(ErrCode::err_innerfault, "落入包裹时,出现了非法物品($itemId)");
-//            }
-//            TaskProc::OnGainItem($itemId, $num);                                // 检查获得道具的任务进度
-//            NormalEventProc::OnBag_new_Item($itemId, $num, $cid);
-//        }
-//        return ErrCode::ok;                                                     // 返回
-//    }
-//
-//    public static function HeadImgFrameUnLock($itemId, $num) {
-//        if(!StlUtil::dictHasProperty(ctx()->baseInfo,'headImgFrameList')){
-//            ctx()->base(true)->headImgFrameList = array();
-//        }
-//        $list = ctx()->base(true)->headImgFrameList;
-//        if(!in_array($itemId,$list)){
-//            $list[] = $itemId;
-//        }
-//        ctx()->base(true)->headImgFrameList = $list;
-//    }
-//
-//    public static function countStoreNum() {
-//        $user = ctx();
-//        //$num = 0;
-//        $itemDic = $user->store->items;
-//        //$num += count((array)$user->store->items);
-//        $itemNum = 0;
-//        foreach ($itemDic as $key => $num) {
-//            if ($num == 0) {
-//                continue;
-//            }
-//
-//            if ($num > 99999) {
-//                $itemNum += 2;
-//            } else {
-//                $itemNum += 1;
-//            }
-//        }
-//
-//        //var_dump($num);
-//        //var_dump('-----------------');
-//
-//        $itemNum += count((array) $user->store->equipment);
-//        //var_dump($num);
-//        //var_dump('-----------------');
-//        $itemNum += count((array) $user->store->yanling);
-//        //var_dump($itemNum);
-//        return $itemNum;
-//    }
-//
-//    /**
-//     * [6401]向包裹中添加物品
-//     */
-//    public static function AddItemInStore() {
-//        list($rwdStr, $mask) = req()->paras; //mask = 1:表示战斗中掉落
-//        $user = ctx();
-//
-//        if ($mask == 1) {
-//            $err = self::AddMultiItemInStore($rwdStr, 1, 1);
-//        } else {
-//            $err = self::AddMultiItemInStore($rwdStr);
-//        }
-//
-//        my_Assert(ErrCode::ok == $err, $err);
-//        UserProc::updateUserInfo();
-//        return Resp::ok(array(
-//                    'gold' => $user->baseInfo->gold,
-//                    'tili' => $user->baseInfo->tili,
-//                    'cash' => $user->baseInfo->cash,
-//                    'resPoint' => $user->baseInfo->resPoint,
-//                    'store' => $user->store));
-//    }
-//
-//    /**
-//     * 将装备放入背包
-//     * @param type $itemId
-//     */
-//    static function PutEquipInStore($itemId) {
-//        $privateState = ctx()->privateState;
-//        $unlockNum = $privateState->expandNum * 5;
-//        //var_dump("wuqi==============");
-//        $n = self::countStoreNum();
-//        $initNum = GameConfig::globalsettings()->Item_Packet_InitNum_New;
-//        my_Assert($n < $unlockNum + $initNum, ErrCode::store_bagSpaceNotEnough);
-//
-//        if (!CommUtil::isPropertyExists($privateState, "currentId")) {          // 如果仓库中已经有这种元素,则其数目+1
-//            ctx()->privateState->currentId = 1;
-//        }
-//        $cid = ctx()->privateState->currentId++;
-//        //$equip = ObjectInit();
-//        $equip = new Ins_Weapon();
-//        $equip->typeId = $itemId;
-//        ctx()->store->equipment->$cid = $equip;
-//
-//        ctx()->store->weaponRecord[] = $cid;
-//
-//        SystemProc::GetSpecialQualityWeapon(req()->zoneid, ctx()->baseInfo->name, $itemId);
-//        //StatisticsProc::TargetStatistics(Enum_TargetStatistics::WeaponId_UserNum, $itemId);
-//        //StatisticsProc::TargetStatistics(Enum_TargetStatistics::WeaponIdLevel_UserNum, $itemId, "1");
-//        return $cid;
-////        SystemProc::GetEquip($req->zoneid, $req->userInfo->game, $itemId);      # 添加获得装备的消息
-//    }
-//
-//    /**
-//     * 将言灵放入背包
-//     * @param type $itemId
-//     */
-//    static function PutYanLingInStore($itemId) {
-//        //my_Assert(count((array) ctx()->store->yanling) < 100, ErrCode::store_yanling_bagfull);
-//        $privateState = ctx()->privateState;
-//        $unlockNum = $privateState->expandNum * 5;
-//        //var_dump("yanling==============");
-//        $n = self::countStoreNum();
-//        $initNum = GameConfig::globalsettings()->Item_Packet_InitNum_New;
-//        my_Assert($n < $unlockNum + $initNum, ErrCode::store_bagSpaceNotEnough);
-//
-//        if (!CommUtil::isPropertyExists($privateState, "currentId")) {          # 如果仓库中已经有这种元素,则其数目+1
-//            ctx()->privateState->currentId = 1;
-//        }
-//        $cid = ctx()->privateState->currentId++;
-//        //$equip = ObjectInit();
-//        $equip = new Ins_YanLin();
-//        $equip->typeId = $itemId;
-//        $equip->quality = GameConfig::item_base_getItem($itemId)->quality; //品阶初始化
-//        ctx()->store->yanling->$cid = $equip;
-//
-//        ctx()->store->yanlingRecord[] = $cid;
-//
-//        TaskProc::autoRecoverStateMissions();                                       # 重新更新其它状态类的任务卡
-//        TaskProc::autoRecoverTaskTracingState();                                    # 更新任务追踪.
-//
-//        SystemProc::GetSpecialQualityYanling(req()->zoneid, ctx()->baseInfo->name, $itemId);
-//        SystemProc::GetSpecialNumYanling(req()->zoneid, ctx()->baseInfo->name);
-//        StatisticsProc::TargetStatistics(Enum_TargetStatistics::YanLingId_UserNum, $itemId);
-//        StatisticsProc::TargetStatistics(Enum_TargetStatistics::YanLingIdLevel_UserNum, $itemId, "1");
-//        return $cid;
-//    }
-//
-//    /**
-//     * 将任务卡放入背包
-//     * @param type $itemId
-//     */
-//    static function PutTaskCardInStore($itemId) {
-//        $privateState = ctx()->privateState;
-//        $unlockNum = $privateState->expandNum * 5;
-//        //var_dump("task==============");
-//        //$n = self::countStoreNum();
-//        //my_Assert($n<$unlockNum+50, ErrCode::store_StorageEnough);
-//
-//        if (!CommUtil::isPropertyExists($privateState, "currentId")) {          # 如果仓库中已经有这种元素,则其数目+1
-//            ctx()->privateState->currentId = 1;
-//        }
-//        $cid = ctx()->privateState->currentId++;
-//        $mo = GameConfig::item_taskcard_getItem($itemId);                       # 任务卡常量
-////        var_dump($mo);
-//        my_Assert(null != $mo, ErrCode::err_const_no);
-//        $itembaseMo = GameConfig::item_base_getItem($itemId);
-//        my_Assert(null != $itembaseMo, ErrCode::err_const_no);
-//        if ($itembaseMo->pileNum > 0) {                                         # 可叠加
-//            Err(ErrCode::taskCard_no_pile);                                     # 不可堆叠!!! 我支持不了.gwang 2020年12月12日13:40:04
-//            // <editor-fold defaultstate="collapsed" desc=" 折叠 ">
-////            $taskCard = null;
-////            foreach ($req->userInfo->game->store->taskcards as $uuid => &$val) {
-////                $val = new Ins_TaskCard($val);
-////                if ($val->typeId == $itemId) {
-////                    $taskCard = $val;
-////                    break;
-////                }
-////            }
-////            if (null == $taskCard) {                                            # 原来么有
-////                $taskCard = new Ins_TaskCard($itemId);
-////                $taskCard->uid = $cid;
-////                $req->userInfo->game->store->taskcards->$cid = $taskCard;
-////            }
-////            $taskCard->count += 1;
-//            // </editor-fold>
-//        } else {
-//            $taskCard = new Ins_TaskCard($itemId);
-//            $taskCard->uid = $cid;
-//            ctx()->store->taskcards->$cid = $taskCard;
-//        }
-//        NormalEventProc::OnTaskBag_new_Card($cid, 1);                           # 播放获得任务卡事件
-//        if (null != $taskCard) {
-//            $t = req()->paras;
-//            req()->paras = array($cid);
-//            TaskProc::OnTaskCard_active();                                      # 自动激活任务卡
-//            req()->paras = $t;
-//        }
-//        return $cid;
-//    }
-//
-//    /**
-//     * 将可叠加物品放入背包
-//     * @param int $itemId
-//     * @param int $num
-//     */
-//    static function PutOverlyingItemInStore($itemId, $num = 1) {
-//        //var_dump("item==============".$itemId);
-//
-//        $items = ctx()->store->items;                           # dic: itemid=>number
-//        if (CommUtil::isPropertyExists($items, $itemId)) {                      # 如果仓库中已经有这种元素,则其数目+=num
-//            $items->$itemId += $num;
-//        } else {                                                                # 如果仓库中没有这种元素,则其数目置为num
-//            $unlockNum = ctx()->privateState->expandNum * 5;
-//            $n = self::countStoreNum();
-//            $initNum = GameConfig::globalsettings()->Item_Packet_InitNum_New;
-//            my_Assert($n < $unlockNum + $initNum, ErrCode::store_bagSpaceNotEnough); # 没有的需要占用新的格子, 先判断下格子够不够用.
-//
-//            $items->$itemId = $num;
-//        }
-//        if (!in_array($itemId, ctx()->store->itemRecord)) {
-//            ctx()->store->itemRecord[] = $itemId;
-//        }
-//
-//        if (GameConfig::item_base_getItem($itemId)->subType == 341) {//血瓶
-//            foreach (ctx()->store->battleItem as $index => $val) {
-//                if ($val->id == $itemId) {
-//                    ctx()->store->battleItem->$index->num = $items->$itemId;
-//                }
-//            }
-//        }
-//    }
-//
-//    /**
-//     * 物品包裹打散成独立道具到仓库
-//     * @param GoodsItemModel $itemModel
-//     * @deprecated since version now
-//     */
-//    static function addSeprateItem($itemModel) {
-//        Err(ErrCode::err_method_obsoleted, "未更新包裹操作");
-//    }
-//
-//    /**
-//     * [6416] 给英雄装上言灵
-//     */
-//    static function WearYanlingToHero() {
-//        $user = ctx();                                           # user引用
-//        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) {                           # 检测该言灵是否装备到其他英雄身上
-//            Err(ErrCode::store_equipWeared_err);
-//        }
-//        $collectHeros = $user->heros->collectHeros;                             # 英雄集合
-//        my_Assert(null != $collectHeros, ErrCode::err_innerfault);              # 防御对象为空
-//        my_Assert(CommUtil::isPropertyExists($collectHeros, $herouid), ErrCode::hero_no); # 检查英雄是否存在
-//
-//        my_Assert($user->store->yanling->$yanling_uid->herouid == 0 || $user->store->yanling->$yanling_uid->herouid != $herouid, "该言灵不能重复装备");
-//        $hero = new Ins_UserHero($collectHeros->$herouid);                      # 取hero
-//        my_Assert($hero->level >= $yanlingVo->mo()->require_herolvl, "请提升唤灵师等级"); # 可装备的言灵等级受唤灵师等级限制.
-//        $user->store->yanling->$yanling_uid->herouid = $herouid;                # 言灵上添加反向引用, 避免查询时的循环
-//        $oldYLid = $collectHeros->$herouid->yanling->$itemtype->itemuid;        # 旧言灵id
-//        if ($oldYLid > 0) {                                                     # 代表替换操作
-//            $user->store->yanling->$oldYLid->herouid = 0;                       # 清理旧言灵的
-//        }
-//        $hero->yanling->$itemtype->itemuid = $yanling_uid;                      # 英雄身上添加言灵记录
-//        $collectHeros->$herouid = $hero;
-//        TaskProc::OnHeroWearYanling($collectHeros->$herouid->typeId, $user->store->yanling->$yanling_uid->typeId);
-//        UserProc::updateUserInfo();                                             # 5.回写数据
-//        $ret = array('resp' => "succeed!",
-//            'store' => $user->store);
-//        $resp = Resp::ok($ret);                                                 // 返回
-//        HeroProc::CalcUserFightPower(req()->zoneid, req()->uid, $user);           # 更新总战力榜
-//        return $resp;
-//    }
-//
-//    /**
-//     * [6417] 给英雄卸下言灵
-//     * @deprecated since version 无法卸下,只能更换
-//     */
-//    static function UnWieldYanling() {
-//        $user = ctx();                                           # user引用
-//        list($itemtype, $yanling_uid, $herouid) = req()->paras;                  # 提取参数: 装备类型, 装备的UID, 拥有该装备的英雄的UID
-//
-//        $collectHeros = $user->heros->collectHeros;
-//        my_Assert(null != $collectHeros, ErrCode::err_innerfault);              # 防御
-//        my_Assert(CommUtil::isPropertyExists($collectHeros, $herouid), ErrCode::hero_no); # 检测是否存在拥有该装备的英雄
-//        my_Assert(CommUtil::isPropertyExists($user->store->yanling, $yanling_uid), ErrCode::store_itemno_err); # 检测是否存在该装备
-//        if ($user->store->yanling->$yanling_uid->herouid == $herouid) {         # 取装备对象
-//            $user->store->yanling->$yanling_uid->herouid = 0;                   # 清理反向引用
-//        }
-////        $arr = $collectHeros->$herouid->yanling;
-////        my_Assert(in_array($yanling_uid, $arr), ErrCode::hero_yanling_notfound); # 未装备此言灵
-////        StlUtil::arrayRemove($arr, $yanling_uid);
-////        $collectHeros->$herouid->yanling = $arr;
-//
-//        my_Assert($collectHeros->$herouid->yanling->$itemtype->itemuid == $yanling_uid, ErrCode::store_noequip_err); # 防御
-//        $collectHeros->$herouid->yanling->$itemtype->itemuid = 0;               # 卸下
-//
-//        UserProc::updateUserInfo();                                             # 回写数据
-//        $resp = Resp::ok(array('resp' => "succeed!"));                          // 返回
-////        StoreProc::CheckItemNum($req);
-//        return $resp;
-//    }
-//
-//    /**
-//     * [6410] 给英雄穿装备
-//     */
-//    static function WearEquipToHero() {
-//        list($itemtype, $equipuid, $herouid) = req()->paras;                    # 提取参数: 装备类型, 装备的UID, 英雄的UID
-//        $user = ctx();                                          # 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) {                                            # 检测该装备是否装备到其他英雄身上
-//            my_Assert($equipVo->herouid == $herouid, ErrCode::store_equipWeared_err);
-//            $user->store->equipment->$equipuid->herouid = 0;                    # 清理原来已经装备的言灵的反指向
-//        }
-//        $collectHeros = $user->heros->collectHeros;
-//        my_default_Obj($collectHeros);
-//        my_Assert(CommUtil::isPropertyExists($collectHeros, $herouid), ErrCode::hero_no); # 检查是否存在需要装备的英雄
-//        $hero = new Ins_UserHero($collectHeros->$herouid);                      # 取hero
-//        my_Assert($hero->level >= $equipVo->mo()->require_herolvl, "请升级唤灵师."); # 检查武器要求的唤灵师等级, -gwang 2021.4.20
-//        $user->store->equipment->$equipuid->herouid = $herouid;                 # 装备上添加反向引用, 避免查询时的循环
-//        $oldEquipId = 0;
-//        switch ($itemtype) {                                                    # 添加或替换英雄该部位的装备
-//            case 1:                                                             # 武器
-//                $oldEquipId = $collectHeros->$herouid->equip->weapon->itemuid;
-//                $collectHeros->$herouid->equip->weapon->itemuid = $equipuid;
-//                break;
-//            case 2:                                                             # 防具
-//                $oldEquipId = $collectHeros->$herouid->equip->armor->itemuid;
-//                $collectHeros->$herouid->equip->armor->itemuid = $equipuid;
-//                break;
-//            case 3:                                                             # 饰品
-//                $oldEquipId = $collectHeros->$herouid->equip->ring->itemuid;
-//                $collectHeros->$herouid->equip->ring->itemuid = $equipuid;
-//                break;
-//            default :
-//                Err(ErrCode::store_equip_type);
-//                break;
-//        }
-//        if ($oldEquipId > 0 && $oldEquipId != $equipuid) {
-//            $user->store->equipment->$oldEquipId->herouid = 0;
-//        }
-//        UserProc::updateUserInfo();                                             // 5.回写数据
-////        StoreProc::CheckItemNum($req);
-//        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));                           // 返回
-//    }
-//
-//    /**
-//     * [6411] 给英雄脱装备
-//     * @deprecated since version 不能卸下装备, 只能更换.
-//     */
-//    static function UnWieldEquip() {
-//        list($itemtype, $equipuid, $herouid) = req()->paras;                    # 提取参数: 装备类型, 装备的UID, 拥有该装备的英雄的UID
-//        $user = ctx();                                          # user引用
-//
-//        $collectHeros = $user->heros->collectHeros;
-//        my_default_Obj($collectHeros);
-//        my_Assert(CommUtil::isPropertyExists($collectHeros, $herouid), ErrCode::hero_no);             # 检测是否存在拥有该装备的英雄
-//        my_Assert(CommUtil::isPropertyExists($user->store->equipment, $equipuid), 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;            # 卸下
-//                break;
-//            case 2:                                                             # 防具
-//                if ($collectHeros->$herouid->equip->armor->itemuid != $equipuid) {
-//                    Err(ErrCode::store_noequip_err);
-//                }
-//                $collectHeros->$herouid->equip->armor->itemuid = 0;
-//                break;
-//            case 3:                                                             # 饰品
-//                if ($collectHeros->$herouid->equip->ring->itemuid != $equipuid) {
-//                    Err(ErrCode::store_noequip_err);
-//                }
-//                $collectHeros->$herouid->equip->ring->itemuid = 0;
-//                break;
-//            default :
-//                Err(ErrCode::store_equip_type);
-//        }
-//        UserProc::updateUserInfo();                                             # 回写数据
-//        return Resp::ok(array('resp' => "succeed!"));                           // 返回
-//    }
-//
-//// </editor-fold>
-////
-//// <editor-fold defaultstate="collapsed" desc="    辅助方法    ">
-////
-//
-//    /**
-//     * 检查背包中物品的个数
-//     * @return int
-//     */
-//    public static function CheckItemNum() {
-//        $ItemObj = ctx()->store->items;
-//        $EquipObj = ctx()->store->equipment;
-//        $SegementObj = ctx()->store->segement;
-//        $HeroObj = ctx()->heros->collectHeros;
-//        $ItemNum = 0;
-//        if ($ItemObj) {
-//            foreach ($ItemObj as $value) {                                      ////检查宝石类可叠加物品的格子占用
-//                $ItemNum++;
-//            }
-//        }
-//        if ($SegementObj) {
-//            foreach ($SegementObj as $value) {                                  # 碎片
-//                $ItemNum++;
-//            }
-//        }
-//        if ($EquipObj) {
-//            foreach ($EquipObj as $value) {                                     // 检测装备类物品格子占用
-//                $ItemNum++;
-//            }
-//        }
-//        if ($HeroObj) {
-//            foreach ($HeroObj as $value) {                                      // 检测英雄装备到身上的情况,装备到英雄身上不占格子,要减去.
-//                $HeroEquipId = $value->equip->weapon->itemuid;
-//                if ($HeroEquipId > 0) {
-//                    $ItemNum--;
-//                }
-//                $HeroEquipId = $value->equip->armor->itemuid;
-//                if ($HeroEquipId > 0) {
-//                    $ItemNum--;
-//                }
-//                $HeroEquipId = $value->equip->ring->itemuid;
-//                if ($HeroEquipId > 0) {
-//                    $ItemNum--;
-//                }
-//            }
-//        }
-//        ctx()->privateState->ItemNum = $ItemNum;
-//        return $ItemNum;
-//    }
-//
-//    /**
-//     * 获取物品格子的上限值---废弃了
-//     * @return int 上限数值
-//     */
-////    public static function GetItemMaxNum() {
-////        $user = ctx();
-////        if (!CommUtil::isPropertyExists($user->privateState, "maxItemNum")) {
-////            $user->privateState->maxItemNum = glc()->Item_Packet_MaxNum;
-////        }
-////        return $user->privateState->maxItemNum;
-////    }
-//
-//    /**
-//     * 6412 背包扩容
-//     */
-//    public static function AddPacketNum() {
-//        $user = ctx();                                           # user引用
-//        if (!CommUtil::isPropertyExists($user->privateState, "maxItemNum")) {
-//            $user->privateState->maxItemNum = glc()->Item_Packet_MaxNum;
-//        }
-//        $costCash = glc()->Item_Packet_NumCostCash;                             # 钻石花费
-//        my_Assert($costCash > 0, ErrCode::paras_err);
-//        my_Assert($user->base()->Consume_Cash($costCash), ErrCode::notenough_cash_msg); # 6.进行消耗
-//
-//        $user->privateState->maxItemNum += 10;                                  # 扩容
-//        UserProc::updateUserInfo();                                             # 保存玩家数据
-//        $resp = Resp::ok(array('maxItemNum' => $user->privateState->maxItemNum)); # 返回值
-//        StoreProc::CheckItemNum();
-//        return $resp;
-//    }
-//
-//// </editor-fold>
-////
-//// <editor-fold defaultstate="collapsed" desc="   出售   ">
-////
-//
-//    /**
-//     * 出售单一的物品
-//     */
-//    static function sellItem() {
-//        Err(ErrCode::err_method_obsoleted, "代码需要更新");
-//    }
-//
-//    /**
-//     * 卖出一堆物品时候,检测每个单个物品是否符合卖的条件
-//     */
-//    static function preSellSingleFromStore($type, $itemId, $count, $uid) {
-//        Err(ErrCode::err_method_obsoleted, "代码需要更新");
-//    }
-//
-//    /**
-//     * 6403 从背包出售多个物品
-//     */
-//    static function sellMultiItemFromStore() {
-//        Err(ErrCode::err_method_obsoleted, "代码需要更新");
-//        $obj = req()->paras[0];                                                  // 获取物品的结构数组
-//        foreach ($obj as $value) {
-//            $type = $value[0];
-//            $itemId = $value[1];
-//
-//            if ($type > 3) {
-//                $count = intval($value[2]);  // 数量
-//                $uid = 0;
-//            } else {          ////先判断一下物品类型,如果是可叠加的,就按数量取值,如果是不可叠加的就按uid取值
-//                $count = 1;
-//                $uid = $value[2];
-//            }//物品的uid
-//            $resp = StoreProc:: preSellSingleFromStore($type, $itemId, $count, $uid);
-//        }
-//
-//        if (0 == $resp->err) {
-//            UserProc::updateUserInfo();
-//        }
-//
-//        StoreProc::CheckItemNum();
-//        return $resp;
-//    }
-//
-//// </editor-fold>
-////
-//}
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+namespace loyalsoft;
+
+/**
+ * Description of StoreProc
+ *
+ * @author c'y'zhao
+ */
+class StoreProc {
+    /**
+     * 逻辑分发
+     * 所有的Proc中必须有这样一个方法
+     * @param Req $req
+     */
+    public static function procMain($req) {
+        switch ($req->cmd) {
+            case CmdCode::cmd_store_put:                                        # 6401 放入仓库
+                return StoreProc::AddItemInStore();        
+            default:
+                Err(ErrCode::cmd_err);
+        }
+    }
+    
+    public static function AddItemInStore() {
+        
+    }
+}

+ 32 - 1483
Gameserver/App/process/TaskProc.php

@@ -1,1485 +1,34 @@
 <?php
 
-//
-//namespace loyalsoft;
-//
-///**
-// * 任务模块
-// * @version
-// *          1.0.0 Created at 2017-11-3. by --gwang
-// * @author gwang (mail@wanggangzero.cn)
-// * @copyright ? 2017-11-3, SJZ LoyalSoft Corporation & gwang. All rights reserved.
-// */
-//class TaskProc {
-//
-//    /**
-//     * 任务卡-同时激活数量上限
-//     */
-//    const TaskCard_ActiveMax = 9;
-//
-//    /**
-//     * 任务卡商店-刷新数量
-//     */
-//    const TaskCardShop_Refresh_ItemNum = 5;
-//
-//    static function procMain() {
-//        switch (req()->cmd) {
-//            case CmdCode::cmd_task_getInfo:                                     # 6201 刷新任务状态
-//                return TaskProc::GetTaskInfo();
-////            case CmdCode::cmd_task_getReward:                                   # 6202 领取任务奖励
-////                return TaskProc::GetTaskReward();
-////            case CmdCode::cmd_Task_setAttentionTask:                            # 6203 设置关注任务
-////                return TaskProc::setAttentionTask();
-//            case CmdCode::cmd_Task_getActiveReward:                             # 6204 领取日常任务活跃度阶段奖励
-//                return TaskProc::getActiveReward();
-//
-////---------------- 任务卡相关通讯 -----------------------------------------------
-//            case CmdCode::cmd_taskCard_PlotFinish:                              # 6210 任务卡剧情对话
-//                return self::PlotFinish();
-////            case CmdCode::cmd_taskCard_PlotExchangeTaskCard:                    # 6211 任务卡兑换奖励
-////                Err(ErrCode::err_method_obsoleted);
-////                return self::PlotExchangeTaskCard($req);
-////            case CmdCode::cmd_taskCard_PlotPresentTaskCard:                     # 6212 剧情赠送任务卡
-////                Err(ErrCode::err_method_obsoleted);
-////                return self::PlotPresetTaskCard($req);
-////            case CmdCode::cmd_taskCard_FinishAndReward:                         # 6213 任务卡完成,并即时结算
-////                Err(ErrCode::err_method_obsoleted);
-////                return self::ImmetRewardTaskCard($req);
-//
-//            case CmdCode::cmd_taskCard_onKillMonster:                           # 6214 杀死怪物事件
-//                return self::OnKillMonsterEvent();
-//
-//            case CmdCode::cmd_taskCard_active:                                  # 6215 激活任务卡
-//                return self::OnTaskCard_active();
-//            case CmdCode::cmd_taskCard_reward:                                  # 6216 领取任务卡奖励
-//                return self::OnTaskCard_reward();
-//            case CmdCode::cmd_taskCard_info:                                    # 6217 任务卡 - 更新信息
-//                return self::OnTaskCard_GetInfo();
-//            case CmdCode::cmd_taskCard_StepActionDone:                          # 6218 任务步骤 - start/finish action done
-//                return self::OnTaskCard_StepActionDone();
-//            case CmdCode::cmd_Task_setTracingCard:                              # 6219 设置当前追踪的任务卡
-//                return TaskProc::SetTracingCard();
-//            case CmdCode::cmd_task_StepFallBack:                                # 6220 任务步骤回撤重置
-//                return TaskProc::OnTaskStep_FallBack();
-//// --------------   任务卡商城 -----------------------------
-//            case CmdCode::cmd_taskcard_shop_open:                               # 6231 任务卡商店 - 开启
-//                return self::OnTaskCardShopOpen();
-//            case CmdCode::cmd_taskcard_shop_buy:                                # 6232 任务卡商店 - 购买
-//                return self::OnTaskCardShopBuy();
-//            case CmdCode::cmd_taskcard_shop_refresh:                            # 6233 任务卡商店 - 手动刷新
-//                return self::OnTaskCardShopRefresh();
-//            default:
-//                return Err(ErrCode::cmd_err);
-//        }
-//    }
-//
-//    // <editor-fold defaultstate="collapsed" desc="  任务卡商店">
-//
-//    /**
-//     * [6231] 任务卡商店 - 开启
-//     */
-//    static function OnTaskCardShopOpen() {
-//        $userInfo = ctx();
-//        if (null == $userInfo->taskCardShop) {                                  # 防御
-//            $userInfo->taskCardShop = new Info_TaskCard_Shop();
-//        }
-//        if (null == $userInfo->taskCardShop->curCards || count($userInfo->taskCardShop->curCards) < 1) {
-//            $arr = (array) GameConfig::taskcard_shop();                         # 奖池配置
-//            $arr = self::FilterPrizepool($arr);                                 # 利用玩家等级进行过滤
-//            $reward = ArrayInit();
-//            $err = self::Dice($arr, self::TaskCardShop_Refresh_ItemNum, $reward);  # 获得随机结果
-//            my_Assert(ErrCode::ok == $err, $err);
-//            $userInfo->taskCardShop->curCards = $reward;                        # 更新任务卡列表
-//            $userInfo->taskCardShop->selled = array();
-//            ctx($userInfo);
-//            UserProc::updateUserInfo();                                         # 回写玩家数据
-//        }
-//        return Resp::ok(array('taskCardShop' => $userInfo->taskCardShop));      # 返回最新任务卡列表
-//    }
-//
-//    /**
-//     * [6232] 任务卡商店 - 购买
-//     */
-//    static function OnTaskCardShopBuy() {
-//        list($typeId, $num) = req()->paras;                                      # 提取参数: 任务卡类型ID,数量(暂时默认为1)
-//        $shopItemMo = GameConfig::taskcard_shop_getItem($typeId);
-//        my_Assert(null != $shopItemMo, ErrCode::err_const_no);                  # 常量异常
-//        my_Assert($num == 1, ErrCode::paras_err);                               # 数量异常
-//        $userInfo = ctx();
-//        $userInfo->taskCardShop = new Info_TaskCard_Shop($userInfo->taskCardShop);
-//        my_Assert(!in_array($typeId, $userInfo->taskCardShop->selled), ErrCode::taskCard_selled);
-//        switch ($shopItemMo->pricetype) {
-//            case 0:                                    # 人民币
-//                Err(ErrCode::err_method_notimplement);
-////                my_Assert(Data_UserGame::Consume_Cash($userInfo->baseInfo, $shopItemMo->price), ErrCode::notenough_cash_msg); # 扣除费用
-//                break;
-//            case 1:                                    # 钻石
-//                my_Assert($userInfo->base()->Consume_Cash($shopItemMo->price), ErrCode::notenough_cash_msg); # 扣除费用
-//                break;
-//            case 2:                                    # 金币
-//                my_Assert($userInfo->base()->Consume_Gold($shopItemMo->price), ErrCode::notenough_gold_msg); # 扣除费用
-//                break;
-//            default:                                   # 其它
-//                Err(ErrCode::pay_m_type_err);                                   # 定价类型异常
-//                break;
-//        }
-//
-////        $cid = StoreProc::PutTaskCardInStore($typeId);                          # 添加任务卡到背包
-//        StoreProc::PutOverlyingItemInStore($typeId, $num);                      # 直接进包裹items
-//        StatisticsProc::TargetStatistics(Enum_TargetStatistics::shopTaskId_BuyUserNum, $typeId);
-//        $userInfo->taskCardShop->selled[] = $typeId;                            # 添加售罄记录
-//        UserProc::updateUserInfo();
-//
-//        self::OnBuyTaskCard($num);                                              # 监控购买任务卡的任务卡[・_・?]
-//        return Resp::ok(array(
-//                    'gold' => ctx()->baseInfo->gold,
-//                    'cash' => ctx()->baseInfo->cash,
-//                    'store' => ctx()->store));                   # 返回成功
-//    }
-//
-//    /**
-//     * [6233] 任务卡商店 - 手动刷新
-//     */
-//    public static function OnTaskCardShopRefresh() {
-//        $cost = GameConfig::globalsettings()->TaskCardShop_Refresh_Cash;        # 消耗
-//        $userInfo = ctx();
-////        var_dump(Data_UserGame::Consume_Cash($userInfo->baseInfo, $cost));
-//        my_Assert($userInfo->base()->Consume_Cash($cost), ErrCode::notenough_cash_msg); # 扣除费用
-//        // 刷新任务卡
-//        $arr = (array) GameConfig::taskcard_shop();                             # 奖池配置
-//        $arr = self::FilterPrizepool($arr);                               # 利用玩家等级进行过滤
-//        $reward = ArrayInit();
-//        $err = self::Dice($arr, self::TaskCardShop_Refresh_ItemNum, $reward);   # 获得随机结果
-//        my_Assert(ErrCode::ok == $err, $err);
-////        if (null == $userInfo->taskCardShop) {                                  # 防御
-//        $userInfo->taskCardShop = new Info_TaskCard_Shop($userInfo->taskCardShop);
-////        }
-//        $userInfo->taskCardShop->curCards = $reward;                            # 更新任务卡列表
-//        $userInfo->taskCardShop->selled = array();
-//        ctx($userInfo);
-//        UserProc::updateUserInfo();                                             # 回写玩家数据
-//        return Resp::ok(array(
-//                    'gold' => ctx()->baseInfo->gold,
-//                    'cash' => ctx()->baseInfo->cash,
-//                    'taskCardShop' => $userInfo->taskCardShop));                # 返回最新任务卡列表
-//    }
-//
-//    /**
-//     * 过滤奖池
-//     * @param array $arr 奖池
-//     */
-//    static function FilterPrizepool($arr) {
-//        $ret = array_filter($arr, function ($value) {
-//            return(ctx()->baseInfo->level >= $value->unlock_level); # 等级限制
-//        });
-//        return $ret;
-//    }
-//
-//    /**
-//     * 投骰子
-//     * @param assoc_array $arr 抽奖物品概率
-//     * @param int $number 连抽次数
-//     * @return array[] itemids
-//     */
-//    static function Dice($arr, $number, &$reward) {
-//        $max = 0;                                                               # 计算物品权重总和
-//        array_walk($arr, function ($value) use (&$max) {
-//            $max += $value->probability;
-//        });
-//        my_Assert($max > 0, ErrCode::err_const_no);                             # 配置数据有问题
-//        $reward = ArrayInit();
-//        for ($i = 0; $i < $number;) {
-//            $rnd = CommUtil::random(1, $max);                                   # 投骰子
-//            $start = 0;
-//            $rew = null;
-//            foreach ($arr as $item) {                                           # 循环判断落入那个物品上
-//                if ($start < $rnd && $rnd <= $start + $item->probability) {     # 落入区间
-//                    $rew = $item;                                               # 记录物品
-//                    break;
-//                }
-//                $start += $item->probability;                                   # 继续判断是否落入下一物品的区间
-//            } # foreach end
-//            if (!$rew) {
-//                return ErrCode::lottery_noselecteditem;
-//            }
-//            if (!in_array($rew->typeId, $reward)) {                             # 去除重复卡
-//                $reward[] = $rew->typeId;
-//                $i++;
-//            }
-//        } # for end
-//        return ErrCode::ok;
-//    }
-//
-//    //
-//// </editor-fold>
-////
-//    // <editor-fold defaultstate="collapsed" desc="  任务卡接口">
-//    //
-//
-//    /**
-//     * [6210]剧情对话-触发任务卡结束条件检测(中间某个step结束,进入下一个step)
-//     */
-//    static function PlotFinish() {
-//        list($gate_or_npc_id, $stage) = req()->paras;
-//        $bUpdate = self::OnPlotOver($gate_or_npc_id, $stage);                   # 触发一下任务检查,更新任务状态
-//        $arr = GameConfig::plot_getItem($gate_or_npc_id, $stage);               # 查找对应的剧情
-//        my_Assert(isset($arr), ErrCode::err_const_no);                          # 常量存在
-//        foreach ($arr as $plot) {
-//            isEditor() and $plot = new \sm_plot();
-//            if (!empty($plot->presentItem)) {
-//                if (strtolower($plot->presentItem) == strtolower("unlockBuild")) { # 特殊处理, 剧情中解锁建筑
-//                    ctx()->privateState->unlockedBuild[] = $plot->presentEffect; # 添加解锁记录
-//                    if ($plot->presentEffect == 1000) {
-//                        $college = new Info_College();
-//                        $college->setFunUnluckTs();
-//                    }
-//                    StatisticsProc::TargetStatistics(Enum_TargetStatistics::unlockbuidId, $plot->presentEffect);
-//                    NormalEventProc::OnUnlockBuild($plot->presentEffect);       # 插入解锁事件
-//                } else if (strtolower($plot->presentItem) == strtolower("rename")) {# 改名
-//                    // 跳过特殊字符串
-//                } else if (strtolower($plot->presentItem) == strtolower("zhaohuanyanling")) {
-//                    // 跳过特殊指令
-//                } else {                                                        # 普通奖励
-//                    StoreProc::AddMultiItemInStore($plot->presentItem);
-//                }
-//            }
-//            if (!empty($plot->recycleItem)) {
-//                $val = explode(",", $plot->recycleItem);
-//                my_Assert(count($val) > 1, "解析回收道具字符串出错");
-//                StoreProc::removeItemFromStore(ctx()->store, $val[0], $val[1]);
-//            }
-//        }
-//        UserProc::updateUserInfo();
-//        return Resp::ok(array('store' => ctx()->store,
-//                    'taskCardUpdate' => $bUpdate));
-//    }
-//
-//// <editor-fold defaultstate="collapsed" desc="废弃">
-////    /**
-////     * [6211] 任务卡-剧情结束兑换奖励(销毁当前卡,换取新的任务卡)
-////     * @deprecated since version 2020.12.12
-////     * @param type $req
-////     */
-////    static function PlotExchangeTaskCard($req) {
-////        Err(ErrCode::err_method_notimplement);
-////    }
-////
-////
-////    /**
-////     * [6212] 任务卡- 剧情对话奖励任务卡
-////     * @deprecated since version 2020.12.12
-////     * @param req $req
-////     */
-////    static function PlotPresetTaskCard($req) {
-////        // 发放任务卡
-////        list($rwdStr) = $req->paras;
-////        $err = StoreProc::AddMultiItemInStore($req, $rwdStr);
-////        my_Assert(ErrCode::ok == $err, $err);
-////        UserProc::updateUserInfo();
-////        return Resp::ok(array('store' => $req->userInfo->game->store));
-////    }
-////
-////    /**
-////     * [6213]任务卡 - 即时奖励型任务卡
-////     * @deprecated since version 2020.12.12
-////     * @param req $req
-////     */
-////    static function ImmetRewardTaskCard($req) {
-////        // 销毁任务卡, 发放奖励
-////        list($taskCardUID) = $req->paras;
-////        my_Assert(StlUtil::dictHasProperty($req->userInfo->game->store->taskcards, $taskCardUID), ErrCode::taskCard_no); # 防御
-////        $taskCard = new Ins_TaskCard($req->userInfo->game->store->taskcards->$taskCardUID); # 任务卡对象
-////        if (strlen($taskCard->mo()->reward) > 0) {                              # 防御奖励串为空
-////            StoreProc::AddMultiItemInStore($req, $taskCard->mo()->reward);      # 发放奖励
-////        }
-////        if (strlen($taskCard->mo()->newTaskCard) > 0) {                         # 防御新卡串为空
-////            StoreProc::AddMultiItemInStore($req, $taskCard->mo()->newTaskCard); # 发放新任务卡
-////        }
-////        StlUtil::dictRemove($req->userInfo->game->store->taskcards, $taskCardUID); # 移除任务卡
-////        UserProc::updateUserInfo();                                             # 回存玩家数据
-////        return Resp::ok(array('store' => $req->userInfo->game->store, 'taskCardUpdate' => true));         # 返回值更新背包
-////    }
-//// </editor-fold>
-//
-//    /**
-//     * [6214] 任务卡 - 杀死怪物事件
-//     */
-//    static function OnKillMonsterEvent() {
-//        // 触发一下任务检查
-//        list($monsterID, $num) = req()->paras;
-//        $bUpdate = self::OnKillMonster($monsterID, $num);
-//        return Resp::ok(array('store' => ctx()->store,
-//                    'taskCardUpdate' => $bUpdate));
-//    }
-//
-//    /**
-//     * [6215] 任务卡 - 激活任务卡
-//     */
-//    static function OnTaskCard_active() {
-//        list($taskCardUID) = req()->paras;                                       # 提取参数: 任务卡实例id
-//        $store = ctx()->store;                                   # 快速访问store
-//        my_Assert(StlUtil::dictHasProperty($store->taskcards, $taskCardUID), ErrCode::taskCard_no); # 防御找不到实例
-//        $taskCard = new Ins_TaskCard($store->taskcards->$taskCardUID);          # 任务卡对象
-//
-//        my_Assert($taskCard->state <= Enum_TaskCardStateType::notopen, ErrCode::taskCard_state); # 任务卡状态异常
-//        my_Assert(true != self::FindSameIngCard($taskCard->typeId), ErrCode::taskCard_active_multi); # 不可激活多张任务卡
-//        my_Assert(self::FindIngCardCount() <= self::TaskCard_ActiveMax, ErrCode::taskCard_active_max); # 激活数量上限
-//        $taskCard->state = Enum_TaskCardStateType::ing;
-//        NormalEventProc::OnTaskCard_Actived($taskCardUID, null);                # 带入事件
-//        foreach ($taskCard->curSteps as &$tsp) {                                # 初期里面只有一个任务
-//            $tsp = new Ins_TaskStep($tsp);
-//            if ($tsp->isStatusType()) {                                         # 如果是道具收集类的, 扣除所收集道具
-//                $tsp->autoCalcStatusCur();
-//            }
-////            $tsp->doStartAct();
-//        }
-//        if ($taskCard->IsFinish()) {                                            # 检查是否任务卡的所有步骤都已完成
-//            $taskCard->state = Enum_TaskCardStateType::finish;
-//            NormalEventProc::OnTaskCard_Finish($taskCard->uid, null);           # 广播卡完成事件
-//        }
-//        $store->taskcards->$taskCardUID = $taskCard;
-//
-//        self::autoRecoverTaskTracingState();                                    # 更新任务追踪.
-//        UserProc::updateUserInfo();                                             # 回存玩家数据
-//        return Resp::ok(array(
-//                    'priv' => ctx()->privateState,
-//                    'store' => ctx()->store
-//        ));         # 返回值更新背包
-//    }
-//
-//    static function FindSameIngCard($typeId) {
-//        $cardDic = ctx()->store->taskcards;
-//        $find = false;
-//        array_walk($cardDic, function ($inst) use ($typeId, &$find) {
-////             $inst = new Ins_TaskCard($inst);
-//            if ($inst->state == Enum_TaskCardStateType::ing && $inst->typeId == $typeId) {
-//                $find = true;
-//            }
-//        });
-//        return $find;
-//    }
-//
-//    static function FindIngCardCount() {
-//        $cardDic = ctx()->store->taskcards;
-//        $num = 0;
-//        array_walk($cardDic, function ($inst) use (&$num) {
-////             $inst = new Ins_TaskCard($inst);
-//            if ($inst->state == Enum_TaskCardStateType::ing                     #
-//                    && GameConfig::item_taskcard_getItem($inst->typeId)->type != 3) {
-//                $num++;
-//            }
-//        });
-//        return $num;
-//    }
-//
-//    /**
-//     * [6216] 任务卡 - 领取任务卡奖励
-//     */
-//    static function OnTaskCard_reward() {
-//        // 销毁任务卡, 发放奖励
-//        list($taskCardUID) = req()->paras;
-//        $store = ctx()->store();                                   # 快速访问store
-//        my_Assert(StlUtil::dictHasProperty($store->taskcards, $taskCardUID), ErrCode::taskCard_no); # 防御找不到实例
-//        $taskCard = new Ins_TaskCard($store->taskcards->$taskCardUID);          # 任务卡对象
-//
-//        my_Assert($taskCard->IsFinish(), ErrCode::task_progress_not_complete);  # 任务卡尚未完成
-//        my_Assert($taskCard->state < 4, ErrCode::task_reward_geted);            # 奖励已经领取过了
-//
-//        foreach ($taskCard->curSteps as &$tsp) {                                # 初期里面只有一个任务
-//            $tsp = new Ins_TaskStep($tsp);
-//            if ($tsp->mo()->cmd == Enum_TaskCmdType::GainItem) {                # 如果是道具收集类的, 扣除所收集道具
-//                $ok = StoreProc::removeItemFromStore($store, $tsp->mo()->paras, $tsp->mo()->num);
-//                my_Assert(ErrCode::ok == $ok, ErrCode::taskCard_gainItem_no);
-//            }
-//        }
-//        if (strlen($taskCard->mo()->reward) > 0) {                              # 防御奖励串为空
-//            StoreProc::AddMultiItemInStore($taskCard->mo()->reward);            # 发放奖励
-//            self::addYaoPing($taskCard->typeId, $taskCard->mo());
-//        }
-//        if ($taskCard->mo()->exp > 0) {                                         # 任务卡增加了指挥官经验
-//            ctx()->base()->Add_Exp($taskCard->mo()->exp);       # 加指挥官经验
-//        }
-//        $taskCard->state = Enum_TaskCardStateType::drawed;
-//        //2021-3-4
-//        $college = ctx()->college();
-//        $college->modifyTaskCardState($taskCard->typeId, Enum_TaskCardStateType::drawed);
-//        ctx()->college = $college;
-//
-//        $store->taskcards->$taskCardUID = $taskCard;                            # 回写任务数据
-//
-//        if ($taskCard->typeId == 601100082) {
-//            TaskProc::ResetDailyTaskCards(1);
-//        }
-//
-//        self::InitdailyTask_HandOver();                                         #检测每次任务中的交付任务是否需要挂载了
-//        NormalEventProc::OnTaskCard_Reward($taskCard->mo()->reward, $taskCardUID);      # 带入事件
-//        self::OnFinishTaskCard($taskCard);                                      # 触发检查任务卡的任务卡[・_・?]
-//        if (!empty($taskCard->mo()->newTaskCard)) {                             # 下一个任务卡存在
-//            StoreProc::PutTaskCardInStore($taskCard->mo()->newTaskCard);        # 放卡入背包
-//        }
-//
-//        if($taskCard->mo()->type == 4){
-//            ctx()->privateData(true)->shopTaskCompleteNum += 1;
-//        }
-//        SystemProc::CompleteSpecialNumXuanShangTask(req()->zoneid, ctx()->baseInfo->name);
-//        if ($taskCard->mo()->type == 2) {
-//            // 日常任务卡,不移除
-//        } else {
-//            StlUtil::dictRemove($store->taskcards, $taskCardUID);                   # 移除任务卡
-//        }
-//        self::autoRecoverStateMissions();                                       # 重新更新其它状态类的任务卡
-//        self::autoRecoverTaskTracingState();                                    # 更新任务追踪.
-//        StatisticsProc::SelfTaskDataCollect($taskCard->typeId);                 #统计自己的任务完成情况
-//        StatisticsProc::TaskDataCollect($taskCard->typeId);                     #统计最新任务
-//
-//        if ($taskCard->mo()->type == 1) {//主线
-//            StatisticsProc::TargetStatistics(Enum_TargetStatistics::mainTaskId_ComUserNum, $taskCard->typeId);
-//        }
-//
-//        if ($taskCard->mo()->type == 4) {//悬赏
-//            StatisticsProc::TargetStatistics(Enum_TargetStatistics::shopTaskId_ComUserNum, $taskCard->typeId);
-//        }
-//
-//        if ($taskCard->mo()->type == 2) {//日常
-//            StatisticsProc::TargetStatistics(Enum_TargetStatistics::dailyTaskId_ComUserNum, $taskCard->typeId);
-//        }
-//
-//        if ($taskCard->mo()->type == 3) {//圣哲
-//            StatisticsProc::TargetStatistics(Enum_TargetStatistics::collegeTaskId_ComUserNum, $taskCard->typeId);
-//        }
-//
-//        ctx()->college->addScore($taskCard->mo()->score);       #圣哲学院的任务是有积分累计的
-//        #
-//        UserProc::updateUserInfo();                                             # 回存玩家数据
-//        return Resp::ok(array(
-//                    'gold' => ctx()->baseInfo->gold,
-//                    'cash' => ctx()->baseInfo->cash,
-//                    'lvl' => ctx()->baseInfo->level,
-//                    'store' => ctx()->store,
-//                    'priv' => ctx()->privateState,
-//                    'college' => ctx()->college,));                   # 返回值更新背包
-//    }
-//
-//    static function addYaoPing($taskId, $mo) {
-//        if ($taskId == 601100022) {
-//            $str = explode(';', $mo->reward);
-//            $battleItem = ctx()->store->battleItem;
-//            foreach ($str as $item) {
-//                $list = explode(',', $item);
-//                $subType = GameConfig::item_base_getItem($list[0])->subType;
-//                if ($subType == 341 || $subType == 342) {
-//                    $tag = 999;
-//                    foreach ($battleItem as $index => $val) {
-//                        if ($val->id == $list[0]) {
-//                            $tag = $index;
-//                            break;
-//                        }
-//                    }
-//
-//                    if ($tag == 999) {
-//                        $k = 1;
-//                        for ($i = 1; $i <= 4; $i++) {
-//                            if (!StlUtil::dictHasProperty($battleItem, $i)) {
-//                                $k = $i;
-//                                break;
-//                            }
-//                        }
-//
-//                        $dic = new Ins_battleItem();
-//                        $dic->index = $k;
-//                        $dic->id = $list[0];
-//                        $dic->num = $list[1];
-//                        $glctx = GameConfig::globalsettings()->YaoPingAttrInitVal;
-//                        $slist = explode(';', $glctx);
-//                        $hp = explode(',', $slist[0])[1];
-//                        $mp = explode(',', $slist[1])[1];
-//                        $sType = GameConfig::item_base_getItem($list[0])->subType;
-//                        if ($sType == 341) {
-//                            $dic->attrVal = $hp;
-//                        } else {
-//                            $dic->attrVal = $mp;
-//                        }
-//
-//                        $battleItem->$k = $dic;
-//                    } else {
-//                        $battleItem->$tag->num += $list[1];
-//                    }
-//                    NormalEventProc::OnHPMPItemConfigChange();
-//                }
-//            }
-//
-//            ctx()->store->battleItem = $battleItem;
-//        }
-//    }
-//
-//    static function checkHandOverDailyTask() {
-//        if (ctx()->store->dailyTask_HandOver > 0) {
-//            return;
-//        }
-//
-//        $taskcards = ctx()->store->taskcards;
-//        $list = explode(',', glc()->dailyTask_HandOver);
-//
-//        $num = 0;
-//
-//        $handOverTask = 0;
-//        foreach ($taskcards as $uid => $task) {
-//            $mo = GameConfig::item_taskcard_getItem($task->typeId);
-//            if ($mo->type == 2) {
-//                if (in_array($task->typeId, $list)) {
-//                    $handOverTask = 1;
-//                }
-//
-//                if ($task->state == 4) {
-//                    $num += 1;
-//                }
-//            }
-//        }
-//
-//        if ($num >= 4 && $handOverTask == 0) {//每日任务全部完成,挂载每日任务--交付任务
-//            ctx()->store->dailyTask_HandOver = 1;
-//            $count = count($list);
-//            $rand = rand(0, $count - 1);
-//
-//            StoreProc::PutTaskCardInStore($list[$rand]);
-//        }
-//    }
-//
-//    /**
-//     * [6217] 任务卡 - 更新信息
-//     */
-//    static function OnTaskCard_GetInfo() {
-//        return Resp::ok(array('store' => ctx()->store));         # 返回值更新背包
-//    }
-//
-//    /**
-//     * [6218] 任务步骤 - start/finish Action done
-//     */
-//    static function OnTaskCard_StepActionDone() {
-//        list($taskCardUID, $stepTypeId, $actType) = req()->paras;                # 参数提取,卡uid,步骤类型id,actType: 1:start,2:finish.
-//        $store = ctx()->store;                                   # 快速访问store
-//        my_Assert(StlUtil::dictHasProperty($store->taskcards, $taskCardUID), ErrCode::taskCard_no); # 防御找不到实例
-//        $taskCard = new Ins_TaskCard($store->taskcards->$taskCardUID);          # 任务卡对象
-//
-//        foreach ($taskCard->curSteps as &$tsp) {                                # 初期里面只有一个任务
-//            $tsp = new Ins_TaskStep($tsp);
-//            if ($tsp->typeId == $stepTypeId) {                                  # 找到指定步骤
-//                if ($actType == 1) {
-//                    $tsp->doStartAct();
-//                } else if ($actType == 2) {
-//                    $tsp->doFinishAct();
-//                }
-//            }
-//        }
-//        $store->taskcards->$taskCardUID = $taskCard;
-//        UserProc::updateUserInfo();
-//        return Resp::ok(array('store' => ctx()->store));         # 返回值更新背包
-//    }
-//
-//    /**
-//     * [6219] 设置当前追踪的任务卡
-//     */
-//    static function SetTracingCard() {
-//        // (探索任务暂不开发)
-//        $pri = ctx()->privateData();                            # 私有数据
-//        // 设置追踪
-//        list($cardType, $cardUID) = req()->paras;                               # 参数: 任务标签类型(1:主线;2:日程;3:圣哲;4:商店), 任务卡id.
-//        my_default_Obj($pri->taskCardTracing);                                  # 确保 tracing数据结构是否完整.
-//        $pri->taskCardTracing->$cardType = $cardUID;                            # 更新tracing数据.
-//        UserProc::updateUserInfo();                                             # 回存
-//        return Resp::ok($pri->taskCardTracing);                                 # 返回成功
-//    }
-//
-//    /**
-//     * [6220] 任务步骤 - 回撤
-//     */
-//    static function OnTaskStep_FallBack() {
-//        // 遍历检查是否有任务步骤需要回撤
-//        $taskCards = ctx()->store->taskcards;                   # 快速访问store
-//        foreach ($taskCards as $uid => &$card) {                                # 加了&符号,理论上就能直接修改原始元素
-//            $card = new Ins_TaskCard($card);                                    # 任务卡对象
-//            $fallbackID = 0;
-//            $stepArr = array();
-//            foreach ($card->curSteps as &$tsp) {                                # 初期里面只有一个任务
-//                $tsp = new Ins_TaskStep($tsp);
-//                if (!$tsp->isFinish() && $tsp->mo()->fallback > 0) {            # 找到需要回撤的步骤,删除此步骤
-//                    $fallbackID = $tsp->mo()->fallback;
-//                } else {
-//                    $stepArr[] = $tsp;
-//                }
-//            }
-//            foreach ($stepArr as &$tsp) {                                       # 回撤上一步的进度
-//                if ($tsp->typeId == $fallbackID) {
-//                    $tsp->cur = 0;
-//                    NormalEventProc::OnTaskCardStep_Process($card->uid, $tsp->typeId); # 任务进度更新
-//                }
-//            }
-//            $card->curSteps = $stepArr;                                         # 更新任务步骤集合
-//        }
-//        ctx()->store->taskcards = $taskCards;                   # 更新任务卡
-//        UserProc::updateUserInfo();
-//        return Resp::ok();
-//    }
-//
-//    //
-//// </editor-fold>
-//    // <editor-fold defaultstate="collapsed" desc="  任务接口 ">
-//
-//    /**
-//     * [6204] 领取日常任务活跃度阶段奖励
-//     */
-//    static function getActiveReward() {
-//        list($num) = req()->paras;                                               # 提取参数: 领奖的阶段
-//        $userTask = ctx()->task;
-//        $rewardCfg = GameConfig::task_active_reward_getItem($num);              # 查找奖励配置
-//        my_Assert(null != $rewardCfg, ErrCode::err_const_no);                   # 防御: 常量丢失
-//        my_Assert(!in_array($num, $userTask->dailyActiveGetedRewardArr), ErrCode::task_reward_geted); # 判断尚未领取
-//        my_Assert($userTask->dailyActivePoint >= $num, ErrCode::task_activePoint_notenough);          # 判断活跃点数足够
-//        $ok = StoreProc::AddMultiItemInStore($rewardCfg->reward);         # 按照配置发放奖励
-//        my_Assert($ok == ErrCode::ok, $ok);                                     # 发放成功
-//        $userTask->dailyActiveGetedRewardArr[] = $num;                          # 添加领取记录
-//        UserProc::updateUserInfo();                                             # 回存数据
-//        return Resp::ok(array(//                                                # 返回
-//                    "gold" => ctx()->baseInfo->gold,
-//                    "cash" => ctx()->baseInfo->cash,
-//                    "tili" => ctx()->baseInfo->tili,
-//                    "store" => ctx()->store,
-//                    "task" => ctx()->task
-//        ));
-//    }
-//
-//    /**
-//     * [6203] 设置关注任务
-//     * @deprecated since version 0 废弃,替换为6219.(2021.9.26)
-//     */
-//    static function setAttentionTask() {
-////        list($taskId) = req()->paras;
-////        $userTask = ctx()->task;
-////
-////        my_Assert(StlUtil::dictHasProperty($userTask->taskListPlot, $taskId), ErrCode::task_no); # 任务存在
-////        $taskItem = new Ins_TaskInfo($userTask->taskListPlot->$taskId);
-////        my_Assert($taskItem->rewardGeted < 1, ErrCode::task_reward_geted);      # 任务奖励尚未领取
-////        $userTask->curTaskId = $taskId;
-//////        var_dump($userTask);
-////        UserProc::updateUserInfo();
-////        return Resp::ok(array("task" => ctx()->task));
-//    }
-//
-//    /**
-//     * [6202]领取任务奖励 问:每日任务奖励和剧情任务奖励领取接口是否为一个?
-//     * @deprecated since version 0 已经更换为领取任务卡奖励.
-//     */
-//    static function GetTaskReward() {
-////        list($taskId) = req()->paras;                                            # 提取参数: 任务id
-////        $userTask = new Info_UserTask(ctx()->task);
-////        $mask = 100000;                                                         # 根据id段来区分任务和每日任务.
-////        $type = intval($taskId / $mask);                                        # 取出taskId第一位判断任务类型
-////        switch ($type) {                                                        #
-////            case 4:                                                             # 剧情任务
-////                my_Assert(StlUtil::dictHasProperty($userTask->taskListPlot, $taskId), ErrCode::task_no); #判断是否存在指定任务
-////                $task = new Ins_TaskInfo($userTask->taskListPlot->$taskId);
-////                my_Assert($task->progress >= 1, ErrCode::task_progress_not_complete);   # 判断任务进度是否已完成>=1f
-////                my_Assert($task->rewardGeted < 1, ErrCode::task_reward_geted);          # 奖励不可重复领取
-////                $taskCfg = GameConfig::task_getItem($taskId);                           # 任务配置数据
-////                my_Assert($taskCfg != null, ErrCode::err_const_no);
-////                $ok = StoreProc::AddMultiItemInStore($taskCfg->reward);           # 发放任务奖励
-////                my_Assert($ok == ErrCode::ok, $ok);
-////                $task->rewardGeted = 1;
-////                $userTask->taskListPlot->$taskId = $task;
-////                if ($userTask->IsAllPlotTaskOver()) {                           # 检查当前节点任务是否已经全部清空
-////                    $userTask->curTaskNode += 1;
-////                    $userTask->taskListPlot = ObjectInit();
-////                    $userTask->initialize();
-////                }
-////                break;
-////            case 5:                                                             # 每日任务
-////                my_Assert(StlUtil::dictHasProperty($userTask->taskListDaily, $taskId), ErrCode::task_no);
-////                $task = new Ins_TaskInfo($userTask->taskListDaily->$taskId);
-////                my_Assert($task->progress >= 1, ErrCode::task_progress_not_complete);   # 判断任务进度是否已完成>=1f
-////                my_Assert($task->rewardGeted < 1, ErrCode::task_reward_geted);          # 奖励不可重复领取
-////                $taskCfg = GameConfig::task_daily_getItem($taskId);                     # 任务配置数据
-////                my_Assert($taskCfg != null, ErrCode::err_const_no);
-//////                Data_UserGame::Add_Exp(ctx()->baseInfo, $taskCfg->exp);  # 发放任务奖励
-////                ctx()->base()->Add_Exp($taskCfg->exp);          # 发放指挥官经验
-////                $userTask->dailyActivePoint += $taskCfg->activePoint;
-////                $task->rewardGeted = 1;
-////                $userTask->taskListDaily->$taskId = $task;                      # 回存下
-////                break;
-////            default:
-////                break;
-////        }
-////
-////        ctx()->task = $userTask;                                 # 回存
-////        UserProc::updateUserInfo();
-////        return Resp::ok(array(//                                                # 返回
-////                    "gold" => ctx()->baseInfo->gold,
-////                    "cash" => ctx()->baseInfo->cash,
-////                    "tili" => ctx()->baseInfo->tili,
-////                    "store" => ctx()->store,
-////                    "task" => ctx()->task
-////        ));
-//    }
-//
-//    /**
-//     * [6201]更新任务状态
-//     */
-//    static function GetTaskInfo() {
-//        self::autoRecoverStateMissions();                                       # 重新更新其它状态类的任务卡
-//        UserProc::updateUserInfo();
-//        return Resp::ok(array("task" => ctx()->task));
-//    }
-//
-//// </editor-fold>
-//
-//    /**
-//     * 每天重置日常任务.
-//     */
-//    static function ResetDailyTaskCards($start = 0) {
-//        $lv = glc()->DailyTaskLevelLimitLock;
-//
-//        if (ctx()->baseInfo->level < $lv) {
-//            return;
-//        }
-//
-////        var_dump("重置日常任务卡");
-//        $store = ctx()->store(true);
-//        my_default_Obj($store->taskcards);
-//
-//        $tag = 0;
-//        foreach ($store->taskcards as $k => $val) {
-//            $tp = GameConfig::item_taskcard_getItem($val->typeId)->type;
-//            if ($tp == 2) {
-//                $tag = 1;
-//                break;
-//            }
-//        }
-//
-//
-//        if ($start != 0 && $tag != 0) {
-//            return;
-//        }
-//
-//        if ($start == 0 && $tag == 0) {
-//            return;
-//        }
-//
-//        $dailyCards = new \stdClass();
-//        foreach (GameConfig::item_taskcard() as $id => $cardMo) {
-//            isEditor() and $cardMo = new \sm_item_taskcard();
-//            if ($cardMo->type == 2) {                                           # 1:主线;2:日程;3:圣哲;4:商店
-//                $dailyCards->$id = $cardMo;
-//            }
-//        }
-//        $dailyCards = (array) $dailyCards;
-//        ksort($dailyCards);
-//        foreach ($dailyCards as $id => $cardMo) {
-//            foreach ($store->taskcards as $uid => $card) {
-//                $cardVo = new Ins_TaskCard($card);
-//                if ($cardVo->typeId == $id) {                                   # 找到对应的实例.
-//                    unset($store->taskcards->$uid);                             # 删除昨日未完成日常
-//                }
-//            }
-//        }
-//        ctx()->store = $store;
-//
-//        $pri = ctx()->privateData();                                            # 私有数据
-//        $cardType = 2;                                                          # 日常任务,设置追踪
-//        my_default_Obj($pri->taskCardTracing);                                  # 确保 tracing数据结构是否完整.
-//
-//        $commonTaskList = explode(',', glc()->dailyTask_Common);
-//        if (count($commonTaskList) < 4) {
-//            // 再遍历一遍, 添加今日日常任务.
-//            rsort($commonTaskList);
-//            $cid = 0;
-//            foreach ($commonTaskList as $id) {
-//                $cid = StoreProc::PutTaskCardInStore($id);                      # 添加任务卡到背包
-//            }
-//
-//            $pri->taskCardTracing->$cardType = $cid;                            # 更新tracing数据
-//        } else {
-//            $tempCid = 0;
-//            $count = count($commonTaskList);
-//            $temp = array();
-//            while (true) {
-//                $num = rand(0, $count - 1);
-//                if (in_array($num, $temp)) {
-//                    continue;
-//                }
-//                $id = $commonTaskList[$num];
-//                $cid = StoreProc::PutTaskCardInStore($id);              # 添加任务卡到背包
-//                if ($tempCid == 0) {
-//                    $tempCid = $cid;
-//                }
-//
-//                $temp[] = $num;
-//                if (count($temp) >= 4) {
-//                    break;
-//                }
-//            }
-//            $pri->taskCardTracing->$cardType = $tempCid;                        # 更新tracing数据
-//        }
-//
-//        //重置每日任务里的交付任务
-//        //$handTaskId = glc()->dailyTask_HandOver;
-//        //StoreProc::PutTaskCardInStore($handTaskId);
-//
-//        UserProc::updateUserInfo();                                             # 回存数据.(不管从哪里调用的, 更新肯定没错.)
-//    }
-//
-//    static function InitdailyTask_HandOver() {
-//        $taskcards = ctx()->store->taskcards;
-//        $index = 0;
-//        $handTaskId = glc()->dailyTask_HandOver;
-//        $tag = true;
-//        foreach ($taskcards as $key => $val) {
-//            if (GameConfig::item_taskcard_getItem($val->typeId)->type == 2 && $val->state == 4) {
-//                $index += 1;
-//            }
-//
-//            if ($val->typeId == $handTaskId) {
-//                $tag = false;
-//            }
-//        }
-//
-//        if ($index >= 4 && $tag) {
-//            StoreProc::PutTaskCardInStore($handTaskId);
-//        }
-//    }
-//
-//    /**
-//     * 重置每日任务
-//     * @deprecated since version 0 已废弃,换用任务卡接口. (2021.9.26)
-//     */
-//    static function ResetDailyTask() {
-//        return;
-////        $userTask = new Info_UserTask(ctx()->task);
-////        $userTask->resetDailyTask();
-////        ctx()->task = $userTask;
-//    }
-//
-////
-//    // <editor-fold defaultstate="collapsed" desc="辅助方法-比对判断">
-//
-//    /**
-//     * 检查任务条件是否达成
-//     * @param Ins_TaskParams $taskParam Description
-//     * @deprecated since version 0 已废弃,换用taskcard.
-//     */
-//    static function CheckTaskConditions($taskParam) {
-//        return;
-//////        var_dump($taskParam);
-////        $bUpdate = false;
-////        foreach (ctx()->task->taskListPlot as $tid => $task) {
-////            $taskCfg = GameConfig::task_getItem($tid);
-////            my_Assert($taskCfg != null, ErrCode::err_const_no);                 # 获取任务配置数据
-////            if ($taskCfg->tasktype != $taskParam->taskType) {                   # 任务类型必须匹配
-////                continue;
-////            }
-////            isEditor() and $task = new Ins_TaskInfo(-1);
-////            if ($task->progress == 1) {                                         # 已完成的不再更新处理
-////                continue;
-////            }
-////            if (is_null($taskCfg->canshu1)) {
-////                $task->progress = 1;
-////                $bUpdate = true;
-////                continue;
-////            }
-////
-////            if ($taskCfg->canshu1 == $taskParam->canshu1) {
-////                $task->tag1 = $taskParam->canshu1;
-////                if (null == $taskCfg->canshu2 || 0 == $taskCfg->canshu2) {
-////                    $task->progress = 1;
-////                    $task->tag2 = $taskParam->canshu2;
-////                    $bUpdate = true;
-////                } else {
-////                    if (is_numeric($taskCfg->canshu2)) {
-////                        $task->tag2 = max($task->tag2, $taskParam->canshu2);
-////                        if ($taskCfg->canshu2 <= $taskParam->canshu2) {
-////                            $bUpdate = true;
-////                            $task->progress = 1;
-////                        }
-////                    } else {
-////                        $task->tag2 = $taskParam->canshu2;
-////                        if ($taskCfg->canshu2 == $taskParam->canshu2) {
-////                            $bUpdate = true;
-////                            $task->progress = 1;
-////                        }
-////                    }
-////                }
-////            }
-////        }
-////        if ($bUpdate) {
-////            CornerSignEventProc::OnTask_Plot_new();
-////        }
-//    }
-//
-//    /**
-//     * 检查任务条件是否达成
-//     * @param Ins_TaskParams $taskParam Description
-//     * @deprecated since version 0 已废弃,换用taskcard
-//     */
-//    static function CheckDailyTaskConditions($taskParam) {
-//        return;
-////        $bUpdate = false;
-////        $daily = ctx()->task->taskListDaily;
-////        foreach ($daily as $tid => &$task) {
-////            $taskCfg = GameConfig::task_daily_getItem($tid);
-////            my_Assert($taskCfg != null, ErrCode::err_const_no);                 # 获取任务配置数据
-////            if ($taskCfg->tasktype != $taskParam->taskType) {                   # 任务类型必须匹配
-////                continue;
-////            }
-////            $task = new Ins_TaskInfo($task);
-////            if ($task->progress >= 1) {                                         # 已完成的不再更新处理
-////                continue;
-////            }
-////            $task->counter++;                                                   # 计数器
-////            if (is_null($taskCfg->canshu1) || $taskCfg->canshu1 == 0) {
-////                $task->progress = 1;
-////                $bUpdate = true;
-////                continue;
-////            }
-////            if ($taskCfg->canshu1 == $task->counter) {
-////                $task->progress = 1;
-////                $bUpdate = true;
-////                continue;
-////            }
-////        }
-////
-////        if ($bUpdate) {
-////            CornerSignEventProc::OnTask_Daily_new();
-////        }
-//    }
-//
-//// </editor-fold>
-////
-//    // <editor-fold defaultstate="collapsed" desc="处理各种任务检测事务">
-//    //
-//
-//    /**
-//     * 神庙抽奖
-//     */
-//    static function OnTempleLottery() {
-////        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::TempleLottery);
-////        self::CheckTaskConditions($taskParam);
-//        $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::TempleLottery, Enum_PropelType::set, 1, array());
-//        self::CheckTaskCardConditions($taskEventArg);
-//    }
-//
-//    /**
-//     * 例如当指挥官等级提升的时候需要检查是否有任务达成
-//     */
-//    static function OnUserLevelUp($newLvl) {
-//        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::CommanderLevelUpTo, $newLvl);
-//        self::CheckTaskConditions($taskParam);
-//
-//        $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::CommanderLevelUpTo, Enum_PropelType::set, $newLvl, array($newLvl));
-//        self::CheckTaskCardConditions($taskEventArg);
-//    }
-//
-//    /**
-//     * 英雄升级
-//     * @param type $heroMoId
-//     * @param type $newLvl
-//     */
-//    static function OnHeroLevelUp($heroMoId, $newLvl) {
-//        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::HeroLevelUpTo, $heroMoId, $newLvl);
-//        self::CheckTaskConditions($taskParam);
-//        $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::HeroLevelUpTo, Enum_PropelType::set, $newLvl, array($heroMoId));
-//        self::CheckTaskCardConditions($taskEventArg);
-//    }
-//
-//    /**
-//     * 英雄升阶
-//     * @param type $heroMoId
-//     * @param type $newGrade
-//     */
-//    static function OnHeroGradeUp($heroMoId, $newGrade) {
-//        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::HeroGradeUpTo, $heroMoId, $newGrade);
-//        self::CheckTaskConditions($taskParam);
-//        self::OnHeroImprove();
-//        $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::HeroGradeUpTo, Enum_PropelType::add, 1, array());
-//        self::CheckTaskCardConditions($taskEventArg);
-//        $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::HeroGradeUpTo_status, Enum_PropelType::set, $newGrade, array());
-//        self::CheckTaskCardConditions($taskEventArg);
-//    }
-//
-//    /**
-//     * 英雄碎片数量达到指定值
-//     * @param type $heroMoId
-//     * @param type $num
-//     */
-//    static function OnHeroSegmengNum($heroMoId, $num) {
-//        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::HeroSegmentNumberTo, $heroMoId, $num);
-//        self::CheckTaskConditions($taskParam);
-//    }
-//
-//    /**
-//     * 英雄解锁技能
-//     * @param type $heroMoId
-//     * @param type $skillId
-//     */
-//    static function OnHeroUnlocSkill($heroMoId, $skillId) {
-//        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::HeroSkillUnlock, $heroMoId, $skillId);
-//        self::CheckTaskConditions($taskParam);
-//    }
-//
-//    /**
-//     * 英雄穿上武器
-//     * @param type $heroMoid
-//     * @param type $weaponMoId
-//     */
-//    static function OnHeroWearWeapon($heroMoid, $weaponMoId) {
-//        $weapMO = GameConfig::item_base_getItem($weaponMoId);
-//        my_Assert($weapMO, ErrCode::err_const_no);
-//        $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::HeroWearupWeapon_quality, Enum_PropelType::set, 1, array($heroMoid, $weapMO->quality));
-//        self::CheckTaskCardConditions($taskEventArg);
-//
-//        $taskEventArg1 = new Ins_TaskEventArgs(Enum_TaskCmdType::HeroWearingWeapon_Except, Enum_PropelType::set, 1, array($heroMoid, $weaponMoId));
-//        self::CheckTaskCardConditions($taskEventArg1);
-//    }
-//
-//    /**
-//     * 英雄装备言灵
-//     * @param type $heroMoid
-//     * @param type $weaponMoId
-//     */
-//    static function OnHeroWearYanling($heroMoid, $yanlingMoId) {
-//        $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::HeroWearupYanling, Enum_PropelType::set, 1, array($heroMoid, $yanlingMoId));
-//        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品质言灵任务
-//        $taskEventArg3 = new Ins_TaskEventArgs(Enum_TaskCmdType::HeroWearingYanling, Enum_PropelType::set, 1, array($heroMoid)); # 唤灵师装备了任意言灵
-//        self::CheckTaskCardConditions($taskEventArg3);
-//    }
-//
-//    /**
-//     * 通关剧情关卡
-//     * @param type $gateId
-//     * @param type $difficulty
-//     */
-//    static function OnPassGateN($gateId, $difficulty) {
-//        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::PassGateN, $gateId, $difficulty);
-//        self::CheckTaskConditions($taskParam);
-//        self::OnPassGate();
-////        var_dump("通关剧情检测 $gateId $difficulty");
-//        $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::PassGateN, Enum_PropelType::set, 1, array($gateId, $difficulty));
-//        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
-//     * @param type $difficulty 层数
-//     */
-//    static function OnPassEndlessCarboN($gateId, $difficulty) {
-////        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::passEndlessCarbonN, $gateId, $difficulty);
-////        self::CheckTaskConditions($taskParam);
-//        $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::passEndlessCarbonN, Enum_PropelType::set, $difficulty, array($gateId, $difficulty));
-////        var_dump($taskEventArg);
-//        self::CheckTaskCardConditions($taskEventArg);
-//    }
-//
-//    static function OnKillMonster($monsterID, $num) {
-//        $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::KillMonster, Enum_PropelType::add, $num, array($monsterID));
-//        return self::CheckTaskCardConditions($taskParam);
-//    }
-//
-//    /**
-//     * 获得道具
-//     */
-//    static function OnGainItem($itemId, $num) {
-//        $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::GainItem, Enum_PropelType::stat, $num, array($itemId));
-//
-//        self::CheckTaskCardConditions($taskParam);
-//    }
-//
-//    /**
-//     * 对话完成
-//     * @param type $gate_or_npc_id
-//     * @param type $stage
-//     * @return type
-//     */
-//    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"));
-//        self::CheckTaskCardConditions($taskParam);
-//    }
-//
-//    /**
-//     * 购买n张任务卡(非特定)
-//     * @param type $_num
-//     * @return type
-//     */
-//    static function OnBuyTaskCard($_num = 1) {
-//        $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::BuyTaskCard_Num, Enum_PropelType::add, $_num, array());
-//        self::CheckTaskCardConditions($taskParam);
-//    }
-//
-//    /**
-//     * 完成任务卡(不指定) 这是要造检查任务卡的任务卡[・_・?]
-//     * @param Ins_TaskCard $taskCard
-//     */
-//    static function OnFinishTaskCard($taskCard) {
-//        $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::FinishTaskCard_noID, Enum_PropelType::set, 1, array());
-//        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);
-//        }
-//    }
-//
-//    /**
-//     * 领取系统邮件奖励
-//     * @param type $mailId 指定邮件id
-//     * @return type
-//     */
-//    static function OnDrawSysMail($mailId) {
-//        $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::DrawSysMail_ID, Enum_PropelType::set, 1, array($mailId));
-//        self::CheckTaskCardConditions($taskParam);
-//    }
-//
-//    /**
-//     * 言灵升级
-//     * @param type $yanlingType
-//     * @param type $level
-//     * @return type
-//     */
-//    static function OnYanlingLevelUp($yanlingType, $level) {
-//        # 任意言灵提升
-//        $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::AnyYanlingLevelUp, Enum_PropelType::set, 1, array($yanlingType, $level));
-//        self::CheckTaskCardConditions($taskParam);
-//        # 指定言灵提升
-//        $taskParam2 = new Ins_TaskEventArgs(Enum_TaskCmdType::YanlingLevelUp, Enum_PropelType::set, $level, array($yanlingType));
-//        self::CheckTaskCardConditions($taskParam2);
-//    }
-//
-//    /**
-//     * 言灵升星(突破)
-//     * @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);
-//    }
-//
-//    /**
-//     *  领取任意一个学院课程下的任意一个任务(num:1,paras[])(学院界面)
-//     */
-//    static function OnGetSchoolTask() {
-//        $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::GetSchoolTask, Enum_PropelType::set, 1, array());
-//        self::CheckTaskCardConditions($taskParam);
-//    }
-//
-//    /**
-//     * 完成任意一个学院课程下的任意一张任务卡(num:1,paras:[])(学院界面)
-//     */
-//    static function OnFinishSchoolTask() {
-//        $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::FinishSchoolTask, Enum_PropelType::set, 1, array());
-//        self::CheckTaskCardConditions($taskParam);
-//    }
-//
-//    /**
-//     * 完成指课程的全部任务(num:1,paras:[courseId])(学院界面)
-//     * @param int $courseId 课程id
-//     */
-//    static function OnFinishAllSchoolTaskOfGrade($courseId) {
-//        $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::FinishAllSchoolTaskOfGrade, Enum_PropelType::set, 1, array($courseId));
-//        self::CheckTaskCardConditions($taskParam);
-//    }
-//
-//    /**
-//     * 特定武器升级到X等级
-//     * @param type $weaponId
-//     * @param type $level
-//     */
-//    static function OnWeaponLevelUp($weaponId, $level) {
-//        $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::WeaponLevelUp, Enum_PropelType::set, $level, array($weaponId));
-//        self::CheckTaskCardConditions($taskParam);
-//        $taskParam2 = new Ins_TaskEventArgs(Enum_TaskCmdType::AnyWeaponLevelUp, Enum_PropelType::set, $level, array());
-//        self::CheckTaskCardConditions($taskParam2);
-//    }
-//
-//    /**
-//     * 完成一次boss战胜利
-//     * @param type $gateId
-//     */
-//    static function OnPassWorldBoss($gateId) {
-////        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::PassWorldBoss, $gateId);
-////        self::CheckTaskConditions($taskParam);
-//        $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::PassWorldBoss, Enum_PropelType::set, 1, array($gateId));
-////        var_dump($taskEventArg);
-//        self::CheckTaskCardConditions($taskEventArg);
-////
-//        $taskEventArgDaily = new Ins_TaskEventArgs(Enum_TaskCmdType::DailyBossChallenge, Enum_PropelType::add, 1, array($gateId));
-////        var_dump($taskEventArgDaily);
-//        self::CheckTaskCardConditions($taskEventArgDaily);
-//    }
-//
-//    /**
-//     * 竞技场胜利场次
-//     * @param type $num
-//     */
-//    static function OnPvPWinN($num) {
-//        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::PvPWinNumberTo, $num);
-//        self::CheckTaskConditions($taskParam);
-//    }
-//
-//    /**
-//     * 竞技场积分
-//     * @param type $score
-//     */
-//    static function OnPvPScoreN($score) {
-//        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::PvPScoreTo, $score);
-//        self::CheckTaskConditions($taskParam);
-//    }
-//
-//    /**
-//     * 玩家总战力值
-//     * @param type $num
-//     */
-//    static function OnUserFightPowerN($num) {
-//        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::UserPowerTo, $num);
-//        self::CheckTaskConditions($taskParam);
-//    }
-//
-//    /**
-//     * 玩家收集积分
-//     * @param type $num
-//     */
-//    static function OnUserCollectScoreN($num) {
-//        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::UserCollectScoreTo, $num);
-//        self::CheckTaskConditions($taskParam);
-//    }
-//
-//    //
-//// </editor-fold>
-//    //
-//    // <editor-fold defaultstate="collapsed" desc="每日任务条件检查">
-//    //
-////    static function Upate
-//
-//    /**
-//     * 每日登陆
-//     */
-//    static function OnUserLogin() {
-//        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::DailyLogin);
-//        self::CheckDailyTaskConditions($taskParam);
-//        $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::DailyLogin, Enum_PropelType::set, 1, array());
-//        self::CheckTaskCardConditions($taskEventArg);                           # 检查日常任务
-//    }
-//
-//    /**
-//     * 每日:英雄强化(升级或升阶)n次
-//     */
-//    static function OnHeroImprove() {
-//        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::DailyHeroImprove);
-//        self::CheckDailyTaskConditions($taskParam);
-//        $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::DailyHeroImprove, Enum_PropelType::inc, 1, array());
-//        self::CheckTaskCardConditions($taskEventArg);                           # 检查日常任务
-//    }
-//
-//    /**
-//     * 每日:剧情关卡,胜利n次
-//     */
-//    static function OnPassGate() {
-//        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::DailyGatesWin);
-//        self::CheckDailyTaskConditions($taskParam);
-//        $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::DailyGatesWin, Enum_PropelType::inc, 1, array());
-//        self::CheckTaskCardConditions($taskEventArg);                           # 检查日常任务
-//    }
-//
-//    /**
-//     * 竞技场每日挑战,胜负均可
-//     */
-//    static function OnPvp() {
-//        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::DailyPVP);
-//        self::CheckDailyTaskConditions($taskParam);
-//        self::CheckTaskCardConditions($taskParam);
-//    }
-//
-//    /**
-//     * 每日挑战,胜负均可
-//     */
-//    static function OnRankChalenge() {
-//        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::DailyRankChalenge);
-//        self::CheckDailyTaskConditions($taskParam);
-//        self::CheckTaskCardConditions($taskParam);
-//    }
-//
-//    /**
-//     * 每日购买商品
-//     */
-//    static function OnShopping() {
-//        $taskParam = new Ins_TaskParams(Enum_TaskCmdType::DailyShopping);
-//        self::CheckDailyTaskConditions($taskParam);
-//        self::CheckTaskCardConditions($taskParam);
-//    }
-//
-//    //
-//// </editor-fold>
-//    //
-//    // <editor-fold defaultstate="collapsed" desc="处理任务卡条件检查">
-//    //
-//
-//    /**
-//     * 自动修正任务追踪信息
-//     */
-//    static function autoRecoverTaskTracingState() {
-//        $tasks = ctx()->store->taskcards;
-//        $pri = ctx()->privateData();
-//        for ($tp = 1; $tp < 5; $tp++) {
-//            if (StlUtil::dictHasProperty($pri->taskCardTracing, $tp)) {
-//                $curId = $pri->taskCardTracing->$tp;
-//            } else {
-//                $curId = 0;
-//            }
-//
-//            //$curId = my_null_default($pri->taskCardTracing->$tp, 0);            # 当前追踪中的任务卡id
-//
-//            $needRefresh = false;
-//            if ($curId > 0) {                                                   # 存在任务卡
-//                if (CommUtil::isPropertyExists($tasks, $curId)) {
-//                    $curTask = new Ins_TaskCard($tasks->$curId);
-//                    if ($curTask->state >= 4) {                                 # 任务卡已经被领取奖励, 尝试刷新
-//                        $needRefresh = true;
-//                    }
-//                } else {                                                        # 任务卡已经被删除, 尝试刷新
-//                    $needRefresh = true;
-//                }
-//            } else {                                                            # 没有追踪目标, 尝试刷新
-//                $needRefresh = true;
-//            }
-//
-//            if ($needRefresh) {
-//                $ok = false;
-//                foreach ($tasks as $tid => &$task) {
-//                    $task = new Ins_TaskCard($task);
-//                    if ($task->mo()->type == $tp) {
-//                        if ($task->state >= 4) {
-//                            continue;
-//                        }
-//                        $pri->taskCardTracing->$tp = $tid;
-//                        $ok = true;
-//                        break;
-//                    }
-//                }
-//                if (!$ok) {                                                     # 没有找到合适的追踪对象
-//                    $pri->taskCardTracing->$tp = 0;                             # 删除所有追踪(剩余任务已经全部完成了)
-//                }
-//                ctx()->store->taskcards = $tasks;
-//                ctx()->privateState = $pri;
-//            }
-//        }
-//    }
-//
-//    /**
-//     * 自动修复状态型任务
-//     */
-//    static function autoRecoverStateMissions() {
-//        $tasks = ctx()->store->taskcards;
-//        foreach ($tasks as $tid => &$task) {
-//            $task = new Ins_TaskCard($task);
-//
-//            if ($task->state == Enum_TaskCardStateType::ing //                  # 进行中的或者已完成的
-//                    || $task->state == Enum_TaskCardStateType::finish) {
-//                foreach ($task->curSteps as &$tsp) {                            # 初期里面只有一个任务
-//                    $tsp = new Ins_TaskStep($tsp);
-//                    $tsp->autoCalcStatusCur();
-//                }
-//                if ($task->state == Enum_TaskCardStateType::finish) {           # 检查是否任务卡的所有步骤都已完成
-//                    if (!$task->IsFinish()) {
-//                        $task->state = Enum_TaskCardStateType::ing;             # 状态回退
-//                    }
-//                }
-//            }
-//        }
-////        Clog::info("更新状态统计类的任务卡!");
-//        ctx()->store->taskcards = $tasks;
-//    }
-//
-//    /**
-//     * 检查任务卡条件是否达成
-//     * @param Ins_TaskEventArgs $taskParam Description
-//     */
-//    static function CheckTaskCardConditions($taskParam) {
-//        $bUpdate = false;
-//        $tasks = ctx()->store->taskcards;
-//        foreach ($tasks as $tid => &$task) {
-//            $task = new Ins_TaskCard($task);
-//            if ($task->state != Enum_TaskCardStateType::ing) {
-//                continue;
-//            }
-//            foreach ($task->curSteps as &$tsp) {                                # 初期里面只有一个任务
-//                $tsp = new Ins_TaskStep($tsp);
-//                if ($tsp->check_new($taskParam)) {
-//                    $bUpdate = true;
-//                    $tsp->propel($taskParam);
-//                    NormalEventProc::OnTaskCardStep_Process($task->uid, $tsp->typeId); # 任务进度更新
-//                    if ($tsp->isFinish()) {
-//                        NormalEventProc::OnTaskCardStep_Complete($task->uid, $tsp->typeId); # 广播任务步骤完成事件
-////                        $tsp->doFinishAct();
-//                    }
-//                }
-//            }
-//            if ($task->IsFinish()) {                                            # 检查后添加后续任务
-//                $arr = array();
-//                foreach ($task->curSteps as &$tsp) {                            # 初期里面只有一个任务
-//                    $tsp = new Ins_TaskStep($tsp);
-//                    if (strlen($tsp->mo()->next) > 0) {                         # 有后续任务
-//                        $arr = array_merge($arr, explode(',', $tsp->mo()->next)); # 累加下一个任务步骤
-//                    }
-//                }
-//                foreach ($arr as $stpid) {                                      # 轮询添加后续任务
-//                    if ($stpid > 0) {
-//                        $task->AddStep($stpid);                                 # 将后续任务追加到任务列表中
-//                    }
-//                }
-//
-//                if (count($arr) != 0) {
-//                    self::autoRecoverStateMissions();
-//                }
-//            }
-//            if ($task->IsFinish()) {                                            # 检查是否任务卡的所有步骤都已完成
-//                $task->state = Enum_TaskCardStateType::finish;
-//                NormalEventProc::OnTaskCard_Finish($task->uid, null);           # 广播卡完成事件
-//            }
-//        }
-//        if ($bUpdate) {                                                         # 带回数据到客户端
-//            ctx()->store->taskcards = $tasks;
-//            UserProc::updateUserInfo();                                         # 更新玩家数据
-//        }
-//
-//        return $bUpdate;
-//    }
-//
-//    //
-//    // </editor-fold>
-////
-//}
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+namespace loyalsoft;
+
+/**
+ * Description of TaskProc
+ *
+ * @author c'y'zhao
+ */
+class TaskProc {
+    /**
+     * 逻辑分发
+     * 所有的Proc中必须有这样一个方法
+     * @param Req $req
+     */
+    public static function procMain($req) {
+        switch ($req->cmd) {
+            case CmdCode::cmd_task_getInfo:                                     # 6201
+                return TaskProc::getTsskInfo();
+            case CmdCode::cmd_task_getReward:                                   # 6202
+                return TaskProc::getReward();    
+            default:
+                Err(ErrCode::cmd_err);
+        }
+    }
+    
+   
+}