Aquí le dejo todo 100% de el sistema de monturas evolucionables, la parte de el cliente en este caso las monturas, cualquier cliente las trae implementadas directamente.
Es bastante fácil de instalar, descompriman y lo verán.
Adjunto sistema.
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
He estado haciendo una quest para los que les da pereza andar con comandos de mutear y esas cosas, tambien puse todos lo que se me ocurrieron, si se me paso alguno, decirlo y lo añado.
Para poder usar la parte de banear gente, hace falta tener lo del mysql para quest, podeis encontrarlo Debes iniciar sesión para ver el contenido del enlace en esta publicación. , no se si funcionara la quest sin eso...
Debes iniciar sesión para ver el contenido del enlace en esta publicación. para descargar la quest
Descripcion de opciones:
Halloween: Lo que hace es invocar unos npcs para halloween, deben ser configurados en la quest. Como usar el comando "/m"
Dia/noche: creo que no hace falta explicacion xD
Rates: para poner cualquier rate para reinos o por separado. Pronto rates para gremios xD
Bloquear chat: como su nombre dice, es para silenciar el chat, para quitar el silencio o ver la lista de silenciados.
Navidad: Para activar/desactivar cualquier evento de navidad, como la nieva, el arbol de navidad, los villancicos, Santa Claus, venta de fuegos artificiales, etc
Banear: Banea/Desbanear la cuenta de la persona que quieras, pero necesitas implementar mysql para quest, Debes iniciar sesión para ver el contenido del enlace en esta publicación..
Teleport: Para que te teletrasportes hacia una persona, o para traerlo hacia ti.
Recordad:
No os olvideis de poner vuestros datos y esas cosas en las funciones de mysql_query() al final de la quest hay 4 funciones parecidas a la siguiente, en "root" es el usuario del navicat(suele ser root), en PassNavicat, pos eso, la pass xD, en account no tocarle, y en ipNavicat, es la ip del server, los datos esos, van entre comillas como estan puestos ahy, si las quitais os dara error.
mysql_query("Update account.account set account.status = 'OK' WHERE account.id ="..id.account_id[1].."" ,"root","PassNavicat", "account", "IPNavicat")
Si teneis alguna duda, preguntaros, y recordad que nunca esta de mas dar las gracias xD
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 con esta quest ud podra ver su staff online
Quest.
quest teamOnline begin
state start begin
when letter begin
send_letter("Lista_de_Sfaff")
end
when button or info begin
local colorList = {}
colorList[0] = color256(220, 10, 10) --Offline
colorList[1] = color256(10, 220, 10) --Online
local query = m_query("SELECT REPLACE(REPLACE(mName, '[', '('),']', ')') as name, last_play > DATE_SUB(NOW(), INTERVAL 15 MINUTE) and visible = 1 as online FROM common.gmlist INNER JOIN player.player ON player.name = gmlist.mName WHERE visible != -1")
local height = 310
raw_script("[WINDOW_SIZE width;350|height;"..height.."]")
say_title("Team Lisste Root = Offline | Gruen = Online")
if table.getn(query) <= 0 then
say("Actualmente no hay nadie disponible")
return
end
for i = 1, table.getn(query) do
local row = query[i]
local name = row[1]
local online = tonumber(row[2])
local color = colorList[online]
say(color..name)
end
end
end
end
Deben crear un .sql llamado (common.gmlist)
DROP TABLE IF EXISTS `gmlist`;
CREATE TABLE `gmlist` (
`mID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`mAccount` varchar(16) NOT NULL DEFAULT '',
`mName` varchar(16) NOT NULL DEFAULT '',
`mContactIP` varchar(16) NOT NULL DEFAULT '',
`mServerIP` varchar(16) NOT NULL DEFAULT 'ALL',
`mAuthority` enum('IMPLEMENTOR','HIGH_WIZARD','GOD','LOW_WIZARD','PLAYER') DEFAULT 'PLAYER',
`visible` tinyint(4) NOT NULL DEFAULT '1',
PRIMARY KEY (`mID`)
)
Y eso es todo credito epvp
my freds Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Buenas gente de metin2zone me ha apetecido hacer la subquest de nivel 47 tal y como la del oficial y os la dejo aqui publicada para que la podais probar ya que yo no he tengo tiempo para probarla espero que os funcione si veis algun error que algun corrector especialista la repare
La dejo adjunta por si la quereis descargar.
---------------------------------------------------- SUB QUEST-- LV 50-- Decifrando el cryptograma----------------------------------------------------quest subquest_47 begin state start begin when login or levelup with pc.level >= 50 and pc.level <= 52 begin set_state( information ) end end state information begin when letter begin local v=find_npc_by_vnum(20355) if 0==v then else target.vid("__TARGET__", v, "Capitán") end end when __TARGET__.target.click or 20355.chat."Sobre el código secreto..." with pc.level >= 50 begin target.delete("__TARGET__") say_title("Capitán:") say("¡FIRMES! Ah, eres tú. Tengo información de") say("Yu-Hwan. Están, como siempre, codificadas. No es") say("fácil descifrarlo, pero quizá debamos actuar") say("rápido. La última vez fuistes más bien rápido") say("descrifrando el código. ¿Podrías ayudarme de") say("nuevo? Por favor, sería estupendo.") local r=select("Aceptar", "No, es un trabajo sin importancia.") if 2==r then say("¿Quieres abandonar la misión?") local a=select("Sí " ,"No") if 2==a then say_title("Capitán:") say("Pero... la última vez, lo hiciste.") say("¿Por qué estás dudando? Por favor, replantéatelo.") return end say_title("Capitán:") say("Yo sé lo que quieres decir.") say("Por lo que veo no quieres ayudarnos,") say("Pues una verdadera vergüenza.") set_state(__GIVEUP__) return end say_title("Capitán:") say("¡Oh! ¡Eres mi salvador! Mira, este es el código") say("¡Míralo bien!") wait() say_title("Capitán:") say("GMEIENSO") say("STIVOS") say("NE") say("OHZENORIT") say("¿Puedes descifrarlo?") wait() say_title("Capitán:") say("Así pues, ¿cómo va? ¿Alguna pista?") local s=select("¡Ah! Ya está.","No lo sé.","Enséñamelo otra vez.") if 2==s then say("¿Quieres abandonar la misión?") local a=select("Sí ","No") if 2==a then say_title("Capitán:") say("Piénsalo de nuevo y vuelve más tarde. ¡Pero no se") say("lo cuentes a nadie!") return end say_title("Capitán:") say("¡Dios mío! ¿Que difícil?") say("¿Quién sabe descifrar eso?") say("Tú eras mi última esperanza.") set_state(__GIVEUP__) return end if 3==s then say_title("Capitán:") say("Bien, pero rápido. De otro modo alquien") say("sospechará...") say("GMEIENSO") say("STIVOS") say("NE") say("OHZENORIT") wait() end say_title("Capitán:") say("¿Y? ¿Qué significa este código?") local answer=select("Amigos vistos en horizonte","La verdad hace enemigos","Enemigos vistos en horizonte","Enemigo visto en horizonte","No lo sé") if answer=="Amigos vistos en horizonte" or "La verdad hace enemigos" or "Enemigo visto en horizonte" then say_title("Capitán:") say("Hmm, eso no significa nada para mí. Qué quiso") say("decir con eso. No creo que esté bien. Piénsalo") say("otra vez.") local a=select("Probaré de nuevo","Abandonar") if 2==a then say_title("Capitán:") say("¡Oh, cielo! ¿Tan difícil es? Eras mi última") say("esperanza... ¿Quién va a descifrarlo ahora?") set_state(__GIVEUP__) return end say("Entonces, ¿qué significa?") local answer=select("Amigos vistos en horizonte","La verdad hace enemigos","Enemigos vistos en horizonte","Enemigo visto en horizonte","No lo sé") if answer=="Amigos vistos en horizonte" or "La verdad hace enemigos" or "Enemigo visto en horizonte" then say_title("Capitán:") say("Lo averiguarás. ¡Vuelve cuando estés listo!") elseif answer=="No lo sé" then say_title("Capitán:") say("¿Por qué estás tan callado? ¿No lo entiendes?") local a=select("Tengo que pensar","Abandono.") if 2==a then say_title("Capitán:") say("¡Oh, cielo! ¿Tan difícil es? Eras mi última") say("esperanza... ¿Quién va a descifrarlo ahora?") return end say("Entonces, ¿qué significa el mensaje?") local answer=select("Amigos vistos en horizonte","La verdad hace enemigos","Enemigos vistos en horizonte","Enemigo visto en horizonte","No lo sé") if answer=="Amigos vistos en horizonte" or "La verdad hace enemigos" or "Enemigo visto en horizonte" or "No lo sé" then say_title("Capitán:") say("Lo averiguarás. ¡Vuelve cuando estés listo!") end say_title("Capitán:") say("Sí ¡tienes razón! Ahora también lo entiendo.") say("Estoy orgulloso de ti. ¡Eres uno de nuestros") say("mejores soldados! Esta frase es una contraseña") say("concertada. Significa que Yu-Hwan ha descubierto") say("a los espías enemigos y hemos tomado acciones") say("contra ellos. Daré las órdenes necesarias") say("inmediatamente.") say_reward("Recibes 1.300.000 puntos de experiencia.") pc.give_exp2(1300000) clear_letter() set_state(__COMPLETE__) end elseif answer=="No lo sé" then say_title("Capitán:") say("¿Por qué estás tan callado? ¿No lo entiendes?") local a=select("Tengo que pensar","Abandono.") if 2==a then say_title("Capitán:") say("¡Oh, cielo! ¿Tan difícil es? Eras mi última") say("esperanza... ¿Quién va a descifrarlo ahora?") return end say("Entonces, ¿qué significa el mensaje?") local answer=select("Amigos vistos en horizonte","La verdad hace enemigos","Enemigos vistos en horizonte","Enemigo visto en horizonte","No lo sé") if answer=="Amigos vistos en horizonte" or "La verdad hace enemigos" or "Enemigo visto en horizonte" or "No lo sé" then say_title("Capitán:") say("Lo averiguarás. ¡Vuelve cuando estés listo!") end say_title("Capitán:") say("Sí ¡tienes razón! Ahora también lo entiendo.") say("Estoy orgulloso de ti. ¡Eres uno de nuestros") say("mejores soldados! Esta frase es una contraseña") say("concertada. Significa que Yu-Hwan ha descubierto") say("a los espías enemigos y hemos tomado acciones") say("contra ellos. Daré las órdenes necesarias") say("inmediatamente.") say_reward("Recibes 1.300.000 puntos de experiencia.") pc.give_exp2(1300000) clear_letter() set_state(__COMPLETE__) elseif answer=="Enemigos vistos en horizonte" then say_title("Capitán:") say("Sí ¡tienes razón! Ahora también lo entiendo.") say("Estoy orgulloso de ti. ¡Eres uno de nuestros") say("mejores soldados! Esta frase es una contraseña") say("concertada. Significa que Yu-Hwan ha descubierto") say("a los espías enemigos y hemos tomado acciones") say("contra ellos. Daré las órdenes necesarias") say("inmediatamente.") say_reward("Recibes 1.300.000 puntos de experiencia.") pc.give_exp2(1300000) clear_letter() set_state(__COMPLETE__) end end end state __COMPLETE__ begin when enter begin q.done() end end state __GIVEUP__ begin endend
Debes iniciar sesión para ver el contenido del enlace en esta publicación.