[Ajuda] Sistema de reservar vaga
#1

Boa tarde, eu estou tentando criar um sistema de tipo guardar vaga, por exemplo... O servidor tiver 90 slots, apenas 80 pode logar e apenas quem for Admin pode logar de boas. Criei aqui mas nгo ta funcionando ;-;

PHP код:
new varVagasServer 0;
// Quando o player consegue fazer login
varVagasServer ++;
// Quando o player desloga
varVagasServer --;
public 
OnPlayerRequestClass(playeridclassid)
{
    
TimerClearTela[playerid] = SetTimerEx("ClearChatLogin"2000true"i"playerid);
    if(
varVagasServer 1)
    {
        
KillTimer(TimerClearTela[playerid]);
        
SendClientMessage(playerid0xA9C4E4FF"Connecting to 144.217.0.35:7777...");
        
SendClientMessage(playerid0xA9C4E4FF"The server is full. Retrying...");
        
TimerServerFull[playerid] = SetTimerEx("ServerFull"3000true"i"playerid);
        return 
1;
    }
    
    if(
gPlayerLogged[playerid] == && NaoPodeLogar[playerid] == 0)
    {
        new 
File[50];
        
format(Filesizeof(File), "Contas/%s.ini"pName[playerid]);
        if(!
DOF2::FileExists(File))
        {
            
showDialogRegister(playerid);
        }
        else if(
DOF2::FileExists(File))
        {
            
showDialogLogin(playerid);
        }
    }
    return 
1;
}
BPC::ServerFull(playerid)
{
    if(
varVagasServer 1)
    {
        if(
gPlayerLogged[playerid] == && NaoPodeLogar[playerid] == 0)
        {
            new 
File[50];
            
format(Filesizeof(File), "Contas/%s.ini"pName[playerid]);
            if(!
DOF2::FileExists(File))
            {
                
KillTimer(TimerServerFull[playerid]);
                
showDialogRegister(playerid);
            }
            else if(
DOF2::FileExists(File))
            {
                
KillTimer(TimerServerFull[playerid]);
                
showDialogLogin(playerid);
            }
        }
    }
    else
    {
        
SendClientMessage(playerid0xA9C4E4FF"Connecting to 144.217.0.35:7777...");
        
SendClientMessage(playerid0xA9C4E4FF"The server is full. Retrying...");
    }
    return 
1;

Reply
#2

Tenta ae
PHP код:
#define LIMIT_PLAYER    80
new TimerConnect[MAX_PLAYERS];
public 
OnPlayerRequestClass(playeridclassid

    
TimerClearTela[playerid] = SetTimerEx("ClearChatLogin"2000true"i"playerid); 
    if(
gPlayerLogged[playerid] == && NaoPodeLogar[playerid] == 0){
        
TimerConnect[playerid] = SetTimerEx("Connecting"30001"i"playerid);
    }
    return 
1

BPC:Connecting(playerid){
    new 
File[50]; 
    
format(Filesizeof(File), "Contas/%s.ini"pName[playerid]); 
    for(new 
090i++){
        if(
== LIMIT_PLAYER){
            if(
DOF2::FileExists(File))
                if(
DOF2::GetInt(File"Admin") != 0){
                     
showDialogLogin(playerid);
                     
KillTimer(TimerConnect[playerid]);
                     return 
1;
                }
            
SendClientMessage(playerid0xA9C4E4FF"Connecting to 144.217.0.35:7777..."); 
            
SendClientMessage(playerid0xA9C4E4FF"The server is full. Retrying...");
            return 
1;
        }else{
            if(
DOF2::FileExists(File)){
                
showDialogLogin(playerid);
                
KillTimer(TimerConnect[playerid]);
            }else{
                
showDialogRegister(playerid);
                
KillTimer(TimerConnect[playerid]);
            }
        }
    }
    return 
1;

Reply
#3

PHP код:
if(jogadoresOn 80 && Admin[playerid])
{
    
//pode logar

Reply
#4

Um mйtodo:
PHP код:
#define VAGAS     (20) 
//ou use getmaxplayers
new VAGA_S;
forward SendInfor();
forward Checar();
new 
PlayersOnline;
//ver se o maluco й adm
new Admin[MAX_PLAYERS];
public 
OnGameModeInit()
{
    
SetTimer("SendInfo"60000*21);
    
VAGA_S GetMaxPlayers();
    return 
1;
}
public 
SendInfo()
{
    new 
online;
    for(new 
0<= MAX_PLAYERSi++)
        if(
IsPlayerConnected(i))
            
online += 1;
    
PlayersOnline online;    
}
public 
OnPlayerConnect(playerid)
{
    if(
PlayersOnline == VAGA_S && Admin[playerid])
        
Checar();
    return 
true;
}
public 
Checar() //kickar um nгo admim para entrada de um admin
{
    for(new 
i=0i<=MAX_PLAYERSi++)
        if(
Admin[i] < 1){
            new 
numSorteado random(i),Kick(numSorteado); SendClientMessage(numSorteado, -1#Vocк foi kickado para dar lugar a um admin)}
    
else return false;        
    return 
false;

Outro mйtodo:

PHP код:
#define NON_ADMIN (10) //vagas para nгo admin
public OnPlayerConnect(playerid)
{
    if(
PlayersOnline == VAGA_S && Admin[playerid])
        
Checar();
    if(
PlayersOnline == NON_ADMIN)
        if(
Admin[playerid] < 1)
        {
            
SendClientMessage(playerid, -1#O Servidor estб com o resto das vagas reservadas apenas а administradores);
            
Kick(playerid);
            
//se entrar os outros admins e o servidor ficar cheio por completo ai o outro sistema de retirar alguem nгo admin entra em funзгo, que no caso e o VAGA_S ou VAGAS
        
}
    return 
true;

AGORA TU EDITAS DA FORMA DE SEU GAMEMODE
Reply
#5

E como eu faзo se for por nick? Tipo... ao invйs de o cara ser Admin o nick dele estar liberado pra logar dps que tiver 80 on
Reply
#6

Quote:
Originally Posted by SmokeKiLL
Посмотреть сообщение
E como eu faзo se for por nick? Tipo... ao invйs de o cara ser Admin o nick dele estar liberado pra logar dps que tiver 80 on
Alocando o nome em alguma variбvel e fazendo a verificaзгo com strcmp.
Reply
#7

Quote:
Originally Posted by SmokeKiLL
Посмотреть сообщение
E como eu faзo se for por nick? Tipo... ao invйs de o cara ser Admin o nick dele estar liberado pra logar dps que tiver 80 on
Код:
new nome[MAX_PLAYER_NAME]; 
GetPlayerName(playerid, nome, MAX_PLAYER_NAME); 
if(strcmp("seunick", nome)){
SendClientMessage(playerid, -1, "*O servidor estб cheio e as demais vagas estгo reservadas aos administradores, tente novamante!");
Kick(playerid);
return 1;
}
Nгo testei
Reply
#8

Quote:
Originally Posted by Jonorusc
Посмотреть сообщение
Um mйtodo:
PHP код:
#define VAGAS     (20) 
//ou use getmaxplayers
new VAGA_S;
forward SendInfor();
forward Checar();
new 
PlayersOnline;
//ver se o maluco й adm
new Admin[MAX_PLAYERS];
public 
OnGameModeInit()
{
    
SetTimer("SendInfo"60000*21);
    
VAGA_S GetMaxPlayers();
    return 
1;
}
public 
SendInfo()
{
    new 
online;
    for(new 
0<= MAX_PLAYERSi++)
        if(
IsPlayerConnected(i))
            
online += 1;
    
PlayersOnline online;    
}
public 
OnPlayerConnect(playerid)
{
    if(
PlayersOnline == VAGA_S && Admin[playerid])
        
Checar();
    return 
true;
}
public 
Checar() //kickar um nгo admim para entrada de um admin
{
    for(new 
i=0i<=MAX_PLAYERSi++)
        if(
Admin[i] < 1){
            new 
numSorteado random(i),Kick(numSorteado); SendClientMessage(numSorteado, -1#Vocк foi kickado para dar lugar a um admin)}
    
else return false;        
    return 
false;

Outro mйtodo:

PHP код:
#define NON_ADMIN (10) //vagas para nгo admin
public OnPlayerConnect(playerid)
{
    if(
PlayersOnline == VAGA_S && Admin[playerid])
        
Checar();
    if(
PlayersOnline == NON_ADMIN)
        if(
Admin[playerid] < 1)
        {
            
SendClientMessage(playerid, -1#O Servidor estб com o resto das vagas reservadas apenas а administradores);
            
Kick(playerid);
            
//se entrar os outros admins e o servidor ficar cheio por completo ai o outro sistema de retirar alguem nгo admin entra em funзгo, que no caso e o VAGA_S ou VAGAS
        
}
    return 
true;

AGORA TU EDITAS DA FORMA DE SEU GAMEMODE
Show
Reply
#9

Gostei o cara usa poucos codes mas й objetivo
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)