[FilterScript] Semбforo Central LV
#1

Como prometido aqui um filterscript bбsico de um semбforo Em breve funзгo e include de adiciona-los



Include usada:
https://sampforum.blast.hk/showthread.php?tid=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.
Reply
#2

Serio mano, vocк tem uma cede de "codar" impressionante, bem queria ter isso. eu quando penso em inicia um projeto jб vem a preguiзa... penso no new.pwn.... penso no tempo que pode levar...

Por isso prefiro ficar sу no bбsic, ajudando os carinhas aqui do forum rsrsrsrsrs.


@esperando SS

@tou esperando um tutorial seu de como ter vontade de codar ! xD
Reply
#3

Eu nгo testei isto de carro. Testei apй pois estou usando "GetPlayerFacingAngle"

Mas de qualquer forma. Isto й sу o ALGORITIMO. Nгo levem como um FILTERSCRIPT ao pй da letra !!

leonardo1434 testa ai se ele detecta quando passa na sinaleira vermelha. Mas olha se a sinaleira estб vermelha pelo game text nгo pela sinaleira pois parece que a include pode ser imprecisa algumas vezes. jб estou por arrumar isto.

foi a ss aн?
Reply
#4

GetPlayerFacingAngle funciona em veнculo (acredito eu). Muito bom, mas pra que ver se o cara ta olhando pro sinal mano rs Sу ver se ele ta perto e se ta VERMELHO ou VERDE jб estб уtimo kk
Reply
#5

Cara, eu uma vez tentei fazer isso, mas eu percebi que quando retirava os semбforos, as luzes ficavam lб, e entгo tentei ver se tinha algo para que eu podesse colocar como se fosse luz, mas nгo encontrei nenhum objeto que fizesse isso! Vou testar, e tbm verificar o CODE para ver a mбgica que vc fez!
Reply
#6

Quote:
Originally Posted by paulor
View Post
Cara, eu uma vez tentei fazer isso, mas eu percebi que quando retirava os semбforos, as luzes ficavam lб, e entгo tentei ver se tinha algo para que eu podesse colocar como se fosse luz, mas nгo encontrei nenhum objeto que fizesse isso! Vou testar, e tbm verificar o CODE para ver a mбgica que vc fez!
Estou terminando uma include com precisгo praticamente perfeita .
Reply
#7

Nunca vi algo parecido ^^
Reply
#8

Cara isso й muito doidera, daki uns dias vai ter muitos servidores RP usando esse sistema.
+ rep (;

Mas tipow, funciona o sinal amarelo nesse sistema ?
E tambem tive uma ideia, ainda mais para servidor de RP, depois que passar da meia noite o sinal fikar Piscando amarelo. '-'

Curti muito cara (y)
Reply
#9

http://forum.sa-mp.com/showthread.ph...03#post1959703

Olha aн :P

Acabo de atualizar com o novo cуdigo, mas atй a versгo final pode demorar dias, aquilo й apenas um esboзo para verem como estб ficando.
Reply
#10

muito criativo parabens
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)