[Tutorial] /evento [criar/fechar/armas/ir]
#1

Criei ele em um pedido
Download arquivo pwn.
Usei dcmd e strtok
PHP код:
new bool:EventoExistindo;
new 
bool:IsplayerInEvento[MAX_PLAYERS];
new 
Float:EventoXFloat:EventoYFloat:EventoZEventoInterior;
#define EVENTO 1
#define dcmd(%1,%2) if (!strcmp((%2)[1], #%1, true, (strlen((#%1)))) && ((((%2)[(strlen((#%1))) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%2)[(strlen((#%1))) + 1] == ' ') && (dcmd_%1(playerid, (%2)[(strlen((#%1))) + 2]))))) return 1
public OnPlayerCommandText(playeridcmdtext[])
{
    
dcmd(eventocmdtext);
    return 
0;
}
dcmd_evento(playeridparams[])
{
    new 
tmp[256], idxcmd;
    new 
string[128];
    
tmp strtok(paramsidx);
    if(!
strlen(tmp))
        return 
SendClientMessage(playerid,-1,"Uso: /evento [criar/fechar/armas/ir]");
    if(
strcmp(tmp"criar"true)==0)
        
cmd 1;
    else if(
strcmp(tmp"fechar"true)==0)
        
cmd 2;
    else if(
strcmp(tmp"armas"true)==0)
        
cmd 3;
    else if(
strcmp(tmp"ir"true)==0)
    
cmd 4;
    else return 
SendClientMessage(playerid,-1,"Uso: /evento [criar/fechar/armas/ir]");
    if(
cmd == 1)
    {
        if(!
IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,"Vocк nгo й um administrador do servidor!");
        
ShowPlayerDialog(playeridEVENTODIALOG_STYLE_INPUT"Criar evento!""Digite um nome para o evento:""Avanзar""Cancelar");
        if(
EventoExistindo == true) return SendClientMessage(playerid, -1"Jб tem um evento criado /evento fechar");
        
EventoExistindo true;
    }
    if(
cmd == 2)
    {
        if(!
IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,"Vocк nгo й um administrador do servidor!");
        if(
EventoExistindo == false) return SendClientMessage(playerid,-1"[ ERROR ] >>Nem um evento existente!");
        new 
str[128]; new nome[MAX_PLAYER_NAME]; GetPlayerName(playeridnomesizeof(nome));
        
format(strsizeof(str), "O administrador %s fechou o evento que estava ativo"nome);
    }
    if(
cmd == 3)
    {
        if(!
IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,"Vocк nгo й um administrador do servidor!");
        if(
EventoExistindo == false) return SendClientMessage(playerid,-1"[ ERROR ] >>Nem um evento existente!");
        
ShowPlayerDialog(playeridEVENTO+1DIALOG_STYLE_INPUT"Evento Armas""Escolha o id da arma que vocК dara a quem estб no evento:""Avanзar""Cancelar");
    }
    if(
cmd == 4)
    {
        if(
EventoExistindo == false) return SendClientMessage(playerid,-1,"Nгo hб nenhum evento acontecendo!");
        
IsplayerInEvento[playerid] = true;
        
SetPlayerPos(playeridEventoXEventoYEventoZ);
        
SetPlayerInterior(playeridEventoInterior);
        
GameTextForPlayer(playerid"Bem vindo ao evento"1000);
    }
    return 
1;
}
strtok(const string[], &index)
{
    new 
length strlen(string);
    while ((
index length) && (string[index] <= ' '))
    {
        
index++;
    }
 
    new 
offset index;
    new 
result[20];
    while ((
index length) && (string[index] > ' ') && ((index offset) < (sizeof(result) - 1)))
    {
        
result[index offset] = string[index];
        
index++;
    }
    
result[index offset] = EOS;
    return 
result;
}
public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
     if(
dialogid == EVENTO)
    {
        if(!
response)
        {
            
EventoExistindo false;
            
SendClientMessage(playerid, -1"[EVENTO] >> Vocк cancelou o evento!");
        }
        else
        {
            
GetPlayerPos(playeridEventoXEventoYEventoZ);  
            
EventoInterior GetPlayerInterior(playerid);
            new 
nome[MAX_PLAYER_NAME];    new str[128];
            
GetPlayerName(playeridnomesizeof(nome));
            
format(strsizeof(str), "O administrador %s Criou um evento de: %s | /evento ir"nomeinputtext);
            
SendClientMessageToAll(-1str);
        }
    }
    if(
dialogid == EVENTO+1)
    {
        if(!
response)
        {
            
SendClientMessage(playerid, -1"[EVENTO] Comando cancelado");
        }
        else
        {
            new 
armaamo;
            
arma strval(inputtext);
            
amo 99999;
            if(
arma ) return SendClientMessage(playerid, -1"[EVENTO - ERROR] >> Nгo tem armas com id 0");
            new 
str[128]; new nome[MAX_PLAYER_NAME], narma[15]; GetPlayerName(playeridnomesizeof(nome));
            
GetWeaponName(armanarmasizeof(narma));
            
format(strsizeof(str), "O administrador %s deu %s a todos no evento!"nomenarma);
            
SendClientMessageToAll(-1str);
            for(new 
0MAX_PLAYERSi++)
            {
                if(
IsplayerInEvento[i] == true)
                {
                
GivePlayerWeapon(iarmaamo); //quem estiver de /evento ir ira ganha
                
}
            }
        }
    }
     return 
1;

Reply
#2

Nem sabia que podia usar os dialogs somente com uma define EVENTO+1 lgl
Reply
#3

Ficou bacana mais, strtok...
Reply
#4

... se fosse em zcmd eu daria rep.
Reply
#5

qual a diferencia de dcmd pra zcmd?
Reply
#6

Processadores de comandos diferentes, e o uso tambem.
Reply
#7

Meio dificil alguem usar dcmd hoje em dia. Mas parabйns pela iniciativa.
Reply
#8

Mas fico bom eu testei aqui
Reply
#9

й so passa pra ZCMD, vai mudar nada nгo nos comandos!
Reply
#10

Muito bom!
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)