Guest User

[PAWN] FS Mensagens Privadas (MYSQL)

a guest
Mar 5th, 2015
573
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 17.61 KB | None | 0 0
  1. /*
  2.     Sistema de mensagens privadas - básico em MySQL
  3.     Necessário alterar os dados de conexão para que funcione corretamente
  4.  
  5.     - v1.0 - Início
  6.         Comandos /mp e /minhasmp (enviadas, recebidas, e não lidas);
  7.         Comando /ativarmp, /desativarmp (/mps) para desativar/ativar o recebimento e envio de mensagens privadas
  8.         Informação ao se conectar se tem novas mensagens;
  9.  
  10. */
  11.  
  12. #include a_samp
  13. #include sscanf2
  14. #include a_mysql
  15. #include zcmd
  16.  
  17. /******************************************************************************/
  18. /************************ Dados de conexão ************************************/
  19. /******************************************************************************/
  20. #define     MYSQL_HOST          "localhost"                 // Seu host MySQL
  21. #define     MYSQL_USER          "root"                      // Usuário MySQL
  22. #define     MYSQL_PASS          ""                          // Senha
  23. #define     MYSQL_DB            "bmt_teste"                 // Database
  24. /******************************************************************************/
  25. /******************************************************************************/
  26.  
  27. new con_mysql; // Armazena o ID da conexão
  28.  
  29. #define DialogOpMsg         15240
  30. #define DialogMsgEnviada    15241
  31. #define DialogMsgRecebida   15242
  32. #define DialogMsgNaoLidas   15243
  33. #define DialogMsgRetorno    15244
  34.  
  35. public OnFilterScriptInit() {
  36.     print("Sistema de mensagens privadas: CARREGADO");
  37.     con_mysql = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PASS);
  38.     if(mysql_errno(con_mysql)) return print("OCORREU UM ERRO DURANTE A TENTATIVA DE CONEXÃO COM A DB!");
  39.  
  40.     // Criar as tabelas
  41.     mysql_query(con_mysql, "CREATE TABLE IF NOT EXISTS `mp_contas` (`id` int(11) NOT NULL AUTO_INCREMENT,`user` varchar(24) NOT NULL,`novas_mensagens` int(11) NOT NULL,PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;", false);
  42.     mysql_query(con_mysql, "CREATE TABLE IF NOT EXISTS `mp_msgs` (`id` int(11) NOT NULL AUTO_INCREMENT,`de_contaid` int(11) NOT NULL,`para_contaid` int(11) NOT NULL,`horario` int(11) NOT NULL,`data` varchar(20) NOT NULL,`lida` int(11) NOT NULL,`Mensagem` varchar(128) NOT NULL,PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;", false);
  43.     return 1;
  44. }
  45.  
  46. public OnFilterScriptExit() {
  47.     print("Sistema de mensagens privadas: DESCARREGADO");
  48.     mysql_close(con_mysql);
  49.     return 1;
  50. }
  51.  
  52. public OnPlayerConnect(playerid)
  53. {
  54.     new Cache:n, str[128], Nome[24];
  55.     GetPlayerName(playerid, Nome, 24);
  56.     mysql_format(con_mysql, str, sizeof(str), "SELECT id,novas_mensagens FROM mp_contas WHERE user='%s' LIMIT 1", Nome);
  57.     n = mysql_query(con_mysql, str, true);
  58.     if(cache_num_rows(con_mysql) > 0) {
  59.         SetPVarInt(playerid, "mp_system_contaid", cache_get_field_content_int(0, "id", con_mysql));
  60.         if(cache_get_field_content_int(0, "novas_mensagens", con_mysql) > 0) {
  61.             format(str, sizeof(str), "** Você tem %i novas mensagens privadas",cache_get_field_content_int(0, "novas_mensagens", con_mysql));
  62.             SendClientMessage(playerid,-1,str);
  63.             SetPVarInt(playerid, "mp_system_novas",cache_get_field_content_int(0, "novas_mensagens", con_mysql));
  64.         }
  65.     } else {
  66.         new Cache:rn;
  67.         mysql_format(con_mysql, str, sizeof(str), "INSERT INTO mp_contas (user) VALUES ('%s')", Nome);
  68.         rn = mysql_query(con_mysql, str, true);
  69.         SetPVarInt(playerid, "mp_system_contaid", cache_insert_id(con_mysql));
  70.         cache_delete(rn, con_mysql);
  71.     }
  72.     cache_delete(n, con_mysql);
  73.     SetPVarInt(playerid, "mp_system_bloqueado", 0);
  74.     return 1;
  75. }
  76.  
  77.  
  78. public OnPlayerDisconnect(playerid, reason)
  79. {
  80.     DeletePVar(playerid, "mp_system_contaid");
  81.     DeletePVar(playerid, "mp_system_novas");
  82.     DeletePVar(playerid, "mp_system_bloqueado");
  83.     return 1;
  84. }
  85. // Dialogs
  86. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  87. {
  88.     switch(dialogid) {
  89.         case DialogOpMsg: {
  90.             if(!response) return 1;
  91.             switch(listitem) {
  92.                 case 0: { // Recebidas
  93.                     SetPVarInt(playerid, "mp_system_paglist", 0);
  94.                     carregar_MsgRecebidas(playerid, false);
  95.                 }
  96.                 case 1: { // Enviadas
  97.                     SetPVarInt(playerid, "mp_system_paglist", 0);
  98.                     carregar_MsgEnviadas(playerid);
  99.                 }
  100.                 case 2: { // Não lidas
  101.                     SetPVarInt(playerid, "mp_system_paglist", 0);
  102.                     carregar_MsgRecebidas(playerid, true);
  103.                 }
  104.             }
  105.         }
  106.         case DialogMsgEnviada: {
  107.             if(!response) return cmd_minhasmp(playerid,"");
  108.             if(listitem >= 21) return SetPVarInt(playerid, "mp_system_paglist", GetPVarInt(playerid, "mp_system_paglist")+20), carregar_MsgEnviadas(playerid);
  109.             new query[220], Cache:info, Dialog[180], Nome[24], Mensagem[128], Data[20];
  110.             mysql_format(con_mysql, query, sizeof(query), "SELECT `mp_msgs`.*,`mp_contas`.`user` FROM `mp_msgs` INNER JOIN `mp_contas` ON `mp_msgs`.`para_contaid` = `mp_contas`.`id` WHERE `mp_msgs`.`de_contaid` = %i ORDER BY `mp_msgs`.`id` DESC LIMIT %i,20",GetPVarInt(playerid, "mp_system_contaid"), GetPVarInt(playerid, "mp_system_paglist"));
  111.             info = mysql_query(con_mysql, query, true);
  112.             if(cache_num_rows(con_mysql) > 0 && listitem < cache_num_rows(con_mysql)) {
  113.                 cache_get_field_content(listitem, "Mensagem", Mensagem, con_mysql);
  114.                 cache_get_field_content(listitem, "user", Nome, con_mysql, 24);
  115.                 cache_get_field_content(listitem, "data", Data, con_mysql, 20);
  116.                 format(Dialog, sizeof(Dialog), "Mensagem enviada para %s em %s\nMensagem: %s", Nome, Data, Mensagem);
  117.                 ShowPlayerDialog(playerid, DialogMsgRetorno, DIALOG_STYLE_MSGBOX, "{FFFF00}# {FFFFFF}Visualizando mensagem enviada:", Dialog, "Ok", "");
  118.             }
  119.             else SendClientMessage(playerid, -1, "{FF0000}Ocorreu um erro!");
  120.             cache_delete(info, con_mysql);
  121.         }
  122.         case DialogMsgRecebida: {
  123.             if(!response) return cmd_minhasmp(playerid, "");
  124.             if(listitem >= 21) return SetPVarInt(playerid, "mp_system_paglist", GetPVarInt(playerid, "mp_system_paglist")+20), carregar_MsgRecebidas(playerid, false);
  125.             new query[220], Cache:info, Dialog[180], Nome[24], Mensagem[128], Data[20];
  126.             mysql_format(con_mysql, query, sizeof(query), "SELECT `mp_msgs`.*,`mp_contas`.`user` FROM `mp_msgs` INNER JOIN `mp_contas` ON `mp_msgs`.`de_contaid` = `mp_contas`.`id` WHERE `mp_msgs`.`para_contaid` = %i ORDER BY `mp_msgs`.`id` DESC LIMIT %i,20",GetPVarInt(playerid, "mp_system_contaid"), GetPVarInt(playerid, "mp_system_paglist"));
  127.             info = mysql_query(con_mysql, query, true);
  128.             if(cache_num_rows(con_mysql) > 0 && listitem < cache_num_rows(con_mysql)) {
  129.                 cache_get_field_content(listitem, "Mensagem", Mensagem, con_mysql);
  130.                 cache_get_field_content(listitem, "user", Nome, con_mysql, 24);
  131.                 cache_get_field_content(listitem, "data", Data, con_mysql, 20);
  132.                 format(Dialog, sizeof(Dialog), "Mensagem recebida de %s em %s\nMensagem: %s", Nome, Data, Mensagem);
  133.                 ShowPlayerDialog(playerid, DialogMsgRetorno, DIALOG_STYLE_MSGBOX, "{FFFF00}# {FFFFFF}Visualizando mensagem recebida:", Dialog, "Ok", "");
  134.                 if(cache_get_field_content_int(listitem, "lida", con_mysql) == 0) {
  135.                     mysql_format(con_mysql, query, sizeof(query), "UPDATE mp_msgs SET lida=1 WHERE id=%i", cache_get_field_content_int(listitem, "id", con_mysql));
  136.                     mysql_query(con_mysql, query, false);
  137.                     if(GetPVarInt(playerid, "mp_system_novas") > 0) {
  138.                         SetPVarInt(playerid,"mp_system_novas", GetPVarInt(playerid, "mp_system_novas") - 1);
  139.                         mysql_format(con_mysql, query, sizeof(query), "UPDATE mp_contas SET novas_mensagens=%i WHERE id=%i",GetPVarInt(playerid, "mp_system_novas"), GetPVarInt(playerid, "mp_system_contaid"));
  140.                         mysql_query(con_mysql, query, false);
  141.                     }
  142.                 }
  143.             }
  144.             else SendClientMessage(playerid, -1, "{FF0000}Ocorreu um erro!");
  145.             cache_delete(info, con_mysql);
  146.         }
  147.         case DialogMsgNaoLidas: {
  148.             if(!response) return cmd_minhasmp(playerid, "");
  149.             if(listitem >= 21) return SetPVarInt(playerid, "mp_system_paglist", GetPVarInt(playerid, "mp_system_paglist")+20), carregar_MsgRecebidas(playerid, true);
  150.             new query[250], Cache:info, Dialog[180], Nome[24], Mensagem[128], Data[20];
  151.             mysql_format(con_mysql, query, sizeof(query), "SELECT `mp_msgs`.*,`mp_contas`.`user` FROM `mp_msgs` INNER JOIN `mp_contas` ON `mp_msgs`.`de_contaid` = `mp_contas`.`id` WHERE `mp_msgs`.`para_contaid` = %i AND `mp_msgs`.`lida`=0 ORDER BY `mp_msgs`.`id` DESC LIMIT %i,20",GetPVarInt(playerid, "mp_system_contaid"), GetPVarInt(playerid, "mp_system_paglist"));
  152.             info = mysql_query(con_mysql, query, true);
  153.             if(cache_num_rows(con_mysql) > 0 && listitem < cache_num_rows(con_mysql)) {
  154.                 cache_get_field_content(listitem, "Mensagem", Mensagem, con_mysql);
  155.                 cache_get_field_content(listitem, "user", Nome, con_mysql, 24);
  156.                 cache_get_field_content(listitem, "data", Data, con_mysql, 20);
  157.                 format(Dialog, sizeof(Dialog), "Mensagem recebida de %s em %s\nMensagem: %s", Nome, Data, Mensagem);
  158.                 ShowPlayerDialog(playerid, DialogMsgRetorno, DIALOG_STYLE_MSGBOX, "{FFFF00}# {FFFFFF}Visualizando mensagem recebida:", Dialog, "Ok", "");
  159.                 if(cache_get_field_content_int(listitem, "lida", con_mysql) == 0) {
  160.                     mysql_format(con_mysql, query, sizeof(query), "UPDATE mp_msgs SET lida=1 WHERE id=%i", cache_get_field_content_int(listitem, "id", con_mysql));
  161.                     mysql_query(con_mysql, query, false);
  162.                     if(GetPVarInt(playerid, "mp_system_novas") > 0) {
  163.                         SetPVarInt(playerid,"mp_system_novas", GetPVarInt(playerid, "mp_system_novas") - 1);
  164.                         mysql_format(con_mysql, query, sizeof(query), "UPDATE mp_contas SET novas_mensagens=%i WHERE id=%i",GetPVarInt(playerid, "mp_system_novas"), GetPVarInt(playerid, "mp_system_contaid"));
  165.                         mysql_query(con_mysql, query, false);
  166.                     }
  167.                 }
  168.             }
  169.             else SendClientMessage(playerid, -1, "{FF0000}Ocorreu um erro!");
  170.             cache_delete(info, con_mysql);
  171.         }
  172.         case DialogMsgRetorno:  return cmd_minhasmp(playerid, "");
  173.  
  174.     }
  175.     return 0;
  176. }
  177. // Stocks
  178. carregar_MsgRecebidas(playerid, bool:apenasnaolidas = false) {
  179.     new str[250], Cache:re;
  180.     mysql_format(con_mysql, str, sizeof(str), "SELECT `mp_msgs`.`Mensagem`,`mp_contas`.`user` FROM `mp_msgs` INNER JOIN `mp_contas` ON `mp_msgs`.`de_contaid` = `mp_contas`.`id` WHERE `mp_msgs`.`para_contaid` = %i %s ORDER BY `mp_msgs`.`id` DESC LIMIT %i,20", GetPVarInt(playerid, "mp_system_contaid"), (apenasnaolidas == true) ? ("AND `mp_msgs`.`lida`=0") : (""), GetPVarInt(playerid, "mp_system_paglist"));
  181.     re = mysql_query(con_mysql, str, true);
  182.     if(cache_num_rows(con_mysql) > 0) { // Se há mensagens
  183.         new Nome[24], Mensagem[64], Dialog[1500];
  184.         for(new i; i < cache_num_rows(con_mysql); i++) {
  185.             cache_get_field_content(i, "user", Nome, con_mysql, 24);
  186.             cache_get_field_content(i, "Mensagem", Mensagem, con_mysql, 64);
  187.             format(Dialog, sizeof(Dialog), "%s%s: %s%s\r\n",Dialog,Nome,Mensagem,(strlen(Mensagem) >= 63) ? ("...") : (""));
  188.         }
  189.         if(cache_num_rows(con_mysql) >= 20)
  190.             strcat(Dialog, "\r\n{FFFF00}Próxima Página");
  191.         ShowPlayerDialog(playerid, (apenasnaolidas == false) ? (DialogMsgRecebida) : (DialogMsgNaoLidas), DIALOG_STYLE_LIST, "{FF0000}# {FFFFFF}Mensagens recebidas", Dialog, "Selecionar", "Cancelar");
  192.     } else SendClientMessage(playerid, -1, "{FF0000}[MP] Não há mensagens!");
  193.     cache_delete(re, con_mysql);
  194.     return 1;
  195. }
  196. carregar_MsgEnviadas(playerid) {
  197.     new str[250], Cache:en;
  198.     mysql_format(con_mysql, str, sizeof(str), "SELECT `mp_msgs`.`Mensagem`,`mp_contas`.`user` FROM `mp_msgs` INNER JOIN `mp_contas` ON `mp_msgs`.`para_contaid` = `mp_contas`.`id` WHERE `mp_msgs`.`de_contaid` = %i ORDER BY `mp_msgs`.`id` DESC LIMIT %i,20", GetPVarInt(playerid, "mp_system_contaid"), GetPVarInt(playerid, "mp_system_paglist"));
  199.     en = mysql_query(con_mysql, str, true);
  200.     if(cache_num_rows(con_mysql) > 0) {
  201.         new Nome[24], Mensagem[64], Dialog[1500];
  202.         for(new i; i < cache_num_rows(con_mysql); i++) {
  203.             cache_get_field_content(i, "user", Nome, con_mysql, 24);
  204.             cache_get_field_content(i, "Mensagem", Mensagem, con_mysql, 64);
  205.             format(Dialog, sizeof(Dialog), "%s%s: %s%s\r\n", Dialog,Nome,Mensagem,(strlen(Mensagem) >= 63) ? ("...") : (""));
  206.         }
  207.         if(cache_num_rows(con_mysql) >= 20)
  208.             strcat(Dialog, "\r\n{FFFF00}Próxima Página");
  209.         ShowPlayerDialog(playerid, DialogMsgEnviada, DIALOG_STYLE_LIST, "{FF0000}# {FFFFFF}Mensagens enviadas", Dialog, "Selecionar", "Cancelar");
  210.     }
  211.     else SendClientMessage(playerid, -1, "{FF0000}[MP] Não há mensagens!");
  212.     cache_delete(en, con_mysql);
  213.     return 1;
  214. }
  215.  
  216. // Comandos
  217. CMD:mp(playerid, params[]) {
  218.     new Msg[144], id, Mensagem[128];
  219.     if(GetPVarInt(playerid, "mp_sytem_bloqueado") == 1) return SendClientMessage(playerid, -1, "{FF0000}Você bloqueou as mensagens privadas.");
  220.     if(sscanf(params, "us[128]", id, Mensagem)) return SendClientMessage(playerid, -1, "{FF0000}* Use: /mp [id/nome] [mensagem]");
  221.     if(playerid == id) return SendClientMessage(playerid, -1, "{FF0000}Você não pode enviar mensagem para si mesmo.");
  222.     if(strlen(Mensagem) >= 127) return SendClientMessage(playerid, -1, "{FF0000}Mensagem grande demais!");
  223.     if(!IsPlayerConnected(id)) { // Caso o jogador não esteja 'online', ele irá receber a mensagem assim que se conectar
  224.         new Nome[24], Cache:ec, q1[250], Data[6];
  225.         sscanf(params, "s[24]s[128]", Nome, Mensagem);
  226.         getdate(Data[2], Data[1], Data[0]);
  227.         gettime(Data[3], Data[4], Data[5]);
  228.         mysql_format(con_mysql, q1, sizeof(q1), "SELECT id,novas_mensagens FROM mp_contas WHERE user='%e' LIMIT 1", Nome);
  229.         ec = mysql_query(con_mysql, q1, true);
  230.         if(cache_num_rows(con_mysql) > 0) {
  231.             new pid = cache_get_field_content_int(0, "id", con_mysql), novas = cache_get_field_content_int(0, "novas_mensagens", con_mysql);
  232.             mysql_format(con_mysql, q1, sizeof(q1), "INSERT INTO mp_msgs (de_contaid,para_contaid,Mensagem,lida,horario,data) VALUES (%i,%i,'%e',0,%i,'%02d/%02d/%d %02d:%02d')", GetPVarInt(playerid, "mp_system_contaid"), pid, Mensagem, gettime(), Data[0], Data[1], Data[2], Data[3], Data[4]);
  233.             mysql_query(con_mysql, q1, false);
  234.             mysql_format(con_mysql, q1, sizeof(q1), "UPDATE mp_contas SET novas_mensagens=%i WHERE id=%i", novas+1, pid);
  235.             mysql_query(con_mysql, q1, false);
  236.             format(Msg, sizeof(Msg), "{FFFF00}[MP ENVIADO] %s: %s",Nome,Mensagem);
  237.             SendClientMessage(playerid, -1, Msg);
  238.  
  239.         }
  240.         else SendClientMessage(playerid,-1, "{FF0000}Ocorreu um erro ao enviar uma mensagem privada a este jogador.");
  241.         cache_delete(ec, con_mysql);
  242.         return 1;
  243.     }
  244.     if(GetPVarInt(id, "mp_system_bloqueado") == 1) return SendClientMessage(playerid, -1, "{FF0000}Este jogador desabilitou o recebimento de mensagens privadas!");
  245.     new MyNome[24], OtNome[24];
  246.     GetPlayerName(playerid, MyNome, 24);
  247.     GetPlayerName(id, OtNome, 24);
  248.     format(Msg, 144, "{FFFF00}*[MP RECEBIDO] %s [%i]: %s", MyNome, playerid, Mensagem);
  249.     SendClientMessage(id, -1, Msg);
  250.     format(Msg, 144, "{FFFF00}*[MP ENVIADO] %s [%i]: %s", OtNome, id, Mensagem);
  251.     SendClientMessage(playerid, -1, Msg);
  252.     // Efetuar Query
  253.     new query[200], Data[6];
  254.     getdate(Data[2], Data[1], Data[0]);
  255.     gettime(Data[3], Data[4], Data[5]);
  256.     mysql_format(con_mysql, query, sizeof(query), "INSERT INTO mp_msgs (de_contaid,para_contaid,Mensagem,lida,horario,data) VALUES (%i,%i,'%e',1,%i,'%02d/%02d/%d %02d:%02d')", GetPVarInt(playerid, "mp_system_contaid"), GetPVarInt(id, "mp_system_contaid"), Mensagem, gettime(), Data[0], Data[1], Data[2], Data[3], Data[4]);
  257.     mysql_query(con_mysql, query, false);
  258.     return 1;
  259. }
  260. CMD:minhasmp(playerid, params[]) return ShowPlayerDialog(playerid, DialogOpMsg, DIALOG_STYLE_LIST, "{FFFF00}# {FFFFFF}Mensagens privadas:", "Recebidas\r\nEnviadas\r\nApenas não lidas", "Selecionar", "Cancelar");
  261. CMD:ativarmp(playerid, params[]) {
  262.     if(GetPVarInt(playerid, "mp_system_bloqueado") == 0) return SendClientMessage(playerid, -1, "{FF0000}As mensagens privadas já estão ativadas!");
  263.     SetPVarInt(playerid, "mp_system_bloqueado", 0);
  264.     SendClientMessage(playerid, -1, "{FFFF00}Mensagens privadas ativadas!");
  265.     return 1;
  266. }
  267. CMD:desativarmp(playerid, params[]) {
  268.     if(GetPVarInt(playerid, "mp_system_bloqueado") == 1) return SendClientMessage(playerid, -1, "{FF0000}As mensagens privadas já estão desativadas!");
  269.     SetPVarInt(playerid, "mp_system_bloqueado", 1);
  270.     SendClientMessage(playerid, -1, "{FFFF00}Mensagens privadas desativadas!");
  271.     return 1;
  272. }
  273. CMD:mps(playerid, params[]) return (GetPVarInt(playerid, "mp_system_bloqueado") == 0) ? (cmd_desativarmp(playerid, params)) : (cmd_ativarmp(playerid, params));
  274.  
  275. /*
  276.         www.brasilmegatrucker.com
  277.     Sistema criado por Nícolas Corrêa
  278. */
Advertisement
Add Comment
Please, Sign In to add comment