• 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!

erro in npc

carlinhous1996

New Member
Joined
Apr 14, 2022
Messages
54
Reaction score
3
could someone help me with this error please?
[Error - Npc interface]
data/npc/scripts/guildbank.lua:eek:nCreatureSay
Description:
data/npc/scripts/guildbank.lua:63: attempt to call global 'ou' (a nil value)
stack traceback:
data/npc/scripts/guildbank.lua:63: in function 'callback'
data/npc/lib/npcsystem/npchandler.lua:383: in function 'onCreatureSay'
data/npc/scripts/guildbank.lua:8: in function <data/npc/scripts/guildbank.lua:8>
Lua:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}

function onCreatureAppear(cid)                npcHandler:onCreatureAppear(cid)            end
function onCreatureDisappear(cid)            npcHandler:onCreatureDisappear(cid)            end
function onCreatureSay(cid, type, msg)            npcHandler:onCreatureSay(cid, type, msg)        end
function onThink()                    npcHandler:onThink()                    end

function writeBankFile(guildname, name, amount, operation)
    local file = io.open("guild_bank/" .. guildname .. ".txt", "a+")
    if file then
        file:write(name .. " - " .. operation .. " - " .. amount .. " - " .. os.date("%c") .. "\n")
        file:close()
        return true
    end
    return false
end

function testGuildFile(guildname)
    local file = io.open("guild_bank/" .. guildname .. ".txt", "r")
    if file then
        file:close()
        return true
    end
    return false
end

function getBankLog(guildname)
    local file = io.open("guild_bank/" .. guildname .. ".txt", "r")
    local content = file:read("*a")
    file:close()
    return content
end

function creatureSayCallback(cid, typ, msg)
    if(not npcHandler:isFocused(cid)) then
        return false
    end

    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

    local STG_ACCOUNT = 950
    local STG_WITHDRAW_PERMISSION = 951
    local STG_DEPOSIT_PERMISSION = 952
    
    local guild_rank = getPlayerGuildLevel(cid)   
    local guild = getPlayerGuildId(cid)
    if msgcontains(msg, "guild bank") then
        if not hasGuild(cid) then
            selfSay("Isto e o Guild Bank, " .. getCreatureName(cid) .. ". Voce precisa de uma guilda para abrir uma conta aqui.", cid)
        elseif getGuildStorageValue(guild, STG_ACCOUNT) == 1 then
            selfSay("Vejo aqui que sua guilda ja tem uma conta. Voce gostaria de {manage}?", cid)
            talkState[talkUser] = 1
        elseif guild_rank >= 3 then
            selfSay("Sua guilda ainda nao tem uma conta. Gostaria de {create}?", cid)
            talkState[talkUser] = 2
        else
            selfSay("Sinto muito, sua guilda ainda nao tem uma conta conosco. Por favor, diga ao seu lider para vir e criar um aqui.", cid)
        end
    elseif msgcontains(msg, "manage") and talkState[talkUser] == 1 then
        local str = guild_rank < 3 and "OK entao. Voce pode verificar o {balance}, {withdraw} or {deposit}." ou "Ok, entao. Voce pode verificar o {balance}, a transaçao {list}, {withdraw}, {deposit} ou gerenciar contas {permissions}."
        selfSay(str, cid)
        talkState[talkUser] = 3
    elseif msgcontains(msg, "create") and talkState[talkUser] == 2 then
        selfSay("Para criar sua conta, precisamos definir algumas permissoes. Existem 3 niveis de permissao: 1 - members, 2 - vice-leaders, 3 - leaders. Para retirar dinheiro da conta da guilda, qual permissao voce deseja definir?", cid)
        talkState[talkUser] = 4
    elseif talkState[talkUser] == 4 then
        local permission, permissions = tonumber(msg), {1, 2, 3}
        if isInArray(permissions, permission) then
            setGuildStorageValue(guild, STG_WITHDRAW_PERMISSION, permission)
            selfSay("Ok. A permissao de retirada esta definida. Agora, para depositar dinheiro na conta da sua guilda, qual permissao voce deseja definir?", cid)
            talkState[talkUser] = 5
        else
            selfSay("Essa nao era uma permissao valida. existem 3 permission levels: 1 - members, 2 - vice-leaders, 3 - leaders.", cid)
        end
    elseif talkState[talkUser] == 5 then
        local permission, permissions = tonumber(msg), {1, 2, 3}
        if isInArray(permissions, permission) then
            setGuildStorageValue(guild, STG_DEPOSIT_PERMISSION, permission)
            setGuildStorageValue(guild, STG_ACCOUNT, 1)
            selfSay("Ok. A permissao de deposito esta definida e sua conta de guilda foi criada com sucesso. Voce gostaria de fazer um {deposit}?", cid)
            talkState[talkUser] = 3
        else
            selfSay("Essa nao era uma permissao valida. Existem 3 niveis de permissao: 1 - members, 2 - vice-leaders, 3 - leaders.", cid)
        end
    elseif msgcontains(msg, "withdraw") and talkState[talkUser] == 3 then
        if guild_rank >= getGuildStorageValue(guild, STG_WITHDRAW_PERMISSION) then
            selfSay("Quanto voce gostaria de retirar?", cid)
            talkState[talkUser] = 6
        else
            selfSay("Desculpe, mas voce nao tem permissao para sacar dinheiro desta conta. Fale com o lider da sua guild.", cid)
        end
    elseif talkState[talkUser] == 6 then
        local withdraw_amount = tonumber(msg)
        local guild_balance = getGuildBalance(guild)
        if withdraw_amount and withdraw_amount >= 1 and guild_balance > withdraw_amount then
            withdraw_amount = math.floor(withdraw_amount)
            if doGuildAddBalance(guild, - withdraw_amount) then
                doPlayerAddMoney(cid, withdraw_amount)
                selfSay("Feito. Voce gostaria de mais alguma coisa?", cid)
                writeBankFile(getGuildName(guild), getCreatureName(cid), withdraw_amount, "withdraw")
                talkState[talkUser] = 3
            else
                selfSay("Ocorreu um erro e a transacao nao pode ser concluida.", cid)
                talkState[talkUser] = 3
            end
        else
            selfSay("Voce nao pode sacar esse valor da conta da sua guilda. seu saldo e " .. guild_balance .. ".", cid)
        end
    elseif msgcontains(msg, "deposit") and talkState[talkUser] == 3 then
        if guild_rank >= getGuildStorageValue(guild, STG_WITHDRAW_PERMISSION) then
            selfSay("Quanto voce gostaria de depositar?", cid)
            talkState[talkUser] = 10
        else
            selfSay("Desculpe, mas voce nao tem permissao para depositar dinheiro nesta conta. Fale com o lider da sua guilda.", cid)
        end
    elseif talkState[talkUser] == 10 then
        local deposit_amount = tonumber(msg)
        local guild_balance = getGuildBalance(guild)
        if deposit_amount and math.floor(deposit_amount) > 0 then
            deposit_amount = math.floor(deposit_amount)
            if doPlayerRemoveMoney(cid,deposit_amount) then
                doGuildAddBalance(guild, deposit_amount)
                writeBankFile(getGuildName(guild), getCreatureName(cid), deposit_amount, "deposit")
                selfSay("Feito. Voce gostaria de mais alguma coisa?", cid)
                talkState[talkUser] = 3
            else
                selfSay("Me desculpe, mas Voce nao tem tanto dinheiro.", cid)
            end
        else
            selfSay("Por favor, nao desperdice meu tempo.", cid)
        end
    elseif msgcontains(msg, "balance") and talkState[talkUser] == 3 then
        selfSay("O saldo da conta e " .. getGuildBalance(guild) .. ". Ha algo mais em que posso ajuda-lo?", cid)
        
    elseif msgcontains(msg, "permissions") and talkState[talkUser] == 3 and guild_rank >= 3 then
        selfSay("Existem 3 niveis de permissao: 1 - members, 2 - vice-leaders, 3 - leaders. Para retirar dinheiro da conta da guilda, qual permissao Voce deseja definir?", cid)
        talkState[talkUser] = 7
    elseif talkState[talkUser] == 7 then
        local permission, permissions = tonumber(msg), {1, 2, 3}
        if isInArray(permissions, permission) then
            setGuildStorageValue(guild, STG_WITHDRAW_PERMISSION, permission)
            selfSay("OK. A permissao de retirada esta definida. Agora, para depositar dinheiro na conta da sua guilda, qual permissao Voce deseja definir?", cid)
            talkState[talkUser] = 8
        else
            selfSay("Essa nao era uma permissao valida. Existem 3 niveis de permissao: 1 - members, 2 - vice-leaders, 3 - leaders.", cid)
        end
    elseif talkState[talkUser] == 8 then
        local permission, permissions = tonumber(msg), {1, 2, 3}
        if isInArray(permissions, permission) then
            setGuildStorageValue(guild, STG_DEPOSIT_PERMISSION, permission)
            selfSay("OK. A permissao de deposito esta definida. Posso te ajudar em mais alguma coisa?", cid)
            talkState[talkUser] = 3
        else
            selfSay("Essa nao era uma permissao valida. Existem 3 niveis de permissao: 1 - members, 2 - vice-leaders, 3 - leaders.", cid)
        end
    elseif msgcontains(msg, "list") and talkState[talkUser] == 3 and guild_rank >= 3 then
        local guildName = getGuildName(guild)
        if not testGuildFile(guildName) then
            selfSay("That option is currently disabled.", cid)
        else
            local str = getBankLog(guildName)
            str = string.explode(str, "\n")
            local newStr = ""
            local tableSize = type(str) == "table" and #str or false
            if not tableSize or (tableSize and tableSize <= 1) then
                selfSay("Nenhuma transacao foi cadastrada ainda. Posso te ajudar em mais alguma coisa?", cid)
            else
                for i = 0, 9 do
                    local str_add = str[tableSize - 10 + i]
                    if str_add then
                        newStr = newStr .. str_add .. "\n"
                    end
                end
                selfSay("Aqui esta, as ultimas 10 transacoes feitas nessa conta.", cid)
                doPlayerPopupFYI(cid, newStr)
            end
        end
    end
    return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 
Line 63:
Lua:
        local str = guild_rank < 3 and "OK entao. Voce pode verificar o {balance}, {withdraw} or {deposit}." ou "Ok, entao. Voce pode verificar o {balance}, a transaçao {list}, {withdraw}, {deposit} ou gerenciar contas {permissions}."

LUA doesn't understand Portuguese it only talks in english and syntax
so you can't really write ou instead or

by changing line 63 to this one your error will be solved

Lua:
        local str = guild_rank < 3 and "OK entao. Voce pode verificar o {balance}, {withdraw} or {deposit}." or "Ok, entao. Voce pode verificar o {balance}, a transaçao {list}, {withdraw}, {deposit} ou gerenciar contas {permissions}."
 
Line 63:
Lua:
        local str = guild_rank < 3 and "OK entao. Voce pode verificar o {balance}, {withdraw} or {deposit}." ou "Ok, entao. Voce pode verificar o {balance}, a transaçao {list}, {withdraw}, {deposit} ou gerenciar contas {permissions}."

LUA doesn't understand Portuguese it only talks in english and syntax
so you can't really write ou instead or

by changing line 63 to this one your error will be solved

Lua:
        local str = guild_rank < 3 and "OK entao. Voce pode verificar o {balance}, {withdraw} or {deposit}." or "Ok, entao. Voce pode verificar o {balance}, a transaçao {list}, {withdraw}, {deposit} ou gerenciar contas {permissions}."
worked perfectly. thank you so much!
God bless you
 
Back
Top