TaskGoal.lua 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. TaskGoal = {}
  2. local this = {}
  3. ---@alias TaskTargetType 任务目标类型
  4. TaskTargetType = {
  5. ------ 内置任务类型 ------
  6. COLLECTION = 1, -- 收集
  7. KILL_MONSTER = 2, -- 杀怪
  8. MAP_MOVE = 3, -- 地图移动
  9. FIND_NPC = 4, -- 寻找NPC
  10. LEVEL_REACH = 5, -- 等级达到
  11. USE_ITEM = 6, -- 使用物品
  12. SUBMIT_ITEM = 7, -- 提交物品
  13. WEAR_ITEM = 8, -- 穿戴物品
  14. HAS_UNION = 9, -- 加入公会
  15. GET_SKILL = 10, -- 获得技能
  16. WEAR_DESIGNATED_EQUIP = 11, -- 穿戴指定装备
  17. ------ 外置任务类型 ------
  18. ---@alias 通关副本次数
  19. FINISH_DUPLICATE = 12,
  20. ---@alias 通关指定副本次数
  21. FINISH_GOAL_DUP = 13,
  22. ---@alias 合成次数
  23. SYNTHESIS = 14,
  24. ---@alias 回收次数
  25. RECOVERY = 15,
  26. ---@alias 指定部位强化到达指定等级
  27. PARTS_STRENGTHEN_LV = 16,
  28. ---@alias 完成勇士任务
  29. FINISH_GOLD_TASK = 17,
  30. ---@alias 在指定地图对怪造成伤害
  31. HURT_MAP_MONSTER = 18,
  32. ---@alias 首饰升级
  33. JEWELRY_LV_UP = 19,
  34. ---@alias 通关秘境副本
  35. FINISH_SECRET_REALM_DUPLICATE = 20,
  36. ---@alias 开启三倍收益
  37. OPEN_TRIPLE_INCOME = 21,
  38. ---@alias 指定部位追加到达指定等级
  39. EQUIP_APPEND = 22,
  40. ---@alias 击杀指定类型怪物
  41. KILL_TYPE_MONSTER = 23,
  42. ---@alias 交易行上架商品
  43. TRADE_LINE_UP_GOODS = 24,
  44. ---@alias 商城购买商品
  45. MALL_BUY_GOODS = 25,
  46. ---@alias 装备叠加
  47. EQUIP_SUPERPOSITION = 26,
  48. ---@alias 卓越词条
  49. EXCELLENCE_ATTR = 27,
  50. ---@alias 镶嵌萤石
  51. INLAID_GEMSTONES = 28,
  52. ---@alias 装备卓越词条数量
  53. EQUIP_EXCELLENCE_ATTR_COUNT = 29,
  54. ---@alias 加点
  55. DEPLOY_ATTR_POINT = 30,
  56. ---@alias 重新获取一个指定道具
  57. RE_GET_ITEM = 31,
  58. ---@alias 从NPC商店购买指定道具
  59. NPC_MALL_BUY_GOODS = 32,
  60. ---@alias 回收获得指定道具
  61. RECOVERY_GET_APPOINT_ITEM = 33,
  62. ---@alias 完成一次BOSS悬赏
  63. BOSS_BOUNTY = 34,
  64. ---@alias 激活连击技能
  65. ACTIVATE_COMBO_SKILL = 35,
  66. ---@alias 激活白银特权
  67. ACTIVATE_SILVER_PRIVILEGE = 36,
  68. ---@alias 完成第X章首饰任务
  69. JEWELRY_TASK_CHAPTER = 37,
  70. ---@alias 穿戴装备累计强化x次数
  71. EQUIP_STRENGTHEN_TIMES = 38,
  72. ---@alias 击杀x次指定等级以上怪物
  73. KILL_LEVEL_MONSTER = 39,
  74. ---@alias 使用果实
  75. USE_FRUIT_ITEM = 40,
  76. ---@alias 穿戴装备的总追加达到x级
  77. EQUIP_APPEND_TOTAL_LV = 41,
  78. ---@alias 穿戴指定装备
  79. SPECIFIC_STAGE_EQUIP = 42,
  80. ---@alias 尾刀击杀怪物
  81. LAST_KILL_MONSTER = 43,
  82. ---@alias 镶嵌卡牌
  83. INLAID_TRANSFORMATION_CARD = 44,
  84. ---@alias 完成勇气试炼X层
  85. FLUSH_BRAVE_TEST_LV = 45,
  86. ---@alias 进入地图分线
  87. ENTER_MAP_LINE = 46,
  88. ---@alias 首刀击杀怪物
  89. FIRST_ATTACK_MONSTER = 47,
  90. ---@alias 合成卡牌
  91. SYNTHESIS_CARD = 48,
  92. ---@alias 装备指定数量圣杯
  93. TAKE_ON_GRAIL_COUNT = 49,
  94. ---@alias 强化圣杯
  95. STRENGTHEN_GRAIL = 50,
  96. }
  97. -- 内置任务类型
  98. TaskGoal.GlobalType = {
  99. [1] = true,
  100. [2] = true,
  101. [3] = true,
  102. [4] = true,
  103. [5] = true,
  104. [6] = true,
  105. [7] = true,
  106. [8] = true,
  107. [9] = true,
  108. [10] = true,
  109. [11] = true,
  110. }
  111. ------------------------------------------------------------------
  112. ---内置任务类型
  113. function this.isGlobalType(type)
  114. return TaskGoal.GlobalType[type] == true
  115. end
  116. ---外置任务类型
  117. function TaskGoal.isLuaGoalType(taskType)
  118. return TaskGoalHandler[taskType] ~= nil
  119. end
  120. ---是否为已定义任务类型
  121. function TaskGoal.IsTaskTargetType(taskTargetType)
  122. return this.isGlobalType(taskTargetType) or TaskGoal.isLuaGoalType(taskTargetType)
  123. end
  124. ---刷新外置任务
  125. function this.FlushLuaTaskGoalCount(actor, taskType, goal_id, goal_count, param)
  126. local goalHandler = TaskGoalHandler[taskType]
  127. if goalHandler then
  128. return goalHandler(actor, taskType, goal_id, goal_count, param)
  129. end
  130. error("Invalid task type: " .. tostring(taskType))
  131. return goal_count
  132. end
  133. function this.flushTaskCount(actor, type, goal_id, goal_count, param)
  134. local isGlobal = this.isGlobalType(type)
  135. if isGlobal then
  136. return flushtaskgoalcount(actor, type, goal_id, goal_count, param)
  137. elseif TaskGoal.isLuaGoalType(type) then
  138. return this.FlushLuaTaskGoalCount(actor, type, goal_id, goal_count, param)
  139. end
  140. return goal_count
  141. end
  142. ---刷新任务目标数量
  143. function TaskGoal.FlushTaskCount(actor, taskType, goal_id, goal_count, param)
  144. local success, result = xpcall(this.flushTaskCount, debug.traceback, actor, taskType, goal_id, goal_count, param)
  145. if not success then
  146. gameDebug.assertPrint(success, "更新任务目标数值异常:", result, "参数", actor, taskType, goal_id, goal_count, param)
  147. return goal_count
  148. end
  149. if string.isNullOrEmpty(result) then
  150. return goal_count
  151. end
  152. return tonumber(result)
  153. end
  154. ---------------------------- 日志打印 -----------------------------
  155. this.log_open = false
  156. function this.jprint(param)
  157. if not this.log_open then
  158. return
  159. end
  160. if param == nil then
  161. param = "error! 输出内容为空. nil"
  162. end
  163. jprint(param)
  164. end
  165. function this.loginfo(actor, param)
  166. if not this.log_open then
  167. return
  168. end
  169. if param == nil then
  170. param = "error! 日志输出内容为空. nil"
  171. end
  172. jprint(param)
  173. info(actor, param)
  174. end