Jump to content
Sign in to follow this  
chucho777

Ayuda a crear Quest porfavor

Recommended Posts

Hola amigos Quiero pedirles un favor de Que alguien me pueda Ayudar a Crear una quest de un item por ejemplo Si soy ninja o war  o sura o chaman al momento de que abra el item   por ejemplo 

abro el item si soy ninja que me de cosas de ninja  o si soy war que me de cosas de war  o si soy sura que me de cosas de sura y si soy chaman que me cosas de chaman asi  y que me Baje de nivel al 1 etc....

Espero que me puedan ayudar Gracias 

 

Share this post


Link to post
Share on other sites
quest regalar_luna begin
	state start begin
		when 40004.use begin 	--siempre que uses el item 40004 ejecutará el código
			if pc.get_job() == 0 then 		--job = 0 es el guerrero, job = 1 es ninja, job = 2 es sura, job = 3 es chaman, job = 4 es lycan
  				pc.give_item2_select(idobjeto) 		--entre parentesis metes el id del objeto, 299 en el caso de una luna+9
  			end			--end del if
		end 		--end del when
	end 		--end del state
end 		--end del quest
		
			

basicamente la idea sería esta. Luego ya lo vas modificando a tu manera con las funciones que tiene definidas el propio metin

Share this post


Link to post
Share on other sites
quest itemxraza begin
	state start begin
		when id_item.use begin --cambia aquí el ítem
			items = {
				{{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems guerrero. Solo sigue el patrón
				{{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems ninja
				{{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems sura
				{{item1, cant1}, {item2, cant2}, {item3, cant3}} --ítems chamán
			}
			pos_raza = pc.job+1
			for i = 1, table.getn(items[pos_raza]) do
				pc.give_item2(items[pos_raza][i][1], items[pos_raza][i][2])
			end
		end
	end
end

 

Share this post


Link to post
Share on other sites
hace 5 horas, TheZurka dijo:
quest regalar_luna begin
	state start begin
		when 40004.use begin 	--siempre que uses el item 40004 ejecutará el código
			if pc.get_job() == 0 then 		--job = 0 es el guerrero, job = 1 es ninja, job = 2 es sura, job = 3 es chaman, job = 4 es lycan
  				pc.give_item2_select(idobjeto) 		--entre parentesis metes el id del objeto, 299 en el caso de una luna+9
  			end			--end del if
		end 		--end del when
	end 		--end del state
end 		--end del quest
		
			

basicamente la idea sería esta. Luego ya lo vas modificando a tu manera con las funciones que tiene definidas el propio metin

Gracias los probare 

Share this post


Link to post
Share on other sites
hace 53 minutos, caanmasu dijo:
quest itemxraza begin
	state start begin
		when id_item.use begin --cambia aquí el ítem
			items = {
				{{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems guerrero. Solo sigue el patrón
				{{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems ninja
				{{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems sura
				{{item1, cant1}, {item2, cant2}, {item3, cant3}} --ítems chamán
			}
			pos_raza = pc.job+1
			for i = 1, table.getn(items[pos_raza]) do
				pc.give_item2(items[pos_raza][i][1], items[pos_raza][i][2])
			end
		end
	end
end

 

Gracias los probare

Share this post


Link to post
Share on other sites
hace 4 horas, caanmasu dijo:
quest itemxraza begin
	state start begin
		when id_item.use begin --cambia aquí el ítem
			items = {
				{{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems guerrero. Solo sigue el patrón
				{{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems ninja
				{{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems sura
				{{item1, cant1}, {item2, cant2}, {item3, cant3}} --ítems chamán
			}
			pos_raza = pc.job+1
			for i = 1, table.getn(items[pos_raza]) do
				pc.give_item2(items[pos_raza][i][1], items[pos_raza][i][2])
			end
		end
	end
end

 

Estaría bien aprender la sintaxis de los arrays, todavía voy a lo simple xD

Share this post


Link to post
Share on other sites
hace 19 horas, TheZurka dijo:

Estaría bien aprender la sintaxis de los arrays, todavía voy a lo simple xD

Jeje ok xD

 

Estas son estructuras de datos. En el caso de los arrays son de dos dimensiones (una fila) y en el caso de matrices son de tres dimensiones (filas y columnas)

array = {}

Esto es un array vacío.

array = {10}

Esto es un array con un elemento. En Lua la posición de los arrays o matrices empiezan desde 1.

Ese fue un número, pero podemos poner cualquier otro tipo de dato. Por ejemplo, pondré un array.

array = {{10}}

Esto de adentro es un array con un solo elemento. Se puede acceder al 10 así:

array[1][1]

¿Por qué? míralo de esta forma

array = {
	{10}
}

que es lo mismo. El primer elemento de array es {10} (pos 1), y la posición del 10 en ese arreglo es 1.

Otro ejemplo:

array = {
	{3, 4, 5},
	{6, 7, 8}
}

Un array dentro de otro prácticamente es una matriz porque automáticamente estás creando columnas.

Eso de arriba es lo mismo que poner:

array = { {3, 4, 5}, {6, 7, 8} }

Es un array con dos arrays adentro.

Vamos a acceder al 4:

array[1][2]

Hay una forma de entenderlo mientras uno está aprendiendo y es suponer que array[fila][columna] (esto ya no es tan así cuando es más compleja la estructura)

Entonces para acceder al 4, vas a la fila 1, columna 2

image.png

Ahora la forma genérica de la matriz quedaría:

array = {
	{1, 2, 3},
  	{4, 5, 6},
  	{7, 8, 9}
}

Por qué no se le pone la coma al final? por esto:

array = {1, 2, 3,}

Sería un error de sintaxis.

Por qué hay algunas estructuras que sí se puede poner la coma al final?

Porque es una función que retorna, o sea:

function info()
	return {
		{3, 4, 5},
		{6, 7, 8},
	}
end

Esto es válido porque si ponemos

return { {3, 4, 5}, {6, 7, 8}, }

(mira la coma después del 8 ) lo que se toma después de la coma será un "nil" o nulo, pero sí es válida la sintaxis.

¿Cómo acceso a varios elementos?

Si queremos mostrar el 3, 4 y 5 hacemos esto:

for i = 1, table.getn(array[1]) do
	chat(array[1][i])
end

table.getn() es una función que te devuelve el tamaño del array. Y al poner array[1], ¿cuántos elementos tiene? pues los elementos que tiene el primer arreglo {3, 4, 5}, o sea, 3.

No olvidar que hay que poner i = 1.

Pongo array[1] porque en el ciclo la variable es la i, que aumenta de uno en uno en este caso.

Entonces mostrará en el chat esto:

3 -- por el array[1][1]
4 -- por el array[1][2]
5 -- por el array[1][3]

Ahora explicaré el código de la quest

pos_raza = pc.job+1

En verdad la función es pc.get_job() pero en el questlib.lua se le asigna otra variable para abreviar

pc.job = pc.get_job()

Así que es lo mismo.

Puse +1 porque pc.job retorna 0, 1, 2, 3 (guerrero, ninja, sura, chamán respectivamente)

Los arreglos empiezan en 1, así que debo sumarle 1 para "cuadrar" mi arreglo.

Luego queda guerrero 1, ninja 2, sura 3, chamán 4. Que son las posiciones respectivas de mi arreglo.

Si no hago esto, simplemente no funcionará porque no existe la posición 0.

Luego en la línea

pc.give_item2(items[pos_raza][i][1], items[pos_raza][i][2])

Puse que

items[pos_raza][i][1]

accediera al array en la posición de su personaje, o sea, si es guerrero, entonces va a la primera fila.

Luego se va recorrer cada mini arreglo. Como cada mini arreglo tiene dos elementos (item, cantidad), lo que me interesa en este caso es ítem, así que elijo la primera posición

Y hago lo mismo con la cantidad. Solo le cambio la posición del mini arreglo a 2.

 

Hay una forma para ponerle posiciones arbitrariamente a los arreglos, así:

array = {
	[0] = {tu contenido},
	[1] = {tu contenido},
	[2] = {tu contenido},
	[3] = {tu contenido}
}

De esta forma al pc.job no se le sumaría 1 porque establecí las nuevas posiciones.

 

Si quieres poner que la posición sea un texto también se puede

array = {
	["un_texto"] = "hola",
	["un_numero"] = 10
}

Para acceder a "hola" solo pones

array.un_texto

y para acceder al 10 pones

array.un_numero

 

Un ejercicio en la vida real de mis quests :v 

quest_biolog = {
	["prob_elixir"] = 30,
	[0] = {
		["level_req"] = 30,
		["item_req"] = {
			["id"] = 30006,
			["count"] = 10,
			["time_delay"] = 0, --seconds
			["success_prob"] = 60,
			["monsters_drop"] = {631, 632, 633, 634},
			["prob_drop"] = 1 -- 1(%) to 500(%)
		},
		["soul_stone"] = {
			["id"] = 30220,
			["prob_drop"] = 1 -- 1(%) to 500(%)
		},
		["award"] = {
			["box"] = 50109,
			["bonus"] = {
				{
					["id"] = 8,
					["value"] = 10,
					["apply"] = true -- true: apply, false: point 
				}
			} 
		}
	},

En la última línea, después de la coma va a el elemento [1] y así con todas las misiones del biólogo pero lo voy a hacer solo con el primero.

Quiero poner el nivel que se requiere para que la misión aparezca, entonces voy al level_req = 30 así:

quest_biolog[0].level_req

Ahora quiero hacer que los mobs me dropeen el objeto (en este caso son dientes de orco), entonces debo ir a ver monsters_drop:

for i = 1, table.getn(quest_biolog[0].item_req.monsters_drop) do
	quest_biolog[0].item_req.monsters_drop[i]
end

Necesito saber cuál es el objeto a entregar y cuántos:

quest_biolog[0].item_req.id

quest_biolog[0].item_req.count

Ahora debo darle al pj los bonus permanentes:

for i = 1, table.getn(quest_biolog[0].award.bonus) do
	quest_biolog[0].award.bonus[i].id
	quest_biolog[0].award.bonus[i].value
end

Hay una bandera que dice si el bonus es apply o no, eso es otro tema.

Lo importante era saber cómo llegar a cada elemento.

Ahora si queremos hacer esto con todas las misiones:

for i = 1, table.getn(quest_biolog[0].award.bonus) do
	for j = 0, table.getn(quest_biolog) do
		quest_biolog[j].award.bonus[i].id
		quest_biolog[j].award.bonus[i].value
	end
end

que obviamente no va a suceder, solo era para el ejercicio.

En mi quest de biólogo tengo esa parte así:

			local awards = quest_biolog[pc.getqf("biolog_quest")].award
			for i = 1, table.getn(awards.bonus) do
				local attr = awards.bonus[i].id
				local value = awards.bonus[i].value
				
				if awards.bonus[i].apply == true then
					affect.add_collect(attr, value, 60*60*24*365*60)
				else
					affect.add_collect_point(attr, value, 60*60*24*365*60)
				end
			end

 

Bueno este fue más o menos el tutorial. La práctica hace al maestro. Éxitos!

Share this post


Link to post
Share on other sites
hace 39 minutos, caanmasu dijo:

Jeje ok xD

 

Estas son estructuras de datos. En el caso de los arrays son de dos dimensiones (una fila) y en el caso de matrices son de tres dimensiones (filas y columnas)

array = {}

Esto es un array vacío.

array = {10}

Esto es un array con un elemento. En Lua la posición de los arrays o matrices empiezan desde 1.

Ese fue un número, pero podemos poner cualquier otro tipo de dato. Por ejemplo, pondré un array.

array = {{10}}

Esto de adentro es un array con un solo elemento. Se puede acceder al 10 así:

array[1][1]

¿Por qué? míralo de esta forma

array = {
	{10}
}

que es lo mismo. El primer elemento de array es {10} (pos 1), y la posición del 10 en ese arreglo es 1.

Otro ejemplo:

array = {
	{3, 4, 5},
	{6, 7, 8}
}

Un array dentro de otro prácticamente es una matriz porque automáticamente estás creando columnas.

Eso de arriba es lo mismo que poner:

array = { {3, 4, 5}, {6, 7, 8} }

Es un array con dos arrays adentro.

Vamos a acceder al 4:

array[1][2]

Hay una forma de entenderlo mientras uno está aprendiendo y es suponer que array[fila][columna] (esto ya no es tan así cuando es más compleja la estructura)

Entonces para acceder al 4, vas a la fila 1, columna 2

Debes iniciar sesión para ver el contenido del enlace en esta publicación.

Ahora la forma genérica de la matriz quedaría:

array = {
	{1, 2, 3},
  	{4, 5, 6},
  	{7, 8, 9}
}

Por qué no se le pone la coma al final? por esto:

array = {1, 2, 3,}

Sería un error de sintaxis.

Por qué hay algunas estructuras que sí se puede poner la coma al final?

Porque es una función que retorna, o sea:

function info()
	return {
		{3, 4, 5},
		{6, 7, 8},
	}
end

Esto es válido porque si ponemos

return { {3, 4, 5}, {6, 7, 8}, }

(mira la coma después del 8 ) lo que se toma después de la coma será un "nil" o nulo, pero sí es válida la sintaxis.

¿Cómo acceso a varios elementos?

Si queremos mostrar el 3, 4 y 5 hacemos esto:

for i = 1, table.getn(array[1]) do
	chat(array[1][i])
end

table.getn() es una función que te devuelve el tamaño del array. Y al poner array[1], ¿cuántos elementos tiene? pues los elementos que tiene el primer arreglo {3, 4, 5}, o sea, 3.

No olvidar que hay que poner i = 1.

Pongo array[1] porque en el ciclo la variable es la i, que aumenta de uno en uno en este caso.

Entonces mostrará en el chat esto:

3 -- por el array[1][1]
4 -- por el array[1][2]
5 -- por el array[1][3]

Ahora explicaré el código de la quest

pos_raza = pc.job+1

En verdad la función es pc.get_job() pero en el questlib.lua se le asigna otra variable para abreviar

pc.job = pc.get_job()

Así que es lo mismo.

Puse +1 porque pc.job retorna 0, 1, 2, 3 (guerrero, ninja, sura, chamán respectivamente)

Los arreglos empiezan en 1, así que debo sumarle 1 para "cuadrar" mi arreglo.

Luego queda guerrero 1, ninja 2, sura 3, chamán 4. Que son las posiciones respectivas de mi arreglo.

Si no hago esto, simplemente no funcionará porque no existe la posición 0.

Luego en la línea

pc.give_item2(items[pos_raza][i][1], items[pos_raza][i][2])

Puse que

items[pos_raza][i][1]

accediera al array en la posición de su personaje, o sea, si es guerrero, entonces va a la primera fila.

Luego se va recorrer cada mini arreglo. Como cada mini arreglo tiene dos elementos (item, cantidad), lo que me interesa en este caso es ítem, así que elijo la primera posición

Y hago lo mismo con la cantidad. Solo le cambio la posición del mini arreglo a 2.

 

Hay una forma para ponerle posiciones arbitrariamente a los arreglos, así:

array = {
	[0] = {tu contenido},
	[1] = {tu contenido},
	[2] = {tu contenido},
	[3] = {tu contenido
}

De esta forma al pc.job no se le sumaría 1 porque establecí las nuevas posiciones.

 

Si quieres poner que la posición sea un texto también se puede

array = {
	"un_texto" = "hola",
	"un_numero" = 10
}

Para acceder a "hola" solo pones

array.un_texto

y para acceder al 10 pones

array.un_numero

 

Un ejercicio en la vida real de mis quests :v 

quest_biolog = {
	["prob_elixir"] = 30,
	[0] = {
		["level_req"] = 30,
		["item_req"] = {
			["id"] = 30006,
			["count"] = 10,
			["time_delay"] = 0, --seconds
			["success_prob"] = 60,
			["monsters_drop"] = {631, 632, 633, 634},
			["prob_drop"] = 1 -- 1(%) to 500(%)
		},
		["soul_stone"] = {
			["id"] = 30220,
			["prob_drop"] = 1 -- 1(%) to 500(%)
		},
		["award"] = {
			["box"] = 50109,
			["bonus"] = {
				{
					["id"] = 8,
					["value"] = 10,
					["apply"] = true -- true: apply, false: point 
				}
			} 
		}
	},

En la última línea, después de la coma va a el elemento [1] y así con todas las misiones del biólogo pero lo voy a hacer solo con el primero.

Quiero poner el nivel que se requiere para que la misión aparezca, entonces voy al level_req = 30 así:

quest_biolog[0].level_req

Ahora quiero hacer que los mobs me dropeen el objeto (en este caso son dientes de orco), entonces debo ir a ver monsters_drop:

for i = 1, table.getn(quest_biolog[0].item_req.monsters_drop) do
	quest_biolog[0].item_req.monsters_drop[i]
end

Necesito saber cuál es el objeto a entregar y cuántos:

quest_biolog[0].item_req.id

quest_biolog[0].item_req.count

Ahora debo darle al pj los bonus permanentes:

for i = 1, table.getn(quest_biolog[0].award.bonus) do
	quest_biolog[0].award.bonus[i].id
	quest_biolog[0].award.bonus[i].value
end

Hay una bandera que dice si el bonus es apply o no, eso es otro tema.

Lo importante era saber cómo llegar a cada elemento.

Ahora si queremos hacer esto con todas las misiones:

for i = 1, table.getn(quest_biolog[0].award.bonus) do
	for j = 0, table.getn(quest_biolog) do
		quest_biolog[j].award.bonus[i].id
		quest_biolog[j].award.bonus[i].value
	end
end

que obviamente no va a suceder, solo era para el ejercicio.

En mi quest de biólogo tengo esa parte así:

			local awards = quest_biolog[pc.getqf("biolog_quest")].award
			for i = 1, table.getn(awards.bonus) do
				local attr = awards.bonus[i].id
				local value = awards.bonus[i].value
				
				if awards.bonus[i].apply == true then
					affect.add_collect(attr, value, 60*60*24*365*60)
				else
					affect.add_collect_point(attr, value, 60*60*24*365*60)
				end
			end

 

Bueno este fue más o menos el tutorial. La práctica hace al maestro. Éxitos!

Gracias 

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...