Portal SAMP
[Ajuda] Animação - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Animação (/showthread.php?tid=5088)



Animação - desconhecido123 - 05/09/2025

Bom dia!

Tava fazendo um sistema de quando o player abrir o inventário aparecer um objeto e uma animação, fuciona tudo direito quando abrir aparecer e fechar da um clear, mais quando puxo um veículo de invetário acaba bugando o player, mesmo eu já fazendo a verificação


Código:
stock AbrirInventario(playerid){ 
    if(!IsPlayerInAnyVehicle(playerid))
    {
        ApplyAnimation(playerid, "BOMBER", "BOM_Plant_Loop", 4.1, 1, 0, 0, 0, 0, 1);
       SetPlayerAttachedObject(playerid, 9, 19559, 1, 0.10100000, 0.24299997, 0.00000000, 0.00000062,  90.40000152, 146.60003662, 1.00000000, 1.00000000, 1.00000000, 0xffffffff, 0xffffffff);
    }
}

stock FecharInventario(playerid){
    if(IsPlayerAttachedObjectSlotUsed(playerid, 9))
    {
        RemovePlayerAttachedObject(playerid,9);
    }
    if(!IsPlayerInAnyVehicle(playerid))
    {
        ClearAnimations(playerid);
    }

}



RE: Animação - xbruno1000x - 05/09/2025

A primeira coisa que você precisa estabelecer sobre pawn script é que os códigos são do paradigma estruturado. Ou seja, eles são executados de cima pra baixo. Sendo assim, para resolver seu problema teremos que chamar a função FecharInventario(playerid) antes de PutPlayerInVehicle(playerid). Dessa forma iremos limpar as animações antes dele estar no veículo de inventário. Caso não consiga resolver, compartilhe o código do veículo de inventário.


RE: Animação - desconhecido123 - 05/09/2025

( 10:34)desconhecido123 Escreveu: Bom dia!

Tava fazendo um sistema de quando o player abrir o inventário aparecer um objeto e uma animação, fuciona tudo direito quando abrir aparecer e fechar da um clear, mais quando puxo um veículo de invetário acaba bugando o player, mesmo eu já fazendo a verificação


Código:
stock AbrirInventario(playerid){ 
    if(!IsPlayerInAnyVehicle(playerid))
    {
        ApplyAnimation(playerid, "BOMBER", "BOM_Plant_Loop", 4.1, 1, 0, 0, 0, 0, 1);
       SetPlayerAttachedObject(playerid, 9, 19559, 1, 0.10100000, 0.24299997, 0.00000000, 0.00000062,  90.40000152, 146.60003662, 1.00000000, 1.00000000, 1.00000000, 0xffffffff, 0xffffffff);
    }
}

stock FecharInventario(playerid){
    if(IsPlayerAttachedObjectSlotUsed(playerid, 9))
    {
        RemovePlayerAttachedObject(playerid,9);
    }
    if(!IsPlayerInAnyVehicle(playerid))
    {
        ClearAnimations(playerid);
    }

}

( 18:26)xbruno1000x Escreveu: A primeira coisa que você precisa estabelecer sobre pawn script é que os códigos são do paradigma estruturado. Ou seja, eles são executados de cima pra baixo. Sendo assim, para resolver seu problema teremos que chamar a função FecharInventario(playerid) antes de PutPlayerInVehicle(playerid). Dessa forma iremos limpar as animações antes dele estar no veículo de inventário. Caso não consiga resolver, compartilhe o código do veículo de inventário.

Código:
if(item > 399 && item < 610)
{
    if(AguardarVeiculo[playerid] >= 1){
format(stringZCMD, sizeof stringZCMD, "* Você pegou um veículo de inventário a pouco tempo! Aguarde 5:30 segundos.", AguardarVeiculo[playerid]);
SendClientMessage(playerid, COR_GRAD1, stringZCMD);
return 1;
}
        if(GetPlayerVirtualWorld(playerid) != 0)
        return SendClientMessage(playerid, COR_LIGHTRED, "ERRO: {FFFFFF}Você só pode pegar veículos de inventário no world [0]!");
        if(GetPlayerInterior(playerid) > 0)
        return SendClientMessage(playerid, COR_LIGHTRED, "ERRO: {FFFFFF}Você não pode pegar veículos de inventário em interior!");
        if(IsPlayerInAnyVehicle(playerid))
        return SendClientMessage(playerid, COR_LIGHTRED, "ERRO: {FFFFFF}Você já está em um veículo!");
    new Float:X,Float:Y,Float:Z;
  GetPlayerPos(playerid, X,Y,Z);
      //new arquivo[64];
//new arquivo2[64];
//new Cor1 = 1 + random(255);
//new Cor2 = 1 + random(255);
new Cor1 = 0;
if(PlayerInfo[playerid][pCarCorInv] == -1)
{
                Cor1 = random(255);
}
else if(PlayerInfo[playerid][pCarCorInv] >= 0)
{
                Cor1 = PlayerInfo[playerid][pCarCorInv];
}
CarroInventario[playerid] = AddStaticVehicleEx(item,X,Y,Z, 1,Cor1,Cor1,-1);
PutPlayerInVehicle(playerid, CarroInventario[playerid], 0);
//CarroInventario[playerid] = AddStaticVehicleEx(item,X,Y,Z, 1,Cor1,Cor2,-1);
//PutPlayerInVehicle(playerid, CarroInventario[playerid], 0);
/*for(new x = 1200; x != MAX_VEHICLES; ++x)
{
    format(arquivo, sizeof(arquivo), Pasta_CarrosVIP,x);
    format(arquivo2, sizeof(arquivo2), Pasta_CarrosFixo,x);
if(!DOF2_FileExists(arquivo) && !DOF2_FileExists(arquivo2))
{
CarroInventario[playerid] = AddStaticVehicleEx(item,X,Y,Z, 1,1,0,-1);
PutPlayerInVehicle(playerid, CarroInventario[playerid], 0);
break;
}
}*/
    if(item == 441 || item == 464 || item == 465 || item == 501 || item == 564 || item == 594)
{
  SendClientMessage(playerid, COR_LIGHTBLUE, "Carrinho: Você pegou seu brinquedo, quando quiser guarda-lo pressione F ou N");
  format(gstring, sizeof(gstring), "[BRINQUEDO]: %s Pegou um(a) %s de brinquedo.", PlayerName(playerid), Nomedosveiculos[item - 400]);
ProxDetector(30.0, playerid, gstring, COR_AZUL,COR_AZUL,COR_AZUL,COR_PURPLE,COR_PURPLE);
}
else
{
    SendClientMessage(playerid, COR_LIGHTBLUE, "Você pegou seu veículo de inventário, para guarda-lô, pressione a tecla F ou N.");
  format(gstring, sizeof(gstring), "[Veiculo de Inventário]: %s Pegou um(a) %s em seu inventário.", PlayerName(playerid), Nomedosveiculos[item - 400]);
ProxDetector(30.0, playerid, gstring, COR_AZUL,COR_AZUL,COR_AZUL,COR_PURPLE,COR_PURPLE);
}
            BoxAberto[playerid] = 0;
GetVehicleParamsEx(CarroInventario[playerid],engineZCMD,lightsZCMD,alarmZCMD,doorsZCMD,bonnetZCMD,bootZCMD,objectiveZCMD);
SetVehicleParamsEx(CarroInventario[playerid],VEHICLE_PARAMS_ON,lightsZCMD,alarmZCMD,doorsZCMD,bonnetZCMD,bootZCMD,objectiveZCMD);
SendClientMessage(playerid, 0xFFFFFFFF, "Veiculo: {228B22}Ligado!");
EngineCarro[CarroInventario[playerid]] = 1;
AguardarVeiculo[playerid] = 530;
Gas[CarroInventario[playerid]] = GasMax;
            FecharInventario(playerid);
}



RE: Animação - xbruno1000x - 06/09/2025

Simplesmente coloque o FecharInventario antes do PutPlayerInVehicle, como eu havia dito.

Código:
if(item > 399 && item < 610)
{
    if(AguardarVeiculo[playerid] >= 1){
        format(stringZCMD, sizeof stringZCMD, "* Você pegou um veículo de inventário a pouco tempo! Aguarde 5:30 segundos.", AguardarVeiculo[playerid]);
        SendClientMessage(playerid, COR_GRAD1, stringZCMD);
        return 1;
    }
    if(GetPlayerVirtualWorld(playerid) != 0)
    return SendClientMessage(playerid, COR_LIGHTRED, "ERRO: {FFFFFF}Você só pode pegar veículos de inventário no world [0]!");
    if(GetPlayerInterior(playerid) > 0)
    return SendClientMessage(playerid, COR_LIGHTRED, "ERRO: {FFFFFF}Você não pode pegar veículos de inventário em interior!");
    if(IsPlayerInAnyVehicle(playerid))
    return SendClientMessage(playerid, COR_LIGHTRED, "ERRO: {FFFFFF}Você já está em um veículo!");
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid, X,Y,Z);
    //new arquivo[64];
    //new arquivo2[64];
    //new Cor1 = 1 + random(255);
    //new Cor2 = 1 + random(255);
    new Cor1 = 0;
    if(PlayerInfo[playerid][pCarCorInv] == -1)
    {
        Cor1 = random(255);
    }
    else if(PlayerInfo[playerid][pCarCorInv] >= 0)
    {
        Cor1 = PlayerInfo[playerid][pCarCorInv];
    }
    CarroInventario[playerid] = AddStaticVehicleEx(item,X,Y,Z, 1,Cor1,Cor1,-1);
    FecharInventario(playerid);
    PutPlayerInVehicle(playerid, CarroInventario[playerid], 0);
    //CarroInventario[playerid] = AddStaticVehicleEx(item,X,Y,Z, 1,Cor1,Cor2,-1);
    //PutPlayerInVehicle(playerid, CarroInventario[playerid], 0);
    /*for(new x = 1200; x != MAX_VEHICLES; ++x)
    {
        format(arquivo, sizeof(arquivo), Pasta_CarrosVIP,x);
        format(arquivo2, sizeof(arquivo2), Pasta_CarrosFixo,x);
        if(!DOF2_FileExists(arquivo) && !DOF2_FileExists(arquivo2))
        {
            CarroInventario[playerid] = AddStaticVehicleEx(item,X,Y,Z, 1,1,0,-1);
            PutPlayerInVehicle(playerid, CarroInventario[playerid], 0);
            break;
        }
    }*/
    if(item == 441 || item == 464 || item == 465 || item == 501 || item == 564 || item == 594)
    {
        SendClientMessage(playerid, COR_LIGHTBLUE, "Carrinho: Você pegou seu brinquedo, quando quiser guarda-lo pressione F ou N");
        format(gstring, sizeof(gstring), "[BRINQUEDO]: %s Pegou um(a) %s de brinquedo.", PlayerName(playerid), Nomedosveiculos[item - 400]);
        ProxDetector(30.0, playerid, gstring, COR_AZUL,COR_AZUL,COR_AZUL,COR_PURPLE,COR_PURPLE);
    }
    else
    {
        SendClientMessage(playerid, COR_LIGHTBLUE, "Você pegou seu veículo de inventário, para guarda-lô, pressione a tecla F ou N.");
        format(gstring, sizeof(gstring), "[Veiculo de Inventário]: %s Pegou um(a) %s em seu inventário.", PlayerName(playerid), Nomedosveiculos[item - 400]);
        ProxDetector(30.0, playerid, gstring, COR_AZUL,COR_AZUL,COR_AZUL,COR_PURPLE,COR_PURPLE);
    }
    BoxAberto[playerid] = 0;
    GetVehicleParamsEx(CarroInventario[playerid],engineZCMD,lightsZCMD,alarmZCMD,doorsZCMD,bonnetZCMD,bootZCMD,objectiveZCMD);
    SetVehicleParamsEx(CarroInventario[playerid],VEHICLE_PARAMS_ON,lightsZCMD,alarmZCMD,doorsZCMD,bonnetZCMD,bootZCMD,objectiveZCMD);
    SendClientMessage(playerid, 0xFFFFFFFF, "Veiculo: {228B22}Ligado!");
    EngineCarro[CarroInventario[playerid]] = 1;
    AguardarVeiculo[playerid] = 530;
    Gas[CarroInventario[playerid]] = GasMax;
}