mehmet Posted January 17, 2019 Share Posted January 17, 2019 Привет всем, Пытаюсь написать скрипт двигателя по кнопке вкл и выкл. При этом, когда садишься в машину она автоматически определяла машина заведена или нет. Это для того, если машина заглушина, то когда садишься она была по прежнему заглушина. (Надеюсь более менее изъяснился) Вот мой код: function enterVehicle ( player ) local car = getPedOccupiedVehicle( player ) if (getElementData(car, "engine") == 0 ) then setVehicleEngineState ( car , false ) else setVehicleEngineState ( car , true ) end end addEventHandler ( "onVehicleEnter", getRootElement(), enterVehicle ) function engine() bindKey (source,"1","down", function(player,key) local car = getPedOccupiedVehicle(player) if(car and getVehicleController(car) == player) then setVehicleEngineState(car,(not getVehicleEngineState(car))) end end ) end addEventHandler ("onPlayerVehicleEnter",getRootElement(), engine) И еще я почему то подозреваю, что тут можно обойтись без getElementData. Читал статейки, что нужно стараться обходить их. Но я до конца не уверен, менно здесь можно ли обойтись без него? Link to comment
K1parik Posted January 17, 2019 Share Posted January 17, 2019 getVehicleEngineState показывает включен двигатель или нет. зачем элементдата? Link to comment
mehmet Posted January 17, 2019 Author Share Posted January 17, 2019 23 minutes ago, K1parik said: getVehicleEngineState показывает включен двигатель или нет. зачем элементдата? то есть посути я могу обойтись без элемент дата заменив на getVehicleEngineState? function switchEngineState(player) local vehicle = getPedOccupiedVehicle(player) if isElement(vehicle) then setVehicleEngineState(vehicle, (not getVehicleEngineState(vehicle))) end end addEventHandler("onPlayerVehicleEnter", getRootElement(), function(vehicle, seat) if seat == 0 then bindKey(source, "1", "down", switchEngineState) end end) addEventHandler("onPlayerVehicleExit", getRootElement(), function(vehicle, seat) if seat == 0 then unbindKey(source, "1", "down", switchEngineState) end end) Вот есть такой вариант, но когда садишься в машину она автоматически заводится. А мне нужно вручную. Link to comment
K1parik Posted January 17, 2019 Share Posted January 17, 2019 (edited) в ивенте когда игрок сел в машину выключай двигатель этой функцией setVehicleEngineState Edited January 17, 2019 by K1parik Link to comment
mehmet Posted January 17, 2019 Author Share Posted January 17, 2019 5 minutes ago, K1parik said: в ивенте когда игрок сел в машину выключай двигатель этой функцией setVehicleEngineState вот так? addEventHandler("onPlayerVehicleEnter", getRootElement(), function(vehicle) local engine = getVehicleEngineState(vehicle) if (engine == false) then setVehicleEngineState (vehicle , false ) else bindKey(source, "1", "down", switchEngineState) end end) Link to comment
K1parik Posted January 17, 2019 Share Posted January 17, 2019 (edited) интересное условие: если двигатель выключен - выключить двигатель? + к этому бинд не сработает если двигатель выключен т.е потом не сможешь его включить Edited January 17, 2019 by K1parik Link to comment
mehmet Posted January 17, 2019 Author Share Posted January 17, 2019 (edited) 3 minutes ago, K1parik said: интересное условие: если двигатель выключен - выключить двигатель? + к этому бинд не сработает если двигатель включен т.е потом не сможешь его выключить можешь показать как нужно? Просто если в ивенте когда сел игрок в машину выкл двигатель, то тогда, когда двигатель будет вкл , то он автоматом будет выключаться Edited January 17, 2019 by mehmet Link to comment
K1parik Posted January 17, 2019 Share Posted January 17, 2019 может быть вот так addEventHandler("onPlayerVehicleEnter", getRootElement(), function(vehicle, seat) if seat == 0 then setVehicleEngineState (vehicle, false ) bindKey(source, "1", "down", switchEngineState) end end) Link to comment
mehmet Posted January 17, 2019 Author Share Posted January 17, 2019 2 minutes ago, K1parik said: может быть вот так addEventHandler("onPlayerVehicleEnter", getRootElement(), function(vehicle, seat) if seat == 0 then setVehicleEngineState (vehicle, false ) bindKey(source, "1", "down", switchEngineState) end end) Спасибо за попытку. Но как я и говорил. Теперь когда двигатель включенный. При повторной посадке он выкл. Хотя должен работать. Link to comment
Scripting Moderators Sarrum Posted January 18, 2019 Scripting Moderators Share Posted January 18, 2019 Если вдруг кто столкнется с подобной проблемой, как вариант: local vehicleEngine = { } function switchEngineState ( player ) local vehicle = getPedOccupiedVehicle ( player ) if ( vehicle ) then setVehicleEngineState ( vehicle, not getVehicleEngineState ( vehicle ) ) end end addEventHandler ( "onVehicleEnter", root, function ( player, seat ) if ( seat == 0 ) then setVehicleEngineState ( source, vehicleEngine [ source ] or false ) bindKey ( player, "1", "down", switchEngineState ) end end ) addEventHandler ( "onVehicleExit", root, function ( player, seat ) if ( seat == 0 ) then vehicleEngine [ source ] = getVehicleEngineState ( source ) unbindKey ( player, "1", "down", switchEngineState ) end end ) addEventHandler ( "onElementDestroy", root, function ( ) if getElementType ( source ) == "vehicle" then if vehicleEngine [ source ] then vehicleEngine [ source ] = nil end end end ) 1 Link to comment
mehmet Posted January 18, 2019 Author Share Posted January 18, 2019 58 minutes ago, Sarrum said: Если вдруг кто столкнется с подобной проблемой, как вариант: local vehicleEngine = { } function switchEngineState ( player ) local vehicle = getPedOccupiedVehicle ( player ) if ( vehicle ) then setVehicleEngineState ( vehicle, not getVehicleEngineState ( vehicle ) ) end end addEventHandler ( "onVehicleEnter", root, function ( player, seat ) if ( seat == 0 ) then setVehicleEngineState ( source, vehicleEngine [ source ] or false ) bindKey ( player, "1", "down", switchEngineState ) end end ) addEventHandler ( "onVehicleExit", root, function ( player, seat ) if ( seat == 0 ) then vehicleEngine [ source ] = getVehicleEngineState ( source ) unbindKey ( player, "1", "down", switchEngineState ) end end ) addEventHandler ( "onElementDestroy", root, function ( ) if getElementType ( source ) == "vehicle" then if vehicleEngine [ source ] then vehicleEngine [ source ] = nil end end end ) Да, спасибо. Скажи пожалуйста чем isElement отличается от? getElementData? И зачем нужна эта функция? addEventHandler ( "onElementDestroy", root, function ( ) if getElementType ( source ) == "vehicle" then if vehicleEngine [ source ] then vehicleEngine [ source ] = nil end end end ) Link to comment
Scripting Moderators Sarrum Posted January 18, 2019 Scripting Moderators Share Posted January 18, 2019 @mehmet isElement - проверяет валидность элемента (переданное значение элемент/ не элемент), getElementData - для получения даты элемента (которая задана до этого функцией setElementData) с определенным ключом. У них совершенно разные предназначения. Так как мы добавляем данные в таблицу, нам нужно событие onElementDestroy, которое сработает при уничтожении элемента (у нас при удалении транспорта), чтобы удалить этот элемент (транспорт) из таблицы. В противном случае могут возникнуть проблемы с утечкой памяти. Link to comment
mehmet Posted January 19, 2019 Author Share Posted January 19, 2019 15 hours ago, Sarrum said: @mehmet isElement - проверяет валидность элемента (переданное значение элемент/ не элемент), getElementData - для получения даты элемента (которая задана до этого функцией setElementData) с определенным ключом. У них совершенно разные предназначения. Так как мы добавляем данные в таблицу, нам нужно событие onElementDestroy, которое сработает при уничтожении элемента (у нас при удалении транспорта), чтобы удалить этот элемент (транспорт) из таблицы. В противном случае могут возникнуть проблемы с утечкой памяти. Я знаю что некоторые используют для этой системы setElementData. Но это плохо, если можно обойтись и сделать через vehicleEngine = { } Верно говорю? И последний вопрос: vehicleEngine = { } Это мы создали таблицу? Link to comment
K1parik Posted January 19, 2019 Share Posted January 19, 2019 (edited) 3 hours ago, mehmet said: Я знаю что некоторые используют для этой системы setElementData. Но это плохо, если можно обойтись и сделать через vehicleEngine = { } Верно говорю? И последний вопрос: vehicleEngine = { } Это мы создали таблицу? верно. таблицу с состоянием двигателя (вкл/выкл) для каждого автомобиля из которого выходят Edited January 19, 2019 by K1parik 1 Link to comment
mehmet Posted January 19, 2019 Author Share Posted January 19, 2019 32 minutes ago, K1parik said: верно. таблицу с состоянием двигателя (вкл/выкл) для каждого автомобиля из которого выходят спасибо! За помощь! 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