Portal SAMP
[Ajuda] Como contar os players em uma arena? - 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] Como contar os players em uma arena? (/showthread.php?tid=4872)



Como contar os players em uma arena? - LostZinqs - 07/09/2024

Bom dia, como faço pra mostrar o tanto de player que esta em uma arena especifica? exemplo, vamos supor que eu crie a arena de M4, e boto ela pra ser no virtual word 20, e dai eu quero mostrar quantas pessoas estao la quando o player for entrar. 

Exemplo: https://imgur.com/a/1X7SxKM


RE: Ajuda - k2bi_YT - 07/09/2024

Código PHP:
new Total 0//Defino a variavel que ira amarzenar a quantia de players do virtualworld
for(new 0!= GetPlayerPoolSize(); ++i//Loop que ira passar desde ID 0 até o ultimo id conectado no servidor | Variavel 'i' pode ser comparado como uso de plyerid
{
    if(
GetPlayerVirtualWorld(i) == 20 //Aqui ira checar se o virtualworld do player é igual à 20)
     
Total++;//Somara +1 se a condição for verdadeira para cada player




RE: Ajuda - LostZinqs - 07/09/2024

(07/09/2024 11:02)k2bi_YT Escreveu:
Código PHP:
new Total 0//Defino a variavel que ira amarzenar a quantia de players do virtualworld
for(new 0!= GetPlayerPoolSize(); ++i//Loop que ira passar desde ID 0 até o ultimo id conectado no servidor | Variavel 'i' pode ser comparado como uso de plyerid
{
    if(GetPlayerVirtualWorld(i) == 20 //Aqui ira checar se o virtualworld do player é igual à 20)
     Total++;//Somara +1 se a condição for verdadeira para cada player


mas como faço pra deixar igual aquele da foto ali?


RE: Ajuda - xbruno1000x - 07/09/2024

(07/09/2024 11:45)LostZinqs Escreveu:
(07/09/2024 11:02)k2bi_YT Escreveu:
Código PHP:
new Total 0//Defino a variavel que ira amarzenar a quantia de players do virtualworld
for(new 0!= GetPlayerPoolSize(); ++i//Loop que ira passar desde ID 0 até o ultimo id conectado no servidor | Variavel 'i' pode ser comparado como uso de plyerid
{
    if(GetPlayerVirtualWorld(i) == 20 //Aqui ira checar se o virtualworld do player é igual à 20)
     Total++;//Somara +1 se a condição for verdadeira para cada player


mas como faço pra deixar igual aquele da foto ali?

Cria uma dialog e dependendo da resposta você seta apenas uma determinada arma.


RE: Ajuda - LostZinqs - 07/09/2024

(07/09/2024 17:41)xbruno1000x Escreveu:
(07/09/2024 11:45)LostZinqs Escreveu:
(07/09/2024 11:02)k2bi_YT Escreveu:
Código PHP:
new Total 0//Defino a variavel que ira amarzenar a quantia de players do virtualworld
for(new 0!= GetPlayerPoolSize(); ++i//Loop que ira passar desde ID 0 até o ultimo id conectado no servidor | Variavel 'i' pode ser comparado como uso de plyerid
{
    if(GetPlayerVirtualWorld(i) == 20 //Aqui ira checar se o virtualworld do player é igual à 20)
     Total++;//Somara +1 se a condição for verdadeira para cada player


mas como faço pra deixar igual aquele da foto ali?

Cria uma dialog e dependendo da resposta você seta apenas uma determinada arma.

 isso eu tlgd, digo tipo, como fazer pra eu botar oque ele mandou ali


RE: Ajuda - White_Blue - 07/09/2024

(07/09/2024 19:24)LostZinqs Escreveu:
(07/09/2024 17:41)xbruno1000x Escreveu:
(07/09/2024 11:45)LostZinqs Escreveu:
(07/09/2024 11:02)k2bi_YT Escreveu:
Código PHP:
new Total 0//Defino a variavel que ira amarzenar a quantia de players do virtualworld
for(new 0!= GetPlayerPoolSize(); ++i//Loop que ira passar desde ID 0 até o ultimo id conectado no servidor | Variavel 'i' pode ser comparado como uso de plyerid
{
    if(GetPlayerVirtualWorld(i) == 20 //Aqui ira checar se o virtualworld do player é igual à 20)
     Total++;//Somara +1 se a condição for verdadeira para cada player


mas como faço pra deixar igual aquele da foto ali?

Cria uma dialog e dependendo da resposta você seta apenas uma determinada arma.

 isso eu tlgd, digo tipo, como fazer pra eu botar oque ele mandou ali

Você deve colocar onde for necessário. Dependendo do seu sistema e da forma como você pretende implementá-lo, o código que o K2bi forneceu deve servir como uma boa base para começar.


RE: Como contar os players em uma arena? - xbruno1000x - 08/09/2024

Fiz um script rápido com a ajuda do GPT e pedi para que ele documentasse tudo com comentários. Acho que isso vai te dar uma ótima base:

Código:
#include <a_samp>
#include <zcmd>

#define DIALOG_ARENAS 1

// Array para armazenar a contagem de jogadores em cada arena
new gArenaPlayers[11];

// Função para exibir a dialog com a contagem real
stock ShowArenaDialog(playerid)
{
    new string[512];
    
    format(string, sizeof(string),
        "Nome Arena\tPlayers\n"
        "[1] Arena Mobile\t%d\n"
        "[2] Full M4 (1)\t%d\n"
        "[3] Full AK\t%d\n"
        "[4] PT DESERT\t%d\n"
        "[5] PT Silenciada\t%d\n"
        "[6] Arena Prédio\t%d\n"
        "[7] Esgoto\t%d\n"
        "[8] Ammunation\t%d\n"
        "[9] Sniper\t%d\n"
        "[10] Arena Doze\t%d\n"
        "[11] C-Bug (PC)\t%d",
        gArenaPlayers[0], gArenaPlayers[1], gArenaPlayers[2], gArenaPlayers[3],
        gArenaPlayers[4], gArenaPlayers[5], gArenaPlayers[6], gArenaPlayers[7],
        gArenaPlayers[8], gArenaPlayers[9], gArenaPlayers[10]
    );
    
    ShowPlayerDialog(playerid, DIALOG_ARENAS, DIALOG_STYLE_TABLIST, "Arenas do servidor: 10", string, "Entrar", "Voltar");
}

public OnPlayerConnect(playerid)
{
    // Quando o jogador conectar, mostra a dialog
    ShowArenaDialog(playerid);
    return 1;
}

// Função para atualizar a arena de um jogador
stock SetPlayerArena(playerid, arenaid)
{
    if(arenaid >= 0 && arenaid < sizeof(gArenaPlayers)) // Validação do ID da arena
    {
        // Adiciona o jogador à arena e atualiza a contagem
        gArenaPlayers[arenaid]++;
    }
}

// Função para remover o jogador da arena
stock RemovePlayerFromArena(playerid, arenaid)
{
    if(arenaid >= 0 && arenaid < sizeof(gArenaPlayers)) // Validação do ID da arena
    {
        if(gArenaPlayers[arenaid] > 0) // Garante que não fique negativo
        {
            gArenaPlayers[arenaid]--;
        }
    }
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_ARENAS)
    {
        if(response) // Se o jogador clicar em "Entrar"
        {
            // O 'listitem' será o índice da arena
            SetPlayerArena(playerid, listitem);
            SendClientMessage(playerid, -1, "Você entrou na arena selecionada!");
            ShowArenaDialog(playerid); // Atualiza a dialog com as novas contagens
        }
        else // Se o jogador clicar em "Voltar"
        {
            SendClientMessage(playerid, -1, "Você voltou para o menu anterior.");
        }
    }
    return 1;
}

É literalmente fazer alguns ajustes e já vai ficar funcional.


RE: Como contar os players em uma arena? - LostZinqs - 08/09/2024

(08/09/2024 02:38)xbruno1000x Escreveu: Fiz um script rápido com a ajuda do GPT e pedi para que ele documentasse tudo com comentários. Acho que isso vai te dar uma ótima base:

Código:
#include <a_samp>
#include <zcmd>

#define DIALOG_ARENAS 1

// Array para armazenar a contagem de jogadores em cada arena
new gArenaPlayers[11];

// Função para exibir a dialog com a contagem real
stock ShowArenaDialog(playerid)
{
    new string[512];
   
    format(string, sizeof(string),
        "Nome Arena\tPlayers\n"
        "[1] Arena Mobile\t%d\n"
        "[2] Full M4 (1)\t%d\n"
        "[3] Full AK\t%d\n"
        "[4] PT DESERT\t%d\n"
        "[5] PT Silenciada\t%d\n"
        "[6] Arena Prédio\t%d\n"
        "[7] Esgoto\t%d\n"
        "[8] Ammunation\t%d\n"
        "[9] Sniper\t%d\n"
        "[10] Arena Doze\t%d\n"
        "[11] C-Bug (PC)\t%d",
        gArenaPlayers[0], gArenaPlayers[1], gArenaPlayers[2], gArenaPlayers[3],
        gArenaPlayers[4], gArenaPlayers[5], gArenaPlayers[6], gArenaPlayers[7],
        gArenaPlayers[8], gArenaPlayers[9], gArenaPlayers[10]
    );
   
    ShowPlayerDialog(playerid, DIALOG_ARENAS, DIALOG_STYLE_TABLIST, "Arenas do servidor: 10", string, "Entrar", "Voltar");
}

public OnPlayerConnect(playerid)
{
    // Quando o jogador conectar, mostra a dialog
    ShowArenaDialog(playerid);
    return 1;
}

// Função para atualizar a arena de um jogador
stock SetPlayerArena(playerid, arenaid)
{
    if(arenaid >= 0 && arenaid < sizeof(gArenaPlayers)) // Validação do ID da arena
    {
        // Adiciona o jogador à arena e atualiza a contagem
        gArenaPlayers[arenaid]++;
    }
}

// Função para remover o jogador da arena
stock RemovePlayerFromArena(playerid, arenaid)
{
    if(arenaid >= 0 && arenaid < sizeof(gArenaPlayers)) // Validação do ID da arena
    {
        if(gArenaPlayers[arenaid] > 0) // Garante que não fique negativo
        {
            gArenaPlayers[arenaid]--;
        }
    }
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_ARENAS)
    {
        if(response) // Se o jogador clicar em "Entrar"
        {
            // O 'listitem' será o índice da arena
            SetPlayerArena(playerid, listitem);
            SendClientMessage(playerid, -1, "Você entrou na arena selecionada!");
            ShowArenaDialog(playerid); // Atualiza a dialog com as novas contagens
        }
        else // Se o jogador clicar em "Voltar"
        {
            SendClientMessage(playerid, -1, "Você voltou para o menu anterior.");
        }
    }
    return 1;
}

É literalmente fazer alguns ajustes e já vai ficar funcional.

deu alguns erros, você sabe me dizer oque pode ser?

https://imgur.com/a/6cw6rXA


RE: Como contar os players em uma arena? - xbruno1000x - 08/09/2024

Quais erros você se refere? No seu código da imagem só deu pra ver os erros de boa prática, como falta de indentação no código e a dialog utilizando o ID ao invés de uma definição.