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

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

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

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

Мануал Система ранений (РП)

PWNOldschool

Нуль
Регистрация
14 Авг 2016
Сообщения
5
Лучшие ответы
0
Репутация
0
Всем привет! Давно не занимаюсь сампом и пашней, очень давно. А тут решил поковырять старый мод, увидел систему ранений свою, отдаю на доведение до ума)
П.С.
Тапками не кидайте, я много лет этим не занимаюсь и а, я знаю за нагрузку. И да, я знаю что вы будите кричать, что сделали бы лучше. Просто укажите на ошибки, многие систему оценили ! Отдаю просто так, извините если не так что оформил.


И так:
Создаем переменную с анимацией
PHP:
new Ubit[MAX_PLAYERS];
UbitAnimation(playerid,animlib[],animname[], Float:Speeds, looping, lockx, locky, lockz, lp)
{
    Ubit[playerid] = 1;
    ApplyAnimation(playerid, animlib, animname, Speeds, looping, lockx, locky, lockz, lp);
}
Создаем переменные в которые буем записывать единички и нолики (PlayerInfo)

PHP:
enum pInfo
{
	phospactual, // Запись о том, что на коленях
	phosptime, // Ввели команду /hospital и ждем когда склеим ласты
	phospdead, //Если мы только что сдохли и еще не вылечились в больке 
}
new PlayerInfo[MAX_PLAYERS][pInfo];

Далее в ежесекундный паблик

PHP:
public OnPlayerUpdate(playerid)
{
	new Float:p_health; //создаем переменную с плавующей запятой, кажеся это так называлось всегда.
	if(PlayerInfo[playerid][phospdead] == 0) //Проверка что мы не в больке после того как отъехали
	{
	 	GetPlayerHealth(playerid, p_health);// чекаем хп
	    if(p_health < 30 || p_health > 105) //если хп меньше 30 и больше 105, то
	    {
	   //		if(IsAGang(playerid) && IsCapture == 1) return true; //кто юзает ганг зоны, сделайте тут под себя
			Ubit[playerid] = 1; // Записывает что нам ху*во и мы всали на колени 
			UbitAnimation(playerid,"SWEET","SWEET_INJUREDLOOP",4.0, 1, 0, 0, 0, 0); // Включаем анимацию 
			J_SetPlayerHealth(playerid,10000.0); // Выставляем 10000 хп, не спрашивайте почему именно столько. Тут юзаем свою функцию
			RemovePlayerFromVehicle(playerid); // На всякий случай выкидыаем из тачки. 
			if(PlayerInfo[playerid][phospactual] == 0)
			{
			    SendClientMessage(playerid,COLOR_WHITE,"Вы ранены и обездвижены, введите /hospital или дождитесь помощи!");
			    PlayerInfo[playerid][phospactual] = 1; // Записываем, что стоим на коленях
			}
	    }
	    else if(p_health > 29 && Ubit[playerid] == 1 || p_health < 101 && Ubit[playerid] == 1) // Если к нам успел айболит и подлечил, то
	    {
	        Ubit[playerid] = 0; // встаем с колен
	        ClearAnimations(playerid); // оффаем анимацию
	        PlayerInfo[playerid][phospactual] = 0;  // записываем, что уже не стоим на коленях
	    }
		return true;
	}



Далее команда.
ВАРИАНТ 1.

PHP:
	if(strcmp(cmd, "/hospital", true) == 0) // вводим команду, когда на коленях
	{
		new Float:p_health;
    	GetPlayerHealth(playerid, p_health); // чекаем хп
	    if(p_health < 30 || p_health > 101) // Если хп меньше 30 или больше 101, то
	    {
	        if(PlayerInfo[playerid][phosptime] == 0) // чекаем, что еще не вводили команду /hospital, то
	        {
		        SendClientMessage(playerid, CRED, "Через 25 секунд вы очутитесь в больнице.");
		        SetTimerEx("hosptimer", 25000, false, "i", playerid); // включаем таймера на 25 секунд
		        PlayerInfo[playerid][phosptime] = 1; // Записываем, что ввели команду стоя на коленях
		        return true;
			}
		}
	}

ВАРИАНТ 2. (Все тоже самое, только pwncmd
PHP:
CMD:hospital(playerid)
{
	new Float:p_health;
	GetPlayerHealth(playerid, p_health);
	if(p_health < 30 || p_health > 100)
	{
		if(PlayerInfo[playerid][phosptime] == 0)
		{
			SendClientMessage(playerid, COLOR_RED, "Через 25 секунд вы очутитесь в больнице.");
		 	SetTimerEx("hosptimer", 25000, false, "i", playerid);
			PlayerInfo[playerid][phosptime] = 1;
		 	return true;
		}
	}
	return true;
}

Создаем паблик с названием таймера.

PHP:
forward hosptimer(playerid);
public hosptimer(playerid) // Как только сработаем таймер
{
	J_SetPlayerHealth(playerid,0.0);  // Ставим 0 хп, что бы заспавнить в больничке
	PlayerInfo[playerid][phosptime] = 0; // Записываем что больше не стоим на коленях
	PlayerInfo[playerid][phospdead] = 1; // Записываем, что недавно сдохли стоя на коленях, после команды /hospital
}

А ТЕПЕРЬ ВНИМАНИЕ!

Скорее всего у вас сделано как и у меня, и после смерти вы спавнитесь в больничке и сидите там пока не отхилитесь по паре хп в секунду. В этом случае, вставте к себе в ту часть кода, где вам выдает сообщение о том, что вы отхилились, это:


PHP:
						J_SetPlayerHealth(playerid,80); // Установили 80 хп.
						PlayerInfo[playerid][phospdead] = 0; 
// Записываем, что мы хильнулись после смерти на коленях, что бы система вновь сработала в след раз
						SendClientMessage(playerid,COLOR_LIGHTBLUE,"Сообщение, о конце лечения");

Потом идев в паблик

PHP:
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)

Вставляем в него


PHP:
	if(!ispassenger)
	{
		CheckEnterCar(playerid, vehicleid);
	}
и где нибудь после этого паблика вставляем


PHP:
CheckEnterCar(playerid, vehicleid)
{
	if(PlayerInfo[playerid][phospactual] == 1) //Чекаем что игрок когда садится в тачку на коленях
	{
		SendClientMessage(playerid,COLOR_RED,"[Информация]Вы ранены и не можете двигаться самостоятельно!");
		ExitCar(playerid);//и не даем ему сесь в тачку
	}
	return true;
}

ВАЖНО !!!
РЕКОМЕНДУЮ СДЕЛАЬ ТАК, ЧТО БЫ ИГРОКИ В БОЛЬНИЦЕ ЛЕЧИЛИСЬ ИМЕННО ДО 80ХП!
ПРОВЕРКИ ПРЕДЕЛОВ В КОДЕ ДЕЛАТЬ ИМЕННО ТАКИЕ, КАК СДЕЛАЛ Я!


---------- Сообщение добавлено в 02:43 ---------- Предыдущее сообщение добавлено в 01:39 ----------

Кстати, не находите систему похожей на систему из pubg?
 
Сверху Снизу