面板状态
备注
面板状态信息通过GetVehicleDamageStatus和UpdateVehicleDamageStatus等原生函数进行操作。
半字节位域解析
- 第一个半字节:存储汽车的左前面板状态,或飞机的**(左)引擎**状态
- 第二个半字节:存储汽车的右前面板状态,或飞机的**(右)引擎**状态
- 第三个半字节:存储汽车的左后面板状态,或飞机的方向舵(位于垂直尾翼上)状态
- 第四个半字节:存储汽车的右后面板状态,或飞机的升降舵(位于尾部)状态
- 第五个半字节:存储汽车的挡风玻璃状态,或飞机的副翼(位于机翼)状态
- 第六个半字节:存储汽车的前保险杠状态
- 第七个半字节:存储汽车的后保险杠状态
注意并非所有车辆都支持上述所有面板部件。飞机部件的损坏程度会显著影响飞行操控性,受损部件会冒出黑烟。
多数面板支持 4 种状态:完好(值 0)、压损(值 1)、松动(值 2)、脱落(值 3)。压损和松动状态存在显示异常(当从松动状态转为压损时,面板会同时显示松动和压损效果,需重新载入车辆流才能正常显示)。建议修复方法:先重置该面板的损坏状态,再应用新状态。此方法也可实现行驶中显示松动但无物理压痕的效果(直接从 0 设为 2,而非 0→1→2)。
当前仅挡风玻璃状态可被正确读取。设置该状态会更新服务器数据,但不会产生物理变化。
注意半字节从右向左计数,第一个半字节是最右侧的位域。
示例说明
以下二进制代码表示汽车前后保险杠已脱落:
00000011 00110000 00000000 00000000
由于 SA-MP 返回十进制数值,需先转换为二进制进行分析。上述示例对应的十进制返回值为:
53477376
应用实例
移除汽车前保险杠并保持其他部件状态不变:
new
VEHICLE_PANEL_STATUS:panels,
VEHICLE_DOOR_STATUS:doors,
VEHICLE_LIGHT_STATUS:lights,
VEHICLE_TIRE_STATUS:tires;
GetVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
UpdateVehicleDamageStatus(vehicleid, (panels | VEHICLE_PANEL_STATUS:0b00000000001100000000000000000000), doors, lights, tires); // '0b'前缀表示二进制数值,用法类似'0x'表示十六进制