Pular para o conteúdo principal

Light States

nota

Os estados leves são usados por nativos como GetVehicleDamageStatus e UpdateVehicleDamageStatus.

nota

As luzes dos veículos com 2 rodas (e portanto com 2 luzes) não podem ser alteradas.

nota

As duas luzes traseiras de um veículo não podem ser trocadas separadamente.

Qual bit armazena o quê?

Os danos de todas as luzes serão salvos juntos em 1 byte (que equivale a 8 bits). Cada bit armazena se a luz correspondente está quebrada (valor 1) ou não (valor 0).

  • O primeiro bit armazena o estado da luz frontal esquerda.
  • O terceiro bit armazena o estado da luz frontal direita.
  • O décimo primeiro bit armazena o estado das luzes traseiras.
  • O resto dos bits estão vazios.

Observe que os bits são contados de trás para frente, então o primeiro bit é o bit mais à direita.


Exemplo

O código a seguir informa que ambas as luzes dianteiras estão quebradas e as traseiras não:

0000 0101

No entanto, SA-MP retorna um número decimal, então você deve primeiro convertê-lo em um número binário para obter um resultado como o acima. O que SA-MP retornaria dado o exemplo acima é este:

5


Tabela de informações

Aqui está uma representação visual dos estados de luz. Veículo visto de cima para baixo, sendo os valores superiores a frente do veículo e os valores inferiores a traseira do veículo.

Lenda:

o - enabled light
x - disabled light

0: (0000 0000)

    o-o
| |
o-o

1: (0000 0001)

    x-o
| |
o-o

4: (0000 0100)

    o-x
| |
o-o

5: (0000 0101)

    x-x
| |
o-o

64: (0100 0000)

    o-o
| |
x-x

65: (0100 0001)

    x-o
| |
x-x

68: (0100 0100)

    o-x
| |
x-x

69: (0100 0101)

    x-x
| |
x-x

Outros valores não listados aqui podem alterar as luzes, mas são apenas repetições de outros valores (por exemplo, 15 tem o mesmo resultado que 5). Depois de 255 os valores serão agrupados, 256 será definido como 0, 257 como 1 e assim por diante.


Exemplo de uso

Para desativar as duas luzes traseiras de um veículo, mantendo a dianteira inalterada:

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, doors, (lights | VEHICLE_LIGHT_STATUS:0b01000000), tires); // A parte '0b' significa que o número a seguir está em binário. Da mesma forma que '0x' indica um número hexadecimal.

Veja também