📖 表说明
游戏事件表定义了游戏中的周期性事件。这个表控制事件的时间安排、持续时间、重复周期等。例如:节日活动、季节性事件、周末活动等。
数据来源: 本文档基于AzerothCore官方Wiki和官方数据表借鉴.sql编写。
📊 表结构
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| eventEntry | tinyint UNSIGNED | 事件ID,主键 |
| start_time | timestamp | 开始时间 |
| end_time | timestamp | 结束时间 |
| occurence | bigint UNSIGNED | 重复周期(分钟) |
| length | bigint UNSIGNED | 持续时间(分钟) |
| holiday | int UNSIGNED | 客户端节日ID |
| holidayStage | tinyint UNSIGNED | 节日阶段 |
| description | varchar(255) | 事件描述 |
| world_event | tinyint UNSIGNED | 是否为世界事件 |
| announce | tinyint UNSIGNED | 是否公告 |
| menuid | tinyint 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小时(整个周末)。