载具系统介绍
TrinityCore中的载具系统是一个复杂的机制,允许单位(玩家或生物)成为载具,其他玩家或生物可以乘坐。这个系统主要用于飞行坐骑、战车、船只等载具单位。
系统架构
载具系统主要由以下几个核心组件构成:
1. Vehicle类
Vehicle类是载具系统的核心,它管理着载具的所有功能,包括乘客管理、座位分配、配件安装等。
2. 座位系统(VehicleSeat)
每个载具都有多个座位,座位信息存储在 VehicleSeat.db2
文件中。座位可以有不同的属性,如是否可以控制载具、是否可以进入或退出等。
3. 载具模板(VehicleEntry)
载具的基本信息存储在 Vehicle.db2
文件中,包括载具的标志、座位ID等。
核心功能
乘客管理
载具系统支持乘客的进入和退出:
- 添加乘客:通过
AddVehiclePassenger
方法,可以将单位添加为载具的乘客。系统会根据座位ID或自动分配座位。 - 移除乘客:通过
RemovePassenger
方法,可以从载具中移除乘客。 - 座位管理:系统支持多个座位,每个座位可以有不同的功能和权限。
配件系统
载具可以安装配件(Accessories),这些配件通常是与载具绑定的NPC:
- 安装配件:使用
InstallAccessory
方法安装配件到指定座位。 - 自动安装:通过
InstallAllAccessories
方法自动安装所有预定义的配件。
状态管理
载具有三种状态:
STATUS_NONE
:初始状态STATUS_INSTALLED
:已安装状态STATUS_UNINSTALLING
:正在卸载状态
技术实现要点
1. 事件驱动的乘客进入机制
乘客进入载具不是立即完成的,而是通过 VehicleJoinEvent
事件异步处理。这样可以确保在复杂情况下(如载具正在卸载时)能够正确处理。
2. 位置同步
载具系统使用 TransportBase
类来处理乘客的位置同步,确保乘客与载具的相对位置正确。
3. 权限和控制
座位可以有不同的权限设置,如是否可以控制载具、是否可以进入/退出等。
4. 免疫系统
载具可以应用各种法术免疫,特别是机械类载具通常对治疗法术免疫。
数据库结构
载具系统涉及多个数据表:
vehicle_template
- 载具模板数据vehicle_accessory
- 载具配件数据vehicle_seat_addon
- 座位附加数据
DBC文件:
Vehicle.db2
- 载具基础数据VehicleSeat.db2
- 座位数据
使用场景
载具系统被广泛应用于:
- 飞行坐骑
- 战斗载具(如攻城坦克)
- 传送类法术(如投石车)
- 特殊坐骑(如乌龟坐骑)
特殊处理
- 重力控制:某些座位可以禁用乘客的重力
- 不可交互性:乘客可以被设置为不可交互状态
- 控制权限:某些座位允许乘客控制载具的移动