UserTaskInfo.php 7.7 KB

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