Jump to content

Помогите с функцией


Recommended Posts

Добрый вечер! В МТА около месяца, ранее работал с павно, луа для меня новый язык, хочу обратиться за помощью.
Ниже код, он реализован: Если игрок выйдет из транспорта, то у него есть 15 секунд чтобы вернуться иначе автомобиль исчезнет. Проблема в том, что автомобиль исчезает, даже когда игрок вернулся обратно. Помогите, может какие функции добавить, для этого..буду признателен. 

p.s. Извините за плохой русский.
 

function taxiExitVeh( thePlayer )
    if ( getElementModel ( source ) == 420 ) then
        outputChatBox("Вернитесь в автомобиль.", thePlayer, 255, 255, 255, true)
        setTimer ( destroyElement, 15000, 1, source, taxiVehs)
    end
end
addEventHandler ( "onVehicleExit", getRootElement(), taxiExitVeh )
Edited by Name
Link to comment

как то так

local timer = {}

function taxiExitVeh ( thePlayer )
    if ( getElementModel ( source ) == 420 ) then
        outputChatBox ( "Вернитесь в автомобиль.", thePlayer, 255, 255, 255, true )
        timer[thePlayer] = setTimer ( destroyElement, 15000, 1, source, taxiVehs )
    end
end
addEventHandler ( "onVehicleExit", getRootElement(), taxiExitVeh )

function taxiEnterVeh ( thePlayer )
    if ( getElementModel ( source ) == 420 ) then
        if isTimer ( timer[thePlayer] ) then
        	killTimer ( timer[thePlayer] )
        	timer[thePlayer] = nil
        end
    end
end
addEventHandler ( "onVehicleEnter", getRootElement(), taxiEnterVeh )

 

Link to comment
  • 7 months later...
2 hours ago, K1parik said:

а в таблице timer = {} записи тоже не останется?

local timer = {} --задал, что таймер в виде пустой таблицы

Насколько я понял, в 1 строке был указан тип переменной и значение (пусто, значит nil).

По сути ты убираешь таймер, его значение равно 0 и ему опять присваивается 0. 0 = 0

killTimer ( timer[thePlayer] ) -- убирается сам таймер (#1)
timer[thePlayer] = nil -- значению времени таймера присваивается 0, то есть nil(#2)

 

Link to comment
  • 4 weeks later...

15c это не так много, можно сделать просто вот так

setTimer ( function (veh, driver) if getVehicleController(veh) ==  driver then destroyElement(veh) end end, 15000, 1, source, thePlayer)

@K1parik, если ты подозреваешь что память не очищается, тогда не хватит ещё раз присваивать nil, может даже хуже так, тогда нужно пробовать сборщик мусора вручную теребенить.

Link to comment
5 hours ago, Fabervox said:

15c это не так много, можно сделать просто вот так


setTimer ( function (veh, driver) if getVehicleController(veh) ==  driver then destroyElement(veh) end end, 15000, 1, source, thePlayer)

@K1parik, если ты подозреваешь что память не очищается, тогда не хватит ещё раз присваивать nil, может даже хуже так, тогда нужно пробовать сборщик мусора вручную теребенить.

а можно по русски для тупеньких объяснить?

Link to comment
  • Other Languages Moderators
14 hours ago, K1parik said:

судя по описанию по умолчанию он сам срабатывает иногда и его в принципе не обязательно вызывать?

Верно, но бывает не срабатывает, или бывает наоборот надо отключить срабатывание.

  • Like 1
Link to comment

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
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...