GameObject 常见类型详解 -- 陷阱(TRAP)
GAMEOBJECT_TYPE_TRAP 是 TrinityCore 中用于创建陷阱的 GameObject 类型
字段详细说明
字段索引 | 字段名称 | 数据类型 | 默认值 | 说明 | 可选值/范围 |
---|---|---|---|---|---|
data0 | open | uint32 | 0 | 触发陷阱所需的锁类型ID | 引用 Lock.db2,0表示无需钥匙 |
data1 | Unused | int32 | 0 | 未使用字段 | 0 - 65535 |
data2 | radius | uint32 | 0 | 陷阱触发半径 | 0 - 100 |
data3 | spell | uint32 | 0 | 触发的法术ID | 引用 Spell.db2 |
data4 | charges | uint32 | 1 | 可触发次数 | 0 - 65535 |
data5 | cooldown | uint32 | 0 | 冷却时间(秒) | 0 - 65535 |
data6 | autoClose | uint32 | 0 | 自动关闭时间(毫秒) | 0 - 2147483647 |
data7 | startDelay | uint32 | 0 | 启动延迟(秒) | 0 - 65535 |
data8 | serverOnly | enum | false | 是否仅服务器端 | 0 = 否, 1 = 是 |
data9 | stealthed | enum | false | 是否潜行状态 | 0 = 否, 1 = 是 |
data10 | GiganticAOI | enum | false | 是否具有巨大活动范围 | 0 = 否, 1 = 是 |
data11 | stealthAffected | enum | false | 是否受潜行影响 | 0 = 否, 1 = 是 |
data12 | openTextID | uint32 | 0 | 触发时显示的文本ID | 引用 BroadcastText.db2 |
data13 | closeTextID | uint32 | 0 | 关闭时显示的文本ID | 引用 BroadcastText.db2 |
data14 | IgnoreTotems | enum | false | 是否忽略图腾 | 0 = 否, 1 = 是 |
data15 | conditionID1 | uint32 | 0 | 触发条件ID | 引用 PlayerCondition.db2 |
data16 | playerCast | enum | false | 是否由玩家施放 | 0 = 否, 1 = 是 |
data17 | SummonerTriggered | enum | false | 是否由召唤者触发 | 0 = 否, 1 = 是 |
data18 | requireLOS | enum | false | 是否需要视线 | 0 = 否, 1 = 是 |
data19 | TriggerCondition | uint32 | 0 | 触发条件ID | 引用 PlayerCondition.db2 |
data20 | Checkallunits | enum | false | 是否检查所有单位 | 0 = 否(仅检查玩家), 1 = 是(检查所有单位) |
data21 | InteractRadiusOverride | uint32 | 0 | 交互半径覆盖值(码*100) | 0 - 2147483647 |
核心功能字段
字段 | 说明 |
---|---|
spell | 陷阱触发时施放的法术ID,引用 Spell.db2 表 |
radius | 陷阱的触发半径,单位为码 |
charges | 陷阱可触发的次数,0表示无限次数 |
时间控制字段
字段 | 说明 |
---|---|
cooldown | 陷阱触发后的冷却时间(秒) |
startDelay | 陷阱启动前的延迟时间(秒) |
autoClose | 陷阱自动关闭的时间(毫秒) |
访问控制字段
字段 | 说明 |
---|---|
open | 定义触发陷阱所需的钥匙或条件,引用 Lock.db2 表中的记录 |
conditionID1 | 触发陷阱前必须满足的条件,引用 PlayerCondition.db2 表 |
TriggerCondition | 另一个触发条件字段,功能与conditionID1类似 |
隐身和检测字段
字段 | 说明 |
---|---|
stealthed | 陷阱是否处于潜行状态 |
stealthAffected | 陷阱是否受潜行状态影响 |
IgnoreTotems | 陷阱是否忽略图腾的影响 |
交互机制字段
字段 | 说明 |
---|---|
requireLOS | 控制是否需要视线接触才能触发陷阱 |
Checkallunits | 控制陷阱是否检查所有单位(包括NPC)或仅检查玩家 |
playerCast | 控制陷阱是否由玩家施放 |
视觉效果字段
字段 | 说明 |
---|---|
openTextID | 陷阱触发时显示给玩家的文本消息ID |
closeTextID | 陷阱关闭时显示给玩家的文本消息ID |
serverOnly | 控制陷阱是否仅在服务器端存在,客户端不可见 |
性能优化字段
字段 | 说明 |
---|---|
GiganticAOI | 扩大陷阱的活动范围,使远处玩家也能检测到 |
InteractRadiusOverride | 自定义陷阱的交互距离,覆盖默认值 |
SummonerTriggered | 控制陷阱是否由召唤者触发 |
注意事项
法术系统集成: spell字段是陷阱的核心,它连接了游戏的法术系统
触发范围: radius字段定义了陷阱的有效范围
使用次数: charges字段控制陷阱的可使用次数,0表示无限使用
冷却机制: cooldown字段可以防止陷阱被频繁触发
隐身机制: stealthed和stealthAffected字段与潜行系统相关
检测机制: Checkallunits字段控制陷阱检测目标的范围
性能考虑: GiganticAOI会影响服务器性能,应谨慎使用
使用示例
-- 一个基本的陷阱,触发时施放法术,有3次使用次数
INSERT INTO `gameobject_template`
(entry, [type](file://c:\TrinityCore\dep\protobuf\src\google\protobuf\descriptor.h#L797-L797), displayId, [name](file://c:\TrinityCore\dep\g3dlite\include\G3D\XML.h#L166-L168), data2, data3, data4)
VALUES (623456, 6, 6234, '基本陷阱', 5, 12345, 3);
-- 一个有延迟触发的陷阱,触发后有冷却时间
INSERT INTO `gameobject_template`
(entry, [type](file://c:\TrinityCore\dep\protobuf\src\google\protobuf\descriptor.h#L797-L797), displayId, [name](file://c:\TrinityCore\dep\g3dlite\include\G3D\XML.h#L166-L168), data2, data3, data5, data7)
VALUES (623457, 6, 6235, '延迟陷阱', 3, 12346, 10, 2);
-- 一个高级陷阱,需要条件才能触发,有触发文本
INSERT INTO `gameobject_template`
(entry, [type](file://c:\TrinityCore\dep\protobuf\src\google\protobuf\descriptor.h#L797-L797), displayId, [name](file://c:\TrinityCore\dep\g3dlite\include\G3D\XML.h#L166-L168), data2, data3, data12, data15)
VALUES (623458, 6, 6236, '高级陷阱', 4, 12347, 200, 300);