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

Lever system (To spawn mobs)

Forsaken13126

Scripter
Joined
Feb 4, 2010
Messages
224
Reaction score
3
Location
New York
Im currently using a basic lever system to spawn mobs, but i want something different.. i want it to spawn based on level (Possibly rebirth aswell?)... Check for a character CID (so only if u have the ID u can pull the lever) and spawn in 2 locations. Thanks in advance for any help :) My current script is:
Code:
        local room = {     -- room with demons
        fromX = 1203,
        fromY = 996,
        fromZ = 7,

        toX = 1226,
        toY = 1011,
        toZ = 7
        }

        local monster_pos = {
        [1] = {pos = {1213, 1008, 7}, monster = "hero"},
        [2] = {pos = {1213, 1007, 7}, monster = "hero"},

        }

        local players_pos = {
        {x = 1214, y =994, z = 7, stackpos = 253},
        }

        local new_player_pos = {
        {x = 1214, y =995, z = 7},
        }

        local playersOnly = "no"
        local questLevel = 8

function onUse(cid, item, fromPosition, itemEx, toPosition)
        local all_ready, monsters, player, level = 0, 0, {}, 0
        if item.itemid == 1945 then
                for i = 1, #players_pos do
                        table.insert(player, 0)
                end
                for i = 1, #players_pos do
                        player[i] = getThingfromPos(players_pos[i])
                        if player[i].itemid > 0 then
                                if string.lower(playersOnly) == "yes" then
                                        if isPlayer(player[i].uid) == TRUE then
                                                all_ready = all_ready+1
                                        else
                                                monsters = monsters+1
                                        end
                                else
                                        all_ready = all_ready+1
                                end
                        end
                end
                if all_ready == #players_pos then
                        for i = 1, #players_pos do
                                player[i] = getThingfromPos(players_pos[i])
                                if isPlayer(player[i].uid) == TRUE then
                                        if getPlayerLevel(player[i].uid) >= questLevel then
                                                level = level+1
                                        end
                                else
                                        level = level+1
                                end
                        end
                        if level == #players_pos then
                                if string.lower(playersOnly) == "yes" and monsters == 0 or string.lower(playersOnly) == "no" then
                                        for _, area in pairs(monster_pos) do
                                                        doSummonCreature(area.monster,{x=area.pos[1],y=area.pos[2],z=area.pos[3]})
                                        end
                                        for i = 1, #players_pos do
                                                doSendMagicEffect(players_pos[i], CONST_ME_POFF)
                                                doTeleportThing(player[i].uid, new_player_pos[i], FALSE)
                                                doSendMagicEffect(new_player_pos[i], CONST_ME_ENERGYAREA)
                                                doTransformItem(item.uid,1946)
                                        end
                                else
                                        doPlayerSendTextMessage(cid,19,"Only players can use this spawn.")
                                end
                        else
                                doPlayerSendTextMessage(cid,19,"All Players have to be level "..questLevel.." to do this quest.")
                        end
                else
                        doPlayerSendTextMessage(cid,19,"You need "..table.getn(players_pos).." player to use this spawn.")
                end
        elseif item.itemid == 1946 then
                local player_room = 0
                for x = room.fromX, room.toX do
                        for y = room.fromY, room.toY do
                                for z = room.fromZ, room.toZ do
                                        local pos = {x=x, y=y, z=z,stackpos = 253}
                                        local thing = getThingfromPos(pos)
                                        if thing.itemid > 0 then
                                                if isPlayer(thing.uid) == TRUE then
                                                        player_room = player_room+1
                                                end
                                        end
                                end
                        end
                end
                if player_room >= 1 then
                        doPlayerSendTextMessage(cid,19,"There is already someone in the spawn.")          
                elseif player_room == 0 then
                        for x = room.fromX, room.toX do
                                for y = room.fromY, room.toY do
                                        for z = room.fromZ, room.toZ do
                                                local pos = {x=x, y=y, z=z,stackpos = 253}
                                                local thing = getThingfromPos(pos)
                                                if thing.itemid > 0 then
                                                        doRemoveCreature(thing.uid)
                                                end
                                        end
                                end
                        end
                        doTransformItem(item.uid,1945)
                end
        end
        return TRUE
end
 
Last edited:
I really didn't test this but try this out :)
Code:
        local room = {     -- room with demons
            from = {x = 1203, y = 996, z = 7},
            to = {x = 1226, y = 1011, z = 7}
        }
     
        local SMBOPL = { -- Summon Monster Based Off Player Level
            {name = "rat", level = 1},
            {name = "rotworm", level = 8},
            {name = "cyclops", level = 15},
            {name = "dragon", level = 20},
            {name = "dragon lord", level = 25},
            {name = "hero", level = 50},
            {name = "demon", level = 100}
        }
     
        local monster_pos = {
            {x = 1213, y = 1008, z = 7},
            {x = 1213, y = 1007, z = 7}
        }

        local players_pos = {
            {x = 1214, y =994, z = 7, stackpos = 253}
        }

        local new_player_pos = {
            {x = 1214, y =995, z = 7}
        }

        local playersOnly = "no"
     
        local minLevel = SMBOPL[1].level -- do not edit
        local levelReq = 0 -- do not edit
        local monsterName = '' -- do not edit

    function onUse(cid, item, fromPosition, itemEx, toPosition)
        local all_ready, monsters, player, level = 0, 0, {}, 0
        if item.itemid == 1945 then
            for i = 1, #players_pos do
                table.insert(player, 0)
            end
            for i = 1, #players_pos do
                player[i] = getThingfromPos(players_pos[i])
                if player[i].itemid > 0 then
                    if string.lower(playersOnly) == "yes" then
                        if isPlayer(player[i].uid) == TRUE then
                            all_ready = all_ready + 1
                        else
                            monsters = monsters + 1
                        end
                    else
                        all_ready = all_ready + 1
                    end
                end
            end
            if all_ready == #players_pos then
                for i = 1, #players_pos do
                    player[i] = getThingfromPos(players_pos[i])
                    if isPlayer(player[i].uid) == TRUE then
                        levelReq, monsterName = reqCheck(player[i].uid, SMBOPL, minLevel)
                        if levelReq > minLevel then
                            level = level + 1
                        end
                    else
                        level = level + 1
                    end
                end
                if level == #players_pos and monsterName ~= nil then
                    if string.lower(playersOnly) == "yes" and monsters == 0 or string.lower(playersOnly) == "no" then
                        for m = 1, #monster_pos do
                            doSummonCreature(monsterName, {x = monster_pos[m].x, y = monster_pos[m].y, z = monster_pos[m].z})
                        end
                        for i = 1, #players_pos do
                            doSendMagicEffect(players_pos[i], CONST_ME_POFF)
                            doTeleportThing(player[i].uid, new_player_pos[i], FALSE)
                            doSendMagicEffect(new_player_pos[i], CONST_ME_ENERGYAREA)
                            doTransformItem(item.uid, 1946)
                        end
                    else
                        doPlayerSendTextMessage(cid, 19, "Only players can use this spawn.")
                    end
                else
                    doPlayerSendTextMessage(cid, 19, "All Players have to be minimum level "..minLevel.." to do this quest.")
                end
            else
                doPlayerSendTextMessage(cid, 19, "You need "..table.getn(players_pos).." player to use this spawn.")
            end
        elseif item.itemid == 1946 then
            local player_room = 0
            for x = room.from.x, room.to.x do
                for y = room.from.y, room.to.y do
                    for z = room.from.z, room.to.z do
                        local pos = {x = x, y = y, z = z, stackpos = 253}
                        local thing = getThingfromPos(pos)
                        if thing.itemid > 0 then
                            if isPlayer(thing.uid) == TRUE then
                                player_room = player_room + 1
                            end
                        end
                    end
                end
            end
            if player_room >= 1 then
                doPlayerSendTextMessage(cid, 19, "There is already someone in the spawn.")       
            elseif player_room == 0 then
                for x = room.from.x, room.to.x do
                    for y = room.from.y, room.to.y do
                        for z = room.from.z, room.to.z do
                            local pos = {x = x, y = y, z = z, stackpos = 253}
                            local thing = getThingfromPos(pos)
                            if thing.itemid > 0 then
                                doRemoveCreature(thing.uid)
                            end
                        end
                    end
                end
                doTransformItem(item.uid, 1945)
            end
        end
        return TRUE
    end
 
    function reqCheck(c, table_, minLevel)
        local playerLevel = getPlayerLevel(c)
        -- this is just a check to make sure we meet the minimum level requirements
        if playerLevel < minLevel then
            return playerLevel, nil
        end
        local reqLevel = 0
        local name = nil
        if type(table_) == "table" then
            for k, v in pairs(table_) do
                if v.level > playerLevel then
                    break
                end
                reqLevel = v.level
                name = v.name
            end
        end
        return reqLevel, name
    end
 
Last edited:
Back
Top