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

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

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

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

Чинить двигатель

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

Serejqa

Ученик
Доброго времени суток. Может уже и была такая тема, но я не нашел)
Хочу вам предложить небольшую систему починки двигателя.
Она заключается в том, что игрок к подходит к капоту машины, он открывается и через 10 сек., после того как время таймера закончится машина будет починина.
Скриншоты:

Итак, к делу.
Ко всем new добавляем:
PHP:
new bool:FixingCar[MAX_VEHICLES]; //Переменная, отвечающая за чинится машина на данный момент или нет.
new FixingCars[MAX_PLAYERS]; //Она записывает ид машины, которую чинит наш игрок.
forward CarFixing(playerid); //Таймер
Сама команда:
PHP:
	if(strcmp(cmd,"/carfix",true) == 0)
	{
		new Float:x,Float:y,Float:z;
		new engine,lights,alarm,doors,bonnet,boot,objective;
		new nearveh = GetNearestVehicle(playerid);
		GetCoordBonnetVehicle(nearveh, x,y,z);
		new Float:hp; GetVehicleHealth(nearveh,hp);
		if(IsPlayerInRangeOfPoint(playerid, 1.0, x, y, z)) // Проверяет стоит игрок у капота или нет.
	    {
			if(hp < 500.0) // Если хп машины меньше 50%
			{
				if(Engine[nearveh] == true) //Внимание: Проверяет заведена машина или нет, можете заменить на свою переменную или убрать вообще
				{
				    SendClientMessage(playerid,-1,"Ты не можешь отремонтировать машину пока она заведена.");
					return 1;
				}
				new name[24]; GetPlayerName(playerid,name,24);
		    	GetVehicleParamsEx(nearveh,engine,lights,alarm,doors,bonnet,boot,objective);
		    	SetVehicleParamsEx(nearveh,engine,lights,alarm,doors,VEHICLE_PARAMS_ON,boot,objective);
				FixingCar[nearveh] = true;
				FixingCars[playerid] = nearveh;
				SetTimerEx("CarFixing",10000,0,"%i",playerid); //10 секунд, можете изменить на своё
				new s[64]; format(s,64,"%s пытается починить машину",name);
				ProxDetector(30.0, playerid, s,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
			}
			else 
			{
			    SendClientMessage(playerid,-1,"Машина не сломана.");
			}
	    }
		else
		{
		    SendClientMessage(playerid,-1,"Ты не у копота ближайшей машины.");
		}
		return 1;
	}
Таймер:
PHP:
public CarFixing(playerid)
{
	new Float:x,Float:y,Float:z;
	new engine,lights,alarm,doors,bonnet,boot,objective;
	new vehicle = FixingCars[playerid];
	new Float:hp; GetVehicleHealth(vehicle,hp);
	GetCoordBonnetVehicle(vehicle, x,y,z);
	if(IsPlayerInRangeOfPoint(playerid, 1.0, x, y, z))
    {
		GetVehicleParamsEx(vehicle,engine,lights,alarm,doors,bonnet,boot,objective);
		SetVehicleParamsEx(vehicle,engine,lights,alarm,doors,VEHICLE_PARAMS_OFF,boot,objective); //Закрываем капот
		FixingCar[vehicle] = false;
		SetVehicleHealth(vehicle,800.0);//Чинит машину на 80%, может поставить своё
		new name[24]; GetPlayerName(playerid,name,24);
		new s[64]; format(s,64,"%s починил машину",name);
		ProxDetector(30.0, playerid, s,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
	}
	else
	{
		SendClientMessage(playerid,-1,"Ты не рядом с машиной.");
	}
}
И стоки, если у кого они уже есть, добавлять не нужно. Можно вставить в любое место в моде, например в конец.
PHP:
stock GetCoordBonnetVehicle(vehicleid, &Float:x, &Float:y, &Float:z) //Находит координаты положения капота
{
    new Float:angle,Float:distance;
    GetVehicleModelInfo(GetVehicleModel(vehicleid), 1, x, distance, z);
    distance = distance/2 + 0.1;
    GetVehiclePos(vehicleid, x, y, z);
    GetVehicleZAngle(vehicleid, angle);
    x -= (distance * floatsin(-angle+180, degrees));
    y -= (distance * floatcos(-angle+180, degrees));
    return 1;
}
stock GetNearestVehicle(playerid)
{
	for(new i=0; i<MAX_VEHICLES; i++)
	{
		if(GetVehicleModel(i))
		{
			new Float:X,Float:Y,Float:Z;
			GetVehiclePos(i,X,Y,Z);
			if(IsPlayerInRangeOfPoint(playerid,10.0, X, Y, Z))return i;
		}
	}
	return -1;
}
Переменную FixingCar[vehicle] = false; можно сделать проверку в команде завода машины, чтобы она не заводилась, пока её чинят.
Вы может использовать эту систему в работе механика или же оставить так, как есть.
Спасибо за внимание. Автор: Я. Все вопросы/недочеты оставляйте ниже. Если понравилось от + не откажусь. :)
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу