11/11/2020 13:56
Fiz este código de Bodygun em 2017 aproximadamente, não utilizo desde 2018 e dei release nele neste mesmo ano no fórum do mod, como não tem mais ele lá, vou disponibilizar aqui.
Código:
#include <a_samp>
#include <zcmd>
#include <foreach>
//No topo do gamemode, você pode adaptar tal varivel para as suas array de jogador.
new pWeaponHold[MAX_PLAYERS];
//Este é o comando de ativação do sistema, qualquer jogador possuindo as armas citadas abaixo (Shotgun, SPAS, MP5, AK-47, M4A1, Sniper e Rifle) poderá usa-lo.
CMD:armac(playerid, params[])
{
if(GetPlayerWeapon(playerid) == -1)
return SendClientMessage(playerid, 0xFF6347FF, "Você não possui nenhuma arma na mão.");
new gunname[128], string[128];
if(!pWeaponHold[playerid])
{
if(GetPlayerWeapon(playerid) == 25 || GetPlayerWeapon(playerid) == 27 || GetPlayerWeapon(playerid) == 29 || GetPlayerWeapon(playerid) == 30 || GetPlayerWeapon(playerid) == 31 || GetPlayerWeapon(playerid) == 33 || GetPlayerWeapon(playerid) == 34)
{
if(!pWeaponHold[playerid])
{
pWeaponHold[playerid] = GetPlayerWeapon(playerid);
GetWeaponName(GetPlayerWeapon(playerid), gunname, sizeof(gunname));
format(string, sizeof(string),"SERVIDOR: A sua %s foi acoplada ao seu corpo!",gunname);
SendClientMessage(playerid, 0xFFFF00FF, string);
return 1;
}
else
{
GetWeaponName(pWeaponHold[playerid], gunname, sizeof(gunname));
RemovePlayerAttachedObject(playerid, 4);
format(string, sizeof(string),"SERVIDOR: A sua %s foi desacoplada do seu corpo!",gunname);
SendClientMessage(playerid, 0xFFFF00FF, string);
pWeaponHold[playerid] = 0;
}
}
else
{
SendClientMessage(playerid, 0xFF6347FF, "Esta arma não pode ser acoplada a seu corpo.");
}
}
else
{
RemovePlayerAttachedObject(playerid, 4);
format(string, sizeof(string),"SERVIDOR: A arma em seu corpo foi desacoplada!");
SendClientMessage(playerid, 0xFFFF00FF, string);
pWeaponHold[playerid] = 0;
}
return 1;
}
//Esta stock deverá ser utilizada nos comandos nos quais você vai resetar as armas do jogador, /resetararmas, ou quando ele vende uma arma ou morre, ou seja
//sempre que suas armas sumir você deverá colocar essa função, independente se ele tiver com /armac ativo ele irá checar.
stock RemoveWeaponHold(playerid, weaponid)
{
if(weaponid == pWeaponHold[playerid])
{
RemovePlayerAttachedObject(playerid, 4);
pWeaponHold[playerid] = 0;
}
return 1;
}
public OnGameModeInit()
{
//No OnGameModeInit você irá colocar o seu timer da public criada abaixo, leia o que está escrito acima dela se quiser fazer algo melhor.
SetTimer("CheckArmaC", 1000, true);//1s
return 1;
}
//Você deverá utilizar essa public como um timer global ou adapta-la em um timer global existente de no máximo 1s de loop.
forward CheckArmaC();
public CheckArmaC()
{
foreach (new i : Player)
{
if(pWeaponHold[playerid])
{
new weapon;
switch(pWeaponHold[playerid])
{
case 22: weapon = 346;
case 23: weapon = 347;
case 24: weapon = 348;
case 25: weapon = 349;
case 27: weapon = 351;
case 29: weapon = 353;
case 30: weapon = 355;
case 31: weapon = 356;
}
if(GetPlayerWeapon(i) != pWeaponHold[playerid])
{
switch(pWeaponHold[playerid])
{
case 25:
{
SetPlayerAttachedObject(i, 4, weapon, 1, 0.2049, 0.2430, -0.1359, -176.0000, 160.1999,6.5998);
}
case 27,29,30,31,33,34:
{
SetPlayerAttachedObject(i, 4, weapon, 1, 0.1298, 0.2230, -0.1500, 5.0998, 23.8999, -177.4998);
}
}
}
else
{
RemovePlayerAttachedObject(i, 4);
}
}
}
return 1;
}