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

Lua Bad argument #3 to 'max' (number expected, got nil)

1268995

Member
Joined
Sep 9, 2010
Messages
422
Reaction score
13
Got this error:

HTML:
[16:4:47.984] [Error - CreatureScript Interface]
[16:4:47.984]                   domodlib("config_run_event")

[16:4:47.984]                   function onLogin(cid)
[16:4:47.984]                           if getCreatureStorage(cid, configRunEvent.storages.player) > 0 then
[16:4:47.984]                                   doCreatureSetStorage(cid, configRunEvent.storages.player, -1)
[16:4:47.984]                                   doPlayerSetGroupId(cid, math.max(1, getCreatureStorage(cid, configRunEvent.storages.group)))
[16:4:47.984]                                   doCreatureSetNoMove(cid, false)
[16:4:47.984]                                   doRemoveCondition(cid, CONDITION_INFIGHT)
[16:4:47.984]                                   doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), true)
[16:4:47.984]                           end
[16:4:47.984]                           return true
[16:4:47.984]                   end
[16:4:47.984]           :onLogin
[16:4:47.984] Description:
[16:4:47.984] [string "LuaInterface::loadBuffer"]:6: bad argument #3 to 'max' (number expected, got nil)
[16:4:47.984] stack traceback:
[16:4:47.985]   [C]: in function 'max'
[16:4:47.985]   [string "LuaInterface::loadBuffer"]:6: in function <[string "LuaInterface::loadBuffer"]:3>
 
getCreatureStorage(cid, configRunEvent.storages.group)
Looks as though that players storage for that key is not a number. Try to print(getCreatureStorage(cid, configRunEvent.storages.group)) and see what it returns.
 
Try to print "configRunEvent.storages.group" insted, since (I suspect) TFS returns nil if the storage value is nil.
Otherwise it should return -1 if the source code is correct.
 
Try to print "configRunEvent.storages.group" insted, since (I suspect) TFS returns nil if the storage value is nil.
Otherwise it should return -1 if the source code is correct.

Ye i understood, but in wich code should i put print (...) ?
 
Before it executes it.
You should always upload the scripts when you have something to ask about.

Oh, thats a mod.. First script part:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Run_Event" version="3.0" author="CollocorpuseK" contact="otland.net" enabled="yes">

    <config name="config_run_event">
        <![CDATA[
            configRunEvent = {
                storages = {
                    player = 'runEventPlayer', -- set free storage
                    joining = 'runEventJoining', -- set free storage
                    group = 'runEventGroup', -- set free storage
                    exhaust = 'runEventExhaust', -- set free storage
                    countEvent = 'runEventCountEvent' -- set free storage
                },

                position = {x=1357, y=1088, z=7}, -- Posicao que vai ser teleportado os players
               
                rewards = {7440, 2160, 11138, 5468}, -- Itens pro vencedor ( Sera sortido)
                players = {
                    max = 40, -- Maximo de player
                    min = 5, -- Minimo de player
                    minLevel = 8, -- Level minimo pra entrar no evento
                    speed = 200 -- Velocidade que todos ficaram
                },
               
                days = {
                    ['Monday'] = {'16:00:00'},
                    ['Tuesday'] = {'16:00:00'},
                    ['Wednesday'] = {'16:00:00'},
                    ['Thursday'] = {'16:00:00'},
                    ['Friday'] = {'16:00:00'},
                    ['Saturday'] = {'16:00:00'},
                    ['Sunday'] = {'16:00:00'}
                },

                delayTime = 5.0, -- Tempo pros players dizer o comando [minutos]
                startEvent = 2, -- Tempo pra comecar o evento quando todos players tiverem no local [ segundos ]
                text = 'Vai comecar o Run Evento, se preparem'
            }
        ]]>
    </config>

    <lib name="lib_run_event">
        <![CDATA[
            function doStartEventRun()
                if configRunEvent.players.min <= doCountPlayersRunEvent() then
                    for _, cid in ipairs(getPlayersOnline()) do
                        if getCreatureStorage(cid, configRunEvent.storages.player) > 0 then
                            doRemoveCondition(cid, CONDITION_INFIGHT) -- fight
                            doTeleportThing(cid, configRunEvent.position)    -- teleport pos
                            doChangeSpeed(cid, configRunEvent.players.speed - getCreatureBaseSpeed(cid)) -- predkosc
                            doCreatureSetStorage(cid, configRunEvent.storages.group, getPlayerGroupId(cid)) -- storage
                            doPlayerSetGroupId(cid, 7) -- grupa
                            addEvent(doCreatureSetNoMove, configRunEvent.startEvent * 1000, cid, false)
                            doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'Get ready. Run Event Iniciado Em '..configRunEvent.startEvent..' seconds.')
                        end
                    end

                    addEvent(doCheckSpeedRunEvent, configRunEvent.startEvent * 1000)
                    doBroadcastMessage('Run Event has started. LET\'S GO!')
                else
                    for _, cid in ipairs(getPlayersOnline()) do
                        if getCreatureStorage(cid, configRunEvent.storages.player) > 0 then
                            doCreatureSetStorage(cid, configRunEvent.storages.player, -1)
                            doCreatureSetNoMove(cid, false)
                            doRemoveCondition(cid, CONDITION_INFIGHT)
                        end
                    end

                    doBroadcastMessage('Run Event hasn\'t started beacuse there were not enough players.')
                end

                doSetStorage(configRunEvent.storages.joining, -1)
            end

            function doCountPlayersRunEvent()
                local x = 0
                for _, cid in ipairs(getPlayersOnline()) do
                    if getCreatureStorage(cid, configRunEvent.storages.player) > 0 then
                        x = x + 1
                    end
                end
                return x
            end
           
            function doStartCountingRunEvent(x)
                if configRunEvent.delayTime-x > 0 then
                    doBroadcastMessage('Run Event vai comecar em '..configRunEvent.delayTime-x..' minutos. Voce pode juntar-se ao evento dizendo "!run join".')
                    addEvent(doStartCountingRunEvent, 60*1000, x+1)
                end
            end

            function doCheckSpeedRunEvent()
                if doCountPlayersRunEvent() > 0 then
                    addEvent(doCheckSpeedRunEvent, 1000)
                end

                for _, cid in ipairs(getPlayersOnline()) do
                    if getCreatureStorage(cid, configRunEvent.storages.player) > 0 then
                        if getCreatureSpeed(cid) ~= configRunEvent.players.speed then
                            doChangeSpeed(cid, (getCreatureSpeed(cid) < configRunEvent.players.speed and configRunEvent.players.speed - getCreatureSpeed(cid) or getCreatureSpeed(cid) > configRunEvent.players.speed and - (getCreatureSpeed(cid) - configRunEvent.players.speed)))
                        end
                    end
                end
            end
        ]]>
    </lib>

    <talkaction words="!run" event="script">
        <![CDATA[
            domodlib("config_run_event")
 
Second script part:
Code:
    function onSay(cid, words, param)
                if getStorage(configRunEvent.storages.joining) ~= 1 then
                    return doPlayerSendCancel(cid, 'The Run Event hasn\'t started yet.')
                elseif param == '' then
                    return doPlayerSendCancel(cid, 'Command param required (say: "!run join" or "!run leave.").')
                elseif getPlayerLevel(cid) < configRunEvent.players.minLevel then
                    return doPlayerSendCancel(cid, 'You can\'t join to the event if you don\'t have a require '..configRunEvent.players.minLevel..' level.')
                elseif getTileInfo(getThingPos(cid)).protection ~= true then
                    return doPlayerSendCancel(cid, 'You can\'t join to the event if you aren\'t in protection zone.')
                elseif exhaustion.check(cid, configRunEvent.storages.exhaust) ~= false then
                    return doPlayerSendCancel(cid, 'You must wait '..exhaustion.get(cid, configRunEvent.storages.exhaust)..' seconds to use this command again.')
                end

                if param == 'join' then
                    if getCreatureStorage(cid, configRunEvent.storages.player) > 0 then
                        return doPlayerSendCancel(cid, 'You have arleady joined to event. Wait patiently for start.')
                    elseif doCountPlayersRunEvent() == configRunEvent.players.max then
                        return doPlayerSendCancel(cid, 'Max players in the event have been reached.')
                    end

                    doCreatureSetNoMove(cid, true)
                    doPlayerPopupFYI(cid, configRunEvent.text)
                    doCreatureSetStorage(cid, configRunEvent.storages.player, 1)
                    doAddCondition(cid, createConditionObject(CONDITION_INFIGHT, -1))
                    doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'You have joined to Run Event. You can\'t move until event don\'t start. Wait patiently for the event start.')
                    doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You have joined to Run Event.')                  
                elseif param == 'leave' then
                    if getCreatureStorage(cid, configRunEvent.storages.player) <= 0 then
                        return doPlayerSendCancel(cid, 'You can\'t leave from the event if you don\'t join.')
                    end

                    doCreatureSetNoMove(cid, false)
                    doCreatureSetStorage(cid, configRunEvent.storages.player, -1)
                    doRemoveCondition(cid, CONDITION_INFIGHT)
                    doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You have left from the Run Event.')
                end

                exhaustion.set(cid, configRunEvent.storages.exhaust, 5)
                return true
            end
        ]]>
    </talkaction>

    <talkaction words="!startrun" access="5" event="script">
        <![CDATA[
            domodlib("config_run_event")
            domodlib("lib_run_event")

            function onSay(cid, words, param)
                doSetStorage(configRunEvent.storages.joining, 1)
                addEvent(doStartEventRun, configRunEvent.delayTime * 60 * 1000)
                doStartCountingRunEvent(0)

                for _, pid in ipairs(getPlayersOnline()) do
                    if getCreatureStorage(pid, configRunEvent.storages.player) > 0 then
                        doCreatureSetStorage(pid, configRunEvent.storages.player, -1)

                        doPlayerSetGroupId(pid, getCreatureStorage(pid, configRunEvent.storages.group))
                        doChangeSpeed(pid, getCreatureBaseSpeed(pid) - configRunEvent.players.speed)
                        doTeleportThing(pid, getTownTemplePosition(getPlayerTown(pid)), true)
                    end
                end
                return true
            end
        ]]>
    </talkaction>

    <movement type="StepIn" actionid="5467" event="script">
        <![CDATA[
            domodlib("config_run_event")

            function onStepIn(cid, item, position)
                if getCreatureStorage(cid, configRunEvent.storages.player) > 0 then
                    local prize = math.random(#configRunEvent.rewards)

                    doCreatureSetStorage(cid, configRunEvent.storages.player, -1)
                    doPlayerAddItem(cid, configRunEvent.rewards[prize], 1)
                    doChangeSpeed(cid, getCreatureBaseSpeed(cid) - configRunEvent.players.speed)
                    doPlayerSetGroupId(cid, math.max(1, getCreatureStorage(cid, configRunEvent.storages.group)))
                    doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), true)
                    doBroadcastMessage('Run Event has finished. The winner is '..getCreatureName(cid)..'.')
                    doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'You are winner. You have won '..getItemNameById(configRunEvent.rewards[prize])..'.')
                    db.query("INSERT INTO `events` (`event_name`, `winner_name`, `won_item`, `time_win`) VALUES (\"Run\", \"" .. getCreatureName(cid) .. "\", \"" .. getItemNameById(configRunEvent.rewards[prize]) .. "\", " .. getStorage(configRunEvent.storages.countEvent) ..");")

                    doSetStorage(configRunEvent.storages.countEvent, getStorage(configRunEvent.storages.countEvent) + 1)

                    for _, pid in ipairs(getPlayersOnline()) do
                        if getCreatureStorage(pid, configRunEvent.storages.player) > 0 then
                            doCreatureSetStorage(pid, configRunEvent.storages.player, -1)
                          
                            doPlayerSetGroupId(pid, math.max(1, getCreatureStorage(pid, configRunEvent.storages.group)))
                            doChangeSpeed(pid, getCreatureBaseSpeed(pid) - configRunEvent.players.speed)
                            doTeleportThing(pid, getTownTemplePosition(getPlayerTown(pid)), true)
                            doPlayerSendTextMessage(pid, MESSAGE_EVENT_ADVANCE, 'You loss.')
                        end
                    end
                end
                return true
            end
        ]]>
    </movement>

    <globalevent name="Run_Event_Days" interval="1000" event="script">
        <![CDATA[
            domodlib("config_run_event")
            domodlib("lib_run_event")

            local daysOpen = {}
            for k, v in pairs(configRunEvent.days) do
                table.insert(daysOpen, k)
            end

            function onThink(interval)
                if isInArray(daysOpen, os.date("%A")) then
                    if isInArray(configRunEvent.days[os.date("%A")], os.date("%X", os.time())) then
                        if getStorage(configRunEvent.storages.joining) ~= 1 then
                            doSetStorage(configRunEvent.storages.joining, 1)
                            addEvent(doStartEventRun, configRunEvent.delayTime * 60 * 1000)
                            doStartCountingRunEvent(0)

                            for _, pid in ipairs(getPlayersOnline()) do
                                if getCreatureStorage(pid, configRunEvent.storages.player) > 0 then
                                    doCreatureSetStorage(pid, configRunEvent.storages.player, -1)

                                    doPlayerSetGroupId(pid, math.max(1, getCreatureStorage(pid, configRunEvent.storages.group)))
                                    doChangeSpeed(pid, getCreatureBaseSpeed(pid) - configRunEvent.players.speed)
                                    doTeleportThing(pid, getTownTemplePosition(getPlayerTown(pid)), true)
                                end
                            end
                        end
                    end
                end
                return true
            end
        ]]>
    </globalevent>

    <event type="login" name="Run_Event_Login" event="script">
        <![CDATA[
            domodlib("config_run_event")

            function onLogin(cid)
                if getCreatureStorage(cid, configRunEvent.storages.player) > 0 then
                    doCreatureSetStorage(cid, configRunEvent.storages.player, -1)
                    doPlayerSetGroupId(cid, math.max(1, getCreatureStorage(cid, configRunEvent.storages.group)))
                    doCreatureSetNoMove(cid, false)
                    doRemoveCondition(cid, CONDITION_INFIGHT)
                    doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), true)
                end
                return true
            end
        ]]>
    </event>
  
    <globalevent name="Run_Event_Start" type="startup" event="script">
        <![CDATA[
            domodlib("config_run_event")

            function onStartup()
                doSetStorage(configRunEvent.storages.joining, -1)
                return true
            end
        ]]>
    </globalevent>
</mod>
 
Try to use this:
Remove:
Code:
doPlayerSetGroupId(cid, math.max(1, getCreatureStorage(cid, configRunEvent.storages.group)))

Add
Code:
                            local value = getCreatureStorage(cid, configRunEvent.storages.group)
                            if(not tonumber(value)) then
                                value = 0
                            end
                            doPlayerSetGroupId(cid, math.max(1, value))
 
Try to use this:
Remove:
Code:
doPlayerSetGroupId(cid, math.max(1, getCreatureStorage(cid, configRunEvent.storages.group)))

Add
Code:
                            local value = getCreatureStorage(cid, configRunEvent.storages.group)
                            if(not tonumber(value)) then
                                value = 0
                            end
                            doPlayerSetGroupId(cid, math.max(1, value))

There is 2 parts of script that contains
doPlayerSetGroupId(cid, math.max(1, getCreatureStorage(cid, configRunEvent.storages.group)))

Wich one should i erase? And more, i can add the other script (local value...) in any place of script?
 
Dammit, is an automatic event and idk how to make him start to test te script...

maybe should i change this part?

Code:
                days = {
                    ['Monday'] = {'16:00:00'},
                    ['Tuesday'] = {'16:00:00'},
                    ['Wednesday'] = {'16:00:00'},
                    ['Thursday'] = {'16:00:00'},
                    ['Friday'] = {'16:00:00'},
                    ['Saturday'] = {'16:00:00'},
                    ['Sunday'] = {'16:00:00'}
                },

But i am from brazil, and dont know wich time should i put LOL :confused::confused::mad:
 
Im getting this instead:
[Warning - Groups::getGroup] Group 7 not found.

Found this: doPlayerSetGroupId(cid, 7) -- grupa = Group

Changed it to 1. Lets see what happens.

[EDIT] No errors after I changed that 7 to 1. :)
 
Im getting this instead:
[Warning - Groups::getGroup] Group 7 not found.

Found this: doPlayerSetGroupId(cid, 7) -- grupa = Group

Changed it to 1. Lets see what happens.

[EDIT] No errors after I changed that 7 to 1. :)

Remove the line entirely:
Code:
doPlayerSetGroupId(cid, math.max(1, getCreatureStorage(cid, configRunEvent.storages.group)))

Its only purpose is to turn a PLAYER into a GM or a GOD and vice-versa.
It should not be present in the code in any way shape or form.

When its set to 1 (As per your post above) its not doing anything; because players are groupId 1 by default.
 
Remove the line entirely:
Code:
doPlayerSetGroupId(cid, math.max(1, getCreatureStorage(cid, configRunEvent.storages.group)))

Its only purpose is to turn a PLAYER into a GM or a GOD and vice-versa.
It should not be present in the code in any way shape or form.

When its set to 1 (As per your post above) its not doing anything; because players are groupId 1 by default.

Okey. But then it wont bug out and make somone a gm atleast? :)
 
Back
Top Bottom