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

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

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

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

[AFK: %d\900] над головой. Урок.

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

pesnike

Умник
Урок создание 3д текста над головой персонажа, если он выкинулся из игры (ESC, свернул окно). Вроде такого урока ещё не было, но я могу и заблуждаться.​
К PlayerInfo добавляем:
HTML:
	pAFKStat,
	pAFKTime,
	Text3D:pAFKText,
	pAFKTextStat,
Ко всем forward'am:
HTML:
forward afk();
В OnPlayerConnect:
HTML:
	PlayerInfo[playerid][pAFKTextStat] = 55555;
Создаём паблик афк:
HTML:
public AFK(playerid)
{
	if(PlayerInfo[playerid][pAFKStat] == 1)
	{
		PlayerInfo[playerid][pAFKStat] = 0;   // Если равен одному, то есть игрок в игре, даём значение нуля. 
		PlayerInfo[playerid][pAFKTime] = 0;
		if(PlayerInfo[playerid][pAFKTextStat] != 55555) // если уже был создан текст над головой, удаляем
		{
			Delete3DTextLabel(PlayerInfo[playerid][pAFKText]);
			PlayerInfo[playerid][pAFKTextStat] = 55555;
		}
	}
	else
	{
	    PlayerInfo[playerid][pAFKTime]++; //переменная равна нулю, значит игрок в афк
		new string[128];
		format(string, sizeof(string),"{CC6600}[AFK: {FFFFFF}%d/900{CC6600}]",PlayerInfo[playerid][pAFKTime]);
		if(PlayerInfo[playerid][pAFKTime] == 1)
		{
		PlayerInfo[playerid][pAFKText] = Create3DTextLabel(string, COLOR_WHITE, 0.0, 0.0, 0.0, 20.0, 0, 1);
		Attach3DTextLabelToPlayer(PlayerInfo[playerid][pAFKText],playerid, 0.0, 0.0, 0.4);
		PlayerInfo[playerid][pAFKTextStat] = 0;
		}
		else
		{
		    Update3DTextLabelText(PlayerInfo[playerid][pAFKText], COLOR_WHITE, string);
			if(PlayerInfo[playerid][pAFKTime] == 900) // 900 это время в секундах через которое игрока кикнет, можно заменить на своё.
			{
			    SendClientMessage(playerid, COLOR_WHITE, "(( Вы слишком долго находились вне игрового процесса. Вы кикнуты. ))");
			    Delete3DTextLabel(PlayerInfo[playerid][pAFKText]);
			    PlayerInfo[playerid][pAFKTextStat] = 55555;
			    Kick(playerid);
			}
		}
	}
}
Теперь идём в OnPlayerUpdate и в самое начала добавляем:
HTML:
PlayerInfo[playerid][pAFKStat] = 1;
То есть. Когда игрок свернул окно, либо нажал ESC паблик OnPlayerUpdate перестаёт вызываться, значит переменная будет равна 0 и будет текст над головой. Как только игрок зайдёт, паблик будет вызван и переменная станет равна 1, текст удалиться.
Да, и в OnPlayerDisconnect:
HTML:
	if(PlayerInfo[playerid][pAFKTextStat] != 55555)
	{
	    Delete3DTextLabel(PlayerInfo[playerid][pAFKText]);
	}
В OnGameModeInit()
HTML:
SetTimer("AFK",1000,true);
Система испробована, она полностью рабочая.
Да, разрешаю копировать, но с ссылкой на первоисточник!
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу