- Código:
new bool:EventoExistindo;
new bool:IsplayerInEvento[MAX_PLAYERS];
new Float:EventoX, Float:EventoY, Float:EventoZ, EventoInterior;
#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(playerid, cmdtext[])
{
dcmd(evento, cmdtext);
return 0;
}
dcmd_evento(playerid, params[])
{
new tmp[256], idx, cmd;
new string[128];
tmp = strtok(params, idx);
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(playerid, EVENTO, DIALOG_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(playerid, nome, sizeof(nome));
format(str, sizeof(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(playerid, EVENTO+1, DIALOG_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(playerid, EventoX, EventoY, EventoZ);
SetPlayerInterior(playerid, EventoInterior);
GameTextForPlayer(playerid, "Bem vindo ao evento", 100, 0);
}
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(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == EVENTO)
{
if(!response)
{
EventoExistindo = false;
SendClientMessage(playerid, -1, "[EVENTO] >> Vocк cancelou o evento!");
}
else
{
GetPlayerPos(playerid, EventoX, EventoY, EventoZ);
EventoInterior = GetPlayerInterior(playerid);
new nome[MAX_PLAYER_NAME]; new str[128];
GetPlayerName(playerid, nome, sizeof(nome));
format(str, sizeof(str), "O administrador %s Criou um evento de: %s | /evento ir", nome, inputtext);
SendClientMessageToAll(-1, str);
}
}
if(dialogid == EVENTO+1)
{
if(!response)
{
SendClientMessage(playerid, -1, "[EVENTO] Comando cancelado");
}
else
{
new arma, amo;
arma = strval(inputtext);
amo = 99999;
if(arma < 0 ) return SendClientMessage(playerid, -1, "[EVENTO - ERROR] >> Nгo tem armas com id 0");
new str[128]; new nome[MAX_PLAYER_NAME], narma[15]; GetPlayerName(playerid, nome, sizeof(nome));
GetWeaponName(arma, narma, sizeof(narma));
format(str, sizeof(str), "O administrador %s deu %s a todos no evento!", nome, narma);
SendClientMessageToAll(-1, str);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsplayerInEvento[i] == true)
{
GivePlayerWeapon(i, arma, amo); //quem estiver de /evento ir ira ganha
}
}
}
}
return 1;
}
Creditos: Jonorusc