Maikele

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

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

Share this post


Link to post

как то так

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 )

 

Share this post


Link to post
timer[thePlayer] = nil

не обязательно. Он уже исчезнет по killTimer

Share this post


Link to post
2 hours ago, JeViCo said:

timer[thePlayer] = nil

не обязательно. Он уже исчезнет по killTimer

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

Share this post


Link to post
2 hours ago, K1parik said:

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

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

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

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

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

 

Share this post


Link to post

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

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

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

Share this post


Link to post
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, может даже хуже так, тогда нужно пробовать сборщик мусора вручную теребенить.

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

Share this post


Link to post
6 hours ago, Fabervox said:

@K1parik , collectgarbage()

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

Share this post


Link to post
14 hours ago, K1parik said:

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

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

  • Like 1

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

  • Recently Browsing   0 members

    No registered users viewing this page.