Jump to content

Apocalipto

Miembro
  • Contador contenido

    63
  • Ingreso

  • Última visita

  • Días ganados

    2

Actividad de reputación

  1. Me Gusta
    Apocalipto got a reaction from litachi1995l in [NPC] El reto de los demonios   
    muchas gracias te podria pedir dos cosas aver que tal eres en quest xd me sirvio
     
    una quest que te lleve a un mapa xxxx xxxx y que pida un item 200562 ese y ser lvl 100
    y te dice q tienees 10 minutos (editable en tiempo )
    que ese tiempo tienes que matar siertos mobs si los matas te lleva a mapa xxx xxx
    ya en este mapa lo llamare de premiun y tiene solo 2 minutos para matar ciertos mostros pondre que sean los que sueltan yang para que los user agan yang pero en 2 minutos el mapa los bota asi se divertiran asiendo yang es un pasatiempo para los user se puede aser gracias
  2. Me Gusta
    Apocalipto got a reaction from CleatBot1 jose in [NPC] El reto de los demonios   
    muchas gracias te podria pedir dos cosas aver que tal eres en quest xd me sirvio
     
    una quest que te lleve a un mapa xxxx xxxx y que pida un item 200562 ese y ser lvl 100
    y te dice q tienees 10 minutos (editable en tiempo )
    que ese tiempo tienes que matar siertos mobs si los matas te lleva a mapa xxx xxx
    ya en este mapa lo llamare de premiun y tiene solo 2 minutos para matar ciertos mostros pondre que sean los que sueltan yang para que los user agan yang pero en 2 minutos el mapa los bota asi se divertiran asiendo yang es un pasatiempo para los user se puede aser gracias
  3. Me Gusta
    Apocalipto got a reaction from Bastian Ian Pool in Fixear DMG HACK Rapido y facil   
    waooooooo me encanta gracias reina
  4. Me Gusta
    Apocalipto reacted to pepineitor in Rachas/Puntuación en Gremios   
    Buenas noches,
    como nadie aporta nada, nada nuevo, útil, etc. pues e desempolvado un poco una de mis carpetas por postear algo, simplemente para ver si esto progresa un poco, aunque sea un poco, posteo esto, a alguien le servirá, hay gente que lo vende.
     

    quest rachas_gremios begin state start begin when kill with npc.is_pc() and pc.get_map_index() >= 1100000 and pc.get_map_index() < 1120000 begin local gM,rachas,e,gE = pc.get_guild(),pc.getqf("rachas_gremios")+1,pc.select(npc.get_vid()),0 if e != 0 and gM != 0 then gE = pc.get_guild() if gE != 0 then pc.setqf("rachas_gremios", 0) syschat("Has muerto, tus rachas vuelven a 0") pc.select(e) if gM != gE then pc.setqf("rachas_gremios", rachas) chat("Has sumado un punto a tus rachas, llevas "..rachas) end end end end when logout with pc.get_map_index() >= 1100000 and pc.get_map_index() < 1120000 begin pc.setqf("rachas_gremios", 0) end endendEl código paso de explicarlo, pero es básico, solo funciona en batallas de gremios, pero si quereis que sea en un mapa especial u otra cosa teneis que cambiar
    pc.get_map_index() >= 1100000 and pc.get_map_index() < 1120000y poneis la condición que querais  
    si quereis que se muestre algún mensajito en el cliente, algúna imagen, poneis un cmdchat debajo del anuncio de tus rachas y ya está.
     
    Nota
    Para que el sistema funcione debeis de tener la función de npc.get_vid(), podeis buscar el dif por donde querais, funciona con cualquier game, si tiene la función, si no lo encontrais, también podeis usar la función que posteo Noa, la teneis en el siguiente link
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  5. Me Gusta
    Apocalipto got a reaction from ArkaNo96 in makina Freebsd 9.2   
    ola comunidad alguien seria tan amable y tienen tiempo de subir una maquina de Freebsd 9.2
     
    para poder usar los files 40k la persona que crea que puede hacerlo le dare las gracias de antemano 
     
    el de izaviona da muchos errores 
  6. Me Gusta
    Apocalipto reacted to Tiico™ in [QUEST]Aca otra   
    Quest 
    quest reto_kyuding begin state start begin when login with pc.level >= 80 set_state(infor) end end state infor begin when letter begin send_letter("¡Corre hacia el Sabio Kyuding!") end when 88885.chat."Ayudame, ¡Mi Hermana!" begin say_title("Kyuding:") say("Buenas "..pc.get_name().." ¡Ayudame!.") say("Bueno , te cuento , lo que pasa es que ayer") say("Mi hermana ha desaparecido ... Y no se donde") say("se encuentra en este momento. Tú podrias ayudar") say("a encontrar a mi Hermana ¡porfavor!?.") say("Si es así ve a matar a 3 Calbiyung.") say_reward("Aceptas ir") local j = select ("Si","Me da miedo") if j == 1 then say("Bien , si estas decidido ve") say("a Assesinar a los Calbiyung.") say("Si lo haces seras recompensado.") pc.setqf("state", 1) q.set_counter("1 Calbiyung", 1) end end when 2568.kill begin local count = pc.getqf("state") - 1 if count == 1 then pc.setqf("state", count) q.set_counter("1 Calbiyung", count) end if count == 0 then say_title("Kyuding:") say("Bien , haz assesinado el Primer Calbiyung") say("Ve por el otro ...") pc.setqf("state", 1) q.set_counter("2 Calbiyung", 1) end end when 2598.kill begin local count = pc.getqf("state") - 1 if count == 1 then pc.setqf("state", count) q.set_counter("2 Calbiyung", count) end if count == 0 then say_title("Kyuding:") say("Bien , haz assesinado el Segundo Calbiyung") say("Ve por el Ultimo! ...") pc.setqf("state", count) q.set_counter("3 Calbiyung", count) end end when 2457.kill begin local count = pc.getqf("state") - 1 if count == 1 then pc.setqf("state", count) q.set_counter("3 Calbiyung", count) end if count == 0 then say_title("Kyuding:") say("Bien , haz assesinado a Todos los") say("Calbiyung.") say_item_vnum(2568) say("y este item? , te lo dropeo un Calbiyung?") say("Aver dejame Investigarlo.") wait() say("Oh!") say("Creo que se donde está mi hermana. Este") say("Item dice que mi hermana se encuentra en") say("El Gran Mapa de los Malditos...") say("Gracias por haber assesinado a esos") say(""Calbiyung", ire en busca de mi hermana.") wait() say("Ah perdon , se me olvidaba toma esta") say("recompensa por haber ayudadome a saber") say("donde se encontraba mi hermana. Gracias.") pc.give_item2("item1", 1) --- Aqui pon los items a dar ( sin borrar las "" ) pc.give_item2("item1", 1) pc.give_item2("item1", 1) pc.change_gold(cantidad) --- Yang a dar. set_state(acabada) end end end state acabada begin endend Espero que les guste +1!
  7. Me Gusta
    Apocalipto reacted to Tiico™ in [QUEST]Aqui una pequeña xD   
    Holaaaaaaaaa xD! , Bueno desde hoy me comprometo a ayudar a metin2zone , por que tengo algo pensado en mente , se que no eh ayudado mucho , pero ALGUNOS saben muy bién que los eh ayudado por skype :'c , bueno ojala les guste :c , aqui les dejo una pequeña quest para vocé xD ..
    quest intercambio_c2 begin state start begin when blacksmith.chat."Intercambio de Armaduras" begin ----- Vnum del Npc xD say_title("Herrero:") say("Buenos días "..pc.get_name().." ") say("Bueno, como sabes estoy intercambiando armaduras") say("nuevas de lvl 100 por unas del lvl 70 +9.") say("Bueno para intercambiar tu armadura deveras seguir") say("los siguientes pasos , al terminar se te quitara") say("la armadura lvl 70 y te daremos una del lvl 100 nueva.") whait() say_reward("Porfavor elige una de estas armaduras.") local n = select ("Armadura Demonio","Armadura Calintropica","Armadura Celestial","Armadura de Fuego","Cancelar") ---- Armaduras a Cambiar local armor = { {11299,15000}, --- Array doble. , en 11299 pones la armadura que tienes y en 15000 la armadura que quieres.. {11499,15001}, --- Recuerda que se pueden agregár más.. {11699,15002}, {11899,15003} } if n==5 then return end if pc.count_item(armor[n][1]) == 0 then say_reward("No tienes la armadura.") end say_title("Herrero:") pc.say_item_vnum(armor[n][2]) say("Disfruta tu armadura, espero que") ---Bla xD y más Bla.. say("estes contento y vuelve pronto.") say("") pc.remove_item(armor[n][1], 1) pc.give_item2(armor[n][2], 1) end endend Se trata de que al "NPC" le das click bla bla.... Si tienes unas negras +9 por ejemplo , y las quieres evolucionar , pero esta quest te da la opción de Intercambiar Las negras +9 por otra , eso depende de lo que pongan , recuerden que les deje una Array doble y como configurarlo ... Le pueden añadir cosas ustedes , ahi ven xD Espero que les gusste Y dejen mis +1 o me pondre a chillar :'c xD
     
    AÑADO: Para los que necesiten Quest , estoy aprendiendo cada vez más , si necesitan Quest solo avisenme por skype o por mensaje con gusto les respondere con las Quest.
  8. Me Gusta
    Apocalipto reacted to ElRaulxX in [Minicurso] MySQL en quest   
    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



    ATENCION! Si en nuestro servidor tenemos instalado la versión 5.5 de MySQL debemos borrar esto:
    os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) -- für MySQL51 y quitar las -- de aquí:
    --os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- für MySQL55 La razón es simple, la sintaxis de esta versión de MySQL es distinta.

    Ahora tenemos que añadir en quest_functions la función:
    mysql_query 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:

    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.

    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.

    Bien, empecemos. Comenzaremos llamando toda la tabla.
    local read = mysql_query("SELECT * FROM test.tablatest") Esto almacenará en la variable la siguiente tabla:
    local read = {[campo1] = {"texto1","texto2","texto3"},[campo2] = {"texto4","texto5","texto6"},[campo3] = {"texto7","texto8","texto9"}} 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.
    local read = mysql_query("SELECT * FROM test.tablatest")say(read.campo2[2])--esto muestra texto5 Ahora queremos llamar 'texto9':
    local read = mysql_query("SELECT * FROM test.tablatest")say(read.campo3[3])--esto muestra texto9 Ahora queremos llamar 'texto1':
    local read = mysql_query("SELECT * FROM test.tablatest")say(read.campo1[1])--esto muestra texto1 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:
    local read = mysql_query("SELECT * FROM test.tablatest WHERE campo2 = 'texto5'") Esto almacenará en la variable la siguiente tabla:
    local read = {[campo2] = {"texto4","texto5","texto6"}} Y ahora podemos llamarlo de la misma manera que en el ejemplo anterior.
    Esto nos mostrará 'texto6' en pantalla.
    local read = mysql_query("SELECT * FROM test.tablatest WHERE campo2 = 'texto5'")say(read.campo2[3])--esto muestra texto6 Y para hacerla verdaderamente útil podemos llamar a variables o funciones.
    local var = "texto5"local read = mysql_query("SELECT * FROM test.tablatest WHERE campo2 = '"..var.."'")say(read.campo2[3])--esto muestra texto6 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.
    local read = mysql_query("SELECT campo1 FROM test.tablatest WHERE campo1 = 'texto1'")say(read.campo1[1])--esto muestra texto1 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:
    mysql_query("INSERT INTO test.tablatest VALUES ('texto10','texto11','texto12')") o como hemos hecho antes:
    local v1 = "texto10"local v2 = "texto11"local v3 = "texto12"mysql_query("INSERT INTO test.tablatest VALUES ('"..v1.."','"..v2.."','"..v3.."')") Y nos quedará la tabla así:


    Y si queremos modificar valores:
    mysql_query("UPDATE test.tablatest SET campo1='prueba' WHERE campo1='texto10'") local x = "prueba"local y = "texto10"mysql_query("UPDATE test.tablatest SET campo1='"..x.."' WHERE campo1='"..y.."'") Y nos quedaría esto:


    Sabiendo de mysql no debería ser ninguna complicación, el problema es que no sepáis
    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!
  9. Me Gusta
    Apocalipto reacted to Serex in SerexTool - WebTool for Private Servers   
    Hola chicos hoy os traigo mi nuevo proyecto, el cual llevo unas semanas haciendo en mi afán por aprender PHP.
     
     
    SerexTool - WebTool for private servers

    Esta herramienta os ayudara en la gestión del servidor, es perfecta para una gestión rápida y sencilla, con las operaciones más comunes cuenta con muchísimas opciones que os facilitarán vuestra tarea en la administración de vuestro servidor.


    Gestión de Cuentas



     
    Gestión de jugadores



     
    Gestión del servidor






    La herramienta como veis es bastante completa. En cuanto al apartado de "Ingresar coins" lleva otra contraseña y te da la opción de registrar los logs de quien mete MDs para controlar este tema que suele ser de los más importantes.


     
    Su instalación es bastante sencilla, una vez descargada la tool, la subis a vuestro sitio web en una carpeta o directorio vacío y modificais el archivo config.php con vuestros datos para vuestro servidor, y el acceso a la tool por user y pass.

    Si queréis el log para el ingreso de coins debéis ejecutar esta query en la base de datos account:

    /* Navicat MySQL Data Transfer[/center] Source Server : METIN2 ELEMENTS Source Server Version : 50528 Source Host : localhost Source Database : website Target Server Type : MYSQL Target Server Version : 50528 File Encoding : 65001 Date: 2013-05-06 23:46:50 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `coins_log` -- ---------------------------- DROP TABLE IF EXISTS `coins_log`; CREATE TABLE `coins_log` ( `cuenta` varchar(100) NOT NULL, `coins_ingresadas` varchar(100) NOT NULL, `motivo` varchar(100) NOT NULL, `ip` varchar(100) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- ---------------------------- -- Records of coins_log Y lo que esperabais la descarga: Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  10. Me Gusta
    Apocalipto reacted to Croqueta in [Q]Itemshop without Mysql   
    Informacion:
    Hola a todos aca les traigo una quest de una item shop en el juego. realizada en su totalidad por mi
    Contiene:
    -Historial de Compras(log)
    -Historial De Donaciones (log)
    -Ingreso Como administrador (Agregar artículos / y quitarlos)
    -Tienda: Lecto de coins (Este archivo ha de ser creado manualmente)
    -Imagenes:
     
    Importante:
     
    Dentro de la descarga hay un archivo llamado vnumUtype.txt este se le modifica la extencion a .lua
     
    pathti="/usr/home/game/share/locale/germany/quest/test/" <<-- en esta ruta la tabla de la item shop y el vnumUtype.lua
    pathtc="/usr/home/game/share/locale/germany/quest/coins/"
     
    Se crea una nueva carpeta en las rutas anteriores, que depende de usted.
    Más importante aún es un punto que hay que generar la tabla en el juego,
    como un ejemplo de la matriz que me queda, por lo que puede orientarse a la misma.
     
    special thx on stein20 for help to translate
     
    imagen
     
     
     
    Quest
     

    quest ingameshop begin state start begin when 20006.chat."recharge ccoins" begin say_title(mob_name(npc.get_race())) spenden() end when 20006.chat."generate table" with pc.is_gm() begin --if pc.get_gm_level()!=5 then return end say("really generate table?") if select("Yes","No")==2 then return end local ingameshop={ --[[ if you use this first time, push Yes ]] {--weapons {item1,item2},--ids {coins1,cois2}--coins }, {--armor {item1,item2},--ids {coins1,coins2}--coins }, {--special tems {item1,item2},--ids {coins1,item2}--coins } } table.save(ingameshop,pathti.."testtabelle.lua") end when 20006.chat."ItemShop" begin local name_items={} local ingameshop=table.load(pathti.."testtabelle.lua") say_title(mob_name(npc.get_race())) say() say("Choose your category") local auswahl=select3(itemshopk) for i=1,table.getn(ingameshop[auswahl][1]) do table.insert(name_items,tostring(item_name(ingameshop[auswahl][1][i]))) end say_title(mob_name(npc.get_race())) say() say("select the item ") say() local itemshop_i = select3(name_items) if itemshop_i == table.getn(name_items) then return end say_title(string.format("Coins :%d ", get_coins())) say() say("Would you really buy the item?") say() say_gold("it cost "..ingameshop[auswahl][2][itemshop_i].." Coins") say_item_vnum(ingameshop[auswahl][1][itemshop_i]) say("") if select("Yes","No") == 2 then return end if get_coins()<ingameshop[auswahl][2][itemshop_i] then say("not enough coins ") return end say_green("you have buy "..item_name(ingameshop[auswahl][1][itemshop_i]).." for- ") say_green(ingameshop[auswahl][2][itemshop_i].." Coins") say_item_vnum(ingameshop[auswahl][1][itemshop_i]) coins_write((get_coins()-ingameshop[auswahl][2][itemshop_i])) pc.give_item2(ingameshop[auswahl][1][itemshop_i]) write_log(ingameshop[auswahl][1][itemshop_i],ingameshop[auswahl][2][itemshop_i]) end when 20006.chat."Manage Itemshop" with pc.is_gm() begin local tabelle=table.load(pathti.."vnumUtype.lua") local i_shop=table.load(pathti.."testtabelle.lua") say_title(mob_name(npc.get_race())) say() say("Hello "..string.format("%s",pc.get_name())) say("What would you like do?") local s=select("add new items","removing Items","Nothig") if s==3 then return end if s==1 then say_title(mob_name(npc.get_race())) say() say("Choose a category") say("where you want to add the item") local auswahl=select3(itemshopk) say_title(mob_name(npc.get_race())) say() say(itemshopk[auswahl]..": insert into this category?") if select("Yes","No") == 2 then return end say_title(mob_name(npc.get_race())) say() say("Which item you wish to add?") say("Enter the vnum") local vnum= tonumber(input()) if vnum ==nil then say("You have to enter something") return end if auswahl== 1 then if tabelle[vnum][1] != 1 then say("This is not a weapon") return end elseif auswahl == 2 then if tabelle[vnum][1] != 2 then say("This is not a amor") return end elseif auswahl == 3 then if tabelle[vnum][1] == 1 or tabelle[vnum][1]==2 then say("only for special items") return end end say_title(mob_name(npc.get_race())) say() say("Give the price of that item") say() local money= tonumber(input()) if money==nil then say("You have to enter something") return end say_title(mob_name(npc.get_race())) say() say("keeping?") say() say("Item: "..item_name(vnum).." Price: "..money) say_item_vnum(vnum) if select("Yes","No") == 2 then return end i_shop[auswahl][1][table.getn(i_shop[auswahl][1])+1]=vnum i_shop[auswahl][2][table.getn(i_shop[auswahl][2])+1]=money --table.insert(i_shop[auswahl][1],vnum) --table.insert(i_shop[auswahl][2],money) table.save(i_shop,pathti.."testtabelle.lua") say("you have add "..item_name(vnum)) elseif s==2 then local auswahl_items={} say("Choose the item that you wish to remove") say() local a=select3(itemshopk) for i=1,table.getn(i_shop[a][1]) do table.insert(auswahl_items,tostring(item_name(i_shop[a][1][i]))) end say("Choose the item that you wish to remove") say() local itemshop_r = select3(auswahl_items) if itemshop_r==table.getn(auswahl_items) then return end table.remove(i_shop[a][1],i_shop[a][1][itemshop_r]) table.remove(i_shop[a][2],i_shop[a][2][itemshop_r]) table.save(i_shop,pathti.."testtabelle.lua") --[[for i= 1,table.getn(ingameshop[auswahl][1]) do say(i_shop[auswahl][1][i].."\t"..i_shop[auswahl][2][i]) end]] end end end end questlib.lua
     

    pathti="/usr/home/game/share/locale/germany/quest/test/"--ruta de la tabla pathtc="/usr/home/game/share/locale/germany/quest/coins/"--ruta de los coins itemshopk={"Waffe","Rüstungen","Sonstiges"} function write_log(vnum,coins) local i_name=item_name(vnum) datei = io.open(pathti.."shop_log.lua", "a+") if datei==nil then say("Error loading the file") return end datei:write("PLayerID:\t"..pc.get_player_id().."\tPlayerName:\t"..pc.get_name().."\tItemName:\t"..i_name.."\tDate/Time:\t"..os.date("%c").."\tCoins:\t"..coins.."\n") datei:close() end function get_coins() local file = io.open(pathtc..""..pc.get_player_id()..".txt",'r') if file==nil then return 0 end for line in file:lines() do return line end file:close() end function coins_write(coins) file = io.open(pathtc..""..pc.get_player_id()..".txt","w") file:write(coins) file:close() end function spenden() say() say("How much you want to donate?") say_reward("Online Paysafecard will not be accepted") say() s = select("10","25","50","100","cancel") wert = { 10 , 25 , 50 , 100} if s==table.getn(wert)+1 then return end say_title(mob_name(20006)) say() say("Now give the PSC numbers") say() eing2= input() if string.len(eing2)~=16 then say("Your input has no 16 numbers") return end if string.sub(eing2,0,1)=='1' or string.sub(eing2,0,2)=='00' then say("Online Paysafecard will not be accepted") return end say_title(mob_name(20006)) say() say('The PSC is protected with a password?') if select("Yes","No")==2 then eing3=0 else say("Enter the password") eing3 = input() if eing3=='' then say("You have to enter something") return end end say() say("Your input:") say("cash: "..wert[s]) say("PSC: "..eing2) if eing3 == 0 then say("PW: /") else say("PW: "..eing3) end say("Keeping?") say() if select("Yes","No") == 2 then return end say("your Coins will be credited to you after the control") file = io.open(pathti.."psc_log.lua","a+") --file:write("PlayerName:\t"..pc.get_name().."\tCash:\t"..wert[s].."\tPSC:\t"..eing2.."\tPW:\t"..eing3.."\tDate/Time:\t"..os.date("%c").."\n") file:write("ID:\t"..pc.get_player_id().."PlayerName:\t"..pc.get_name().."\tCash:\t"..wert[s].."\tPSC:\t"..eing2.."\tPW:\t"..eing3.."\tDate:\t"..os.date("%c").."\t\n") file:close() end function select3(...) arg.n = nil local tp,max = arg,5 if type(tp[1]) == 'number' then max = tp[1] if type(tp[2]) == 'table' then tp = tp[2] else table.remove(tp,1) end elseif type(tp[1]) == 'table' then if type(tp[1][1]) == 'number' then max = tp[1][1] table.remove(tp[1],1) tp = tp[1] end tp = tp[1] end local str = '{' local tablen,act,incit = table.getn(tp),0,0 table.foreach(tp,function(i,l) act = act + 1 if act == 1 then str = str .. '{'..string.format('%q',l) elseif act == max+1 and tablen > act+incit then if tablen ~= act+incit+1 then str = str..'},{'..string.format('%q',l) else str=str..','..string.format('%q',l) end incit = incit + max act = 1 else str=str..','..string.format('%q',l) end end) local px = loadstring('return '..str ..'}}')() local function copy_tab(t) local p= {} for i = 1,table.getn(t) do p[i] = t[i] end return p end local pe = {} for i = 1,table.getn(px) do pe [i] = copy_tab(px[i]) end local function init(i,ip) pe[i] = copy_tab(px[i]) local next,back,exit = 0,0,0 if i < table.getn(pe) and table.getn(pe) ~=1 then table.insert(pe[i],table.getn(pe[i])+1,'Para alante Pagina '..(i+1)); next = table.getn(pe[i]) end if i > 1 then table.insert(pe[i],table.getn(pe[i])+1,'Para atraz pagina '..(i-1)); back = table.getn(pe[i]) end table.insert(pe[i],table.getn(pe[i])+1,'Cerrar'); exit = table.getn(pe[i]) if table.getn(pe) > 1 then say('pagina '..i..' de '..table.getn(pe)) end local e = select_table(pe[i]) if e == next then return init(i+1,ip+max) elseif e == back then return init(i-1,ip-max) elseif e == exit then return -1 else return e+ip,pe[i][e] end end return init(1,0) or -1 end local function exportstring( s ) return string.format("%q", s) end function table.save( tbl,filename ) local charS,charE = " ","\n" local file,err = io.open( filename, "wb" ) if err then return err end local tables,lookup = { tbl },{ [tbl] = 1 } file:write( "return {"..charE ) for idx,t in ipairs( tables ) do file:write( "-- Table: {"..idx.."}"..charE ) file:write( "{"..charE ) local thandled = {} for i,v in ipairs( t ) do thandled[i] = true local stype = type( v ) if stype == "table" then if not lookup[v] then table.insert( tables, v ) lookup[v] = table.getn(tables) end file:write( charS.."{"..lookup[v].."},"..charE ) elseif stype == "string" then file:write( charS..exportstring( v )..","..charE ) elseif stype == "number" then file:write( charS..tostring( v )..","..charE ) end end for i,v in pairs( t ) do if (not thandled[i]) then local str = "" local stype = type( i ) if stype == "table" then if not lookup[i] then table.insert( tables,i ) lookup[i] = table.getn(tables) end str = charS.."[{"..lookup[i].."}]=" elseif stype == "string" then str = charS.."["..exportstring( i ).."]=" elseif stype == "number" then str = charS.."["..tostring( i ).."]=" end if str ~= "" then stype = type( v ) if stype == "table" then if not lookup[v] then table.insert( tables,v ) lookup[v] = table.getn(tables) end file:write( str.."{"..lookup[v].."},"..charE ) elseif stype == "string" then file:write( str..exportstring( v )..","..charE ) elseif stype == "number" then file:write( str..tostring( v )..","..charE ) end end end end file:write( "},"..charE ) end file:write( "}" ) file:close() end function table.load( sfile ) local ftables,err = loadfile( sfile ) if err then return _,err end local tables = ftables() for idx = 1,table.getn(tables) do local tolinki = {} for i,v in pairs( tables[idx] ) do if type( v ) == "table" then tables[idx][i] = tables[v[1]] end if type( i ) == "table" and tables[i[1]] then table.insert( tolinki,{ i,tables[i[1]] } ) end end for _,v in ipairs( tolinki ) do tables[idx][v[2]],tables[idx][v[1]] = tables[idx][v[1]],nil end end return tables[1] end quest_function
     

    write_log get_coins coins_write spenden select3 table.save table.load
    http-~~-//www.youtube.com/watch?v=5avAKriuCTg

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  11. Me Gusta
    Apocalipto got a reaction from Patoo in [DUDA]Bonus   
    ps desencripta el cliente y traduce ´pero ten en cuenta que cuando agan actulisaciones en el locale algunas cosas se kitaran al = que el item proto
  12. Me Gusta
    Apocalipto reacted to jumarras in CustoMt2 - V1.2 - By Jumarras - Editar MySQL - Item/Mob-Proto, Admins...   
    Hola, despues de que serex me lo haya pedido como favor personal, es broma, pero si que me lo a pedido, y yo lo hago con mucho gusto, voy a postear en este foro un aherramienta que lo llevo desarollando desde hace ya mucho tiempo.
     
    Facilita muchisimo el trabajo de los creadores de metin2 y tambien para mantenimiento de el. Con el podeis hacer muchisimas cosas sin necesidad de tocas la MySQL. Podeis ver las caracteristocas en el changelog.
     

     
    Changelog - Para ver todas las caracteristicas:
     
     
     
     
    Links de Descarga:
    Ultima Version:

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

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Se agradece cualquier comentario o bugs que se encuentren.
  13. Me Gusta
    Apocalipto reacted to Anghios in Protección del .bin   
    Bueno, hace muchísimo que no subo una guía, pero bueno, esto tal vez les interese a la gente que intenta obligar a sus players a que jueguen desde el un nombre determinado de un proceso de Metin2, o que ese proceso de Metin2 tenga los bytes exactos, que no sea un metin2.bin casero que puedan usar para hackear el cliente o similares.
     
    ¿Cómo se hace?
    Descompilamos root.epk y vamos a editar game.py (sí, el dichoso archivo tan delicado jajajaja)
    Buscáis:

    class GameWindow(ui.ScriptWindow): def __init__(self, stream):Y debajo ponéis lo siguiente: 

    #INICIO SISTEMA ANGHIOS #1 import sys from os.path import basename ruta_y_proceso_ejecutado = sys.executable proceso_ejecutado = basename(ruta_y_proceso_ejecutado) if proceso_ejecutado != "NOMBREDELPROCESO.LOQUESEA": os.system("taskkill /im %s /f" % proceso_ejecutado) #/En NOMBREDELPROCESO.LOQUESEA ponemos nuestro proceso, ya sea metin2.bin, metin2.exe, pacohostias.dll, metin2pene.src... lo que quieran  
    Ese sistema evita que entren con un proceso que no sea el que vosotros habéis puesto. El código obtiene el nombre del proceso que se está ejecutando, y si no es el mismo, mata el PID del proceso
     
    ----------
    Para obligar a la gente a que tenga tu .bin y no hagan uno casero para hackear:
     
    Debajo del código que hemos puesto arriba, podemos colindar este:
     

    #SISTEMA ANGHIOS #2 bytes_archivo = os.path.getsize(proceso_ejecutado) if bytes_archivo != BYTESARCHIVO: os.system("taskkill /im %s /f" % proceso_ejecutado) #/ En BYTESARCHIVO ponemos los bytes del .bin, para obtener sus bytes sobra con hacer 2º botón del ratón encima del .bin> propiedades>
    Os saldrá algo parecido a esto-> 4,16 MB (4.370.432 bytes)
    Pues los bytes son: 4370432
     
    Este sistema es igual de fácil que el otro, obtiene los bytes del .bin, si son diferentes a los que habéis puesto, mata el PID del proceso.
    Así que si actualizan el .bin, no olviden de actualizar root, o donde tengáis puesto este sistema
     
    Y esto es todo, un gran sistema al que nadie se le había ocurrido, y mucho menos compartirlo.
    Ea, a disfrutar!
     
     
    LICENCIA DE CREATIVE COMMONS, CREADA 100% POR ANGHIOS (NéSTOR GONZáLEZ). Si se publica en otro lugar, al menos que se tenga la decencia de dejar constancia del autor, del sitio y del hilo.
    Thanks babys.
  14. Me Gusta
    Apocalipto reacted to Serex in Instalar webiste en FreeBSD - Apache + PHP   
    Hola chicos, os voy a explicar como colocar vuestro sitio web en vuestro dedicado instalado apache y php.

    Primero comenzaremos con la instalación de apache:

    1- Nos dirigimos a la ruta de apache e instalamos el modulo.


    cd /usr/ports/www/apache22 make install clean
    2- Agregamos el modulo apache en nuestro archivo de configuración.


    ee /etc/rc.conf
    Y agregamos la siguiente lí­nea al final del archivo:


    apache22_enable="YES"

    Listo ya tenemos apache instalado, ahora procedemos a la instalación de php.

    1- Nos dirigimos hasta la ruta del modulo php.


    cd /usr/ports/lang/php5
    2- Configuramos el módulo con el siguiente comando, y marcamos con la X la extensión para apache, después pulsamos OK.


    make config
    3- Ahora procedemos a instalarlo:


    make install clean
    **Si tenemos, y solo si tenemos el siguiente error en este paso:

    pkgconf-0.8.5 conflicts with installed package(s): pkg-config-0.25_1[/color] [color=#ffa07a] They install files into the same place. You may want to stop build with Ctrl + C.
    Debemos ejecutar este comando, y volver a hacer el paso 3:


    pkg_delete -f pkg-config-0.25_1
    **Repito esto solo lo hacemos si nos da ese error, sino continuamos con el paso 4.

    4 - Instalamos las extensiones para php.


    cd /usr/ports/lang/php5-extensions make config
    5 - Seleccionamos con una X la extensión para MYSQL pulsamos OK y continuamos con el siguiente comando:



    make install clean
    Una vez instalados php y apache pasamos a la configuración de estos para ponerlos en funcionamiento:

    1 - Nos dirigimos a la siguiente ruta y creamos el archivo:


    ee /usr/local/etc/apache22/Includes/php.conf
    2 - Introducimos este texto en el archivo y guardamos:


    <IfModule mime_module> <IfModule php4_module> AddType application/x-httpd-php .php </IfModule> <IfModule php5_module> AddType application/x-httpd-php .php </IfModule> </IfModule>
    3 - Nos dirigimos a la siguiente ruta:


    ee /usr/local/etc/apache22/httpd.conf
    Una vez en este archivo buscamos las siguientes líneas:


    <IfModule dir_module> DirectoryIndex index.html </IfModule>
    Y las reemplazamos por estas:


    <IfModule dir_module> <IfModule php5_module> DirectoryIndex index.php index.html </IfModule> <IfModule !php5_module> <IfModule php4_module> DirectoryIndex index.php index.html </IfModule> <IfModule !php4_module> DirectoryIndex index.html </IfModule> </IfModule> </IfModule>
    Guardamos el archivo y listo.

    5 - Reiniciamos el servidor e iniciamos el módulo apache:


    /usr/local/etc/rc.d/apache22 start shutdown -r now
    Ahora ya tenemos instalado y listo nuestro sitio web en el dedicado, podremos subir los archivos de nuestra web en la siguiente ruta:


    /usr/local/www/apache22/data
    Y ahora os explicare que ventajas y desventajas tiene instalar nuestro sitio web en nuestro dedicado.

    Ventajas:
    -No pagas hosting.
    -La conexion entre base de datos y web es muchísimo mas rápida que con un hosting normal.
    -La velocidad de carga de la web mejora considerablemente.
    -Tienes mayor transferencia y ancho de banda.

    Desventajas:
    -Consumes mas recursos en el dedicado (Si tienes un dedicado con mas de 3 gb de ram apenas se nota)
    -Si se cae el servidor se cae la web.
  15. Me Gusta
    Apocalipto reacted to Akroma in quest de reseteos   
    Bueno aqui os dejo la quest de reseteos creada por mi, esta 100% terminada lo unico que debereis hacer es añadir 1 funcion para que devuelva el nivel a 1 que no se cual es ahora exactamente, si me viene a la cabeza lo editare yo mismo, sino que lo edite o keko o raul.
     
    link pastebin:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    aqui por si no quereis ir alli.
     
     

    quest reseteo begin state start begin local exp = pc.get_exp() local level = pc.get_level() local money = pc.get_gold() when login with pc.level == 250 and pc.getqf("prestigios") == 0 begin chat("Puedes subir de prestigio") chat("Perderas, el dinero, nivel y exp") chat("Pero obtendras valores especiales") chat("Te ha aparecido 1 objeto para resetear") chat("Usalo si quieres resetear") end when id.use with pc.level == 250 begin say_title("Ascension a prestigio 1") say("Deseas ascender a prestigio 1?") local r = select("Si", "No") if r == 1 then pc.give_exp2(-exp) pc.change_gold(-money) item.remove() pc.setqf("prestigios", pc.getqf("prestigios") +1) notice_all(""..pc.get_name().." ha ascendido de prestigio") end when login with pc.getqf("prestigios") == 1 begin if get_time() < pc.getqf("temporizador_bonus") then return end affect.add_collect(apply.CRITICAL_PCT, 5, 60*60*24*365) affect.add_collect(apply.CRITICAL_PCT, 5, 60*60*24*365) affect.add_collect(apply.CRITICAL_PCT, 5, 60*60*24*365) affect.add_collect(apply.CRITICAL_PCT, 5, 60*60*24*365) pc.setqf("temporizador_bonus", get_time() + 60*60*24*365) end end end falta añadir solo 1 funcion para que baje el nivel
  16. Me Gusta
    Apocalipto reacted to AgustinMüller in correpcion de quest gracias   
    EDITO: El error es "local pvp = select ("EVENTO PVP,"Cancelar")", te falto una comilla qudaria asi "local pvp = select ("EVENTO PVP","Cancelar")"
  17. Me Gusta
    Apocalipto got a reaction from DryUz in Fixear DMG HACK Rapido y facil   
    waooooooo me encanta gracias reina
  18. Me Gusta
    Apocalipto reacted to DryUz in Fixear DMG HACK Rapido y facil   
    Game (Servidor)
    Abrimos el archivo GAME  con el programa Hxd  
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  y vamos al offset Ctrl+G buscamos "00128763"
    y cambiamos 04 por 1E
     
    Metin2.exe (Cliente) o metin2cliente.bien o metin2.bin algun bin que tengas
    lo habres tambien con el hxd y
    Vamos al ejecutable de nuestro cliente (osea el metin2client.exe o como lo tengan nombrado)
    y vamos al Ctrl+G.
    "000011C6" y cambiamos 33 por EB
    "000011C7" y cambiamos C0 por F8
     
     
    y con eso chusito hacks y creditos uj ni idea me da igual! cuidense bye saluditos!!
    para los que no lo pudieron hacer aca esta game+bin anti hack GM MODE
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    El game trae:
    Autopotas
    Rates Mayores a 200%
    1 segundo al tirar objeto
    Fixeado full anti hack
    Mascotas atacando + el bin
    Pong: testtesttesttes , o como sea
    status :125 lv max 250
    buena estabilidad osea no se cae!
    experiencia bien repartida hasta lv 127
    lo demas ni me acuerdo asi que para no mentrirles no lo pondre! suerte!!

  19. Me Gusta
    Apocalipto reacted to  Pantsu  in Post informativo: Funciones   
    *Tema limpiado*
     
    No os desviéis del tema general, una persona puede ir construyendo una guía no hace falta ir contestando cosas sin motivo apriori.
    Intentad poner los mensajes cuando ElRaulxX acabe de hacer este topico.
     
    *La IP del invitado ha sido baneado de este foro*
  20. Me Gusta
    Apocalipto reacted to Elite™ in Quest Nuevo sistema de inicio de gameforge   
    quest give_basic_weapon begin
    state start begin
    when login begin
    if pc.getqf("basic_weapon") == 0 then
    pc.setqf("basic_weapon", 1)
    pc.give_item2(50187, 1)
    end
    end
     
    when 50187.use begin
    local item_vnum = 10
    if pc.job == 3 then
    item_vnum = 7000
    elseif pc.job == 1 then
    item_vnum = 1000
    end
    local item_count = pc.countitem(item_vnum)
    local equip_weapon = pc.weapon
    if item_count == 0 and equip_weapon != item_vnum then
    pc.give_item2(item_vnum)
    pc.give_item2(50188, 1)
    pc.give_item2(27051, 20)
    pc.give_item2(27052, 10)
    pc.give_item2(27053, 5)
    pc.give_item2(27054, 5)
    item.remove()
    end
    end
     
    when 50188.use begin
    if pc.get_level() >= 10 then
    pc.give_item2(72723, 1)
    pc.give_item2(27116, 3)
    pc.give_item2(71050, 3)
    pc.give_item2(71004, 3)
    pc.give_item2(50189, 1)
    pc.remove_item(50188, 1)
    else
    syschat("Tu nivel es inferior que el nivel del objeto tras la mejora.")
    end
    end
     
    when 50189.use begin
    if pc.get_level() >= 20 then
    pc.give_item2(72727, 1)
    pc.give_item2(27116, 3)
    pc.give_item2(71050, 3)
    pc.give_item2(76006, 1)
    pc.give_item2(71085, 3)
    pc.give_item2(71084, 3)
    pc.give_item2(50190, 1)
    pc.remove_item(50189, 1)
    else
    syschat("Tu nivel es inferior que el nivel del objeto tras la mejora.")
    end
    end
     
    when 50190.use begin
    if pc.get_level() >= 30 then
    pc.give_item2(71050, 3)
    pc.give_item2(76018, 3)
    pc.give_item2(25040, 5)
    pc.give_item2(70003, 1)
    pc.give_item2(50191, 1)
    pc.remove_item(50190, 1)
    else
    syschat("Tu nivel es inferior que el nivel del objeto tras la mejora.")
    end
    end
     
    when 50191.use begin
    if pc.get_level() >= 40 then
    pc.give_item2(39031, 3)
    pc.give_item2(76018, 3)
    pc.give_item2(71153, 1)
    pc.give_item2(70003, 1)
    pc.give_item2(50192, 1)
    pc.remove_item(50191, 1)
    else
    syschat("Tu nivel es inferior que el nivel del objeto tras la mejora.")
    end
    end
     
    when 50192.use begin
    if pc.get_level() >= 50 then
    pc.give_item2(70038, 20)
    pc.give_item2(39031, 3)
    pc.give_item2(76018, 3)
    pc.give_item2(71095, 5)
    pc.give_item2(70058, 1)
    pc.give_item2(50193, 1)
    pc.remove_item(50192, 1)
    else
    syschat("Tu nivel es inferior que el nivel del objeto tras la mejora.")
    end
    end
     
    when 50193.use begin
    if pc.get_level() >= 60 then
    pc.give_item2(71032, 3)
    pc.give_item2(76018, 3)
    pc.give_item2(76000, 5)
    pc.give_item2(39031, 3)
    pc.give_item2(50194, 1)
    pc.remove_item(50193, 1)
    else
    syschat("Tu nivel es inferior que el nivel del objeto tras la mejora.")
    end
    end
     
    when 50194.use begin
    if pc.get_level() >= 70 then
    pc.give_item2(50195, 1)
    pc.remove_item(50194, 1)
    else
    syschat("Tu nivel es inferior que el nivel del objeto tras la mejora.")
    end
    end
     
    when 50195.use begin
    if pc.get_level() >= 80 then
    pc.give_item2(50196, 1)
    pc.remove_item(50195, 1)
    else
    syschat("Tu nivel es inferior que el nivel del objeto tras la mejora.")
    end
    end
    when 50196.use begin
    if pc.get_level() >= 90 then
    pc.remove_item(50196, 1)
    else
    syschat("Tu nivel es inferior que el nivel del objeto tras la mejora.")
    end
    end
    end
    end
     
    Pd: Queda añadir la recomepensa de unos cuantos cofres
    Aqui estan la mayoria de los drops sacados por los usuarios -->
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  21. Me Gusta
    Apocalipto reacted to izaviona in [GUIA]Como usar el "in game map editor"   
    NOTA: Con la publicación del source de Metin2 y su respectivo editor de mapas, esto ya queda practicamente en desuso.
     
     
    IN GAME MAP EDITOR



    Imagenes de muestra:



    Para usarlo necesitais el Python Module Loader(
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.), lo extraeis en la raiz del cliente que quereis editar, luego descargais el in game map editor 1.1(Debes iniciar sesión para ver el contenido del enlace en esta publicación.), esto lo descomprimiis tambien en la carpeta raiz del cliente junto al Python Module Loader.

    Haora ejecutais el Python Module Loader(m2PythonLoader.exe),

    Os aparecera esto:


    Una vez ejecutado, ejecutais el cliente y os logueais hasta estar dentro del juego, cuando estais dentro, pulsais F9 y os aparecera una ventana para elegir el archivo .py,

    Aparecera esto:


    Le damos a select y buscamos el py, cuando lo selecciones, le damos a run y nos aparecera el editor.


    El menu de los objetos es este:



    En el podeis navegar y elegir lo que querais, Aqui os dejo un carpeta con todos los objetos del cliente:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.(el de arriba son edificios xD)

    Para acceder a la carpeta es muy facil:
    Vamos a la ruta del cliente Aqui:
    y elegimos la carpeta necesiaria, en este caso "map_object_editor" para los edificios y "Objekte sortiert Property DE 2012" para los objetos.

    - Para seleccionar una estructura 3d dentro del juego solo es hacer clic sobre ella, para borrarla le damos clic y luego en la tecla suprimir.

    - Si tu seleccionas un objeto dentro del juego y le das a , directamente te pones a construir esa estructura sin tener que buscarla.

    - , esto hace que construyas y la estructura no se valla del puntero, si quieres seleccionar otra
    estructura le das a y seleccionas la que quieras.

    - ,esto exporta el mapa que has editado.
    Cuando le das a exportar aparecera esto:



    elegis la ruta que querais y os guardara en la ruta que habeis elegido el mapa con sus respectivos areadatas.txt

    Las demas cosas ya les dejo que toqueteen jeje

    Saludos y espero haber ayudado a quellas personas que no saben usarlo aun!

    Fuente: Nerule y musicinstructor.
    Creditos a mi por la guia, creada desde cero.
×
×
  • Crear nuevo...