17:02
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Модератор форума: Alcoholik  
[FAQ] Двигатель, фары, бензин.
RockmanДата: Четверг, 13.01.2011, 21:19 | Сообщение # 1
Постоялец
Группа: Продвинутые
Сообщений: 428
Награды: 4
Город: Нижний Новгород
Репутация: 474
Замечания: 0%
Статус:

FAQ по созданию завода двигателя, управления фарами, учета бензина.

Здравствуйте, в этой теме я хотел бы рассказать, как сделать завод двигателя, управление фарами и учет бензина, в зависимости от того заведен двигатель или нет. Возможно, что то подобное уже обсуждалось, но моя тема рассчитана конкретно под мод Godfather, хотя легко можно приспособить и к другому моду.

Подготавливаемся.

Для начала нам нужно убедиться, что версия нашего сервера 0.3c, иначе все бесполезно.
Если с версией все в порядке, приступаем непосредственно к реализации.
Открываем наш мод в pawno, для начала нам нужно создать несколько вспомогательных функций, если их еще нет в моде.

Во-первых нам нужна функция, которая определяет по ID транспорта, велосипед это или нет. Если такой функции нет, создаем ее.
В начале мода прописываем forward IsAVelik(carid);
Затем в любом месте, главное до использования этой функции, описываем ее.

Code
public IsAVelik(carid)
{
    new model = GetVehicleModel(carid);
    if(model==509||model==481||model==510)
    {
     return 1;
    }
    return 0;
}

Аналогично можно сделать проверку для водного транспорта и воздушного.
После этого нам нужно сделать функцию, которая будет определять состояние двигателя автомобиля (заведен или нет).
Для этого опять в начале мода прописываем forward Checkengine(carid);
Дальше так же описываем функцию.

Code
public CheckEngine(carid)
{
      new engine, lights, alarm, doors, bonnet, boot, objective;
      GetVehicleParamsEx(carid, engine, lights, alarm, doors, bonnet, boot, objective);
       if(engine){
        return 1;
       }
    else { return 0; }
}

На этом подготовка закончена, приступаем к основной части.

Реализовываем.

В самом начале public OnGameModeInit() прописываем ManualVehicleEngineAndLights();
Данная функция делает выключенными двигатель и фары, когда игрок садится в машину.
Но тут есть небольшая проблема, двигатель и фары действительно выключены, но если получить параметры автомобиля, то результаты будут такие, как будто двигатель и фары включены. Поэтому в том же паблике после того как объявлены автомобили мода, добавляем следующий цикл:

Code
for(new i = 0 ; i<99 ; i ++)
    {
      if(!IsAVelik(i)) {
      SetVehicleParamsEx(i,false,false,false,false,false,false,false);
      }
      else {
      SetVehicleParamsEx(i,true,false,false,false,false,false,false); }

    }

Вместо 99, пишем количество машин в моде. Данный цикл устанавливает выключенными двигатель и фары у всего транспорта в моде, кроме велосипедов. Аналогично можно проверять водный транспорт и воздушный. Кстати, если в моде у вас есть команда, которая респавнит все машины, то этот же цикл нужно добавить в тело этой команды.

Далее делаем так, что бензин не заканчивается если двигатель выключен.
Ищем public CheckGas() и первая часть этой функции должны выглядеть так:

Code
public CheckGas()
{
new string[256];
new vehicle = GetPlayerVehicleID(i);
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{

if(GetPlayerState(i) == PLAYER_STATE_DRIVER && !IsAVelik(vehicle) && CheckEngine(vehicle))
{

if(Gas[vehicle] >= 1)
{

Тут важно учесть, что строка с переменой new vehicle = GetPlayerVehicleID(i);, должна быть указана один раз и в том месте где это указано в моем коде. После этого ищем public OnPlayerKeyStateChange

И в самое начало прописываем new vid = GetPlayerVehicleID(playerid); и после объявления переменных добавляем

Code
if (newkeys == 4 && IsPlayerInVehicle(playerid,vid) && !IsAVelik(vid))
    {
        
           new engine,lights,alarm,doors,bonnet,boot,objective;
           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 заглушил двигатель.",name);
          ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
     }
           else if(!engine){SetVehicleParamsEx(vid,true,true,alarm,doors,bonnet,boot,objective);
           format(string, sizeof(string), "* %s завел двигатель.",name);
          ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
     }
                        
    }
    if (newkeys == 1 && IsPlayerInVehicle(playerid,GetPlayerVehicleID(playerid)) && !IsAVelik(vid))
    {
        
     new engine,lights,alarm,doors,bonnet,boot,objective;
     GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
           if(lights){SetVehicleParamsEx(vid,engine,false,alarm,doors,bonnet,boot,objective);}
           else if(!lights){SetVehicleParamsEx(vid,engine,true,alarm,doors,bonnet,boot,objective);}
       
    }

Таким образом мы реализовали завод и заглушение двигателя на клавишу "Огонь" ( у меня ЛКМ и ALT ) и управление фарами на клавишу "Вторичный огонь" ( у меня CTRL ) причем фары включаются, как днем так и ночью ...

Ну вот на этом все, вроде бы ничего не упустил, пользуйтесь !


Сообщение отредактировал Rockman - Четверг, 13.01.2011, 21:20
[RGS]JAGUARДата: Четверг, 13.01.2011, 22:01 | Сообщение # 2
Советчик
Группа: Продвинутые
Сообщений: 1154
Награды: 25
Город: FloatX,FloatY,FloatZ
Репутация: 291
Замечания: 40%
Статус:
хех не плохая работа!

впринципе всё что ты написал это было в FS но лано малорик + те)

Добавлено (13.01.2011, 22:01)
---------------------------------------------

Quote (Rockman)
for(new i = 0 ; i<99 ; i ++)

да и не многие поймут что
for(new i = 0 ; i<99 ; i ++)
99 - кол-во авто на сервере!



[/url]
Новая ICQ: 593922


Сообщение отредактировал [RGS]JAGUAR - Четверг, 13.01.2011, 21:59
RockmanДата: Четверг, 13.01.2011, 22:13 | Сообщение # 3
Постоялец
Группа: Продвинутые
Сообщений: 428
Награды: 4
Город: Нижний Новгород
Репутация: 474
Замечания: 0%
Статус:
Quote (|RGS|JAGUAR)
хех не плохая работа!
впринципе всё что ты написал это было в FS но лано малорик + те)

Добавлено (13.01.2011, 22:01)
---------------------------------------------
Quote (Rockman)
for(new i = 0 ; i<99 ; i ++)

да и не многие поймут что
for(new i = 0 ; i<99 ; i ++)
99 - кол-во авто на сервере!

Да был какой то ФС, но я описал как что то подобное встроить в GF, особенно новичками будет полезно, хотя наверное только им =)
+ в фс насколько я знаю фары только ночью включались и выключались, может ошибаюсь.

а насчет твоего вопроса про количество машин на сервере не понял ...

ABATAPДата: Пятница, 14.01.2011, 17:35 | Сообщение # 4
Советчик
Группа: Продвинутые
Сообщений: 1007
Награды: 14
Город: Новосибирск
Репутация: 729
Замечания: 0%
Статус:
Quote (Rockman)
а насчет твоего вопроса про количество машин на сервере не понял ...

Это не вопрос.
Он хотел сказать, что новички не поймут что

Quote (|RGS|JAGUAR)
for(new i = 0 ; i<99 ; i ++)

99 тут, кол-во машин на сервере. Не у всех же так..Над менять на своё кол-во.

Вроде так crazy

PustikДата: Пятница, 14.01.2011, 18:30 | Сообщение # 5
Группа: I'm V.I.P.
Сообщений: 1669
Награды: 129
Город: Кривой Рог
Репутация: 939
Замечания: 60%
Статус:
Держи плюсик за старание :)
RockmanДата: Пятница, 14.01.2011, 20:09 | Сообщение # 6
Постоялец
Группа: Продвинутые
Сообщений: 428
Награды: 4
Город: Нижний Новгород
Репутация: 474
Замечания: 0%
Статус:
Quote (ABATAP)
99 тут, кол-во машин на сервере. Не у всех же так..Над менять на своё кол-во.
Вроде так

Я же вроде бы написал что 99 меняем на свое кол-во машин.

Bx1Bx1Дата: Воскресенье, 16.01.2011, 12:33 | Сообщение # 7
Местный
Группа: I'm V.I.P.
Сообщений: 574
Награды: 8
Город: Perm
Репутация: 94
Замечания: 20%
Статус:
Quote
D:\temp\Сервер GTA\Сервер\gamemodes\gf.pwn(5547) : error 017: undefined symbol "i"
D:\temp\Сервер GTA\Сервер\gamemodes\gf.pwn(27339) : error 017: undefined symbol "vid"
D:\temp\Сервер GTA\Сервер\gamemodes\gf.pwn(27343) : error 017: undefined symbol "vid"
D:\temp\Сервер GTA\Сервер\gamemodes\gf.pwn(27344) : error 017: undefined symbol "vid"
D:\temp\Сервер GTA\Сервер\gamemodes\gf.pwn(27345) : error 017: undefined symbol "string"
D:\temp\Сервер GTA\Сервер\gamemodes\gf.pwn(27345) : error 017: undefined symbol "string"
D:\temp\Сервер GTA\Сервер\gamemodes\gf.pwn(27345) : error 029: invalid expression, assumed zero
D:\temp\Сервер GTA\Сервер\gamemodes\gf.pwn(27345) : fatal error 107: too many error messages on one line

Вот что вылезло...

И это все, кроме первого ерора в последнем public OnPlayerKeyStateChange



Godfather Future - лучшее из имеющихся улучшений мода Godfather


Сообщение отредактировал Bx1Bx1 - Воскресенье, 16.01.2011, 12:35
Bx1Bx1Дата: Воскресенье, 16.01.2011, 16:20 | Сообщение # 8
Местный
Группа: I'm V.I.P.
Сообщений: 574
Награды: 8
Город: Perm
Репутация: 94
Замечания: 20%
Статус:
Все исправил!
Rockman, в FAQ поправь, там в public OnPlayerKeyStateChange нужно вставить такое:

Quote
public OnPlayerKeyStateChange
{
new string[MAX_PLAYER_NAME];
new vid = GetPlayerVehicleID(playerid);

И в public CheckGas() вот так:

Quote
public CheckGas()
{
new string[256];
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{
new vehicle = GetPlayerVehicleID(i);
if(GetPlayerState(i) == PLAYER_STATE_DRIVER && !IsAVelik(vehicle) && CheckEngine(vehicle))
{

if(Gas[vehicle] >= 1)
{

И тогда все будет нормально! Ставлю +, все равно молодец!



Godfather Future - лучшее из имеющихся улучшений мода Godfather
Bx1Bx1Дата: Воскресенье, 16.01.2011, 18:37 | Сообщение # 9
Местный
Группа: I'm V.I.P.
Сообщений: 574
Награды: 8
Город: Perm
Репутация: 94
Замечания: 20%
Статус:
И в строчках типа:
Quote
format(string, sizeof(string), "* %s заглушил двигатель.",name);
name заменить на playerid




Godfather Future - лучшее из имеющихся улучшений мода Godfather
RockmanДата: Воскресенье, 16.01.2011, 22:00 | Сообщение # 10
Постоялец
Группа: Продвинутые
Сообщений: 428
Награды: 4
Город: Нижний Новгород
Репутация: 474
Замечания: 0%
Статус:
Quote (Bx1Bx1)
И в строчках типа:
Quote
format(string, sizeof(string), "* %s заглушил двигатель.",name);
name заменить на playerid

Вот этого точно делать ненужно. Потому что выводится сообщения типа: Ник игрока завел двигатель и тп.

Добавлено (16.01.2011, 22:00)
---------------------------------------------

Quote (Bx1Bx1)
Все исправил!
Rockman, в FAQ поправь, там в public OnPlayerKeyStateChange нужно вставить такое:

Quote
public OnPlayerKeyStateChange
{
new string[MAX_PLAYER_NAME];
new vid = GetPlayerVehicleID(playerid);
И в public CheckGas() вот так:

Quote
public CheckGas()
{
new string[256];
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{
new vehicle = GetPlayerVehicleID(i);
if(GetPlayerState(i) == PLAYER_STATE_DRIVER && !IsAVelik(vehicle) && CheckEngine(vehicle))
{
if(Gas[vehicle] >= 1)
{

а переменные, да забыл объявить ... точнее у меня они объявлены, забыл их в FAQ добавить ...


Сообщение отредактировал Rockman - Воскресенье, 16.01.2011, 22:00
buduzlojДата: Понедельник, 17.01.2011, 15:03 | Сообщение # 11
Уверенный в себе
Группа: Продвинутые
Сообщений: 221
Награды: 2
Город: типо даугавпилс
Репутация: 19
Замечания: 60%
Статус:
Rockman, Помаги мне пожалуйсто. У меня мод сансити мне надо убрать бензин у велосипеда! как ето зделать ?
RockmanДата: Понедельник, 17.01.2011, 21:41 | Сообщение # 12
Постоялец
Группа: Продвинутые
Сообщений: 428
Награды: 4
Город: Нижний Новгород
Репутация: 474
Замечания: 0%
Статус:
Quote (buduzloj)
Rockman, Помаги мне пожалуйсто. У меня мод сансити мне надо убрать бензин у велосипеда! как ето зделать ?

Конкретно насчет СанСити не знаю, на ГФ это делается так:

Создаем функцию проверки на то, что игрок в велосипеде.

public IsAVelik(carid)
{
new model = GetVehicleModel(carid);
if(model==509||model==481||model==510)
{
return 1;
}
return 0;
}

Не забываем в начале прописать forward IsAVelik(carid);
Затем ищем public CheckGas()

и вот такой код который идет сначала этого паблика

Code
public CheckGas()
{
  new string[256];
  for(new i=0;i<MAX_PLAYERS;i++)
  {
      if(IsPlayerConnected(i))
         {
             new vehicle = GetPlayerVehicleID(i);
             if(GetPlayerState(i) == PLAYER_STATE_DRIVER

Заменяем на такой:

Code
public CheckGas()
{
  new string[256];
  for(new i=0;i<MAX_PLAYERS;i++)
  {
      if(IsPlayerConnected(i))
         {
             new vehicle = GetPlayerVehicleID(i);
             if(GetPlayerState(i) == PLAYER_STATE_DRIVER && !IsAVelik(vehicle)

Важно, точно заменить как я написал, если вообще у тебя мод на основе ГФ.

Stas_Kim4Дата: Вторник, 18.01.2011, 04:38 | Сообщение # 13
Новенький
Группа: Пользователи
Сообщений: 55
Награды: 0
Город: Шахтинск
Репутация: 1
Замечания: 0%
Статус:
а можно примерчик чтоб чисто фары включать?
buduzlojДата: Вторник, 18.01.2011, 09:57 | Сообщение # 14
Уверенный в себе
Группа: Продвинутые
Сообщений: 221
Награды: 2
Город: типо даугавпилс
Репутация: 19
Замечания: 60%
Статус:
Quote (Rockman)
Важно, точно заменить как я написал, если вообще у тебя мод на основе ГФ.

Вот какой там паблик checkgas
Code
public CheckGas()
{
  for(new i=0;i<MAX_VEHICLES;i++)
  {
   if(GetVehicleModel(i) != 481 || GetVehicleModel(i) != 509 || GetVehicleModel(i) != 510)
   {
    if(engine[i] == 1)
    {
     if(Gas[i] >= 1)
     {
      if(IsAPlane(i) || IsABoat(i)) { Gas[i]++; }
      Gas[i]--;
      //format(string, sizeof(string), "~b~~n~~n~~n~~n~~n~~n~~n~~n~~n~ Benzin:~g~ %d%",Gas[i]);
      //GameTextForPlayer(i, string, 10000, 3);
     }
     if(Gas[i] <= 0)
     {
      //GameTextForPlayer(i, "~r~~n~~n~~n~~n~~n~~n~~n~~n~ no ~b~benzin", 1000, 3);
      //RemovePlayerFromVehicle(i);
      //TogglePlayerControllable(i, 1);
     }
    }
   }
  }
  return 1;

RockmanДата: Вторник, 18.01.2011, 11:12 | Сообщение # 15
Постоялец
Группа: Продвинутые
Сообщений: 428
Награды: 4
Город: Нижний Новгород
Репутация: 474
Замечания: 0%
Статус:
Quote (Stas_Kim4)
а можно примерчик чтоб чисто фары включать?

В public OnPlayerKeyStateChange нужно добавить

Code
if (newkeys == 1 && IsPlayerInVehicle(playerid,GetPlayerVehicleID(playerid)) && !IsAVelik(vid))  
     {  
          
      new engine,lights,alarm,doors,bonnet,boot,objective;  
      GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);  
            if(lights){SetVehicleParamsEx(vid,engine,false,alarm,doors,bonnet,boot,objective);}  
            else if(!lights){SetVehicleParamsEx(vid,engine,true,alarm,doors,bonnet,boot,objective);}  
         
     }

Quote (buduzloj)
Вот какой там паблик checkgas
Code
public CheckGas()
{
  for(new i=0;i<MAX_VEHICLES;i++)
  {
   if(GetVehicleModel(i) != 481 || GetVehicleModel(i) != 509 || GetVehicleModel(i) != 510)
   {
    if(engine[i] == 1)
    {
     if(Gas[i] >= 1)
     {
      if(IsAPlane(i) || IsABoat(i)) { Gas[i]++; }
      Gas[i]--;
      //format(string, sizeof(string), "~b~~n~~n~~n~~n~~n~~n~~n~~n~~n~ Benzin:~g~ %d%",Gas[i]);
      //GameTextForPlayer(i, string, 10000, 3);
     }
     if(Gas[i] <= 0)
     {
      //GameTextForPlayer(i, "~r~~n~~n~~n~~n~~n~~n~~n~~n~ no ~b~benzin", 1000, 3);
      //RemovePlayerFromVehicle(i);
      //TogglePlayerControllable(i, 1);
     }
    }
   }
  }
  return 1;

Здесь как бэ и так уже проверка есть на велосипеды.

  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua