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

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

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

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

Система помощников (хелперов)

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

McLuhan

Компетентный
Система хелперки как на [RP]GameWorld.

Описание: Помощь новичкам.
Всего уровней хелпера - 3.
1. Что бы задать вопрос хелперам, введите /vopros [текст] - если хелпер не на дежурстве, он не увидет что написал кто-то вопрос.

2. Что бы хелперу ответить нужно ввести /ans [id/nick] [текст] - если хелпер не на дежурстве то хелпер не сможет ответить игроку.

3. Что бы написать в чат хелперов, введите /hc [текст].

4. Что бы выйти на дежурство, введите /hduty, что бы покинуть дежурство, снова введите /hduty.

5. Что бы выдать хелперку игроку, введите /makehelper [id/nick] [уровень хелперки 1-3] - 0 - снять. Эта команда доступна только администратору 1338уровня и хелперу 3уровня.



**************************************Начинаем делать**************************************



1. Для начала найдем(CTRL+F) 'pInfo'. И вставим туда.. Желательно после, ниже pAdmin,
PHP:
	pHelper,
2. А теперь найдем(CTRL+F) 'new'. И вставим туда.. - Просто рядом со всеми new -вами вставляйте этот.
PHP:
new HelperDuty[MAX_PLAYERS];
3. А теперь найдем(CTRL+F) 'public OnPlayerConnect(playerid)'. И вставим туда.. Желательно после, ниже PlayerInfo[playerid][pAdmin] = 0;
PHP:
	PlayerInfo[playerid][pHelper] = 0;
4. Теперь снова найдем(CTRL+F) 'public OnPlayerConnect(playerid)'. И вставим туда.. - Найдите что-то похожее в этом паблике на HelperDuty[playerid] = 0; - и вставьте рядом с ними это.
PHP:
	HelperDuty[playerid] = 0;
5. А теперь найдем(CTRL+F) 'public OnPlayerRegister(playerid, password[])'. И вставим туда.. Желательно после, ниже iniSetInt(File,"AdminLevel",PlayerInfo[playerid][pAdmin]);
PHP:
			iniSetInt(File,"HelperLevel",PlayerInfo[playerid][pHelper]);
6. А теперь найдем(CTRL+F) 'public OnPlayerUpdate_GF(playerid)'. И вставим туда.. Желательно после, ниже iniSetInt(File,"AdminLevel",PlayerInfo[playerid][pAdmin]);
PHP:
			iniSetInt(File,"HelperLevel",PlayerInfo[playerid][pHelper]);
7. А теперь найдем(CTRL+F) 'public OnPlayerLogin(playerid,password[])'. И вставим туда.. Желательно после, ниже iniGetInt(File,"AdminLevel",PlayerInfo[playerid][pAdmin]);
PHP:
 	    iniGetInt(File,"HelperLevel",PlayerInfo[playerid][pHelper]);
8. Теперь снова найдем(CTRL+F) 'public OnPlayerLogin(playerid,password[])'. Найдите там что-то вроде.. "Вы зашли администратором, таким-то уровня.", нашли? хорошо. Ниже "примерно" этого:
PHP:
	if (PlayerInfo[playerid][pAdmin] > 0)
	{
		format(string2, sizeof(string2), "Вы вошли администратором, %d уровня.",PlayerInfo[playerid][pAdmin]);
		SendClientMessage(playerid, COLOR_WHITE,string2);
	}
Вставьте это:
PHP:
	if (PlayerInfo[playerid][pHelper] >= 1)
	{
		format(string2, sizeof(string2), "Вы вошли хелпером, %d уровня.",PlayerInfo[playerid][pHelper]);
		SendClientMessage(playerid, COLOR_WHITE,string2);
	}
^ Это для того что бы когда зашёл хелпер первого или выше уровня, ему писало что он хелпер такого-то уровня.

9. А теперь найдем(CTRL+F) 'forward'. И вставим туда.. - Просто рядом со всеми forward -дами вставляйте этот.
PHP:
forward SendHelperMessage(color, string[]);
10. И теперь самом конце мода вставим этот паблик.
PHP:
public SendHelperMessage(color, string[])
{
	for(new i = 0; i < MAX_PLAYERS; i++)
	{
		if(IsPlayerConnected(i))
		{
		    if(PlayerInfo[i][pHelper] >= 1)
		    {
				SendClientMessage(i, color, string);
			}
		}
	}
}

---------------------------------------------------------------------------------------------------------------------
Ну что-же, структуру мы приготовили. А теперь о командах.

1. Команда для просмотра "Помощников онлайн" и "Помощников онлайн на дежурстве". - Вставляем в паблик public OnPlayerCommandText(playerid, cmdtext[])
PHP:
	if (strcmp(cmd, "/helpers", true) == 0)
	{
        if(IsPlayerConnected(playerid))
	    {
			for(new i = 0; i < MAX_PLAYERS; i++)
			{
				if(IsPlayerConnected(i))
				{
				    if(PlayerInfo[i][pHelper] >= 1)
				    {
						GetPlayerName(i, sendername, sizeof(sendername));
    					format(string, 256, "* Помощники онлайн:");
    					SendClientMessage(playerid, COLOR_LIGHTRED, string);
						format(string, 256, "* %s[id: %d]. Hlvl: %d",sendername, i, PlayerInfo[i][pHelper]);
						SendClientMessage(playerid, COLOR_YELLOW, string);
					}
    				if(PlayerInfo[i][pHelper] >= 1 && HelperDuty[playerid] == 1)
				    {
						GetPlayerName(i, sendername, sizeof(sendername));
    					format(string, 256, "* Помощники онлайн на дежурстве:");
    					SendClientMessage(playerid, COLOR_LIGHTRED, string);
						format(string, 256, "* %s[id: %d]. Hlvl: %d",sendername, i, PlayerInfo[i][pHelper]);
						SendClientMessage(playerid, COLOR_YELLOW, string);
					}
					
				}
			}
		}
		return 1;
	}
2. Команда для выхода на дежурство и окончание дежурства. - Вставляем в паблик public OnPlayerCommandText(playerid, cmdtext[])
PHP:
	if(strcmp(cmdtext, "/hduty", true) == 0 || strcmp(cmdtext, "/helperduty", true) == 0)
	{
		if(IsPlayerConnected(playerid))
		{
			if(gPlayerLogged[playerid] == 0)
			{
				SendClientMessage(playerid, COLOR_GREY, "Вы не авторизированы!");
				return 1;
			}
			if(PlayerInfo[playerid][pHelper] >= 1)
			{
				if(HelperDuty[playerid] == 0)
				{
              		HelperDuty[playerid] = 1;
              		GetPlayerName(playerid, sendername, sizeof(sendername));
              		format(string, sizeof(string), "(( [H] Хелпер %s ждет ваши вопросы! (/вопрос) ))", sendername);
              		BroadCast(COLOR_OOC,string);
              		return 1;
          		}
          		else if(HelperDuty[playerid] == 1)
          		{
              		HelperDuty[playerid] = 0;
              		GetPlayerName(playerid, sendername, sizeof(sendername));
              		format(string, sizeof(string), "(( [H] Хелпер %s не активен. ))", sendername);
              		BroadCast(COLOR_OOC,string);
              		return 1;
          		}
      		}
      		else
      		{
          		SendClientMessage(playerid, COLOR_GREY, "У вас нет прав на использование данной команды.");
          		return 1;
      		}
  		}
     	return 1;
 	}
3. Команда для подачи вопроса Хелперам. - Вставляем в паблик public OnPlayerCommandText(playerid, cmdtext[])
PHP:
	if(strcmp(cmd, "/vopros", true) == 0 || strcmp(cmd, "/вопрос", true) == 0)
	{
	    if(IsPlayerConnected(playerid))
	    {
 			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))
			{
				SendClientMessage(playerid, COLOR_GRAD2, "{ffffff}Введите: /vopros [text]");
				return 1;
			}
			if(HelperDuty[playerid] == 1)
			{
				format(string, sizeof(string), "Вопрос от %s[%d]: %s", sendername, playerid, (result));
				SendHelperMessage(0x10F441AA, string);
			}
			SendClientMessage(playerid, COLOR_YELLOW, "Ваш вопрос отправлен хелперам!");
			format(string, sizeof(string), "Вопрос от %s[%d]: %s", sendername, playerid, (result));
 			SendClientMessage(playerid, COLOR_LIGHTRED, string);
		}
      	return 1;
	}
4. Команда для ответа на вопрос. - Вставляем в паблик public OnPlayerCommandText(playerid, cmdtext[])
PHP:
		if(strcmp(cmd, "/ans", true) == 0)
		{
			if(IsPlayerConnected(playerid))
		    {
				if(PlayerInfo[playerid][pHelper] >= 1)
				{
					tmp = strtok(cmdtext, idx);
					if(!strlen(tmp))
					{
						SendClientMessage(playerid, COLOR_GRAD2, "{ffffff}Введите: /ans [PlayerID] [text]");
						return 1;
					}
					if(HelperDuty[playerid] == 1)
					{
						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))
								{
									SendClientMessage(playerid, COLOR_GRAD2, "{ffffff}Введите: /ans [PlayerID] [text]");
									return 1;
								}
								format(string, sizeof(string), "[HELPER] %s: %s", sendername, (result));
								SendClientMessage(giveplayerid, COLOR_LIGHTRED, string);
								format(string, sizeof(string), "*[H] %s ответил %s[%d]: %s", sendername, giveplayer, giveplayerid,(result));
								SendHelperMessage(COLOR_LIGHTRED, string);
								return 1;
							}
						}
						else
						{
							format(string, sizeof(string), "%d не в сети", giveplayerid);
							SendClientMessage(playerid, COLOR_GRAD1, string);
						}
					}
					else
					{
						SendClientMessage(playerid, COLOR_WHITE, "Вы не на дежурстве.");
					}
				}
				else
				{
					SendClientMessage(playerid, COLOR_WHITE, "Нет прав на использование данной команды.");
				}
			}
			else
			{
				SendClientMessage(playerid, COLOR_WHITE, "Вы не авторизированы.");
			}
			return 1;
		}
5. Команда для того, что бы писать в чат хелперов. - Вставляем в паблик public OnPlayerCommandText(playerid, cmdtext[])
PHP:
	if(strcmp(cmd, "/helper", true) == 0 || strcmp(cmd, "/hc", true) == 0)
	{
	    if(IsPlayerConnected(playerid))
	    {
	        if (PlayerInfo[playerid][pHelper] >= 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))
				{
					SendClientMessage(playerid, COLOR_GRAD2, "{ffffff}Введите: (/hc) [helpers chat]");
					return 1;
				}
				format(string, sizeof(string), "* %d Хелпер %s: %s", PlayerInfo[playerid][pHelper], sendername, result);
				SendHelperMessage(COLOR_GREEN, string);
				printf("Helper %s: %s", sendername, result);
			}
		}
		return 1;
	}
5. Команда для того, что бы дать/изменить уровень хелпера игрока. - Вставляем в паблик public OnPlayerCommandText(playerid, cmdtext[])
PHP:
	if(strcmp(cmd, "/makehelper", true) == 0)
	{
	    if(IsPlayerConnected(playerid))
	    {
			tmp = strtok(cmdtext, idx);
			if(!strlen(tmp))
			{
				SendClientMessage(playerid, COLOR_GRAD2, "{ffffff}Введите: /makehelper [playerid] [level(1-3, 0-убрать хеллперку]");
				return 1;
			}
			new para1;
			new level;
			para1 = ReturnUser(tmp);
			tmp = strtok(cmdtext, idx);
			level = strval(tmp);
			if(PlayerInfo[playerid][pHelper] == 3 || PlayerInfo[playerid][pAdmin] >= 1338)
			{
			    if(IsPlayerConnected(para1))
			    {
			        if(para1 != INVALID_PLAYER_ID)
			        {
						GetPlayerName(para1, giveplayer, sizeof(giveplayer));
						GetPlayerName(playerid, sendername, sizeof(sendername));
						PlayerInfo[para1][pHelper] = level;
						if(level < 0 || level > 3) return SendClientMessage(playerid, COLOR_GREY, "Не меньше '0' и не больше '3'.");
						format(string, sizeof(string), "You have been promoted to a level %d helper by %s.", level, sendername);
						SendClientMessage(para1, COLOR_LIGHTBLUE, string);
						format(string, sizeof(string), "You are promoted %s to helper level %d.", giveplayer,level);
						SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
					}
				}
			}
			else
			{
				SendClientMessage(playerid, COLOR_GRAD1, "{ffffff}Вам не доступна эта функция");
			}
		}
		return 1;
	}
На этом всё.

Писал сам для своего сервера.
Автор: Mesmer aka McLuhan(Eugen_McLuhan)

** Будут вопросы, задавайте в тему. **
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу