Sign in to follow this  
mehmet

Система двигателя( не сохраняется вкл/выкл)

Recommended Posts

Привет всем,

Пытаюсь написать скрипт двигателя по кнопке вкл и выкл. При этом, когда садишься в машину она автоматически определяла машина заведена или нет. Это для того, если машина заглушина, то когда садишься она была по прежнему заглушина. (Надеюсь более менее изъяснился) 

Вот мой код:
 

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. Читал статейки, что нужно стараться обходить их. Но я до конца не уверен, менно здесь можно ли обойтись без него?

Share this post


Link to post

getVehicleEngineState показывает включен двигатель или нет. зачем элементдата?

Share this post


Link to post
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)

Вот есть такой вариант, но когда садишься в машину она автоматически заводится. А мне нужно вручную.

Share this post


Link to post

в ивенте когда игрок сел в машину выключай двигатель этой функцией setVehicleEngineState

Edited by K1parik

Share this post


Link to post
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)

 

Share this post


Link to post

интересное условие: если двигатель выключен - выключить двигатель? + к этому бинд не сработает если двигатель выключен т.е потом не сможешь его включить

Edited by K1parik

Share this post


Link to post
3 minutes ago, K1parik said:

интересное условие: если двигатель выключен - выключить двигатель? + к этому бинд не сработает если двигатель включен т.е потом не сможешь его выключить

можешь показать как нужно? Просто если в ивенте когда сел игрок в машину выкл двигатель, то тогда, когда двигатель будет вкл , то он автоматом будет выключаться

Edited by mehmet

Share this post


Link to post

может быть вот так

addEventHandler("onPlayerVehicleEnter", getRootElement(), function(vehicle, seat)
	if seat == 0 then
		setVehicleEngineState (vehicle, false )
		bindKey(source, "1", "down", switchEngineState)
	end
end)

 

Share this post


Link to post
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)

 

Спасибо за попытку. Но как я и говорил. Теперь когда двигатель включенный. При повторной посадке он выкл. Хотя должен работать.

Share this post


Link to post

Если вдруг кто столкнется с подобной проблемой, как вариант:

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
)

 

  • Like 1

Share this post


Link to post
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
)

 

Share this post


Link to post

@mehmet
isElement - проверяет валидность элемента (переданное значение элемент/ не элемент), getElementData - для получения даты элемента (которая задана до этого функцией setElementData) с определенным ключом. У них совершенно разные предназначения.
Так как мы добавляем данные в таблицу, нам нужно событие onElementDestroy, которое сработает при уничтожении элемента (у нас при удалении транспорта), чтобы удалить этот элемент (транспорт) из таблицы. В противном случае могут возникнуть проблемы с утечкой памяти.

Share this post


Link to post
15 hours ago, Sarrum said:

@mehmet
isElement - проверяет валидность элемента (переданное значение элемент/ не элемент), getElementData - для получения даты элемента (которая задана до этого функцией setElementData) с определенным ключом. У них совершенно разные предназначения.
Так как мы добавляем данные в таблицу, нам нужно событие onElementDestroy, которое сработает при уничтожении элемента (у нас при удалении транспорта), чтобы удалить этот элемент (транспорт) из таблицы. В противном случае могут возникнуть проблемы с утечкой памяти.

Я знаю что некоторые используют для этой системы setElementData. Но это плохо, если можно обойтись и сделать через  vehicleEngine = { }

Верно говорю? 

И последний вопрос: vehicleEngine = { } 
Это мы создали таблицу?

Share this post


Link to post
3 hours ago, mehmet said:

Я знаю что некоторые используют для этой системы setElementData. Но это плохо, если можно обойтись и сделать через  vehicleEngine = { }

Верно говорю? 

И последний вопрос: vehicleEngine = { } 
Это мы создали таблицу?

верно. таблицу с состоянием двигателя (вкл/выкл) для каждого автомобиля из которого выходят 

Edited by K1parik
  • Like 1

Share this post


Link to post
32 minutes ago, K1parik said:

верно. таблицу с состоянием двигателя (вкл/выкл) для каждого автомобиля из которого выходят 

спасибо! За помощь!

Share this post


Link to post

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.