Serejqa
Ученик
Доброго времени суток. Может уже и была такая тема, но я не нашел)
Хочу вам предложить небольшую систему починки двигателя.
Она заключается в том, что игрок к подходит к капоту машины, он открывается и через 10 сек., после того как время таймера закончится машина будет починина.
Скриншоты:
Итак, к делу.
Ко всем new добавляем:
Сама команда:
Таймер:
И стоки, если у кого они уже есть, добавлять не нужно. Можно вставить в любое место в моде, например в конец.
Переменную FixingCar[vehicle] = false; можно сделать проверку в команде завода машины, чтобы она не заводилась, пока её чинят.
Вы может использовать эту систему в работе механика или же оставить так, как есть.
Спасибо за внимание. Автор: Я. Все вопросы/недочеты оставляйте ниже. Если понравилось от + не откажусь.
Хочу вам предложить небольшую систему починки двигателя.
Она заключается в том, что игрок к подходит к капоту машины, он открывается и через 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;
}
Вы может использовать эту систему в работе механика или же оставить так, как есть.
Спасибо за внимание. Автор: Я. Все вопросы/недочеты оставляйте ниже. Если понравилось от + не откажусь.
Последнее редактирование:
