RevScript Dungeon System

Alex

Administrator
Dev
Messages
2,368
Points
707
Hola a todos,

Aqui les traigo el sistema dicho 'dungeon', este sistema principalmente se basa en crear un accesso en un lugar, que podria ya ser como una isla , con varias palancas e volver esto en un sistema diario, es decir, dar accesso cada X horas a esos dungeons que al crear un monstruo determinado, apareceria un teleport, y pasaria al siguiente boss o sala, hasta llegar al proximo boss y este también daria loot y un teleport, hasta que ustedes decidan de poner X bosses y terminar la dungeon, en el ultimo boss obviamente le pondrian la posicion de retorno en la sala de palancas. El script utilizado y modificado es el del boss Duke Krule.

Vamos alla,

Primeramente, crearemos en el remeres map editor, una palanca, con X casillas de accesso, dependiendo la dificultad, ponen 1 para un jugador hasta las X que quieran, 10 si quieren.

En esa palanca, que sera la ID 1945 sin activar y 1946 una vez activada, le daremos una UniqueID ( inscrita en la palcan UID en remeres map editor ) en el ejemplo 41383.
El script funcionara con un storage cooldown que permitira calcular el tiempo antes de que uno pueda a volver a entrar, si deseais crear varios deberieis cambiar el storage cada vez, incrementandolo de 1 bastara.
Incluye nivel minimo para entrar y la cantidad minima de players, en el ejemplo pusimos 1, para dar accesso a 1 Player solo o bien 4 ( si haceis una de accesso a 4 players y quereis que 1 player la pueda hacer solo en este caso dejar el numero en 1 en min players ).

En el ejemplo decidimos crear nuevos monstruos ( con sprites ya existentes, y llamarlo First Dungeon ).
Spider King, Abyssal Hydra y Purple Dragon.

Iremos en data/scripts/creaturescripts y crearemos una carpeta llama ' Dungeon '.
Le pondremos este archivo dentro:

Code:
local config = {
    cooldown = 60 * 60 * 24, -- in seconds - (Make it 'seconds * minutes * hours' - its will be '60 * 60 * 20' for 20 hours) (player cooldown)
    cooldown_storage = 811307,
    duration = 30, -- time till reset, in minutes (lever cooldown)
    level_req = 100, -- minimum level to do quest
    min_players = 1, -- minimum players to join quest
    lever_id = 1945, -- id of lever before pulled
    pulled_id = 1946, -- id of lever after pulled
}

local player_positions = {
    [1] = {fromPos = Position(34445, 32263, 6), toPos = Position(34660, 32025, 7)}
}

local monsters = {
    [1] = {pos = Position(34666, 32021, 11), name = "Spider King"},
    [2] = {pos = Position(34709, 32022, 11), name = "Abyssal Hydra"},
    [3] = {pos = Position(34750, 32023, 11), name = "Purple Dragon"}
}
local quest_range = {fromPos = Position(34642, 32016, 11), toPos = Position(34752, 32029, 11)}

local exit_position = Position(34449, 32258, 6) -- Position completely outside the quest area

local firstDungeon = Action()

function doResetTheBossDukeKrule(position, cid_array)

    local tile = Tile(position)

    local item = tile and tile:getItemById(config.pulled_id)
    if not item then
        return
    end

    local monster_names = {}
    for key, value in pairs(monsters) do
        if not isInArray(monster_names, value.name) then
            monster_names[#monster_names + 1] = value.name
        end
    end

    for i = 1, #monsters do
        local creatures = Tile(monsters[i].pos):getCreatures()
        for key, creature in pairs(creatures) do
            if isInArray(monster_names, creature:getName()) then
                creature:remove()
            end
        end
    end

    for i = 1, #player_positions do
        local creatures = Tile(player_positions[i].toPos):getCreatures()
        for key, creature in pairs(creatures) do
            if isInArray(monster_names, creature:getName()) then
                creature:remove()
            end
        end
    end

    for key, cid in pairs(cid_array) do
        local participant = Player(cid)
    if participant and isInRange(participant:getPosition(), quest_range.fromPos, quest_range.toPos) then
            participant:teleportTo(exit_position)
            exit_position:sendMagicEffect(CONST_ME_TELEPORT)
        end
    end

    item:transform(config.lever_id)
end

local function removeBoss()
local specs, spec = Game.getSpectators(Position(33919, 31646, 8), false, false, 18, 18, 18, 18)
    for j = 1, #specs do
        spec = specs[j]
        if spec:getName():lower() == 'Goshnar Hatred' then
            spec:remove()
        end
    end
end

function firstDungeon.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if player:getStorageValue(config.cooldown_storage) >= os.time() then
        player:sendTextMessage(MESSAGE_INFO_DESCR, "Try Again in 24 Hours.")
        return true
    end


    local participants, pull_player = {}, false
    for i = 1, #player_positions do
        local fromPos = player_positions[i].fromPos
        local tile = Tile(fromPos)
        if not tile then
            print(">> ERROR: First Dungeon tile does not exist for Position(" .. fromPos.x .. ", " .. fromPos.y .. ", " .. fromPos.z .. ").")
            return player:sendCancelMessage("There is an issue with this quest. Please contact an administrator.")
        end

        local creature = tile:getBottomCreature()
        if creature then
            local participant = creature:getPlayer()
            if not participant then
                return player:sendCancelMessage(participant:getName() .. " is not a valid participant.")
            end

            if participant:getLevel() < config.level_req then
                return player:sendCancelMessage(participant:getName() .. " is not the required level.")
            end

            if participant.uid == player.uid then
                pull_player = true
            end

            participants[#participants + 1] = {participant = participant, toPos = player_positions[i].toPos}
        end
    end

    if #participants < config.min_players then
        return player:sendCancelMessage("You do not have the required amount of participants.")
    end

    if not pull_player then
        return player:sendCancelMessage("You are in the wrong position.")
    end

    for i = 1, #monsters do
        local toPos = monsters[i].pos
        if not Tile(toPos) then
            print(">> ERROR: First Dungeon tile does not exist for Position(" .. toPos.x .. ", " .. toPos.y .. ", " .. toPos.z .. ").")
            return player:sendCancelMessage("There is an issue with this quest. Please contact an administrator.")
        end
        removeBoss()
        Game.createMonster(monsters[i].name, monsters[i].pos, false, true)
    end

    local cid_array = {}
    for i = 1, #participants do
        participants[i].participant:teleportTo(participants[i].toPos)
        participants[i].toPos:sendMagicEffect(CONST_ME_TELEPORT)
        cid_array[#cid_array + 1] = participants[i].participant.uid
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have 60 minutes to kill and loot all bosses. Otherwise you will lose that chance and will be kicked out.")
    end

    item:transform(config.pulled_id)
    player:setStorageValue(config.cooldown_storage, os.time() + config.cooldown)
    addEvent(doResetTheBossDukeKrule, config.duration * 60 * 60000,  toPosition, cid_array)
    return true
end

firstDungeon:uid(41383)
firstDungeon:register()

Aqui tendremos los 3 Scripts de monstruos, que pondreis dentro de la carpeta dungeons directamente,
Tengan en cuenta de cambiarle el loot,

Code:
local mType = Game.createMonsterType("Abyssal Hydra")
local monster = {}

monster.description = "Abyssal Hydra"
monster.experience = 24000
monster.outfit = {
    lookType = 121,
    lookHead = 0,
    lookBody = 0,
    lookLegs = 0,
    lookFeet = 0,
    lookAddons = 0,
    lookMount = 0
}

monster.health = 6000
monster.maxHealth = 6000
monster.race = "blood"
monster.corpse = 6048
monster.speed = 260
monster.manaCost = 0
monster.maxSummons = 0

monster.changeTarget = {
    interval = 5000,
    chance = 8
}

monster.strategiesTarget = {
    nearest = 70,
    health = 10,
    damage = 10,
    random = 10,
}

monster.flags = {
    summonable = false,
    attackable = true,
    hostile = true,
    convinceable = false,
    pushable = false,
    rewardBoss = false,
    illusionable = false,
    canPushItems = true,
    canPushCreatures = true,
    staticAttackChance = 90,
    targetDistance = 1,
    runHealth = 300,
    healthHidden = false,
    isBlockable = false,
    canWalkOnEnergy = false,
    canWalkOnFire = false,
    canWalkOnPoison = false,
    pet = false
}

monster.light = {
    level = 0,
    color = 0
}

monster.voices = {
    interval = 5000,
    chance = 10,
}

monster.loot = {
    {id = 2197, chance = 90000, charges= 5},
    {id = 7589, chance = 83000, maxCount = 5},
    {id = 10219, chance = 80000, charges = 5},
    {id = 2475, chance = 79000},
    {id = 2146, chance = 77000, maxCount = 5},
    {id = 9971, chance = 60000, maxCount = 3},
    {id = 2536, chance = 53000},
    {id = 10523, chance = 37000},
    {id = 2498, chance = 20000},
    {id = 2476, chance = 10000}
}

monster.attacks = {
    {name ="melee", interval = 2000, chance = 100, minDamage = 0, maxDamage = -270},
    {name ="combat", interval = 2000, chance = 10, type = COMBAT_EARTHDAMAGE, minDamage = -65, maxDamage = -320, length = 8, spread = 3, effect = CONST_ME_CARNIPHILA, target = false},
    {name ="speed", interval = 2000, chance = 25, speedChange = -300, range = 7, radius = 4, shootEffect = CONST_ANI_POISON, effect = CONST_ME_GREEN_RINGS, target = true, duration = 15000},
    {name ="combat", interval = 2000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -100, maxDamage = -250, length = 8, spread = 3, effect = CONST_ME_LOSEENERGY, target = false},
    {name ="combat", interval = 2000, chance = 10, type = COMBAT_ICEDAMAGE, minDamage = -70, maxDamage = -355, range = 7, shootEffect = CONST_ANI_ICE, effect = CONST_ME_ICEATTACK, target = false}
}

monster.defenses = {
    defense = 35,
    armor = 35,
    {name ="combat", interval = 2000, chance = 20, type = COMBAT_HEALING, minDamage = 260, maxDamage = 407, effect = CONST_ME_MAGIC_BLUE, target = false}
}

monster.elements = {
    {type = COMBAT_PHYSICALDAMAGE, percent = 0},
    {type = COMBAT_ENERGYDAMAGE, percent = -10},
    {type = COMBAT_EARTHDAMAGE, percent = 100},
    {type = COMBAT_FIREDAMAGE, percent = 0},
    {type = COMBAT_LIFEDRAIN, percent = 100},
    {type = COMBAT_MANADRAIN, percent = 0},
    {type = COMBAT_DROWNDAMAGE, percent = 0},
    {type = COMBAT_ICEDAMAGE, percent = 0},
    {type = COMBAT_HOLYDAMAGE , percent = 30},
    {type = COMBAT_DEATHDAMAGE , percent = 0}
}

monster.immunities = {
    {type = "paralyze", condition = true},
    {type = "outfit", condition = false},
    {type = "invisible", condition = true},
    {type = "bleed", condition = false}
}

mType:register(monster)

Spider King

Code:
local mType = Game.createMonsterType("Spider King")
local monster = {}

monster.description = "Spider King"
monster.experience = 24200
monster.outfit = {
    lookType = 208,
    lookHead = 0,
    lookBody = 0,
    lookLegs = 0,
    lookFeet = 0,
    lookAddons = 0,
    lookMount = 0
}

monster.health = 6000
monster.maxHealth = 6000
monster.race = "blood"
monster.corpse = 5977
monster.speed = 240
monster.manaCost = 0
monster.maxSummons = 4

monster.changeTarget = {
    interval = 5000,
    chance = 8
}

monster.strategiesTarget = {
    nearest = 70,
    health = 20,
    random = 10,
}

monster.flags = {
    summonable = false,
    attackable = true,
    hostile = true,
    convinceable = false,
    pushable = false,
    rewardBoss = false,
    illusionable = false,
    canPushItems = true,
    canPushCreatures = true,
    staticAttackChance = 90,
    targetDistance = 1,
    runHealth = 0,
    healthHidden = false,
    isBlockable = false,
    canWalkOnEnergy = false,
    canWalkOnFire = false,
    canWalkOnPoison = false,
    pet = false
}

monster.light = {
    level = 0,
    color = 0
}

monster.summons = {
    {name = "giant spider", chance = 13, interval = 1000, max = 2}
}

monster.voices = {
    interval = 5000,
    chance = 10,
}

monster.loot = {
    {id = 2148, chance = 100000, maxCount = 99},
    {id = 2152, chance = 100000, maxCount = 10},
    {id = 5879, chance = 100000},
    {id = 2457, chance = 100000},
    {id = 7591, chance = 100000, maxCount = 4},
    {id = 2476, chance = 50000},
    {id = 2165, chance = 33333},
    {id = 2167, chance = 33333},
    {id = 2169, chance = 33333},
    {id = 13307, chance = 33333},
    {id = 2477, chance = 25000},
    {id = 2171, chance = 25000},
    {id = 5886, chance = 25000},
    {id = 7416, chance = 3225},
    {id = 7419, chance = 1639}
}

monster.attacks = {
    {name ="melee", interval = 2000, chance = 100, minDamage = -100, maxDamage = -500},
    {name ="combat", interval = 1000, chance = 15, type = COMBAT_EARTHDAMAGE, minDamage = -250, maxDamage = -300, range = 7, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = false},
    {name ="speed", interval = 1000, chance = 20, speedChange = -850, range = 7, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA, target = false, duration = 25000},
    {name ="poisonfield", interval = 1000, chance = 30, range = 7, radius = 4, shootEffect = CONST_ANI_POISON, target = true}
}

monster.defenses = {
    defense = 45,
    armor = 35,
    {name ="combat", interval = 1000, chance = 17, type = COMBAT_HEALING, minDamage = 225, maxDamage = 275, effect = CONST_ME_MAGIC_BLUE, target = false},
    {name ="speed", interval = 1000, chance = 8, speedChange = 345, effect = CONST_ME_MAGIC_RED, target = false, duration = 6000}
}

monster.elements = {
    {type = COMBAT_PHYSICALDAMAGE, percent = 0},
    {type = COMBAT_ENERGYDAMAGE, percent = 0},
    {type = COMBAT_EARTHDAMAGE, percent = 100},
    {type = COMBAT_FIREDAMAGE, percent = 100},
    {type = COMBAT_LIFEDRAIN, percent = 100},
    {type = COMBAT_MANADRAIN, percent = 0},
    {type = COMBAT_DROWNDAMAGE, percent = 0},
    {type = COMBAT_ICEDAMAGE, percent = 0},
    {type = COMBAT_HOLYDAMAGE , percent = 0},
    {type = COMBAT_DEATHDAMAGE , percent = 0}
}

monster.immunities = {
    {type = "paralyze", condition = false},
    {type = "outfit", condition = false},
    {type = "invisible", condition = true},
    {type = "bleed", condition = false}
}

mType:register(monster)

Purple Dragon

Code:
local mType = Game.createMonsterType("Purple Dragon")
local monster = {}

monster.description = "Purple Dragon"
monster.experience = 25600
monster.outfit = {
    lookType = 351,
    lookHead = 0,
    lookBody = 0,
    lookLegs = 0,
    lookFeet = 0,
    lookAddons = 0,
    lookMount = 0
}

monster.health = 10000
monster.maxHealth = 10000
monster.race = "undead"
monster.corpse = 11362
monster.speed = 320
monster.manaCost = 0
monster.maxSummons = 0

monster.changeTarget = {
    interval = 4000,
    chance = 5
}

monster.strategiesTarget = {
    nearest = 70,
    health = 10,
    damage = 10,
    random = 10,
}

monster.flags = {
    summonable = false,
    attackable = true,
    hostile = true,
    convinceable = false,
    pushable = false,
    rewardBoss = false,
    illusionable = false,
    canPushItems = true,
    canPushCreatures = true,
    staticAttackChance = 70,
    targetDistance = 1,
    runHealth = 366,
    healthHidden = false,
    isBlockable = false,
    canWalkOnEnergy = false,
    canWalkOnFire = false,
    canWalkOnPoison = false,
    pet = false
}

monster.light = {
    level = 0,
    color = 0
}

monster.voices = {
    interval = 5000,
    chance = 10,
    {text = "EMBRACE MY GIFTS!", yell = true}
}

monster.loot = {
    {id = 11366, chance = 100000},
    {id = 2148, chance = 100000, maxCount = 230},
    {id = 2152, chance = 100000, maxCount = 15},
    {id = 11367, chance = 100000},
    {id = 6500, chance = 97000},
    {id = 7632, chance = 45000},
    {id = 7633, chance = 45000},
    {id = 9970, chance = 97000, maxCount = 10},
    {id = 11323, chance = 76000},
    {id = 8473, chance = 60000},
    {id = 11227, chance = 45000},
    {id = 11368, chance = 37000},
    {name ="diamond", chance = 5000, maxCount = 2},
    {id = 7591, chance = 34000, maxCount = 3},
    {id = 11303, chance = 30000},
    {id = 7590, chance = 26000, maxCount = 3},
    {id = 8472, chance = 26000, maxCount = 3},
    {id = 11355, chance = 21000},
    {id = 11304, chance = 15000},
    {id = 11301, chance = 13000},
    {id = 11302, chance = 13000},
    {id = 11306, chance = 10000},
    {id = 11305, chance = 8700},
    {id = 13938, chance = 2170}
}

monster.attacks = {
    {name ="melee", interval = 2000, chance = 100, skill = 80, attack = 100},
    {name ="combat", interval = 2000, chance = 15, type = COMBAT_LIFEDRAIN, minDamage = -80, maxDamage = -230, range = 7, effect = CONST_ME_MAGIC_RED, target = true},
    {name ="ghastly dragon curse", interval = 2000, chance = 10, range = 7, target = false},
    -- poison
    {name ="condition", type = CONDITION_POISON, interval = 2000, chance = 15, minDamage = -920, maxDamage = -1260, range = 7, shootEffect = CONST_ANI_DEATH, effect = CONST_ME_SMALLCLOUDS, target = false},
    {name ="combat", interval = 2000, chance = 20, type = COMBAT_LIFEDRAIN, minDamage = -190, maxDamage = -350, range = 7, effect = CONST_ME_MAGIC_RED, target = true},
    {name ="combat", interval = 2000, chance = 13, type = COMBAT_DEATHDAMAGE, minDamage = -170, maxDamage = -280, radius = 4, effect = CONST_ME_MORTAREA, target = false}
}

monster.defenses = {
    defense = 35,
    armor = 45,
    {name ="combat", interval = 2000, chance = 9, type = COMBAT_HEALING, minDamage = 70, maxDamage = 300, effect = CONST_ME_MAGIC_GREEN, target = false}
}

monster.elements = {
    {type = COMBAT_PHYSICALDAMAGE, percent = -10},
    {type = COMBAT_ENERGYDAMAGE, percent = -10},
    {type = COMBAT_EARTHDAMAGE, percent = 100},
    {type = COMBAT_FIREDAMAGE, percent = 10},
    {type = COMBAT_LIFEDRAIN, percent = 0},
    {type = COMBAT_MANADRAIN, percent = 0},
    {type = COMBAT_DROWNDAMAGE, percent = 0},
    {type = COMBAT_ICEDAMAGE, percent = 50},
    {type = COMBAT_HOLYDAMAGE , percent = -15},
    {type = COMBAT_DEATHDAMAGE , percent = 100}
}

monster.immunities = {
    {type = "paralyze", condition = true},
    {type = "outfit", condition = false},
    {type = "invisible", condition = true},
    {type = "bleed", condition = false}
}

mType:register(monster)

Bien , ahora tenemos el accesso al dungeon y 3 monstruos, ahora hace falta crear a cada muerte de boss un Teleport, entonces anadiremos el script correspondiente a cada boss:

Crearemos 3 Scripts dentro de la misma carpeta dungeons, con cada uno creacion de teleport para otro sitio al matar el boss inscrito dentro del script;

Al matar la Abyssal Hydra:
Encontrareis abajo, el local teleportSpawn = Position (34709, 32022, 11 ) Sera la posicion en donde aparecera el Teleport despues de matar el boss,
Y luego el local teleportTo = Position (34727, 32023, 11) Que sera la posicion donde nos teleportara el teleport.

Code:
local fsecondMonsterDungeon = CreatureEvent("fsecondMonsterDungeon")
local enemyNames = {
    [1] = "Abyssal Hydra"
}

local function removeTeleport(position)
    local spawnedTeleport = Tile(position):getItemById(17868)
    if spawnedTeleport then
        spawnedTeleport:remove()
        position:sendMagicEffect(CONST_ME_POFF)
    end
 
    return true
end

local function formatString(s)
    s = string.gsub(s, "[%d%p%c%s]", "")
    s = s:lower()
 
    return s
end

function fsecondMonsterDungeon.onKill(creature, target)
    if not target or not target:isMonster() then
        return true
    end
 
    local f = false
    local t = formatString(target:getName())
    for _, v in ipairs(enemyNames) do
        if t == formatString(v) then
            f = true
        end
    end
 
    if not f then
        return true
    end

    local teleportSpawn = Position(34709, 32022, 11) -- Position for teleport to spawn
    removeTeleport(teleportSpawn)
    teleportSpawn:sendMagicEffect(CONST_ME_TELEPORT)
 
    local item = Game.createItem(17868, 1, teleportSpawn)
    if item:isTeleport() then
        local teleportTo = Position(34727, 32023, 11) -- Teleport destination
        item:setDestination(teleportTo)
    end

    target:say('Take the teleport before they disappear!', TALKTYPE_MONSTER_SAY, 0, 0, teleportSpawn)
    addEvent(removeTeleport, 200000, teleportSpawn)
 
    return true
end
fsecondMonsterDungeon:register()

El teleport del Spider King, lo mismo que la hydra:

Code:
local ffirstMonsterDungeon = CreatureEvent("ffirstMonsterDungeon")
local enemyNames = {
    [1] = "Spider King"
}

local function removeTeleport(position)
    local spawnedTeleport = Tile(position):getItemById(17868)
    if spawnedTeleport then
        spawnedTeleport:remove()
        position:sendMagicEffect(CONST_ME_POFF)
    end
 
    return true
end

local function formatString(s)
    s = string.gsub(s, "[%d%p%c%s]", "")
    s = s:lower()
 
    return s
end

function ffirstMonsterDungeon.onKill(creature, target)
    if not target or not target:isMonster() then
        return true
    end
 
    local f = false
    local t = formatString(target:getName())
    for _, v in ipairs(enemyNames) do
        if t == formatString(v) then
            f = true
        end
    end
 
    if not f then
        return true
    end

    local teleportSpawn = Position(34667, 32021, 11) -- Position for teleport to spawn
    removeTeleport(teleportSpawn)
    teleportSpawn:sendMagicEffect(CONST_ME_TELEPORT)
 
    local item = Game.createItem(17868, 1, teleportSpawn)
    if item:isTeleport() then
        local teleportTo = Position(34685, 32022, 11) -- Teleport destination
        item:setDestination(teleportTo)
    end

    target:say('Take the teleport before they disappear!', TALKTYPE_MONSTER_SAY, 0, 0, teleportSpawn)
    addEvent(removeTeleport, 200000, teleportSpawn)
 
    return true
end
ffirstMonsterDungeon:register()

El del purple Dragon:

Code:
local fthirdMonsterDungeon = CreatureEvent("fthirdMonsterDungeon")
local enemyNames = {
    [1] = "Purple Dragon"
}

local function removeTeleport(position)
    local spawnedTeleport = Tile(position):getItemById(17868)
    if spawnedTeleport then
        spawnedTeleport:remove()
        position:sendMagicEffect(CONST_ME_POFF)
    end
 
    return true
end

local function formatString(s)
    s = string.gsub(s, "[%d%p%c%s]", "")
    s = s:lower()
 
    return s
end

function fthirdMonsterDungeon.onKill(creature, target)
    if not target or not target:isMonster() then
        return true
    end
 
    local f = false
    local t = formatString(target:getName())
    for _, v in ipairs(enemyNames) do
        if t == formatString(v) then
            f = true
        end
    end
 
    if not f then
        return true
    end

    local teleportSpawn = Position(34750, 32023, 11) -- Position for teleport to spawn
    removeTeleport(teleportSpawn)
    teleportSpawn:sendMagicEffect(CONST_ME_TELEPORT)
 
    local item = Game.createItem(17868, 1, teleportSpawn)
    if item:isTeleport() then
        local teleportTo = Position(34449, 32258, 6) -- Teleport destination
        item:setDestination(teleportTo)
    end

    target:say('Take the teleport before they disappear!', TALKTYPE_MONSTER_SAY, 0, 0, teleportSpawn)
    addEvent(removeTeleport, 200000, teleportSpawn)
 
    return true
end
fthirdMonsterDungeon:register()

Y finalmente, entraremos en data/scripts/creaturescripts/others/login.lua
Y justo encima de:
Code:
player:sendTextMessage(MESSAGE_STATUS_DEFAULT, "Welcome to " .. SERVER_NAME .. " Server.!")
insertaremos:
Code:
player:registerEvent("ffirstMonsterDungeon")
player:registerEvent("fsecondMonsterDungeon")
player:registerEvent("fthirdMonsterDungeon")
Con esto podreis crear dungeons, es decir crear un mapa estilo quest, monstruos primero con accesso o activaciones con los demas scripts que encontrareis en el foro, por ejemplo 2 casillas dentro obligatorias que tienen que pisar 2 players para acceder a otra puerta, una infinidad de possibilidades y podreis crear algo nuevo que no existe en los demas servidores.
Tomen nota que el equipo esta desarrollando un servidor RL con varias de esas mécanicas para devolver un Servidor Real muy customizado.

Si desean crear mas dungeons, no se olviden cada vez de cambiar los nombres al register, el storage del cooldown y los requisitos.
 
Last edited:
Este sistema funciona a raiz de crear mapas customs y poder hacerlo en compañia de los amigos no? agregarlos en custom map o el normal serviria?
 
Este sistema funciona a raiz de crear mapas customs y poder hacerlo en compañia de los amigos no? agregarlos en custom map o el normal serviria?
Es un dungeon system que se puede hacer en grupo, hay que crear un mapa y poner posiciones y se agrega a una tile para que abra la modal Windows y te lleve para ahí
 

Tibia Server Lists

#1 FEATURED US Ultron OT 1,633 / 5,000Online EXPStages PROTO8.6 ENGINEUltron OT RANK PTS5.9 +100% VOTES0 #2 FEATURED US Nefera 129 / 0Online EXPx1 PROTO15.20 ENGINECrystal Server RANK PTS5.1 +100% VOTES0 #3 FEATURED ES Deixis 0 / 0Offline EXPStages PROTO1098 ENGINETFS RANK PTS3.7 +100% VOTES1 #4 FEATURED ES Maeli 7 / 150Online EXPx10 PROTO10.98 ENGINETFS 1.4.2 RANK PTS3.6 +100% VOTES0 #5 MX Marlboro War 28 / 300Online EXP999 PROTO8.6 ENGINETFS 0.3.7 RANK PTS5.5 -33% VOTES0 #6 BR Tibinha YurOts 23 / 150Online EXPStages PROTO7.4 ENGINEYurOTS 1.5 RANK PTS5.2 -11% VOTES0 #7 US Halera 3 / 0Online EXPStages PROTO10.98 ENGINETFS 1.4.2 RANK PTS4.9 -82% VOTES0 #8 BR Exordion Legacy 54 / 2,000Online EXPx2 PROTO7.72 ENGINEExordion RANK PTS4.9 +100% VOTES0 #9 PL Lubelski 7 / 1,000Online EXP200 PROTO7.6 ENGINELubelskiOTS 2.56.0 RANK PTS4.6 -15% VOTES0 #10 DE DBU Online 0 / 400Online EXP11 PROTO8.6 ENGINETFS 1.0 RANK PTS4.3 +100% VOTES0 #11 PL ReWar 0 / 2,000Online EXPcustom PROTO8.6 ENGINEOther RANK PTS4.3 0% VOTES0 #12 PL Velesta 0 / 1,000Offline EXP20 PROTO8.0 ENGINETFS 1.4.2 RANK PTS4.3 -98% VOTES0 #13 ES JustRL FreeTC 1530 42 / 250Online EXPx2 PROTO15.30 ENGINECrystal Server RANK PTS4.3 +100% VOTES0 #14 ES Farlia Global 2026 0 / 333Offline EXPx5 PROTO15.25 ENGINEFarliaServ 1.525 RANK PTS3.9 -15% VOTES0 #15 SE MortalisOT Custom 0 / 500Offline EXP100x -1.2x PROTO10.98 ENGINEMortalisOT V1 RANK PTS3.7 +100% VOTES0 #16 US Rommania 0 / 500Online EXPstages, x10 PROTO7.4 ENGINETFS 0.4 RANK PTS3.6 +100% VOTES0 #17 US BerethaOnline 0 / 2,000Offline EXPStages PROTO10.98 ENGINETFS RANK PTS3.4 +100% VOTES0
Top