[FilterScript] OnPlayerShootVehicle (ibits,iloops,ieach)
#1

Fiz este script em poucos minutos, basicamente ele detecta quando um usuбrio estб atirando sobre algum veнculo


pawn Код:
#include a_samp

#include IPSI/load.main

#define ShootVeh:: ShootVeh_


public OnFilterScriptInit() {

    SetTimer("ShootVeh_OnPlayerVehicleUpdate", 50, true);
   
    printf("OnPlayerShootVehicle INICIADO\n\nCriado por Bruno da Silva\n\n@ipsbr.net\n@brunodasilva.com");
   
    return true;
}


stock Float:ShootVeh::Distance( Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2 )
    return  Float:(((((x1-x2) * (x1-x2)) + ((y1-y2) * (y1-y2)) + ((z1-z2)*(z1-z2)))));


stock bool:ShootVeh::InRange( Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, Float: range )
    return  bool:(ShootVeh::Distance ( x1, y1, z1, x2, y2, z2 ) < (range * range));

stock
    bit1:ShootVeh::jogadorAtirando<MAX_PLAYERS>,
    ShootVeh::ultimoTiro [ MAX_PLAYERS ] ;

public ShootVeh::OnPlayerVehicleUpdate();
public ShootVeh::OnPlayerShootVehicle(playerid, vehicleid);


public ShootVeh::OnPlayerVehicleUpdate() {

    static Float: zPos[3], Float: pPos[3], Float: dis, Float: pCam[3];

    each(Spawned->new i) {
   
        if(gettime() - ShootVeh::ultimoTiro[i] > 1 && !getBit1(ShootVeh::jogadorAtirando, i) )  continue;
       
        GetPlayerPos(i , pPos[0],  pPos[1],  pPos[2]) ;

        each(VehiclesCreated->new j) {
       
            GetPlayerPos(j , zPos[0],  zPos[1],  zPos[2]) ;
           
            dis = ShootVeh::Distance( pPos[0], pPos[1], pPos[2], zPos[0], zPos[1], zPos[2] );
           
            if((dis < 200.0)) {

                GetPlayerCameraPos(i, pPos[0], pPos[1], pPos[2]);
                GetPlayerCameraFrontVector(i, pCam[0],  pCam[2],  pCam[2]);

                if(ShootVeh::InRange( pPos[0] + floatmul( pCam[0], dis), pPos[1] + floatmul( pCam[1], dis), pPos[2] + floatmul( pCam[2], dis), zPos[0], zPos[1], zPos[2], 8.0)) {
               
                    ShootVeh::OnPlayerShootVehicle(i, j);
                }
            }
        }
    }
    return true;
}


public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{

    if((((newkeys & (KEY_FIRE)) == (KEY_FIRE)) && ((oldkeys & (KEY_FIRE)) != (KEY_FIRE))))
        setBit1(ShootVeh::jogadorAtirando, playerid, 1);

       
    else {
       
        if((((newkeys & (KEY_FIRE)) != (KEY_FIRE)) && ((oldkeys & (KEY_FIRE)) == (KEY_FIRE))))
        {
            ShootVeh::ultimoTiro[playerid] = gettime();
            setBit1(ShootVeh::jogadorAtirando, playerid, 0);
                   
        }
    }
       
    return true;
}


public ShootVeh::OnPlayerShootVehicle(playerid, vehicleid) {

    SendClientMessage(playerid, -1, "Para de atirar no veнculo seu lesado");
    return true;
}

Na parte

pawn Код:
public ShootVeh::OnPlayerShootVehicle(playerid, vehicleid) {
Й quando detecta qual jogador atirou em qual veнculo, isso pode ser usado para muita coisa.



A precisгo nгo й 100% e este script й um esboзo, apenas fiz para ajudar o membro arakuta.


Obrigado
Reply
#2

Bruno seu lindo
Reply
#3

Bruno seu lindoІ vai ter esse cйrebro de Alien pra lб -q

Excelente trabalho.
Reply
#4

Atravйs das paredes dos disparos serб contado.
Reply
#5

Nice work, como vai a IPSI?
Reply
#6

Muito bom.
Reply
#7

Muito Bom Bruno

Parabens
Reply
#8

Vocк poderia ter postado no prуprio tуpico, enfim...

Eu nao te dou REP pois eu estou negativado kk'

Parabйns -q
Reply
#9

Excelente Trabalho.

como sempre, Parabйns Bruno
Reply
#10

great job.

Eu tava tentando fazer um FS com uns calculos e tals, pra detectar quando o jogador estivesse OLHANDO para um determinado objeto..
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)