Forráskód Böngészése

1. utils代码微调. 2. 任务卡商店增加售罄设置. 3. 任务卡增加多目标并行设计. 4. 收集类任务卡增加领取奖励时销毁已收集道具.

gwang 4 éve
szülő
commit
43b72f7d04

+ 14 - 0
Gameserver/Amfphp/base/ErrCode.php

@@ -567,6 +567,20 @@ class ErrCode {
      */
     const taskCard_active_multi = 3513;
 
+    /**
+     * 任务卡-同时激活数量达到上限(9)
+     */
+    const taskCard_active_max = 3514;
+
+    /**
+     * 任务卡-此卡已售罄
+     */
+    const taskCard_selled = 3515;
+
+    /**
+     * 任务卡-收集的道具数量尚未满足条件
+     */
+    const taskCard_gainItem_no = 3516;
 
 // </editor-fold>
     // 

+ 1 - 1
Gameserver/Amfphp/model/Const/GameConfig.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-12-22 10:44:44
+ // 日期: 2020-12-30 17:33:42
 ////////////////////
 
 /**

+ 1 - 1
Gameserver/Amfphp/model/Const/primordial_data.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-12-17 21:32:50
+ // 日期: 2020-12-29 16:47:03
 ////////////////////
 
 

+ 1 - 1
Gameserver/Amfphp/model/Const/sm_drop.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-12-18 18:29:39
+ // 日期: 2020-12-30 17:03:47
 ////////////////////
 
 

+ 1 - 1
Gameserver/Amfphp/model/Const/sm_eventAction.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-12-17 21:37:36
+ // 日期: 2020-12-30 17:32:38
 ////////////////////
 
 

+ 1 - 1
Gameserver/Amfphp/model/Const/sm_gate_combat.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-12-15 15:19:26
+ // 日期: 2020-12-28 11:42:49
 ////////////////////
 
 

+ 1 - 1
Gameserver/Amfphp/model/Const/sm_gatelevel.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-12-18 18:29:53
+ // 日期: 2020-12-30 16:53:34
 ////////////////////
 
 

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

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-12-18 09:37:17
+ // 日期: 2020-12-30 17:03:06
 ////////////////////
 
 

+ 1 - 1
Gameserver/Amfphp/model/Const/sm_item_base.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-12-18 16:23:28
+ // 日期: 2020-12-30 11:14:56
 ////////////////////
 
 

+ 1 - 1
Gameserver/Amfphp/model/Const/sm_item_taskcard.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-12-22 10:41:47
+ // 日期: 2020-12-30 11:13:34
 ////////////////////
 
 

+ 1 - 1
Gameserver/Amfphp/model/Const/sm_item_yanling.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-11-26 18:02:25
+ // 日期: 2020-12-29 16:53:08
 ////////////////////
 
 

+ 2 - 2
Gameserver/Amfphp/model/Const/sm_task_step.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-12-22 10:36:44
+ // 日期: 2020-12-25 14:04:43
 ////////////////////
 
 
@@ -85,7 +85,7 @@ class sm_task_step
     public $prizes;
 
     /**
-    * @var Int32 下一个任务(如果是任务卡的子任务则填下一个子任务id,如果是最后一个子任务则填0) default(0) 
+    * @var String 下一个任务(如果是任务卡的子任务则填下一个子任务id,如果是最后一个子任务则填0) default(0) 
     */
     public $next;
 

+ 1 - 1
Gameserver/Amfphp/model/Const/sm_taskcard_shop.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-12-17 15:41:09
+ // 日期: 2020-12-28 16:00:21
 ////////////////////
 
 

+ 11 - 0
Gameserver/Amfphp/model/User/Data_UserGame.php

@@ -130,6 +130,17 @@ class Data_UserGame extends HashSaver {
             $this->taskCardShop = new Info_TaskCard_Shop();                     # 任务卡商店
         } else {                                                                # 实参
             parent::__construct($arg);                                          # 调用Object的构造函数
+//            $this->shopdata = new Info_UserShop($this->shopdata);
+////            $this->NewbieGuide= new info_us
+//            $this->baseInfo = new Info_UserBase($this->baseInfo);
+//            $this->gates = new Info_UserGateDifficulty($this->gates);
+//            $this->heros = new Info_UserGameHero($this->heros);
+//            $this->privateState = new Info_PrivateState($this->privateState);
+////            $this->profile = n
+//            $this->pvp = new Info_UserPVP($this->pvp);
+//            $this->store = new Info_Store($this->store);
+//            $this->taskCardShop = new Info_TaskCard_Shop($this->taskCardShop);
+//            $this->userSecretshop = new Info_UserSecretshop($this->userSecretshop);
         }
         $this->profile = new Data_UserProfile();                                     # 初始化用户画像模块
     }

+ 5 - 0
Gameserver/Amfphp/model/User/Enum_PropelType.php

@@ -29,4 +29,9 @@ class Enum_PropelType extends Enum {
      */
     const max = 3;
 
+    /**
+     * 统计状态类的
+     */
+    const stat = 4;
+
 }

+ 5 - 0
Gameserver/Amfphp/model/User/Info_TaskCard_Shop.php

@@ -19,4 +19,9 @@ class Info_TaskCard_Shop extends Object_ext {
      */
     public $curCards = array();
 
+    /**
+     * @var array 已卖出记录
+     */
+    public $selled = array();
+
 }

+ 29 - 0
Gameserver/Amfphp/model/User/Ins_TaskCard.php

@@ -36,6 +36,7 @@ class Ins_TaskCard extends Object_ext {
 
     /**
      * @var type 当前任务步骤索引
+     * @deprecated since version 2020年12月25日13:44:43
      */
     public $curStepIndex = 0;
 
@@ -64,4 +65,32 @@ class Ins_TaskCard extends Object_ext {
         }
     }
 
+    /**
+     * @return boolean 分析任务卡是否已经完成所有步骤
+     */
+    public function IsFinish() {
+        $isFinish = true;
+        foreach ($this->curSteps as &$tsp) {                                   # 初期里面只有一个任务
+            $tsp = new Ins_TaskStep($tsp);
+            if (!$tsp->isFinish()) {
+                $isFinish = false;
+                break;
+            }
+        }
+        return $isFinish;
+    }
+
+    public function AddStep($stpid) {
+        $exists = false;
+        foreach ($this->curSteps as $stp) {
+//            $stp = new Ins_TaskStep($stp);
+            if ($stp->typeId == $stpid) {
+                $exists = true;
+            }
+        }
+        if (!$exists) {
+            $this->curSteps[] = new Ins_TaskStep($stpid);
+        }
+    }
+
 }

+ 65 - 1
Gameserver/Amfphp/model/User/Ins_TaskStep.php

@@ -68,6 +68,65 @@ class Ins_TaskStep extends Object_ext {
         }
     }
 
+    /**
+     * 是否状态型任务
+     * @param type $cmd
+     */
+    function isStatusType() {
+        return $this->mo()->cmd == Enum_TaskCmdType::GainItem;
+    }
+
+    /**
+     * 自动对齐可能出现统计失误的状态型任务计数
+     * @return boolean 是否有修改
+     */
+    function autoCalcStatusCur() {
+        if ($this->isStatusType()) {
+            $mo = $this->mo();
+            if ($mo != null) {
+                $cur = $this->calcStatusCur();
+                if ($cur > $this->max()) {
+                    $cur = $this->max();
+                }
+                if ($this->cur != $cur) {
+                    $this->cur = $cur;
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * @return int 计算状态类的进度
+     */
+    function calcStatusCur() {
+        $mo = $this->mo();
+        $paras = $this->paras();
+        $para0 = "";
+        $para1 = "";
+        $para2 = "";
+
+        if (count($paras) >= 1) {
+            $para0 = $paras[0];
+        }
+
+        if (count($paras) >= 2) {
+            $para1 = $paras[1];
+        }
+
+        if (count($paras) >= 3) {
+            $para2 = $paras[2];
+        }
+
+        switch ($mo->cmd) {
+            case Enum_TaskCmdType::GainItem:                                    # 收集道具
+                $store = new Info_Store(req()->userInfo->game->store);
+                return $store->GetItemCount($para0);
+        }
+        return 0;
+    }
+
     /**
      * 检查任务条件(与petmini采用相同的参数和判定方法2020年12月12日11:38:02)
      * @param Ins_TaskEventArgs $taskCardEvent
@@ -75,6 +134,9 @@ class Ins_TaskStep extends Object_ext {
      */
     public function check_new($taskCardEvent) {
 //        var_dump($taskCardEvent);
+        if ($this->isStatusType()) {                                            # 状态检查类任务
+            return $this->autoCalcStatusCur();
+        }
         if ($this->isFinish()) {
             return true;
         }
@@ -85,9 +147,11 @@ class Ins_TaskStep extends Object_ext {
         if (strlen($this->mo()->paras) <= 0) {                                  # 无参数
             return true;
         }
+
+
         $paras = $this->paras();
         $index = 0;
-        foreach ($taskCardEvent->paras as $para) {
+        foreach ($taskCardEvent->paras as $para) {                              # 其他任务, 执行参数判定
             if ($index < count($paras)) {
                 if (strpos($para, "|") !== false) {                             # 某个条件是"或"的关系, 即有多重可能值, 满足其一即可
                     $paraList = explode("|", $para);

+ 4 - 3
Gameserver/Amfphp/process/ActiveProc/CipheredBase32.php

@@ -34,6 +34,8 @@ class ActiveCode {
  */
 class CipheredBase32 {
 
+    const codeLength = 10;                                                      # 兑换码的长度固定为10
+
     /**
      * 密码本
      * @return string
@@ -49,13 +51,12 @@ class CipheredBase32 {
      * @throws \Exception
      */
     public static function Decode($codeString) {
-        $codeLength = 10;                                                       # 兑换码的长度固定为10
-        if ($codeLength != strlen($codeString)) {
+        if (self::codeLength != strlen($codeString)) {                          # 校验兑换码字符串长度
             return "activecode length wrong!";
         } else {
             $bytesof5bits = array();                                            # 将字符串转为索引数组:=[0..32]{10}
             $cipher = self::charMap();
-            for ($i = 0; $i < $codeLength; $i++) {
+            for ($i = 0; $i < self::codeLength; $i++) {
                 $c = $codeString[$i];                                           # 取字符
                 $b = strpos($cipher, $c);                                       # 按照密码本还原真实字符的索引
                 if ($b < 32 && $b > -1) {                                       # 索引范围校验

+ 0 - 2
Gameserver/Amfphp/process/EventProc/NormalEventProc.php

@@ -8,8 +8,6 @@ namespace loyalsoft;
  */
 class NormalEventProc {
 
-    //put your code here
-
     public static function OnHelloWorld($arg1, $arg2) {
         Resp::AddEvent(Enum_EventType::HelloWorld, $arg1, $arg2);
     }

+ 108 - 28
Gameserver/Amfphp/process/TaskProc.php

@@ -11,6 +11,14 @@ namespace loyalsoft;
  */
 class TaskProc {
 
+    /**
+     * 任务卡-同时激活数量上限
+     */
+    const TaskCard_ActiveMax = 9;
+
+    /**
+     * 任务卡商店-刷新数量
+     */
     const TaskCardShop_Refresh_ItemNum = 5;
 
     static function procMain($req) {
@@ -76,6 +84,7 @@ class TaskProc {
             $err = self::Dice($arr, self::TaskCardShop_Refresh_ItemNum, $reward);  # 获得随机结果
             my_Assert(ErrCode::ok == $err, $err);
             $userInfo->taskCardShop->curCards = $reward;                        # 更新任务卡列表
+            $userInfo->taskCardShop->selled = array();
             $req->userInfo->game = $userInfo;
             UserProc::updateUserInfo();                                         # 回写玩家数据 
         }
@@ -92,29 +101,32 @@ class TaskProc {
         my_Assert(null != $shopItemMo, ErrCode::err_const_no);                  # 常量异常
         my_Assert($num == 1, ErrCode::paras_err);                               # 数量异常
         $userInfo = $req->userInfo->game;
+        $userInfo->taskCardShop = new Info_TaskCard_Shop($userInfo->taskCardShop);
+        my_Assert(!in_array($typeId, $userInfo->taskCardShop->selled, $err), ErrCode::taskCard_selled);
         switch ($shopItemMo->pricetype) {
-            case 0:                     # 人民币
+            case 0:                                    # 人民币
                 Err(ErrCode::err_method_notimplement);
 //                my_Assert(Data_UserGame::Consume_Cash($userInfo->baseInfo, $shopItemMo->price), ErrCode::notenough_cash_msg); # 扣除费用
                 break;
-            case 1:                     # 钻石
+            case 1:                                    # 钻石
                 my_Assert(Data_UserGame::Consume_Cash($userInfo->baseInfo, $shopItemMo->price), ErrCode::notenough_cash_msg); # 扣除费用
                 break;
-            case 2:                     # 金币
+            case 2:                                    # 金币
                 my_Assert(Data_UserGame::Consume_Gold($userInfo->baseInfo, $shopItemMo->price), ErrCode::notenough_gold_msg); # 扣除费用
                 break;
-            default:
-                Err(ErrCode::pay_m_type_err);                               # 定价类型异常
+            default:                                   # 其它
+                Err(ErrCode::pay_m_type_err);                                   # 定价类型异常
                 break;
         }
 
         $cid = StoreProc::PutTaskCardInStore($typeId, $req);                    # 添加任务卡到背包
+        $userInfo->taskCardShop->selled[] = $typeId;                            # 添加售罄记录
         UserProc::updateUserInfo();
         NormalEventProc::OnTaskBag_new_Card($cid, $num);                        # 播放获得任务卡事件
         return Resp::ok(array(
                     'gold' => $req->userInfo->game->baseInfo->gold,
                     'cash' => $req->userInfo->game->baseInfo->cash,
-                    'store' => $req->userInfo->game->store));         # 返回成功
+                    'store' => $req->userInfo->game->store));                   # 返回成功
     }
 
     /**
@@ -130,18 +142,19 @@ class TaskProc {
         $arr = (array) GameConfig::taskcard_shop();                             # 奖池配置
         $arr = self::FilterPrizepool($req, $arr);                               # 利用玩家等级进行过滤
         $reward = ArrayInit();
-        $err = self::Dice($arr, self::TaskCardShop_Refresh_ItemNum, $reward); # 获得随机结果
+        $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->curCards = $reward;                         # 更新任务卡列表
+//        if (null == $userInfo->taskCardShop) {                                  # 防御
+        $userInfo->taskCardShop = new Info_TaskCard_Shop($userInfo->taskCardShop);
+//        }
+        $userInfo->taskCardShop->curCards = $reward;                            # 更新任务卡列表
+        $userInfo->taskCardShop->selled = array();
         $req->userInfo->game = $userInfo;
         UserProc::updateUserInfo();                                             # 回写玩家数据 
         return Resp::ok(array(
                     'gold' => $req->userInfo->game->baseInfo->gold,
                     'cash' => $req->userInfo->game->baseInfo->cash,
-                    'taskCardShop' => $userInfo->taskCardShop));     # 返回最新任务卡列表
+                    'taskCardShop' => $userInfo->taskCardShop));                # 返回最新任务卡列表
     }
 
     /**
@@ -150,9 +163,8 @@ class TaskProc {
      * @param array $arr 奖池
      */
     static function FilterPrizepool($req, $arr) {
-        # 等级限制
         $ret = array_filter($arr, function ($value) use($req) {
-            return($req->userInfo->game->baseInfo->level >= $value->unlock_level);
+            return($req->userInfo->game->baseInfo->level >= $value->unlock_level); # 等级限制
         });
         return $ret;
     }
@@ -168,11 +180,9 @@ class TaskProc {
         array_walk($arr, function ($value) use(&$max) {
             $max += $value->probability;
         });
-        if (!$max) {                                                            # 配置数据有问题
-            return ErrCode::err_const_no;
-        }
+        my_Assert($max > 0, ErrCode::err_const_no);                             # 配置数据有问题
         $reward = ArrayInit();
-        for ($i = 0; $i < $number; $i++) {
+        for ($i = 0; $i < $number;) {
             $rnd = CommUtil::random(1, $max);                                   # 投骰子
             $start = 0;
             $rew = null;
@@ -186,9 +196,11 @@ class TaskProc {
             if (!$rew) {
                 return ErrCode::lottery_noselecteditem;
             }
-            $reward[] = $rew->typeId;
-        } # for end
-//        $rewardstr = implode(',', $reward);
+            if (!in_array($rew->typeId, $reward)) {                             # 去除重复卡
+                $reward[] = $rew->typeId;
+                $i++;
+            }
+        } # for end 
         return ErrCode::ok;
     }
 
@@ -280,10 +292,21 @@ class TaskProc {
 
         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, $err);
         $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();
+            }
+        }
+        if ($taskCard->IsFinish()) {                                            # 检查是否任务卡的所有步骤都已完成
+            $taskCard->state = Enum_TaskCardStateType::finish;
+            NormalEventProc::OnTaskCard_Finish($taskCard->uid, null);           # 广播卡完成事件
+        }
         $store->taskcards->$taskCardUID = $taskCard;
         UserProc::updateUserInfo();                                             # 回存玩家数据
-        NormalEventProc::OnTaskCard_Actived($taskCardUID, null);                # 带入事件
         return Resp::ok(array('store' => $req->userInfo->game->store));         # 返回值更新背包
     }
 
@@ -299,6 +322,18 @@ class TaskProc {
         return $find;
     }
 
+    static function FindIngCardCount() {
+        $cardDic = req()->userInfo->game->store->taskcards;
+        $num = 0;
+        array_walk($cardDic, function ($inst) use(&$find) {
+//             $inst = new Ins_TaskCard($inst); 
+            if ($inst->state == Enum_TaskCardStateType::ing) {
+                $num++;
+            }
+        });
+        return $num;
+    }
+
     /**
      * [6216] 任务卡 - 领取任务卡奖励
      * @param req $req
@@ -309,12 +344,22 @@ class TaskProc {
         $store = $req->userInfo->game->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->isStatusType()) {                                         # 如果是道具收集类的, 扣除所收集道具
+                $ok = StoreProc::removeItemFromStore($store, $tsp->mo()->paras, $tsp->mo()->num);
+                my_Assert(ErrCode::ok == $ok, ErrCode::taskCard_gainItem_no);
+            }
+        }
+        self::autoRecoverStateMissions();                                       # 重新更新状态类的任务卡
         if (strlen($taskCard->mo()->reward) > 0) {                              # 防御奖励串为空
             StoreProc::AddMultiItemInStore($req, $taskCard->mo()->reward);      # 发放奖励
         }
         $taskCard->state = Enum_TaskCardStateType::drawed;
         NormalEventProc::OnTaskCard_Reward($taskCard->mo()->reward, null);      # 带入事件
         StlUtil::dictRemove($req->userInfo->game->store->taskcards, $taskCardUID); # 移除任务卡
+        $req->userInfo->game->store = $store;
         UserProc::updateUserInfo();                                             # 回存玩家数据
         return Resp::ok(array(
                     'gold' => $req->userInfo->game->baseInfo->gold,
@@ -713,6 +758,30 @@ class TaskProc {
     // <editor-fold defaultstate="collapsed" desc="处理任务卡条件检查">
     // 
 
+    /**
+     * 自动修复状态型任务
+     * @param RequestVo $req
+     */
+    static function autoRecoverStateMissions() {
+        $tasks = req()->userInfo->game->store->taskcards;
+        foreach ($tasks as $tid => &$task) {
+            $task = new Ins_TaskCard($task);
+            if ($task->state != Enum_TaskCardStateType::ing //                   # 进行中的或者已完成的
+                    || $task != Enum_TaskCardStateType::finish) {
+                continue;
+            }
+            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;                 # 状态回退
+                }
+            }
+        }
+    }
+
     /**
      * 检查任务卡条件是否达成
      * @param Ins_TaskParams $taskParam Description
@@ -726,18 +795,29 @@ class TaskProc {
             if ($task->state != Enum_TaskCardStateType::ing) {
                 continue;
             }
-            foreach ($task->curSteps as &$tsp) {                                 # 初期里面只有一个任务
+            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()) {
-                        $task->state = Enum_TaskCardStateType::finish;
+
+                        if (strlen($tsp->mo()->next) > 0) {                     # 有后续任务
+                            $arr = explode(',', $tsp->mo()->next);
+                            foreach ($arr as $stpid) {
+                                if ($stpid > 0) {
+                                    $task->AddStep($stpid);                     # 将后续任务追加到任务列表中
+                                }
+                            }
+                        }
                         NormalEventProc::OnTaskCardStep_Complete($task->uid, $tsp->typeId); # 广播任务步骤完成事件
-                        NormalEventProc::OnTaskCard_Finish($task->uid, null);   # 广播卡完成事件
+                        if ($task->IsFinish()) {                                # 检查是否任务卡的所有步骤都已完成
+                            $task->state = Enum_TaskCardStateType::finish;
+                            NormalEventProc::OnTaskCard_Finish($task->uid, null); # 广播卡完成事件
+                        }
                     }
-                    break;
+//                    break;
                 }
             }
         }
@@ -758,9 +838,9 @@ class TaskProc {
      * 获得道具
      */
     static function OnGainItem($itemId, $num) {
-        $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::GainItem, Enum_PropelType::add, $num, array($itemId));
-        self::CheckTaskCardConditions($taskParam);
+        $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::GainItem, Enum_PropelType::stat, $num, array($itemId));
         NormalEventProc::OnBag_new_Item($itemId, $num);
+        self::CheckTaskCardConditions($taskParam);
     }
 
     static function OnPlotOver($gate_or_npc_id, $stage) {

+ 12 - 8
Gameserver/Amfphp/test.php

@@ -9,16 +9,20 @@ echoLine("phpver: " . PHP_VERSION . PHP_EOL);
 //set_time_limit(15);                                                           # 设置执行超时时间
 //
 
-$paras = explode(',', "");
-var_dump($paras);
-if (strlen("") <= 0) {
-    echoLine("ok");
-} else {
-    echoLine("false");
-    var_dump(count($paras));
-}
 
+$arr = array("name" => "王刚",
+    "sex" => "male",
+);
+$url = "https://siapcn.galaxyappstore.com/samsung/coupon-merch/player/login_check";
+$par = '{"applyNo":"5000951584","uid":"54337601","sign":"bnECLDsKKI3n3jBEPHfVvOuoQH\/n8QlVnbfeS5Rk3+jt6WqtMjMDzIZtEaL0TCaxssz0wa5YJ8TxnFe+3smElIYc1jSYzKpGFZi15w8iWk6wyVn4az15HXzNc66ImSFq1RAgkoe8BAMVWUfhr2Jz2c+k4dZuZ+c5vG6miZTznWY="}';
+$resp = HttpUtil::makeRequest($url, $par, array(), array('Content-type: application/json;charset=utf-8'));
 
+var_dump($resp);
+
+$url = "http://192.168.10.86/PetMulti/Gameserver/Amfphp/service_call/pay/samsung/login_samsung_dy.php";
+$par = "appid=5000951584&signature=1c30d675131e7af135ead2ca8f6a20a3&uid=54337601&signMethod=MD5&";
+$resp = HttpUtil::makeRequest($url, $par);
+var_dump($resp);
 //
 //test(function() {
 //    $key = "test";

+ 1 - 1
Gameserver/Amfphp/util/HttpUtil.php

@@ -31,7 +31,7 @@ class HttpUtil {
      * @return array 结果数组 {"result":bool,"msg":返回值/curlErrMsg,"errno":curl错误码,"ifno":curlInfo}
      */
     public static function makeRequest($url, $params, $cookie = array(), #
-            $header = array(), $method = 'post', $protocol = 'http') {
+            $header = array(), $method = 'post', $protocol = 'https') {
         $query_string = self::makeQueryString($params);
         $cookie_string = self::makeCookieString($cookie);
 

+ 10 - 3
Gameserver/nbproject/private/private.xml

@@ -12,10 +12,17 @@
     </editor-bookmarks>
     <open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
         <group>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/Services/TestServer.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/util/SelfChecker.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/test.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/process/del_MissProc.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/util/HttpUtil.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/process/ActiveProc/CipheredBase32.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/process/EventProc/NormalEventProc.php</file>
             <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/process/TaskProc.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/Data_UserGame.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/Info_Store.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/Ins_TaskCard.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/main.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/Ins_TaskStep.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/process/del_HeroDiscussProc.php</file>
         </group>
     </open-files>
 </project-private>