Jump to content

KeKo

Miembro
  • Contador contenido

    518
  • Ingreso

  • Última visita

  • Días ganados

    74

Todo lo publicado por KeKo

  1. Buen comienzo para el curso de creacion de quests, me gustaron estas frases xd: Mañana es mi turno para el capi 2
  2. Esta quest os manda ir a una serie de puntos del mapa de city para cuando vayais a todos daros una recompensa. El punto al que os manda lo veis aqui: target.pos("__TARGET__", 500, 580, 1, "") El 500, 580 son las cordes a las que hay que ir.
  3. No le habras puesto type = 18 en la query del item proto del servidor al item que usas como almacen
  4. Añadida una pequeña guía para hacer vuestras propias restricciones de nivel.
  5. Hola a todos, como os habreis fijado hay un nuevo subforo dentro de la seccion quests. Este nuevo subforo es una iniciativa de ElRaulxX y mia (KeKo) en el que haremos un curso de creacion de quests para que todos podais aprender sobre el lenguaje lua, que (modificado para metin2) es el que se usa en la quests, y que podais editar, entender y crear quests. El curso se compondrá de una serie de capítulos en los que raul y yo os iremos desentrañando los interesantes misterios del mundo de las quest de metin2 :acepted: Dentro de poco publicaremos el primer capítulo del curso, y esperamos que a todos os guste el nuevo subforo y os sea útil. Un saludo, raul y keko.
  6. Como vi que en el post de: que guia quereis que hagamos, habí­a alguien con un problema con portales os voi a explicar como editar y añadir nuevos portales. Antes de nada teneis que saber que: 1 - Un portal viene siendo una query en la que especificas el nombre que va a poner encima cuando le pinchas y a las cordes a las que te va a llevar. 2 - Hay dos tipos de portales, los que hacen teletransportes dentro del mismo mapa (seria como un /go) y los que hacen teletransportes a otros mapas (que sera como el /warp). *Como reconoces un portal del tipo /warp?? Para saber si es del tipo /warp simplemente fijate en 2 cosas: si tiene nombre y si las cordes a las que te llevan estan formadas por 4 numeros, en ese caso sera un /warp (ejemplo: Gruta2 6150 2123) *Como reconoces un portal del tipo /go?? Para saber si es del tipo /go simplemente te fijas en: si NO tiene nombre y si las cordes son de 3 numeros (ejemplo:150 123 por ejemplo) Ahora la guia en si: 1 - Parte del server: Bien, primero si quereis añadir o editar un portal os vais al navicat, a player y ahi dentro a mob_proto y os buscais las ids de 10001 a 10829, y si os fijais de 10001 a 10080 son portales de /warp y de 10501 a 100829 son partiles de /go. Para añadir vuestro nuevo portal copias la linea de un portal y agregais una nueva linea con la id siguiente. Os quedaria asi: INSERT INTO `mob_proto` VALUES ('idnueva', 'Nombreportal cordesx cordesy', 0x5A6F6E615F4A6179616E6720343030322038393935, '0', '3', '3', '70', '', 'NOMOVE', '0', '', 'STUN,SLOW,CURSE,TERROR', '0', '', '0', '0', '0', '0', '0', '0', '0', '3954', '3', '1', '53112', '112302', '8208', '79', '100', '100', '0', '2000', '175', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', null, null, null, null, null, null, '0', '0', '0', '0', '0'); De ahi lo importante es: - La id (que no sea repetida) -El nombre (que teneis que cambiarlo en donde puse nombreportal y despues una vez cargada en donde esta el nombre repetido (aqui se ve en md5 porque es un backup de una query) -Despues del nombre os aparecen las cordenadas a las que quereis que os lleve el portal, asi que le poneis las que querais, y como es un portal de estilo /warp pues NO poneis los 00 al final tipicos de un Setting.txt o atlasinfo. *En el caso que sea un portal del tipo /go simplemente le poneis las cordes, que son las que ves debajo del minimapa si estas en el punto al que quieres que te lleve. Y ya teneis vuestro portal hecho, si quereis editar uno existente vais a su linea y editais las cordes, y para poder empezar a usarlo vais al mapa y le haceis un /m donde quereis que este. *Dato: si quereis ponerlo fijo en el mapa vais al filezilla, a la carpeta del mapa, a npc.txt y añadis una nueva linea tal que asi: m cordesx cordesy 0 0 0 0 1m 100 1 idportal 2 - Parte del cliente: Para que el juego sepa que hay un portal ahi tenemos que ir al root, una vez ahi en el npclist buscamos las ids de 10001 en adelante. Y agregais una nueva linea tal que asi­: idnueva [tab] idportal Una vez echo eso ya queda el paso final, el mas complicado de todos, ya que es poner el portal en si en el mapa. Para ello tendreis que usar el editor ingame de mapas, y si sabeis pues añadirlo a mano (pero es mas dificil). Si no sois capaces de ponerlo fisicamente en el mapa, con solo la parte del server vereis un punto azul en el minimapa donde este el portal Un saludo a todos y espero que os sirva la guia
  7. KeKo

    Sello de 4 monturas

    Hola a todos, hoy os dejo aqui esta pequeña quest para usar 4 monturas con un unico sello, de modo que cada vez que le des al item te monte en una diferente, y a la cuarta vez (la ultima montu) si le vuelves a dar te vuelve a montar en la primera montura. quest monturas begin state start begin when iditem.use begin pc.setqf("montura", pc.getqf("montura") + 1) if pc.getqf("montura") == 1 then pc.mount("20110", 60*60*60*60) elseif pc.getqf("montura") == 2 then pc.mount("20111", 60*60*60*60) elseif pc.getqf("montura") == 3 then pc.mount("20112", 60*60*60*60) elseif pc.getqf("montura") == 4 then pc.mount("20113", 60*60*60*60) pc.setqf("montura", pc.getqf("montura") - 4) end end end end Ya veis que no pongo una id de un item para que pongais el que mejor os parezca, y también podeis poner la id de la montu que querais, ahi uso 20110 a 20113.
  8. Muy buena raul, ya habia visto la guia en epvp y tmbn pensaba en tradcirla pero te me adelantaste xd. Sobre el nil es el unico que solo me salio una vez escribiendo quests. Un nil representa un conjunto vacio y las pocas veces que lo tengo visto haciendo quests es cuando aparece in input y se quiere poner la restriccion de si no escribes nada. Si a alguien le sale este error que revisen la quest porque lo mas seguro es que esten intentando mostrar un dato que no existe, cosas como un local que se muestra pero al que no se le asigna valor.
  9. Esta bien lo de tener el perga siempre con las noticias estilo awake. Si quieres que se te quede para siempre simplemente quitale el state complete que tiene al final.
  10. NOTA: NO COPY PASTEEIS ESTE APORTE EN UNIVERSOJUEGOS, Y SI LO HACEIS EN OTROS FOROS RESPETAD LOS CREDITOS. Buenas zoneros y zoneras, hoy para celebrar que llegué a los 100 mensajes en el foro os traigo unas dagas apdatadas por mí del juegazo de wii Monster Hunter Tri, que creo que quedan muy bien en Metin2. Aqui teneis unas imagenes de como queda el arma en el juego: En la descarga teneis lo siguiente: -Archivo .gr2 y textura. -Icono hecho por mi del arma: aviso que tiene tamaño de 2 casillas pero como es una daga podeis ponerle en la query que sea de 1 espacio solo o de 2. -Xml de la parte del item y del icon. -Item_list del arma Link de la descarga: Daga Uragaan Aqui teneis el xml de la parte del item.epk. *Detalle: yo le puse de id 1010 para sustituirla por la daga de lvl 5 en mi cliente de pruebas, pero vosotros le poneis la id que querais: <File archivedPath="d:/ymir work/item/weapon/metin2elements/two008_mm.tga" type="2"><![CDATA[item_descompiladoymir workitemweaponmetin2elementstwo008_mm.tga]]></File> <File archivedPath="d:/ymir work/item/weapon/01010.gr2" type="0"><![CDATA[item_descompiladoymir workitemweapon01010.gr2]]></File> Ahora el xml del icon: <File archivedPath="icon/item/01010.tga" type="2"><![CDATA[icon_descompiladoiconitem01010.tga]]></File> Aqui está un ejemplo de item_list, simplemente le cambiais la id: 1010 WEAPON icon/item/01010.tga d:/ymir work/item/weapon/01010.gr2 1011 WEAPON icon/item/01010.tga d:/ymir work/item/weapon/01010.gr2 1012 WEAPON icon/item/01010.tga d:/ymir work/item/weapon/01010.gr2 1013 WEAPON icon/item/01010.tga d:/ymir work/item/weapon/01010.gr2 1014 WEAPON icon/item/01010.tga d:/ymir work/item/weapon/01010.gr2 1015 WEAPON icon/item/01010.tga d:/ymir work/item/weapon/01010.gr2 1016 WEAPON icon/item/01010.tga d:/ymir work/item/weapon/01010.gr2 1017 WEAPON icon/item/01010.tga d:/ymir work/item/weapon/01010.gr2 1018 WEAPON icon/item/01010.tga d:/ymir work/item/weapon/01010.gr2 1019 WEAPON icon/item/01010.tga d:/ymir work/item/weapon/01010.gr2 No hago item_proto cliente ni query porque cada uno querrá el arma a su manera, con bonus y valores diferentes, así que es mejor que la hagais vosotros. Y eso es todo que disfruteis del arma
  11. Buenas zoneros y zoneras, hoy os traigo esta guía que me habían pedido que hiciera para implementar mobs, cosa que hay gente a la que le da bastantes problemas a veces. ESTA GUIA ES EXCLUSIVA DE METIN2ZONE, NO LA POSTEEIS EN OTRO FOROS Ire paso por paso explicando el proceso de implementación de un mob: 1 - Qué es lo que trae la carpeta de un mob? Cuandos nos bajamos un mob nuevo para meter en nuestro servidor vemos que el mob consiste en una carpeta con una serie de archivos dentro, que pueden ser de diferentes tipos y que tienen diferentes funciones. Esos archivos pueden ser: -Archivos .gr2: Son los archivos que contienen el modelo del mob y sus movimientos. Para que un gr2 funcione debe ir siempre a unido a un archivo, que puede ser un .msm o un .msa Podeis abrirlos usando el granny viewer, y tendreis una vista así del mob: -Archivos msm y msa: Son aquellos que sirven para que el juego pueda leer un archivo .gr2, por lo que siempre tienen la ruta del modelo al que van unidos. Los msm son para el modelo del mob en si y los msa para animaciones. -Archivos .mse: Estos archivos se usan para meter efectos a los mobs, por lo que los renocereis viendo que al final del archivo siempre saldra el nombre de un .dds o otro archivo de textura, que es el efecto en si. -Motlist.txt: En cada carpeta de un mob debe aver un archivo con este nombre, ya que es el que le dije al juego a que movimiento se corresponde cada uno de los gr2 de animaciones del mob. Explicacion del motlist: -Cada linea lleva GENERAL luego el nombre del movimiento, que puede ser WAIT, RUNT, DIE, ATTACK, etc (nombres en ingles de las acciones de los mobs) y luego el nombre del .msa que enlaza con esa animacion. El numero despues del nombre del msa poned el mismo que en otra linea. -Texturas: Pueden presentarse en varios formatos, siendo .jpeg .dds y .tga los mas comunes. La ruta en la que deben ir estos archivos va especificada en el .gr2 del mob asi: *Nota: la ruta mas normal para un mob suele ser monster/monster2/npc/npc2 pero puede haber mobs con rutas diferentes como en el zone o carpetas nuevas. 2 - Vale ya se como va la carpeta del mob, ahora que hago con ella? Bien, ahora que ya tenemos la carpeta de nuestro mob y entendemos como funciona tenemos que implementarlo en nuestro cliente. Pero en que archivo lo hacemos? A la hora de ver en que ruta poner la carpeta de nuestro mob tenemos que ir a la susodicha carpeta y abrir el msm que lleve el nombre del mob. Una vez lo abramos veremos un apartado donde pone: BaseModelFileName y en esa ruta pondremos la carpeta del mob. Una vez tengamos metido la carpeta en su sitio, añadiremos al xml del archivo que estemos modificando las lineas correspondientes al nuevo mob, ya sea a mano o usando un creador de xml. *Se pueden dar casos de mobs en los que la ruta en la que tenga la textura sea diferente a la ruta en la que tenga que ir la carpeta del mob, así que si se da el caso tendreis que meter la carpeta del mob en la ruta del msm y el archivo de la textura en su ruta correspondiente. 3 - Ya compile el archivo, que és lo siguiente? Una vez compilado el archivo el siguiente paso es decompilar el root de nuestro cliente y abrir un archivo llamado npclist.txt, en el que relacionaremos cada mob nuevo con una id en el cliente. *Detalle: cuando escribais en el npclist debereis usar la tecla tabulador en vez de espacios, para que no os de errores al cargar el juego. Una vez abrais el npclist, vais a cualquier parte del archivo, le dais a enter para dejar una linea vacia y escribis lo siguiente: 1º La id que quereis que tenga el mob. 2º Le dais a tab 3º El nombre del msm del mob. idmob [tab] nombremsm El resultado tiene que ser algo asi: 3.1: Casos especiales: mobs duplicados: Hay veces que un mismo mob con diferentes texturas, por lo que recurrirmos a duplicar el mob. Por no alargar la guia demasiado podeis ver mi post de duplicar mobs para aprender a hacerlo: Duplicar mobs En esos casos (resumiendo la parte del root) tendreis que poner primero una linea que sea asi, ya que cuando duplicais un mob haceis otro msm con un nombre diferente al del mob original en el que haceis que tenga otra textura. 0 [tab] nombredelmsmnuevo [tab] nombredelmsmviejo 4 - Es todo? Ya implemente mi mob? Casi Casi. Ya lo ultimo que queda para implementar a vuestro mob es meterle una query en el mob_proto del navicat, que puede ser igual a la de otro mob o podeis modificarla como os plazca. *Detalle: Aunque un mob no tenga query si está implementado en el cliente podeis hacer /poly iddelmob para probarlo antes de meterle query. Para que el mob sea el mismo que acabamos de meter, la query debe llevar la misma id que pusimos en el npclist.txt del root. *Opcional: Si ademas queremos que nuestro mob lleve encima el nombre deberemos añadir una linea con la id npclist.txt en el mob_proto del cliente: vamos al locale de nuestro servidor, buscamos el mob_proto y lo decompilamos. Una vez hecho eso añadimos una linea nueva: <Mob vnum="idmob" name="????" gb2312name="Nombremob" type="0" rank="1" battle_type="0" level="125" event_type="0" mob_color="0" /> Y listo ya tendreis vuestro nuevo mob implementado y funcionando (Os pongo una foto de un mob cualquiera xd, esta porq la chami sale toda sexy ) 5 - Errores frecuentes, soluciones y truquillos varios: Toda esta teoría está muy bien, pero a mucha gente le pasa que implementa un mob perfectamente y luego no le va, hay una serie de cosas tipicas que suelen causar eso: 5.1: Invoco al mob, veo que me baja la vida pero no hay ningun monstruo, que hago Este es el error mas tipico de todos, y que tiene muchas soluciones diferentes: 1 - Pusiste mal el nombre del mob en el npclist, así que revisa que el nombre que tiene el msm del mob sea el mismo que pusiste en el npclist, puede que lo hayas escrito mal. (Se que es muy básico pero nunca se sabe). 2 - Problema de ruta: A veces puede pasar que implementes un mob y metas la carpeta del mob en otra ruta diferente a la que tiene en el msm así que debereis cambiarlo de carpeta a la que ponga el msm. 3- El problema de las mayúsuclas y minúsculas: Aunque no lo parezca esto es algo que causa muchos problemas con los mobs, ya que es algo que muchos no saben. Esto es muy importante: NUNCA PUEDE HABER MAYUSCULAS EN EL XML DE UN MOB, YA SEA EL NOMBRE DEL GR2 O DE LA TEXTURA, PORQUE DARA ERROR. Como la gran mayoria usamos el creador de xml, cuando meteis la carpeta del mob en su archivo correspondiente teneis que fijaros que el nombre del gr2 del mob estea escrito en minusculas: Así mal Así bien También teneis que abrir el msm del mob y ver que el .gr2 de ahi esté en minus también: Asi mal Asi bien Ademas comprobad también que esta en minusculas en el xml. De esta manera al usar el creador de xml ya saldra en minusculas el nombre del gr2. Por ultimo en lo referente a las minusculas fijaros que el nombre del mob, de la textura o cualquier otra cosa del xml este en minusculas, por ejemplo: d:/ymir work/monster2/mob_nuevo/Mob.gr2 d:/ymir work/monster2/mob_nuevo/Textura_Mob.tga Esas dos lineas estarían mal, ya que aunque el .gr2 esta en minusculas hay letras en mayuscula (la M de mob y la T de textura) asi que recordad siempre que todo debe estar en minusculas para que el juego lo lea bien d:/ymir work/monster2/mob_nuevo/mob.gr2 d:/ymir work/monster2/mob_nuevo/textura_Mob.tga 4 - El problema de las ids: A la hora de poner ids a los mobs nuevos que hayais implementado teneis que tener en cuenta que hay una serie de ids que se corresponde a monster/monster2/npc/npc2 así que a la hora de poner id os aconsejo que useis esta numeración: * Si el mob es del monster, ponedle id de 210 en adelante. * Si el mob es del monster2, ponedle id de 3000 en adelante. * Si el mob es de npc/npc2, ponedle id de 18000 en adelante (a menos que sean montus que peguen o mascota que tienen que tener una id concreta). Eso sí, si no quereis poner esas ids no significa que el mob no vaya a ir, pero con esas no os dará problema por la id nunca. 5.2: Cuando descargo un mob viene sin los gr2 de las animaciones, que hago??? Los mobs nuevos que implementeis no siempre tendrán animaciones propias, así que en muchos casos usarán las de otros mobs que tengan su mismo esqueleto (por lo que sus animaciones seran compatibles). En ese caso llevaran el mse con la ruta de la animacion del otro mob. Si solo teneis el gr2 y msm de un mob y quereis usarlo tendreis que copiar de otro mob compatible con el sus mse (lo que es dificil de ver a veces ya que hay que fijarse en como es el mob fisicamente y buscar uno parecido) y pegarlos en la carpeta de vuestro mob. 5.3: Tengo un mob sin motlist, que hago?? Si os falta el motlist de un mob solo teneis que cojer el de otro mob y editarlo con los nombres de las animaciones que tenga vuestro mob. Para saber que gr2 es cada animacion (si el 00 es WAIT por ejemplo) tendreis que abrir el gr2 del mob cn el granny, darle a animation list, ahi a load new animation. Una vez os diga que gr2 abrir vais a la carpeta del mob abris un gr2, por ejemplo el 00 y veis que hace el mob, si corre sería RUN, si se muere pues DEAD y así. Y eso es todo zoneros, espero que os sirva la guía
  12. Hola a todos, me he fijado que no hace mucho hubiera un post en el que alguien decia una manera de duplicar mobs haciendo otro gr2 o algo así y ayer me preguntaron por como duplicar un mob (es decir mismo mob distinta textura) y veo que el método más fácil de hacerlo no es el que más se usa, así que os voi a explicar como hacerlo: 1- Vamos a la carpeta del mob que queremos duplicar (en mi caso la reina araña), copiamos su msm y lo volvemos a copiar con otro nombre, por ejemplo new_spider_queen.msm. 2- Ahora abrimos el msm que acabamos de copiar (el new_spider) y borramos hasta donde dice Group AttachingData (eso lo dejamos). 3- Ahora pegamos este texto en su lugar: ScriptType RaceDataScript BaseModelFileName "d:\ymir work\monster2\spider_queen\spider_queen.gr2" Group ShapeData { PathName "d:/ymir work/monster2/spider_queen/" ShapeDataCount 1 Group ShapeData00 { ShapeIndex 0 Model "spider_queen.gr2" SourceSkin "spider_queen.dds" TargetSkin "new_spider_queen.dds" } } *Explicacion de esta parte: -BaseModelFileName: ahi poneis la ruta y el nombre del gr2 del mob que quereis duplicar -PathName: la ruta sin el nombre del gr2. -Model: el nombre del gr2 del mob. -SourceSkin: La textura original del mob -TargetSkin: La nueva textura del mob, en mi caso es new_spider_queen.dds pero la vuestra se llamara como querais xd Quedándonos el nuevo msm tal que así: 4- Pegamos la nueva textura en la carpeta del mob y agregamos el nuevo msm y la nueva textura al xml del monster2 (o donde vaya el mob). 5- Ahora vamos al npclist.txt en vuestro root y agregamos las 2 siguientes lineas: 0 [tab] new_spider_queen [tab] spider_queen iddelmob [tab] new_spider_queen 6- Listo, ya teneis a vuestro mob duplicado, sin necesidad de hacer otro gr2 ni cosas raras, por supuesto tendreis que hacerle mob proto de cliente (si quereis xd) y query para que vaya, ya que es otro mob diferente al original. *(La foto no es de la reina araña sino de su marido el rey araña, pero es para que veais que el metodo funciona porque la foto de la reina araña no la tengo x aqui xd)
  13. Sin un state complete te quedara siempre ahi, no seria mejor que solo salga una vez?
  14. Casi que no cuela Fotos de 2 armas mas, espero que os gusten
  15. KeKo

    Quest duel points!

    Un consejo, esto lo cambias: and pc.level >= 1 and pc.level < 250 Por esto and pc.level <= 250 Así te ahorras un and. Y de paso puestos a poner restricciones una del nivel al que esta el pj que matas tu no quedaba nada mal para que no se maten pjs lvl1 que se creen para sacar puntos. npc.level <= lvlquequieras
  16. Hola gente, estos dias estoi adaptando algunas armas del juegazo de wii Monster Hunter Tri, aqui teneis como quedaron:
  17. Quest editada con la sexta hab añadida, y arreglada porque solo iba en pjs gm (no digais na xd)
  18. Buenasss zoneros y zoneras, hoy os voi a explicar como implementar en vuestro servidores el sistema de logros que meti en Metin2Extasis, hasta con mi querida quest de canjes xd (aunque en elite hay una mas completa la mia es mas sencillita). ESTA GUIA ES EXCLUSIVA DE METIN2ZONE, QUE NADIE LA COPY PASTEE A OTROS FOROS 1 - Qué es el sistema de logros? Este sistema consiste en una quest y una edicion del cliente que hace que cada vez que un jugador alcance un objetivo concreto, que tu fijas en la quest, le da los puntos correspondientes al logro que haya alcanzando. Si un jugador acumula puntos luego los puede canjear por premios. Aqui teneis algunas fotos del resultado final (son antiguas del extasis xd): 2 - Como meto yo esto? El sistema de logros consiste en una quest y en editar unos archivos en el cliente, así que vamos a ir paso por paso: 2.1: Parte del cliente: *Todos los archivos que tengais que meter estan en esta descarga: http://www.mediafire...a_de_logros.zip 2.1.1 - Que archivos vamos a editar? En el cliente editaremos los siguientes archivos: -Root: dentro de el los archivos game.py y uiachievement.py (este lo meteremos nosotros). -Etc: donde meteremos los archivos achievement_small.sub y achievement_small.dds -Uiscript: aqui meteremos el archivo achievementboard.py y warteschleife.py 2.1.2 - Manos a la obra, a implementar! 2.1.2.1: Primero empezaremos con el root. Decompilad vuestro root, abrid el archivo game.py y buscad esto: def __ServerCommand_Build(self): Una vez esteis ahi, vais hasta donde pone "CloseSafeBox" y cuando esteis en esa linea le dais a a enter y pegais esto: # Achievement System START "achievement" : self.__AchievementTest, "achievementpoints" : self.__ShowAchievementPoints, # Achievement System END Quedandoos asi: (Las -------------------- las pongo solo para que distingais la parte que acabamos de añadir, no hay que ponerlas) Ahora vais al final del archivo, le dais a enter para dejar algo de espacio y pegais esto: # Achievement System START def __ShowAchievementPoints(self, points): import uiAchievement import uiTaskbar self.uiAchievement = uiAchievement.AchievementDialog() uiAchievement.AchievementPoints = int(points) def __AchievementTest(self, archivement): import uiAchievement self.uiAchievement = uiAchievement.AchievementDialog() self.uiAchievement.Show(1, str(archivement)) self.uiAchievement.SetTop() # Achievement System END Quedará asi: *Siguiente paso: metemos en la carpeta root el archivo uiachievement.py y lo añadimos al xml <File archivedPath="uiachievement.py" type="2"><![CDATA[Sourceuiachievement.py]]></File> Listo el root! Sigamos con el etc. 2.1.2.2: Decompilamos nuestro etc, vamos a la carpeta ymir work/ui y metemos el achievement_small.dds. Despues vamos a la carpeta ymir work/ui/public y metemos el achievement_small.sub. Por ultimo agregamos ambos al xml: <File archivedPath="d:/ymir work/ui/public/achievement_small.sub" type="0"><![CDATA[Sourceymir workuipublicachievement_small.sub]]></File> <File archivedPath="d:/ymir work/ui/achievement_small.dds" type="0"><![CDATA[Sourceymir workuiachievement_small.dds]]></File> 2.1.2.3: El ultimo paso en el cliente es decompilar nuestro uiscript y meter el archivo achievementboard.py y el warteschleife.py: en la carpeta. Los añadimos al xml y compilamos: <File archivedPath="uiscript/achievementboard.py" type="2"><![CDATA[Sourceuiscriptachievementboard.py]]></File> <File archivedPath="uiscript/warteschleife.py" type="2"><![CDATA[Sourceuiscriptwarteschleife.py]]></File> Y listo ya tenemos todo lo del cliente 2.1: Parte del server: Bueno ahora ya solo nos queda meter nuestra quest del sistema de logros en la carpeta /home/game/quest (o la ruta en la que tengais la carpeta quest). Aqui os dejo la mia, con los nombres en español, algunos logros añadidos, canje, un item que te da logros (pa quien lo quiera xd), una opcion que te dice tus logros, etc quest logros_keko begin state start begin --LOGIN when login begin local actual_achievement_points = pc.getqf("achievement_points") if pc.getqf("firstlogin") != 1 then local Reward = 1 pc.setqf("firstlogin", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement Primer_login%".. actual_achievement_points + Reward .."") else cmdchat("achievementpoints ".. pc.getqf("achievement_points")) end end --BOSSE when 691.kill begin local Reward = 2 local Achievement = "Jefe_Orco" local killcount = pc.getqf("691") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("691", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 791.kill begin local Reward = 3 local Achievement = "Lider_esoterico" local killcount = pc.getqf("791") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("791", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 2493.kill begin local Reward = 100 local Achievement = "Dragon_azul" local killcount = pc.getqf("2493") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("2493", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 2492.kill begin local Reward = 20 local Achievement = "Comandante_Setaou" local killcount = pc.getqf("2492") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("2492", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 1091.kill begin local Reward = 5 local Achievement = "Rey_demonio" local killcount = pc.getqf("1091") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("1091", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 2597.kill begin local Reward = 20 local Achievement = "Muerte" local killcount = pc.getqf("2597") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("2597", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 1192.kill begin local Reward = 12 local Achievement = "Bruja_de_hielo" local killcount = pc.getqf("1192") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("1192", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 1304.kill begin local Reward = 5 local Achievement = "Tigre_fantasma" local killcount = pc.getqf("1304") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("1304", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 1901.kill begin local Reward = 4 local Achievement = "9_colas" local killcount = pc.getqf("1901") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("1901", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 2091.kill begin local Reward = 3 local Achievement = "Reina_araña" local killcount = pc.getqf("2091") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("2091", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 2206.kill begin local Reward = 4 local Achievement = "Jefe_logros" local killcount = pc.getqf("2206") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("2206", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 2191.kill begin local Reward = 5 local Achievement = "Tortuga_del_desierto" local killcount = pc.getqf("2191") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("2191", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 692.kill begin local Reward = 3 local Achievement = "Orco_elite" local killcount = pc.getqf("692") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("692", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 693.kill begin local Reward = 5 local Achievement = "Orco_renacido" local killcount = pc.getqf("693") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("693", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end --Item shop--- when 50129.use begin say_title ( "Obten puntos logro") local actual_achievement_points = pc . getqf ( "achievement_points" ) local p = select ( "Obten 200 puntos logro" ) if p == 1 then local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points + 200 ) say ( "Enorabuena tienes 200 logros mas" ) say ( "Disfrutalos!" ) item.remove ( "50129", 1 ) end end when 50130.use begin say_title ( "Obten puntos logro") local actual_achievement_points = pc . getqf ( "achievement_points" ) local p = select ( "Obten 100 puntos logro" ) if p == 1 then local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points + 100 ) say ( "Enorabuena tienes 100 logros mas" ) say ( "Disfrutalos!" ) item.remove ( "50130", 1 ) end end when 50131.use begin say_title ( "Obten puntos logro") local actual_achievement_points = pc . getqf ( "achievement_points" ) local p = select ( "Obten 50 puntos logro" ) if p == 1 then local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points + 50 ) say ( "Enorabuena tienes 50 logros mas" ) say ( "Disfrutalos!" ) item.remove ( "50131", 1 ) end end when 50132.use begin say_title ( "Obten puntos logro") local actual_achievement_points = pc . getqf ( "achievement_points" ) local p = select ( "Obten 25 puntos logro" ) if p == 1 then local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points + 25 ) say ( "Enorabuena tienes 25 logros mas" ) say ( "Disfrutalos!" ) item.remove ( "50132", 1 ) end end --CANJES-- when 50115.use begin say_title ( "Canjea tus puntos logro" ) local actual_achievement_points = pc . getqf ( "achievement_points" ) local p = select ( "Caballo armado - 5 puntos" , "Caballo militar - 30 puntos" , "Bonus mediohumanos +20% por 30min - 50 puntos" , "Bonus HP +5000 por 30min - 60 puntos" , "Armadura divina - 400 logros" , "Mascota de ataque - 30 puntos" , "Mas" ) if p == 1 then if pc . getqf ( "achievement_points" ) <= 4 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 5 ) say ( "Has recibido un caballo armado" ) horse . set_level ( "11" ) horse . unsummon ( ) horse . summon ( ) pc . give_item2 ( "50052" , 1 ) return elseif p == 2 then if pc . getqf ( "achievement_points" ) <= 29 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 30 ) say ( "Has recibido un caballo militar" ) horse . set_level ( "21" ) horse . unsummon ( ) horse . summon ( ) pc . give_item2 ( "50053" , 1 ) return elseif p == 3 then if pc . getqf ( "achievement_points" ) <= 49 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 50 ) say ( "Has recibido 20% fuerza contra mediohumanos por 30min" ) affect . add_collect ( apply . ATTBONUS_HUMAN , 20 , 60 * 30 ) return elseif p == 4 then if pc . getqf ( "achievement_points" ) <= 59 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 60 ) say ( "Has recibido 5000hp por 30min" ) affect . add_collect ( apply . MAX_HP , 5000 , 60 * 30 ) return elseif p == 5 then if pc. getqf ( "achievement_points" ) <= 399 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 399 ) local armor = select ( "Armd. divina (G)" , "Armd. divina (N)" , "Armd. divina (S)" , "Armd. divina (C)" ) if armor == 1 then say ( "Has recibido la Armadura divina" ) pc . give_item2 ( "42080" , 1 ) return elseif armor == 2 then say ( "Has recibido la Armadura divina" ) pc . give_item2 ( "44080" , 1 ) return elseif armor == 3 then say ( "Has recibido la Armadura divina" ) pc . give_item2 ( "46080" , 1 ) return elseif armor == 4 then say ( "Has recibido la Armadura divina" ) pc . give_item2 ( "48080" , 1 ) return end elseif p == 6 then if pc . getqf ( "achievement_points" ) <= 29 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 29 ) say ( "Has recibido la mascota de ataque" ) pc . give_item2 ( "30312" , 1 ) return elseif p == 7 then local p2 = select ( "Leon Blanco - 40 puntos" , "Anillo experiencia - 5 puntos" , "Fuerza monstruo +20% 30min - 15 puntos" , "Velocidad movimiento +25% 30min - 10 puntos" , "Mascota de defensa - 25 puntos" , "Cuantos logros tengo?" , "Cerrar" ) if p2 == 1 then if pc . getqf ( "achievement_points" ) <= 39 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 40 ) say ( "Has recibido un leon blanco disfrtualo, no se acaba" ) pc . give_item2 ( "50110" , 1 ) return elseif p2 == 2 then if pc . getqf ( "achievement_points" ) <= 4 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 5 ) say ( "Disfruta de un anillo de experiencia" ) pc . give_item2 ( "71015" , 1 ) return elseif p2 == 3 then if pc . getqf ( "achievement_points" ) <= 14 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 15 ) say ( "Has recibido 20% fuerza monstruo por 30min" ) affect . add_collect ( apply . ATTBONUS_MONSTER , 20 , 60 * 30 ) return elseif p2 == 4 then if pc . getqf ( "achievement_points" ) <= 9 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 10 ) say ( "Has recibido 25% velo.movimiento por 30min" ) affect . add_collect ( apply . MOV_SPEED , 25 , 60 * 30 ) return elseif p2 == 5 then if pc . getqf ( "achievement_points" ) <= 24 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 25 ) say ( "Has recibido la mascota de defensa" ) pc . give_item2 ( "71124" , 1 ) return elseif p2 == 6 then local Reward = 0 local Achievement = "Ver_tus_logros" local killcount = pc.getqf("logros") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") elseif p2 == 7 then return end end end --METINS when 8013.kill begin local Reward = 8 local Achievement = "Metin_muerte" local killcount = pc.getqf("8013") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("8013", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_destruido#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 8016.kill begin local Reward = 5 local Achievement = "Metin_demonio" local killcount = pc.getqf("8016") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("8016", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_destruido#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 8012.kill begin local Reward = 6 local Achievement = "Metin_caida" local killcount = pc.getqf("8012") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("8012", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_destruido#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 8015.kill begin local Reward = 5 local Achievement = "Metin_dureza" local killcount = pc.getqf("8015") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("8015", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_destruido#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 8026.kill begin local Reward = 2 local Achievement = "Metin_85" local killcount = pc.getqf("8026") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("8026", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_destruido#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end when 8027.kill begin local Reward = 3 local Achievement = "Metin_90" local killcount = pc.getqf("8027") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("8027", killcount + 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_destruido#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") end --LEVELS when login or levelup with pc.get_level() >= 15 and pc.getqf("Level15") != 1 begin local Reward = 2 local Achievement = "Level_15" local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("Level15", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_alcanzado%".. actual_achievement_points + Reward .."") end when login or levelup with pc.get_level() >= 30 and pc.getqf("Level30") != 1 begin local Reward = 2 local Achievement = "Level_30" local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("Level30", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_alcanzado%".. actual_achievement_points + Reward .."") end when login or levelup with pc.get_level() >= 40 and pc.getqf("Level40") != 1 begin local Reward = 3 local Achievement = "Level_40" local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("Level40", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_alcanzado%".. actual_achievement_points + Reward .."") end when login or levelup with pc.get_level() >= 50 and pc.getqf("Level50") != 1 begin local Reward = 4 local Achievement = "Level_50" local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("Level50", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_alcanzado%".. actual_achievement_points + Reward .."") end when login or levelup with pc.get_level() >= 75 and pc.getqf("Level75") != 1 begin local Reward = 5 local Achievement = "Level_75" local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("Level75", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_alcanzado%".. actual_achievement_points + Reward .."") end when login or levelup with pc.get_level() >= 85 and pc.getqf("Level85") != 1 begin local Reward = 10 local Achievement = "Level_85" local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("Level85", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_alcanzado%".. actual_achievement_points + Reward .."") end when login or levelup with pc.get_level() >= 90 and pc.getqf("Level90") != 1 begin local Reward = 25 local Achievement = "Level_90" local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("Level90", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_alcanzado%".. actual_achievement_points + Reward .."") end when login or levelup with pc.get_level() >= 95 and pc.getqf("Level95") != 1 begin local Reward = 50 local Achievement = "Level_95" local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("Level95", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_alcanzado%".. actual_achievement_points + Reward .."") end when login or levelup with pc.get_level() >= 99 and pc.getqf("Level99") != 1 begin local Reward = 100 local Achievement = "Level_99" local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("Level99", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_alcanzado%".. actual_achievement_points + Reward .."") end --CHECK EQUIP when login begin loop_timer("check_eq", 10) end when check_eq.timer begin local russi = pc.get_armor() local waffe = pc.get_weapon() local actual_achievement_points = pc.getqf("achievement_points") local Reward = 5 if russi==11299 and pc.getqf("achievement_ssp") != 1 then pc.setqf("achievement_ssp", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement Armadura negra+9%".. actual_achievement_points + Reward .."") elseif russi==11499 and pc.getqf("achievement_swa") != 1 then pc.setqf("achievement_swa", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement Armadura negra+9%".. actual_achievement_points + Reward .."") elseif russi==11699 and pc.getqf("achievement_mpp") != 1 then pc.setqf("achievement_mpp", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement Armadura negra+9%".. actual_achievement_points + Reward .."") elseif russi==11899 and pc.getqf("achievement_sk") != 1 then pc.setqf("achievement_sk", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement Armadura negra+9%".. actual_achievement_points + Reward .."") elseif waffe==189 and pc.getqf("achievement_gifti") != 1 then pc.setqf("achievement_gifti", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement Giftschwert+9%".. actual_achievement_points + Reward .."") elseif waffe==199 and pc.getqf("achievement_lowenschw.") != 1 then pc.setqf("achievement_lowenschw.", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement Löwenschwert+9%".. actual_achievement_points + Reward .."") elseif waffe==5129 and pc.getqf("achievement_orchiglocke") != 1 then pc.setqf("achievement_orchiglocke", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement Orchideenglocke+9%".. actual_achievement_points + Reward .."") elseif waffe==2179 and pc.getqf("achievement_krahenstahl") != 1 then pc.setqf("achievement_krahenstahl", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement Krähenstahlbogen+9%".. actual_achievement_points + Reward .."") elseif waffe==1139 and pc.getqf("achievement_teufelsflugenchak") != 1 then pc.setqf("achievement_teufelsflugenchak", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement Teufelsflügel-Chakram+9%".. actual_achievement_points + Reward .."") elseif waffe==3169 and pc.getqf("achievement_Grolli") != 1 then pc.setqf("achievement_Grolli", 1) pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement Grollschwert+9%".. actual_achievement_points + Reward .."") end end end end Y para que no os quedeis simplemente metiendo la quest y ya ta os voi a explicar como funciona: 1 - Lo mas importante de los logros es que cuando alcanzas uno (por ejemplo matar al jefe orco) te suma puntos mediante un pc.setqf: when 691.kill begin local Reward = 2 pc.setqf("achievement_points", actual_achievement_points + Reward) Como veis ahí al jefe orco (mob de id 691) le asigna los puntos que vale con local Reward = 2 y luego te suma 2 puntos con el pc.setqf("achievement_points", actual_achievement_points + Reward (el reward en este caso seria un +2). Por lo tanto si quereis añadir otro mob a la lista de logros solo tendreis que hacer lo siguiente: when idmob.kill begin local Reward = puntos -- Poneis cuantos puntos quereis que os de local Achievement = "Nombre del mob que saldra en el cliente" local killcount = pc.getqf("idmob") -- Se usa para que el juego lleve la cuenta de cuantas veces lo mataste local actual_achievement_points = pc.getqf("achievement_points") -- Calcula cuantos puntos tenes pc.setqf("693", killcount + 1) -- Aqui os suma 1 al numero de ese mob que llevais pc.setqf("achievement_points", actual_achievement_points + Reward) -- aqui te suma tus puntos por matarlo cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") -- Con esto te saldra la ventana en el cliente diciendo que lo mataste y cuantos puntos tenes end Ahora os enseñare como hacer los canjes. En mi caso los canjes se hacen mediante un item, pero vosotros podeis hacerlo como querais simplement cambiando el when iditem.use por un when npc.chat."Canje de Logros" o como os apetezca. Veamos como tengo yo los canjes: when 50115.use begin say_title ( "Canjea tus puntos logro" ) local actual_achievement_points = pc . getqf ( "achievement_points" ) local p = select ( "Caballo armado - 5 puntos" , "Caballo militar - 30 puntos" , "Bonus mediohumanos +20% por 30min - 50 puntos" , "Bonus HP +5000 por 30min - 60 puntos" , "Armadura divina - 400 logros" , "Mascota de ataque - 30 puntos" , "Mas" ) if p == 1 then if pc . getqf ( "achievement_points" ) <= 4 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 5 ) say ( "Has recibido un caballo armado" ) horse . set_level ( "11" ) horse . unsummon ( ) horse . summon ( ) pc . give_item2 ( "50052" , 1 ) return elseif p == 2 then if pc . getqf ( "achievement_points" ) <= 29 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 30 ) say ( "Has recibido un caballo militar" ) horse . set_level ( "21" ) horse . unsummon ( ) horse . summon ( ) pc . give_item2 ( "50053" , 1 ) return elseif p == 3 then if pc . getqf ( "achievement_points" ) <= 49 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 50 ) say ( "Has recibido 20% fuerza contra mediohumanos por 30min" ) affect . add_collect ( apply . ATTBONUS_HUMAN , 20 , 60 * 30 ) return elseif p == 4 then if pc . getqf ( "achievement_points" ) <= 59 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 60 ) say ( "Has recibido 5000hp por 30min" ) affect . add_collect ( apply . MAX_HP , 5000 , 60 * 30 ) return elseif p == 5 then if pc. getqf ( "achievement_points" ) <= 399 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 399 ) local armor = select ( "Armd. divina (G)" , "Armd. divina (N)" , "Armd. divina (S)" , "Armd. divina (C)" ) if armor == 1 then say ( "Has recibido la Armadura divina" ) pc . give_item2 ( "42080" , 1 ) return elseif armor == 2 then say ( "Has recibido la Armadura divina" ) pc . give_item2 ( "44080" , 1 ) return elseif armor == 3 then say ( "Has recibido la Armadura divina" ) pc . give_item2 ( "46080" , 1 ) return elseif armor == 4 then say ( "Has recibido la Armadura divina" ) pc . give_item2 ( "48080" , 1 ) return end elseif p == 6 then if pc . getqf ( "achievement_points" ) <= 29 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 29 ) say ( "Has recibido la mascota de ataque" ) pc . give_item2 ( "30312" , 1 ) return elseif p == 7 then local p2 = select ( "Leon Blanco - 40 puntos" , "Anillo experiencia - 5 puntos" , "Fuerza monstruo +20% 30min - 15 puntos" , "Velocidad movimiento +25% 30min - 10 puntos" , "Mascota de defensa - 25 puntos" , "Cuantos logros tengo?" , "Cerrar" ) if p2 == 1 then if pc . getqf ( "achievement_points" ) <= 39 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 40 ) say ( "Has recibido un leon blanco disfrtualo, no se acaba" ) pc . give_item2 ( "50110" , 1 ) return elseif p2 == 2 then if pc . getqf ( "achievement_points" ) <= 4 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 5 ) say ( "Disfruta de un anillo de experiencia" ) pc . give_item2 ( "71015" , 1 ) return elseif p2 == 3 then if pc . getqf ( "achievement_points" ) <= 14 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 15 ) say ( "Has recibido 20% fuerza monstruo por 30min" ) affect . add_collect ( apply . ATTBONUS_MONSTER , 20 , 60 * 30 ) return elseif p2 == 4 then if pc . getqf ( "achievement_points" ) <= 9 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 10 ) say ( "Has recibido 25% velo.movimiento por 30min" ) affect . add_collect ( apply . MOV_SPEED , 25 , 60 * 30 ) return elseif p2 == 5 then if pc . getqf ( "achievement_points" ) <= 24 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 25 ) say ( "Has recibido la mascota de defensa" ) pc . give_item2 ( "71124" , 1 ) return elseif p2 == 6 then local Reward = 0 local Achievement = "Ver_tus_logros" local killcount = pc.getqf("logros") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") elseif p2 == 7 then return end end end *Si os fijais la ultima opcion de la tienda de canjes te permite ver tus logros, para ello le hice un logro que te sume 0 puntos pero que te enseña cuantos tienes: elseif p2 == 6 then local Reward = 0 local Achievement = "Ver_tus_logros" local killcount = pc.getqf("logros") local actual_achievement_points = pc.getqf("achievement_points") pc.setqf("achievement_points", actual_achievement_points + Reward) cmdchat("achievement ".. Achievement .."_derrotado#".. killcount + 1 .."%".. actual_achievement_points + Reward .."") Asi que si necesitais hacer vuestra opcion de ver logros ahi teneis Tal como eso son todos los canjes, si quereis hacer vuestros propios canjes os hago aqui un pequeño script de canje para explicaros como seria: when 20095.chat."Canjear mis logros" begin say_title("Canjear mis logros") say("") say("Hola jugador, si tienes logros") say("yo te los puedo cambiar por cositas.") say("") say("Si no tienes intenta conseguir alguno") say("porque merece la pena") say("") say_reward("Quieres canjear tus punots?") local canje = select ("Si" , "No") if canje == 1 then say_title("Canjes de logros") say("") say("Elige lo que quieras") local elegir = select ("Quinto bonus - 3 logros" , "Añadir 6-7 bonus - 4 logros" , "Cambiar 6-7 bonus - 5 logros" , "Caballo armado - 6 logros" , "Caballo militar - 8 logros" , "Cerrar") if elegir == 1 then if pc . getqf ( "achievement_points" ) <= 2 then chat( "Lo siento necesitas mas puntos" ) return end pc.give_item2("70024", 1) local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 3 ) return elseif elegir == 2 then if pc . getqf ( "achievement_points" ) <= 3 then chat( "Lo siento necesitas mas puntos" ) return end pc.give_item2("71051", 1) local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 4 ) return elseif elegir == 3 then if pc . getqf ( "achievement_points" ) <= 4 then say ( "Lo siento necesitas mas puntos" ) return end pc.give_item2("71052", 1) local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 5 ) return elseif elegir == 4 then if pc . getqf ( "achievement_points" ) <= 5 then chat( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 6 ) chat ( "Has recibido un caballo armado" ) horse . set_level ( "11" ) horse . unsummon ( ) horse . summon ( ) pc . give_item2 ( "50052" , 1 ) return elseif elegir == 5 then elseif p == 2 then if pc . getqf ( "achievement_points" ) <= 7 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 8 ) chat( "Has recibido un caballo militar" ) horse . set_level ( "21" ) horse . unsummon ( ) horse . summon ( ) pc . give_item2 ( "50053" , 1 ) return elseif elegir == 6 then return end elseif canje == 2 then return end end Este script es un pequeño regalo para vosotros, lo hice ahora para que podais usar otro si no quereis el que tenia en el extasis. *Para meterla en vuestra quest podeis quitar mi tienda de canjes y pegar esta si quereis, o hacerla como quest separada. Por ultimo os explicare como funcionan los canjes con un ejemplo: local p = select ( "Caballo armado - 5 logros") if p == 1 then if pc . getqf ( "achievement_points" ) <= 4 then say ( "Lo siento necesitas mas puntos" ) return end local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 5 ) say ( "Has recibido un caballo armado" ) horse . set_level ( "11" ) horse . unsummon ( ) horse . summon ( ) pc . give_item2 ( "50052" , 1 ) return Empieza con un local = select para que escojais vuestro premio y os aconsejo que pongais ahi cuantos logros cuesta como hice yo. Luego puse una restriccion para que si teneis menos puntos que los que pide el item no os deje comprarlo: if pc . getqf ( "achievement_points" ) <= 2 then chat( "Lo siento necesitas mas puntos" ) return end Funciona de la siguiente manera: donde pone <= 2 teneis que poner un punto menos que los que pide, ya que eso dice que si tienes esos puntos o menos no te deje comprar. Despues del return end ya solo teneis que poner el comando para que os quite los puntos que es este: local actual_achievement_points = pc . getqf ( "achievement_points" ) pc . setqf ( "achievement_points" , actual_achievement_points - 5 ) --Poneis ahi los que quereis que quite Y lo que quereis que os dea justo debajo de esas dos lineas: pc.give_item2("71052", 1) --- Ahi poned lo que quereis que dea Y eso es todo zoneros, que disfruteis del sistema de logros !!! Creditos: al creador del sistema (que no es mio xd) y a mi por la parte de la quest mia y la traduccion de la original.
  19. Oks grax akroma, es que no puedo encender el local pa hacer la foto y puse una de todas.
  20. Hola a todos, hace tiempo implemente las armors de mi coleguin baso (sus 3 sets que le robaron del millenium-world) y me di cuenta de que la cara del guerrero y del sura no se veían, y aunque sé que muchos se dieron cuenta de por que y lo arreglaron aquí os dejo adjuntos los 2 archivos que hacen falta para que se vean por si no lo teneis arreglado Ya les hice una foto Y las lineas del xml de los 2 archivos de la textura de la cara: <File archivedPath="d:/ymir work/pc/warrior/warrior_face.jpg" type="0"><![CDATA[pc_descompiladoymir workpcwarriorwarrior_face.jpg]]></File> <File archivedPath="d:/ymir work/pc/sura/sura_face.jpg" type="0"><![CDATA[pc_descompiladoymir workpcsurasura_face.jpg]]></File> Eso es todo un saludo :wiii: carasbaso.zip
  21. Vigila el copy paste!!! Como traes unas armas que hizo strach uno de los admins del foro, pa eso ya las ponia el
  22. Chicos creo que estais exagerando un poco vuestra postura, metin2 ha cambiado y nosotros también cambiamos desde la primera vez que lo jugamos, pero no por ello tienen que ser mejores los tiempos antiguos que los de ahora. Yo he pasado grandes momentos cuando empecé en el .es, pero los geniales momentos que pasé con mis amigos en servidores privados ya sabiendo de todo acerca de metin2 no son ni mucho menos peores que los que pasé cuando no sabía nada sobre el juego. Esta es mi opinión (que no teneis por que compartir por supuesto) pero yo sigo pasandomelo tan bien como siempre con mis amigos, ya que no me importa tanto el server (oficial, privado, facil, dificil...) que juegue sino la gente con la que juegue y con la que lo pase bien
  23. Para inaugurar la seccion os dejo un video del primer desafio de los tres que llevo hechos para Metin2Elements: *Actualmente ya todos los mobs del mapa son mobs nuevos, pero en este video aun estaba de pruebas asi que son perros xd
  24. Hola a todos, por peticion de Thanatos hice esta quest para subirte las habs a P, esta perfectamente probada y funciona perfectamente, solo ponedle la id del item que querais usar. Nueva quest by Noa, super reducida, detecta sola tu raza y profesion y te sube las habs a P: quest perfect begin state start begin when 30100.use begin table.foreachi(special.active_skill_list[pc.get_job()+1][pc.get_skill_group()],function(r,skill) pc.set_skill_level(skill,59) end) chat("Has recibido tus P") item.remove() end end end Y aqui la vieja en spoiler por si alguien la quiere seguir usando:
  25. Mi creador de querys favorito: lo dejo adjunto CreatoreQuery_By_ChrisMetal.exe.zip
×
×
  • Crear nuevo...