📖 表说明

游戏事件条件表定义了游戏事件的触发条件。这个表用于控制事件的条件触发机制。

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

📊 表结构

字段名 数据类型 描述
eventEntrytinyint UNSIGNED事件ID(主键)
condition_idint UNSIGNED条件ID(主键)
req_numfloat需求数量
max_world_state_fieldsmallint UNSIGNED最大世界状态字段
done_world_state_fieldsmallint UNSIGNED完成世界状态字段
descriptionvarchar(25)条件描述

主键: eventEntry + condition_id(联合主键)

🔍 重要字段详解

condition_id (条件类型)

条件类型ID,与WorldState.dbc或其他条件系统关联。决定条件的检测类型(如击杀数量、收集物品、世界状态值等)。取值为 0~N,具体含义需查阅条件系统定义。

req_num (需求数量)

条件完成所需的目标数值。例如:req_num=100表示需要击杀100个目标。当世界状态字段达到此值时条件完成。

max_world_state_field & done_world_state_field

世界状态字段ID,用于追踪条件进度。max_world_state_field定义进度上限显示值,done_world_state_field标记条件完成状态。两者共同控制客户端进度条的显示。

💡 实战案例

查询某事件的所有条件配置:
SELECT gec.eventEntry, gec.condition_id, gec.req_num,
       gec.max_world_state_field, gec.done_world_state_field,
       gec.description
FROM game_event_condition gec
WHERE gec.eventEntry = 1
ORDER BY gec.condition_id;
为事件添加完成条件(收集100个物品):
INSERT INTO game_event_condition
  (eventEntry, condition_id, req_num,
   max_world_state_field, done_world_state_field, description)
VALUES (10, 1, 100, 2500, 2501, '收集100个节日物品');

❓ 常见问题

Q: 事件条件设置了但进度不显示?

A: 检查max_world_state_field和done_world_state_field是否正确设置。这两个字段需与客户端WorldState.dbc中的状态ID对应,否则客户端UI无法显示进度。

Q: 条件中req_num为0表示什么?

A: req_num=0通常表示该条件仅检测状态变化而非数量积累,条件是否满足由世界状态字段的值直接决定。