Advertisement
painz

(Pawn) Engine system - Bit Flags

Mar 27th, 2014
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 4.64 KB | None | 0 0
  1. /*
  2.  
  3.     Engine system
  4.  
  5.     Este sistema foi desenvolvido não só
  6.     para uso dos interessados, como também
  7.     a fim de tornar ainda mais claro o uso de
  8.     Bit Flags.
  9.  
  10.     Flags:
  11.         - Motor
  12.         - Faróis
  13.         - Capô
  14.         - Porta-malas
  15.  
  16.    
  17.     Créditos:
  18.         - zPain
  19.         - Slice
  20.         - Rockfire
  21.  
  22. */
  23.  
  24. #include <a_samp>
  25.  
  26.  
  27.  
  28. enum E_VEHICLE_FLAGS
  29. {
  30.     FLAG_VEHICLE_BOOT   = 0b1,
  31.     FLAG_VEHICLE_BONNET = 0b10,
  32.     FLAG_VEHICLE_LIGHTS = 0b100,
  33.     FLAG_VEHICLE_ENGINE = 0b1000
  34. }
  35.  
  36. new E_VEHICLE_FLAGS:g_vFlags[MAX_VEHICLES];
  37.  
  38.  
  39.  
  40.  
  41.  
  42. // Public functions
  43. public OnFilterScriptInit() {
  44.  
  45.     ManualVehicleEngineAndLights();
  46.     return true;
  47. }
  48.  
  49.  
  50.  
  51. public OnVehicleSpawn(vehicleid) {
  52.  
  53.     // Unset em todas as flags
  54.     g_vFlags[vehicleid] = E_VEHICLE_FLAGS:0;
  55.     return true;
  56. }
  57.  
  58.  
  59.  
  60. public OnPlayerStateChange(playerid, newstate, oldstate) {
  61.  
  62.     if(newstate == PLAYER_STATE_DRIVER) {
  63.  
  64.         SendClientMessage(playerid, 0xffa500ff, "Informações do veículo:");
  65.  
  66.         SendClientMessage(playerid, 0xffa500ff, " 1. Para ligar/desligar o motor, tecle LALT.");
  67.         SendClientMessage(playerid, 0xffa500ff, " 2. Para acender/apagar os faróis, tecle LCTRL.");
  68.         SendClientMessage(playerid, 0xffa500ff, " 3. Para abrir/fechar o capô, tecle Y.");
  69.         SendClientMessage(playerid, 0xffa500ff, " 4. Para abrir/fechar o porta-malas, tecle N.");
  70.     }
  71.     return true;
  72. }
  73.  
  74.  
  75.  
  76. public OnPlayerCommandText(playerid, cmdtext[]) {
  77.  
  78.     if(cmdtext[1] == 'v') {
  79.         if(IsPlayerAdmin(playerid)) {
  80.             if(cmdtext[3]) {
  81.                 static Float:px, Float:py, Float:pz, Float:pa;
  82.  
  83.                 GetPlayerPos(playerid, px, py, pz);
  84.                 GetPlayerFacingAngle(playerid, pa);
  85.  
  86.                 CreateVehicle(strval(cmdtext[3]), px, py, pz, pa, random(255), random(255), -1);
  87.                 return true;
  88.             }
  89.         }
  90.     }
  91.  
  92.     return false;
  93. }
  94.  
  95.  
  96.  
  97. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
  98.  
  99.     if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
  100.  
  101.         static
  102.             engine,
  103.             lights,
  104.             alarm,
  105.             doors,
  106.             bonnet,
  107.             boot,
  108.             objective,
  109.             vehicleid;
  110.  
  111.         vehicleid = GetPlayerVehicleID(playerid);
  112.         GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  113.  
  114.         if(newkeys & KEY_ACTION) {
  115.             // Ligar/desligar motor
  116.             // Ou seja, se a flag estiver ativa, desativa-a, e vice-versa.
  117.             g_vFlags[vehicleid] ^= FLAG_VEHICLE_ENGINE;
  118.  
  119.             // Uso de !!
  120.             // Converte INTEGER em BOOLEAN
  121.             SetVehicleParamsEx(vehicleid, !!(g_vFlags[vehicleid] & FLAG_VEHICLE_ENGINE), lights, alarm, doors, bonnet, boot, objective);
  122.  
  123.             // Verificação
  124.             if(g_vFlags[vehicleid] & FLAG_VEHICLE_ENGINE)
  125.                 SendClientMessage(playerid, 0x32cd32ff, "** Motor LIGADO.");
  126.             else
  127.                 SendClientMessage(playerid, 0xff0000ff, "** Motor DESLIGADO.");
  128.         }
  129.         else if(newkeys & KEY_FIRE) {
  130.  
  131.             g_vFlags[vehicleid] ^= FLAG_VEHICLE_LIGHTS;
  132.             SetVehicleParamsEx(vehicleid, engine, !!(g_vFlags[vehicleid] & FLAG_VEHICLE_LIGHTS), alarm, doors, bonnet, boot, objective);
  133.  
  134.             if(g_vFlags[vehicleid] & FLAG_VEHICLE_LIGHTS) {
  135.  
  136.                 SendClientMessage(playerid, 0x32cd32ff, "** Faróis ACESOS.");
  137.             }
  138.             else {
  139.                 SendClientMessage(playerid, 0xff0000ff, "** Faróis APAGADOS.");
  140.             }
  141.         }
  142.         else if(newkeys & KEY_YES) {
  143.  
  144.             g_vFlags[vehicleid] ^= FLAG_VEHICLE_BONNET;
  145.             SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, !!(g_vFlags[vehicleid] & FLAG_VEHICLE_BONNET), boot, objective);
  146.  
  147.             if(g_vFlags[vehicleid] & FLAG_VEHICLE_BONNET) {
  148.  
  149.                 SendClientMessage(playerid, 0x32cd32ff, "** Capô ABERTO.");
  150.             }
  151.             else {
  152.  
  153.                 SendClientMessage(playerid, 0xff0000ff, "** Capô FECHADO.");
  154.             }
  155.         }
  156.         else if(newkeys & KEY_NO) {
  157.  
  158.             g_vFlags[vehicleid] ^= FLAG_VEHICLE_BOOT;
  159.             SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, !!(g_vFlags[vehicleid] & FLAG_VEHICLE_BOOT), objective);
  160.  
  161.             if(g_vFlags[vehicleid] & FLAG_VEHICLE_BOOT) {
  162.  
  163.                 SendClientMessage(playerid, 0x32cd32ff, "** Porta-malas ABERTO.");
  164.             }
  165.             else {
  166.  
  167.                 SendClientMessage(playerid, 0xff0000ff, "** Porta-malas FECHADO.");
  168.             }
  169.         }
  170.  
  171.     }
  172.     return true;
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement