• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Can't call a method on a nil value

Zak.Tibiam

New Member
Joined
Mar 25, 2012
Messages
150
Reaction score
3
Hello guys please help me with this error!

Code:
Lua Script Error: [Action Interface]
data/actions/scripts/entrada.lua:onUse
data/lib/warantientrosa/modalWindows.lua:45: attempt to call method 'isInWar' (a nil value)
stack traceback:
        [C]: in function 'isInWar'
        data/lib/warantientrosa/modalWindows.lua:45: in function 'main'
        data/actions/scripts/entrada.lua:4: in function <data/actions/scripts/entrada.lua:1>

entrada.lua
Code:
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
            player:registerEvent("WarModals")   
            player:registerEvent("WarText")   
            warModalConfig:main(player)
    return true
end

modalWindows.lua
Code:
warModalConfig = {

    mainId = 0,
        invite = 0,
        ir = 1,
        
    numeroId = 1,
        semLimite = 1,
        dez = 2,
        quinze = 3,
        vinte = 4,
        trinta = 5,
        quarenta = 6,
    
    modoId = 2,
        tradicional = 7,
        semUe = 8,
        soSd = 9,
    
    tempoId = 3,
        sessenta_min = 10,
        trinta_min = 11,
        quinze_min = 12,
    
    cidadeId = 4,
        edron = 13,
        darashia = 14,
        lb = 15,
        carlin = 16,
        cormaya = 17,
        svar = 18,
        yalahar = 19,
        venore = 20,

    convidado = 5,
        aceitar = 21,
        recusar = 22,
    
    nome_guild = 1971,
    guild_choice = {}
    
}

function warModalConfig:main(player)
    if not player:isInWar() then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You must be in war system.")
        return false
    end
    
    local modalWindow = ModalWindow(warModalConfig.mainId, "War Anti Entrosa")
    if player:getGuildLevel() == 3 then
    
        local isInWar = false
        for _, v in pairs(Wars) do
            if v:isGuildInWar(guild) then
                isInWar = true
            end
        end   
        if not isInWar then
            modalWindow:addChoice(warModalConfig.invite, "Invite")
        end
        local guild = player:getGuild()
        index = 2
        for k, v in pairs(Wars) do
            if Guild(v.guilds.a) and v.aceito == false and v.guilds.b == guild:getId() and not isInWar then
                modalWindow:addChoice(index, "Accept invite from ".. Guild(v.guilds.a):getName())
                Wars[k].choiceId = index
            elseif v.aceito == true and v:isGuildInWar(guild:getId()) then
            local name = (v.guilds.a == guild:getId()) and Guild(v.guilds.b):getName() or Guild(v.guilds.a):getName()
                modalWindow:addChoice(warModalConfig.ir, "Go war against ".. name)
            end
        index = index + 1
        end
    else
        local guild = player:getGuild()
        for k, v in pairs(Wars) do
            if v.aceito == true and v:isGuildInWar(guild:getId()) then
            local name = (v.guilds.a == guild:getId()) and Guild(v.guilds.b):getName() or Guild(v.guilds.a):getName()
                modalWindow:addChoice(warModalConfig.ir, "Go war against ".. name)
            end
        end
    end
    if modalWindow:getChoiceCount() == 0 then   
        player:sendTextMessage(22, "You are not a guild leader and there is no War running.")
        return false
    end

    modalWindow:addButton(1, "Ok")
    modalWindow:addButton(2, "Cancel")
    
    modalWindow:setDefaultEnterButton(1)
    modalWindow:setDefaultEscapeButton(2)
    
    return modalWindow:sendToPlayer(player)
end

function warModalConfig:inviteGuild(player)
    -- query para pegar todos os inimigos da guild
    -- registra o nome e o id da guild inimiga em uma posição da tabela de inimigos (que é uma posição da tabela guild_choice na posição do id da Guild)
    -- as atuais wars são salvas globalmente para reconhecer a choice do player posteriormente

        -- ficou muito lixo, esse war system é um coco fedido que fudeu tudo
        
        local guild = player:getGuild():getId()
        if table.elements(warModalConfig.guild_choice[guild]) > 0 then
            return false
        end       
    
        local query = {}
        query[1] = db.storeQuery("SELECT `guild2` FROM `guild_wars` WHERE `status` = 1 AND `guild1` = " .. guild)
        query[2] = db.storeQuery("SELECT `guild1` FROM `guild_wars` WHERE `status` = 1 AND `guild2` = " .. guild)
                                
        warModalConfig.guild_choice[guild] = {}
        for k, v in pairs(query) do
                local tmpResult = v
                while tmpResult ~= false do
                    enemyGuild = k == 1 and result.getNumber(v, "guild2") or result.getNumber(v, "guild1")
                    enemyName = Guild(enemyGuild) and Guild(enemyGuild):getName() or false
                    if enemyName then
                        table.insert(warModalConfig.guild_choice[guild], {name = enemyName, enemy = enemyGuild})
                    end
                    tmpResult = result.next(v)
                end
        end       
        
    local modalWindow = ModalWindow(warModalConfig.nome_guild, "Choose your enemy.")
    
    for k, v in pairs(warModalConfig.guild_choice[guild]) do
        if Guild(v.enemy):hasLeaderOnline() and not Guild(v.enemy):isInWarAntiEntrosa() then
            modalWindow:addChoice(k, v.name)
        end
    end
    
    if modalWindow:getChoiceCount() == 0 then   
        player:sendTextMessage(22, "No available guild to fight against.")
        eraseAntiEntrosa(player)
        return false
    end
    
    modalWindow:addButton(1, "Ok")
    modalWindow:addButton(2, "Cancel")
    
    modalWindow:setDefaultEnterButton(1)
    modalWindow:setDefaultEscapeButton(2)
    
    return modalWindow:sendToPlayer(player)       
end


function warModalConfig:convidado(player, nome)

    local modalWindow = ModalWindow(warModalConfig.convidado, "The guild " .. nome .. " inveted your guild to War Anti Entrosa.")
    
    modalWindow:addChoice(warModalConfig.aceitar, "Accept")
    modalWindow:addChoice(warModalConfig.recusar, "Recuse")
    
    modalWindow:addButton(1, "Ok")
    modalWindow:addButton(2, "Cancel")
    
    modalWindow:setDefaultEnterButton(1)
    modalWindow:setDefaultEscapeButton(2)
    
    return modalWindow:sendToPlayer(player)
end

function warModalConfig:numeroJogadores(player)
    
    local modalWindow = ModalWindow(warModalConfig.numeroId, "Amount of players for each team:")
    
    modalWindow:addChoice(warModalConfig.semLimite, "No limit")
    modalWindow:addChoice(warModalConfig.dez, "10x10")
    modalWindow:addChoice(warModalConfig.quinze, "15x15")
    modalWindow:addChoice(warModalConfig.vinte, "20x20")
    modalWindow:addChoice(warModalConfig.trinta, "30x30")
    modalWindow:addChoice(warModalConfig.quarenta, "40x40")
    
    modalWindow:addButton(1, "Ok")
    modalWindow:addButton(2, "Cancel")
    
    modalWindow:setDefaultEnterButton(1)
    modalWindow:setDefaultEscapeButton(2)
    
    return modalWindow:sendToPlayer(player)
end

function warModalConfig:modo(player)
    
    local modalWindow = ModalWindow(warModalConfig.modoId, "Choose the mode:")
    
    modalWindow:addChoice(warModalConfig.tradicional, "Traditional")
    modalWindow:addChoice(warModalConfig.semUe, "Without spell/runes area")
    modalWindow:addChoice(warModalConfig.soSD, "Only Sudden Death")
    
    modalWindow:addButton(1, "Ok")
    modalWindow:addButton(2, "Cancel")
    
    modalWindow:setDefaultEnterButton(1)
    modalWindow:setDefaultEscapeButton(2)
    
    return modalWindow:sendToPlayer(player)
end

function warModalConfig:tempo(player)
    
    local modalWindow = ModalWindow(warModalConfig.tempoId, "Pick the time, both leaders will pay.")
    
    modalWindow:addChoice(warModalConfig.quinze_min, "15 min: " .. War.preco.quinze_min .. " gold")
    modalWindow:addChoice(warModalConfig.trinta_min, "30 min: " .. War.preco.trinta_min .. " gold")
    modalWindow:addChoice(warModalConfig.sessenta_min, "60 min: " .. War.preco.sessenta_min .. " gold")
    
    modalWindow:addButton(1, "Ok")
    modalWindow:addButton(2, "Cancel")
    
    modalWindow:setDefaultEnterButton(1)
    modalWindow:setDefaultEscapeButton(2)
    
    return modalWindow:sendToPlayer(player)
end

function warModalConfig:cidade(player)
    
    local modalWindow = ModalWindow(warModalConfig.cidadeId, "Pick a city to fight:\n\n")
    local maps = Instance:getMaps()
    
    for v, _ in pairs(maps) do
        if v == War.cidade.edron then         modalWindow:addChoice(warModalConfig.edron, "Edron")
        elseif v == War.cidade.cormaya then     modalWindow:addChoice(warModalConfig.cormaya, "Cormaya")
        elseif v == War.cidade.darashia then    modalWindow:addChoice(warModalConfig.darashia, "Darashia")
        elseif v == War.cidade.carlin then     modalWindow:addChoice(warModalConfig.carlin, "Carlin")
        elseif v == War.cidade.lb then         modalWindow:addChoice(warModalConfig.lb, "Liberty Bay")
        elseif v == War.cidade.svar then         modalWindow:addChoice(warModalConfig.svar, "Svargrond")
        elseif v == War.cidade.yalahar then    modalWindow:addChoice(warModalConfig.yalahar, "Yalahar")
        elseif v == War.cidade.venore then    modalWindow:addChoice(warModalConfig.venore, "Venore")
        end   
    end
    
    if modalWindow:getChoiceCount() == 0 then   
        player:sendTextMessage(22, "No available city to fight.")
        eraseAntiEntrosa(player)
        return false
    end
    
    modalWindow:addButton(1, "Ok")
    modalWindow:addButton(2, "Cancel")
    
    modalWindow:setDefaultEnterButton(1)
    modalWindow:setDefaultEscapeButton(2)
    
    return modalWindow:sendToPlayer(player)
end
 
Back
Top