TaskHandler_1.lua 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. ---
  2. --- Generated by EmmyLua(https://github.com/EmmyLua)
  3. --- Created by zhangkai.
  4. --- DateTime: 2024/8/29 下午2:08
  5. ---
  6. TaskHandler = {}
  7. local this = {}
  8. ---任务状态
  9. TaskHandler.Status = {
  10. ---已接取
  11. ACCEPT = 1,
  12. ---已完成
  13. FINISH = 2,
  14. ---已提交
  15. SUBMIT = 3,
  16. }
  17. ---任务记录
  18. function this.GetNewTaskRecord()
  19. local TaskRecord = {
  20. ---任务id
  21. task_id = 0,
  22. ---任务目标id
  23. target_id = 0,
  24. ---任务目标类型
  25. task_goal = 0,
  26. ---任务当前进度
  27. goal_count = 0,
  28. ---任务目标数量
  29. max_count = 0,
  30. ---任务状态
  31. state = TaskHandler.Status.ACCEPT,
  32. }
  33. return TaskRecord
  34. end
  35. ---@alias TaskGoalHandler table 外置任务类型目标
  36. TaskGoalHandler = {
  37. ---@see 通关副本次数
  38. [TaskTargetType.FINISH_DUPLICATE] = ActivityTaskGoal.FlushFinishDupCount,
  39. ---@see 通关指定副本次数
  40. [TaskTargetType.FINISH_GOAL_DUP] = ActivityTaskGoal.FlushFinishGoalDupCount,
  41. ---@see 合成次数
  42. [TaskTargetType.SYNTHESIS] = EquipTaskGoal.FlushSynthesisCount,
  43. ---@see 回收次数
  44. [TaskTargetType.RECOVERY] = EquipTaskGoal.FlushRecoveryCount,
  45. ---@see 指定部位强化到达指定等级
  46. [TaskTargetType.PARTS_STRENGTHEN_LV] = EquipTaskGoal.FlushPartsStrengthenLv,
  47. ---@see 完成勇士任务
  48. [TaskTargetType.FINISH_GOLD_TASK] = ActivityTaskGoal.FlushFinishGoldTaskCount,
  49. ---@see 在指定地图对怪造成伤害
  50. [TaskTargetType.HURT_MAP_MONSTER] = MonsterTaskGoal.FlushHurtMapMonster,
  51. ---@see 首饰升级
  52. [TaskTargetType.JEWELRY_LV_UP] = EquipTaskGoal.FlushJewelryLvUp,
  53. ---@see 通关秘境副本
  54. [TaskTargetType.FINISH_SECRET_REALM_DUPLICATE] = ActivityTaskGoal.FlushSecretRealmFinishTimes,
  55. ---@see 开启三倍收益
  56. [TaskTargetType.OPEN_TRIPLE_INCOME] = PlayerTaskGoal.FlushTripleIncome,
  57. ---@see 指定部位追加到达指定等级
  58. [TaskTargetType.EQUIP_APPEND] = EquipTaskGoal.FlushPartsAppendLv,
  59. ---@see 击杀指定类型怪物
  60. [TaskTargetType.KILL_TYPE_MONSTER] = MonsterTaskGoal.FlushKillTypeMonster,
  61. ---@see 交易行上架商品
  62. [TaskTargetType.TRADE_LINE_UP_GOODS] = TradeTaskGoal.FlushTradeLineUpGoods,
  63. ---@see 商城购买商品
  64. [TaskTargetType.MALL_BUY_GOODS] = TradeTaskGoal.FlushMallBuyGoods,
  65. ---@see 装备叠加
  66. [TaskTargetType.EQUIP_SUPERPOSITION] = EquipTaskGoal.FlushEquipSuperposition,
  67. ---@see 卓越词条
  68. [TaskTargetType.EXCELLENCE_ATTR] = EquipTaskGoal.FlushExcellenceAttr,
  69. ---@see 镶嵌萤石
  70. [TaskTargetType.INLAID_GEMSTONES] = EquipTaskGoal.FlushInlaidGemstones,
  71. ---@see 装备卓越词条数量
  72. [TaskTargetType.EQUIP_EXCELLENCE_ATTR_COUNT] = EquipTaskGoal.FlushExcellenceAttrCount,
  73. ---@see 加点
  74. [TaskTargetType.DEPLOY_ATTR_POINT] = PlayerTaskGoal.FlushDeployAttrPoint,
  75. ---@see 重新获取一个指定道具
  76. [TaskTargetType.RE_GET_ITEM] = EquipTaskGoal.FlushReGetItem,
  77. ---@see 从NPC商店购买指定道具
  78. [TaskTargetType.NPC_MALL_BUY_GOODS] = TradeTaskGoal.FlushNpcMallBuyGoods,
  79. ---@see 回收获得指定道具
  80. [TaskTargetType.RECOVERY_GET_APPOINT_ITEM] = EquipTaskGoal.FlushRecoveryGetAppointItem,
  81. ---@see 完成一次BOSS悬赏
  82. [TaskTargetType.BOSS_BOUNTY] = ActivityTaskGoal.FlushBossRewardBounty,
  83. ---@see 激活连击技能
  84. [TaskTargetType.ACTIVATE_COMBO_SKILL] = PlayerTaskGoal.FlushActivateComboSkill,
  85. ---@see 激活白银特权
  86. [TaskTargetType.ACTIVATE_SILVER_PRIVILEGE] = PlayerTaskGoal.ActivateSilverPrivilege,
  87. ---@see 完成第X章首饰任务
  88. [TaskTargetType.JEWELRY_TASK_CHAPTER] = ActivityTaskGoal.JewelryTaskChapter,
  89. ---@see 穿戴装备累计强化x次数
  90. [TaskTargetType.EQUIP_STRENGTHEN_TIMES] = EquipTaskGoal.EquipStrengthenTimes,
  91. ---@see 击杀x次指定等级以上怪物
  92. [TaskTargetType.KILL_LEVEL_MONSTER] = MonsterTaskGoal.KillLevelMonster,
  93. ---@see 使用果实
  94. [TaskTargetType.USE_FRUIT_ITEM] = PlayerTaskGoal.UseFruitItem,
  95. ---@see 穿戴装备的总追加达到x级
  96. [TaskTargetType.EQUIP_APPEND_TOTAL_LV] = EquipTaskGoal.EquipAppendTotalLv,
  97. ---@see 穿戴指定装备
  98. [TaskTargetType.SPECIFIC_STAGE_EQUIP] = EquipTaskGoal.SpecificStageEquip,
  99. ---@see 尾刀击杀怪物
  100. [TaskTargetType.LAST_KILL_MONSTER] = MonsterTaskGoal.LastKillMonster,
  101. ---@see 镶嵌卡牌
  102. [TaskTargetType.INLAID_TRANSFORMATION_CARD] = EquipTaskGoal.InlaidTransformationCard,
  103. ---@see 完成勇气试炼X层
  104. [TaskTargetType.FLUSH_BRAVE_TEST_LV] = ActivityTaskGoal.FlushBraveTestLv,
  105. ---@see 进入地图分线
  106. [TaskTargetType.ENTER_MAP_LINE] = PlayerTaskGoal.EnterMapLine,
  107. ---@see 首刀击杀怪物
  108. [TaskTargetType.FIRST_ATTACK_MONSTER] = MonsterTaskGoal.FirstAttackMonster,
  109. ---@see 合成卡牌
  110. [TaskTargetType.SYNTHESIS_CARD] = EquipTaskGoal.FlushSynthesisCard,
  111. ---@see 装备指定数量圣杯
  112. [TaskTargetType.TAKE_ON_GRAIL_COUNT] = EquipTaskGoal.FlushTakeOnGrailCount,
  113. ---@see 强化圣杯 达到强化到指定等级的圣杯数量
  114. [TaskTargetType.STRENGTHEN_GRAIL] = EquipTaskGoal.FlushStrengthenGrail,
  115. ---@see 领取幻影导师buff
  116. [TaskTargetType.ADD_DOUBLE_EXP_BUFF] = PlayerTaskGoal.FlushDeployAttrPoint,
  117. ---@see 杀怪队伍共享
  118. [TaskTargetType.KILL_MONSTER_TEAM_SHARE] = MonsterTaskGoal.FlushKillMonsterTeamShare,
  119. ---@see 查阅攻略
  120. [TaskTargetType.CHECK_STRATEGY] = PlayerTaskGoal.FlushCheckStrategy,
  121. }
  122. ---@description 触发任务刷新
  123. ---@param actor table 玩家对象
  124. ---@param taskTargetType number 任务目标类型
  125. ---@param param any 自定义刷新参数
  126. function TaskHandler.TriggerTaskGoal(actor, taskTargetType, param)
  127. local success, errorInfo = xpcall(this.TriggerTaskGoal, debug.traceback, actor, taskTargetType, param)
  128. if not success then
  129. gameDebug.assertPrint(success, "任务目标更新异常:", errorInfo, "参数", actor, taskTargetType, param)
  130. end
  131. end
  132. function this.TriggerTaskGoal(actor, taskTargetType, param)
  133. local ok = TaskGoal.IsTaskTargetType(taskTargetType)
  134. if not ok then
  135. return
  136. end
  137. ---触发内置任务系统系统刷新
  138. if TaskGoal.isLuaGoalType(taskTargetType) then
  139. taskgoalflush(actor, taskTargetType, param)
  140. end
  141. -- 任意任务类型刷新触发
  142. DailyActivity.taskGoalFlush(actor, taskTargetType, param)
  143. -- 刷新王者之路任务
  144. KingRoad.FlushKingRoadTask(actor, taskTargetType, param)
  145. -- 翅膀任务刷新
  146. Wings.FlushWingsTask(actor, taskTargetType, param)
  147. end
  148. ---构建任务记录
  149. ---@param actor table 玩家对象
  150. ---@param taskId number 任务id
  151. ---@param targetId number 任务目标配置id
  152. function TaskHandler.BuildTaskRecord(actor, taskId, targetId)
  153. local success, taskRecord = xpcall(this.BuildTaskRecord, debug.traceback, actor, taskId, targetId)
  154. if not success then
  155. gameDebug.assertPrint(success, "构建任务记录异常:", taskRecord, "参数", actor, taskId, targetId)
  156. return nil
  157. end
  158. return taskRecord
  159. end
  160. function this.BuildTaskRecord(actor, taskId, targetId)
  161. local targetList = ConfigDataManager.getTable("cfg_task_target", "id", targetId)
  162. if table.isNullOrEmpty(targetList) or #targetList < 1 then
  163. return nil
  164. end
  165. local targetConfig = targetList[1]
  166. local taskGoalType = tonumber(targetConfig["taskgoaltype"])
  167. local ok = TaskGoal.IsTaskTargetType(taskGoalType)
  168. if not ok then
  169. return nil
  170. end
  171. local maxCount = tonumber(targetConfig["goalcount"])
  172. if maxCount == nil then
  173. maxCount = 1
  174. end
  175. local taskRecord = this.GetNewTaskRecord()
  176. taskRecord.task_id = taskId
  177. taskRecord.target_id = targetId
  178. taskRecord.task_goal = taskGoalType
  179. taskRecord.max_count = maxCount
  180. local count = TaskGoal.FlushTaskCount(actor, taskGoalType, targetId, 0, nil)
  181. if count > 0 then
  182. taskRecord.goal_count = math.min(count, maxCount)
  183. if count >= maxCount then
  184. taskRecord.state = TaskHandler.Status.FINISH
  185. end
  186. end
  187. return taskRecord
  188. end
  189. function TaskHandler.onTaskChange(actor, taskId, state)
  190. TaskHandler.saveTaskChange(actor, taskId, state)
  191. TaskHandler.sendTaskState(actor)
  192. end
  193. function TaskHandler.saveTaskChange(actor, taskId, state)
  194. local taskStates = getplaydef(actor, "T$taskStates") or {}
  195. taskStates[taskId] = state
  196. setplaydef(actor, "T$taskStates", taskStates)
  197. end
  198. function TaskHandler.sendTaskState(actor)
  199. local taskStates = getplaydef(actor, "T$taskStates") or {}
  200. sendluamsg(actor, LuaMessageIdToClient.RES_TASK_STATES_TO_FUNC_ON, taskStates)
  201. end