Jump to content
Sign in to follow this  

Recommended Posts

¡Bienvenidos nuevamente, cracks! 👋

 

Espero que se encuentren muy bien porque voy a lanzar un reto.

Antes de eso, voy a presentarme de nuevo: soy Camilo Martínez, y conozco Metin2 como desde 2009. Nunca fui bueno, así que me dio la curiosidad de saber cómo se montaba ese juego localmente para acabar el juego y de paso volverme GM. Luego de aprender lo básico de los servidores, me especialicé en quest/lua. Entre esos años han pasado muchas cosas y ahora no puedo dar detalles.

Mi experiencia con las quest: llevo 3 años programando quests. He visto todos los posts de quest de este foro y he resuelto todas las quest (para mí mismo) que han pedido. También he analizado y creado quests muy grandes turcas e incluso he aprendido de trabajos muy bien elaborados. Empecé con un say("Hola mundo") y ahora puedo crear mundos con este lenguaje. He aportado quests en este foro que han llegado a tener buena fama, e incluso las he visto en servidores. En total diría que he analizado más de 1000 quests con sus correcciones. Mi valor agregado con las quest aparte de crear cosas exclusivas es personalizarlas, es decir, que solo cambiando números como "nivel_mision = 50" puedas cambiarla según tus necesidades sin tener que modificar código abajo. También me enfoqué en crearlas de manera profesional, y hasta acá llega mi avance.

 

Mi objetivo del reto es obviamente compartir conocimiento para usar este exquisito programa creado por todos para sus servidores o lo que quieran si así lo desean.

Les estaré ayudando, dando pistas y trucos, corrigiendo errores.

Yo no daré la solución sino ustedes.

No hay fecha de caducidad porque esto va a ser para ustedes, y quizá pueda haber premios luego...

Este post puede quedar muerto, no pasa nada. La intención es lo importante. 

Lo que deben hacer es comentar haciendo preguntas, poniendo código en lua, pidiendo pistas, etc. Así es como veo la participación.

 

Reto #1

Elaborar una quest donde:

- Un GM desde un NPC pueda dar un objeto X y una cantidad Y a todos los personajes que se encuentren en el mapa donde estás.

 

¡Let's gooo! 💯

Share this post


Link to post
Share on other sites

¡UP!

¿Alguien? ¿Quién dijo yo?

¿Quieren que la resuelva y explique todo todo o quieren participar aportar?

Elijan, de las dos maneras se aprende muy bien

¿Para qué podría servir esta quest?

Es muy similar a la del evento OX de dar un ítem de bienvenida, solo que esa función va por src. Acabo de dar una pista.

Muy bien, esto puede servir para eso, dar un objeto por participación en un evento, por ejemplo un evento de jefes. Un GM pone que les de perlas rojas por decir, a todos los jugadores que estén participando.

 

Esto lo hago sin pedir nada a cambio, aprovechen puesss!

Fuegoooooooo! jejeje

Share this post


Link to post
Share on other sites
quest regalar_items begin
	state start begin
		when 20095.chat."GM: Regalar ítems" with pc.is_gm() begin
			say_title(mob_name(npc.get_race()))
			say()
			say("¿Quieres regalar ítems a todos los")
			say("personajes que se encuentren en")
			say("tu mapa?")
			say("Digita el vnum")
			local vnum = math.ceil(tonumber(input()))
			if vnum == 0 or vnum == nil then
  				return
  			end
			say_title(mob_name(npc.get_race()))
			say()
			say("Digita la cantidad")
			local count = math.ceil(tonumber(input()))
			if count == 0 or count == nil then
  				return
  			end
			-- ya tenemos el ítem y la cantidad, ahora a darles a todos los pjs del mapa este objeto...
		end
	end
end

 

Este es el "esqueleto"

La parte de 

local vnum = math.ceil(tonumber(input()))

es una validación, o sea, evitar que metan ciertos datos que no son, como los decimales. El math.ceil() convierte el número en entero.

Ahora para darle los ítems a todos los personajes? ese es el reto, let's go!

Share this post


Link to post
Share on other sites

Recien me ando interesando de a poco en como funcionan las quest, , para darle el premio a todos seria algho asi creo

pc.give_item2([local vnum = math.ceil(tonumber(input())] with pc.get_map_index() == pc.is_gm() then

Share this post


Link to post
Share on other sites
hace 1 hora, Zauron dijo:

Recien me ando interesando de a poco en como funcionan las quest, , para darle el premio a todos seria algho asi creo

pc.give_item2([local vnum = math.ceil(tonumber(input())] with pc.get_map_index() == pc.is_gm() then

ufff pues bueno, muchas cosas

pc.give_item2() es una función. Esta función da los ítems, efectivamente pero recibe como parámetros el ítem y la cantidad.

pc.give_item2(item_vnum, item_count)

Al ser "pc" significa "personal character" o sea, tú mismo, tu pj. O sea que si yo pongo pc.give_item2(27001, 10) le estaré dando al propio pj 10 potas rojas pequeñas.

Por lo tanto, sí sería pc.give_item2(vnum, count) pero solo lo darías a tu propio pj.

El "with" que pusiste solo se admite en los bloques "when". El "with" se usa para separar los disparadores de las condiciones.

Es decir, si yo pongo

when login or levelup or kill with pc.get_map_index() == 21 and pc.is_gm() begin

Lo que va antes del with son los disparadores, que son "eventos" que se activan cuando suceda algo, por eso se llama "when" (cuando tal cosa suceda).

El "with" equivale a un "and" pero le cambiaron el significado para poder identificar los disparadores de las condiciones que le siguen.

Disparadores: login, levelup, kill......... cuando el pj se loguee, cuando suba de lvl o cuando mate algo

Condiciones: pc.get_map_index() == 21, pc.is_gm()........ si el pj está en el mapa de index 21, si el pj es GM.

 

Ahora sí continuando con el código, sería pc.give_item2(vnum, count)

Ahora cómo hacemos para darle a todos los pjs del mapa los ítems? 😮

Share this post


Link to post
Share on other sites

¿Qué pasó amigos?

bueno, aquí va una pista:

para poder dar los objetos a todos los pjs del mapa primero hay que tener "guardados los pjs" en una tabla ya que de alguna parte los tengo que sacar xD

Y por mi parte no usaré db para esto. Así que aquí les va el VID. El VID (Virtual ID) es "identificador virtual". Todo "character" (entiéndase como personaje, NPC, mob) tiene un VID mientras esté "activo" o "online". Todo NPC o mob tiene un VID, y si no hay, entonces es 0. Todo personaje tiene un VID, y si está desconectado pues es 0.

La función que retornan los VID son npc.get_vid() o find_pc_by_num(String nombre).

Esa fue una gran pista, así que si alguien se anima a seguir pues adelanteee!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...