helpers.pwn 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. //Comando para Helpers
  2. CMD:solicitaradmin(playerid, params[])
  3. {
  4. if(!IsHelper{playerid}) return SysMsg(playerid, AUTHMSG);
  5. if(IsAssisting[playerid] == -1) return SysMsg(playerid, "Você está atualmente lidando com um pedido de assistência.");
  6. if(RequestingAdmin[playerid] != -1) return SysMsg(playerid, "Você já tem uma solicitação do administrador ativa.");
  7. SysMsg(playerid, "Por favor, seja paciente ou /cancelra para cancelar a solicitação.");
  8. new reason[128];
  9. if(sscanf(params, "s[128]", reason)) return SendClientMessage(playerid, COLOR_WHITE, "Use: /solicitaradmin [Detalhe do pedido]");
  10. new as[8];
  11. format(gstr, sizeof(gstr), "* Helper %s [ID:%i] Está solicitando assistência para ajudar um player, [Detalhes: %s]. Use /acceptra para aceitar.", NameEx(playerid), playerid, reason);
  12. AdminBroadcast(gstr, 1);
  13. format(gstr, sizeof(gstr), "Helper %s solicitou que um administrador ingressasse na sessão. Seja paciente e aguarde.", NameEx(playerid));
  14. SendAssistChat(playerid, gstr);
  15. SendClientMessage(playerid, COLOR_YELLOW, "O seu pedido foi enviado. Seja paciente e espere um administrador estar disponível.");
  16. RequestingAdmin[playerid] = gettime();
  17. NeedsAssistance[playerid] = -1;
  18. ARCount++;
  19. format(as, 8, "%i!", ARCount);
  20. TextDrawSetString(AdminRequestTD, as);
  21. format(AssistanceMsg[playerid], 180, reason);
  22. return true;
  23. }
  24. CMD:ajudar(playerid, params[])
  25. {
  26. if(!IsPlayerAdminLevelOK(playerid, 1) && !IsHelper{playerid}) return SysMsg(playerid, AUTHMSG);
  27. if(NeedsAssistance[playerid] != -1) return SysMsg(playerid, "Você tem um pedido de assistência pendente.");
  28. if(IsAssisting[playerid] >= 0 || BeingAssistedBy[playerid] >= 0) return SysMsg(playerid, "Você está atualmente em uma assistência.");
  29. SysMsg(playerid, "Por favor use /fassistencia(Para finalizar) antes de usar esse comando.");
  30. new playa = -1;
  31. if(sscanf(params, "u", playa)) return SysMsg(playerid,"Use: /ajudar [ID ou nome do jogador]");
  32. if(InvalidPlayer(playa)) return SysMsg(playerid, NOPLAYER);
  33. if(IsPlayerNPC(playa)) return SysMsg(playerid,"Esse jogador é um NPC.");
  34. if(NeedsAssistance[playa] == -1) return SysMsg(playerid,"Esse jogador não precisa de assistência.");
  35. if(playa == playerid) return SysMsg(playerid,"Você não pode usar este comando em si mesmo.");
  36. new tmp, hr = 0, mins = 0, timeago[17];
  37. tmp = gettime() - NeedsAssistance[playa];
  38. StringReplace(AssistanceMsg[playa], "'", "''");
  39. mysql_format(conn, mquery, sizeof(mquery), "INSERT INTO assists (`AssistBy`, `AssistedBy`, `RequestedAdmin`, `AssistReason`, `AssistLength`, `AssistTimeWaiting`, `AssistEndedBy`, `AssistEndReason`) VALUES (%i, %i, 0, '%e', 0, %i, 0, ' ')", MasterAccount[playa], MasterAccount[playerid], AssistanceMsg[playa], tmp);
  40. new Cache:result = mysql_query(conn, mquery);
  41. AssistTableID[playerid] = cache_insert_id();
  42. cache_delete(result);
  43. while(tmp > 3600)
  44. {
  45. hr++;
  46. tmp -= 3600;
  47. }
  48. while(tmp > 60)
  49. {
  50. mins++;
  51. tmp -= 60;
  52. }
  53. if(hr > 0) format(timeago, sizeof(timeago), "%i hr e %i min", hr, mins);
  54. else if(mins > 0 && hr == 0) format(timeago, sizeof(timeago), "%i min", mins);
  55. else format(timeago, sizeof(timeago), "%i sec", tmp);
  56. format(gstr, sizeof(gstr), "[Assistente] %s agora está ajudando %s(%i) depois de esperar %s.", NameEx(playerid), NameEx(playa), playa, timeago);
  57. AdminBroadcast(gstr, 1);
  58. HelperBroadcast(gstr);
  59. if(IsPlayerAdminLevelOK(playerid, 1)) SendClientMessageF(playa, COLOR_YELLOW, "* Admin %s agora está ajudando você, depois de esperar %s. Por favor, use: /ac para discutir seu problema, se necessário.", NameEx(playerid), timeago);
  60. else if(IsHelper{playerid}) SendClientMessageF(playa, COLOR_YELLOW, "* Helper %s agora está ajudando você, depois de esperar %s. Por favor, use: /ac para discutir seu problema, se necessário.", NameEx(playerid), timeago);
  61. SendSplitMessageF(playerid, COLOR_YELLOW, "* Agora você está dando assistência a %s(ID %i) com: '%s'", NameEx(playa), playa, AssistanceMsg[playa]);
  62. IsAssisting[playerid] = playa;
  63. BeingAssistedBy[playa] = playerid;
  64. NeedsAssistance[playa] = -1;
  65. AssistanceMsg[playa][0] = EOS;
  66. if(AdminLevel[playa] == 0)
  67. {
  68. if(AdminLevel[playerid] > 0 || IsHelper{playerid})
  69. {
  70. mysql_format(conn, mquery, sizeof(mquery), "UPDATE masters SET AssistCount = AssistCount + 1, AdminScore = AdminScore + 1 WHERE id = %i", MasterAccount[playerid]);
  71. mysql_pquery(conn, mquery);
  72. }
  73. }
  74. AdminLog(playerid, SQLID[playa], GetName(playa), "Inicia sessão de assistência");
  75. return true;
  76. }
  77. CMD:assists(playerid)
  78. {
  79. if(!IsPlayerAdminLevelOK(playerid, 1) && !IsHelper{playerid}) return SysMsg(playerid, AUTHMSG);
  80. new count = 0, queue[MAX_PLAYERS][2];
  81. gstr[0] = EOS;
  82. foreach(new i: Player)
  83. {
  84. if(NeedsAssistance[i] > 0)
  85. {
  86. queue[count][0] = NeedsAssistance[i];
  87. queue[count][1] = i;
  88. count ++;
  89. }
  90. else if(RequestingAdmin[i] > 1 && IsPlayerAdminLevelOK(playerid, 1))
  91. {
  92. queue[count][0] = RequestingAdmin[i];
  93. queue[count][1] = i;
  94. count++;
  95. }
  96. }
  97. if(count == 0) return SendClientMessage(playerid, COLOR_WHITE, "Ninguém precisa de assistência neste momento.");
  98. SortDeepArray(queue, 0);
  99. new assist[64], hr = 0, mins = 0, tmp, timeago[14], a;
  100. format(assist, sizeof(assist), "ACP - Todos os pedidos ativos ({00FF00}%i{ffffff}):", count);
  101. count = 0;
  102. for(a = 0; a < MAX_PLAYERS; a++)
  103. {
  104. if(queue[a][0] > 0)
  105. {
  106. tmp = gettime() - queue[a][0];
  107. hr = 0;
  108. mins = 0;
  109. count ++;
  110. while(tmp > 3600)
  111. {
  112. hr++;
  113. tmp -= 3600;
  114. }
  115. while(tmp > 60)
  116. {
  117. mins++;
  118. tmp -= 60;
  119. }
  120. if(hr > 0) format(timeago, sizeof(timeago), "%i hr e %i min", hr, mins);
  121. else if(mins > 0 && hr == 0) format(timeago, sizeof(timeago), "%i min", mins);
  122. else format(timeago, sizeof(timeago), "%i sec", tmp);
  123. new thstndrd[3];
  124. switch(count)
  125. {
  126. case 1,21,31,41,51,61,71,81,91,101: thstndrd = "";//st
  127. case 2,22,32,42,52,62,72,82,92,102: thstndrd = "";//nd
  128. case 3,23,33,43,53,63,73,83,93,103: thstndrd = "";//rd
  129. default: thstndrd = "";//th
  130. }
  131. new msg[64];
  132. strmid(msg, AssistanceMsg[queue[a][1]], 0, 64);
  133. if(RequestingAdmin[queue[a][1]] > 1) format(sgstr, sizeof(sgstr), "{FF0000}%i%s (%s atrás): %s(ID %i) '%s'\n", count, thstndrd, timeago, NameEx(queue[a][1]), queue[a][1], msg);
  134. else format(sgstr, sizeof(sgstr), "{FBFF00}%i%s (%s atrás): %s(ID %i) '%s'\n", count, thstndrd, timeago, NameEx(queue[a][1]), queue[a][1], msg);
  135. strcat(gstr, sgstr);
  136. }
  137. }
  138. Dialog_Show(playerid, AssistList, DIALOG_STYLE_LIST, assist, gstr, "Info", "Fechar");
  139. return true;
  140. }
  141. CMD:fassistencia(playerid, params[])
  142. {
  143. if(!IsPlayerAdminLevelOK(playerid, 1) && !IsHelper{playerid}) return SysMsg(playerid, AUTHMSG);
  144. if(IsAssisting[playerid] == -1) return SysMsg(playerid,"Você não está ajudando ninguém.");
  145. if(IsHelper{playerid} && BeingAssistedBy[playerid] != -1)
  146. {
  147. format(sgstr, sizeof(sgstr), "{00D0FF}O Helper %s(%i) saiu. Admin %s está agora a prestar assistência exclusiva.", NameEx(playerid), playerid, NameEx(BeingAssistedBy[playerid]));
  148. SendAssistChat(playerid, sgstr);
  149. BeingAssistedBy[IsAssisting[playerid]] = BeingAssistedBy[playerid];
  150. BeingAssistedBy[BeingAssistedBy[playerid]] = -1;
  151. IsAssisting[IsAssisting[playerid]] = -1;
  152. BeingAssistedBy[playerid] = -1;
  153. IsAssisting[playerid] = -1;
  154. AssistTableID[playerid] = -1;
  155. RequestingAdmin[playerid] = -1;
  156. }
  157. else if(IsPlayerAdminLevelOK(playerid, 1) && BeingAssistedBy[playerid] != -1)
  158. {
  159. format(sgstr, sizeof(sgstr), "{00D0FF}Admin %s(%i) saiu. Helper %s está agora a prestar assistência exclusiva.", NameEx(playerid), playerid, NameEx(BeingAssistedBy[playerid]));
  160. SendAssistChat(playerid, sgstr);
  161. BeingAssistedBy[IsAssisting[playerid]] = BeingAssistedBy[playerid];
  162. BeingAssistedBy[BeingAssistedBy[playerid]] = -1;
  163. IsAssisting[IsAssisting[playerid]] = -1;
  164. BeingAssistedBy[playerid] = -1;
  165. IsAssisting[playerid] = -1;
  166. AssistTableID[playerid] = -1;
  167. RequestingAdmin[playerid] = -1;
  168. }
  169. else Dialog_Show(playerid, AssistEnd, DIALOG_STYLE_LIST, "Finalizar assistência", "O jogador foi atendido\nFalsa assistência\nAssistência não mais necessária\nJogador AFK\nJogador não responde\nNão pode ajudar o jogador", "Finalizar", "Cancelar");
  170. return true;
  171. }
  172. CMD:toghmsg(playerid, params[])
  173. {
  174. if(!IsHelper{playerid}) return SysMsg(playerid, AUTHMSG);
  175. HelperMsgTog[playerid] = !HelperMsgTog[playerid];
  176. if(HelperMsgTog[playerid]) SendClientMessage(playerid, COLOR_LIGHTGREEN, "Helper mensagens ativadas.");
  177. else SendClientMessage(playerid, COLOR_LIGHTGREEN, "Helper mensagens desativadas.");
  178. return true;
  179. }
  180. CMD:assist(playerid, params[])
  181. {
  182. if(!Logged{playerid}) return true;
  183. new AdminCount = 0;
  184. foreach(new i: Player) if(IsPlayerAdminLevelOK(i, 1) || IsHelper{i}) AdminCount ++;
  185. if(AdminCount == 0) return SendClientMessage(playerid,COLOR_ORANGE,"Ninguém está disponível para responder sua solicitação de assistência.");
  186. if(NeedsAssistance[playerid] != -1) return SendClientMessage(playerid,COLOR_ORANGE,"Você já solicitou assistência, por favor /cancelarassistencia.");
  187. if(IsAssisting[playerid] >= 0 || BeingAssistedBy[playerid] >= 0) return SendClientMessage(playerid, COLOR_ORANGE, "Você já está recebendo assistência. Peça ao ajudante para terminar a sessão primeiro.");
  188. Dialog_Show(playerid, AssistCreate, DIALOG_STYLE_INPUT, "Solicitando Assistência", "Por favor, diga-nos por que você precisa de assistência:", "Enviar", "Cancelar");
  189. return true;
  190. }
  191. CMD:cancelarassistencia(playerid, params[])
  192. {
  193. if(NeedsAssistance[playerid] == -1) return SysMsg(playerid,"Você não está solicitando assistência.");
  194. NeedsAssistance[playerid] = -1;
  195. AssistanceMsg[playerid][0] = EOS;
  196. SendClientMessage(playerid, COLOR_WHITE, "Sua solicitação de assistência foi cancelada.");
  197. foreach(new i: Player)
  198. {
  199. if(IsHelper{i} || IsPlayerAdminLevelOK(i, 1) && AdminMsgToggle{i})
  200. {
  201. SendClientMessageF(i, COLOR_RED, "* %s(ID %i) cancelou sua assistência", NameEx(playerid), playerid);
  202. }
  203. }
  204. return true;
  205. }
  206. CMD:ac(playerid, params[])
  207. {
  208. if(IsAssisting[playerid] >= 0 || BeingAssistedBy[playerid] >= 0)
  209. {
  210. if(isnull(params)) return SysMsg(playerid,"Use: Chat de assistência: /ac [mensagem]");
  211. if(IsPlayerAdminLevelOK(playerid, 1)) format(gstr, sizeof(gstr), "[AC] Admin %s(%i): %s", NameEx(playerid), playerid, params);
  212. else if(IsHelper{playerid}) format(gstr, sizeof(gstr), "[AC] Helper %s(%i): %s", NameEx(playerid), playerid, params);
  213. else format(gstr, sizeof(gstr), "[AC] %s(%i): %s", NameEx(playerid), playerid, params);
  214. SendAssistChat(playerid, gstr);
  215. return true;
  216. }
  217. SysMsg(playerid, "Você não está ajudando ou está sendo assistido.");
  218. return true;
  219. }
  220. CMD:acceptra(playerid, params[])
  221. {
  222. if(!IsPlayerAdminLevelOK(playerid, 1)) return SysMsg(playerid, AUTHMSG);
  223. if(IsAssisting[playerid] != -1) return SysMsg(playerid, "Você já está atendendo um pedido de assistência.");
  224. SysMsg(playerid, "Por favor, use: /fassistencia(Para finalizar) para deixar a sessão atual.");
  225. new id;
  226. if(sscanf(params, "u", id)) return SendClientMessage(playerid, COLOR_WHITE, "Use: /aceitarajudante [parte do nome / ID]");
  227. if(InvalidPlayer(id)) return SysMsg(playerid, NOPLAYER);
  228. if(!IsHelper{id}) return SysMsg(playerid, "Esse jogador não é um ajudante registrado.");
  229. if(RequestingAdmin[id] == -1) return SysMsg(playerid, "Esse ajudante não pediu ajuda.");
  230. MySQLUpdateInt(AssistTableID[id], "RequestedAdmin", MasterAccount[playerid], "assists");
  231. MySQLUpdateString(AssistTableID[id], "RAReason", AssistanceMsg[id], "assists");
  232. AssistTableID[playerid] = AssistTableID[id];
  233. BeingAssistedBy[playerid] = id;
  234. RequestingAdmin[id] = -1;
  235. IsAssisting[playerid] = IsAssisting[id];
  236. BeingAssistedBy[id] = playerid;
  237. IsAssisting[IsAssisting[id]] = playerid;
  238. format(gstr, sizeof(gstr), "{00D0FF}Admin %s[ID:%i] entrou no chat de assistência. Por favor, use: /ac para se comunicar.", NameRP(playerid), playerid);
  239. SendAssistChat(playerid, gstr);
  240. format(gstr, sizeof(gstr), "[Admin] Admin %s[ID %i] aceitou a solicitação de assitência do helper %s[ID %i].", NameEx(playerid), playerid, NameEx(id), id);
  241. AdminBroadcast(gstr, 1);
  242. mysql_format(conn, mquery, sizeof(mquery), "UPDATE masters SET AssistCount = AssistCount + 1, AdminScore = AdminScore + 1 WHERE id = %i", MasterAccount[playerid]);
  243. mysql_pquery(conn, mquery);
  244. return true;
  245. }
  246. CMD:toghc(playerid)
  247. {
  248. if(!Logged{playerid}) return true;
  249. if(GlobalHelperChatTog) return SysMsg(playerid, "Este bate-papo foi desativado globalmente.");
  250. if(!IsPlayerAdminLevelOK(playerid, 1) && !IsHelper{playerid}) return SysMsg(playerid, AUTHMSG);
  251. HelperTog{playerid} = !HelperTog{playerid};
  252. SendClientMessage(playerid, COLOR_LIGHTGREEN, (HelperTog{playerid}) ? ("Helper chat agora está desativado para você.") : ("Helper chat agora está habilitado para você."));
  253. return true;
  254. }
  255. CMD:hc(playerid, params[])
  256. {
  257. if(GlobalHelperChatTog && !IsPlayerAdminLevelOK(playerid, 1)) return SysMsg(playerid, "Este bate-papo está desativado globalmente.");
  258. if(HelperTog{playerid}) return SysMsg(playerid, "Você atualmente possui este bate-papo desativado.");
  259. if(isnull(params)) return SysMsg(playerid, "Use: Helper Chat: /hc [mensagem]");
  260. if(!IsPlayerAdminLevelOK(playerid, 1) && !IsHelper{playerid}) return SysMsg(playerid, AUTHMSG);
  261. foreach(new i: Player)
  262. {
  263. if(IsPlayerAdminLevelOK(i, 1) || IsHelper{i})
  264. {
  265. if(HelperTog{i}) continue;
  266. if(AdminLevel[playerid] != 0) SendSplitMessageF(i, COLOR_LIGHTGREEN, "[Helper] Admin %s: %s", NameEx(playerid), params);
  267. else SendSplitMessageF(i, COLOR_LIGHTGREEN, "[Helper] Helper %s: %s", NameEx(playerid), params);
  268. }
  269. }
  270. /* if(AdminLevel[playerid] != 0) IRC_SayF(IRCBot, IRC_ADMIN_CHANNEL, "9[Helper] Admin %s: %s", NameEx(playerid), params);
  271. else IRC_SayF(IRCBot, IRC_ADMIN_CHANNEL, "9[Helper] Helper %s: %s", NameEx(playerid), params); */
  272. return true;
  273. }
  274. CMD:confirmnome(playerid, params[])
  275. {
  276. gstr[0] = EOS;
  277. if(IsPlayerAdminLevelOK(playerid, 1) || IsHelper{playerid})
  278. {
  279. foreach(new i: Player)
  280. {
  281. if(WantsNameChange[i][0] == 1)
  282. {
  283. format(gstr, sizeof(gstr), "%s{FFFFFF}%s(%i) está pedindo para alterar o nome para %s\n",gstr, NameEx(i), i, RPName(NameChange[i]));
  284. }
  285. }
  286. if(strlen(gstr) >= 10) Dialog_Show(playerid, NameChange1, DIALOG_STYLE_LIST, "Confirmação de troca de nomes", gstr, "Selecionar", "Fechar");
  287. else Dialog_Show(playerid, NameChange1, DIALOG_STYLE_LIST, "Confirma troca de nome", "\n\t{FFFFFF}Sem fundos necessários", "Selecionar", "Fechar");
  288. }
  289. return true;
  290. }
  291. //fim dos comandos de Helper