vehicle_accessory 表
vehicle_accessory表定义载具实例级别的乘客配置,通过GUID绑定特定载具生物实例的副驾驶/乘员。
表概述
vehicle_accessory表与vehicle_template_accessory表配合使用,不同之处在于本表按生物实例GUID配置乘客,而vehicle_template_accessory按生物模板entry配置。
主键为 (guid, seat_id),guid为世界中具体生物实例的GUID,seat_id为VehicleSeat.dbc中的座位编号。summontype定义召唤类型,summontimer控制召唤计时。
表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| guid | INT UNSIGNED | 0 | 生物实例GUID(主键,对应creature.guid) |
| accessory_entry | INT UNSIGNED | 0 | 乘客生物模板entry |
| seat_id | TINYINT | 0 | VehicleSeat.dbc座位ID(主键) |
| minion | TINYINT UNSIGNED | 0 | 1=视为仆从 |
| description | TEXT | NOT NULL | 乘客描述 |
| summontype | TINYINT UNSIGNED | 6 | 召唤类型(TempSummonType枚举) |
| summontimer | INT UNSIGNED | 30000 | 召唤计时(毫秒) |
重要字段详解
summontype (召唤类型)
基于TempSummonType枚举,定义乘客的召唤行为:
- 6 - TEMPSUMMON_MANUAL_DESPAWN(默认,手动销毁)
- 1 - TEMPSUMMON_TIMED_OR_DEAD_DESPAWN(定时或死亡)
- 4 - TEMPSUMMON_TIMED_DESPAWN(定时销毁)
guid vs vehicle_template_accessory.entry
本表使用生物实例GUID,用于特定场景中的单个载具实例。vehicle_template_accessory使用生物模板entry,作用于所有该模板创建的载具。两者互不冲突,可同时使用。
实战案例
为特定载具实例添加炮手乘客
-- 给世界中已刷新的攻城坦克(creature guid=98765)的座位1添加炮手
INSERT INTO vehicle_accessory (guid, accessory_entry, seat_id, minion, description, summontype, summontimer)
VALUES (98765, 28769, 1, 1, '攻城坦克-炮手', 6, 30000);
查询某个生物实例的所有乘客
SELECT va.guid, ct.name AS vehicle_name, va.accessory_entry,
ct2.name AS passenger_name, va.seat_id, va.description
FROM vehicle_accessory va
LEFT JOIN creature c ON va.guid = c.guid
LEFT JOIN creature_template ct ON c.id = ct.entry
LEFT JOIN creature_template ct2 ON va.accessory_entry = ct2.entry
WHERE va.guid = 98765;
常见问题
Q: 与vehicle_template_accessory有何区别?
A: vehicle_template_accessory按生物模板(entry)批量配置,所有同类型载具都拥有乘客。vehicle_accessory按具体实例(guid)配置,只影响世界中特定的一只载具生物。
Q: summontimer何时生效?
A: 当summontype为定时类型(如4)时生效。默认summontype=6时summontimer无实际作用,乘客存在直到手动销毁或载具死亡。