Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал KPK (MYSQL)

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

PHP:
#include <a_samp>
#include <a_mysql>
#include <zcmd>
к NEW

PHP:
new connection;
new SendTo[MAX_PLAYERS][MAX_PLAYER_NAME],SMSRow[MAX_PLAYERS];
к #define

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
public ongamemodeinit

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");
}
в public ongamemodeexit

PHP:
mysql_close(connection);
в public onplayerconnect

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;
}
в public OnDialogResponse
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;
}
 
Сверху Снизу