Hola zoneros, hoy les vengo a traer la quest de las catacumbas del diablo, 100% probada por mi, esta es la quest de BlackYuko. Cuenta con los portales como el oficial, en un máximo de 99% del oficial.
Quest:
--**
--** Script Catacumbas del Diablo.
--** by BlackYuko Skype: manu___88
--**
quest catacombe begin
state start begin
--**
--** Funciones
--**
function GetScriptData(data)
local map_data = {['map_index'] = 15, -- index del mapa de catacumbas
['x'] = 3072, ['y'] = 12032, -- coordenadas X y Y, las del mapa catacumbas
['drop_frequency'] = 1000, -- frecuencia en los mob para que dropeen la llave cristal del alma
['min_lev'] = 100, -- nivel minimo para entrar a catacumbas,
['close_time'] = 60, -- tiempo (minutos) para estar en catacumbas
['testa_ristretta'] = 30320, -- vnum item de entrada que pide
['chiave_anime_cristallo'] = 30311, -- vnum item llave cistal del alma
['totem_smorfia'] = 30312, -- vnum totem
['forziere_azrael'] = 219, -- vnum drop al matar al azrael
['min_drop_lev'] = 100, -- nivel minimo para dropeo de la llave cristal
['max_drop_lev'] = 210} -- nivel maximo para dropeo de la lalve cristal
return rawget(map_data, data)
end
function IsInDungeon(pc_index)
local map_index = catacombe.GetScriptData('map_index')
return (pc.in_dungeon() and pc_index >= map_index*10000 and pc_index < (map_index+1)*10000)
end
function CanDrop(pc_level)
return (pc_level >= catacombe.GetScriptData('min_drop_lev') and pc_level <= catacombe.GetScriptData('max_drop_lev'))
end
--**
--** NPC - Guardian entrada a catacumbas
--**
when 20351.chat."GM: Catacumbas Abrir" with pc.is_gm() begin
say_title("GM: Catacumbas Abrir")
say("¿Quieres abrir las Catacumbas?[ENTER]")
local s = select("Si","No")
if s == 2 then
return
end
say_title("GM: Abrir Catacumbas")
say("Operación Completada.[ENTER]")
game.set_event_flag("catacomb_next_open", 1)
end
when 20351.chat."Entrada a Catacumbas" begin
local mob_race = npc.get_race()
local min_lev = catacombe.GetScriptData('min_lev')
say_title(mob_name(mob_race))
if pc.get_level() < min_lev then
say("Debes tener el mínimo Nivel "..min_lev)
say("Para entrar.[ENTER]")
return
end
if pc.count_item(catacombe.GetScriptData('testa_ristretta')) == 0 then
say("Tienes que tener este Item para")
say("Entrar:[ENTER]")
say_item_vnum(catacombe.GetScriptData('testa_ristretta'))
return
end
if get_time() < game.get_event_flag("catacomb_next_open") then
say("Las Catacumbas están cerradas.[ENTER]")
return
end
say("Hola aventurero. Las catacumbas del diablo")
say("son un lugar muy peligroso.[ENTER]")
local s = select("Entrar","No Entrar")
if s == 2 then
return
end
say_title(mob_name(mob_race))
say("Ok Viajero, ahora será telestrasportado.")
say("Preste mucha atención.[ENTER]")
wait()
pc.warp((catacombe.GetScriptData('x')+80)*100, (catacombe.GetScriptData('y')+60)*100)
end
--**
--** Primer Piso
--**
when login with pc.get_map_index()== catacombe.GetScriptData('map_index') begin
pc.set_warp_location(15, 3152, 12092)
end
when logout with pc.get_map_index()== catacombe.GetScriptData('map_index') begin
pc.delqf("mob_killed")
end
when 2501.kill or 2502.kill or 2503.kill or 2504.kill with pc.get_map_index()== catacombe.GetScriptData('map_index') begin
pc.setqf("mob_killed", pc.getqf("mob_killed")+1)
if math.mod(pc.getqf("mob_killed"), catacombe.GetScriptData('drop_frequency')) == 0 then
game.drop_item_with_ownership(catacombe.GetScriptData('chiave_anime_cristallo'), 1)
end
end
when 30101.take with item.get_vnum() == catacombe.GetScriptData('chiave_anime_cristallo') and pc.get_map_index() == catacombe.GetScriptData('map_index') begin
say_title(mob_name(30101))
if get_time() < game.get_event_flag("catacomb_next_open") then
say("Las Catacumbas están cerradas.[ENTER]")
return
end
if party.is_party() and not party.is_leader() then
say("Sólo arrastra el objeto sobre")
say("El NPC.[ENTER]")
return
end
pc.remove_item(item.get_vnum(), 1)
say("Abrieron el seloo hacia.")
say("El paso a la segunda planta.[ENTER]")
if party.is_party() then
say("Serán llevados, suerte viejeros.[ENTER]")
end
wait()
game.set_event_flag("catacomb_next_open", get_time()+60*catacombe.GetScriptData('close_time'))
pc.setqf("is_master", 1)
timer("enter_floor_2", 2)
end
--**
--** Entrada dungeon y timer
--**
when login with catacombe.IsInDungeon(pc.get_map_index()) begin
pc.set_warp_location(15, 3152, 12092)
if pc.getqf("is_master") == 1 then
timer("start_timer", 2)
end
end
when logout with catacombe.IsInDungeon(pc.get_map_index()) begin
pc.remove_item(catacombe.GetScriptData('totem_smorfia'), pc.count_item(catacombe.GetScriptData('totem_smorfia')))
pc.remove_item(catacombe.GetScriptData('chiave_anime_cristallo'), pc.count_item(catacombe.GetScriptData('chiave_anime_cristallo')))
pc.delqf("is_master")
end
when start_timer.timer begin
d.notice("Les que da "..catacombe.GetScriptData('close_time').." minutos de su tiempo.")
d.notice("para complezar Catacumbas!")
notice_all("Las Catacumbas se cerrarán en "..catacombe.GetScriptData('close_time').." minutos a partir de ahora.")
server_timer("catacomb_open", 60*catacombe.GetScriptData('close_time'), pc.get_map_index())
end
when catacomb_open.server_timer begin
notice_all("Las Catacumbas están abiertas de nuevo.!")
if d.select(get_server_timer_arg()) then
clear_server_timer("catacomb_open", get_server_timer_arg())
d.notice("Tiempo Acabado, serán sacados de Catacumbas.")
d.exit_all()
end
end
--**
--** Segundo piso
--**
when enter_floor_2.timer begin
d.new_jump_all(15, 3617, 12075)
d.regen_file("data/dungeon/catacumbas/dc_regen_ebene2.txt")
d.setf("catacomb_floor", 2)
end
when 30103.take with item.get_vnum() == catacombe.GetScriptData('testa_ristretta') and catacombe.IsInDungeon(pc.get_map_index()) and d.getf("catacomb_floor") == 2 begin
if pc.getqf("is_master") == 1 then
pc.remove_item(item.get_vnum(), 1)
d.notice("Serán llevados a la siguente planta")
timer("enter_floor_3", 3)
else
d.notice("Solo el guerrero fuerte podrá poner el item.")
end
end
--**
--** Tercer piso
--**
when enter_floor_3.timer begin
d.jump_all(3572, 12760)
d.clear_regen()
d.kill_all()
d.regen_file("data/dungeon/catacumbas/dc_regen_ebene3.txt")
d.setf("catacomb_floor", 3)
d.notice("Buscar el metin correcto para avanzar!")
local coord_metin = {{1340,348},{1243,357},{1334,151},{1252,148},{1149,148},{1139,244},{1148,355}}
local right_metin = math.mod(os.time(),table.getn(coord_metin))+1
for i = 1,table.getn(coord_metin) do
if i == right_metin then
local v = d.spawn_mob(8025, coord_metin[i][1], coord_metin[i][2])
d.set_unique("real", v)
--chat(coord_metin[i][1].." "..coord_metin[i][2])
else
d.spawn_mob(8025, coord_metin[i][1], coord_metin[i][2])
end
end
end
when 8025.kill with catacombe.IsInDungeon(pc.get_map_index()) and d.getf("catacomb_floor") == 3 begin
if d.is_unique_dead("real") then
d.notice("El metin destruido es el correcto!")
d.notice("Serán llevados a la siguiente planta.")
timer("enter_floor_4", 3)
else
d.notice("El metin destruido es falso.")
end
end
--**
--** Cuarto Piso
--**
when enter_floor_4.timer begin
d.jump_all(3369, 12354)
d.clear_regen()
d.kill_all()
local map_n = math.mod(os.time(),4)+1
d.regen_file("data/dungeon/catacumbas/piano_4_"..map_n.."_catacombe.txt")
d.setf("catacomb_floor", 4)
d.notice("Encontrar el camino correcto para avanzar!")
end
when 20352.chat."Avanzar a la Sig. Planta" with catacombe.IsInDungeon(pc.get_map_index()) and d.getf("catacomb_floor") == 4 begin
if pc.getqf("is_master") == 1 then
say("Muy bien, has conseguido llegar hasta aquí.")
say("En la siguiente planta te enfrentarás con el")
say("jefe de las catacumbas.[ENTER]")
wait()
setskin(0)
d.notice("Serán llevados a la siguiente planta.")
timer("enter_floor_5", 3)
else
say("Sólo el guerrero del grupo o subida podrá recompensar.[ENTER]")
end
end
--**
--** Quinto Piso
--**
when enter_floor_5.timer begin
d.jump_all(3917, 12431)
d.clear_regen()
d.kill_all()
d.regen_file("data/dungeon/catacumbas/dc_regen_ebene5.txt")
d.setf("catacomb_floor", 5)
d.setf("correct_killed", 0)
d.notice("Encontrar y matar al Tártaro correcto para avanzar!")
local coord_boss = {{848,570},{678,832},{685,632},{1031,637},{1003,856}}
local right_boss = math.mod(os.time(),table.getn(coord_boss))+1
for i = 1,table.getn(coord_boss) do
if i == right_boss then
local v = d.spawn_mob(2591, coord_boss[i][1], coord_boss[i][2])
d.set_unique("real", v)
--chat(coord_boss[i][1].." "..coord_boss[i][2])
else
d.spawn_mob(2591, coord_boss[i][1], coord_boss[i][2])
end
end
end
when 2591.kill with catacombe.IsInDungeon(pc.get_map_index()) and d.getf("catacomb_floor") == 5 begin
if d.is_unique_dead("real") and d.getf("correct_killed") == 0 then
d.setf("correct_killed", 1)
d.notice("El Tártaro correcto fue destruido!")
d.notice("Arrastra el Totém al pilar o NPC!")
game.drop_item_with_ownership(catacombe.GetScriptData('totem_smorfia'), 1)
else
d.notice("El Tártaro es falso, no es el correcto.")
end
end
when 30102.take with item.get_vnum() == catacombe.GetScriptData('totem_smorfia') begin
pc.remove_item(item.get_vnum(), 1)
d.notice("Serán llevados a la siguiente planta!")
timer("enter_floor_6", 3)
end
--**
--** Sexto Piso
--**
when enter_floor_6.timer begin
d.jump_all(4372, 12732)
d.clear_regen()
d.kill_all()
d.regen_file("data/dungeon/catacumbas/dc_regen_ebene6.txt")
d.setf("catacomb_floor", 6)
d.notice("Mata al Caronte para avanzar!")
end
when 2597.kill with catacombe.IsInDungeon(pc.get_map_index()) and d.getf("catacomb_floor") == 6 begin
notice_all(" ".. pc.get_name() .." Ha destruido la Muerte!")
notice_all("Felicitaciones Guerrero.")
d.notice("El Caronte fue destruido!")
d.notice("Serán llevados a la última planta, Suerte!")
timer("enter_floor_7", 3)
end
--**
--** Septimo Piso
--**
when enter_floor_7.timer begin
d.jump_all(3146, 13142)
d.clear_regen()
d.kill_all()
d.regen_file("data/dungeon/catacumbas/dc_regen_ebene7.txt")
d.setf("catacomb_floor", 7)
d.notice("Acaba con Azrael!")
end
when 2598.kill with catacombe.IsInDungeon(pc.get_map_index()) and d.getf("catacomb_floor") == 7 begin
if catacombe.CanDrop(pc.get_level()) then
game.drop_item_with_ownership(catacombe.GetScriptData('forziere_azrael'), 1)
end
notice_all("El Personaje o el Grupo de ".. pc.get_name() .." ha destruido al Azrael!")
d.clear_regen()
d.notice("Han acabado con el Mal del Azrael, FELICITACIONES!")
d.notice("Tienen 20 segundos, y serán sacados de la mazmorra.")
timer("exit_catacomb", 20)
end
when exit_catacomb.timer begin
d.exit_all()
end
end
end
Por general cambian el index del mapa que es 15 (en mi caso), ustedes lo cambian por su número de index, es totalmente editable, cuenta con activación de las catacumbas por un gm.
Poner en quest_functions:
DragonLair.startRaid
GetScriptData(data)
IsInDungeon(pc_index)
CanDrop(pc_level)
catacombe.CanDrop
catacombe.GetScriptData
game.drop_item_with_ownership
os.time
rawget
Introducir en player-->query-->new query: Estos son los portales.
Bueno, aqui os dejo mi quest de catacumbas, que he echo, estan muy logradas, y son exactas al oficial, no le faltan plantas y el funcionamiento es el mismo, la unica pega que le veo es que no traen los dialogos, si poneis los dialogos del .es, tendreis 1 clon de ellas.
Aqui os dejo el link:
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Funcionan sin problemas, no hay ningun error aparente.
Teneis que editar el deviltower_zone.quest para que esta os funcione, matando al reaper.
Si teneis algun problema, con ellas, avisarme, tambien decir que falta poner los mobs, bien, cordenadas etc.