TaskProc.php 68 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485
  1. <?php
  2. //
  3. //namespace loyalsoft;
  4. //
  5. ///**
  6. // * 任务模块
  7. // * @version
  8. // * 1.0.0 Created at 2017-11-3. by --gwang
  9. // * @author gwang (mail@wanggangzero.cn)
  10. // * @copyright ? 2017-11-3, SJZ LoyalSoft Corporation & gwang. All rights reserved.
  11. // */
  12. //class TaskProc {
  13. //
  14. // /**
  15. // * 任务卡-同时激活数量上限
  16. // */
  17. // const TaskCard_ActiveMax = 9;
  18. //
  19. // /**
  20. // * 任务卡商店-刷新数量
  21. // */
  22. // const TaskCardShop_Refresh_ItemNum = 5;
  23. //
  24. // static function procMain() {
  25. // switch (req()->cmd) {
  26. // case CmdCode::cmd_task_getInfo: # 6201 刷新任务状态
  27. // return TaskProc::GetTaskInfo();
  28. //// case CmdCode::cmd_task_getReward: # 6202 领取任务奖励
  29. //// return TaskProc::GetTaskReward();
  30. //// case CmdCode::cmd_Task_setAttentionTask: # 6203 设置关注任务
  31. //// return TaskProc::setAttentionTask();
  32. // case CmdCode::cmd_Task_getActiveReward: # 6204 领取日常任务活跃度阶段奖励
  33. // return TaskProc::getActiveReward();
  34. //
  35. ////---------------- 任务卡相关通讯 -----------------------------------------------
  36. // case CmdCode::cmd_taskCard_PlotFinish: # 6210 任务卡剧情对话
  37. // return self::PlotFinish();
  38. //// case CmdCode::cmd_taskCard_PlotExchangeTaskCard: # 6211 任务卡兑换奖励
  39. //// Err(ErrCode::err_method_obsoleted);
  40. //// return self::PlotExchangeTaskCard($req);
  41. //// case CmdCode::cmd_taskCard_PlotPresentTaskCard: # 6212 剧情赠送任务卡
  42. //// Err(ErrCode::err_method_obsoleted);
  43. //// return self::PlotPresetTaskCard($req);
  44. //// case CmdCode::cmd_taskCard_FinishAndReward: # 6213 任务卡完成,并即时结算
  45. //// Err(ErrCode::err_method_obsoleted);
  46. //// return self::ImmetRewardTaskCard($req);
  47. //
  48. // case CmdCode::cmd_taskCard_onKillMonster: # 6214 杀死怪物事件
  49. // return self::OnKillMonsterEvent();
  50. //
  51. // case CmdCode::cmd_taskCard_active: # 6215 激活任务卡
  52. // return self::OnTaskCard_active();
  53. // case CmdCode::cmd_taskCard_reward: # 6216 领取任务卡奖励
  54. // return self::OnTaskCard_reward();
  55. // case CmdCode::cmd_taskCard_info: # 6217 任务卡 - 更新信息
  56. // return self::OnTaskCard_GetInfo();
  57. // case CmdCode::cmd_taskCard_StepActionDone: # 6218 任务步骤 - start/finish action done
  58. // return self::OnTaskCard_StepActionDone();
  59. // case CmdCode::cmd_Task_setTracingCard: # 6219 设置当前追踪的任务卡
  60. // return TaskProc::SetTracingCard();
  61. // case CmdCode::cmd_task_StepFallBack: # 6220 任务步骤回撤重置
  62. // return TaskProc::OnTaskStep_FallBack();
  63. //// -------------- 任务卡商城 -----------------------------
  64. // case CmdCode::cmd_taskcard_shop_open: # 6231 任务卡商店 - 开启
  65. // return self::OnTaskCardShopOpen();
  66. // case CmdCode::cmd_taskcard_shop_buy: # 6232 任务卡商店 - 购买
  67. // return self::OnTaskCardShopBuy();
  68. // case CmdCode::cmd_taskcard_shop_refresh: # 6233 任务卡商店 - 手动刷新
  69. // return self::OnTaskCardShopRefresh();
  70. // default:
  71. // return Err(ErrCode::cmd_err);
  72. // }
  73. // }
  74. //
  75. // // <editor-fold defaultstate="collapsed" desc=" 任务卡商店">
  76. //
  77. // /**
  78. // * [6231] 任务卡商店 - 开启
  79. // */
  80. // static function OnTaskCardShopOpen() {
  81. // $userInfo = ctx();
  82. // if (null == $userInfo->taskCardShop) { # 防御
  83. // $userInfo->taskCardShop = new Info_TaskCard_Shop();
  84. // }
  85. // if (null == $userInfo->taskCardShop->curCards || count($userInfo->taskCardShop->curCards) < 1) {
  86. // $arr = (array) GameConfig::taskcard_shop(); # 奖池配置
  87. // $arr = self::FilterPrizepool($arr); # 利用玩家等级进行过滤
  88. // $reward = ArrayInit();
  89. // $err = self::Dice($arr, self::TaskCardShop_Refresh_ItemNum, $reward); # 获得随机结果
  90. // my_Assert(ErrCode::ok == $err, $err);
  91. // $userInfo->taskCardShop->curCards = $reward; # 更新任务卡列表
  92. // $userInfo->taskCardShop->selled = array();
  93. // ctx($userInfo);
  94. // UserProc::updateUserInfo(); # 回写玩家数据
  95. // }
  96. // return Resp::ok(array('taskCardShop' => $userInfo->taskCardShop)); # 返回最新任务卡列表
  97. // }
  98. //
  99. // /**
  100. // * [6232] 任务卡商店 - 购买
  101. // */
  102. // static function OnTaskCardShopBuy() {
  103. // list($typeId, $num) = req()->paras; # 提取参数: 任务卡类型ID,数量(暂时默认为1)
  104. // $shopItemMo = GameConfig::taskcard_shop_getItem($typeId);
  105. // my_Assert(null != $shopItemMo, ErrCode::err_const_no); # 常量异常
  106. // my_Assert($num == 1, ErrCode::paras_err); # 数量异常
  107. // $userInfo = ctx();
  108. // $userInfo->taskCardShop = new Info_TaskCard_Shop($userInfo->taskCardShop);
  109. // my_Assert(!in_array($typeId, $userInfo->taskCardShop->selled), ErrCode::taskCard_selled);
  110. // switch ($shopItemMo->pricetype) {
  111. // case 0: # 人民币
  112. // Err(ErrCode::err_method_notimplement);
  113. //// my_Assert(Data_UserGame::Consume_Cash($userInfo->baseInfo, $shopItemMo->price), ErrCode::notenough_cash_msg); # 扣除费用
  114. // break;
  115. // case 1: # 钻石
  116. // my_Assert($userInfo->base()->Consume_Cash($shopItemMo->price), ErrCode::notenough_cash_msg); # 扣除费用
  117. // break;
  118. // case 2: # 金币
  119. // my_Assert($userInfo->base()->Consume_Gold($shopItemMo->price), ErrCode::notenough_gold_msg); # 扣除费用
  120. // break;
  121. // default: # 其它
  122. // Err(ErrCode::pay_m_type_err); # 定价类型异常
  123. // break;
  124. // }
  125. //
  126. //// $cid = StoreProc::PutTaskCardInStore($typeId); # 添加任务卡到背包
  127. // StoreProc::PutOverlyingItemInStore($typeId, $num); # 直接进包裹items
  128. // StatisticsProc::TargetStatistics(Enum_TargetStatistics::shopTaskId_BuyUserNum, $typeId);
  129. // $userInfo->taskCardShop->selled[] = $typeId; # 添加售罄记录
  130. // UserProc::updateUserInfo();
  131. //
  132. // self::OnBuyTaskCard($num); # 监控购买任务卡的任务卡[・_・?]
  133. // return Resp::ok(array(
  134. // 'gold' => ctx()->baseInfo->gold,
  135. // 'cash' => ctx()->baseInfo->cash,
  136. // 'store' => ctx()->store)); # 返回成功
  137. // }
  138. //
  139. // /**
  140. // * [6233] 任务卡商店 - 手动刷新
  141. // */
  142. // public static function OnTaskCardShopRefresh() {
  143. // $cost = GameConfig::globalsettings()->TaskCardShop_Refresh_Cash; # 消耗
  144. // $userInfo = ctx();
  145. //// var_dump(Data_UserGame::Consume_Cash($userInfo->baseInfo, $cost));
  146. // my_Assert($userInfo->base()->Consume_Cash($cost), ErrCode::notenough_cash_msg); # 扣除费用
  147. // // 刷新任务卡
  148. // $arr = (array) GameConfig::taskcard_shop(); # 奖池配置
  149. // $arr = self::FilterPrizepool($arr); # 利用玩家等级进行过滤
  150. // $reward = ArrayInit();
  151. // $err = self::Dice($arr, self::TaskCardShop_Refresh_ItemNum, $reward); # 获得随机结果
  152. // my_Assert(ErrCode::ok == $err, $err);
  153. //// if (null == $userInfo->taskCardShop) { # 防御
  154. // $userInfo->taskCardShop = new Info_TaskCard_Shop($userInfo->taskCardShop);
  155. //// }
  156. // $userInfo->taskCardShop->curCards = $reward; # 更新任务卡列表
  157. // $userInfo->taskCardShop->selled = array();
  158. // ctx($userInfo);
  159. // UserProc::updateUserInfo(); # 回写玩家数据
  160. // return Resp::ok(array(
  161. // 'gold' => ctx()->baseInfo->gold,
  162. // 'cash' => ctx()->baseInfo->cash,
  163. // 'taskCardShop' => $userInfo->taskCardShop)); # 返回最新任务卡列表
  164. // }
  165. //
  166. // /**
  167. // * 过滤奖池
  168. // * @param array $arr 奖池
  169. // */
  170. // static function FilterPrizepool($arr) {
  171. // $ret = array_filter($arr, function ($value) {
  172. // return(ctx()->baseInfo->level >= $value->unlock_level); # 等级限制
  173. // });
  174. // return $ret;
  175. // }
  176. //
  177. // /**
  178. // * 投骰子
  179. // * @param assoc_array $arr 抽奖物品概率
  180. // * @param int $number 连抽次数
  181. // * @return array[] itemids
  182. // */
  183. // static function Dice($arr, $number, &$reward) {
  184. // $max = 0; # 计算物品权重总和
  185. // array_walk($arr, function ($value) use (&$max) {
  186. // $max += $value->probability;
  187. // });
  188. // my_Assert($max > 0, ErrCode::err_const_no); # 配置数据有问题
  189. // $reward = ArrayInit();
  190. // for ($i = 0; $i < $number;) {
  191. // $rnd = CommUtil::random(1, $max); # 投骰子
  192. // $start = 0;
  193. // $rew = null;
  194. // foreach ($arr as $item) { # 循环判断落入那个物品上
  195. // if ($start < $rnd && $rnd <= $start + $item->probability) { # 落入区间
  196. // $rew = $item; # 记录物品
  197. // break;
  198. // }
  199. // $start += $item->probability; # 继续判断是否落入下一物品的区间
  200. // } # foreach end
  201. // if (!$rew) {
  202. // return ErrCode::lottery_noselecteditem;
  203. // }
  204. // if (!in_array($rew->typeId, $reward)) { # 去除重复卡
  205. // $reward[] = $rew->typeId;
  206. // $i++;
  207. // }
  208. // } # for end
  209. // return ErrCode::ok;
  210. // }
  211. //
  212. // //
  213. //// </editor-fold>
  214. ////
  215. // // <editor-fold defaultstate="collapsed" desc=" 任务卡接口">
  216. // //
  217. //
  218. // /**
  219. // * [6210]剧情对话-触发任务卡结束条件检测(中间某个step结束,进入下一个step)
  220. // */
  221. // static function PlotFinish() {
  222. // list($gate_or_npc_id, $stage) = req()->paras;
  223. // $bUpdate = self::OnPlotOver($gate_or_npc_id, $stage); # 触发一下任务检查,更新任务状态
  224. // $arr = GameConfig::plot_getItem($gate_or_npc_id, $stage); # 查找对应的剧情
  225. // my_Assert(isset($arr), ErrCode::err_const_no); # 常量存在
  226. // foreach ($arr as $plot) {
  227. // isEditor() and $plot = new \sm_plot();
  228. // if (!empty($plot->presentItem)) {
  229. // if (strtolower($plot->presentItem) == strtolower("unlockBuild")) { # 特殊处理, 剧情中解锁建筑
  230. // ctx()->privateState->unlockedBuild[] = $plot->presentEffect; # 添加解锁记录
  231. // if ($plot->presentEffect == 1000) {
  232. // $college = new Info_College();
  233. // $college->setFunUnluckTs();
  234. // }
  235. // StatisticsProc::TargetStatistics(Enum_TargetStatistics::unlockbuidId, $plot->presentEffect);
  236. // NormalEventProc::OnUnlockBuild($plot->presentEffect); # 插入解锁事件
  237. // } else if (strtolower($plot->presentItem) == strtolower("rename")) {# 改名
  238. // // 跳过特殊字符串
  239. // } else if (strtolower($plot->presentItem) == strtolower("zhaohuanyanling")) {
  240. // // 跳过特殊指令
  241. // } else { # 普通奖励
  242. // StoreProc::AddMultiItemInStore($plot->presentItem);
  243. // }
  244. // }
  245. // if (!empty($plot->recycleItem)) {
  246. // $val = explode(",", $plot->recycleItem);
  247. // my_Assert(count($val) > 1, "解析回收道具字符串出错");
  248. // StoreProc::removeItemFromStore(ctx()->store, $val[0], $val[1]);
  249. // }
  250. // }
  251. // UserProc::updateUserInfo();
  252. // return Resp::ok(array('store' => ctx()->store,
  253. // 'taskCardUpdate' => $bUpdate));
  254. // }
  255. //
  256. //// <editor-fold defaultstate="collapsed" desc="废弃">
  257. //// /**
  258. //// * [6211] 任务卡-剧情结束兑换奖励(销毁当前卡,换取新的任务卡)
  259. //// * @deprecated since version 2020.12.12
  260. //// * @param type $req
  261. //// */
  262. //// static function PlotExchangeTaskCard($req) {
  263. //// Err(ErrCode::err_method_notimplement);
  264. //// }
  265. ////
  266. ////
  267. //// /**
  268. //// * [6212] 任务卡- 剧情对话奖励任务卡
  269. //// * @deprecated since version 2020.12.12
  270. //// * @param req $req
  271. //// */
  272. //// static function PlotPresetTaskCard($req) {
  273. //// // 发放任务卡
  274. //// list($rwdStr) = $req->paras;
  275. //// $err = StoreProc::AddMultiItemInStore($req, $rwdStr);
  276. //// my_Assert(ErrCode::ok == $err, $err);
  277. //// UserProc::updateUserInfo();
  278. //// return Resp::ok(array('store' => $req->userInfo->game->store));
  279. //// }
  280. ////
  281. //// /**
  282. //// * [6213]任务卡 - 即时奖励型任务卡
  283. //// * @deprecated since version 2020.12.12
  284. //// * @param req $req
  285. //// */
  286. //// static function ImmetRewardTaskCard($req) {
  287. //// // 销毁任务卡, 发放奖励
  288. //// list($taskCardUID) = $req->paras;
  289. //// my_Assert(StlUtil::dictHasProperty($req->userInfo->game->store->taskcards, $taskCardUID), ErrCode::taskCard_no); # 防御
  290. //// $taskCard = new Ins_TaskCard($req->userInfo->game->store->taskcards->$taskCardUID); # 任务卡对象
  291. //// if (strlen($taskCard->mo()->reward) > 0) { # 防御奖励串为空
  292. //// StoreProc::AddMultiItemInStore($req, $taskCard->mo()->reward); # 发放奖励
  293. //// }
  294. //// if (strlen($taskCard->mo()->newTaskCard) > 0) { # 防御新卡串为空
  295. //// StoreProc::AddMultiItemInStore($req, $taskCard->mo()->newTaskCard); # 发放新任务卡
  296. //// }
  297. //// StlUtil::dictRemove($req->userInfo->game->store->taskcards, $taskCardUID); # 移除任务卡
  298. //// UserProc::updateUserInfo(); # 回存玩家数据
  299. //// return Resp::ok(array('store' => $req->userInfo->game->store, 'taskCardUpdate' => true)); # 返回值更新背包
  300. //// }
  301. //// </editor-fold>
  302. //
  303. // /**
  304. // * [6214] 任务卡 - 杀死怪物事件
  305. // */
  306. // static function OnKillMonsterEvent() {
  307. // // 触发一下任务检查
  308. // list($monsterID, $num) = req()->paras;
  309. // $bUpdate = self::OnKillMonster($monsterID, $num);
  310. // return Resp::ok(array('store' => ctx()->store,
  311. // 'taskCardUpdate' => $bUpdate));
  312. // }
  313. //
  314. // /**
  315. // * [6215] 任务卡 - 激活任务卡
  316. // */
  317. // static function OnTaskCard_active() {
  318. // list($taskCardUID) = req()->paras; # 提取参数: 任务卡实例id
  319. // $store = ctx()->store; # 快速访问store
  320. // my_Assert(StlUtil::dictHasProperty($store->taskcards, $taskCardUID), ErrCode::taskCard_no); # 防御找不到实例
  321. // $taskCard = new Ins_TaskCard($store->taskcards->$taskCardUID); # 任务卡对象
  322. //
  323. // my_Assert($taskCard->state <= Enum_TaskCardStateType::notopen, ErrCode::taskCard_state); # 任务卡状态异常
  324. // my_Assert(true != self::FindSameIngCard($taskCard->typeId), ErrCode::taskCard_active_multi); # 不可激活多张任务卡
  325. // my_Assert(self::FindIngCardCount() <= self::TaskCard_ActiveMax, ErrCode::taskCard_active_max); # 激活数量上限
  326. // $taskCard->state = Enum_TaskCardStateType::ing;
  327. // NormalEventProc::OnTaskCard_Actived($taskCardUID, null); # 带入事件
  328. // foreach ($taskCard->curSteps as &$tsp) { # 初期里面只有一个任务
  329. // $tsp = new Ins_TaskStep($tsp);
  330. // if ($tsp->isStatusType()) { # 如果是道具收集类的, 扣除所收集道具
  331. // $tsp->autoCalcStatusCur();
  332. // }
  333. //// $tsp->doStartAct();
  334. // }
  335. // if ($taskCard->IsFinish()) { # 检查是否任务卡的所有步骤都已完成
  336. // $taskCard->state = Enum_TaskCardStateType::finish;
  337. // NormalEventProc::OnTaskCard_Finish($taskCard->uid, null); # 广播卡完成事件
  338. // }
  339. // $store->taskcards->$taskCardUID = $taskCard;
  340. //
  341. // self::autoRecoverTaskTracingState(); # 更新任务追踪.
  342. // UserProc::updateUserInfo(); # 回存玩家数据
  343. // return Resp::ok(array(
  344. // 'priv' => ctx()->privateState,
  345. // 'store' => ctx()->store
  346. // )); # 返回值更新背包
  347. // }
  348. //
  349. // static function FindSameIngCard($typeId) {
  350. // $cardDic = ctx()->store->taskcards;
  351. // $find = false;
  352. // array_walk($cardDic, function ($inst) use ($typeId, &$find) {
  353. //// $inst = new Ins_TaskCard($inst);
  354. // if ($inst->state == Enum_TaskCardStateType::ing && $inst->typeId == $typeId) {
  355. // $find = true;
  356. // }
  357. // });
  358. // return $find;
  359. // }
  360. //
  361. // static function FindIngCardCount() {
  362. // $cardDic = ctx()->store->taskcards;
  363. // $num = 0;
  364. // array_walk($cardDic, function ($inst) use (&$num) {
  365. //// $inst = new Ins_TaskCard($inst);
  366. // if ($inst->state == Enum_TaskCardStateType::ing #
  367. // && GameConfig::item_taskcard_getItem($inst->typeId)->type != 3) {
  368. // $num++;
  369. // }
  370. // });
  371. // return $num;
  372. // }
  373. //
  374. // /**
  375. // * [6216] 任务卡 - 领取任务卡奖励
  376. // */
  377. // static function OnTaskCard_reward() {
  378. // // 销毁任务卡, 发放奖励
  379. // list($taskCardUID) = req()->paras;
  380. // $store = ctx()->store(); # 快速访问store
  381. // my_Assert(StlUtil::dictHasProperty($store->taskcards, $taskCardUID), ErrCode::taskCard_no); # 防御找不到实例
  382. // $taskCard = new Ins_TaskCard($store->taskcards->$taskCardUID); # 任务卡对象
  383. //
  384. // my_Assert($taskCard->IsFinish(), ErrCode::task_progress_not_complete); # 任务卡尚未完成
  385. // my_Assert($taskCard->state < 4, ErrCode::task_reward_geted); # 奖励已经领取过了
  386. //
  387. // foreach ($taskCard->curSteps as &$tsp) { # 初期里面只有一个任务
  388. // $tsp = new Ins_TaskStep($tsp);
  389. // if ($tsp->mo()->cmd == Enum_TaskCmdType::GainItem) { # 如果是道具收集类的, 扣除所收集道具
  390. // $ok = StoreProc::removeItemFromStore($store, $tsp->mo()->paras, $tsp->mo()->num);
  391. // my_Assert(ErrCode::ok == $ok, ErrCode::taskCard_gainItem_no);
  392. // }
  393. // }
  394. // if (strlen($taskCard->mo()->reward) > 0) { # 防御奖励串为空
  395. // StoreProc::AddMultiItemInStore($taskCard->mo()->reward); # 发放奖励
  396. // self::addYaoPing($taskCard->typeId, $taskCard->mo());
  397. // }
  398. // if ($taskCard->mo()->exp > 0) { # 任务卡增加了指挥官经验
  399. // ctx()->base()->Add_Exp($taskCard->mo()->exp); # 加指挥官经验
  400. // }
  401. // $taskCard->state = Enum_TaskCardStateType::drawed;
  402. // //2021-3-4
  403. // $college = ctx()->college();
  404. // $college->modifyTaskCardState($taskCard->typeId, Enum_TaskCardStateType::drawed);
  405. // ctx()->college = $college;
  406. //
  407. // $store->taskcards->$taskCardUID = $taskCard; # 回写任务数据
  408. //
  409. // if ($taskCard->typeId == 601100082) {
  410. // TaskProc::ResetDailyTaskCards(1);
  411. // }
  412. //
  413. // self::InitdailyTask_HandOver(); #检测每次任务中的交付任务是否需要挂载了
  414. // NormalEventProc::OnTaskCard_Reward($taskCard->mo()->reward, $taskCardUID); # 带入事件
  415. // self::OnFinishTaskCard($taskCard); # 触发检查任务卡的任务卡[・_・?]
  416. // if (!empty($taskCard->mo()->newTaskCard)) { # 下一个任务卡存在
  417. // StoreProc::PutTaskCardInStore($taskCard->mo()->newTaskCard); # 放卡入背包
  418. // }
  419. //
  420. // if($taskCard->mo()->type == 4){
  421. // ctx()->privateData(true)->shopTaskCompleteNum += 1;
  422. // }
  423. // SystemProc::CompleteSpecialNumXuanShangTask(req()->zoneid, ctx()->baseInfo->name);
  424. // if ($taskCard->mo()->type == 2) {
  425. // // 日常任务卡,不移除
  426. // } else {
  427. // StlUtil::dictRemove($store->taskcards, $taskCardUID); # 移除任务卡
  428. // }
  429. // self::autoRecoverStateMissions(); # 重新更新其它状态类的任务卡
  430. // self::autoRecoverTaskTracingState(); # 更新任务追踪.
  431. // StatisticsProc::SelfTaskDataCollect($taskCard->typeId); #统计自己的任务完成情况
  432. // StatisticsProc::TaskDataCollect($taskCard->typeId); #统计最新任务
  433. //
  434. // if ($taskCard->mo()->type == 1) {//主线
  435. // StatisticsProc::TargetStatistics(Enum_TargetStatistics::mainTaskId_ComUserNum, $taskCard->typeId);
  436. // }
  437. //
  438. // if ($taskCard->mo()->type == 4) {//悬赏
  439. // StatisticsProc::TargetStatistics(Enum_TargetStatistics::shopTaskId_ComUserNum, $taskCard->typeId);
  440. // }
  441. //
  442. // if ($taskCard->mo()->type == 2) {//日常
  443. // StatisticsProc::TargetStatistics(Enum_TargetStatistics::dailyTaskId_ComUserNum, $taskCard->typeId);
  444. // }
  445. //
  446. // if ($taskCard->mo()->type == 3) {//圣哲
  447. // StatisticsProc::TargetStatistics(Enum_TargetStatistics::collegeTaskId_ComUserNum, $taskCard->typeId);
  448. // }
  449. //
  450. // ctx()->college->addScore($taskCard->mo()->score); #圣哲学院的任务是有积分累计的
  451. // #
  452. // UserProc::updateUserInfo(); # 回存玩家数据
  453. // return Resp::ok(array(
  454. // 'gold' => ctx()->baseInfo->gold,
  455. // 'cash' => ctx()->baseInfo->cash,
  456. // 'lvl' => ctx()->baseInfo->level,
  457. // 'store' => ctx()->store,
  458. // 'priv' => ctx()->privateState,
  459. // 'college' => ctx()->college,)); # 返回值更新背包
  460. // }
  461. //
  462. // static function addYaoPing($taskId, $mo) {
  463. // if ($taskId == 601100022) {
  464. // $str = explode(';', $mo->reward);
  465. // $battleItem = ctx()->store->battleItem;
  466. // foreach ($str as $item) {
  467. // $list = explode(',', $item);
  468. // $subType = GameConfig::item_base_getItem($list[0])->subType;
  469. // if ($subType == 341 || $subType == 342) {
  470. // $tag = 999;
  471. // foreach ($battleItem as $index => $val) {
  472. // if ($val->id == $list[0]) {
  473. // $tag = $index;
  474. // break;
  475. // }
  476. // }
  477. //
  478. // if ($tag == 999) {
  479. // $k = 1;
  480. // for ($i = 1; $i <= 4; $i++) {
  481. // if (!StlUtil::dictHasProperty($battleItem, $i)) {
  482. // $k = $i;
  483. // break;
  484. // }
  485. // }
  486. //
  487. // $dic = new Ins_battleItem();
  488. // $dic->index = $k;
  489. // $dic->id = $list[0];
  490. // $dic->num = $list[1];
  491. // $glctx = GameConfig::globalsettings()->YaoPingAttrInitVal;
  492. // $slist = explode(';', $glctx);
  493. // $hp = explode(',', $slist[0])[1];
  494. // $mp = explode(',', $slist[1])[1];
  495. // $sType = GameConfig::item_base_getItem($list[0])->subType;
  496. // if ($sType == 341) {
  497. // $dic->attrVal = $hp;
  498. // } else {
  499. // $dic->attrVal = $mp;
  500. // }
  501. //
  502. // $battleItem->$k = $dic;
  503. // } else {
  504. // $battleItem->$tag->num += $list[1];
  505. // }
  506. // NormalEventProc::OnHPMPItemConfigChange();
  507. // }
  508. // }
  509. //
  510. // ctx()->store->battleItem = $battleItem;
  511. // }
  512. // }
  513. //
  514. // static function checkHandOverDailyTask() {
  515. // if (ctx()->store->dailyTask_HandOver > 0) {
  516. // return;
  517. // }
  518. //
  519. // $taskcards = ctx()->store->taskcards;
  520. // $list = explode(',', glc()->dailyTask_HandOver);
  521. //
  522. // $num = 0;
  523. //
  524. // $handOverTask = 0;
  525. // foreach ($taskcards as $uid => $task) {
  526. // $mo = GameConfig::item_taskcard_getItem($task->typeId);
  527. // if ($mo->type == 2) {
  528. // if (in_array($task->typeId, $list)) {
  529. // $handOverTask = 1;
  530. // }
  531. //
  532. // if ($task->state == 4) {
  533. // $num += 1;
  534. // }
  535. // }
  536. // }
  537. //
  538. // if ($num >= 4 && $handOverTask == 0) {//每日任务全部完成,挂载每日任务--交付任务
  539. // ctx()->store->dailyTask_HandOver = 1;
  540. // $count = count($list);
  541. // $rand = rand(0, $count - 1);
  542. //
  543. // StoreProc::PutTaskCardInStore($list[$rand]);
  544. // }
  545. // }
  546. //
  547. // /**
  548. // * [6217] 任务卡 - 更新信息
  549. // */
  550. // static function OnTaskCard_GetInfo() {
  551. // return Resp::ok(array('store' => ctx()->store)); # 返回值更新背包
  552. // }
  553. //
  554. // /**
  555. // * [6218] 任务步骤 - start/finish Action done
  556. // */
  557. // static function OnTaskCard_StepActionDone() {
  558. // list($taskCardUID, $stepTypeId, $actType) = req()->paras; # 参数提取,卡uid,步骤类型id,actType: 1:start,2:finish.
  559. // $store = ctx()->store; # 快速访问store
  560. // my_Assert(StlUtil::dictHasProperty($store->taskcards, $taskCardUID), ErrCode::taskCard_no); # 防御找不到实例
  561. // $taskCard = new Ins_TaskCard($store->taskcards->$taskCardUID); # 任务卡对象
  562. //
  563. // foreach ($taskCard->curSteps as &$tsp) { # 初期里面只有一个任务
  564. // $tsp = new Ins_TaskStep($tsp);
  565. // if ($tsp->typeId == $stepTypeId) { # 找到指定步骤
  566. // if ($actType == 1) {
  567. // $tsp->doStartAct();
  568. // } else if ($actType == 2) {
  569. // $tsp->doFinishAct();
  570. // }
  571. // }
  572. // }
  573. // $store->taskcards->$taskCardUID = $taskCard;
  574. // UserProc::updateUserInfo();
  575. // return Resp::ok(array('store' => ctx()->store)); # 返回值更新背包
  576. // }
  577. //
  578. // /**
  579. // * [6219] 设置当前追踪的任务卡
  580. // */
  581. // static function SetTracingCard() {
  582. // // (探索任务暂不开发)
  583. // $pri = ctx()->privateData(); # 私有数据
  584. // // 设置追踪
  585. // list($cardType, $cardUID) = req()->paras; # 参数: 任务标签类型(1:主线;2:日程;3:圣哲;4:商店), 任务卡id.
  586. // my_default_Obj($pri->taskCardTracing); # 确保 tracing数据结构是否完整.
  587. // $pri->taskCardTracing->$cardType = $cardUID; # 更新tracing数据.
  588. // UserProc::updateUserInfo(); # 回存
  589. // return Resp::ok($pri->taskCardTracing); # 返回成功
  590. // }
  591. //
  592. // /**
  593. // * [6220] 任务步骤 - 回撤
  594. // */
  595. // static function OnTaskStep_FallBack() {
  596. // // 遍历检查是否有任务步骤需要回撤
  597. // $taskCards = ctx()->store->taskcards; # 快速访问store
  598. // foreach ($taskCards as $uid => &$card) { # 加了&符号,理论上就能直接修改原始元素
  599. // $card = new Ins_TaskCard($card); # 任务卡对象
  600. // $fallbackID = 0;
  601. // $stepArr = array();
  602. // foreach ($card->curSteps as &$tsp) { # 初期里面只有一个任务
  603. // $tsp = new Ins_TaskStep($tsp);
  604. // if (!$tsp->isFinish() && $tsp->mo()->fallback > 0) { # 找到需要回撤的步骤,删除此步骤
  605. // $fallbackID = $tsp->mo()->fallback;
  606. // } else {
  607. // $stepArr[] = $tsp;
  608. // }
  609. // }
  610. // foreach ($stepArr as &$tsp) { # 回撤上一步的进度
  611. // if ($tsp->typeId == $fallbackID) {
  612. // $tsp->cur = 0;
  613. // NormalEventProc::OnTaskCardStep_Process($card->uid, $tsp->typeId); # 任务进度更新
  614. // }
  615. // }
  616. // $card->curSteps = $stepArr; # 更新任务步骤集合
  617. // }
  618. // ctx()->store->taskcards = $taskCards; # 更新任务卡
  619. // UserProc::updateUserInfo();
  620. // return Resp::ok();
  621. // }
  622. //
  623. // //
  624. //// </editor-fold>
  625. // // <editor-fold defaultstate="collapsed" desc=" 任务接口 ">
  626. //
  627. // /**
  628. // * [6204] 领取日常任务活跃度阶段奖励
  629. // */
  630. // static function getActiveReward() {
  631. // list($num) = req()->paras; # 提取参数: 领奖的阶段
  632. // $userTask = ctx()->task;
  633. // $rewardCfg = GameConfig::task_active_reward_getItem($num); # 查找奖励配置
  634. // my_Assert(null != $rewardCfg, ErrCode::err_const_no); # 防御: 常量丢失
  635. // my_Assert(!in_array($num, $userTask->dailyActiveGetedRewardArr), ErrCode::task_reward_geted); # 判断尚未领取
  636. // my_Assert($userTask->dailyActivePoint >= $num, ErrCode::task_activePoint_notenough); # 判断活跃点数足够
  637. // $ok = StoreProc::AddMultiItemInStore($rewardCfg->reward); # 按照配置发放奖励
  638. // my_Assert($ok == ErrCode::ok, $ok); # 发放成功
  639. // $userTask->dailyActiveGetedRewardArr[] = $num; # 添加领取记录
  640. // UserProc::updateUserInfo(); # 回存数据
  641. // return Resp::ok(array(// # 返回
  642. // "gold" => ctx()->baseInfo->gold,
  643. // "cash" => ctx()->baseInfo->cash,
  644. // "tili" => ctx()->baseInfo->tili,
  645. // "store" => ctx()->store,
  646. // "task" => ctx()->task
  647. // ));
  648. // }
  649. //
  650. // /**
  651. // * [6203] 设置关注任务
  652. // * @deprecated since version 0 废弃,替换为6219.(2021.9.26)
  653. // */
  654. // static function setAttentionTask() {
  655. //// list($taskId) = req()->paras;
  656. //// $userTask = ctx()->task;
  657. ////
  658. //// my_Assert(StlUtil::dictHasProperty($userTask->taskListPlot, $taskId), ErrCode::task_no); # 任务存在
  659. //// $taskItem = new Ins_TaskInfo($userTask->taskListPlot->$taskId);
  660. //// my_Assert($taskItem->rewardGeted < 1, ErrCode::task_reward_geted); # 任务奖励尚未领取
  661. //// $userTask->curTaskId = $taskId;
  662. ////// var_dump($userTask);
  663. //// UserProc::updateUserInfo();
  664. //// return Resp::ok(array("task" => ctx()->task));
  665. // }
  666. //
  667. // /**
  668. // * [6202]领取任务奖励 问:每日任务奖励和剧情任务奖励领取接口是否为一个?
  669. // * @deprecated since version 0 已经更换为领取任务卡奖励.
  670. // */
  671. // static function GetTaskReward() {
  672. //// list($taskId) = req()->paras; # 提取参数: 任务id
  673. //// $userTask = new Info_UserTask(ctx()->task);
  674. //// $mask = 100000; # 根据id段来区分任务和每日任务.
  675. //// $type = intval($taskId / $mask); # 取出taskId第一位判断任务类型
  676. //// switch ($type) { #
  677. //// case 4: # 剧情任务
  678. //// my_Assert(StlUtil::dictHasProperty($userTask->taskListPlot, $taskId), ErrCode::task_no); #判断是否存在指定任务
  679. //// $task = new Ins_TaskInfo($userTask->taskListPlot->$taskId);
  680. //// my_Assert($task->progress >= 1, ErrCode::task_progress_not_complete); # 判断任务进度是否已完成>=1f
  681. //// my_Assert($task->rewardGeted < 1, ErrCode::task_reward_geted); # 奖励不可重复领取
  682. //// $taskCfg = GameConfig::task_getItem($taskId); # 任务配置数据
  683. //// my_Assert($taskCfg != null, ErrCode::err_const_no);
  684. //// $ok = StoreProc::AddMultiItemInStore($taskCfg->reward); # 发放任务奖励
  685. //// my_Assert($ok == ErrCode::ok, $ok);
  686. //// $task->rewardGeted = 1;
  687. //// $userTask->taskListPlot->$taskId = $task;
  688. //// if ($userTask->IsAllPlotTaskOver()) { # 检查当前节点任务是否已经全部清空
  689. //// $userTask->curTaskNode += 1;
  690. //// $userTask->taskListPlot = ObjectInit();
  691. //// $userTask->initialize();
  692. //// }
  693. //// break;
  694. //// case 5: # 每日任务
  695. //// my_Assert(StlUtil::dictHasProperty($userTask->taskListDaily, $taskId), ErrCode::task_no);
  696. //// $task = new Ins_TaskInfo($userTask->taskListDaily->$taskId);
  697. //// my_Assert($task->progress >= 1, ErrCode::task_progress_not_complete); # 判断任务进度是否已完成>=1f
  698. //// my_Assert($task->rewardGeted < 1, ErrCode::task_reward_geted); # 奖励不可重复领取
  699. //// $taskCfg = GameConfig::task_daily_getItem($taskId); # 任务配置数据
  700. //// my_Assert($taskCfg != null, ErrCode::err_const_no);
  701. ////// Data_UserGame::Add_Exp(ctx()->baseInfo, $taskCfg->exp); # 发放任务奖励
  702. //// ctx()->base()->Add_Exp($taskCfg->exp); # 发放指挥官经验
  703. //// $userTask->dailyActivePoint += $taskCfg->activePoint;
  704. //// $task->rewardGeted = 1;
  705. //// $userTask->taskListDaily->$taskId = $task; # 回存下
  706. //// break;
  707. //// default:
  708. //// break;
  709. //// }
  710. ////
  711. //// ctx()->task = $userTask; # 回存
  712. //// UserProc::updateUserInfo();
  713. //// return Resp::ok(array(// # 返回
  714. //// "gold" => ctx()->baseInfo->gold,
  715. //// "cash" => ctx()->baseInfo->cash,
  716. //// "tili" => ctx()->baseInfo->tili,
  717. //// "store" => ctx()->store,
  718. //// "task" => ctx()->task
  719. //// ));
  720. // }
  721. //
  722. // /**
  723. // * [6201]更新任务状态
  724. // */
  725. // static function GetTaskInfo() {
  726. // self::autoRecoverStateMissions(); # 重新更新其它状态类的任务卡
  727. // UserProc::updateUserInfo();
  728. // return Resp::ok(array("task" => ctx()->task));
  729. // }
  730. //
  731. //// </editor-fold>
  732. //
  733. // /**
  734. // * 每天重置日常任务.
  735. // */
  736. // static function ResetDailyTaskCards($start = 0) {
  737. // $lv = glc()->DailyTaskLevelLimitLock;
  738. //
  739. // if (ctx()->baseInfo->level < $lv) {
  740. // return;
  741. // }
  742. //
  743. //// var_dump("重置日常任务卡");
  744. // $store = ctx()->store(true);
  745. // my_default_Obj($store->taskcards);
  746. //
  747. // $tag = 0;
  748. // foreach ($store->taskcards as $k => $val) {
  749. // $tp = GameConfig::item_taskcard_getItem($val->typeId)->type;
  750. // if ($tp == 2) {
  751. // $tag = 1;
  752. // break;
  753. // }
  754. // }
  755. //
  756. //
  757. // if ($start != 0 && $tag != 0) {
  758. // return;
  759. // }
  760. //
  761. // if ($start == 0 && $tag == 0) {
  762. // return;
  763. // }
  764. //
  765. // $dailyCards = new \stdClass();
  766. // foreach (GameConfig::item_taskcard() as $id => $cardMo) {
  767. // isEditor() and $cardMo = new \sm_item_taskcard();
  768. // if ($cardMo->type == 2) { # 1:主线;2:日程;3:圣哲;4:商店
  769. // $dailyCards->$id = $cardMo;
  770. // }
  771. // }
  772. // $dailyCards = (array) $dailyCards;
  773. // ksort($dailyCards);
  774. // foreach ($dailyCards as $id => $cardMo) {
  775. // foreach ($store->taskcards as $uid => $card) {
  776. // $cardVo = new Ins_TaskCard($card);
  777. // if ($cardVo->typeId == $id) { # 找到对应的实例.
  778. // unset($store->taskcards->$uid); # 删除昨日未完成日常
  779. // }
  780. // }
  781. // }
  782. // ctx()->store = $store;
  783. //
  784. // $pri = ctx()->privateData(); # 私有数据
  785. // $cardType = 2; # 日常任务,设置追踪
  786. // my_default_Obj($pri->taskCardTracing); # 确保 tracing数据结构是否完整.
  787. //
  788. // $commonTaskList = explode(',', glc()->dailyTask_Common);
  789. // if (count($commonTaskList) < 4) {
  790. // // 再遍历一遍, 添加今日日常任务.
  791. // rsort($commonTaskList);
  792. // $cid = 0;
  793. // foreach ($commonTaskList as $id) {
  794. // $cid = StoreProc::PutTaskCardInStore($id); # 添加任务卡到背包
  795. // }
  796. //
  797. // $pri->taskCardTracing->$cardType = $cid; # 更新tracing数据
  798. // } else {
  799. // $tempCid = 0;
  800. // $count = count($commonTaskList);
  801. // $temp = array();
  802. // while (true) {
  803. // $num = rand(0, $count - 1);
  804. // if (in_array($num, $temp)) {
  805. // continue;
  806. // }
  807. // $id = $commonTaskList[$num];
  808. // $cid = StoreProc::PutTaskCardInStore($id); # 添加任务卡到背包
  809. // if ($tempCid == 0) {
  810. // $tempCid = $cid;
  811. // }
  812. //
  813. // $temp[] = $num;
  814. // if (count($temp) >= 4) {
  815. // break;
  816. // }
  817. // }
  818. // $pri->taskCardTracing->$cardType = $tempCid; # 更新tracing数据
  819. // }
  820. //
  821. // //重置每日任务里的交付任务
  822. // //$handTaskId = glc()->dailyTask_HandOver;
  823. // //StoreProc::PutTaskCardInStore($handTaskId);
  824. //
  825. // UserProc::updateUserInfo(); # 回存数据.(不管从哪里调用的, 更新肯定没错.)
  826. // }
  827. //
  828. // static function InitdailyTask_HandOver() {
  829. // $taskcards = ctx()->store->taskcards;
  830. // $index = 0;
  831. // $handTaskId = glc()->dailyTask_HandOver;
  832. // $tag = true;
  833. // foreach ($taskcards as $key => $val) {
  834. // if (GameConfig::item_taskcard_getItem($val->typeId)->type == 2 && $val->state == 4) {
  835. // $index += 1;
  836. // }
  837. //
  838. // if ($val->typeId == $handTaskId) {
  839. // $tag = false;
  840. // }
  841. // }
  842. //
  843. // if ($index >= 4 && $tag) {
  844. // StoreProc::PutTaskCardInStore($handTaskId);
  845. // }
  846. // }
  847. //
  848. // /**
  849. // * 重置每日任务
  850. // * @deprecated since version 0 已废弃,换用任务卡接口. (2021.9.26)
  851. // */
  852. // static function ResetDailyTask() {
  853. // return;
  854. //// $userTask = new Info_UserTask(ctx()->task);
  855. //// $userTask->resetDailyTask();
  856. //// ctx()->task = $userTask;
  857. // }
  858. //
  859. ////
  860. // // <editor-fold defaultstate="collapsed" desc="辅助方法-比对判断">
  861. //
  862. // /**
  863. // * 检查任务条件是否达成
  864. // * @param Ins_TaskParams $taskParam Description
  865. // * @deprecated since version 0 已废弃,换用taskcard.
  866. // */
  867. // static function CheckTaskConditions($taskParam) {
  868. // return;
  869. ////// var_dump($taskParam);
  870. //// $bUpdate = false;
  871. //// foreach (ctx()->task->taskListPlot as $tid => $task) {
  872. //// $taskCfg = GameConfig::task_getItem($tid);
  873. //// my_Assert($taskCfg != null, ErrCode::err_const_no); # 获取任务配置数据
  874. //// if ($taskCfg->tasktype != $taskParam->taskType) { # 任务类型必须匹配
  875. //// continue;
  876. //// }
  877. //// isEditor() and $task = new Ins_TaskInfo(-1);
  878. //// if ($task->progress == 1) { # 已完成的不再更新处理
  879. //// continue;
  880. //// }
  881. //// if (is_null($taskCfg->canshu1)) {
  882. //// $task->progress = 1;
  883. //// $bUpdate = true;
  884. //// continue;
  885. //// }
  886. ////
  887. //// if ($taskCfg->canshu1 == $taskParam->canshu1) {
  888. //// $task->tag1 = $taskParam->canshu1;
  889. //// if (null == $taskCfg->canshu2 || 0 == $taskCfg->canshu2) {
  890. //// $task->progress = 1;
  891. //// $task->tag2 = $taskParam->canshu2;
  892. //// $bUpdate = true;
  893. //// } else {
  894. //// if (is_numeric($taskCfg->canshu2)) {
  895. //// $task->tag2 = max($task->tag2, $taskParam->canshu2);
  896. //// if ($taskCfg->canshu2 <= $taskParam->canshu2) {
  897. //// $bUpdate = true;
  898. //// $task->progress = 1;
  899. //// }
  900. //// } else {
  901. //// $task->tag2 = $taskParam->canshu2;
  902. //// if ($taskCfg->canshu2 == $taskParam->canshu2) {
  903. //// $bUpdate = true;
  904. //// $task->progress = 1;
  905. //// }
  906. //// }
  907. //// }
  908. //// }
  909. //// }
  910. //// if ($bUpdate) {
  911. //// CornerSignEventProc::OnTask_Plot_new();
  912. //// }
  913. // }
  914. //
  915. // /**
  916. // * 检查任务条件是否达成
  917. // * @param Ins_TaskParams $taskParam Description
  918. // * @deprecated since version 0 已废弃,换用taskcard
  919. // */
  920. // static function CheckDailyTaskConditions($taskParam) {
  921. // return;
  922. //// $bUpdate = false;
  923. //// $daily = ctx()->task->taskListDaily;
  924. //// foreach ($daily as $tid => &$task) {
  925. //// $taskCfg = GameConfig::task_daily_getItem($tid);
  926. //// my_Assert($taskCfg != null, ErrCode::err_const_no); # 获取任务配置数据
  927. //// if ($taskCfg->tasktype != $taskParam->taskType) { # 任务类型必须匹配
  928. //// continue;
  929. //// }
  930. //// $task = new Ins_TaskInfo($task);
  931. //// if ($task->progress >= 1) { # 已完成的不再更新处理
  932. //// continue;
  933. //// }
  934. //// $task->counter++; # 计数器
  935. //// if (is_null($taskCfg->canshu1) || $taskCfg->canshu1 == 0) {
  936. //// $task->progress = 1;
  937. //// $bUpdate = true;
  938. //// continue;
  939. //// }
  940. //// if ($taskCfg->canshu1 == $task->counter) {
  941. //// $task->progress = 1;
  942. //// $bUpdate = true;
  943. //// continue;
  944. //// }
  945. //// }
  946. ////
  947. //// if ($bUpdate) {
  948. //// CornerSignEventProc::OnTask_Daily_new();
  949. //// }
  950. // }
  951. //
  952. //// </editor-fold>
  953. ////
  954. // // <editor-fold defaultstate="collapsed" desc="处理各种任务检测事务">
  955. // //
  956. //
  957. // /**
  958. // * 神庙抽奖
  959. // */
  960. // static function OnTempleLottery() {
  961. //// $taskParam = new Ins_TaskParams(Enum_TaskCmdType::TempleLottery);
  962. //// self::CheckTaskConditions($taskParam);
  963. // $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::TempleLottery, Enum_PropelType::set, 1, array());
  964. // self::CheckTaskCardConditions($taskEventArg);
  965. // }
  966. //
  967. // /**
  968. // * 例如当指挥官等级提升的时候需要检查是否有任务达成
  969. // */
  970. // static function OnUserLevelUp($newLvl) {
  971. // $taskParam = new Ins_TaskParams(Enum_TaskCmdType::CommanderLevelUpTo, $newLvl);
  972. // self::CheckTaskConditions($taskParam);
  973. //
  974. // $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::CommanderLevelUpTo, Enum_PropelType::set, $newLvl, array($newLvl));
  975. // self::CheckTaskCardConditions($taskEventArg);
  976. // }
  977. //
  978. // /**
  979. // * 英雄升级
  980. // * @param type $heroMoId
  981. // * @param type $newLvl
  982. // */
  983. // static function OnHeroLevelUp($heroMoId, $newLvl) {
  984. // $taskParam = new Ins_TaskParams(Enum_TaskCmdType::HeroLevelUpTo, $heroMoId, $newLvl);
  985. // self::CheckTaskConditions($taskParam);
  986. // $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::HeroLevelUpTo, Enum_PropelType::set, $newLvl, array($heroMoId));
  987. // self::CheckTaskCardConditions($taskEventArg);
  988. // }
  989. //
  990. // /**
  991. // * 英雄升阶
  992. // * @param type $heroMoId
  993. // * @param type $newGrade
  994. // */
  995. // static function OnHeroGradeUp($heroMoId, $newGrade) {
  996. // $taskParam = new Ins_TaskParams(Enum_TaskCmdType::HeroGradeUpTo, $heroMoId, $newGrade);
  997. // self::CheckTaskConditions($taskParam);
  998. // self::OnHeroImprove();
  999. // $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::HeroGradeUpTo, Enum_PropelType::add, 1, array());
  1000. // self::CheckTaskCardConditions($taskEventArg);
  1001. // $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::HeroGradeUpTo_status, Enum_PropelType::set, $newGrade, array());
  1002. // self::CheckTaskCardConditions($taskEventArg);
  1003. // }
  1004. //
  1005. // /**
  1006. // * 英雄碎片数量达到指定值
  1007. // * @param type $heroMoId
  1008. // * @param type $num
  1009. // */
  1010. // static function OnHeroSegmengNum($heroMoId, $num) {
  1011. // $taskParam = new Ins_TaskParams(Enum_TaskCmdType::HeroSegmentNumberTo, $heroMoId, $num);
  1012. // self::CheckTaskConditions($taskParam);
  1013. // }
  1014. //
  1015. // /**
  1016. // * 英雄解锁技能
  1017. // * @param type $heroMoId
  1018. // * @param type $skillId
  1019. // */
  1020. // static function OnHeroUnlocSkill($heroMoId, $skillId) {
  1021. // $taskParam = new Ins_TaskParams(Enum_TaskCmdType::HeroSkillUnlock, $heroMoId, $skillId);
  1022. // self::CheckTaskConditions($taskParam);
  1023. // }
  1024. //
  1025. // /**
  1026. // * 英雄穿上武器
  1027. // * @param type $heroMoid
  1028. // * @param type $weaponMoId
  1029. // */
  1030. // static function OnHeroWearWeapon($heroMoid, $weaponMoId) {
  1031. // $weapMO = GameConfig::item_base_getItem($weaponMoId);
  1032. // my_Assert($weapMO, ErrCode::err_const_no);
  1033. // $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::HeroWearupWeapon_quality, Enum_PropelType::set, 1, array($heroMoid, $weapMO->quality));
  1034. // self::CheckTaskCardConditions($taskEventArg);
  1035. //
  1036. // $taskEventArg1 = new Ins_TaskEventArgs(Enum_TaskCmdType::HeroWearingWeapon_Except, Enum_PropelType::set, 1, array($heroMoid, $weaponMoId));
  1037. // self::CheckTaskCardConditions($taskEventArg1);
  1038. // }
  1039. //
  1040. // /**
  1041. // * 英雄装备言灵
  1042. // * @param type $heroMoid
  1043. // * @param type $weaponMoId
  1044. // */
  1045. // static function OnHeroWearYanling($heroMoid, $yanlingMoId) {
  1046. // $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::HeroWearupYanling, Enum_PropelType::set, 1, array($heroMoid, $yanlingMoId));
  1047. // self::CheckTaskCardConditions($taskEventArg); # 检查装备言灵任务
  1048. // $ylmo = GameConfig::item_base_getItem($yanlingMoId);
  1049. // my_Assert(null != $ylmo, ErrCode::err_const_no);
  1050. // $taskEventArg2 = new Ins_TaskEventArgs(Enum_TaskCmdType::HeroWearUpXYanlingWithQualityN, Enum_PropelType::add, 1, array($ylmo->quality));
  1051. // self::CheckTaskCardConditions($taskEventArg2); # 检查装备x个n品质言灵任务
  1052. // $taskEventArg3 = new Ins_TaskEventArgs(Enum_TaskCmdType::HeroWearingYanling, Enum_PropelType::set, 1, array($heroMoid)); # 唤灵师装备了任意言灵
  1053. // self::CheckTaskCardConditions($taskEventArg3);
  1054. // }
  1055. //
  1056. // /**
  1057. // * 通关剧情关卡
  1058. // * @param type $gateId
  1059. // * @param type $difficulty
  1060. // */
  1061. // static function OnPassGateN($gateId, $difficulty) {
  1062. // $taskParam = new Ins_TaskParams(Enum_TaskCmdType::PassGateN, $gateId, $difficulty);
  1063. // self::CheckTaskConditions($taskParam);
  1064. // self::OnPassGate();
  1065. //// var_dump("通关剧情检测 $gateId $difficulty");
  1066. // $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::PassGateN, Enum_PropelType::set, 1, array($gateId, $difficulty));
  1067. // self::CheckTaskCardConditions($taskEventArg);
  1068. // }
  1069. //
  1070. // /**
  1071. // * 通关材料副本第n层
  1072. // * @param type $gateId
  1073. // * @param type $level
  1074. // */
  1075. // static function OnPassMaterialCarbonN($gateId, $level) {
  1076. // $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::PassMaterialCarbonN, Enum_PropelType::set, 1, array($gateId, $level));
  1077. // self::CheckTaskCardConditions($taskEventArg);
  1078. // }
  1079. //
  1080. // /**
  1081. // * 通关无尽塔副本关卡
  1082. // * @param type $gateId
  1083. // * @param type $difficulty 层数
  1084. // */
  1085. // static function OnPassEndlessCarboN($gateId, $difficulty) {
  1086. //// $taskParam = new Ins_TaskParams(Enum_TaskCmdType::passEndlessCarbonN, $gateId, $difficulty);
  1087. //// self::CheckTaskConditions($taskParam);
  1088. // $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::passEndlessCarbonN, Enum_PropelType::set, $difficulty, array($gateId, $difficulty));
  1089. //// var_dump($taskEventArg);
  1090. // self::CheckTaskCardConditions($taskEventArg);
  1091. // }
  1092. //
  1093. // static function OnKillMonster($monsterID, $num) {
  1094. // $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::KillMonster, Enum_PropelType::add, $num, array($monsterID));
  1095. // return self::CheckTaskCardConditions($taskParam);
  1096. // }
  1097. //
  1098. // /**
  1099. // * 获得道具
  1100. // */
  1101. // static function OnGainItem($itemId, $num) {
  1102. // $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::GainItem, Enum_PropelType::stat, $num, array($itemId));
  1103. //
  1104. // self::CheckTaskCardConditions($taskParam);
  1105. // }
  1106. //
  1107. // /**
  1108. // * 对话完成
  1109. // * @param type $gate_or_npc_id
  1110. // * @param type $stage
  1111. // * @return type
  1112. // */
  1113. // static function OnPlotOver($gate_or_npc_id, $stage) {
  1114. // $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::PlotOver, Enum_PropelType::set, 1, array($gate_or_npc_id, "$stage"));
  1115. // self::CheckTaskCardConditions($taskParam);
  1116. // }
  1117. //
  1118. // /**
  1119. // * 购买n张任务卡(非特定)
  1120. // * @param type $_num
  1121. // * @return type
  1122. // */
  1123. // static function OnBuyTaskCard($_num = 1) {
  1124. // $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::BuyTaskCard_Num, Enum_PropelType::add, $_num, array());
  1125. // self::CheckTaskCardConditions($taskParam);
  1126. // }
  1127. //
  1128. // /**
  1129. // * 完成任务卡(不指定) 这是要造检查任务卡的任务卡[・_・?]
  1130. // * @param Ins_TaskCard $taskCard
  1131. // */
  1132. // static function OnFinishTaskCard($taskCard) {
  1133. // $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::FinishTaskCard_noID, Enum_PropelType::set, 1, array());
  1134. // self::CheckTaskCardConditions($taskParam);
  1135. // $cardBase = GameConfig::item_base_getItem($taskCard->mo()->typeId);
  1136. // $taskParam2 = new Ins_TaskEventArgs(Enum_TaskCmdType::FinishXCardWithQualityN, Enum_PropelType::add, 1, array($cardBase->quality));
  1137. // self::CheckTaskCardConditions($taskParam2);
  1138. // if ($taskCard->mo()->cardType == "言灵") {
  1139. // $taskParam3 = new Ins_TaskEventArgs(Enum_TaskCmdType::FinishXYanlingCardAboutQualityN, Enum_PropelType::add, 1, array($cardBase->quality));
  1140. // self::CheckTaskCardConditions($taskParam3);
  1141. // }
  1142. // }
  1143. //
  1144. // /**
  1145. // * 领取系统邮件奖励
  1146. // * @param type $mailId 指定邮件id
  1147. // * @return type
  1148. // */
  1149. // static function OnDrawSysMail($mailId) {
  1150. // $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::DrawSysMail_ID, Enum_PropelType::set, 1, array($mailId));
  1151. // self::CheckTaskCardConditions($taskParam);
  1152. // }
  1153. //
  1154. // /**
  1155. // * 言灵升级
  1156. // * @param type $yanlingType
  1157. // * @param type $level
  1158. // * @return type
  1159. // */
  1160. // static function OnYanlingLevelUp($yanlingType, $level) {
  1161. // # 任意言灵提升
  1162. // $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::AnyYanlingLevelUp, Enum_PropelType::set, 1, array($yanlingType, $level));
  1163. // self::CheckTaskCardConditions($taskParam);
  1164. // # 指定言灵提升
  1165. // $taskParam2 = new Ins_TaskEventArgs(Enum_TaskCmdType::YanlingLevelUp, Enum_PropelType::set, $level, array($yanlingType));
  1166. // self::CheckTaskCardConditions($taskParam2);
  1167. // }
  1168. //
  1169. // /**
  1170. // * 言灵升星(突破)
  1171. // * @param type $newStar
  1172. // */
  1173. // static function OnYanlingStarUp($newStar) {
  1174. // $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::UpgradeXYanlingToNStar, Enum_PropelType::add, 1, array($newStar));
  1175. // self::CheckTaskCardConditions($taskParam);
  1176. // }
  1177. //
  1178. // static function OnWeaponUpgrade() {
  1179. //
  1180. // }
  1181. //
  1182. // /**
  1183. // * 武器突破
  1184. // * @param type $newStar
  1185. // */
  1186. // static function OnWeaponStarUp($newStar) {
  1187. // $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::UpgradeXWeaponToNStar, Enum_PropelType::add, 1, array($newStar));
  1188. // self::CheckTaskCardConditions($taskParam);
  1189. // }
  1190. //
  1191. // /**
  1192. // * 领取任意一个学院课程下的任意一个任务(num:1,paras[])(学院界面)
  1193. // */
  1194. // static function OnGetSchoolTask() {
  1195. // $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::GetSchoolTask, Enum_PropelType::set, 1, array());
  1196. // self::CheckTaskCardConditions($taskParam);
  1197. // }
  1198. //
  1199. // /**
  1200. // * 完成任意一个学院课程下的任意一张任务卡(num:1,paras:[])(学院界面)
  1201. // */
  1202. // static function OnFinishSchoolTask() {
  1203. // $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::FinishSchoolTask, Enum_PropelType::set, 1, array());
  1204. // self::CheckTaskCardConditions($taskParam);
  1205. // }
  1206. //
  1207. // /**
  1208. // * 完成指课程的全部任务(num:1,paras:[courseId])(学院界面)
  1209. // * @param int $courseId 课程id
  1210. // */
  1211. // static function OnFinishAllSchoolTaskOfGrade($courseId) {
  1212. // $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::FinishAllSchoolTaskOfGrade, Enum_PropelType::set, 1, array($courseId));
  1213. // self::CheckTaskCardConditions($taskParam);
  1214. // }
  1215. //
  1216. // /**
  1217. // * 特定武器升级到X等级
  1218. // * @param type $weaponId
  1219. // * @param type $level
  1220. // */
  1221. // static function OnWeaponLevelUp($weaponId, $level) {
  1222. // $taskParam = new Ins_TaskEventArgs(Enum_TaskCmdType::WeaponLevelUp, Enum_PropelType::set, $level, array($weaponId));
  1223. // self::CheckTaskCardConditions($taskParam);
  1224. // $taskParam2 = new Ins_TaskEventArgs(Enum_TaskCmdType::AnyWeaponLevelUp, Enum_PropelType::set, $level, array());
  1225. // self::CheckTaskCardConditions($taskParam2);
  1226. // }
  1227. //
  1228. // /**
  1229. // * 完成一次boss战胜利
  1230. // * @param type $gateId
  1231. // */
  1232. // static function OnPassWorldBoss($gateId) {
  1233. //// $taskParam = new Ins_TaskParams(Enum_TaskCmdType::PassWorldBoss, $gateId);
  1234. //// self::CheckTaskConditions($taskParam);
  1235. // $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::PassWorldBoss, Enum_PropelType::set, 1, array($gateId));
  1236. //// var_dump($taskEventArg);
  1237. // self::CheckTaskCardConditions($taskEventArg);
  1238. ////
  1239. // $taskEventArgDaily = new Ins_TaskEventArgs(Enum_TaskCmdType::DailyBossChallenge, Enum_PropelType::add, 1, array($gateId));
  1240. //// var_dump($taskEventArgDaily);
  1241. // self::CheckTaskCardConditions($taskEventArgDaily);
  1242. // }
  1243. //
  1244. // /**
  1245. // * 竞技场胜利场次
  1246. // * @param type $num
  1247. // */
  1248. // static function OnPvPWinN($num) {
  1249. // $taskParam = new Ins_TaskParams(Enum_TaskCmdType::PvPWinNumberTo, $num);
  1250. // self::CheckTaskConditions($taskParam);
  1251. // }
  1252. //
  1253. // /**
  1254. // * 竞技场积分
  1255. // * @param type $score
  1256. // */
  1257. // static function OnPvPScoreN($score) {
  1258. // $taskParam = new Ins_TaskParams(Enum_TaskCmdType::PvPScoreTo, $score);
  1259. // self::CheckTaskConditions($taskParam);
  1260. // }
  1261. //
  1262. // /**
  1263. // * 玩家总战力值
  1264. // * @param type $num
  1265. // */
  1266. // static function OnUserFightPowerN($num) {
  1267. // $taskParam = new Ins_TaskParams(Enum_TaskCmdType::UserPowerTo, $num);
  1268. // self::CheckTaskConditions($taskParam);
  1269. // }
  1270. //
  1271. // /**
  1272. // * 玩家收集积分
  1273. // * @param type $num
  1274. // */
  1275. // static function OnUserCollectScoreN($num) {
  1276. // $taskParam = new Ins_TaskParams(Enum_TaskCmdType::UserCollectScoreTo, $num);
  1277. // self::CheckTaskConditions($taskParam);
  1278. // }
  1279. //
  1280. // //
  1281. //// </editor-fold>
  1282. // //
  1283. // // <editor-fold defaultstate="collapsed" desc="每日任务条件检查">
  1284. // //
  1285. //// static function Upate
  1286. //
  1287. // /**
  1288. // * 每日登陆
  1289. // */
  1290. // static function OnUserLogin() {
  1291. // $taskParam = new Ins_TaskParams(Enum_TaskCmdType::DailyLogin);
  1292. // self::CheckDailyTaskConditions($taskParam);
  1293. // $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::DailyLogin, Enum_PropelType::set, 1, array());
  1294. // self::CheckTaskCardConditions($taskEventArg); # 检查日常任务
  1295. // }
  1296. //
  1297. // /**
  1298. // * 每日:英雄强化(升级或升阶)n次
  1299. // */
  1300. // static function OnHeroImprove() {
  1301. // $taskParam = new Ins_TaskParams(Enum_TaskCmdType::DailyHeroImprove);
  1302. // self::CheckDailyTaskConditions($taskParam);
  1303. // $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::DailyHeroImprove, Enum_PropelType::inc, 1, array());
  1304. // self::CheckTaskCardConditions($taskEventArg); # 检查日常任务
  1305. // }
  1306. //
  1307. // /**
  1308. // * 每日:剧情关卡,胜利n次
  1309. // */
  1310. // static function OnPassGate() {
  1311. // $taskParam = new Ins_TaskParams(Enum_TaskCmdType::DailyGatesWin);
  1312. // self::CheckDailyTaskConditions($taskParam);
  1313. // $taskEventArg = new Ins_TaskEventArgs(Enum_TaskCmdType::DailyGatesWin, Enum_PropelType::inc, 1, array());
  1314. // self::CheckTaskCardConditions($taskEventArg); # 检查日常任务
  1315. // }
  1316. //
  1317. // /**
  1318. // * 竞技场每日挑战,胜负均可
  1319. // */
  1320. // static function OnPvp() {
  1321. // $taskParam = new Ins_TaskParams(Enum_TaskCmdType::DailyPVP);
  1322. // self::CheckDailyTaskConditions($taskParam);
  1323. // self::CheckTaskCardConditions($taskParam);
  1324. // }
  1325. //
  1326. // /**
  1327. // * 每日挑战,胜负均可
  1328. // */
  1329. // static function OnRankChalenge() {
  1330. // $taskParam = new Ins_TaskParams(Enum_TaskCmdType::DailyRankChalenge);
  1331. // self::CheckDailyTaskConditions($taskParam);
  1332. // self::CheckTaskCardConditions($taskParam);
  1333. // }
  1334. //
  1335. // /**
  1336. // * 每日购买商品
  1337. // */
  1338. // static function OnShopping() {
  1339. // $taskParam = new Ins_TaskParams(Enum_TaskCmdType::DailyShopping);
  1340. // self::CheckDailyTaskConditions($taskParam);
  1341. // self::CheckTaskCardConditions($taskParam);
  1342. // }
  1343. //
  1344. // //
  1345. //// </editor-fold>
  1346. // //
  1347. // // <editor-fold defaultstate="collapsed" desc="处理任务卡条件检查">
  1348. // //
  1349. //
  1350. // /**
  1351. // * 自动修正任务追踪信息
  1352. // */
  1353. // static function autoRecoverTaskTracingState() {
  1354. // $tasks = ctx()->store->taskcards;
  1355. // $pri = ctx()->privateData();
  1356. // for ($tp = 1; $tp < 5; $tp++) {
  1357. // if (StlUtil::dictHasProperty($pri->taskCardTracing, $tp)) {
  1358. // $curId = $pri->taskCardTracing->$tp;
  1359. // } else {
  1360. // $curId = 0;
  1361. // }
  1362. //
  1363. // //$curId = my_null_default($pri->taskCardTracing->$tp, 0); # 当前追踪中的任务卡id
  1364. //
  1365. // $needRefresh = false;
  1366. // if ($curId > 0) { # 存在任务卡
  1367. // if (CommUtil::isPropertyExists($tasks, $curId)) {
  1368. // $curTask = new Ins_TaskCard($tasks->$curId);
  1369. // if ($curTask->state >= 4) { # 任务卡已经被领取奖励, 尝试刷新
  1370. // $needRefresh = true;
  1371. // }
  1372. // } else { # 任务卡已经被删除, 尝试刷新
  1373. // $needRefresh = true;
  1374. // }
  1375. // } else { # 没有追踪目标, 尝试刷新
  1376. // $needRefresh = true;
  1377. // }
  1378. //
  1379. // if ($needRefresh) {
  1380. // $ok = false;
  1381. // foreach ($tasks as $tid => &$task) {
  1382. // $task = new Ins_TaskCard($task);
  1383. // if ($task->mo()->type == $tp) {
  1384. // if ($task->state >= 4) {
  1385. // continue;
  1386. // }
  1387. // $pri->taskCardTracing->$tp = $tid;
  1388. // $ok = true;
  1389. // break;
  1390. // }
  1391. // }
  1392. // if (!$ok) { # 没有找到合适的追踪对象
  1393. // $pri->taskCardTracing->$tp = 0; # 删除所有追踪(剩余任务已经全部完成了)
  1394. // }
  1395. // ctx()->store->taskcards = $tasks;
  1396. // ctx()->privateState = $pri;
  1397. // }
  1398. // }
  1399. // }
  1400. //
  1401. // /**
  1402. // * 自动修复状态型任务
  1403. // */
  1404. // static function autoRecoverStateMissions() {
  1405. // $tasks = ctx()->store->taskcards;
  1406. // foreach ($tasks as $tid => &$task) {
  1407. // $task = new Ins_TaskCard($task);
  1408. //
  1409. // if ($task->state == Enum_TaskCardStateType::ing // # 进行中的或者已完成的
  1410. // || $task->state == Enum_TaskCardStateType::finish) {
  1411. // foreach ($task->curSteps as &$tsp) { # 初期里面只有一个任务
  1412. // $tsp = new Ins_TaskStep($tsp);
  1413. // $tsp->autoCalcStatusCur();
  1414. // }
  1415. // if ($task->state == Enum_TaskCardStateType::finish) { # 检查是否任务卡的所有步骤都已完成
  1416. // if (!$task->IsFinish()) {
  1417. // $task->state = Enum_TaskCardStateType::ing; # 状态回退
  1418. // }
  1419. // }
  1420. // }
  1421. // }
  1422. //// Clog::info("更新状态统计类的任务卡!");
  1423. // ctx()->store->taskcards = $tasks;
  1424. // }
  1425. //
  1426. // /**
  1427. // * 检查任务卡条件是否达成
  1428. // * @param Ins_TaskEventArgs $taskParam Description
  1429. // */
  1430. // static function CheckTaskCardConditions($taskParam) {
  1431. // $bUpdate = false;
  1432. // $tasks = ctx()->store->taskcards;
  1433. // foreach ($tasks as $tid => &$task) {
  1434. // $task = new Ins_TaskCard($task);
  1435. // if ($task->state != Enum_TaskCardStateType::ing) {
  1436. // continue;
  1437. // }
  1438. // foreach ($task->curSteps as &$tsp) { # 初期里面只有一个任务
  1439. // $tsp = new Ins_TaskStep($tsp);
  1440. // if ($tsp->check_new($taskParam)) {
  1441. // $bUpdate = true;
  1442. // $tsp->propel($taskParam);
  1443. // NormalEventProc::OnTaskCardStep_Process($task->uid, $tsp->typeId); # 任务进度更新
  1444. // if ($tsp->isFinish()) {
  1445. // NormalEventProc::OnTaskCardStep_Complete($task->uid, $tsp->typeId); # 广播任务步骤完成事件
  1446. //// $tsp->doFinishAct();
  1447. // }
  1448. // }
  1449. // }
  1450. // if ($task->IsFinish()) { # 检查后添加后续任务
  1451. // $arr = array();
  1452. // foreach ($task->curSteps as &$tsp) { # 初期里面只有一个任务
  1453. // $tsp = new Ins_TaskStep($tsp);
  1454. // if (strlen($tsp->mo()->next) > 0) { # 有后续任务
  1455. // $arr = array_merge($arr, explode(',', $tsp->mo()->next)); # 累加下一个任务步骤
  1456. // }
  1457. // }
  1458. // foreach ($arr as $stpid) { # 轮询添加后续任务
  1459. // if ($stpid > 0) {
  1460. // $task->AddStep($stpid); # 将后续任务追加到任务列表中
  1461. // }
  1462. // }
  1463. //
  1464. // if (count($arr) != 0) {
  1465. // self::autoRecoverStateMissions();
  1466. // }
  1467. // }
  1468. // if ($task->IsFinish()) { # 检查是否任务卡的所有步骤都已完成
  1469. // $task->state = Enum_TaskCardStateType::finish;
  1470. // NormalEventProc::OnTaskCard_Finish($task->uid, null); # 广播卡完成事件
  1471. // }
  1472. // }
  1473. // if ($bUpdate) { # 带回数据到客户端
  1474. // ctx()->store->taskcards = $tasks;
  1475. // UserProc::updateUserInfo(); # 更新玩家数据
  1476. // }
  1477. //
  1478. // return $bUpdate;
  1479. // }
  1480. //
  1481. // //
  1482. // // </editor-fold>
  1483. ////
  1484. //}