GameObject 常见类型详解 -- 任务给予对象(QUESTGIVER)
GAMEOBJECT_TYPE_QUESTGIVER 是 TrinityCore 中用于创建任务给予对象的 GameObject 类型
字段详细说明
字段索引 | 字段名称 | 数据类型 | 默认值 | 说明 | 可选值/范围 |
---|---|---|---|---|---|
data0 | open | uint32 | 0 | 与任务给予者交互所需的锁类型ID | 引用Lock.db2,0表示无需钥匙 |
data1 | questGiver | uint32 | 0 | 任务给予者ID | 引用 QuestGiver.db2 |
data2 | pageMaterial | uint32 | 0 | 页面材质ID | 引用 PageTextMaterial.db2 |
data3 | gossipID | uint32 | 0 | 对话ID | 引用 Gossip.db2 |
data4 | customAnim | uint32 | 0 | 自定义动画 | 0 - 4 |
data5 | noDamageImmune | enum | false | 是否对伤害免疫 | 0 = 否, 1 = 是 |
data6 | openTextID | uint32 | 0 | 交互时显示的文本ID | 引用 BroadcastText.db2 |
data7 | requireLOS | enum | false | 是否需要视线 | 0 = 否, 1 = 是 |
data8 | allowMounted | enum | false | 是否允许骑乘状态下交互 | 0 = 否, 1 = 是 |
data9 | GiganticAOI | enum | false | 是否具有巨大活动范围 | 0 = 否, 1 = 是 |
data10 | conditionID1 | uint32 | 0 | 使用条件ID | 引用 PlayerCondition.db2 |
data11 | NeverUsableWhileMounted | enum | false | 是否禁止骑乘时使用 | 0 = 否, 1 = 是 |
data12 | InteractRadiusOverride | uint32 | 0 | 交互半径覆盖值(码*100) | 0 - 2147483647 |
核心功能字段
字段 | 说明 |
---|---|
questGiver | 指向 QuestGiver.db2 表中的记录,定义了该任务给予者提供的任务列表 |
gossipID | 指向 Gossip.db2 表中的记录,定义了与该任务给予者交互时显示的对话选项 |
访问控制字段
字段 | 说明 |
---|---|
open | 定义与任务给予者交互所需的钥匙或条件,引用 Lock.db2 表中的记录 |
conditionID1 | 定义玩家使用任务给予者之前必须满足的条件,引用 PlayerCondition.db2 表 |
交互机制字段
字段 | 说明 |
---|---|
requireLOS | 控制玩家是否需要与任务给予者保持视线接触才能交互 |
allowMounted | 控制玩家是否可以在骑乘状态下与任务给予者交互 |
NeverUsableWhileMounted | 强制禁止玩家在骑乘状态下使用,优先级高于allowMounted |
视觉效果字段
字段 | 说明 |
---|---|
customAnim | 定义任务给予者的自定义动画,值范围0-4 |
pageMaterial | 指向PageTextMaterial.dbc表中的记录,定义任务描述页面的材质样式 |
openTextID | 交互时显示给玩家的文本消息ID,引用 BroadcastText.db2 表 |
性能优化字段
字段 | 说明 |
---|---|
GiganticAOI | 扩大任务给予者的活动范围,使远处玩家也能检测到 |
InteractRadiusOverride | 自定义任务给予者的交互距离,覆盖默认值 |
注意事项
任务系统集成: questGiver字段是任务给予对象的核心,它连接了游戏的任务系统
对话系统: gossipID允许创建复杂的对话树,提供丰富的交互体验
骑乘交互: allowMounted和NeverUsableWhileMounted字段控制骑乘状态下的交互能力
动画效果: customAnim字段可以增加视觉多样性,但仅支持0-4的有限选项
性能考虑: GiganticAOI会影响服务器性能,应谨慎使用
平衡性: 各种限制条件(open, conditionID1等)需要根据游戏难度和流程合理设置
使用示例
-- 一个基本的任务给予对象,提供任务列表
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), data1, data3)
VALUES (323456, 2, 3234, '基本任务给予者', 100, 200);
-- 一个高级任务给予对象,需要钥匙,允许骑乘交互,有自定义动画
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), data0, data1, data3, data4, data8)
VALUES (323457, 2, 3235, '高级任务给予者', 50, 101, 201, 2, 1);