[Ajuda] Balanceamento de players
#1

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..
Reply
#2

Esse cуdigo simplesmente nгo faz sentido.
Reply
#3

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

wtf que cуdigo й esse mano kkkkk
Reply
#5

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
Reply
#6

@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;
        }
    }
Reply
#7

Код:
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...
Reply
#8

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.
Reply
#9

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;

Reply
#10

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

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!
Reply
#12

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
        
;

Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)