TLK
Ученик
Я думаю многие кто играл у Bana знает что там есть Kpk режим сообщений в режиме оффлайн, диалог в диалоговом окне. Так вот, я так подозреваю что бан спер ее у одного из пользователей форума: nurahmat007 (не этого). И я опять же решаю кинуть это Вам.
1) Система полностью на диалогах.
2) Написана на zcmd и MySQL r8.
3) Возможность отправить сообщение оффлайн
4) Уведомление игрока о новом сообщении
5) Список входящих/отправленных сообщений
6) Удаление всех сообщений одним кликом
настройка скрипта:
#define host "127.0.0.1" //хост
#define user "root" //пользователь
#define base "sms" //база данных
#define pass "" //пароль
#define users_table "players" //таблица, на котором хранятся аккаунты игроков
#define sms_table "sms" //таблица, на котором хранятся смс-сообщения
#define pname_field "`name`" //столбец ников игроков (users_table)
таблица
CREATE TABLE IF NOT EXISTS `sms` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(26) NOT NULL,
`sender` varchar(26) NOT NULL,
`message` varchar(64) NOT NULL,
`status` tinyint(1) NOT NULL,
PRIMARY KEY (`ID`)
) EN
к #include
к NEW
к #define
public ongamemodeinit
в любое место
в public ongamemodeexit
в public onplayerconnect
команда:
снова в любое место
в public OnDialogResponse
снова в любое место
1) Система полностью на диалогах.
2) Написана на zcmd и MySQL r8.
3) Возможность отправить сообщение оффлайн
4) Уведомление игрока о новом сообщении
5) Список входящих/отправленных сообщений
6) Удаление всех сообщений одним кликом
настройка скрипта:
#define host "127.0.0.1" //хост
#define user "root" //пользователь
#define base "sms" //база данных
#define pass "" //пароль
#define users_table "players" //таблица, на котором хранятся аккаунты игроков
#define sms_table "sms" //таблица, на котором хранятся смс-сообщения
#define pname_field "`name`" //столбец ников игроков (users_table)
таблица
CREATE TABLE IF NOT EXISTS `sms` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(26) NOT NULL,
`sender` varchar(26) NOT NULL,
`message` varchar(64) NOT NULL,
`status` tinyint(1) NOT NULL,
PRIMARY KEY (`ID`)
) EN
к #include
PHP:
#include <a_samp>
#include <a_mysql>
#include <zcmd>
PHP:
new connection;
new SendTo[MAX_PLAYERS][MAX_PLAYER_NAME],SMSRow[MAX_PLAYERS];
PHP:
#define host "127.0.0.1" //õîñò
#define user "root" //ïîëüçîâàòåëü
#define base "sms" //áàçà äàííûõ
#define pass "" //ïàðîëü
#define users_table "players" //òàáëèöà, íà êîòîðîì õðàíÿòñÿ àêêàóíòû
#define sms_table "sms" //òàáëèöà, íà êîòîðîì õðàíÿòñÿ SMS ñîîáùåíèÿ
#define pname_field "`name`" //ñòîëáåö íèêîâ èãðîêîâ â ÁÄ (users_table)
#define D_SMS1 100
#define D_SMS2 200
#define D_SMS3 300
#define D_SMS4 400
#define D_SMS5 500
#define D_SMS6 600
#define D_SMS7 700
PHP:
connection = mysql_connect(host,user,base,pass);
if(mysql_ping(connection) > 0) print("Mysql Connection: succes");
else if(mysql_ping(connection) == -1) print("------------ Mysql Connection: failed"), SetTimer("FailConnect",5000, true);
mysql_set_charset("cp1251_general_ci");
mysql_function_query(connection,"SET NAMES 'cp1251'",false,"","");
mysql_function_query(connection,"SET CHARACTER SET 'cp1251'",false,"","");
print("\n----------------------------------");
print(" SMS System Loaded!");
print("----------------------------------\n");
PHP:
forward FailConnect();
public FailConnect()
{
print("------------ Mysql Connection: failed");
}
PHP:
mysql_close(connection);
PHP:
SendTo[playerid] = "\0", SMSRow[playerid] = 0;
new query[128];
format(query,sizeof(query), "SELECT * FROM `sms` WHERE `name`='%s'", PlayerName(playerid));
mysql_function_query(connection, query, true, "SendPlayerNewMsgCountMessage", "d", playerid);
PHP:
CMD:sms(playerid,params[])
{
new query[128];
format(query,sizeof(query), "SELECT * FROM `sms` WHERE `name`='%s'", PlayerName(playerid));
mysql_function_query(connection, query, true, "OnPlayerSMSDialog", "i", playerid);
return 1;
}
PHP:
forward SendPlayerNewMsgCountMessage(playerid);
public SendPlayerNewMsgCountMessage(playerid)
{
new rows,fields;
cache_get_data(rows,fields,connection);
if(rows)
{
new str[64];
format(str,sizeof(str), "У вас %d новых сообщений (/sms)", rows);
SendClientMessage(playerid, -1, str);
}
return 1;
}
forward OnPlayerSMSDialog(playerid);
public OnPlayerSMSDialog(playerid)
{
new rows,fields;
cache_get_data(rows,fields,connection);
new query[128];
format(query,sizeof(query), "SELECT * FROM `sms` WHERE `sender`='%s'", PlayerName(playerid));
mysql_function_query(connection, query, true, "OnPlayerSMSDialog2", "ii", playerid, rows);
return 1;
}
forward OnPlayerSMSDialog2(playerid, count);
public OnPlayerSMSDialog2(playerid, count)
{
new rows, fields,str[156];
cache_get_data(rows,fields,connection);
format(str,sizeof(str), "Отправить сообщение\nВходящие ({FF0000}%d{FFFFFF})\nОтправленные ({FF0000}%d{FFFFFF})\nУдалить сообщения", count > 0 ? (count) : (0), rows > 0 ? (rows) : (0));
ShowPlayerDialog(playerid, D_SMS1, DIALOG_STYLE_LIST, "SMS-System", str, "Выбрать","Закрыть");
return 1;
}
forward SendSMS(playerid, name[]);
public SendSMS(playerid, name[])
{
new rows,fields;
cache_get_data(rows,fields,connection);
if(rows)
{
new str[256];
format(str,sizeof(str), "{FFFFFF}Отправить SMS пользователю: %s\nВведите текст сообщения:",name);
ShowPlayerDialog(playerid, D_SMS4, DIALOG_STYLE_INPUT, "Отправить сообщение", str, "Отправить", "Назад");
strmid(SendTo[playerid],name, 0, strlen(name), 26);
}
else SendClientMessage(playerid, -1, "Этот игрок не зарегистрирован на сервере!"), cmd_sms(playerid, "");
return 1;
}
forward ShowPlayerMessage(playerid, row);
public ShowPlayerMessage(playerid, row)
{
new str[256],name[MAX_PLAYER_NAME],status;
cache_get_field_content(row, "message", str, connection);
cache_get_field_content(row, "sender", name, connection);
status = cache_get_field_int(row, "status", connection);
SMSRow[playerid] = cache_get_field_int(row, "ID", connection);
if(status)
{
new query[50];
format(query,sizeof(query),"UPDATE `sms` SET `status`=0 WHERE `ID`=%d", SMSRow[playerid]);
mysql_function_query(connection,query,false,"","");
}
format(str,sizeof(str), "{FFFFFF}Отправитель: %s\n\n%s",name,str);
ShowPlayerDialog(playerid, D_SMS5, DIALOG_STYLE_MSGBOX, "Читать SMS", str, "Удалить", "Назад");
return 1;
}
forward ShowPlayerSendedMessage(playerid, row);
public ShowPlayerSendedMessage(playerid, row)
{
new str[256],name[MAX_PLAYER_NAME],status;
cache_get_field_content(row, "message", str, connection);
cache_get_field_content(row, "name", name, connection);
status = cache_get_field_int(row, "status", connection);
SMSRow[playerid] = cache_get_field_int(row, "ID", connection);
format(str,sizeof(str), "{FFFFFF}Получатель: %s (%s)\n\n%s",name,!status ? ("{00FFFF}Прочтено{FFFFFF}") : ("{FF0000}Не прочтено{FFFFFF}"),str);
ShowPlayerDialog(playerid, D_SMS7, DIALOG_STYLE_MSGBOX, "Читать SMS", str, "Удалить", "Назад");
return 1;
}
forward ShowPlayerSMSList(playerid);
public ShowPlayerSMSList(playerid)
{
new rows,fields,str[MAX_PLAYER_NAME+2],str2[MAX_PLAYER_NAME+2],string[(MAX_PLAYER_NAME+2)*100];
cache_get_data(rows,fields,connection);
if(rows)
{
for(new i; i<rows; i++)
{
cache_get_field_content(i, "sender", str, connection);
format(str2,sizeof(str2), "%s\n", str);
strins(string, str2, strlen(string));
}
ShowPlayerDialog(playerid, D_SMS3, DIALOG_STYLE_LIST, "Входящие", string, "Выбрать", "Назад");
}
else SendClientMessage(playerid, -1, "Список входящих сообщений пуст!"), cmd_sms(playerid, "");
return 1;
}
forward ShowPlayerSendSMSList(playerid);
public ShowPlayerSendSMSList(playerid)
{
new rows,fields,str[MAX_PLAYER_NAME+2],str2[MAX_PLAYER_NAME+2],string[(MAX_PLAYER_NAME+2)*100];
cache_get_data(rows,fields,connection);
if(rows)
{
for(new i; i<rows; i++)
{
cache_get_field_content(i, "name", str, connection);
format(str2,sizeof(str2), "%s\n", str);
strins(string, str2, strlen(string));
}
ShowPlayerDialog(playerid, D_SMS6, DIALOG_STYLE_LIST, "Отправленные", string, "Выбрать", "Назад");
}
else SendClientMessage(playerid, -1, "Список отправленных сообщений пуст!"), cmd_sms(playerid, "");
return 1;
}
PHP:
case D_SMS1:
{
if(response)
{
switch(listitem)
{
case 0: ShowPlayerDialog(playerid, D_SMS2, DIALOG_STYLE_INPUT, "Отправить SMS", "{FFFFFF}Введите ник игрока, которому хотите отправить личное сообщение:", "Далее", "Назад");
case 1:
{
new query[128];
format(query,sizeof(query), "SELECT * FROM `sms` WHERE `name`='%s'", PlayerName(playerid));
mysql_function_query(connection, query, true, "ShowPlayerSMSList", "d", playerid);
}
case 2:
{
new query[128];
format(query,sizeof(query), "SELECT * FROM `sms` WHERE `sender`='%s'", PlayerName(playerid));
mysql_function_query(connection, query, true, "ShowPlayerSendSMSList", "d", playerid);
}
case 3:
{
new query[128];
format(query,sizeof(query), "DELETE FROM `sms` WHERE `sender`='%s'", PlayerName(playerid));
mysql_function_query(connection, query, false, "","");
format(query,sizeof(query), "DELETE FROM `sms` WHERE `name`='%s'", PlayerName(playerid));
mysql_function_query(connection, query, false, "","");
SendClientMessage(playerid, -1, "Список сообщение очищен!");
}
}
}
return 1;
}
case D_SMS2:
{
if(response)
{
if(!strlen(inputtext) || strlen(inputtext) < 3) return ShowPlayerDialog(playerid, D_SMS2, DIALOG_STYLE_INPUT, "Отправить SMS", "{FFFFFF}Введите ник игрока, которому хотите отправить личное сообщение:", "Далее", "Назад");
new query[512];
format(query,sizeof(query),"SELECT * FROM "users_table" WHERE `name`="pname_field"", inputtext);
mysql_function_query(connection,query,true, "SendSMS", "is",playerid, inputtext);
}
else cmd_sms(playerid, "");
return 1;
}
case D_SMS3:
{
if(response)
{
mysql_function_query(connection, "SELECT * FROM `sms`", true, "ShowPlayerMessage","ii",playerid, listitem);
}
else cmd_sms(playerid,"");
return 1;
}
case D_SMS4:
{
if(response)
{
if(!strlen(inputtext) || strlen(inputtext) > 80) return true;
new query[150];
format(query,sizeof(query), "INSERT INTO `sms` (`name`, `sender`, `message`, `status`) VALUES ('%s', '%s', '%s',1)", SendTo[playerid], PlayerName(playerid), inputtext);
mysql_function_query(connection, query, false, "","");
for(new i; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(!strcmp(PlayerName(i), SendTo[playerid], false))
{
new str[70];
format(str,sizeof(str),"Вам новое SMS-Сообщение от %s(%d) (/sms)", PlayerName(i), i);
SendClientMessage(i, -1, str);
break;
}
}
}
SendTo[playerid]= "\0";
SendClientMessage(playerid, -1, "Сообщение успешно отправлено!");
return 1;
}
else cmd_sms(playerid, "");
return 1;
}
case D_SMS5:
{
if(response)
{
new query[128];
format(query,sizeof(query),"DELETE FROM `sms` WHERE `ID`=%d",SMSRow[playerid]);
mysql_function_query(connection, query, false, "","");
SMSRow[playerid] = 0;
SendClientMessage(playerid, -1, "Сообщение успешно удалено!");
}
else
{
new query[128];
format(query,sizeof(query), "SELECT * FROM `sms` WHERE `name`='%s'", PlayerName(playerid));
mysql_function_query(connection, query, true, "ShowPlayerSMSList", "d", playerid);
}
return 1;
}
case D_SMS6:
{
if(response)
{
new str[70];
format(str,sizeof(str),"SELECT * FROM `sms` WHERE `sender`='%s'",PlayerName(playerid));
mysql_function_query(connection,str , true, "ShowPlayerSendedMessage","ii",playerid, listitem);
}
else cmd_sms(playerid,"");
return 1;
}
case D_SMS7:
{
if(response)
{
new query[128];
format(query,sizeof(query),"DELETE FROM `sms` WHERE `ID`=%d",SMSRow[playerid]);
mysql_function_query(connection, query, false, "","");
SMSRow[playerid] = 0;
SendClientMessage(playerid, -1, "Сообщение успешно удалено!");
}
else
{
new query[128];
format(query,sizeof(query), "SELECT * FROM `sms` WHERE `sender`='%s'", PlayerName(playerid));
mysql_function_query(connection, query, true, "ShowPlayerSendSMSList", "d", playerid);
}
return 1;
}
}
PHP:
stock PlayerName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
return name;
}
