Доступ к архиву

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

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

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

Supports

Статус
В этой теме нельзя размещать новые ответы.

Nakiner

Новичок
Здравствуйте, уважаемые пользователи Павно-Инфо. Сегодня я рад представить вам систему саппортов, как на самп-рп для двух версий (Mysql, MxINI)
Что-ж, приступим.
Для начала в enum pInfo добавим строчку.
PHP:
enum pInfo
{
	pKey[64],
	pLevel,
 	pAdmin,
 	pSupport, - То что нам надо.
Теперь - найдем обнуление коннектяхищся аккаунтов, у меня это ClearStockAccount и вставим туда после pAdmin.
PHP:
	PlayerInfo[playerid][pAdmin] = 0;
	PlayerInfo[playerid][pSupport] = 0;
Важное замечание вставлять надо как в pInfo дабы не запутаться.
Далее. Находим паблик сохранения аккаунтов. У меня это SaveAccount.
Строчка должна быть цифрового типа.
И вставляем по типу после pAdmin. У меня в оптимизированном варианте.
PHP:
SetAccount(name,"Support",PlayerInfo[playerid][pSupport]);

stock SetAccount(username[], obtaining[], value)
{
	new Query[128];
	format(Query, sizeof(Query), "UPDATE "TABLE_ACCOUNT" SET %s = '%d' WHERE `Name` = '%s'", obtaining, value, username);
	return mysql_query(Query);
}
У кого же mxini - Открываем файл аккаунта и ставим значение по типу других.
Теперь находим паблик типа OnPlayerLogin или прочий - который получает данные из аккаунта.
Добавляем:
PHP:
sql_getInteger("Support",PlayerInfo[playerid][pSupport]);
Это типовая строчка получения данных, у вас может отличаться, но смысл думаю понятен.
Далее находим условие если аккаунт зареган или нет - у меня pReg == 0.
Добавим это.
PHP:
PlayerInfo[playerid][pSupport] = 0;
Теперь сделаем систему ответов - вопросов.
Для начала нам нужно создать саму систему.
Ко всем forward's
PHP:
forward SBroadCast(color, const string[], level);
Ко всем stock
PHP:
stock SBroadCast(color, const string[], level)
{
	foreach (new i : Player) - Если нету foreach заменяем на for(new i = 0; i < MAX_PLAYERS; i++)
	{
		if(IsPlayerConnected(i))
		{
			if(PlayerInfo[i][pSupport] >= level) SendClientMessage(i, color, string);
		}
	}
	return true;
}
Теперь добавим команду для ответов.
PHP:
	if(strcmp(cmd, "/ans", true) == 0)
	{
		if(PlayerInfo[playerid][pSupport] == 1)
		{
			tmp = strtok(cmdtext, idx);
			if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /ans [id] [ответ]");
			giveplayerid = ReturnUser(tmp);
			if(IsPlayerConnected(giveplayerid))
			{
				if(giveplayerid != INVALID_PLAYER_ID)
				{
					GetPlayerName(playerid, sendername, sizeof(sendername));
					GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
					new length = strlen(cmdtext);
					while((idx < length) && (cmdtext[idx] <= ' ')) idx ++;
					new offset = idx;
					new result[64];
					while((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
					{
						result[idx - offset] = cmdtext[idx];
						idx ++;
					}
					result[idx - offset] = EOS;
					if(!strlen(result)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /ans [id] [ответ]");
					format(string, sizeof(string), "Вопрос от %s[%d]: %s", sendername, playerid, (result));
					SendClientMessage(giveplayerid, 0xD97700AA, string);
					format(string, sizeof(string), "<-Ответ к %s[%d]: %s", giveplayer, giveplayerid, (result));
					SBroadCast(0xD97700AA, string, 1);
				}
			}
			else return SendClientMessage(playerid, COLOR_GREY, "Игрок не найден");
		}
		return true;
	}
Команда для помощи саппортам.
PHP:
	if(strcmp(cmd, "/shelp",true) == 0)
	{
	    if(PlayerInfo[playerid][pSupport] == 1)
	    {
	        SendClientMessage(playerid, COLOR_YELLOW2, "/sc - Чат Саппортов");
	        SendClientMessage(playerid, COLOR_YELLOW2, "/ans - Ответить на вопрос");
	        SendClientMessage(playerid, COLOR_YELLOW2, "/supports - Саппорты онлайн");
		}
	}
Саппорты в сети.
PHP:
	if(strcmp(cmd, "/supports", true) == 0)
	{
		SendClientMessage(playerid, COLOR_YELLOW, "Саппорты Online:");
 		foreach (new i : Player) - Если нету foreach заменяем на for(new i = 0; i < MAX_PLAYERS; i++)
		{
			if(IsPlayerConnected(i))
   			{
				if(PlayerInfo[i][pSupport] == 1)
   				{
					GetPlayerName(i, sendername, sizeof(sendername));
					format(string, sizeof(string), "%s[ID:%d]", sendername,i);
					SendClientMessage(playerid, COLOR_YELLOW2, string);
			    }
		    }
		}
  		return true;
	}
Чат саппортов.
PHP:
	if(strcmp(cmd, "/sc", true) == 0)
	{
		if(PlayerInfo[playerid][pSupport] == 1)
		{
			GetPlayerName(playerid, sendername, sizeof(sendername));
			new length = strlen(cmdtext);
			while((idx < length) && (cmdtext[idx] <= ' ')) idx ++;
			new offset = idx;
			new result[64];
			while((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
			{
				result[idx - offset] = cmdtext[idx];
				idx ++;
			}
			result[idx - offset] = EOS;
			if(!strlen(result)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /sc [Текст]");
			format(string, sizeof(string), "< SUPPORTS > %s: %s", sendername, result);
			SBroadCast(COLOR_YELLOW, string, 1);
		}
		return true;
	}
Теперь добавим отображение вопросов.
PHP:
case 229:
		{
			if(response)
			{
				if(!strlen(inputtext))return ShowPlayerDialog(playerid,229,DIALOG_STYLE_INPUT, "Задать вопрос", "Вы собираетесь задать вопрос саппортам", "Отправить", "Отмена");
				new sendername[MAX_PLAYER_NAME];
				GetPlayerName(playerid, sendername, sizeof(sendername));
				format(string, sizeof(string), "->Вопрос %s[%d]: %s", sendername, playerid, (inputtext));
				SendClientMessage(playerid, COLOR_YELLOW, string);
				SendClientMessage(playerid, COLOR_LIGHTRED, "Ваш вопрос был отправлен саппортам");
				format(string, sizeof(string), "->Вопрос %s[%d]: %s", sendername, playerid, (inputtext));
				SBroadCast(0xD97700AA, string, 1);
				return true;
			}
			else
			{
				new listitems[] = "Тут идут пункты из диалога /mm. Пункт меняю добавляете в конец. {FFFB00}Задать вопрос по игре{FFFB00}";
				ShowPlayerDialog(playerid, Айди диалога /mm, DIALOG_STYLE_LIST, "Личное меню", listitems, "Выбрать", "Отмена");
				return true;
			}
		}
Находим диалог /mm и ставим ко всем case. номер кейса должен соответствовать пункту меню.
PHP:
case 3: ShowPlayerDialog(playerid, 229, DIALOG_STYLE_INPUT, "Отправить вопрос", "Вы собираетесь отправить вопрос саппортам", "Отправить", "Отмена");
И наконец команда назначения саппортом.
PHP:
	if(strcmp(cmd, "/makesupport", true) == 0)
	{
		if(PlayerInfo[playerid][pAdmin] >= Ур.админки тут)
		{
		    if(IsPlayerConnected(playerid))
		    {
				tmp = strtok(cmdtext, idx);
				if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /makesupport [playerid] [Уровень(0-1)]");
				new para1;
				new level;
				para1 = ReturnUser(tmp);
				tmp = strtok(cmdtext, idx);
				level = strval(tmp);
			    if(IsPlayerConnected(para1))
			    {
			        if(para1 != INVALID_PLAYER_ID)
			        {
      					if(level > 1 || level < 0) return SendClientMessage(playerid, COLOR_GREY, "Нельзя меньше 0 и больше 1");
						GetPlayerName(para1, giveplayer, sizeof(giveplayer));
						GetPlayerName(playerid, sendername, sizeof(sendername));
						if(level == 1)
			        	{
							format(string, sizeof(string), "Вы были назначены саппортом администратором %s ::: /shelp - Команды саппорта", sendername);
							SendClientMessage(para1, COLOR_LIGHTBLUE, string);
							format(string, sizeof(string), "Вы назначили %s саппортом", giveplayer;
							SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
							PlayerInfo[para1][pSupport] = level;
						}
						if(level == 0)
						{
						    format(string, sizeof(string), "Вы были сняты с саппорта администратором %s", sendername);
							SendClientMessage(para1, COLOR_LIGHTBLUE, string);
						    format(string, sizeof(string), "Вы сняли %s с саппорта", giveplayer,level);
							SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
							PlayerInfo[para1][pSupport] = level;
	  					}
					}
				}
			}
		}
		return true;
	}
Примечание. Надо заменить все listitems вашего /mm на новые дабы везде работало.
Всем спасибо за внимание. будут вопросы пишите помогу.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу