Frapsy
Специалист
Где-то на форуме уже была темка, в которой рассказывается, как реализовать бензин на сервере.
В своих уроках, я буду использовать оптимизированные методы скриптинга, а именно библиотеку YSI и плагин sscanf.
YSI -
sscanf -
YSI: Копируете папку "pawno" и вставляете в папку с вашим сервером. При запросе на замену - соглашаемся.
sscanf: Копируете папки "plugins" и "pawno" и также вставляете в папку с сервером. При запросе на замену - соглашаемся. Далее, открываем свой конфиг "server.cfg" и в строчку plugins дописываем плагин sscanf, если строки plugins нету - создать. ВАЖНО: если используете платформу "windows", то в строка должна выглядеть так, plugins sscanf, если используете linux - plugins sscanf.so
Теперь последний шаг, открываем мод и в самое начало мода пишем:
На этом установка плагинов и дополнений закончена.
В этом мануале мы сделаем так, чтобы бензин расходовался только тогда, когда машина заведена. Если в вашем моде уже есть система зажигания/выключения двигателя, приступайте к шагу 2. Приступим.
Шаг 1. Делаем зажигание.
* Добавим в public OnGameModeInit такую строчку ManualVehicleEngineAndLights();
* Теперь нам нужно заглушить все наши машины, когда мод запускается. Листаем паблик OnGameModeInit в конец и вставляем вот такую вот хреновину, которая заглушит все машины, которые вы добавили:
* Далее в public OnPlayerCommandText добавим команду зажигания/выключения двигателя:
Мы сделали зажигание в авто, теперь приступим к самому бензину.
Шаг 2)
* В начало мода:
* Теперь возвращаемся в OnGameModeInit в тот самый цикл, где мы глушили авто и приписываем туда строчку:
* Теперь идем в public OnPlayerConnect и вставляем туда "текстдравы" бензина.
* Тут-то нам и понадобится добавленная библиотека YSI. Создаем секундный таймер для обновления.
* Теперь, когда основа доделана, нам нужно как то бензин убавлять.. и для этого создадим еще 1 таймер. Сделаем так, чтобы каждую минуту, если машина заведена, убавлялся 1 литр.
И вот функция, для определения состояния двигателя(работает\не).
Вот мы и закончили... Выглядит это вот так вот:
Автор: Frapsy.
О багах и ошибках пишите в тему... Жду.
В своих уроках, я буду использовать оптимизированные методы скриптинга, а именно библиотеку YSI и плагин sscanf.
YSI -
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
sscanf -
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
YSI: Копируете папку "pawno" и вставляете в папку с вашим сервером. При запросе на замену - соглашаемся.
sscanf: Копируете папки "plugins" и "pawno" и также вставляете в папку с сервером. При запросе на замену - соглашаемся. Далее, открываем свой конфиг "server.cfg" и в строчку plugins дописываем плагин sscanf, если строки plugins нету - создать. ВАЖНО: если используете платформу "windows", то в строка должна выглядеть так, plugins sscanf, если используете linux - plugins sscanf.so
Теперь последний шаг, открываем мод и в самое начало мода пишем:
PHP:
#include <sscanf2>
#include <YSI\y_timers>
В этом мануале мы сделаем так, чтобы бензин расходовался только тогда, когда машина заведена. Если в вашем моде уже есть система зажигания/выключения двигателя, приступайте к шагу 2. Приступим.
Шаг 1. Делаем зажигание.
* Добавим в public OnGameModeInit такую строчку ManualVehicleEngineAndLights();
* Теперь нам нужно заглушить все наши машины, когда мод запускается. Листаем паблик OnGameModeInit в конец и вставляем вот такую вот хреновину, которая заглушит все машины, которые вы добавили:
PHP:
for(new i=0; i != MAX_VEHICLES; i++) {
SetVehicleParamsEx(i,false,false,false,false,false,false,false);// http://wiki.wiki.pawno-info.ru/wiki/SetVehicleParamsEx
}
PHP:
if(strcmp(cmd, "/en",true)==0 || strcmp(cmd, "/engine",true)==0)
{
if(IsPlayerConnected(playerid))
{
new engine,lights,alarm,bonnet,boot,objective;
if(IsPlayerInVehicle(playerid,GetPlayerVehicleID(playerid)))
{
GetPlayerName(playerid,sendername,sizeof(sendername));
GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
if(engine)
{
SetVehicleParamsEx(vid,false,lights,alarm,doors,bonnet,boot,objective);
format(string, sizeof(string), "* %s заглушил двигатель.",sendername);
SetPlayerChatBubble(playerid, string, COLOR_PURPLE, 20.0, 5000);
}
else if(!engine)
{
SetVehicleParamsEx(vid,true,lights,alarm,doors,bonnet,boot,objective);
format(string, sizeof(string), "* %s завел двигатель.",sendername);
SetPlayerChatBubble(playerid, string, COLOR_PURPLE, 20.0, 5000);
}
}
}
return 1;
}
Шаг 2)
* В начало мода:
PHP:
new Text:FuelDraw[MAX_PLAYERS];
new Text:SpeedDraw[MAX_PLAYERS];//bonus
new Text:HealthDraw[MAX_PLAYERS];//bonus
new FuelCar[MAX_VEHICLES];
PHP:
for(new i=0; i != MAX_VEHICLES; i++) {
SetVehicleParamsEx(i,false,false,false,false,false,false,false);// http://wiki.wiki.pawno-info.ru/wiki/SetVehicleParamsEx
FuelCar[i] = 50;//это кол-во бензина будет в машинах при спавне
}
PHP:
HealthDraw[playerid] = TextDrawCreate(15.0,280.0," ");
TextDrawColor(HealthDraw[playerid],0xF5DEB3AA);
TextDrawFont(HealthDraw[playerid],1);
TextDrawSetShadow(HealthDraw[playerid],0);
TextDrawSetOutline(HealthDraw[playerid],1);
TextDrawShowForPlayer(playerid,HealthDraw[playerid]);
FuelDraw[playerid] = TextDrawCreate(15.0,292.0," ");
TextDrawColor(FuelDraw[playerid],0xF5DEB3AA);
TextDrawFont(FuelDraw[playerid],1);
TextDrawSetShadow(FuelDraw[playerid],0);
TextDrawSetOutline(FuelDraw[playerid],1);
TextDrawShowForPlayer(playerid,FuelDraw[playerid]);
SpeedDraw[playerid] = TextDrawCreate(15.0,304.0," ");
TextDrawColor(SpeedDraw[playerid],0xF5DEB3AA);
TextDrawFont(SpeedDraw[playerid],1);
TextDrawSetShadow(SpeedDraw[playerid],0);
TextDrawSetOutline(SpeedDraw[playerid],1);
TextDrawShowForPlayer(playerid,SpeedDraw[playerid]);
PHP:
task SecondTimer[1000] () {
new vehicleid,Float:speed_x,Float:speed_y,Float:speed_z,Float:final_speed,speed_string[256],final_speed_int;
new Float:vehicle_health,final_vehicle_health,health_string[256],str3[128];
if(GetPlayerVehicleID(i) != 0) {
GetVehicleVelocity(GetPlayerVehicleID(i),speed_x,speed_y,speed_z);
final_speed = floatsqroot(((speed_x*speed_x)+(speed_y*speed_y))+(speed_z*speed_z))*250.666667;
final_speed_int = floatround(final_speed,floatround_round);
format(speed_string,256,"Speed: %i kh/h",final_speed_int);
TextDrawSetString(SpeedDraw[i], speed_string);
GetVehicleHealth(GetPlayerVehicleID(i),vehicle_health);
final_vehicle_health = floatround(floatround(vehicle_health - 250)/ 7.5);
format(health_string,256,"Health: %i HP", final_vehicle_health);
TextDrawSetString(HealthDraw[i], health_string);
format(str3,sizeof(str3),"Fuel: %i L",FuelCar[GetPlayerVehicleID(i)]);
TextDrawSetString(FuelDraw[i],str3);
for(new h=0; h != MAX_VEHICLES; h++) {
if(Fuel[h] == 0) {
SetVehicleParamsEx(h,false,false,false,false,false,false,false);
}
}
}
else {
TextDrawSetString(SpeedDraw[i], " ");
TextDrawSetString(HealthDraw[i], " ");
TextDrawSetString(FuelDraw[i], " ");
}
}
PHP:
task FuelSys[60000] () {
for(new i=0; i != MAX_VEHICLES; i++) {
if(CheckEngine(i) && FuelCar[i] != 0) {
FuelCar[i]--;
}
}
}
PHP:
stock CheckEngine(veh) {
new engine,lights,alarm,doors,bonnet,boot,objective;
GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
if(engine) {
return 1;
}
return 0;
}
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Автор: Frapsy.
О багах и ошибках пишите в тему... Жду.
Последнее редактирование:
