Jump to content

[Quest Editable] Coins comerciables


ElRaulxX

Recommended Posts

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 begin

Y 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 :P

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

<<< 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.
Link to comment
Share on other sites

prueva asi santos:

la puse en 1 npc y que pida yang :D 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
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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()

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

  • 2 years later...

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 

 

QRLnGsY.gif

 

 

 

Esto me sale en VirtualBox

wuTT1r1.png

Link to comment
Share on other sites

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

1p4vRzx.png

 

 

Solo que se deva a este  Comando 

 

if mt2panamera_coins.item_revision(item.get_count()) == true then <<<

Link to comment
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.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...