pawn Код:
/* ! FILTERSCRIPT DE ATENDIMENTO DESENVOLVIDO POR SHADOWW5 !
! FILTERSCRIPT DE ATENDIMENTO DESENVOLVIDO POR SHADOWW5 !
Contato: http://*******/iT6xEw
Contato: http://*******/iT6xEw
POSTAGEM ORIGINAL: https://sampforum.blast.hk/showthread.ph...pid1299637
NAO RETIRE OS CREDITOS !! NAO RETIRE OS CREDITOS !!
NAO RETIRE OS CREDITOS !! NAO RETIRE OS CREDITOS !!*/ #include <a_samp>#include <zcmd>#include <dini>forward Msgs
();
new str
[128];
new Fila
= 1;
new bool:Helper
[MAX_PLAYERS
];
new Atendimentos
[MAX_PLAYERS
];
new Senha
[MAX_PLAYERS
];
new Cores
[6] = { 0xE02A2AFF, 0x3CE02AFF, 0xED8E12FF, 0xED12BAFF, 0x4912EDFF, 0x12EDAFFF
};
#define CINZA 0xD6D6D6FF#define VERMELHO 0xFF0000FF#define AMARELO 0xF7E200FF#define LARANJA 0xE89200FFpublic OnFilterScriptInit
(){ print("--------------------------------------------");
print(" Sistema de Atendimento criado por Shadoww5");
print(" CARREGADO COM SUCESSO !");
print(" Contato: http://*******/iT6xEw");
print("--------------------------------------------");
if(!fexist("Atendimentos.txt")) { dini_Create
("Atendimentos.txt");
dini_Set
("Atendimentos.txt",
"Recorde - Helper",
"---");
dini_IntSet
("Atendimentos.txt",
"Recorde - Atendimentos",
0);
} if(!fexist("Atendentes.txt")) { dini_Create
("Atendentes.txt");
dini_Set
("Atendentes.txt",
"ADMINISTRADOR1",
"---");
dini_Set
("Atendentes.txt",
"ADMINISTRADOR2",
"---");
} SetTimer
("Msgs",
450000, true
);
return 1;
}public OnFilterScriptExit
(){ print("--------------------------------------------");
print(" Sistema de Atendimento criado por Shadoww5");
print(" DESCARREGADO COM SUCESSO !");
print(" Contato: http://*******/iT6xEw");
print("--------------------------------------------");
return 1;
}public OnPlayerConnect
(playerid
){ Atendimentos
[playerid
] = 0;
Senha
[playerid
] = 0;
GetPlayerName
(playerid, str,
24);
if(dini_Isset
("Atendentes.txt", str
)) { Helper
[playerid
] = bool:dini_Bool
("Atendentes.txt", str
);
} else { Helper
[playerid
] = false;
} return 1;
}public OnPlayerDisconnect
(playerid, reason
){ GetPlayerName
(playerid, str,
24);
dini_BoolSet
("Atendentes.txt", str, Helper
[playerid
]);
if(Helper
[playerid
]) { dini_IntSet
("Atendimentos.txt", str, Atendimentos
[playerid
]);
} if(Atendimentos
[playerid
] > dini_Int
("Atendimentos.txt",
"Recorde - Atendimentos")) { dini_IntSet
("Atendimentos.txt",
"Recorde - Atendimentos", Atendimentos
[playerid
]);
dini_Set
("Atendimentos.txt",
"Recorde - Helper", str
);
} return 1;
}public Msgs
() return SendClientMessageToAll
(Cores
[random(sizeof Cores
)],
"Precisa de ajuda com o sistema de atendimento ? Digite /ajudafila.");
CMD:trocaradm
(playerid, params
[]){ new admin;
if(!IsPlayerAdmin
(playerid
)) return SendClientMessage
(playerid, VERMELHO,
"Vocк nгo estб autorizado a usar este comando.");
else if(sscanf
(params,
"ds", admin, str
)) return SendClientMessage
(playerid, CINZA,
"USO: /trocaradm [1/2] [novo nome]");
else if(!(admin
== 2 || admin
== 1)) return SendClientMessage
(playerid, VERMELHO,
"Escolha entre administrador 1 ou 2.");
else if(strlen(str
) > 24) return SendClientMessage
(playerid, VERMELHO,
"O novo nome deve ter no maximo 24 caracteres.");
if(admin
== 1) { dini_Set
("Atendentes.txt",
"ADMINISTRADOR1", str
);
format(str,
sizeof str,
"Administrador 1 trocado com sucesso: \"{F7E200}%s{E89200}\".", str
);
} else { dini_Set
("Atendentes.txt",
"ADMINISTRADOR2", str
);
format(str,
sizeof str,
"Administrador 2 trocado com sucesso: \"{F7E200}%s{E89200}\".", str
);
} SendClientMessage
(playerid, LARANJA, str
);
return 1;
}CMD:darhelper
(playerid, params
[]){ new Jogador;
GetPlayerName
(playerid, str,
24);
if(sscanf
(params,
"u", Jogador
)) return SendClientMessage
(playerid, CINZA,
"USO: /darhelper [nome do jogador / id]");
else if(!IsPlayerConnected
(Jogador
)) return SendClientMessage
(playerid, VERMELHO,
"Jogador OFFLINE.");
else if(!(strcmp(str, dini_Get
("Atendentes.txt",
"ADMINISTRADOR1"), false
) == 0 ||
strcmp(str, dini_Get
("Atendentes.txt",
"ADMINISTRADOR2"), false
) == 0 || IsPlayerAdmin
(playerid
))) return SendClientMessage
(playerid, VERMELHO,
"Vocк nгo estб autorizado a usar este comando.");
else if(Helper
[Jogador
]) return SendClientMessage
(playerid, VERMELHO,
"Este jogador jб й helper.");
Helper
[Jogador
] = true;
format(str,
sizeof str,
"O administrador %s [ID %d] te tornou um helper.", str, playerid
);
SendClientMessage
(Jogador, AMARELO, str
);
GetPlayerName
(Jogador, str,
24);
format(str,
sizeof str,
"Vocк tornou o jogador %s [ID %d] um helper.", str, Jogador
);
SendClientMessage
(playerid, AMARELO, str
);
return 1;
}CMD:retirarhelper
(playerid, params
[]){ new Jogador;
GetPlayerName
(playerid, str,
24);
if(sscanf
(params,
"u", Jogador
)) return SendClientMessage
(playerid, CINZA,
"USO: /retirarhelper [nome do jogador / id]");
else if(!IsPlayerConnected
(Jogador
)) return SendClientMessage
(playerid, VERMELHO,
"Jogador OFFLINE.");
else if(!(strcmp(str, dini_Get
("Atendentes.txt",
"ADMINISTRADOR1"), false
) == 0 ||
strcmp(str, dini_Get
("Atendentes.txt",
"ADMINISTRADOR2"), false
) == 0 || IsPlayerAdmin
(playerid
))) return SendClientMessage
(playerid, VERMELHO,
"Vocк nгo estб autorizado a usar este comando.");
else if(!Helper
[Jogador
]) return SendClientMessage
(playerid, VERMELHO,
"Este jogador nгo й helper.");
Helper
[Jogador
] = false;
format(str,
sizeof str,
"O administrador %s [ID %d] te tirou do cargo de helper.", str, playerid
);
SendClientMessage
(Jogador, AMARELO, str
);
GetPlayerName
(Jogador, str,
24);
format(str,
sizeof str,
"Vocк tirou o jogador %s [ID %d] do cargo de helper.", str, Jogador
);
SendClientMessage
(playerid, AMARELO, str
);
return 1;
} CMD:senha
(playerid, params
[]){ #pragma unused params if(Helper
[playerid
]) return SendClientMessage
(playerid, VERMELHO,
"Helpers nгo podem pegar senha.");
else if(IsPlayerAdmin
(playerid
)) return SendClientMessage
(playerid, VERMELHO,
"Administradores nгo podem pegar senha.");
else if(Senha
[playerid
] != 0) return SendClientMessage
(playerid, VERMELHO,
"Vocк jб estб na fila de atendimento.");
Senha
[playerid
] = Fila;
Fila
++;
SendClientMessage
(playerid, LARANJA,
"Vocк entrou na fila de atendimento. Aguarde atй que algum helper venha te atender.");
for(new i
= 0; i
< MAX_PLAYERS; i
++) { if(!Helper
[i
]) continue;
GetPlayerName
(playerid, str,
24);
format(str,
sizeof str,
"%s entrou na fila de atendimento. Para atendк-lo digite /irsenha %d.", str, Senha
[playerid
]);
SendClientMessage
(i, AMARELO, str
);
} return 1;
}CMD:sairfila
(playerid, params
[]){ #pragma unused params if(Senha
[playerid
] == 0) return SendClientMessage
(playerid, VERMELHO,
"Vocк nгo estб na fila de atendimento.");
Senha
[playerid
] = 0;
SendClientMessage
(playerid, LARANJA,
"Vocк saiu da fila de atendimento.");
return 1;
}CMD:chat
(playerid, params
[]){ #pragma unused params new nome
[24];
if(!Helper
[playerid
]) return SendClientMessage
(playerid, VERMELHO,
"Vocк nгo estб autorizado a usar este comando.");
else if(sscanf
(params,
"s", str
)) return SendClientMessage
(playerid, CINZA,
"USO: /chat [texto]");
GetPlayerName
(playerid, nome,
24);
format(str,
sizeof str,
"[CHAT HELPER]{FFFFFF} %s: %s", nome, str
);
for(new i
= 0; i
< MAX_PLAYERS; i
++) { if(!Helper
[i
] ||
!IsPlayerConnected
(i
)) continue;
SendClientMessage
(i, AMARELO, str
);
} return 1;
}CMD:fila
(playerid, params
[]){ #pragma unused params new found, name
[24];
for(new i
= 0; i
< MAX_PLAYERS; i
++) { if(Senha
[i
] != 0) { found
++;
} if(found
> 1) { break;
} } if(!found
) return SendClientMessage
(playerid, VERMELHO,
"Nгo hб nenhum jogador na fila de atendimento.");
SendClientMessage
(playerid, AMARELO,
"======= {FFFFFF}[ Fila de Atendimento ] {F7E200}=======");
for(new s
= 1; s
< (Fila
+1); s
++) { for(new i
= 0; i
< MAX_PLAYERS; i
++) { if(!IsPlayerConnected
(i
)) continue;
if(Senha
[i
] != s
) continue;
GetPlayerName
(i, name,
24);
format(str,
sizeof str,
" » [ID %d] %s - Senha: %d", i, name, Senha
[i
]);
SendClientMessage
(playerid, AMARELO, str
);
} } return 1;
}CMD:proximo
(playerid, params
[]){ #pragma unused params if(!Helper
[playerid
]) return SendClientMessage
(playerid, VERMELHO,
"Vocк nгo estб autorizado a usar este comando.");
new bool:found;
for(new s
= 1; s
< (Fila
+1); s
++) { for(new i
= 0; i
< MAX_PLAYERS; i
++) { if(!IsPlayerConnected
(i
)) continue;
if(Senha
[i
] != s
) continue;
new Float:Pos
[3];
GetPlayerPos
(i, Pos
[0], Pos
[1], Pos
[2]);
SetPlayerPos
(playerid, Pos
[0]+1, Pos
[1], Pos
[2]+0.5);
SetPlayerInterior
(playerid, GetPlayerInterior
(i
));
Senha
[i
] = 0;
GetPlayerName
(playerid, str,
24);
format(str,
sizeof str,
"O helper %s [ID %d] veio te ajudar.", str, playerid
);
SendClientMessage
(i, AMARELO, str
);
GetPlayerName
(i, str,
24);
format(str,
sizeof str,
"Vocк veio atender o jogador %s [ID %d].", str, i
);
SendClientMessage
(playerid, AMARELO, str
);
Atendimentos
[playerid
]++;
found
= true;
break;
} if(found
) { break;
} } if(!found
) { SendClientMessage
(playerid, VERMELHO,
"Nгo hб nenhum jogador na fila de atendimento.");
} return 1;
}CMD:irsenha
(playerid, params
[]){ new senha;
if(!Helper
[playerid
]) return SendClientMessage
(playerid, VERMELHO,
"Vocк nгo estб autorizado a usar este comando.");
else if(sscanf
(params,
"d", senha
)) return SendClientMessage
(playerid, CINZA,
"USO: /irsenha [numero da senha]");
else if(senha
< 1) return SendClientMessage
(playerid, VERMELHO,
"Nгo hб ninguйm no servidor com esta senha.");
new bool:found;
for(new i
= 0; i
< MAX_PLAYERS; i
++) { if(Senha
[i
] == senha
) { new Float:Pos
[3];
GetPlayerPos
(i, Pos
[0], Pos
[1], Pos
[2]);
SetPlayerPos
(playerid, Pos
[0]+1, Pos
[1], Pos
[2]+0.5);
SetPlayerInterior
(playerid, GetPlayerInterior
(i
));
Senha
[i
] = 0;
GetPlayerName
(playerid, str,
24);
format(str,
sizeof str,
"O helper %s [ID %d] veio te ajudar.", str, playerid
);
SendClientMessage
(i, AMARELO, str
);
GetPlayerName
(i, str,
24);
format(str,
sizeof str,
"Vocк veio atender o jogador %s [ID %d].", str, i
);
SendClientMessage
(playerid, AMARELO, str
);
Atendimentos
[playerid
]++;
found
= true;
break;
} } if(!found
) { SendClientMessage
(playerid, VERMELHO,
"Nгo hб ninguйm no servidor com esta senha.");
} return 1;
}CMD:atendimentos
(playerid, params
[]){ #pragma unused params if(!Helper
[playerid
]) return SendClientMessage
(playerid, VERMELHO,
"Vocк nгo estб autorizado a usar este comando.");
SendClientMessage
(playerid, AMARELO,
"======= {FFFFFF}[ Numero de Atendimentos por Helper ] {F7E200}=======");
for(new i
= 0; i
< MAX_PLAYERS; i
++) { if(!Helper
[i
]) continue;
GetPlayerName
(i, str,
24);
format(str,
sizeof str,
" » %s - Atendimentos: %d", str, Atendimentos
[i
]);
SendClientMessage
(playerid, AMARELO, str
);
} return 1;
}CMD:zerarfila
(playerid, params
[]){ #pragma unused params if(!Helper
[playerid
]) return SendClientMessage
(playerid, VERMELHO,
"Vocк nгo estб autorizado a usar este comando.");
Fila
= 1;
for(new i
= 0; i
< MAX_PLAYERS; i
++) { Senha
[i
] = 0;
if(!Helper
[i
]) continue;
GetPlayerName
(playerid, str,
24);
format(str,
sizeof str,
"A fila de atendimento foi zerada pelo Helper %s.", str
);
SendClientMessage
(i, AMARELO, str
);
} return 1;
}CMD:ajudafila
(playerid, params
[]){ new sStr
[1152];
strcat(sStr,
"\t- /senha: Comando utilizado para pegar uma senha de atendimento.");
strcat(sStr,
"\n\t- /sairfila: Comando utilizado para sair da fila de atendimento.");
strcat(sStr,
"\n\t- /fila: Comando utilizado para saber quais jogadores estгo na fila а espera de ajuda.");
if(Helper
[playerid
]) { strcat(sStr,
"\n\t- /proximo: Comando utilizado para atender a proxima senha.");
strcat(sStr,
"\n\t- /irsenha: Comando utilizado para atender uam senha especнfica.");
strcat(sStr,
"\n\t- /zerarfila: Comando utilizado para limpar a fila de atendimento.");
strcat(sStr,
"\n\t- /atendimentos: Comando utilizado para saber a quantidade de jogadores atendidos por cada helper ONLINE.");
strcat(sStr,
"\n\t- /darhelper: Comando utilizado dar o cargo de helper а um jogador.");
strcat(sStr,
"\n\t- /retirarhelper: Este comando faz a operaзгo inversa do comando anterior.");
strcat(sStr,
"\n\t- /trocaradm: Comando utilizado para trocar o atual administrador 1/2 presente no arquivo \"Atendentes.txt\".");
strcat(sStr,
"\n\n\tOBS№: Os comandos /darhelper e/ou /retirarhelper sу podem ser utilizados caso seu nome esteja como\n ADMINISTRADOR 1 ou 2 no arquivo \"Atendentes.txt\".");
strcat(sStr,
"\n\tOBSІ: O comando /trocardono sу pode ser utilizado por administradores que realizaram login na RCON.");
strcat(sStr,
"\n\n\t FILTERSCRIPT DE ATENDIMENTO DESENVOLVIDO POR SHADOWW5 !");
} else { strcat(sStr,
"\n\n\t FILTERSCRIPT DE ATENDIMENTO DESENVOLVIDO POR SHADOWW5 !");
} ShowPlayerDialog
(playerid,
497, DIALOG_STYLE_MSGBOX,
"Sistema de Atendimento criado por Shadoww5 !", sStr,
"Fechar",
"");
return 1;
}// ================[ SSCANF ]================ //stock sscanf
(string
[],
format[],
{Float,_
}:...
){ #if defined isnull if (isnull
(string
)) #else if (string
[0] == 0 ||
(string
[0] == 1 && string
[1] == 0)) #endif { return format[0];
} #pragma tabsize 4 new formatPos
= 0,
stringPos
= 0,
paramPos
= 2,
paramCount
= numargs(),
delim
= ' ';
while (string
[stringPos
] && string
[stringPos
] <= ' ') { stringPos
++;
} while (paramPos
< paramCount
&& string
[stringPos
]) { switch (format[formatPos
++]) { case '\0': { return 0;
} case 'i',
'd': { new neg
= 1,
num
= 0,
ch
= string
[stringPos
];
if (ch
== '-') { neg
= -1;
ch
= string
[++stringPos
];
} do { stringPos
++;
if ('0' <= ch
<= '9') { num
= (num
* 10) + (ch
- '0');
} else { return -1;
} } while ((ch
= string
[stringPos
]) > ' ' && ch
!= delim
);
setarg(paramPos,
0, num
* neg
);
} case 'h',
'x': { new num
= 0,
ch
= string
[stringPos
];
do { stringPos
++;
switch (ch
) { case 'x',
'X': { num
= 0;
continue;
} case '0' ..
'9': { num
= (num
<< 4) |
(ch
- '0');
} case 'a' ..
'f': { num
= (num
<< 4) |
(ch
- ('a' - 10));
} case 'A' ..
'F': { num
= (num
<< 4) |
(ch
- ('A' - 10));
} default: { return -1;
} } } while ((ch
= string
[stringPos
]) > ' ' && ch
!= delim
);
setarg(paramPos,
0, num
);
} case 'c': { setarg(paramPos,
0, string
[stringPos
++]);
} case 'f': { new changestr
[16], changepos
= 0, strpos
= stringPos;
while(changepos
< 16 && string
[strpos
] && string
[strpos
] != delim
) { changestr
[changepos
++] = string
[strpos
++];
} changestr
[changepos
] = '\0';
setarg(paramPos,
0,
_:floatstr(changestr
));
} case 'p': { delim
= format[formatPos
++];
continue;
} case '\'': { new end
= formatPos
- 1,
ch;
while ((ch
= format[++end
]) && ch
!= '\'') {} if (!ch
) { return -1;
} format[end
] = '\0';
if ((ch
= strfind(string,
format[formatPos
], false, stringPos
)) == -1) { if (format[end
+ 1]) { return -1;
} return 0;
} format[end
] = '\'';
stringPos
= ch
+ (end
- formatPos
);
formatPos
= end
+ 1;
} case 'u': { new end
= stringPos
- 1,
id
= 0,
bool:num
= true,
ch;
while ((ch
= string
[++end
]) && ch
!= delim
) { if (num
) { if ('0' <= ch
<= '9') { id
= (id
* 10) + (ch
- '0');
} else { num
= false;
} } } if (num
&& IsPlayerConnected
(id
)) { setarg(paramPos,
0, id
);
} else { #if !defined foreach #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2)) #define __SSCANF_FOREACH__ #endif string
[end
] = '\0';
num
= false;
new name
[MAX_PLAYER_NAME
];
id
= end
- stringPos;
foreach
(Player, playerid
) { GetPlayerName
(playerid, name,
sizeof (name
));
if (!strcmp(name, string
[stringPos
], true, id
)) { setarg(paramPos,
0, playerid
);
num
= true;
break;
} } if (!num
) { setarg(paramPos,
0, INVALID_PLAYER_ID
);
} string
[end
] = ch;
#if defined __SSCANF_FOREACH__ #undef foreach #undef __SSCANF_FOREACH__ #endif } stringPos
= end;
} case 's',
'z': { new i
= 0,
ch;
if (format[formatPos
]) { while ((ch
= string
[stringPos
++]) && ch
!= delim
) { setarg(paramPos, i
++, ch
);
} if (!i
) { return -1;
} } else { while ((ch
= string
[stringPos
++])) { setarg(paramPos, i
++, ch
);
} } stringPos
--;
setarg(paramPos, i,
'\0');
} default: { continue;
} } while (string
[stringPos
] && string
[stringPos
] != delim
&& string
[stringPos
] > ' ') { stringPos
++;
} while (string
[stringPos
] && (string
[stringPos
] == delim || string
[stringPos
] <= ' ')) { stringPos
++;
} paramPos
++;
} do { if ((delim
= format[formatPos
++]) > ' ') { if (delim
== '\'') { while ((delim
= format[formatPos
++]) && delim
!= '\'') {} } else if (delim
!= 'z') { return delim;
} } } while (delim
> ' ');
return 0;
}/* ! FILTERSCRIPT DE ATENDIMENTO DESENVOLVIDO POR SHADOWW5 !
! FILTERSCRIPT DE ATENDIMENTO DESENVOLVIDO POR SHADOWW5 !
Contato: http://*******/iT6xEw
Contato: http://*******/iT6xEw
POSTAGEM ORIGINAL: https://sampforum.blast.hk/showthread.ph...pid1299637
NAO RETIRE OS CREDITOS !! NAO RETIRE OS CREDITOS !!
NAO RETIRE OS CREDITOS !! NAO RETIRE OS CREDITOS !!*/