Info_UserTask.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?php
  2. namespace loyalsoft;
  3. /**
  4. * 玩家任务数据
  5. * @author wanggangzero@qq.com
  6. * @deprecated since version 0 已经被废弃(呵呵, 是这次策划又启动相似功能时发现废弃的2021.9.26)
  7. * @version 1.0.0 2020.7.8 created by gwang
  8. */
  9. class Info_UserTask extends Object_ext {
  10. /**
  11. * 当前任务节点id
  12. * @var int
  13. */
  14. public $curTaskNode;
  15. /**
  16. * 当前关注任务id
  17. * @var int
  18. */
  19. public $curTaskId;
  20. /**
  21. * 剧情任务实例列表 {id:{progress:0.4,rewardgeted:0}...}
  22. * @var dict
  23. */
  24. public $taskListPlot;
  25. /**
  26. * 每日任务实例列表 {id:{progress:0.4,rewardgeted:0}...}
  27. * @var dict
  28. */
  29. public $taskListDaily;
  30. /**
  31. * @var int 每日重置记录
  32. */
  33. public $dailyResetTs = 0;
  34. /**
  35. * @var int 每日活跃点数
  36. */
  37. public $dailyActivePoint = 0;
  38. /**
  39. * @var array 日常任务活跃度阶段奖励领取记录
  40. */
  41. public $dailyActiveGetedRewardArr = array();
  42. public function __construct($args = null) {
  43. parent::__construct($args);
  44. if (null == $args) {
  45. $this->curTaskNode = 4000001;
  46. $this->curTaskId = 0;
  47. $this->taskListDaily = ObjectInit();
  48. $this->taskListPlot = ObjectInit();
  49. }
  50. }
  51. public function initialize() {
  52. $nodeCfg = GameConfig::task_node_getItem($this->curTaskNode);
  53. $taskArr = explode(',', $nodeCfg->taskList);
  54. $this->curTaskId = $taskArr[0];
  55. foreach ($taskArr as $tid) {
  56. $this->AddPlotTask($tid);
  57. }
  58. $this->AfterInit();
  59. }
  60. public function resetDailyTask() {
  61. if (totalDays($this->dailyResetTs - 18000) < totalDays() || $this->dailyResetTs <= 0) { # 每天5点
  62. $dts = GameConfig::task_daily();
  63. $this->taskListDaily = ObjectInit();
  64. foreach ($dts as $tid => $t) {
  65. $task = new Ins_TaskInfo();
  66. $task->taskId = $tid;
  67. $this->taskListDaily->$tid = $task;
  68. }
  69. $this->dailyActivePoint = 0;
  70. $this->dailyActiveGetedRewardArr = array();
  71. $this->dailyResetTs = now(); # 更新刷新时间
  72. }
  73. }
  74. function AddPlotTask($taskId) {
  75. $tmo = GameConfig::task_getItem($taskId);
  76. my_Assert(null != $tmo, ErrCode::err_const_no);
  77. switch ($tmo->ban) { // 每日,剧情...
  78. }
  79. $task = new Ins_TaskInfo();
  80. $task->taskId = $taskId;
  81. $this->taskListPlot->$taskId = $task;
  82. }
  83. function AfterInit() {
  84. foreach ($this->taskListPlot as $taskId => &$task) {
  85. $tmo = GameConfig::task_getItem($taskId);
  86. $task = new Ins_TaskInfo($task);
  87. my_Assert(null != $tmo, ErrCode::err_const_no);
  88. switch ($tmo->tasktype) { # 有可能添加任务的时候, 任务就已经完成了. 所以这里需要直接做一个检查...
  89. case Enum_TaskCmdType::CommanderLevelUpTo:
  90. $taskParam = new Ins_TaskParams(Enum_TaskCmdType::CommanderLevelUpTo, ctx()->base(false)->level);
  91. $task->bCheckProgress($taskParam);
  92. break;
  93. case Enum_TaskCmdType::HeroLevelUpTo:
  94. $heroMoId = $tmo->canshu1;
  95. $userHeros = ctx()->heros(false);
  96. $hero = $userHeros->GetHeroByMoID($heroMoId);
  97. $level = 0;
  98. if ($hero != null) {
  99. $level = $hero->level;
  100. }
  101. $taskParam = new Ins_TaskParams(Enum_TaskCmdType::HeroLevelUpTo, $hero->typeId, $hero->level);
  102. $task->bCheckProgress($taskParam);
  103. break;
  104. case Enum_TaskCmdType::HeroGradeUpTo:
  105. $heroMoId = $tmo->canshu1;
  106. $userHeros = ctx()->heros(false);
  107. $hero = $userHeros->GetHeroByMoID($heroMoId);
  108. $level = 0;
  109. if ($hero != null) {
  110. $level = $hero->grade;
  111. }
  112. $taskParam = new Ins_TaskParams(Enum_TaskCmdType::HeroLevelUpTo, $heroMoId, $level);
  113. $task->bCheckProgress($taskParam);
  114. break;
  115. case Enum_TaskCmdType::HeroSegmentNumberTo:
  116. $segId = $tmo->canshu1;
  117. $store = ctx()->store(false);
  118. $num = $store->GetItemCount($segId);
  119. $taskParam = new Ins_TaskParams(Enum_TaskCmdType::HeroSegmentNumberTo, $segId, $num);
  120. $task->bCheckProgress($taskParam);
  121. break;
  122. case Enum_TaskCmdType::HeroSkillUnlock:
  123. $heroMoId = $tmo->canshu1;
  124. $userHeros = ctx()->heros(false);
  125. $hero = $userHeros->GetHeroByMoID($heroMoId);
  126. $subSkillMo = GameConfig::subSkill_getItem($tmo->canshu2);
  127. my_Assert(null != $subSkillMo, ErrCode::err_const_no);
  128. $mSkillId = $subSkillMo->mainSkillId;
  129. $subSkillId = 0;
  130. if ($hero != null && in_array($tmo->canshu2, $hero->subSkills->$mSkillId)) {
  131. $subSkillId = $tmo->canshu2;
  132. }
  133. $taskParam = new Ins_TaskParams(Enum_TaskCmdType::HeroSkillUnlock, $heroMoId, $subSkillId);
  134. $task->bCheckProgress($taskParam);
  135. break;
  136. case Enum_TaskCmdType::PassGateN:
  137. $gateId = $tmo->canshu1;
  138. $diffculty = $tmo->canshu2;
  139. $gates = ctx()->gates(false)->normal;
  140. switch ($diffculty) {
  141. case 0:
  142. $gates = ctx()->gates(false)->normal;
  143. break;
  144. case 1:
  145. $gates = ctx()->gates(false)->hard;
  146. break;
  147. case 2:
  148. $gates = ctx()->gates(false)->elite;
  149. break;
  150. default :
  151. $gates = ctx()->gates(false)->normal;
  152. break;
  153. }
  154. $taskParam = new Ins_TaskParams(Enum_TaskCmdType::PassGateN, $gates->highest, $diffculty);
  155. $task->bCheckProgress($taskParam);
  156. break;
  157. case Enum_TaskCmdType::passEndlessCarbonN:
  158. break;
  159. case Enum_TaskCmdType::PvPWinNumberTo:
  160. $pvp = ctx()->pvp(false); # 设计玩家pvp数据结构
  161. $taskParam = new Ins_TaskParams(Enum_TaskCmdType::PvPWinNumberTo, $pvp->totalWin); # 任务参数
  162. $task->bCheckProgress($taskParam);
  163. break;
  164. case Enum_TaskCmdType::PvPScoreTo:
  165. $uid = req()->uid; # 快速访问UID
  166. $zoneid = req()->zoneid; # 快速访问zoneid
  167. $seasonId = PVPProc::GetCurSeasonID(); # 当前赛季ID
  168. $key = MemKey_GameRun::Game_PVPScoreByZoneSeason_zset($zoneid, $seasonId); # 积分总榜
  169. $score = self::_getScore_by_uid($uid, $key); # 玩家积分
  170. $taskParam = new Ins_TaskParams(Enum_TaskCmdType::PvPScoreTo, $score); # 任务参数
  171. $task->bCheckProgress($taskParam);
  172. break;
  173. case Enum_TaskCmdType::UserPowerTo:
  174. $key = MemKey_GameRun::Game_FightPowerRank_zset(req()->zoneid); # redis key
  175. $power = gMem()->zscore($key, req()->uid); # 查询战斗力
  176. $taskParam = new Ins_TaskParams(Enum_TaskCmdType::UserPowerTo, $power);
  177. $task->bCheckProgress($taskParam);
  178. break;
  179. case Enum_TaskCmdType::UserCollectScoreTo:
  180. break;
  181. }
  182. }
  183. }
  184. /**
  185. * 判断是否当前所有剧情任务全部完成并且领取奖励了
  186. * @return boolean
  187. */
  188. function IsAllPlotTaskOver() {
  189. $bYes = true;
  190. foreach ($this->taskListPlot as $tid => $task) {
  191. isEditor() and $task = new Ins_TaskInfo($task);
  192. if (!$task->rewardGeted) {
  193. $bYes = false;
  194. break;
  195. }
  196. }
  197. return $bYes;
  198. }
  199. }