17/09/2024 08:15
(Esta mensagem foi modificada pela última vez a: 17/09/2024 08:24 por White_Blue.)
(17/09/2024 06:04)LostZinqs Escreveu:(16/09/2024 21:23)xbruno1000x Escreveu: Sinta-se a vontade pra buscar ajuda aqui no fórum sempre que precisar, o objetivo do fórum é exatamente esse.
É basicamente isso aqui em baixo que você precisa fazer:
Código://DEFINE OS TIMES
#define TEAM_POLICIA 1
#define TEAM_LADRAO 2
//ID DA DIALOG DEVE ENTRAR NO LUGAR DO 1
#define DIALOG_TIME 1
//DIALOG
ShowPlayerDialog(playerid, DIALOG_TIME, DIALOG_STYLE_LIST, "Escolha seu time", "Polícia\nLadrão", "Selecionar", "Cancelar");
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_TIME)
{
if(response) // Se o jogador clicou em "Selecionar"
{
switch(listitem)
{
case 0: // Escolheu Polícia
{
SetPlayerTeam(playerid, TEAM_POLICIA);
SendClientMessage(playerid, COLOR_BLUE, "Você escolheu ser da Polícia!");
}
case 1: // Escolheu Ladrão
{
SetPlayerTeam(playerid, TEAM_LADRAO);
SendClientMessage(playerid, COLOR_RED, "Você escolheu ser Ladrão!");
}
}
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Você cancelou a seleção de time.");
}
}
return 1;
}
As respostas da dialog necessitam algumas adesões como a de adicionar uma posição pra spawnar e tal.
A principal função que usei foi a SetPlayerTeam, caso precise da documentação está logo abaixo:
https://www.open.mp/docs/scripting/funct...PlayerTeam
Bom dia Bruno, você poderia também me ensinar a fazer um sistema de ant fogo amigo? tipo, jogadores no mesmo time não poderem se dar dano, ou se matar. se não for muito incomodo, claro.
Basta verificar se o jogador pertence a mesma equipe na callback OnPlayerDamage ou OnPlayerGiveDamage, recomendo o uso da biblioteca weapon-config para poder usar a callback OnPlayerDamage, que infelizmente não é nativa.
Usando weapon-config:
Código PHP:
public OnPlayerDamage(playerid, Float:amount, issuerid, WEAPON:weapon, bodypart) {
if(GetPlayerTeam(issuerid) == GetPlayerTeam(playerid)) return 0; // Previne que o dano seja infligido se os jogadores estiverem na mesma equipe.
return 1;
}
Sem weapon-config (utilizando a callback OnPlayerGiveDamage):
Código PHP:
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart) {
if(GetPlayerTeam(playerid) == GetPlayerTeam(damagedid)) {
new Float:health;
GetPlayerHealth(damagedid, health);
SendClientMessage(playerid, -1, "Este jogador é do seu time. Fogo amigo não é permitido!");
SetPlayerHealth(damagedid, health + amount);
// Recomendo aplicar um cooldown no jogador que deu o dano, mas isso fica a seu critério.
}
}
O problema com o método sem weapon-config é que o dano é realizado antes da verificação, o que pode ser burlado, especialmente se o jogador que sofreu o dano estiver com a vida baixa e um único tiro puder matá-lo antes de ser revertido. Então, recomendo utilizar o método com weapon-config. Porém, weapon-config, por minha experiência, weapon-config é uma biblioteca relativamente problemática, pois podem ocorrer conflitos com outras bibliotecas e depende de plugins como SKY e PawnRakNet (que é conhecido por ser incompatível com sampvoice).
Pode haver outros métodos que não lembro agora.
Referências:
https://github.com/oscar-broman/samp-wea...-configinc
https://www.open.mp/docs/scripting/callb...GiveDamage
Não estou disponível para realizar serviços relacionados ao SA-MP e não costumo responder a mensagens privadas, a menos que estejam relacionadas à moderação do fórum.