• 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!
  • 2026 staff recruitment is open! Check it out and consider applying!

Lua Last man standing - error

Brooke

Member
Joined
Mar 7, 2011
Messages
70
Reaction score
8
I get this error in my console, tfs 0.3.6 warsystem. linux

Code:
[Error - GlobalEvent Interface]
data/globalevents/scripts/lastman.lua:onThink
Description:
(luaDoCreateMonster) Monster with name '' not found

[Error - GlobalEvent Interface]
data/globalevents/scripts/lastman.lua:onThink
Description:
(luaDoCreatureSetDropLoot) Creature not found

This is my lastman.lua

Code:
local t = {
    tmp = {
        {x = 878, y = 996, z = 7}, -- northwest corner of area where players must stand in order to join the event
        {x = 881, y = 999, z = 7} -- south east corner
    },
    arena = {
        {x = 870, y = 978, z = 7}, -- nw corner of arena
        {x = 888, y = 994, z = 7}, -- se corner of arena
        {x = 879, y = 986, z = 7} -- center of arena
    },

    from = {x = 870, y = 978, z = 7}, -- top left cornor of the playground (random players teleportation)
    to = {x = 888, y = 994, z = 7}, -- bottom right cornor of the playground (random players teleportation)

    minPlayers = 2, -- min players required to start the battle
    noPlayers = 1, -- no players
    prize = {10141, 10140, 10137, 11261} -- rewards
}
local kick = 0
local starting= {x = 867, y = 975, z = 7}
local ending= {x = 891, y = 995, z = 7}

function CheckMonster(PosLeft, PosRight)
    local floor = PosLeft.z
    for x = PosLeft.x, PosRight.x do
        for y = PosLeft.y, PosRight.y do
            local monster = getTopCreature({x=x, y=y, z=floor}).uid
            if monster ~= 0 and isMonster(monster) then
                doRemoveCreature(monster)
            end
        end
    end
    return true
end


local pos = {
    {x=874, y=976, z=7},
    {x=882, y=975, z=7},
    {x=887, y=977, z=7},
    {x=890, y=985, z=7},
    {x=891, y=991, z=7},
    {x=887, y=995, z=7},
    {x=871, y=995, z=7},
    {x=867, y=988, z=7},
    {x=868, y=982, z=7},

    {x=876, y=988, z=7},
    {x=882, y=982, z=7}
}

function Summon()
    local p = pos[math.random(#pos)]
    if doCreateMonster('Battle Mage LMS', p, true, true, true) == RETURNVALUE_NOERROR then
        doSendMagicEffect(p, 10)
    end
end

function DeleteMonsters()
    CheckMonster(starting, ending)
end

local lastSpawn = 0

function onThink()
    local arenaPlayers = {}

    for x = t.arena[1].x, t.arena[2].x do
        for y = t.arena[1].y, t.arena[2].y do
            for z = t.arena[1].z, t.arena[2].z do
                local pos = {x = x, y = y, z = z}
                local n = getTileInfo(pos).creatures
                if n ~= 0 then
                    pos.stackpos = 1
                    local c = getThingfromPos(pos)
                    while c.uid ~= 0 do
                        if c.itemid == 1 and c.type == 1 and getPlayerAccess(c.uid) < 3 then
                            table.insert(arenaPlayers, c.uid)
                            if #arenaPlayers == n then
                                break
                            end
                        end
                        pos.stackpos = pos.stackpos + 1
                        c = getThingfromPos(pos)
                    end
                end
            end
        end
    end


    if #arenaPlayers == 1 then
        doCreatureAddHealth(arenaPlayers[1], -getCreatureHealth(arenaPlayers[1]))
        doPlayerSendTextMessage(arenaPlayers[1], MESSAGE_STATUS_CONSOLE_BLUE, "You won a battle and received your reward.")
        doBroadcastMessage(getCreatureName(arenaPlayers[1]) .." won a Last Man Standing battle.", MESSAGE_INFO_DESCR)
        doPlayerAddItem(arenaPlayers[1], t.prize[math.random(#t.prize)], 1)
        DeleteMonsters()
        kick = 0
    elseif (#arenaPlayers >= 2 and #arenaPlayers <= 4) then
        if lastSpawn == 0 then
            lastSpawn = os.clock()
        else
            local max = 50
            lastSpawn = 0
            if os.clock() - lastSpawn >= 3 then
                local total, arch = 0, 0
                for x = starting.x, ending.x do
                    for y = starting.x, ending.y do
                        local monster = getTopCreature({x=x, y=y, z=7}).uid
                        if monster ~= 0 and isMonster(monster) then
                            local name = getCreatureName(monster)
                            if name == 'Battle Mage' then
                                total = total + 1
                            elseif name == 'archangel' then
                                arch = arch + 1
                            end
                            --if total == max then
                            --    return true
                            --end
                        end
                    end
                end
                if total < max then
                    --for i = 1, max - total - #arenaPlayers do
                        Summon()
                    --end
                end
                if arch == 0 and #arenaPlayers == 2 then
                    local m = doCreateMonster('archangel', {x=879, y=986, z=7}, true, false, false)
                    if m == true then
                        m = doCreateMonster('archangel', {x=879, y=986, z=7}, true, true, false)
                    end
                    doCreatureSetDropLoot(m, false)
                end
            end
        end
    --[[elseif (#arenaPlayers >= 2 and #arenaPlayers < 5) then
        if kick == 0 then
            kick = os.time()
        else
            if os.time() - kick >= 120 then
                kick = 0
                for i = 1, #arenaPlayers do
                    doCreatureAddHealth(arenaPlayers[i], -getCreatureHealth(arenaPlayers[i]))
                    doPlayerSendTextMessage(arenaPlayers[i], MESSAGE_STATUS_WARNING, "Too even, try harder next time.")
                end
            end
        end]]
    elseif #arenaPlayers == 0 then
        kick = 0
        local players = {}
        for x = t.tmp[1].x, t.tmp[2].x do
            for y = t.tmp[1].y, t.tmp[2].y do
                for z = t.tmp[1].z, t.tmp[2].z do
                    local c = getTopCreature({x = x, y = y, z = z})
                    if c.type == 1 then
                        table.insert(players, c.uid)
                    end
                end
            end
        end

        if #players >= t.minPlayers then
            for i = 1, #players do
                local p = {x = math.random(t.from.x, t.to.x), y = math.random(t.from.y, t.to.y), z = math.random(t.from.z, t.to.z)}
                while hasItemProperty(getThingfromPos(p).uid, CONST_PROP_BLOCKSOLID) do
                    p = {x = math.random(t.from.x, t.to.x), y = math.random(t.from.y, t.to.y), z = math.random(t.from.z, t.to.z)}
                end
                doTeleportThing(players[i], p)
                doSendMagicEffect(p, CONST_ME_TELEPORT)
                doPlayerSendTextMessage(players[i], MESSAGE_EVENT_ADVANCE, "The battle begins. Survive for glory!")
            end
        --[[else
            for i = 1, #players do
                doTeleportThing(players[i], {x=32369, y=32240, z=7})
                doPlayerSendTextMessage(players[i], MESSAGE_STATUS_WARNING, "The event didn't start because there isn't enough players in area!")
            end]]
        end
    end
    for _, cid in ipairs(getPlayersOnline()) do
        local o = getCreatureOutfit(cid)
        if o.lookType == 0 and o.lookTypeEx == 0 then
            o.lookType = getPlayerSex(cid) == 0 and 136 or 128
            doCreatureChangeOutfit(cid, o)
        end
    end
    --[[local p = getPlayerByName('Acer')
    local p2 = getPlayerByName('Pancake')
    if p and p2 then
        p = getThingPos(p)
        p2 = getThingPos(p2)
        if getDistanceBetween(p, p2) < 10 then
            doSendDistanceShoot(p, p2, CONST_ANI_CAKE)
            doSendMagicEffect(p2, CONST_ME_CAKE)
            for _, v in ipairs(getArea(p2, 1, 1)) do
                if table.find({0,1,2,3}, getDirectionTo(p2, v)) then
                    doSendDistanceShoot(p, v, CONST_ANI_CAKE)
                    doSendMagicEffect(v, CONST_ME_CAKE)
                end
            end
        end
        
    end]]
    --doCreateMonster('Bog Raider Private', {x=1045, y=904, z=7}, false, false)
    --doCreateMonster('Bog Raider Private', {x=1047, y=904, z=7}, false, false)
    return true
end

Monsters.xml

Code:
    <monster name="Battle Mage" file="Custom/battle mage.xml"/>
    <monster name="Battle Mage LMS" file="Custom/battle mage lms.xml"/>

battle mage lms.xml - first row

Code:
<monster name="Battle Mage LMS" nameDescription="a battle mage" race="fire" experience="5000" speed="756" manacost="0">

battle mage.xml -first row

Code:
<monster name="Battle Mage" nameDescription="a battle mage" race="fire" experience="40000" speed="756" manacost="0">

@Ninja
@Printer
 
Last edited:
Can you even summon the monster? if you do /m
Battle Mage and Battle Mage LMS
 
Yea I can summon them.

-8Ia.png
 
Back
Top