CODICE
new panels, doors, lights, tires;
GetVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
lights = encode_lights(0,0 ,0,0);
UpdateVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
Questo codice per spegnere le luci in ordine:
1 Crea quattro variabili nelle quali memorizzare l'attuale stato dei componenti dela macchina.
2 Alle variabili create getta l'attuale stato di ogni componente della macchina.
3 Alla variabile lights da come valore 4 valori codificati che rappresentano quali luci sono rotte/intere, infatti vengono codificati tramite la funzione encode_lights e se sono 0 significa che sono rotte altrimenti sono intere.
4 Aggiorna lo stato dei componenti della macchina in base alle variabili gettate prima e alla variabile lights codificata.
CODICE
stock encode_lights(light1, light2, light3, light4)
{
return light1 | (light2 << 1) | (light3 << 2) | (light4 << 3);
}
Mentre la funzione encode_lights funziona in questo modo:
nella funzione ci sono 4 variabili (interi), ognuna delle quali rappresenta lo stato di una luce del veicolo.
La funzione returna un nuovo valore seguendo questi calcoli:
- Prende il valore della prima variabile light1.
- Esegue 1 shift a sinistra della variabile light2, quindi si ha lo stesso risultato moltiplicando il valore per 2.
- Esegue 2 shift a sinistra della variabile light3, quindi si ha lo stesso risultato moltiplicando il valore due volte per 2.
- Esegue 3 shift a sinistra della variabile light4, quindi si ha lo stesso risultato moltiplicando il valore tre volte per 2.
- Tramite l'operatore Or (Bitwise) il valore da returnare è costituito da tutti i bit messi su on nei 4 valori (considerando le operazioni eseguite prima)
Infatti se ad esempio facciamo encode_lights(1, 1, 1, 1);
il risultato sarà:
1 | 1 << 1 | 1 << 2 | 1 << 3 =
= 1 | 10 | 100 | 1000 = // qui calcolo i numeri in bit e in questo caso con i numeri interi sono 1 | 2 | 4 | 8...
= 1111 // infatti a partire da destra nel primo valore è su on il primo bit, nel secondo il secondo bit, nel terzo il terzo bit e nel quarto il quarto bit. Ecco uno schema per chiarire:
CODICE
0001
0010
0100
1000
____
1111
Quindi viene returnato in bit il valore 1111 che equivale a 15
Ecco un altro esempio per chiarire meglio:
encode_lights(1, 0, 0, 1); =
= 1 | 0 << 1 | 0 << 2 | 1 << 3 =
= 1 | 0 | 0 | 1000 =
= 1001
CODICE
0001
0000
0000
1000
____
1001
Quindi viene returnato in bit 1001, ovvero 9