📋 表概述

calendar_events 表存储玩家通过游戏内日历系统创建的活动事件。玩家可创建副本活动、团队活动、公会活动等,并邀请其他玩家参加。此表记录活动的基本信息、时间、类型和标记。

主键为 id(BIGINT类型)。活动创建者有 creator 字段记录,eventtime 和 time2 记录活动的起止时间。

📊 表结构

字段名类型默认值说明
idbigint UNSIGNED0事件唯一ID(主键)
creatorint UNSIGNED0创建者角色GUID
titlevarchar(255)''活动标题
descriptionvarchar(255)''活动描述
typetinyint UNSIGNED4活动类型
dungeonint-1关联地下城ID(-1=无关联)
eventtimeint UNSIGNED0活动开始时间(Unix时间戳)
flagsint UNSIGNED0活动标记(按位掩码)
time2int UNSIGNED0活动结束/重复时间(Unix时间戳)

🔍 重要字段详解

📅 type - 活动类型

详细说明:定义日历活动的类型。
  • 0 = 普通活动
  • 1 = 副本活动(与 dungeon 关联)
  • 2 = 团队活动
  • 3 = 公会活动
  • 4 = 竞技场活动

🏷️ flags - 事件标记

详细说明:按位标记,控制活动的属性。
  • 位 0(值1)= 公会事件
  • 位 1(值2)= 有注册人/主持人
  • 位 2(值4)= 系统事件(不可编辑/删除)
  • 位 3(值8)= 假日/节日事件

⏰ eventtime / time2 - 时间范围

详细说明:两个时间戳定义活动的时间区间。
  • eventtime - 活动开始时间
  • time2 - 活动结束时间或重复设置时间
  • 两者都为Unix时间戳,使用 FROM_UNIXTIME() 查看

💡 SQL示例

示例1:查询未来的活动列表

SELECT id, title, type, dungeon, FROM_UNIXTIME(eventtime) AS start_time, FROM_UNIXTIME(time2) AS end_time FROM calendar_events WHERE eventtime > UNIX_TIMESTAMP() ORDER BY eventtime;

示例2:清理已过期的活动

DELETE FROM calendar_events WHERE time2 < UNIX_TIMESTAMP() AND flags & 4 = 0;

❓ 常见问题

Q1: 日历活动过期后会自动删除吗?
不会自动删除。系统事件(flags & 4 = 4)会保留用于历史参考,但普通活动需要手动清理。
Q2: dungeon 字段为-1是什么意思?
表示该活动不是副本/地下城活动。仅当 type=1(副本活动)时 dungeon 字段才会有有效的副本ID。