- 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:
Aqui tendremos los 3 Scripts de monstruos, que pondreis dentro de la carpeta dungeons directamente,
Tengan en cuenta de cambiarle el loot,
Spider King
Purple Dragon
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.
El teleport del Spider King, lo mismo que la hydra:
El del purple Dragon:
Y finalmente, entraremos en data/scripts/creaturescripts/others/login.lua
Y justo encima de:
insertaremos:
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.
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.!")
Código:
player:registerEvent("ffirstMonsterDungeon")
player:registerEvent("fsecondMonsterDungeon")
player:registerEvent("fthirdMonsterDungeon")
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: