📖 表说明

游戏事件表定义了游戏中的周期性事件。这个表控制事件的时间安排、持续时间、重复周期等。例如:节日活动、季节性事件、周末活动等。

数据来源: 本文档基于AzerothCore官方Wiki和官方数据表借鉴.sql编写。

📊 表结构

字段名 数据类型 描述
eventEntrytinyint UNSIGNED事件ID,主键
start_timetimestamp开始时间
end_timetimestamp结束时间
occurencebigint UNSIGNED重复周期(分钟)
lengthbigint UNSIGNED持续时间(分钟)
holidayint UNSIGNED客户端节日ID
holidayStagetinyint UNSIGNED节日阶段
descriptionvarchar(255)事件描述
world_eventtinyint UNSIGNED是否为世界事件
announcetinyint UNSIGNED是否公告
menuidtinyint UNSIGNED菜单ID

主键: eventEntry

💡 使用建议

建议:

  • occurence和length单位为分钟
  • world_event=1表示世界事件
  • announce控制是否在事件开始时公告

🔍 重要字段详解

eventEntry (事件ID)

主键,事件唯一标识符。取值范围 0~255。正数ID用于普通游戏事件(如节日活动),部分核心事件使用固定ID,自定义事件建议使用较高ID段(如100+)避免冲突。

occurence & length (周期与持续时间)

两个字段单位均为分钟。occurence定义事件重复间隔(如1440=每天一次),length定义每次事件持续时长(如1440=持续一天)。start_time + length不应超过end_time。

holiday (节日系统)

关联客户端Holidays.dbc中的节日ID。设为 0 表示非节日事件。常见节日ID:1=春节、2=情人节、3=复活节、4=儿童周、5=仲夏火焰节等。正确设置holiday可激活客户端节日UI。

💡 实战案例

查询当前所有激活中的游戏事件:
SELECT eventEntry, description, start_time, end_time,
       occurence, length, holiday
FROM game_event
WHERE NOW() BETWEEN start_time AND end_time
  AND world_event = 0
ORDER BY start_time;
创建一个每周周末双倍经验活动(周六日持续48小时):
INSERT INTO game_event (eventEntry, start_time, end_time,
  occurence, length, holiday, description, world_event, announce)
VALUES (100, '2024-01-06 00:00:00', '2030-12-31 23:59:59',
  10080, 2880, 0, '周末双倍经验活动', 0, 1);

❓ 常见问题

Q: 事件设置了但不在游戏中触发,如何排查?

A: 检查以下几点:(1) start_time是否已过,(2) end_time是否未到,(3) occurence周期是否设置正确,(4) world_event是否正确(0=普通事件,1=世界事件),(5) 事件关联的子表(game_event_creature等)是否正确配置。

Q: occurence和length的关系是什么?

A: occurence是事件重复间隔(多久触发一次),length是每次触发后持续多久。例如:occurence=10080(一周),length=2880(48小时)表示每周触发一次,每次持续48小时(整个周末)。