Ir a contenido

Foto

[Minicurso] MySQL en quest


  • Please log in to reply
8 Respuesta(s) a este Tema
Metin2

#1
ElRaulxX

ElRaulxX

    Forero

  • Quest Master
  • MarcarMarcarMarcarMarcarMarcar
  • 97 Mensaje(s)
  • Sexo:Masculino
  • Localización:Barcelona, España

He visto que muchos preguntáis como utilizar querys de sql en quest. Le dije a keko que haría este mini tutorial, y aquí lo tenéis.

Primero de todo decir que esta función no viene por defecto en el metin y es por eso que algunos usuarios la han hecho ellos mismos, pues la utilidad de esta función es muy grande.
Tengo contado tres personas que han publicado esta función: Hanashi, mijago y yuko. Quizá han sido publicadas más, pero solamente recuerdo estas.
A mi parecer, la más practica que he visto hasta ahora es la última versión de mijago y es la que utilizaremos en este Minicurso.


Primero de todo, debemos declarar estas dos funciones en nuestro questlib.lua

Spoiler


[color=#ff0000;]ATENCION! Si en nuestro servidor tenemos instalado la versión 5.5 de MySQL debemos borrar esto:[/color]

Please Login or Register to see this Hidden Content

[color=#ff0000;]y quitar las -- de aquí:[/color]

Please Login or Register to see this Hidden Content

[color=#ff0000;]La razón es simple, la sintaxis de esta versión de MySQL es distinta.[/color]

Ahora tenemos que añadir en quest_functions la función:

Please Login or Register to see this Hidden Content

La función split no hace falta añadirla en este archivo ya que se utiliza internamente en mysql_query.

Bien, ahora ya tenemos instalada la función de mysql.
Ahora lo más importante: ¿cómo se usa?

Tenemos esta tabla:
Imagen enviada
Como vemos, la tabla se llama 'tablatest' y se encuentra en la db 'test'. Esta tabla posee tres campos, que son 'campo1', 'campo2' y 'campo3'.
Con la función mysql_query llamaremos, añadiremos o modificaremos valores de esta tabla. La sintaxis de mysql_query es la misma que cualquier otra query de mysql que utilicemos (de navicat, php...). Sino sabéis la sintaxis os aconsejo que miréis cursos para aprender. La sintaxis es muy sencilla y no tiene complicación, solo se necesita mirar un poco y lo dominaréis perfectamente. Existen miles de cursos y tutoriales por internet de mysql, tan solo debéis buscarlos.

[color=#ff0000;]ATENCION: Para utilizar sentencias que retornen algún tipo de valor (select) debemos asignar la función a una variable. Las demás (update, insert into...) tan solo tenemos que utilizarla como cualquier otra función.[/color]

Bien, empecemos. Comenzaremos llamando toda la tabla.

Please Login or Register to see this Hidden Content

Esto almacenará en la variable la siguiente tabla:

Please Login or Register to see this Hidden Content

Teniendo esto en cuenta, y sabiendo un poco de tablas y arrays en lua está todo solucionado.
Queremos mostrar en pantalla 'texto5' que está almacenado en nuestra tabla. Lo llamaremos de esta manera.

Please Login or Register to see this Hidden Content

Ahora queremos llamar 'texto9':

Please Login or Register to see this Hidden Content

Ahora queremos llamar 'texto1':

Please Login or Register to see this Hidden Content

Aquí no voy a ponerme a explicar arrays porqué no trata de eso el curso, pero creo que mirando los ejemplos y pensando un poco lo entenderéis.

Ahora también podemos añadir una condición:

Please Login or Register to see this Hidden Content

Esto almacenará en la variable la siguiente tabla:

Please Login or Register to see this Hidden Content

Y ahora podemos llamarlo de la misma manera que en el ejemplo anterior.
Esto nos mostrará 'texto6' en pantalla.

Please Login or Register to see this Hidden Content

Y para hacerla verdaderamente útil podemos llamar a variables o funciones.

Please Login or Register to see this Hidden Content

Algo importante que hay que decir es que esta función siempre crea tablas y por lo tanto siempre deberemos llamarlo de la misma manera, aunque haya seleccionado un solo valor.

Please Login or Register to see this Hidden Content

Creo que con estos ejemplos ya podéis ver como funciona un select (la verdad es que es bastante difícil explicarlo teniendo en cuenta que no tenéis conocimientos de tablas, pero al menos lo he intentado xd). La mejor manera que veáis su uso es que vayáis haciendo pruebas en navicat y luego trasladarlo a una quest.

Y ahora la segunda parte.
Si queremos añadir nuevos valores lo hacemos de esta manera:

Please Login or Register to see this Hidden Content

o como hemos hecho antes:

Please Login or Register to see this Hidden Content

Y nos quedará la tabla así:
Imagen enviada

Y si queremos modificar valores:

Please Login or Register to see this Hidden Content

Please Login or Register to see this Hidden Content

Y nos quedaría esto:
Imagen enviada

Sabiendo de mysql no debería ser ninguna complicación, el problema es que no sepáis :huh:
Cuando publiquemos el capítulo de arrays y tablas lo entenderéis todo mejor, no os preocupéis.

Y creo que eso es todo. Saludos!


  • A fuuton97, Apocalipto, SeMa™ y a 6 más les gusta esto

Imagen enviada


Imagen enviada

Imagen enviada


#2
Ryen

Ryen

    Forero Experto

  • Modelador 3D
  • MarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcar
  • 2.374 Mensaje(s)
  • Skype:mt2chansk
  • Sexo:Masculino
  • Localización:<DOCTYPE html>
Dios apotazo hay van tus gracias :D

Diseño Web

RyenWorks

<!DOCTYPE html>
<html lang="es">
 <head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="http://metin2zone.net/index.php?/user/1065-ryen/">
<title>RyenWorks</title>
</head>
<body>
<section id="webdesign">
<div class="meitn2zone">
<p>Professional web devloper</p><br />
</div>

</section>
</body>
<footer>
<p>RyenWorks2016 &copy; All Right Reserverd </p>
</footer>
</html>

#3
KeKo

KeKo

    Forero Experto

  • Quest Master
  • MarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcar
  • 1.475 Mensaje(s)
Al final la hiciste :raisins: Muy buena guia, mezclando mysql con quest se pueden hacer un monton de cosas útiles y gracias a tu minicurso sera mucho mas facil para muchos ^^
  • Kompulsor likes this

#4
PACI

PACI

    Forero Experto

  • Developer
  • MarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcar
  • 1.621 Mensaje(s)
  • Sexo:Indefinido
Si por ejemplo, hiciese: local a = select("Triton", "Baron", "Salir") if a == 1 then mysql_query("UPDATE player.item_proto SET refine_item='270' WHERE vnum='169'") elseif a == 2 then mysql_query("UPDATE player.item_proto SET refine_item='260' WHERE vnum='169'") end Entonces, haria como si el jugador escogiese la arma que quisiese obtener despues de transformar la primera, me equivoco?

"Wash the poison from of my skin, show me how to be whole again."

"I wanna heal, I wanna feel like I'm close to something real."

"I don't know how I got this way, I'll never be alright."

_________________________________________________________________________________________________________________________

"My tea's gone cold, I'm wondering why I got out of bed at all. The morning rain clouds up my window, and I can't see at all."

"I guess words are a mothafucka, they can be great, or they can degrade, or even worse they can teach hate."

"Now you shut up bitch! I am talkin'! Thought I was full of horseshit and now you fuckin' worship the ground in which I am walkin'!"

"But no matter how many fish in the sea, it'd be so empty without me."


#5
KeKo

KeKo

    Forero Experto

  • Quest Master
  • MarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcar
  • 1.475 Mensaje(s)

Si por ejemplo, hiciese:

local a = select("Triton", "Baron", "Salir")
if a == 1 then
mysql_query("UPDATE player.item_proto SET refine_item='270' WHERE vnum='169'")
elseif a == 2 then
mysql_query("UPDATE player.item_proto SET refine_item='260' WHERE vnum='169'")
end

Entonces, haria como si el jugador escogiese la arma que quisiese obtener despues de transformar la primera, me equivoco?


No existe ningun refine_item si no refined_vnum en el item_proto (aunque imagino que seria solo un ejemplo) pero sí que cambiaría al arma a la que forjaria con esa query.

Sin embargo, no estoi seguro de que se pueda cambiar el campo refined_vnum sin tener que hacer un reboot despues en el servidor aunque sea via mysql_query, sería cosa de probarlo.

#6
PACI

PACI

    Forero Experto

  • Developer
  • MarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcar
  • 1.621 Mensaje(s)
  • Sexo:Indefinido

No existe ningun refine_item si no refined_vnum en el item_proto (aunque imagino que seria solo un ejemplo) pero sí que cambiaría al arma a la que forjaria con esa query.

Sin embargo, no estoi seguro de que se pueda cambiar el campo refined_vnum sin tener que hacer un reboot despues en el servidor aunque sea via mysql_query, sería cosa de probarlo.

Entonces no hay manera de hacer eso sin tener que dar reboot ?
O crear por ejemplo una 2ª columna de refined_vnum y por quest hacer ese tipo de seleccion ?

"Wash the poison from of my skin, show me how to be whole again."

"I wanna heal, I wanna feel like I'm close to something real."

"I don't know how I got this way, I'll never be alright."

_________________________________________________________________________________________________________________________

"My tea's gone cold, I'm wondering why I got out of bed at all. The morning rain clouds up my window, and I can't see at all."

"I guess words are a mothafucka, they can be great, or they can degrade, or even worse they can teach hate."

"Now you shut up bitch! I am talkin'! Thought I was full of horseshit and now you fuckin' worship the ground in which I am walkin'!"

"But no matter how many fish in the sea, it'd be so empty without me."


#7
fuuton97

fuuton97

    Forero Profesional

  • Miembro
  • MarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcar
  • 610 Mensaje(s)
Excelente, guía. :D

#8
seus1970

seus1970

    Aficionado

  • Miembro
  • MarcarMarcarMarcarMarcarMarcarMarcarMarcar
  • 149 Mensaje(s)

Ola teno una duda en la parte donde dises que toca quitar mira estas me puedes desir si en el navicat premium esta ? y donde se encuentra porfavor? 

ATENCION! Si en nuestro servidor tenemos instalado la versión 5.5 de MySQL debemos borrar esto:

[color=rgb(0,0,0);] os[/color][color=rgb(102,102,0);].[/color][color=rgb(0,0,0);]execute[/color][color=rgb(102,102,0);]([/color][color=rgb(0,136,0);]'mysql '[/color][color=rgb(102,102,0);]..[/color][color=rgb(0,0,0);]pre[/color][color=rgb(102,102,0);]..[/color][color=rgb(0,136,0);]' --e='[/color][color=rgb(102,102,0);]..[/color][color=rgb(0,0,136);]string[/color][color=rgb(102,102,0);].[/color][color=rgb(0,0,0);]format[/color][color=rgb(102,102,0);]([/color][color=rgb(0,136,0);]'%q'[/color][color=rgb(102,102,0);],[/color][color=rgb(0,0,0);]query[/color][color=rgb(102,102,0);])..[/color][color=rgb(0,136,0);]' > '[/color][color=rgb(102,102,0);]..[/color][color=rgb(0,0,136);]fi[/color][color=rgb(102,102,0);])[/color][color=rgb(0,0,0);] [/color][color=rgb(102,102,0);]--[/color][color=rgb(0,0,0);] f[/color][color=rgb(102,102,0);]ü[/color][color=rgb(0,0,0);]r [/color][color=rgb(102,0,102);]MySQL51[/color][font="tahoma, helvetica, arial, sans-serif;font-size:12px;background-color:rgb(24,24,24);color:rgb(255,0,0);"]y quitar las -- de aquí:[/font]
[color=rgb(0,0,0);] [/color][color=rgb(102,102,0);]--[/color][color=rgb(0,0,0);]os[/color][color=rgb(102,102,0);].[/color][color=rgb(0,0,0);]execute[/color][color=rgb(102,102,0);]([/color][color=rgb(0,136,0);]'mysql '[/color][color=rgb(102,102,0);]..[/color][color=rgb(0,0,0);]pre[/color][color=rgb(102,102,0);]..[/color][color=rgb(0,136,0);]' -e'[/color][color=rgb(102,102,0);]..[/color][color=rgb(0,0,136);]string[/color][color=rgb(102,102,0);].[/color][color=rgb(0,0,0);]format[/color][color=rgb(102,102,0);]([/color][color=rgb(0,136,0);]'%q'[/color][color=rgb(102,102,0);],[/color][color=rgb(0,0,0);]query[/color][color=rgb(102,102,0);])..[/color][color=rgb(0,136,0);]' > '[/color][color=rgb(102,102,0);]..[/color][color=rgb(0,0,136);]fi[/color][color=rgb(102,102,0);])[/color][color=rgb(0,0,0);] [/color][color=rgb(102,102,0);]--[/color][color=rgb(0,0,0);] f[/color][color=rgb(102,102,0);]ü[/color][color=rgb(0,0,0);]r [/color][color=rgb(102,0,102);]MySQL55[/color]



#9
Ðro

Ðro

    Experimentado

  • Miembro
  • MarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcar
  • 267 Mensaje(s)
[font="'trebuchet ms', helvetica, sans-serif;"]Buenas tardes,[/font]
 
[font="'trebuchet ms', helvetica, sans-serif;"]Tengo una dudita y es la siguiente, necesito saber la ip de x personaje, pero no se como iria la query para saber la ip dependiendo del nombre del pj, a ver si me echan una mano con eso.[/font]
 
[font="'trebuchet ms', helvetica, sans-serif;"]Gracias de antemano.[/font]
 
[font="'trebuchet ms', helvetica, sans-serif;"]EDIT: Ya la hice, esta es: [/font]local localip = mysql_query("SELECT ip FROM player.player WHERE name = '"..pc.get_name().."'")





0 Usuario(s) están leyendo este Tema

0 miembro(s), 0 invitado(s), 0 usuario(s) anónimo(s)