| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- --- 游戏钩子管理器
- --- 集中管理所有游戏触发检测点,方便后期增加自有逻辑
- --- Created by AI Assistant
- --- DateTime: 2024/12/19
- GameHookManager = {}
- local this = {}
- -- 钩子类型常量
- local HookType = {
- -- 玩家相关
- PLAYER_LEVEL_UP = "player_level_up", -- 玩家升级
- PLAYER_LOGIN = "player_login", -- 玩家登录
- PLAYER_LOGOUT = "player_logout", -- 玩家登出
- PLAYER_CHANGE_NAME = "player_change_name", -- 玩家改名
- PLAYER_DIE = "player_die", -- 玩家死亡
- PLAYER_PK = "player_pk", -- 玩家PK
- PLAYER_UNDER_ATTACK = "player_under_attack", -- 玩家被攻击
- PLAYER_TRANSFER_CAREER = "player_transfer_career", -- 玩家转职
-
- -- 装备相关
- EQUIP_PUT_ON = "equip_put_on", -- 穿戴装备
- EQUIP_TAKE_OFF = "equip_take_off", -- 脱下装备
- EQUIP_STRENGTHEN = "equip_strengthen", -- 装备强化
- EQUIP_APPEND = "equip_append", -- 装备追加
- EQUIP_SYNTHESIS = "equip_synthesis", -- 装备合成
- EQUIP_RECOVERY = "equip_recovery", -- 装备回收
- EQUIP_OVERLAY = "equip_overlay", -- 装备叠加
- EQUIP_REGENERATION = "equip_regeneration", -- 装备再生
- EQUIP_TRANSFER = "equip_transfer", -- 装备属性转移
- EQUIP_FASHION = "equip_fashion", -- 装备幻化
- EQUIP_COLOR = "equip_color", -- 装备染色
- EQUIP_TITLE = "equip_title", -- 装备称号
- EQUIP_GUARD = "equip_guard", -- 装备守护
- EQUIP_GEM = "equip_gem", -- 装备宝石
- EQUIP_ORNAMENTS = "equip_ornaments", -- 装备首饰
- WEAPON_CHANGE = "weapon_change", -- 武器切换
-
- -- 战斗相关
- MONSTER_KILL = "monster_kill", -- 击杀怪物
- MONSTER_FIRST_ATTACK = "monster_first_attack", -- 首刀攻击
- MONSTER_LAST_KILL = "monster_last_kill", -- 尾刀击杀
- MONSTER_DAMAGE = "monster_damage", -- 对怪物造成伤害
- MONSTER_ENTER_ATTACK = "monster_enter_attack", -- 怪物进入战斗
- MONSTER_LEAVE_ATTACK = "monster_leave_attack", -- 怪物离开战斗
- MONSTER_ENTER_VIEW = "monster_enter_view", -- 怪物进入视野
- MONSTER_DIE = "monster_die", -- 怪物死亡
- MONSTER_DIE_EXP = "monster_die_exp", -- 怪物死亡经验
- MONSTER_DIE_DROP = "monster_die_drop", -- 怪物死亡掉落
-
- -- 副本相关
- DUPLICATE_ENTER = "duplicate_enter", -- 进入副本
- DUPLICATE_EXIT = "duplicate_exit", -- 退出副本
- DUPLICATE_FINISH = "duplicate_finish", -- 完成副本
- DUPLICATE_STATE_CHANGE = "duplicate_state_change", -- 副本状态变化
- DUPLICATE_SECOND_HEART = "duplicate_second_heart", -- 副本心跳
-
- -- 掉落相关
- ITEM_DROP = "item_drop", -- 物品掉落
- ITEM_PICKUP = "item_pickup", -- 拾取物品
- ITEM_USE = "item_use", -- 使用物品
- ITEM_DESTROY = "item_destroy", -- 销毁物品
- ITEM_TRADE = "item_trade", -- 交易物品
- ITEM_ADD_BAG = "item_add_bag", -- 物品进背包
- ITEM_CHANGE = "item_change", -- 物品变化
- ITEM_SYNTHESIS = "item_synthesis", -- 物品合成
- ITEM_RECOVERY = "item_recovery", -- 物品回收
- ITEM_DECOMPOSITION = "item_decomposition", -- 物品分解
-
- -- 任务相关
- TASK_ACCEPT = "task_accept", -- 接受任务
- TASK_FINISH = "task_finish", -- 完成任务
- TASK_SUBMIT = "task_submit", -- 提交任务
- TASK_GOAL_UPDATE = "task_goal_update", -- 任务目标更新
- TASK_PROGRESS_COMPLETE = "task_progress_complete", -- 任务进度完成
- TASK_REFRESH = "task_refresh", -- 任务刷新
-
- -- 活动相关
- ACTIVITY_ENTER = "activity_enter", -- 进入活动
- ACTIVITY_FINISH = "activity_finish", -- 完成活动
- ACTIVITY_REWARD = "activity_reward", -- 获得活动奖励
- ACTIVITY_CHANGE = "activity_change", -- 活动状态变化
- ACTIVITY_COUNT_RESET = "activity_count_reset", -- 活动次数重置
-
- -- 充值消费相关
- RECHARGE = "recharge", -- 充值
- CONSUME_DIAMOND = "consume_diamond", -- 消费钻石
- CONSUME_GOLD = "consume_gold", -- 消费金币
- CONSUME_ITEM = "consume_item", -- 消费道具
- BUY_MALL_GOODS = "buy_mall_goods", -- 购买商城商品
- BUY_NPC_SHOP_GOODS = "buy_npc_shop_goods", -- 购买NPC商店商品
-
- -- 战盟相关
- UNION_JOIN = "union_join", -- 加入战盟
- UNION_LEAVE = "union_leave", -- 离开战盟
- UNION_DONATE = "union_donate", -- 战盟捐献
- UNION_CREATE = "union_create", -- 创建战盟
- UNION_CLOSE = "union_close", -- 解散战盟
- UNION_ADD_MEMBER = "union_add_member", -- 战盟添加成员
- UNION_DEL_MEMBER = "union_del_member", -- 战盟删除成员
-
- -- 地图相关
- MAP_ENTER = "map_enter", -- 进入地图
- MAP_LEAVE = "map_leave", -- 离开地图
- MAP_LINE_ENTER = "map_line_enter", -- 进入地图分线
- MAP_CREATE = "map_create", -- 创建地图
- MAP_DESTROY = "map_destroy", -- 销毁地图
- MAP_MONSTER_DIE = "map_monster_die", -- 地图怪物死亡
- MAP_MONSTER_REMOVE = "map_monster_remove", -- 地图怪物移除
-
- -- 特殊系统
- VIP_UPGRADE = "vip_upgrade", -- VIP升级
- PRIVILEGE_ACTIVATE = "privilege_activate", -- 激活特权
- WINGS_UPGRADE = "wings_upgrade", -- 翅膀升级
- ANGEL_GRAIL_UPGRADE = "angel_grail_upgrade", -- 天使圣杯升级
- COMBO_SKILL_ACTIVATE = "combo_skill_activate", -- 激活连击技能
- TRIPLE_INCOME_OPEN = "triple_income_open", -- 开启三倍收益
- MOUNT_UPGRADE = "mount_upgrade", -- 坐骑升级
- PET_CALL = "pet_call", -- 召唤宠物
- BUFF_EFFECT = "buff_effect", -- Buff效果
- BUFF_LOSE = "buff_lose", -- Buff消失
- SKILL_RELEASE = "skill_release", -- 释放技能
- SKILL_REMOVE = "skill_remove", -- 移除技能
- COMBO_SET = "combo_set", -- 设置连击
-
- -- 心跳相关
- ROLE_SECOND_HEART = "role_second_heart", -- 角色1秒心跳
- ROLE_3SECOND_HEART = "role_3second_heart", -- 角色3秒心跳
- ROLE_5SECOND_HEART = "role_5second_heart", -- 角色5秒心跳
- ROLE_10SECOND_HEART = "role_10second_heart", -- 角色10秒心跳
- ROLE_MINUTE_HEART = "role_minute_heart", -- 角色分钟心跳
- ROLE_HOUR_HEART = "role_hour_heart", -- 角色小时心跳
- MAP_SECOND_HEART = "map_second_heart", -- 地图1秒心跳
- MAP_3SECOND_HEART = "map_3second_heart", -- 地图3秒心跳
- MAP_5SECOND_HEART = "map_5second_heart", -- 地图5秒心跳
-
- -- 其他
- PLAYER_ENTER_VIEW = "player_enter_view", -- 玩家进入视野
- ATTRIBUTE_UPDATE = "attribute_update", -- 属性更新
- TRANSMIT = "transmit", -- 传送
- SCENE_ENTER = "scene_enter", -- 进入场景
- OFFLINE_EXP = "offline_exp", -- 离线经验
- STALL_INFO = "stall_info", -- 摆摊信息
- DEPLOY_ATTR_POINT = "deploy_attr_point", -- 加点
- MONSTER_INIT = "monster_init", -- 怪物初始化
- SHOW_REWARD_PANEL = "show_reward_panel", -- 显示奖励面板
- }
- -- 钩子回调函数存储
- local hookCallbacks = {}
- -- 导出钩子类型
- GameHookManager.HookType = HookType
- --- 注册钩子回调函数
- --- @param hookType string 钩子类型
- --- @param callback function 回调函数
- --- @param priority number 优先级(数字越小优先级越高,默认100)
- function GameHookManager.RegisterHook(hookType, callback, priority)
- if not hookCallbacks[hookType] then
- hookCallbacks[hookType] = {}
- end
-
- priority = priority or 100
-
- table.insert(hookCallbacks[hookType], {
- callback = callback,
- priority = priority
- })
-
- -- 按优先级排序
- table.sort(hookCallbacks[hookType], function(a, b)
- return a.priority < b.priority
- end)
-
- jprint("注册钩子:", hookType, "优先级:", priority)
- end
- --- 触发钩子
- --- @param hookType string 钩子类型
- --- @param ... any 传递给回调函数的参数
- function GameHookManager.TriggerHook(hookType, ...)
- if not hookCallbacks[hookType] then
- return
- end
-
- local args = {...}
-
- for _, hook in ipairs(hookCallbacks[hookType]) do
- local success, result = xpcall(hook.callback, debug.traceback, table.unpack(args))
- if not success then
- jprint("钩子执行异常:", hookType, "错误:", result)
- end
- end
- end
- --- 移除钩子回调
- --- @param hookType string 钩子类型
- --- @param callback function 要移除的回调函数
- function GameHookManager.UnregisterHook(hookType, callback)
- if not hookCallbacks[hookType] then
- return
- end
-
- for i = #hookCallbacks[hookType], 1, -1 do
- if hookCallbacks[hookType][i].callback == callback then
- table.remove(hookCallbacks[hookType], i)
- jprint("移除钩子:", hookType)
- break
- end
- end
- end
- --- 获取钩子回调数量
- --- @param hookType string 钩子类型
- --- @return number 回调数量
- function GameHookManager.GetHookCount(hookType)
- if not hookCallbacks[hookType] then
- return 0
- end
- return #hookCallbacks[hookType]
- end
- --- 清空指定类型的钩子
- --- @param hookType string 钩子类型
- function GameHookManager.ClearHooks(hookType)
- if hookType then
- hookCallbacks[hookType] = nil
- jprint("清空钩子:", hookType)
- else
- hookCallbacks = {}
- jprint("清空所有钩子")
- end
- end
- --- 初始化钩子管理器
- function GameHookManager.Init()
- jprint("游戏钩子管理器初始化完成")
- jprint("支持的钩子类型数量:", table.getn(table.keys(HookType)))
- end
- -- 导出钩子类型常量
- GameHookManager.HookType = HookType
|