Jump to content

[BUG] Функции


Recommended Posts

Posted

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

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

Posted
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) 

Posted

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

Posted

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

Posted

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

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) 

Posted

Нет. Ваш код не работает и проблема та же самая, которая была и в моем коде.

Posted

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

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

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

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

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

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

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