Jump to content

[BUG] Функции


Recommended Posts

Итак... Я имею функцию, которая выполняется при выполнении onPlayerChat, но она работает ТОЛЬКО после первого запуска сервера, после рестарта она не работает и для того что бы она заработала нужно поменять её название.

Как решить данную проблему и решается ли она вообще? Чем может быть такое вызвано?

Link to comment
function ableEnterCom(interior,dimension,type) 
  
function enterCom(message) 
    if(message == "!enter") then 
        getInterior = executeSQLSelect("interiors","*","id = '"..interior.."'") 
        local o=0 
        table.foreach(getInterior,function() o=o+1 end) 
        if(o~=0) then 
            setElementInterior(source,tonumber(getInterior[1]["interior"]),tonumber(getInterior[1]["x"]),tonumber(getInterior[1]["y"]),tonumber(getInterior[1]["z"])) 
            setElementDimension(source,tonumber(dimension)) 
            setElementData(source,"location",type) 
        else 
            outputConsole("Can't enter: ERROR 1",source) 
        end 
    end 
end 
  
addEventHandler("onPlayerChat",getRootElement(),enterCom) 
  
end 
  
function enterTo(entity) 
    if(getElementType(entity) == "player") then 
        if(isPedInVehicle(entity)) then 
            getEnter = executeSQLSelect("enters","*","enter_marker_id = '"..getElementID(source).."'") 
            local k=0 
            table.foreach(getEnter,function() k=k+1 end) 
            if(k~=0) then 
                ableEnterCom(getEnter[1]["interior"],getEnter[1]["dimension"],getEnter[1]["id"]) 
            end 
        end 
    end 
end 
  
addEventHandler("onMarkerHit",getRootElement(),enterTo) 
  
function quit(message) 
    if(message == "!exit") then 
    location = getElementData(source,"location") 
        if(location~="world") then 
            getWorld = executeSQLSelect("enters","*","id = '"..location.."'") 
            marker = getElementByID(getWorld[1]["enter_marker_id"]) 
            local x,y,z = getElementPosition(marker) 
            setElementInterior(source,0,x,y,z) 
            setElementDimension(source,0) 
            setElementData(source,"location","world") 
        end 
    end 
end 
  
addEventHandler("onPlayerChat",getRootElement(),quit) 

Link to comment

Функция enterCom создана внутри функции ableEnterCom и является локальной, а это неправильно в данном случае. Функция enterCom должна быть глобальной, чтобы указать ее как обработчик события.

Link to comment

Забыл указать, что воздействию, которое я указал в первом посту производится на функцию quit. Еще проблема в том, что когда я убираю quit - скрипт работает, в противном случае работает ТОЛЬКО до первого рестарта сервера, после чего для того, чтобы работал ВЕСЬ скрипт, нужно сменить название функции quit и этот эффект длится только до первого рестарта. Или же убрать функцию quit.

Link to comment

Ты вообще понял, что тебе посоветовали? Создание второй функции сделай до создания первой.

function enterCom(message) 
    if(message == "!enter") then 
        getInterior = executeSQLSelect("interiors","*","id = '"..interior.."'") 
        local o=0 
        table.foreach(getInterior,function() o=o+1 end) 
        if(o~=0) then 
            setElementInterior(source,tonumber(getInterior[1]["interior"]),tonumber(getInterior[1]["x"]),tonumber(getInterior[1]["y"]),tonumber(getInterior[1]["z"])) 
            setElementDimension(source,tonumber(dimension)) 
            setElementData(source,"location",type) 
        else 
            outputConsole("Can't enter: ERROR 1",source) 
        end 
    end 
end 
  
function ableEnterCom(interior,dimension,type) 
    addEventHandler("onPlayerChat",getRootElement(),enterCom) 
end 
  
function enterTo(entity) 
    if(getElementType(entity) == "player") then 
        if(isPedInVehicle(entity)) then 
            getEnter = executeSQLSelect("enters","*","enter_marker_id = '"..getElementID(source).."'") 
            local k=0 
            table.foreach(getEnter,function() k=k+1 end) 
            if(k~=0) then 
                ableEnterCom(getEnter[1]["interior"],getEnter[1]["dimension"],getEnter[1]["id"]) 
            end 
        end 
    end 
end 
  
addEventHandler("onMarkerHit",getRootElement(),enterTo) 
  
function quit(message) 
    if(message == "!exit") then 
        location = getElementData(source,"location") 
        if(location~="world") then 
            getWorld = executeSQLSelect("enters","*","id = '"..location.."'") 
            marker = getElementByID(getWorld[1]["enter_marker_id"]) 
            local x,y,z = getElementPosition(marker) 
            setElementInterior(source,0,x,y,z) 
            setElementDimension(source,0) 
            setElementData(source,"location","world") 
        end 
    end 
end 
  
addEventHandler("onPlayerChat",getRootElement(),quit) 

Link to comment

Мб сначала разберешься/напишешь конкретно что у тебя не работает, а что работает... а то

Я имею функцию
ты много функций имеешь, какую именно мы сами догадываться должны?

Ты добавляешь заголовок события

addEventHandler("onPlayerChat",getRootElement(),enterCom) 

ну рас тебе нужно его когда-то добавлять(чтобы до этого его не было), то и удалять его когда-то тоже надо? в коде этого не вижу

А саму функцию enterCom(message) лучше объявлять как показал MX_Master

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...