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

TFS 1.X+ Game.getSpectators -> anihilator script, how it works?

roriscrave

Advanced OT User
Joined
Dec 7, 2011
Messages
1,188
Solutions
34
Reaction score
200
Hi, here is a script of anihilator quest:

Code:
local config = {
    requiredLevel = 100,
    daily = false,
    centerDemonRoomPosition = Position(33221, 31659, 13),
    playerPositions = {
        Position(33225, 31671, 13),
        Position(33224, 31671, 13),
        Position(33223, 31671, 13),
        Position(33222, 31671, 13)
    },
    newPositions = {
        Position(33222, 31659, 13),
        Position(33221, 31659, 13),
        Position(33220, 31659, 13),
        Position(33219, 31659, 13)
    },
    demonPositions = {
        Position(33219, 31657, 13),
        Position(33221, 31657, 13),
        Position(33223, 31659, 13),
        Position(33224, 31659, 13),
        Position(33220, 31661, 13),
        Position(33222, 31661, 13)
    }
}


function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if item.itemid == 1946 then
        local storePlayers, playerTile = {}

        for i = 1, #config.playerPositions do
            playerTile = Tile(config.playerPositions[i]):getTopCreature()
            if not playerTile or not playerTile:isPlayer() then
                player:sendTextMessage(MESSAGE_STATUS_SMALL, "You need 4 players.")
                return true
            end

            if playerTile:getLevel() < config.requiredLevel then
                player:sendTextMessage(MESSAGE_STATUS_SMALL, "All the players need to be level ".. config.requiredLevel .." or higher.")
                return true
            end

            storePlayers[#storePlayers + 1] = playerTile
        end

        local specs, spec = Game.getSpectators(config.centerDemonRoomPosition, false, false, 3, 3, 2, 2)
        for i = 1, #specs do
            spec = specs[i]
            if spec:isPlayer() then
                player:sendTextMessage(MESSAGE_STATUS_SMALL, "A team is already inside the quest room.")
                return true
            end

            spec:remove()
        end

        for i = 1, #config.demonPositions do
            Game.createMonster("Demon", config.demonPositions[i])
        end

        local players
        for i = 1, #storePlayers do
            players = storePlayers[i]
            config.playerPositions[i]:sendMagicEffect(CONST_ME_POFF)
            players:teleportTo(config.newPositions[i])
            config.newPositions[i]:sendMagicEffect(CONST_ME_ENERGYAREA)
            players:setDirection(DIRECTION_EAST)
        end
    elseif item.itemid == 1945 then
        if config.daily then
            player:sendTextMessage(MESSAGE_STATUS_SMALL, Game.getReturnMessage(RETURNVALUE_NOTPOSSIBLE))
            return true
        end
    end

    item:transform(item.itemid == 1946 and 1945 or 1946)
    return true
end

im studing and get some doubt in this part:
Code:
        local specs, spec = Game.getSpectators(config.centerDemonRoomPosition, false, false, 3, 3, 2, 2)
        for i = 1, #specs do
            spec = specs[i]
            if spec:isPlayer() then
                player:sendTextMessage(MESSAGE_STATUS_SMALL, "A team is already inside the quest room.")
                return true
            end

            spec:remove()
        end

I certainly noticed that he checks to see if anyone's doing the quest...
but could anyone explain how it works? what does the values, false, false, 3, 3, 2, 2 mean?
 
another bug... if have one team doing a anihi quest, and another team use the lever, all monsters in anihi are removed, and the team what was doing can make the quest without kill the demons...
Need to correct: the demons only be removed if dont have any team doing the quest...
i think the error is here, can someone help me?
Code:
        local specs, spec = Game.getSpectators(config.centerDemonRoomPosition, false, false, 3, 3, 2, 2)
        for i = 1, #specs do
            spec = specs[i]
            if spec:isPlayer() then
                player:sendTextMessage(MESSAGE_STATUS_SMALL, "A team is already inside the quest room.")
                return true
            end

            spec:remove() --- I THINK THE ERROR IS HERE
        end
 
Back
Top