[Ajuda] GetVehiclePos
#1

Alguйm pode me informar se tem como pegar as coordenadas do carro em mуvel? pq estou fazendo sistema de som de veiculo, e quero saber se tem como pegar com o veiculo em movimento caso nгo tenha, me arruma uma soluзгo? pois o GetVehiclePos pega do veiculo, mais se anda nгo muda as coordenadas ou estou erradO?
Reply
#2

Usa no onplayerupdate ou entao usa settimer
Reply
#3

Olha da para usar SetTimer ou OnPlayerUpdate, porйm se for um servidor grande pode causar lag.
Reply
#4

Podes criar uma funзгo para guardar a posiзгo antiga do veiculo e outra para guardar a nova posiзгo, assim, bastava checar se as mesmas sгo diferentes, e se forem, tens um carro movido...

Darei um exemplo de OnVehiclePosChange.

OBS: Esta funзгo apenas funciona se o veнculo й movido por um player em state driver.

Ex:
pawn Код:
//Variбvel pra guardar as OLD e NEW pos do vehicle...
new Float:PosVH[MAX_VEHICLES][2][3];

/*Float:PosVH > [MAX_VEHICLES] - Valor definido do total de veнculos do servidor
                [2] - 0 = OLDPOS | 1 = NEWPOS
                [3] - 0 = Pos X | 1 = Pos Y | 2 = Pos Z
*/


//Declaraзгo da callback OnVehiclePosChange que serб chamada ao um veнculo se mover, informando id do veнculo, e antiga e nova posiзгo
forward OnVehiclePosChange(vehicleid, Float:oldposx, Float:oldposy, Float:oldposz, Float:newposx, Float:newposy, Float:newposz);

public OnPlayerUpdate(playerid)
{
    new vid = GetPlayerVehicleID(playerid);//Pega o id do veнculo atual do player

    if(vid != 0)//Checa se o valor de rotorno da funзгo acima nгo й 0, pois retorna 0 se o player nгo estiver em um veнculo
    {
        GetVehiclePos(vid, PosVH[vid][1][0], PosVH[vid][1][1], PosVH[vid][1][2]);//Guarda a nova posiзгo do veнculo (mesmo se o veнculo nгo tiver se movido)

        //Checa se a posiзгo antiga й diferente da nova
        if(PosVH[vid][0][0] != PosVH[vid][1][0] && PosVH[vid][0][1] != PosVH[vid][1][1] && PosVH[vid][0][2] != PosVH[vid][1][2])
        {
            //Chama a funзгo setando os valores dos parвmetros
            CallLocalFunction("OnVehiclePosChange", "dfff", vid, PosVH[vid][0][0], PosVH[vid][0][1], PosVH[vid][0][2], PosVH[vid][1][0], PosVH[vid][1][1], PosVH[vid][1][2]);
        }
    }
    return 1;
}

public OnVehiclePosChange(vehicleid, Float:oldposx, Float:oldposy, Float:oldposz, Float:newposx, Float:newposy, Float:newposz)
{
    //E aqui basta colocar as funзхes que deseja quando o veнculo se mover
    printf("[%d] Old Position: [%f,%f,%f] New Position: [%f,%f,%f]", vehicleid, oldposx, oldposy, oldposz, newposx, newposy, newposz);
    return 1;
}
Reply
#5

Mais aqui tenho que usar o playerid, pra pegar id do cara, como eu faзo?

pawn Код:
public OnVehiclePosChange(vehicleid, Float:oldposx, Float:oldposy, Float:oldposz, Float:newposx, Float:newposy, Float:newposz)
{
    new vehicleid = GetPlayerVehicleID(playerid);
    GetVehiclePos(vehicleid, PlayerInfo[playerid][CarX], PlayerInfo[playerid][CarY], PlayerInfo[playerid][CarZ]);
    printf("[%d] Old Position: [%f,%f,%f] New Position: [%f,%f,%f]", vehicleid, oldposx, oldposy, oldposz, newposx, newposy, newposz);
    return 1;
}
@edit

presiso do id do cara que etб no veiculo pra altualizar as infoplayer dele, como eu faзo?

pawn Код:
public OnVehiclePosChange(vehicleid, Float:oldposx, Float:oldposy, Float:oldposz, Float:newposx, Float:newposy, Float:newposz)
{
    PlayerInfo[playerid][CarX] = newposx;
    PlayerInfo[playerid][CarY] = newposy;
    PlayerInfo[playerid][CarZ] = newposz;
    printf("[%d] Old Position: [%f,%f,%f] New Position: [%f,%f,%f]", vehicleid, oldposx, oldposy, oldposz, newposx, newposy, newposz);
    return 1;
}
Reply
#6

Minha funзгo que uso para o comando aqui;

/comando ...


pawn Код:
if (SomCar[playerid] == 0)
        {
            SomCar[playerid] = 1; // liga
            new vehicleid = GetPlayerVehicleID(playerid);
            GetVehiclePos(vehicleid, PlayerInfo[playerid][CarX], PlayerInfo[playerid][CarY], PlayerInfo[playerid][CarZ]);
            PlayerInfo[playerid][CarStatus] = playerid;
            format(PlayerInfo[playerid][CarLink], 512, "http://www.sky.fm/mp3/tophits.pls");
        }
///
Reply
#7

Quote:
Originally Posted by PabLoHenriique
Посмотреть сообщение
Minha funзгo que uso para o comando aqui;

/comando ...


pawn Код:
if (SomCar[playerid] == 0)
        {
            SomCar[playerid] = 1; // liga
            new vehicleid = GetPlayerVehicleID(playerid);
            GetVehiclePos(vehicleid, PlayerInfo[playerid][CarX], PlayerInfo[playerid][CarY], PlayerInfo[playerid][CarZ]);
            PlayerInfo[playerid][CarStatus] = playerid;
            format(PlayerInfo[playerid][CarLink], 512, "http://www.sky.fm/mp3/tophits.pls");
        }
///
Basta adicionar mais um parвmetro na funзгo, que informarб o player que fez este carro se mover...

Mude estas coisas:
pawn Код:
forward OnVehiclePosChange(playerid, vehicleid, Float:oldposx, Float:oldposy, Float:oldposz, Float:newposx, Float:newposy, Float:newposz);


CallLocalFunction("OnVehiclePosChange", "ddfff", playerid, vid, PosVH[vid][0][0], PosVH[vid][0][1], PosVH[vid][0][2], PosVH[vid][1][0], PosVH[vid][1][1], PosVH[vid][1][2]);


public OnVehiclePosChange(playerid, vehicleid, Float:oldposx, Float:oldposy, Float:oldposz, Float:newposx, Float:newposy, Float:newposz)
{
    //Agora sу inserir aqui...nгo precisa getar novamente as posiзхes do veнculo, jб vem informando (newpos...)
    if (SomCar[playerid] == 0)
    {
        SomCar[playerid] = 1; // liga
        PlayerInfo[playerid][CarX] = newposx;
        PlayerInfo[playerid][CarY] = newposy;
        PlayerInfo[playerid][CarZ] = newposz;
        PlayerInfo[playerid][CarStatus] = playerid;
        format(PlayerInfo[playerid][CarLink], 512, "http://www.sky.fm/mp3/tophits.pls");
    }
    return 1;
}
Mas eu aconselharia a usar uma variбvel para guardar as informaзхes por cada vehicle id...mas podes fazer como fiz acima tambйm.
Reply
#8

Tб, vamos supor que vocк consiga pegar coordenadas do carro em movimento... Como vocк faria para 'mover' o бudio tambйm?

PlayAudioStreamForPlayer = For Player = Para o Player.

ANTES DE CODAR ALGO, PLANEJE! Posso tentar ajudar:

Quando o player ligar o som no carro, quem estiver perto dele escuta. Sу aqui vocк vai se complicar todo em fazer. Vamos supor que vocк conseguiu fazer isso.

E quando ele sair do carro sem desligar o som? Como que faz pro Som do carro continuar tocando no carro?
Vocк pode atй tentar criar um PlayAudioStreamForPlayer fixo em um local, mas vai ter que recomeзar a musica.

Enfim, ou o som segue o player, ou o som fica parado fixamente.
Reply
#9

Quote:
Originally Posted by JonathanFeitosa
Посмотреть сообщение
Tб, vamos supor que vocк consiga pegar coordenadas do carro em movimento... Como vocк faria para 'mover' o бudio tambйm?

PlayAudioStreamForPlayer = For Player = Para o Player.

ANTES DE CODAR ALGO, PLANEJE! Posso tentar ajudar:

Quando o player ligar o som no carro, quem estiver perto dele escuta. Sу aqui vocк vai se complicar todo em fazer. Vamos supor que vocк conseguiu fazer isso.

E quando ele sair do carro sem desligar o som? Como que faz pro Som do carro continuar tocando no carro?
Vocк pode atй tentar criar um PlayAudioStreamForPlayer fixo em um local, mas vai ter que recomeзar a musica.

Enfim, ou o som segue o player, ou o som fica parado fixamente.
Sу digo uma coisa: LAG + FLOOD.

Й isso mesmo que vai dar se ele colocar para setar audiostream a cada passo que o carro dar...lag pode ser que nem tanto, mas flood sem dъvidas, sу pela mensagem do audiostream.
Reply
#10

Oque vcs me recomendam? tem algo melhor pra fazer do que isso?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)