Pages

Ads 468x60px


[FilterScript] Semáforo Central LV

Como prometido aqui um filterscript básico de um semáforo  Em breve função e include de adiciona-los



Include usada:
http://forum.sa-mp.com/showthread.php?t=356010

Filterscript:

pawn Code:
new redGreen = 1; new sinalVermelho = 0; new Float:angleSinal; public OnPlayerUpdate(playerid) {     if(!IsPlayerConnected(playerid)) return false;     if(IsPlayerNPC(playerid)) return true;     /*     ================         0 -> 89 (norte)         90 -> 179 (leste)         180 -> 269 (sul)         270 -> 359 (oeste)     ===============     */     GetPlayerFacingAngle(playerid, angleSinal);     static bool:enviada[MAX_PLAYERS];     // verificar se ele está dentro da área da sinaleira     if(sinalVermelho) {         GameTextForPlayer(playerid, "Sinal ~r~Vermelho", 1000, 1);     }     else {         GameTextForPlayer(playerid, "Sinal ~g~Verde", 1000, 1);     }     if(!IsPlayerInRangeOfLight(playerid, 2042.0878, 1283.0818, 2)  && sinalVermelho && gettime() - GetPVarInt(playerid, #sinaleiraPassada) < 10 && enviada[playerid] == true) {         SendClientMessage(playerid, -1, "Voce passou com a sinaleira vermelha (ou saio da pista). Caara");         enviada[playerid] = false;     }     if(IsPlayerInRangeOfLight(playerid, 2042.0878, 1283.0818, 2)) {         // verificar se o cara está na posição NORTE -> SUL (que é o sentido da nossa sinaleira)         if(300 > angleSinal > 160) {             // Verificar se está logo abaixo da sinaleira. Nesta parte é aconselhável você checar se a velocidade do carro está acima de 10 km/h             if(!enviada[playerid] && sinalVermelho) {                 SetPVarInt(playerid, #sinaleiraPassada, gettime());                 SendClientMessage(playerid, -1, "Sinal vermelho.");                 enviada[playerid] = true;             }         }     }     return true; } public OnTrafficLightChange() {     sinalVermelho = !!((redGreen++ - 1) % 3);     return true; } #define DEBUG_BRS IsPlayerInRangeOfLight(playerid, Float:xmax, Float:ymax, sentido) {     /*         Por Bruno da Silva     ======================         sentido = 0 NORTE         sentido = 1 LESTE         sentido = 2 SUL         sentido = 3 OESTE     ========================         y         y         xxxxyxxxxxx         y         y         ou         +         ----+++++++         -         -         estar direção N = +y         estar direção S = -y     */     static         Float:px, Float:py, Float:pz, Float:xmin, Float:ymin         ;     GetPlayerPos(playerid, px, py, pz);     switch(sentido) {                                                   // sul         case 2: ymin = ymax + 40.0, xmax = xmax + 5.0, xmin = xmax - 10.0;                                                   // norte         case 0: ymin = ymax - 40.0, xmax = xmax + 5.0, xmin = xmax - 10.0;     /// leste e oeste nao testados, rachei a cuca pra fazer isto (burro '-')     /// nao testei para estes lados. funcao dificil, muito ABSTRATA         case 3: xmin = xmax + 40.0, ymax = ymax + 5.0, ymin = ymax - 10.0;         case 1: xmin = xmax - 40.0, ymax = ymax + 5.0, ymin = ymax - 10.0;         default: return false;     }     #if defined DEBUG_BRS     static executado;     // Criar GangZone da Sinaleira para dar DEBUG     // Sera criada uma gangzone BRANCA perto da sinaleira, na parte onde os jogadores vao esperar de carro     if(!executado) {         GangZoneShowForAll(GangZoneCreate(xmin, ymin, xmax, ymax),-1);         executado = 1;     }     #endif     return (px >= xmin && px <= xmax && py >= ymax && py <= ymin); }


Semáforo fica no centro de LV. Já coloco a print screen  Estou a quase 1 semana em dormir quase nada, estou meio cansado e não consegui pensar em alguma lógica melhor para isto :/ 

As vezes pode bugar, mas isto é só o código mesmo para checar se o jogador está no semáforo. Não saia usando isto em seu servidor. É PARA ESTUDOS.

A callback OnTrafficLightChange não é nada precisa, mas não achei jeito melhor. (só adicionando objetos manualmente e deletando as sinaleiras atuais, mas como não mexo muito com jogo não vou fazer isto, quem quiser me passar as coordenadas para deletar todas sinaleiras e fazer eu prosseguir com o projeto, aí sim) ..
Portanto olhe o GameText para ver se o semáforo está vermelho ou verde.