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

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

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

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

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
}
* Далее в public OnPlayerCommandText добавим команду зажигания/выключения двигателя:
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];
* Теперь возвращаемся в 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
     FuelCar[i] = 50;//это кол-во бензина будет в машинах при спавне
}
* Теперь идем в public OnPlayerConnect и вставляем туда "текстдравы" бензина.
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]);
* Тут-то нам и понадобится добавленная библиотека YSI. Создаем секундный таймер для обновления.
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], " ");
     }
}
* Теперь, когда основа доделана, нам нужно как то бензин убавлять.. и для этого создадим еще 1 таймер. Сделаем так, чтобы каждую минуту, если машина заведена, убавлялся 1 литр.
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.
О багах и ошибках пишите в тему... Жду.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу