SA-MP Forums Archive
[Ajuda] Balanceamento de players - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Balanceamento de players (/showthread.php?tid=604531)



Balanceamento de players - xDeadPoolx - 06.04.2016

Iaii galera, suave?

Eu tenho uma duvida sobre balanceamento de players para eventos e tal...

Tipo, minha ideia й assim:

PHP код:
new Player_1;
new 
Player_2;
      if(
Player_1 == 2)
        
SetPlayerTeam(playeridPlayer_2);
    else if(
Player_2 == 4)
        
SetPlayerTeam(playeridPlayer_1);
    else if(
Player_1 == 6)
        
SetPlayerTeam(playeridPlayer_2); 
Mas deve ter um mais eficiente de vdd e mais otimizado..


Re: Balanceamento de players - bruxo00 - 06.04.2016

Esse cуdigo simplesmente nгo faz sentido.


Re: Balanceamento de players - xDeadPoolx - 06.04.2016

Quote:
Originally Posted by bruxo00
Посмотреть сообщение
Esse cуdigo simplesmente nгo faz sentido.
Uma IDEIA, nгo й pra fazer sentido, й apenas um exemplo!


Re: Balanceamento de players - YtZ - 06.04.2016

wtf que cуdigo й esse mano kkkkk


Re: Balanceamento de players - StreetGT - 06.04.2016

A idea de balanceamento pode ser feita a partir da ideia de uma Stack.


Terб de criar 2 vetores que representaram cada um uma Stack, um da equipa X e Y com os id's dos jogadores das equipas. Depois й so fazer verificaзхes, se uma Stack neste caso o vetor tiver mais 2 do que a outra Stack/vector, faz pop e push para a outra stack. A unica diferenзa й que uma Stack o pop й sempre feito na cabeзa e o push para a cauda. Com esta "ideia" vocк pode fazer um "random pop" nуs jogadores a jogar.

Tem a teoria, agora й saber a linguagem para implementar


Re: Balanceamento de players - Dayvison_ - 06.04.2016

@StreetGT poucas pessoas vao entender isto e.e.

@Topic podes fazer algo como.
pawn Код:
new atual;
    foreach(new i: Player)
    {
        ++atual;
        switch(atual)
        {
            case 1: SetPlayerTeam(i, TIME_1);
            case 2: SetPlayerTeam(i, TIME_2);
            case 3:
            {
                atual = 0;
                SetPlayerTeam(i, TIME_3);
            }
            default:
                atual = 0;
        }
    }



Re: Balanceamento de players - 3War - 07.04.2016

Код:
new Team1,Team2;

if(Team1 == Team2){
      SetPlayerTeam(playerid,TIME_1);
      Team1++;
}else if(Team1 > Team2){
      SetPlayerTeam(playerid,TIME_2);
      Team2++;
}else if(Team1 < Team2){
      SetPlayerTeam(playerid,TIME_1);
      Team1++;
}
Й basicamente a mesma coisa que o Day fez...


Re: Balanceamento de players - GabrielCOP - 07.04.2016

Fragmento removido do evento Policiais x Zumbis, do servidor Cidade Social RPG:

pawn Код:
if(!Players_Evento || (Players_Evento >= 2 && Players_Evento & 1))
{
    Time_PxZ[playerid] = 1;
}
else
{
    Time_PxZ[playerid] = 2;
}
Explicando: Se nгo houver players no evento ainda quando ele vier, ou se houver 2 ou mais players no evento e esta quantidade for um nъmero primo, como 3, 5 e 7, ele serб setado para o time 1.


Re: Balanceamento de players - xDeadPoolx - 07.04.2016

Quote:
Originally Posted by GabrielCOP
Посмотреть сообщение
Fragmento removido do evento Policiais x Zumbis, do servidor Cidade Social RPG:

pawn Код:
if(!Players_Evento || (Players_Evento >= 2 && Players_Evento & 1))
{
    Time_PxZ[playerid] = 1;
}
else
{
    Time_PxZ[playerid] = 2;
}
Explicando: Se nгo houver players no evento ainda quando ele vier, ou se houver 2 ou mais players no evento e esta quantidade for um nъmero primo, como 3, 5 e 7, ele serб setado para o time 1.
Cara, essa tecnica й mais insana e simples q jб vi!
Uma espйcie de loop "sem loop"! Realmente bom e eficiente.
Segue os testes:

PHP код:
new Players_Evento;
new 
Time_PxZ;
new 
ContarPlayers[2];
public 
OnGameModeInit()
{
    
SetTimer("x"2000true);
    
    return 
1;
}
forward x();
public 
x()
{
    
Players_Evento ++;
    
    if(!
Players_Evento || (Players_Evento >= && Players_Evento 1))
    {
        
Time_PxZ 1;
        
ContarPlayers[0] ++;
        
        
printf("+1 equipe 1 | %i total"ContarPlayers[0]);
    }
    else
    {
        
Time_PxZ 2;
        
ContarPlayers[1] ++;
        
        
printf("+1 equipe 2 | %i total"ContarPlayers[1]);
    }
    return 
1;




Re: Balanceamento de players - GabrielCOP - 07.04.2016

O correto seria colocar o Players_Evento no final da callback... Se bem que nгo faz tanta diferenзa,


Re: Balanceamento de players - xDeadPoolx - 07.04.2016

Quote:
Originally Posted by GabrielCOP
View Post
O correto seria colocar o Players_Evento no final da callback... Se bem que nгo faz tanta diferenзa,
Й q na vdd como eu to apenas testando, como vc mesmo disse, pouco importa.

Segue a minha lуgica se baseando pela do GM:

PHP Code:
new Ir_Evento;
new 
Dividir_Times;
new 
ContarPlayers[2];
public 
OnGameModeInit()
{
    
SetTimer("x"1000true);
    
    return 
1;
}
forward x();
public 
x()
{
    
Ir_Evento ++;
    
    if(
Ir_Evento == || Dividir_Times == 1)
    {
        
ContarPlayers[0] ++;
        
        
Dividir_Times 2;
        
        
printf("+1 equipe 1 | %i total"ContarPlayers[0]);
    }
    else if(
Dividir_Times == 2)
    {
        
ContarPlayers[1] ++;
        
        
Dividir_Times 1;
        
        
printf("+1 equipe 2 | %i total"ContarPlayers[1]);
    }
    return 
1;

N sei se й tгo funcional quano ao do GM, porйm esse divide igualmente!

Mt obrigado pela ajuda mano. Reputado!


Re: Balanceamento de players - F1N4L - 07.04.2016

Bacana, aн para usar o comando й sу usar uma condicional:

PHP Code:
CMD:evento(playerid)
{
    if(
Dividir_Times == || Dividir_Times == 1)
        return 
Dividir_Times 2,
        
//resto do cуdigo
        
;
    else if(
Dividir_Times == 2)
        return 
Dividir_Times 1,
        
//resto do cуdigo
        
;