RevScript Dungeon System

Alex

Miembro del equipo
Webdesigner
LV
58
 
Awards
38
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:

Código:
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,

Código:
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

Código:
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

Código:
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.

Código:
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:

Código:
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:

Código:
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:
Código:
player:sendTextMessage(MESSAGE_STATUS_DEFAULT, "Welcome to " .. SERVER_NAME .. " Server.!")
insertaremos:
Código:
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.
 
Última edición:
Arriba