Portal SAMP
[Ajuda] Sistema de time - 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] Sistema de time (/showthread.php?tid=4877)



Sistema de time - LostZinqs - 16/09/2024

Boa noite, sou eu de novo kkkk, vocês já devem estar cansado de me ver em tantos tópicos. Pois bem, eu queria saber uma forma de criar um sistema de time, como exemplo, um sistema de policia x ladrão, cujo você escolhe o time em uma dialog por exemplo, deixem que a parte da dialog fica por minha conta, eu só queria saber como eu poderia fazer o sistema em si, será que alguém pode me ajudar? se não for muito incomodo, claro.


RE: Sistema de time - xbruno1000x - 16/09/2024

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/functions/SetPlayerTeam


RE: Sistema de time - LostZinqs - 16/09/2024

(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/functions/SetPlayerTeam

Meu herói.


RE: Sistema de time - LostZinqs - 17/09/2024

(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/functions/SetPlayerTeam

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.


RE: Sistema de time - White_Blue - 17/09/2024

(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/functions/SetPlayerTeam

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(playeridFloat:amountissueridWEAPON:weaponbodypart) {
    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(playeriddamagedidFloat:amountweaponidbodypart) {
    if(GetPlayerTeam(playerid) == GetPlayerTeam(damagedid)) {
        new Float:health;
        GetPlayerHealth(damagedidhealth);

        SendClientMessage(playerid, -1"Este jogador é do seu time. Fogo amigo não é permitido!");
        SetPlayerHealth(damagedidhealth 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-weapon-config?tab=readme-ov-file#weapon-configinc
https://www.open.mp/docs/scripting/callbacks/OnPlayerGiveDamage


RE: Sistema de time - xbruno1000x - 18/09/2024

(17/09/2024 06:04)LostZinqs Escreveu: 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.


[Imagem: Screenshot-2024-09-18-at-00-32-54-open-m...r-Team.png]

Como é dito na documentação enviada, jogadores não poderão causar dano ou matar outros do mesmo time(exceto com o uso de faca). Não sei se você testou, mas em teoria já deveria estar funcionando.


RE: Sistema de time - Cifra Modder - 20/09/2024

(18/09/2024 00:36)xbruno1000x Escreveu:
(17/09/2024 06:04)LostZinqs Escreveu: 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.


[Imagem: Screenshot-2024-09-18-at-00-32-54-open-m...r-Team.png]

Como é dito na documentação enviada, jogadores não poderão causar dano ou matar outros do mesmo time(exceto com o uso de faca). Não sei se você testou, mas em teoria já deveria estar funcionando.

Creio que seja pra versão do Open MP, ou estou enganado?


RE: Sistema de time - xbruno1000x - 20/09/2024

(20/09/2024 13:48)Cifra Modder Escreveu:
(18/09/2024 00:36)xbruno1000x Escreveu:
(17/09/2024 06:04)LostZinqs Escreveu: 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.


[Imagem: Screenshot-2024-09-18-at-00-32-54-open-m...r-Team.png]

Como é dito na documentação enviada, jogadores não poderão causar dano ou matar outros do mesmo time(exceto com o uso de faca). Não sei se você testou, mas em teoria já deveria estar funcionando.

Creio que seja pra versão do Open MP, ou estou enganado?

Está enganado, na wiki do Samp original(Hospedada pelo Blast.hk) também conta com essa mensagem.

Citar:Players can not damage/kill players on the same team unless they use a knife to slit their throat. As of SA-MP 0.3x, players are also unable to damage vehicles driven by a player from the same team. This can be enabled with EnableVehicleFriendlyFire.


Link:
https://sampwiki.blast.hk/wiki/SetPlayerTeam