 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
[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 тут, кол-во машин на сервере. Не у всех же так..Над менять на своё кол-во. Вроде так 
|
| |
|
|
| 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; Здесь как бэ и так уже проверка есть на велосипеды.
|
| |
|
|
|
 |
|
 | |
| |
|