Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*VISITE NOSSO SITE: http://www.sampknd.com/
- SAMP KND MELHOR BLOG DE SAMP DO BRASIL
- */
- 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);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement