/* ! FILTERSCRIPT DE ATENDIMENTO DESENVOLVIDO POR SHADOWW5 ! ! FILTERSCRIPT DE ATENDIMENTO DESENVOLVIDO POR SHADOWW5 ! Contato: http://bit.ly/iT6xEw Contato: http://bit.ly/iT6xEw POSTAGEM ORIGINAL: http://forum.sa-mp.com/showthread.php?p=1299637 NAO RETIRE OS CREDITOS !! NAO RETIRE OS CREDITOS !! NAO RETIRE OS CREDITOS !! NAO RETIRE OS CREDITOS !!*/ #include #include #include 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 0xE89200FF public OnFilterScriptInit() { print("--------------------------------------------"); print(" Sistema de Atendimento criado por Shadoww5"); print(" CARREGADO COM SUCESSO !"); print(" Contato: http://bit.ly/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://bit.ly/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://bit.ly/iT6xEw Contato: http://bit.ly/iT6xEw POSTAGEM ORIGINAL: http://forum.sa-mp.com/showthread.php?p=1299637 NAO RETIRE OS CREDITOS !! NAO RETIRE OS CREDITOS !! NAO RETIRE OS CREDITOS !! NAO RETIRE OS CREDITOS !!*/