--- 游戏钩子管理器 --- 集中管理所有游戏触发检测点,方便后期增加自有逻辑 --- 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