rafull6 Posted June 26, 2011 Share Posted June 26, 2011 Привет всем. Помогите, пожалуйста со следующим плагином. Идея в том что когда ты прописуешь /setvehicle [название авто] или /sv [название авто] то появляешься сразу в нем. Такой плагин стоял на нескольких серверах, щас есть на [DKR] Freeroam. Работает как и фрироамская команда /cv [car], только ты появляешься внутри авто. Как такое сделать? Link to comment
lil Toady Posted June 26, 2011 Share Posted June 26, 2011 Создать автомобиль и поместить в него игрока Link to comment
rafull6 Posted June 26, 2011 Author Share Posted June 26, 2011 Ну а как их скомбинировать? Я пытался для основы взять функцию с фрироама, но ничего не получается: Функция с фрироама на создание транспорта (client side): function createVehicleCommand(cmd, ...) local vehID local vehiclesToCreate = {} local args = { ... } for i,v in ipairs(args) do vehID = tonumber(v) if not vehID then vehID = getVehicleModelFromName(v) end if vehID then table.insert(vehiclesToCreate, math.floor(vehID)) end end server.giveMeVehicles(vehiclesToCreate) end addCommandHandler('createvehicle', createVehicleCommand) addCommandHandler('cv', createVehicleCommand) -- используй ВВ код [cоde=luа][/cоde] для вставки LUA кода Link to comment
TEDERIs Posted June 26, 2011 Share Posted June 26, 2011 Простейший пример: addCommandHandler ( "cv", function ( player, command, model ) model = tonumber ( model ) if model then local x, y, z = getElementPosition ( player ) local vehicle = createVehicle ( model, x + 2, y, z ) if vehicle then warpPedIntoVehicle ( player, vehicle ) else outputChatBox ( "Вы не можете использовать такой ID для транспортного средства", player ) end else outputChatBox ( "Синтаксис: /cv [model]", player ) end end ) Link to comment
rafull6 Posted June 26, 2011 Author Share Posted June 26, 2011 А как сделать не по id а по названию транспорта? Link to comment
TEDERIs Posted June 26, 2011 Share Posted June 26, 2011 addCommandHandler ( "cv", function ( player, command, name ) if name then local model = getVehicleModelFromName ( name ) if model then local x, y, z = getElementPosition ( player ) warpPedIntoVehicle ( player, createVehicle ( model, x + 2, y, z ) ) else outputChatBox ( "Транспортного средства с таким именем не существует", player ) end else outputChatBox ( "Синтаксис: /cv [name]", player ) end end ) Link to comment
rafull6 Posted June 26, 2011 Author Share Posted June 26, 2011 TEDERIs, Спасибо) Выручаешь второй раз) Link to comment
Maggi Posted June 26, 2011 Share Posted June 26, 2011 Вы забыли учесть виртуальный мир и интерьер) Link to comment
rafull6 Posted June 26, 2011 Author Share Posted June 26, 2011 А они настолько важны? Дело в том что скрипт работает отлично. Link to comment
Maggi Posted June 26, 2011 Share Posted June 26, 2011 Важны не важны но при развитии игрового мода тебе придется переписывать скрипт заново (в случае добавления новых измерений). Если же это одноразовый скрипт то все норм. Link to comment
rafull6 Posted June 27, 2011 Author Share Posted June 27, 2011 Тут такая проблема возникла... Вот скрипт то работает отлично но есть одно но: если я прописую команду /sv [авто], я появляюсь в автомобиле, если я пропишу эту команду еще раз, появиться еще один автомобиль. Получается можно наспавнить целую кучу транспорта. Что нужно добавить в скрипт что бы предыдущий автомобиль удалялся? То есть если я пропишу /sv rhino я сяду в танк, потом я пропишу /sv dumper и появлюсь в самосвале, но при этом танк пропадет. Как такое сделать? Link to comment
TEDERIs Posted June 27, 2011 Share Posted June 27, 2011 Можно например так: local vehicles = { } addCommandHandler ( "cv", function ( player, command, name ) if name then local model = getVehicleModelFromName ( name ) if model then local x, y, z = getElementPosition ( player ) if isElement ( vehicles [ player ] ) then destroyElement ( vehicles [ player ] ) end vehicles [ player ] = createVehicle ( model, x + 2, y, z ) warpPedIntoVehicle ( player, vehicles [ player ] ) else outputChatBox ( "Транспортного средства с таким именем не существует", player ) end else outputChatBox ( "Синтаксис: /cv [name]", player ) end end ) Скрипт сырой, можно значительно его улучшить. Например, добавить удаление транспорта после выхода игрока из игры. Однако, еще проще изменить оригинальный freeroam. Скажем, заменить блок кода в fr_server.lua(327-334 строки): ... if vehID == 464 then warpPedIntoVehicle(source, vehicle) elseif not g_Trailers[vehID] then if getOption('vehicles.idleexplode') then g_VehicleData[vehicle].timers.fire = setTimer(commitArsonOnVehicle, getOption('vehicles.maxidletime'), 1, vehicle) end g_VehicleData[vehicle].timers.destroy = setTimer(unloadVehicle, getOption('vehicles.maxidletime') + (getOption('vehicles.idleexplode') and 10000 or 0), 1, vehicle) end ... на ... warpPedIntoVehicle(source, vehicle) if not g_Trailers[vehID] and vehID ~= 464 then if getOption('vehicles.idleexplode') then g_VehicleData[vehicle].timers.fire = setTimer(commitArsonOnVehicle, getOption('vehicles.maxidletime'), 1, vehicle) end g_VehicleData[vehicle].timers.destroy = setTimer(unloadVehicle, getOption('vehicles.maxidletime') + (getOption('vehicles.idleexplode') and 10000 or 0), 1, vehicle) end ... Link to comment
rafull6 Posted June 27, 2011 Author Share Posted June 27, 2011 Спасибо! Все работает отлично!) Link to comment
rafull6 Posted June 28, 2011 Author Share Posted June 28, 2011 Вот с такой проблемой столкнулся: танк заблокировал для общего доступа в ресурсе фрироам а через этот ресурс его вызвать можно. Как это исправить дайте наводку пожалуста... Link to comment
MX_Master Posted June 28, 2011 Share Posted June 28, 2011 Вот с такой проблемой столкнулся: танк заблокировал для общего доступа в ресурсе фрироам а через этот ресурс его вызвать можно. Как это исправить дайте наводку пожалуста... проверку на ID танка перед созданием... addCommandHandler ( "cv", function ( player, command, name ) if name then local model = getVehicleModelFromName ( name ) if model == 432 then outputChatBox ( "Танки запрещены", player ) return end if model then local x, y, z = getElementPosition ( player ) warpPedIntoVehicle ( player, createVehicle ( model, x + 2, y, z ) ) else outputChatBox ( "Транспортного средства с таким именем не существует", player ) end else outputChatBox ( "Синтаксис: /cv [name]", player ) end end ) Link to comment
rafull6 Posted June 28, 2011 Author Share Posted June 28, 2011 Thank you! Works great) Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now