new Administrador[MAX_PLAYERS];
/*
Explicaзгo:
new = Cria a variбvel.
Administrador = Nome da variбvel.
MAX_PLAYERS = Numero maximo de players do servidor.
*/
new Trabalhando[MAX_PLAYERS];
// A Explicaзгo da primeira variavel se encaixa nessa tambem..
DOF2_GetString // Geta um valor de uma string (como o valor %s).
DOF2_SetString // Seta um valor de uma string.
DOF2_GetInt // Geta um valor numerico.
DOF2_SetInt // Seta um valor numerico.
DOF2_CreateFile // Cria um arquivo.
DOF2_FileExists // Checa se um arquivo existe.
DOF2_SaveFile // Salva um arquivo.
public OnPlayerConnect(playerid) {
Trabalhando[playerid] = 0; // Caso o player seja administrador entrar em modo jogo..
new file[70]; // Variavel que irб hospedar os dados do player.
new snd[MAX_PLAYER_NAME]; // Variavel que irб hospedar o nome do player.
GetPlayerName(playerid, snd, sizeof snd); // Funзгo que geta o nome do player e hospeda na variavel snd.
format(file,sizeof file,"Admins/%s.ini",snd); // Irб hospedar os dados do arquivo Admins/nomedoplayer.ini na variavel file.
if(DOF2_FileExists(file)) { // Se o arquivo existir..
Administrador[playerid] = DOF2_GetInt(file,"Admin");
/*
Aqui irб hospedar o valor da linha 'Admin' do arquivo hospedado na variavel 'file' na variavel Administrador que criamos no comeзo..
*/
}
else if(!DOF2_FileExists(file)) { // Se o arquivo nгo existir..
DOF2_CreateFile(file); // Cria o arquivo hospedado na variavel file.
DOF2_SetInt(file,"Admin",0); // Seta a linha 'Admin' para o valor '0' que seria sem admin.
DOF2_SaveFile(); // Irб salvar o arquivo acima.
Administrador[playerid] = DOF2_GetInt(file,"Admin");
/*
Acima criamos e carregamos o arquivo ao mesmo tempo..
*/
}
return true;
}
if(Administrador[playerid] == 0) return SendClientMessage(playerid,0xC0C0C0AA,"Vocк nгo й um administrador!");
// Isso checa se o player que executou o comando й administrador ou nгo..
CMD:admins(playerid,params[]) {
#pragma unused params
new string[128];
for(new x = 0; x < MAX_PLAYERS; x++) {
if(Administrador[i] >= 1) {
format(string, sizeof string, "• Admin: %s Nivel: [Normal] Modo: [%s]",Trabalhando[i] ? ("Trabalhando") : ("Jogando"));
SendClientMessage(playerid, -1, string);
}
if(IsPlayerAdmin(i)) {
format(string, sizeof string, "• Admin: %s Nivel: [RCON] Modo: [%s]",Trabalhando[i] ? ("Trabalhando") : ("Jogando"));
SendClientMessage(playerid, -1, string);
}
}
return 1;
}
CMD:trabalhar(playerid,params[]) {
#pragma unused params
new string[128], snd[MAX_PLAYER_NAME];
GetPlayerName(playerid, snd, sizeof snd);
if(Administrador[playerid] == 0 || !IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xC0C0C0AA,"Vocк nгo й um administrador!");
if(Trabalhando[playerid] == 0) {
SetPlayerHealth(playerid, cellmax);
Trabalhando[playerid] = 1;
}
else if(Trabalhando[playerid] == 1) {
SetPlayerHealth(playerid, 100);
Trabalhando[playerid] = 0;
}
format(string, sizeof string, ">> O Administrador %s acaba de %s.",snd,Trabalhando[playerid] ? ("entrar no modo trabalho") : ("saiu do modo trabalho"));
SendClientMessageToAll(-1,string);
return 1;
}
CMD:kick(playerid,params[]) {
new id,motivo[128],string[128],snd[MAX_PLAYER_NAME];
if(Administrador[playerid] == 0 || !IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xC0C0C0AA,"Vocк nгo й um administrador!");
if(Trabalhando[playerid] == 0) return SendClientMessage(playerid, 0xC0C0C0AA, "Use: /trabalhar");
if(sscanf(params,"us",id,motivo)) return SendClientMessage(playerid, 0xC0C0C0AA, "Use: /kick [playerid] [motivo]");
GetPlayerName(id,snd,sizeof snd);
format(string, sizeof string, ">> O Player %s foi kickado por %s.",snd,motivo);
SendClientMessageToAll(-1,string);
Kick(id);
return 1;
}
public OnPlayerConnect(playerid) {
Trabalhando[playerid] = 0;
return true;
}
CMD:trabalhar(playerid,params[]) {
#pragma unused params
CMD:trabalhar(playerid) {
new Trabalhando[MAX_PLAYERS];
//MAX_PLAYERS nгo seria o nъmero maximo de players neste caso, mas sim o tamanho do нndice de seu vetor! Tornando ъnico um valor para cada jogador de seu servidor!
if(Administrador[playerid] == 0 && !IsPlayerAdmin(playerid)) //no caso se analisar pela tabela verdade as duas condiзхes devem ser verdadeiras!
//use
if(Administrador[playerid] == 0 || !IsPlayerAdmin(playerid))
for(new x = 0; x < MAX_PLAYERS; x++)
static i;
for ( i = GetMaxPlayers() - 1; i > -1; i-- )
Faltou:
pawn Код:
pawn Код:
pawn Код:
pawn Код:
@edit2 pawn Код:
@edit3 Modo lento. pawn Код:
pawn Код:
|
Desculpas os erros,
Nгo conhecia o loop mais rapido, Esqueci do trabalhando, E sу tentei ajudar.. |
Ok tenho uma forma mais otimizada para o comando /admins, porem tenho uma pequena duvida quanto a opereзгo ternaria, quando tiver certeza posto o cуdigo para vocк
Fora isto o tutorial esta muito simples, mas esta bom. |
Muito bom o tutorial ! dar muito bem para entender , e criar outros sistemas . +rep. ..
|
@edit3
Modo lento. pawn Код:
pawn Код:
|
public OnFilterScriptInit()
{
static _debug;
_debug = GetTickCount();
for(new i; i < 100000; ++i)
{
static a;
for ( a = GetMaxPlayers() - 1; a > -1; a-- )
{
}
}
printf(#Teste 1: %d,GetTickCount() - _debug);
_debug = GetTickCount();
for(new i; i < 100000; ++i)
{
for( new a = MAX_PLAYERS - 1; a > -1; --a)
{
}
}
printf(#Teste 2: %d,GetTickCount() - _debug);
}
Errado, jб testei isto a tempos e й errado afirmar isto.
o segundo й 2 vezes mais rбpido. |
for(new i_ = 0; i_ < GetMaxPlayers(); i_++)
xisde mбs ao por ambos em GetMaxPlayers o segundos feito por vocк se torna pouco melhor |
(GetMaxPlayers() - 1) - 270
o total de slots no seu servidor й modificado para dar tal resultado.(abaixo de 230 slots). Caso seja maior que 230 slots o 2 loop sera mais rбpido mesmo percorrendo os 500 slots que jб й prй-definido.
Basta modificar meu cуdigo acima que claramente foi mal compreendido, por este abaixo. PHP код:
|
Nгo й desafio, й uma afirmaзгo, pois jб testei e sei o resultado final. lol.
|
[21:32:18] Teste 1: 1738
[21:32:18] Teste 2: 838