GameHookManager.lua 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. --- 游戏钩子管理器
  2. --- 集中管理所有游戏触发检测点,方便后期增加自有逻辑
  3. --- Created by AI Assistant
  4. --- DateTime: 2024/12/19
  5. GameHookManager = {}
  6. local this = {}
  7. -- 钩子类型常量
  8. local HookType = {
  9. -- 玩家相关
  10. PLAYER_LEVEL_UP = "player_level_up", -- 玩家升级
  11. PLAYER_LOGIN = "player_login", -- 玩家登录
  12. PLAYER_LOGOUT = "player_logout", -- 玩家登出
  13. PLAYER_CHANGE_NAME = "player_change_name", -- 玩家改名
  14. PLAYER_DIE = "player_die", -- 玩家死亡
  15. PLAYER_PK = "player_pk", -- 玩家PK
  16. PLAYER_UNDER_ATTACK = "player_under_attack", -- 玩家被攻击
  17. PLAYER_TRANSFER_CAREER = "player_transfer_career", -- 玩家转职
  18. -- 装备相关
  19. EQUIP_PUT_ON = "equip_put_on", -- 穿戴装备
  20. EQUIP_TAKE_OFF = "equip_take_off", -- 脱下装备
  21. EQUIP_STRENGTHEN = "equip_strengthen", -- 装备强化
  22. EQUIP_APPEND = "equip_append", -- 装备追加
  23. EQUIP_SYNTHESIS = "equip_synthesis", -- 装备合成
  24. EQUIP_RECOVERY = "equip_recovery", -- 装备回收
  25. EQUIP_OVERLAY = "equip_overlay", -- 装备叠加
  26. EQUIP_REGENERATION = "equip_regeneration", -- 装备再生
  27. EQUIP_TRANSFER = "equip_transfer", -- 装备属性转移
  28. EQUIP_FASHION = "equip_fashion", -- 装备幻化
  29. EQUIP_COLOR = "equip_color", -- 装备染色
  30. EQUIP_TITLE = "equip_title", -- 装备称号
  31. EQUIP_GUARD = "equip_guard", -- 装备守护
  32. EQUIP_GEM = "equip_gem", -- 装备宝石
  33. EQUIP_ORNAMENTS = "equip_ornaments", -- 装备首饰
  34. WEAPON_CHANGE = "weapon_change", -- 武器切换
  35. -- 战斗相关
  36. MONSTER_KILL = "monster_kill", -- 击杀怪物
  37. MONSTER_FIRST_ATTACK = "monster_first_attack", -- 首刀攻击
  38. MONSTER_LAST_KILL = "monster_last_kill", -- 尾刀击杀
  39. MONSTER_DAMAGE = "monster_damage", -- 对怪物造成伤害
  40. MONSTER_ENTER_ATTACK = "monster_enter_attack", -- 怪物进入战斗
  41. MONSTER_LEAVE_ATTACK = "monster_leave_attack", -- 怪物离开战斗
  42. MONSTER_ENTER_VIEW = "monster_enter_view", -- 怪物进入视野
  43. MONSTER_DIE = "monster_die", -- 怪物死亡
  44. MONSTER_DIE_EXP = "monster_die_exp", -- 怪物死亡经验
  45. MONSTER_DIE_DROP = "monster_die_drop", -- 怪物死亡掉落
  46. -- 副本相关
  47. DUPLICATE_ENTER = "duplicate_enter", -- 进入副本
  48. DUPLICATE_EXIT = "duplicate_exit", -- 退出副本
  49. DUPLICATE_FINISH = "duplicate_finish", -- 完成副本
  50. DUPLICATE_STATE_CHANGE = "duplicate_state_change", -- 副本状态变化
  51. DUPLICATE_SECOND_HEART = "duplicate_second_heart", -- 副本心跳
  52. -- 掉落相关
  53. ITEM_DROP = "item_drop", -- 物品掉落
  54. ITEM_PICKUP = "item_pickup", -- 拾取物品
  55. ITEM_USE = "item_use", -- 使用物品
  56. ITEM_DESTROY = "item_destroy", -- 销毁物品
  57. ITEM_TRADE = "item_trade", -- 交易物品
  58. ITEM_ADD_BAG = "item_add_bag", -- 物品进背包
  59. ITEM_CHANGE = "item_change", -- 物品变化
  60. ITEM_SYNTHESIS = "item_synthesis", -- 物品合成
  61. ITEM_RECOVERY = "item_recovery", -- 物品回收
  62. ITEM_DECOMPOSITION = "item_decomposition", -- 物品分解
  63. -- 任务相关
  64. TASK_ACCEPT = "task_accept", -- 接受任务
  65. TASK_FINISH = "task_finish", -- 完成任务
  66. TASK_SUBMIT = "task_submit", -- 提交任务
  67. TASK_GOAL_UPDATE = "task_goal_update", -- 任务目标更新
  68. TASK_PROGRESS_COMPLETE = "task_progress_complete", -- 任务进度完成
  69. TASK_REFRESH = "task_refresh", -- 任务刷新
  70. -- 活动相关
  71. ACTIVITY_ENTER = "activity_enter", -- 进入活动
  72. ACTIVITY_FINISH = "activity_finish", -- 完成活动
  73. ACTIVITY_REWARD = "activity_reward", -- 获得活动奖励
  74. ACTIVITY_CHANGE = "activity_change", -- 活动状态变化
  75. ACTIVITY_COUNT_RESET = "activity_count_reset", -- 活动次数重置
  76. -- 充值消费相关
  77. RECHARGE = "recharge", -- 充值
  78. CONSUME_DIAMOND = "consume_diamond", -- 消费钻石
  79. CONSUME_GOLD = "consume_gold", -- 消费金币
  80. CONSUME_ITEM = "consume_item", -- 消费道具
  81. BUY_MALL_GOODS = "buy_mall_goods", -- 购买商城商品
  82. BUY_NPC_SHOP_GOODS = "buy_npc_shop_goods", -- 购买NPC商店商品
  83. -- 战盟相关
  84. UNION_JOIN = "union_join", -- 加入战盟
  85. UNION_LEAVE = "union_leave", -- 离开战盟
  86. UNION_DONATE = "union_donate", -- 战盟捐献
  87. UNION_CREATE = "union_create", -- 创建战盟
  88. UNION_CLOSE = "union_close", -- 解散战盟
  89. UNION_ADD_MEMBER = "union_add_member", -- 战盟添加成员
  90. UNION_DEL_MEMBER = "union_del_member", -- 战盟删除成员
  91. -- 地图相关
  92. MAP_ENTER = "map_enter", -- 进入地图
  93. MAP_LEAVE = "map_leave", -- 离开地图
  94. MAP_LINE_ENTER = "map_line_enter", -- 进入地图分线
  95. MAP_CREATE = "map_create", -- 创建地图
  96. MAP_DESTROY = "map_destroy", -- 销毁地图
  97. MAP_MONSTER_DIE = "map_monster_die", -- 地图怪物死亡
  98. MAP_MONSTER_REMOVE = "map_monster_remove", -- 地图怪物移除
  99. -- 特殊系统
  100. VIP_UPGRADE = "vip_upgrade", -- VIP升级
  101. PRIVILEGE_ACTIVATE = "privilege_activate", -- 激活特权
  102. WINGS_UPGRADE = "wings_upgrade", -- 翅膀升级
  103. ANGEL_GRAIL_UPGRADE = "angel_grail_upgrade", -- 天使圣杯升级
  104. COMBO_SKILL_ACTIVATE = "combo_skill_activate", -- 激活连击技能
  105. TRIPLE_INCOME_OPEN = "triple_income_open", -- 开启三倍收益
  106. MOUNT_UPGRADE = "mount_upgrade", -- 坐骑升级
  107. PET_CALL = "pet_call", -- 召唤宠物
  108. BUFF_EFFECT = "buff_effect", -- Buff效果
  109. BUFF_LOSE = "buff_lose", -- Buff消失
  110. SKILL_RELEASE = "skill_release", -- 释放技能
  111. SKILL_REMOVE = "skill_remove", -- 移除技能
  112. COMBO_SET = "combo_set", -- 设置连击
  113. -- 心跳相关
  114. ROLE_SECOND_HEART = "role_second_heart", -- 角色1秒心跳
  115. ROLE_3SECOND_HEART = "role_3second_heart", -- 角色3秒心跳
  116. ROLE_5SECOND_HEART = "role_5second_heart", -- 角色5秒心跳
  117. ROLE_10SECOND_HEART = "role_10second_heart", -- 角色10秒心跳
  118. ROLE_MINUTE_HEART = "role_minute_heart", -- 角色分钟心跳
  119. ROLE_HOUR_HEART = "role_hour_heart", -- 角色小时心跳
  120. MAP_SECOND_HEART = "map_second_heart", -- 地图1秒心跳
  121. MAP_3SECOND_HEART = "map_3second_heart", -- 地图3秒心跳
  122. MAP_5SECOND_HEART = "map_5second_heart", -- 地图5秒心跳
  123. -- 其他
  124. PLAYER_ENTER_VIEW = "player_enter_view", -- 玩家进入视野
  125. ATTRIBUTE_UPDATE = "attribute_update", -- 属性更新
  126. TRANSMIT = "transmit", -- 传送
  127. SCENE_ENTER = "scene_enter", -- 进入场景
  128. OFFLINE_EXP = "offline_exp", -- 离线经验
  129. STALL_INFO = "stall_info", -- 摆摊信息
  130. DEPLOY_ATTR_POINT = "deploy_attr_point", -- 加点
  131. MONSTER_INIT = "monster_init", -- 怪物初始化
  132. SHOW_REWARD_PANEL = "show_reward_panel", -- 显示奖励面板
  133. }
  134. -- 钩子回调函数存储
  135. local hookCallbacks = {}
  136. -- 导出钩子类型
  137. GameHookManager.HookType = HookType
  138. --- 注册钩子回调函数
  139. --- @param hookType string 钩子类型
  140. --- @param callback function 回调函数
  141. --- @param priority number 优先级(数字越小优先级越高,默认100)
  142. function GameHookManager.RegisterHook(hookType, callback, priority)
  143. if not hookCallbacks[hookType] then
  144. hookCallbacks[hookType] = {}
  145. end
  146. priority = priority or 100
  147. table.insert(hookCallbacks[hookType], {
  148. callback = callback,
  149. priority = priority
  150. })
  151. -- 按优先级排序
  152. table.sort(hookCallbacks[hookType], function(a, b)
  153. return a.priority < b.priority
  154. end)
  155. jprint("注册钩子:", hookType, "优先级:", priority)
  156. end
  157. --- 触发钩子
  158. --- @param hookType string 钩子类型
  159. --- @param ... any 传递给回调函数的参数
  160. function GameHookManager.TriggerHook(hookType, ...)
  161. if not hookCallbacks[hookType] then
  162. return
  163. end
  164. local args = {...}
  165. for _, hook in ipairs(hookCallbacks[hookType]) do
  166. local success, result = xpcall(hook.callback, debug.traceback, table.unpack(args))
  167. if not success then
  168. jprint("钩子执行异常:", hookType, "错误:", result)
  169. end
  170. end
  171. end
  172. --- 移除钩子回调
  173. --- @param hookType string 钩子类型
  174. --- @param callback function 要移除的回调函数
  175. function GameHookManager.UnregisterHook(hookType, callback)
  176. if not hookCallbacks[hookType] then
  177. return
  178. end
  179. for i = #hookCallbacks[hookType], 1, -1 do
  180. if hookCallbacks[hookType][i].callback == callback then
  181. table.remove(hookCallbacks[hookType], i)
  182. jprint("移除钩子:", hookType)
  183. break
  184. end
  185. end
  186. end
  187. --- 获取钩子回调数量
  188. --- @param hookType string 钩子类型
  189. --- @return number 回调数量
  190. function GameHookManager.GetHookCount(hookType)
  191. if not hookCallbacks[hookType] then
  192. return 0
  193. end
  194. return #hookCallbacks[hookType]
  195. end
  196. --- 清空指定类型的钩子
  197. --- @param hookType string 钩子类型
  198. function GameHookManager.ClearHooks(hookType)
  199. if hookType then
  200. hookCallbacks[hookType] = nil
  201. jprint("清空钩子:", hookType)
  202. else
  203. hookCallbacks = {}
  204. jprint("清空所有钩子")
  205. end
  206. end
  207. --- 初始化钩子管理器
  208. function GameHookManager.Init()
  209. jprint("游戏钩子管理器初始化完成")
  210. jprint("支持的钩子类型数量:", table.getn(table.keys(HookType)))
  211. end
  212. -- 导出钩子类型常量
  213. GameHookManager.HookType = HookType