跳到主要内容

面板状态

备注

面板状态信息通过GetVehicleDamageStatusUpdateVehicleDamageStatus等原生函数进行操作。

半字节位域解析

  • 第一个半字节:存储汽车的左前面板状态,或飞机的**(左)引擎**状态
  • 第二个半字节:存储汽车的右前面板状态,或飞机的**(右)引擎**状态
  • 第三个半字节:存储汽车的左后面板状态,或飞机的方向舵(位于垂直尾翼上)​状态
  • 第四个半字节:存储汽车的右后面板状态,或飞机的升降舵(位于尾部)​状态
  • 第五个半字节:存储汽车的挡风玻璃状态,或飞机的副翼(位于机翼)​状态
  • 第六个半字节:存储汽车的前保险杠状态
  • 第七个半字节:存储汽车的后保险杠状态

注意并非所有车辆都支持上述所有面板部件。飞机部件的损坏程度会显著影响飞行操控性,受损部件会冒出黑烟。

多数面板支持 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'表示十六进制

相关阅读