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

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

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

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

Система ранения

killswich

Умник
Основу скрипта взял где то в инете, автора не помню.
НЕ судите за OnPlayerUpdate, просто так красивее выглядит. Можно запихнуть и в ежесекундный таймер.

PHP:
new Ubit[MAX_PLAYERS];
{
    Ubit[playerid] = 1;
    ApplyAnimation(playerid, animlib, animname, Speeds, looping, lockx, locky, lockz, lp);
}
В pudlic OnPlayerUpdate

PHP:
    GetPlayerHealth(playerid, p_health); //Запишем наше хп в переменную для проверок
    if(p_health < 30 || p_health > 101) // Проверка на хп, сделано с запасом, что бы один выстрел не мог добить до 0 хп(Во имя того, 
    {                                    //что бы не переспавнило после смерти на записанные заранее координаты, так красивее)
   		if(IsAGang(playerid) && IsCapture == 1) return true; // Проверка на бандита во время капта, меняйте на свое
		Ubit[playerid] = 1; // Записывается
		UbitAnimation(playerid,"SWEET","SWEET_INJUREDLOOP",4.0, 1, 0, 0, 0, 0);// Ставим созданную анимацию
		SetPlayerHealthEx(playerid,10000.0); // Ставим 10000 хп, что бы отыгрыш не сорвался
		RemovePlayerFromVehicle(playerid); // Выкидываем из тачки, если тот доползет до неё(Потом может перепланирую этот момент)
		if(pData[playerid][phospactual] == 0) // Если 0
		{
		    SendClientMessage(playerid,CWHITE,"Вы ранены и обездвижены, введите /hospital или дождитесь помощи!"); // Покажем 1 раз
		    pData[playerid][phospactual] = 1; // И запишем 1, что бы ге флудило(см. выше)
		}
		return true;
    }
    else if(p_health > 29 && Ubit[playerid] == 1 || p_health < 101 && Ubit[playerid] == 1) // или если мы лежим и наше хп стало в диапазоне между 29 и 101
    {
        Ubit[playerid] = 0; // записываем 0
        ClearAnimations(playerid); // Чистим анимку
        pData[playerid][phospactual] = 0; // записываем 0, что бы текст с командой /hospital появился в следущий раз
        return true;
    }
    
    if(p_health < 30 || p_health > 101) return SendClientMessage(playerid,CGRAY,"Вы ранены и не можете этого сделать."); // Эту проверку ставте в свои РП чаты
Теперь допилим систему и сделаем команду /hospital.

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

PHP:
forward hosptimer(playerid);
public hosptimer(playerid)
{
	SetPlayerHealthEx(playerid,0.0); // Убиваем игрока.
	pData[playerid][phosptime] = 0; // Выключаем таймер (Кажется лишний раз :D )
}
Если есть идеи по оптимизации, предлагайте. Кроме ежесекундного таймера.
П.С.
Ставил ежесекундный таймер, все работало лучше даже. А точнее анимация включалась всегда, даже если тпшнуться к уже лежащему игроку, но почему то 0 id всегда заходил на сервер мертвым. А в OnPlayerUpdate почему то не всегда с первого раза анимка срабатывает
 
Сверху Снизу