表概述

vehicle_accessory表与vehicle_template_accessory表配合使用,不同之处在于本表按生物实例GUID配置乘客,而vehicle_template_accessory按生物模板entry配置。

主键为 (guid, seat_id),guid为世界中具体生物实例的GUID,seat_id为VehicleSeat.dbc中的座位编号。summontype定义召唤类型,summontimer控制召唤计时。

表结构

字段名数据类型默认值说明
guidINT UNSIGNED0生物实例GUID(主键,对应creature.guid)
accessory_entryINT UNSIGNED0乘客生物模板entry
seat_idTINYINT0VehicleSeat.dbc座位ID(主键)
minionTINYINT UNSIGNED01=视为仆从
descriptionTEXTNOT NULL乘客描述
summontypeTINYINT UNSIGNED6召唤类型(TempSummonType枚举)
summontimerINT UNSIGNED30000召唤计时(毫秒)

重要字段详解

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无实际作用,乘客存在直到手动销毁或载具死亡。