Advertisement
Chip7

[FS] FilterScript Semáforo Central LV

Jul 8th, 2012
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 3.52 KB | None | 0 0
  1. /*VISITE NOSSO SITE: http://www.sampknd.com/
  2.   SAMP KND MELHOR BLOG DE SAMP DO BRASIL
  3. */
  4.  
  5. new redGreen = 1;
  6. new sinalVermelho = 0;
  7. new Float:angleSinal;
  8.  
  9. public OnPlayerUpdate(playerid)
  10. {
  11.  
  12.     if(!IsPlayerConnected(playerid)) return false;
  13.     if(IsPlayerNPC(playerid)) return true;
  14.  
  15.     /*
  16.  
  17.     ================
  18.  
  19.         0 -> 89 (norte)
  20.         90 -> 179 (leste)
  21.         180 -> 269 (sul)
  22.         270 -> 359 (oeste)
  23.  
  24.     ===============
  25.  
  26.     */
  27.  
  28.     GetPlayerFacingAngle(playerid, angleSinal);
  29.  
  30.     static bool:enviada[MAX_PLAYERS];
  31.  
  32.     // verificar se ele está dentro da área da sinaleira
  33.     if(sinalVermelho) {
  34.         GameTextForPlayer(playerid, "Sinal ~r~Vermelho", 1000, 1);
  35.     }
  36.     else {
  37.         GameTextForPlayer(playerid, "Sinal ~g~Verde", 1000, 1);
  38.     }
  39.  
  40.     if(!IsPlayerInRangeOfLight(playerid, 2042.0878, 1283.0818, 2)  && sinalVermelho && gettime() - GetPVarInt(playerid, #sinaleiraPassada) < 10 && enviada[playerid] == true) {
  41.         SendClientMessage(playerid, -1, "Voce passou com a sinaleira vermelha (ou saio da pista). Caara");
  42.         enviada[playerid] = false;
  43.     }
  44.  
  45.     if(IsPlayerInRangeOfLight(playerid, 2042.0878, 1283.0818, 2)) {
  46.         // verificar se o cara está na posição NORTE -> SUL (que é o sentido da nossa sinaleira)
  47.         if(300 > angleSinal > 160) {
  48.             // Verificar se está logo abaixo da sinaleira. Nesta parte é aconselhável você checar se a velocidade do carro está acima de 10 km/h
  49.             if(!enviada[playerid] && sinalVermelho) {
  50.                 SetPVarInt(playerid, #sinaleiraPassada, gettime());
  51.                 SendClientMessage(playerid, -1, "Sinal vermelho.");
  52.                 enviada[playerid] = true;
  53.             }
  54.         }
  55.     }
  56.     return true;
  57. }
  58.  
  59.  
  60.  
  61.  
  62. public OnTrafficLightChange()
  63. {
  64.     sinalVermelho = !!((redGreen++ - 1) % 3);
  65.     return true;
  66. }
  67.  
  68.  
  69. #define DEBUG_BRS
  70.  
  71. IsPlayerInRangeOfLight(playerid, Float:xmax, Float:ymax, sentido)
  72. {
  73.  
  74.     /*
  75.         Por Bruno da Silva
  76.  
  77.     ======================
  78.  
  79.         sentido = 0 NORTE
  80.         sentido = 1 LESTE
  81.         sentido = 2 SUL
  82.         sentido = 3 OESTE
  83.  
  84.     ========================
  85.  
  86.         y
  87.         y
  88.         xxxxyxxxxxx
  89.         y
  90.         y
  91.  
  92.         ou
  93.  
  94.         +
  95.         ----+++++++
  96.         -
  97.         -
  98.  
  99.         estar direção N = +y
  100.         estar direção S = -y
  101.  
  102.     */
  103.  
  104.     static
  105.         Float:px, Float:py, Float:pz, Float:xmin, Float:ymin
  106.         ;
  107.  
  108.     GetPlayerPos(playerid, px, py, pz);
  109.  
  110.     switch(sentido) {
  111.  
  112.                                                   // sul
  113.         case 2: ymin = ymax + 40.0, xmax = xmax + 5.0, xmin = xmax - 10.0;
  114.                                                   // norte
  115.         case 0: ymin = ymax - 40.0, xmax = xmax + 5.0, xmin = xmax - 10.0;
  116.  
  117.     /// leste e oeste nao testados, rachei a cuca pra fazer isto (burro '-')
  118.     /// nao testei para estes lados. funcao dificil, muito ABSTRATA
  119.  
  120.         case 3: xmin = xmax + 40.0, ymax = ymax + 5.0, ymin = ymax - 10.0;
  121.         case 1: xmin = xmax - 40.0, ymax = ymax + 5.0, ymin = ymax - 10.0;
  122.         default: return false;
  123.     }
  124.  
  125.     #if defined DEBUG_BRS
  126.     static executado;
  127.  
  128.     // Criar GangZone da Sinaleira para dar DEBUG
  129.     // Sera criada uma gangzone BRANCA perto da sinaleira, na parte onde os jogadores vao esperar de carro
  130.  
  131.     if(!executado) {
  132.         GangZoneShowForAll(GangZoneCreate(xmin, ymin, xmax, ymax),-1);
  133.         executado = 1;
  134.     }
  135.     #endif
  136.  
  137.     return (px >= xmin && px <= xmax && py >= ymax && py <= ymin);
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement