Portal SAMP
[Pedido] Excluir arma do chão depois de pergar - 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: [Pedido] Excluir arma do chão depois de pergar (/showthread.php?tid=3024)



Excluir arma do chão depois de pergar - MisteriumBr - 27/11/2022

Estou quebrando a cabeça com isso, eu quero que a arma desapareça do chão ao digitar o comando /parma.
A arma até está sumindo até aí ok. Mas o problema é que a textura se é que posso chamar assim, ainda continua no chão como se tivesse mesmo uma arma lá ainda, os jogadores até tentam pegar mas não conseguem, pois não existe a arma, ela está apenas visualmente lá.

Segue o meu código, estou aberto a alterações

Código:
public Pegar(playerid)
{
        new f = MAX_ARMAS+1;
        for(new a = 0; a < sizeof(ObjCoords); a++)
        {
            if(IsPlayerInRangeOfPoint(playerid, 5.0, ObjCoords[a][0], ObjCoords[a][1], ObjCoords[a][2]))
            {
                f = a;
                break;
            }
        }
        if(f > MAX_ARMAS) return SendClientMessage(playerid, 0x33AA3300, "{4F4F4F}Erro: {ffffff}Voce nao esta proximo a uma arma!");
        else
        {
            new gunname[25];
            new string[100];

            ObjCoords[f][0] = 0.0;
            ObjCoords[f][1] = 0.0;
            ObjCoords[f][2] = 0.0;

            GivePlayerWeapon(playerid, ObjectID[f][0], ObjectID[f][1]);
            GetWeaponNameEx(ObjectID[f][0], gunname, sizeof(gunname));
            format(string, sizeof(string), "{C29FDA}** %s pegou %s no chao.", PlayerName(playerid), gunname);
            SendClientMessageInRange(35.0, playerid, string,0xa3ffffAA,0xa3ffffAA,0xa3ffffAA,0xa3ffffAA,0xa3ffffAA);
            DestroyObject(ObjectID[f][0]), DestroyObject(ObjectID[f][1]);
        }
        return 1;
}



RE: Excluir arma do chão depois de pergar - xbruno1000x - 28/11/2022

GivePlayerWeapon(playerid, ObjectID[f][0], ObjectID[f][1]);
DestroyObject(ObjectID[f][0]), DestroyObject(ObjectID[f][1]);

O ID do OBJETO arma é diferente do ID da arma.

Por que digo isso? Porque o ID do GivePlayerWeapon não pode ser igual ao ID do DestroyObject. Se uma coisa funcionar, a outra não irá.


RE: Excluir arma do chão depois de pergar - MisteriumBr - 28/11/2022

Precisa ser tudo uma coisa só?


RE: Excluir arma do chão depois de pergar - Aranha - 28/11/2022

olha no codigo quando dropa arma no chao
do mesmo jeito q cria vc destroi


RE: Excluir arma do chão depois de pergar - Carlos Victor - 28/11/2022

No caso, você terá que destruir o objeto no chão, recomendo que crie uma função para destruir o objeto, e também revise o código, já joguei em muitos servidores que tinha como dupar arma com esse sistema de drop.


RE: Excluir arma do chão depois de pergar - xbruno1000x - 28/11/2022

(28/11/2022 10:05)MisteriumBr Escreveu: Precisa ser tudo uma coisa só?

Veja bem, vou tentar te explicar de uma forma mais detalhada:

Primeiro objeto criado no servidor -> ID = 1

Imagine que esse objeto seja uma M4 que pode ser coletada no chão. Eu armazeno o valor na variável ARMA1.

Código:
//valor da variável
ARMA1 = 1;
//Nesse caso o valor será 1 independente do modelo do objeto.

Se eu der um GivePlayerWeapon(playerid, ARMA1), ele não irá dar a M4 para o jogador, ele irá dar soco inglês que é a arma ID 1. O ID da arma e do objeto que você criou são obrigatoriamente diferentes, então umas das funções que eu mandei anteriormente não irão funcionar.


RE: Excluir arma do chão depois de pergar - Carlos Victor - 29/11/2022

Supondo que eu tenha uma M4 em mãos, e digito /jogararma, o que vai acontecer?

Simplesmente irei armazenar o ID da M4 em uma variável(do drop) junto com a munição e pegar o ID do objecto da M4 que é 256 e armazenar em outra variável
E criar o objeto a partir dessa variável, e quando o jogador pegar a arma no chão, dar a ele a variável que eu guardei o ID da arma que é 31.

Fiz um código exemplo, espero que entenda:
Código:
enum dropData
{
    bool:dropExists,
    dropObject,

    dropItem,
    dropAmount
};
new dropInfo[MAX_DROPS][dropData];

CMD:jogararma(playerid)
{
    for(new i = 1; i < MAX_DROPS; i++) if(!dropInfo[i][dropExists])
    {
        new
            weaponid = GetPlayerWeapon(playerid),
            ammo = GetPlayerAmmo(playerid);
    
        dropInfo[i][dropExists] = true;
        GetPlayerPos(playerid, dropInfo[i][dropPos][0], dropInfo[i][dropPos][1], dropInfo[i][dropPos][2]);

        dropInfo[i][dropObject] = GetWeaponObject(weaponid);

        dropInfo[i][dropItem] = weaponid;
        dropInfo[i][dropAmount] = ammo;
        break;
    }
    return 1;
}

GetWeaponObject(weaponid)
{
    switch(weaponid)
    {
        case 22: return 346; // Pistoll
        case 23: return 347; // Silenced Pistoll
        case 24: return 348; // Desert Eagle
        case 25: return 349; // Shotgun
        case 26: return 350; // Shaw-off-shotgun
        case 27: return 251; // Combat Shotgun
        case 28: return 252; // Uzi
        case 30: return 255; // AK-47
        case 31: return 256; // M4
    }
    return -1;
}



RE: Excluir arma do chão depois de pergar - MisteriumBr - 30/11/2022

Obrigado meu amigos, consegui resolver o problema