ElRaulxX Posted August 23, 2012 Report Share Posted August 23, 2012 Buenas zone! Hoy, para distraerme, me ha dado por hacer alguna quest (que raro en mi... ). Bueno, al lÃo! ¿de qué se trata? Se trata de una sencilla quest realizada en un ratito, con la intención de hacer un comercio ingame de coins para la ItemShop. La he echo con la intención de que sea sencilla de editar: añadiendo menos de dos lÃneas de código puedes añadir un nuevo objeto a la quest o incluso cambiar el nombre del objeto que saldrá en la quest. La quest modifica directamente el valor coins de account.account a través de mysql, asà que no hace falta decir que deberéis configurar con los datos de vuestro servidor. Y como conozco a la gente demasiado bien y sé que harÃas cualquier cosa por conseguir coins gratis, he añadido un pequeño sistema de revisión a través de function true/false... por si se me escapa algo... Aquà la tenéis: La quest --------------------------------------------- --Quest realizada por ElRaulxX --Exclusiva de Metin2 Panamera y Metin2 Zone --------------------------------------------- quest mt2panamera_coins begin state start begin when id_item1.use or id_item2.use or id_item3.use begin --------------------------------------------- local mysql_user = ""; --Usuario DB local mysql_pass = ""; --Contraseña DB --------------------------------------------- coins = { [id_item1] = { "Moneda de Oro", 100}, [id_item2] = { "Moneda de Plata", 50}, [id_item3] = { "Moneda de Bronce", 25} } say_title(""..coins[item.get_vnum()][1].."") say("Si utilizas esta moneda puedes obtener una") say("determinada cantidad de coins canjeables en la") say("ItemShop del servidor.") say("Con esta "..coins[item.get_vnum()][1].." obtendrás "..coins[item.get_vnum()][2].." coins.") say("") say("¿Quieres canjear la moneda por "..coins[item.get_vnum()][2].." coins?") local s = select("Si","No"); if s == 1 then if mt2panamera_coins.item_revision(item.get_count()) == true then os.execute("mysql -u '"..mysql_user.."' --password='"..mysql_pass.."' --execute='UPDATE account.account SET coins = coins + "..coins[item.get_vnum()][2].." WHERE id = "..pc.get_account_id()..";'") say_title(""..coins[item.get_vnum()][1].."") say("¡Felicidades!") say("Has obtenido "..coins[item.get_vnum()][2].." coins.") say("Entra en la ItemShop de nuestro servidor para") say("canjearlas.") item.remove() elseif mt2panamera_coins.item_revision(item.get_count()) == false then chat("ERROR") else chat("ERROR") end else return end end function item_revision(count) if count >= 1 then if item.get_vnum() == 0 or item.get_vnum() == nil then return false else return true end elseif count < 1 then return false else return false end end end end Como editarla y hacerla funcionar Para hacerla funcionar, lo primero que tenéis que hacer es sustituir id_item1, id_item2 y id_item3 por las ids del objeto de vuestro servidor (recordar que debe tener type 18 para que funcione la quest). Podéis utilizar ctrl+h en el notepadd... Lo único que quedará por hacer es poner vuestros datos de la db donde veáis esto: --------------------------------------------- local mysql_user = ""; --Usuario DB local mysql_pass = ""; --Contraseña DB --------------------------------------------- No hace falta decir que los datos va entre las comillas. Os lo he señalizado todo bien... para los mancos de vista Para editarla, debéis buscar esto: coins = { [id_item1] = { "Moneda de Oro", 100}, [id_item2] = { "Moneda de Plata", 50}, [id_item3] = { "Moneda de Bronce", 25} } Y añadir una nueva lÃnea:[id_item] = { "Nombre", cantidad de coins},Después buscais esto:when id_item1.use or id_item2.use or id_item3.use beginY añadÃs el item que habéis puesto antes:when id_item1.use or id_item2.use or id_item3.use or id_item begin Y eso es todo. Saludines Full Moli 1 Quote Link to comment Share on other sites More sharing options...
Santy!. Posted August 23, 2012 Report Share Posted August 23, 2012 jajaja que groso, sos un grande xD. Quote Link to comment Share on other sites More sharing options...
SeMa™ Posted August 23, 2012 Report Share Posted August 23, 2012 Raul , esto no tiene que conectar a un php en la web? Quote Link to comment Share on other sites More sharing options...
cristianvar Posted August 23, 2012 Report Share Posted August 23, 2012 Esto realiza una conexión con la base de datos, no es necesaria una web, ni un archivo PHP. Quote Link to comment Share on other sites More sharing options...
ElRaulxX Posted August 24, 2012 Author Report Share Posted August 24, 2012 Raul , esto no tiene que conectar a un php en la web? Utilizo la función os.execute() con el siguiente comando: mysql -u 'user' --password='pass' --execute='UPDATE account.account SET coins = coins + cantidadcoins WHERE id = idcuenta;Con esta función puedes realizar cualquier comando del sistema operativo (os = operating system). Es decir, estás haciendo lo mismo que si introdujeras ese comando en la consola de freebsd. Al tener instalado el mysql en el servidor, no es necesario nada más para conectar a la database. Quote Link to comment Share on other sites More sharing options...
TheSanto Posted August 25, 2012 Report Share Posted August 25, 2012 <<< elseif mt2panamera_coins . item_revision ( item . get_count ( ) ) == false then chat ( "ERROR" ) else chat ( "ERROR" ) end else return end syntax error : [string "start"]:8: unexpected symbol near `[' md.quest:43:Abort (core dumped) ks3097503# Ami me da ese error , me podeis ayudar Quote Link to comment Share on other sites More sharing options...
ElRaulxX Posted August 26, 2012 Author Report Share Posted August 26, 2012 <<< elseif mt2panamera_coins . item_revision ( item . get_count ( ) ) == false then chat ( "ERROR" ) else chat ( "ERROR" ) end else return end syntax error : [string "start"]:8: unexpected symbol near `[' md.quest:43:Abort (core dumped) ks3097503# Ami me da ese error , me podeis ayudar Si cambias el nombre de la quest, tienes que cambiar el nombre a todas las funciones declaradas en ella y incluidas en la misma quest. Santy!. 1 Quote Link to comment Share on other sites More sharing options...
TheSanto Posted August 27, 2012 Report Share Posted August 27, 2012 syntax error : [string "start"]:8: unexpected symbol near `[' mt2panamera_coins.quest:43:Abort (core dumped) ks3097503# Sigue saliendo lo mismo. Quote Link to comment Share on other sites More sharing options...
Santy!. Posted September 1, 2012 Report Share Posted September 1, 2012 prueva asi santos: la puse en 1 npc y que pida yang funciones segun mis files a declarar: item_revision mt2panamera_coins.item_revision os.execute pc.get_account_id --------------------------------------------- --Quest realizada por ElRaulxX --Exclusiva de Metin2 Panamera y Metin2 Zone --------------------------------------------- quest mt2panamera_coins begin state start begin when 20087.chat."Comprar coins" begin --------------------------------------------- local mysql_user = ""; --Usuario DB local mysql_pass = ""; --Contraseña DB --------------------------------------------- coins = { [id_item1] = { "Moneda de Oro", 100}, [id_item2] = { "Moneda de Plata", 50}, [id_item3] = { "Moneda de Bronce", 25} } say_title(""..coins[item.get_vnum()][1].."") say("Si utilizas esta moneda puedes obtener una") say("determinada cantidad de coins canjeables en la") say("ItemShop del servidor.") say("Con esta "..coins[item.get_vnum()][1].." obtendrás "..coins[item.get_vnum()][2].." coins.") say("") say("¿Quieres canjear la moneda por "..coins[item.get_vnum()][2].." coins?") local s = select("Si","No"); if s == 1 then if pc.change_money() < 100000000 then say("no tienes fondos") return end if pc.change_money() > 99999999 then if mt2panamera_coins.item_revision(item.get_count()) == true then os.execute("mysql -u '"..mysql_user.."' --password='"..mysql_pass.."' --execute='UPDATE account.account SET coins = coins + "..coins[item.get_vnum()][2].." WHERE id = "..pc.get_account_id()..";'") say_title(""..coins[item.get_vnum()][1].."") say("¡Felicidades!") say("Has obtenido "..coins[item.get_vnum()][2].." coins.") say("Entra en la ItemShop de nuestro servidor para") say("canjearlas.") item.remove() elseif mt2panamera_coins.item_revision(item.get_count()) == false then chat("ERROR") else chat("ERROR") end else return end end function item_revision(count) if count >= 1 then if item.get_vnum() == 0 or item.get_vnum() == nil then return false else return true end elseif count < 1 then return false else return false end end end end end Quote Link to comment Share on other sites More sharing options...
ElRaulxX Posted September 1, 2012 Author Report Share Posted September 1, 2012 Sinceramente, no sé porqué no te funciona TheSanto. En mi servidor funciona perfectamente, pues no hay ningún error en la quest. Me fijé que la quest de iluavatar no te funcionaba tampoco. Quizá sea algo de tus files... Santy, las funciones declaradas en una quest no hace falta añadirlas en el quest_functions. Para que las acepte, debe tener el nombre de la quest seguido de un punto. Las otras, sino están añadidas, no hace falta decir que hay que añadirlas. Quote Link to comment Share on other sites More sharing options...
Santy!. Posted September 2, 2012 Report Share Posted September 2, 2012 ami se me hace mas fácil asà en el lib.lua tambien es asi? con punto? Quote Link to comment Share on other sites More sharing options...
ElRaulxX Posted September 2, 2012 Author Report Share Posted September 2, 2012 A ver cuando hacemos en el curso esta sección... que sino... xd Puedes crear funciones en una quest para usarlas únicamente en esa quest. Para que el servidor reconozca que esa función está creada en esa misma quest y no es otra declarada en el quest_functions, se sigue la sintaxis: nombredelaquest.nombredelafuncion() En cambio, las quests creadas en questlib y declaradas en el quest_functions son funciones globales que puedes utilizar en cualquier quest son las que has utilizado hasta ahora. Por ejemplo say_title() Quote Link to comment Share on other sites More sharing options...
Santy!. Posted September 2, 2012 Report Share Posted September 2, 2012 pues globales y no tan globales ya que para poner catacumbas 100% deves colocar special.map_index: } special.map_index1:196 special.map_index2:197 } algo asi. Quote Link to comment Share on other sites More sharing options...
ElRaulxX Posted September 2, 2012 Author Report Share Posted September 2, 2012 pues globales y no tan globales ya que para poner catacumbas 100% deves colocar special.map_index: } special.map_index1:196 special.map_index2:197 } algo asi. Estás confundiendo muchos conceptos.A lo que te refieres de catacumbas, es una variable global declarada en el questlib. Y no, variable no es lo mismo que función. Quote Link to comment Share on other sites More sharing options...
PENTAGRAMA Posted May 6, 2015 Report Share Posted May 6, 2015 El mismo error que thesantos xd Quote Link to comment Share on other sites More sharing options...
Johan™ Posted May 6, 2015 Report Share Posted May 6, 2015 El mismo error que thesantos xd tienes que declarar las funcion pc.get_account_id y os.execute ->creo la de os no toy seguro en quest_function :3 Feliz shamanas. Quote Link to comment Share on other sites More sharing options...
PENTAGRAMA Posted May 6, 2015 Report Share Posted May 6, 2015 tienes que declarar las funcion pc.get_account_id y os.execute ->creo la de os no toy seguro en quest_function :3 Feliz shamanas. si eso hice, pero todo bien esta hay pero cuando le doy clic al item lo agarra pero no se refleja en el navicat... no aumentan los coins Quote Link to comment Share on other sites More sharing options...
PENTAGRAMA Posted May 6, 2015 Report Share Posted May 6, 2015 tienes que declarar las funcion pc.get_account_id y os.execute ->creo la de os no toy seguro en quest_function :3 Feliz shamanas. Esto es mi problema, Primero Me quita todos los items xd, Segundo no me aumenta las coins xd Esto me sale en VirtualBox Quote Link to comment Share on other sites More sharing options...
Hawk Server's Posted May 6, 2015 Report Share Posted May 6, 2015 Revisa el nombre de la tabla si es igual al de la query de la quest Quote Link to comment Share on other sites More sharing options...
Johan™ Posted May 6, 2015 Report Share Posted May 6, 2015 pc.remove_item(vnum, 1) revisa que esten bien las mysql_query y de que tengas las funciones de mysql instaladas Quote Link to comment Share on other sites More sharing options...
PENTAGRAMA Posted May 6, 2015 Report Share Posted May 6, 2015 pc.remove_item(vnum, 1) revisa que esten bien las mysql_query y de que tengas las funciones de mysql instaladas xd, son iguales, account.account SET coins = coins <<< Solo que se deva a este Comando if mt2panamera_coins.item_revision(item.get_count()) == true then <<< Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.