Jump to content

Kibya

Miembro
  • Contador contenido

    7
  • Ingreso

  • Última visita

  • Días ganados

    1

Actividad de reputación

  1. Me Gusta
    Kibya reacted to Shogun in [WOM2] Curse Ring (Anillo de maldición)   
    Esta sencilla quest da lugar a un objeto de un sólo uso (70111 pero podéis usar cualquiera) con el que podemos poliformar a otro jugador que se encuentre cerca de nosotros en un monstruo aleatorio durante 5 minutos. Diversión asegurada para los jugadores.
     

    quest polyplayer begin state start begin when 70111.use begin local start_count = pc.count_item(item.get_vnum()) -- to prevent usage of bugs only say_title("Ring of Curse:") say("") say("Enter the name of the player you want to curse:") say("") local name = input() local vid = find_pc_by_name(name) --local name = pc.getname() if name == "" then return elseif name == pc.get_name() then say_title("Ring of Curse:") say("") say("You can not curse yourself.") say("") return elseif vid == 0 then say_title("Ring of Curse:") say("") say("This player is not online or does not exist.") say("") return elseif not pc.is_near_vid(vid, 10) then say_title("Ring of Curse:") say("") say("The player is too far away.") say("") return end if pc.count_item(item.get_vnum()) != start_count then return end local myvid = pc.select(vid) vnums = {2101, 20016, 20002, 11000, 5001, 992, 1301, 1303, 2191, 5161, 5162, 5163} i = number(1,12) pc.polymorph(vnums[i], 5*60) syschat("You have been cursed.") pc.select(myvid) say_title("Poly player:") say("") say("The player is now cursed for 5 minutes.") say("") item.remove() end end end Créditos: musicinstructor
  2. Me Gusta
    Kibya reacted to Shogun in [WOM2] Baekdu Mountain   
    Esta quest creada por mí hace unos años convierte el mapa t1 (metin2_map_t1), originalmente creado por Ymir para las guerras de reinos y que terminó descartado, en un mapa de uso múltiple para eventos configurable.
     
    A través del arquero guardían podemos abrir y cerrar el acceso así como limitar qué reinos y qué niveles pueden acceder.
     
    La pongo en pastebin que este foro me rompe los tabs xd
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Para que los jugadores renazcan en su lugar correcto dentro del mapa es necesario también añadir lo siguiente en Town.txt
     
    452 579
    469 200
    208 300
    452 579
  3. Me Gusta
    Kibya reacted to UnderWorks™ in Nueva Arma :D   
    Me canse de los foros latinos dan vergüenza, no tienen cerebro para pensar antes de escribir sinceramente da asco, seguiré trabajando en mis foros antiguos como siempre y no aportare nunca mas anda a ningún foro latino. Los que me conocen sabrán como me llamo en elitepvp y me podrán seguir contactando vía PV ahí o en skype, solo si me hablan en ingles, ya que no atenderé ningún tipo de ayuda u dudas latinas. saludos la verdad un asco.   Usuarios como:   -MasterLum -JosenG -TiiCo Y podría seguir nombrando..... generar estas cosas.   Un Saludo a mis grandes amigos y les deseo lo mejor y se que me podrán encontrar en skype y que hablan ingles, y los que no hablan ingles si los atenderé pro que ellos si son gente de calidad.   -SeMa -Ryen -PACIFICADOR (tu me trajiste de nuevo a zone, pero lamentablemente esta vez nadie me traerá de vuelta, ya que esta vez esta totalmente decidido) -juanse44447 -Zeler -Dirti (no esta en el foro pero igual lo nombro) -Shino (esta en el foro, pero no diré cual es su usuario) -Miko (esta en el foro, pero no diré cual es su usuario)   Suerte a todos, por que aunque me hallan insultado, yo seguiré siendo cordial y gentil como siempre lo fui.
  4. Me Gusta
    Kibya 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.
  5. Me Gusta
    Kibya 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.
  6. Me Gusta
    Kibya reacted to fuuton97 in [MiniCurso] - ¿Cómo Empezar a Crear tu Propia Misión?   
    Buenas, y Hola a todos los zoneros y/o visitantes, presentes en el día de hoy, la presente de este Mini-Curso es para enseñarles como crear su propia misión de Metin2, primero que nada comenzaremos con lo principal de una misión de metin2, como es un Mini-Curso no lo alargaré mucho, después de cierto tiempo prudente veré y crearé un CURSO con todo los "juguetes".
     
    Bien, primero que nada necesitaremos la disponibilidad de GANAS y TIEMPO, esos son las partes más fundamentales, y no solo eso, tener mentalidad de creación y difusión. Hay que tener en cuenta que esto conlleva a un proceso de paciencia, puede que les de error si es su primera vez, sino les irá super bien; no obstante con este Mini-Curso que les voy a entregar aprenderán a crear quest de misión de Metin2, espero que aprecien mi tiempo y trabajo, que es 100% para ustedes.
     
    Materiales a Utilizar:
     
    - Un servidor de Metin2, sea hamachi, sin hamachi o Dedicado.
    - Saber compilar las quest o cargar.
     
    Bien, comencemos:
     
    1- Abrimos un archivo .txt en el escritorio, ponemos de nombre: "misión_test", y cambiamos la extensión .txt a .quest, y guardamos.
     
    2- Abrimos el archivo: mision_test.quest con un editor de texto, recomiendo Notepad++. La primera función: Cómo todos saben existe desde se inicia y ejecute la quest, para ellos escribirán esto:

    quest mision_test begin state start begin 3- Toda misión requiere sobre su Nivel para efectuarla, por defecto pondremos nivel 100, y lo colocamos:

    when login or levelup or enter with pc.get_level() == 100 begin La función: "login" dice que al loguearse en el juego saldrá la misión, y "levelup" que al llegar al nivel puesto, en este caso 100 saldrá la misión al instante.
     
    4- Ahora debemos comenzar con un set_state, lo hacemos de esta manera, y lo colocamos:
     

    set_state( mision_test ) Agregamos dos end, para cerrar de el begin de pc.get_level() y el primero de la ejecución:

    end end Hasta ahora les deberá quedar así:

    quest mison_test begin state start begin when login or levelup or enter with pc.get_level() == 100 begin set_state( mision_test ) end end 5- Ahora debemos llamar el state, seguimos y colocamos:

    state mision_test begin 6- Escribimos y ponemos el llamado de when letter:

    when letter begin 7- Ahora ponemos la función de send_letter, osea a mostrar el nombre de la misión que aparecerá, escribimos:

    send_letter("Misión Test By Fuuton97") 8- Cerramos con un "END" por el begin, y escribimos:

    end Hasta el momento la misión debe quedarnos así:

    quest mision_test begin state start begin when login or levelup or enter with pc.get_level() >= 100 begin set_state( mision_test ) end end state mision_test begin when letter begin send_letter("Misión Test By Fuuton97") end 9- Bien, ahora pondremos la función de "button or info", para que al darle click a la misión o el pergamino les salga el escrito o la misión a realizar, y escribimos:

    when button or info begin 10- Seguidamente colocamos la información con las funciones: say, say_title y/o say_reward, y escribimos:

    say_title("Bienvenido a la Misión Test By Fuuton97") say("Hola ".. pc.get_name() .." ,esto es una misión tester") say("en donde tendrás una misión épica.") say("Recuerda que esto es un tester de una misión") say("que está creando Fuuton97 para Metin2 Zone.") say("Destruye un Metin de Nivel 80.")  
    Ese es el texto, ustedes podrán añadirle más texto, con solo seguir los parámetros de "say("")"
     
    11- Agregamos dos "END" y un set_state, y escribimos:

    set_state(test) end end Hasta ahora debería quedarnos así:
     

    quest mision_test begin state start begin when login or levelup or enter with pc.get_level() >= 100 begin set_state( mision_test ) end end state mision_test begin when letter begin send_letter("Misión Test By Fuuton97") end when button or info begin say_title("Bienvenido a la Misión Test By Fuuton97") say("Hola ".. pc.get_name() .." ,esto es una misión tester") say("en donde tendrás una misión épica.") say("Recuerda que esto es un tester de una misión") say("que está creando Fuuton97 para Metin2 Zone.") say("Destruye un Metin de Nivel 80.") set_state(test) end end 12- Ahora agregamos e iniciamos con el state "test" y un letter; y escribimos:

    state test begin when letter begin 13- Escribimos un send_letter y un end al final, y escribimos:

    send_letter("Destruye el Metin - Misión Test By Fuuton97") end 14- Luego escribimos un button or info y su respectivo texto, más 1 end al final, y ponemos:

    when button or info begin say_title("TEST MISIóN:") say_reward( " Vete a las zonas donde esté el Metin de Nivel 80, Mapa Bosque") say("") end Hasta ahora toda la misión debería estar así:
     

    quest mision_test begin state start begin when login or levelup or enter with pc.get_level() >= 100 begin set_state( mision_test ) end end state mision_test begin when letter begin send_letter("Misión Test By Fuuton97") end when button or info begin say_title("Bienvenido a la Misión Test By Fuuton97") say("Hola ".. pc.get_name() .." ,esto es una misión tester") say("en donde tendrás una misión épica.") say("Recuerda que esto es un tester de una misión") say("que está creando Fuuton97 para Metin2 Zone.") say("Destruye un Metin de Nivel 80.") set_state(test) end end state test begin when letter begin send_letter("Destruye el Metin - Misión Test By Fuuton97") end when button or info begin say_title("TEST MISIóN:") say_reward( " Vete a las zonas donde esté el Metin de Nivel 80, Mapa Bosque") say("") end 15- Bien, ahora procederemos a poner la función .kill al metin, para que al destruirlo complete la misión el personaje y di su premio, y escribimos:
     

    when 8025.kill begin 16- Ahora solo nos tocará poner el texto final, y escribimos:

    say_title("Misión TEST ACABADA:!") say("Has acabado con el Metin 80!") say("Misión Test By Fuuton97") say("Recibirás tu recompensa:") say_reward("500.000.000 Exp") say_reward("100.000.000 Yang") 17- Ahora solo nos falta colocar la función de dar yang: pc.change_money(xxxxxxx) y la de experiencia: pc.give_expe2(xxxxxxx), y escribimos:

    pc.change_money(1000000000) pc.give_exp2(5000000000) 18- Añadimos una función de chat(), para texto final, un clear_letter() y cerramos el set de la misión COMPLETADA, y escribimos:

    chat("Has completado la Misión Test.") chat("By Fuuton97.") clear_letter() set_state(__COMPLETE__) 19- Por último añadimos los END'S, más el state de la misión COMPLETADA, y escribimos:

    end end end state __COMPLETE__ begin end end Ahora les deberá que dar la misión TODA COMPLETA y TERMINADA ASí:

    quest mision_test begin state start begin when login or levelup or enter with pc.get_level() >= 100 begin set_state( mision_test ) end end state mision_test begin when letter begin send_letter("Misión Test By Fuuton97") end when button or info begin say_title("Bienvenido a la Misión Test By Fuuton97") say("Hola ".. pc.get_name() .." ,esto es una misión tester") say("en donde tendrás una misión épica.") say("Recuerda que esto es un tester de una misión") say("que está creando Fuuton97 para Metin2 Zone.") say("Destruye un Metin de Nivel 80.") set_state(test) end end state test begin when letter begin send_letter("Destruye el Metin - Misión Test By Fuuton97") end when button or info begin say_title("TEST MISIóN:") say_reward( " Vete a las zonas donde esté el Metin de Nivel 80, Mapa Bosque") say("") end when 8025.kill begin say_title("Misión TEST ACABADA:!") say("Has acabado con el Metin 80!") say("Misión Test By Fuuton97") say("Recibirás tu recompensa:") say_reward("500.000.000 Exp") say_reward("100.000.000 Yang") pc.change_money(1000000000) pc.give_exp2(5000000000) chat("Has completado la Misión Test.") chat("By Fuuton97.") clear_letter() set_state(__COMPLETE__) end end end state __COMPLETE__ begin end end 20- último paso, compilar la quest, solo subimos el archivo cuyo nombre le pusimos que fue: mision_test.quest al directorio vía Winscp a: /home/game/share/locale/germay/quest la suben y dan permisos 777, seguidamente abren le english_list, o hongkong_list y ponen abajo el nombre de la quest: mision_test.quest
     
    Por último compilamos la quest, vamos a nuestro Putty, si es dedicado o en la máquina virtual de Virtual BOX, y ejecutamos este comando:

    ./qc mision_test.quest Y Listo.
     
    Bueno, hemos llegado al final de este MiniCurso sobre cómo crear una misión desde 0, espero que valoren mi tiempo y trabajo, solo exclusivamente para METIN2 ZONE, y si piensan postear en otra parte dejen créditos.
     
    Próximo MiniCurso: Creación de Misión con pc.getqf + asignar un valor de cuantos mob o metines destruir.
     
    Saludos.
  7. Me Gusta
    Kibya reacted to Inside in Script de detección cuentas editadas.   
    Bien pues para ir dandole un poco de movilidad, les paso esta script desarrollada 100% cuya finalidad es detectar objetos editados y autobanear la cuenta que los contenga.
     
    Primero un par de definiciones, entiendase por "Objeto editado" un item que tenga MAS del maximo de cualquier bono... ejemplo, si en tu server tienes configurado como maxhp 2000 y hay algun item que tenga de max hp 2001 automaticamente se baneara.
     
    Requerimientos:
    Acceso a Cron Jobs Acceso a Linea de comandos Servidor Mail configurado (opcional) El Script: 
    #!/bin/bash
    #DATOS MYSQL
    FECHA=$(date)
    DBUSER=root
    DBPASS=MICONTRASEÑA
    TABLA=account
    DBASE=account
    #BONOS 1 AL 5
    BONOS15='
    MAX_HP-1
    MAX_SP-2
    CON-3
    INT-4
    STR-5
    DEX-6
    ATT_SPEED-7
    MOV_SPEED-8
    CAST_SPEED-9
    HP_REGEN-10
    SP_REGEN-11
    POISON_PCT-12
    STUN_PCT-13
    SLOW_PCT-14
    CRITICAL_PCT-15
    PENETRATE_PCT-16
    ATTBONUS_HUMAN-17
    ATTBONUS_ANIMAL-18
    ATTBONUS_ORC-19
    ATTBONUS_MILGYO-20
    ATTBONUS_UNDEAD-21
    ATTBONUS_DEVIL-22
    STEAL_HP-23
    STEAL_SP-24
    MANA_BURN_PCT-25
    BLOCK-27
    DODGE-28
    RESIST_SWORD-29
    RESIST_TWOHAND-30
    RESIST_DAGGER-31
    RESIST_BELL-32
    RESIST_FAN-33
    RESIST_BOW-34
    RESIST_FIRE-35
    RESIST_ELEC-36
    RESIST_MAGIC-37
    RESIST_WIND-38
    REFLECT_MELEE-39
    POISON_REDUCE-41
    EXP_DOUBLE_BONUS-43
    GOLD_DOUBLE_BONUS-44
    ITEM_DROP_BONUS-45
    IMMUNE_STUN-48
    IMMUNE_SLOW-49
    ATT_GRADE_BONUS-53
    ATT_BONUS_TO_WARRIOR-59
    ATT_BONUS_TO_ASSASSIN-60
    ATT_BONUS_TO_SURA-61
    ATT_BONUS_TO_SHAMAN-62
    RESIST_WARRIOR-78
    RESIST_ASSASSIN-79
    RESIST_SURA-80
    RESIST_SHAMAN-81
    '
    #BONOS 6 Y 7
    BONOS67='
    MAX_HP-1
    MAX_SP-2
    CON-3
    INT-4
    STR-5
    DEX-6
    CRITICAL_PCT-15
    PENETRATE_PCT-16
    ATT_GRADE_BONUS-53
    ATT_BONUS_TO_MONSTER-63
    ATT_BONUS_TO_WARRIOR-59
    ATT_BONUS_TO_ASSASSIN-60
    ATT_BONUS_TO_SURA-61
    ATT_BONUS_TO_SHAMAN-62
    RESIST_WARRIOR-78
    RESIST_ASSASSIN-79
    RESIST_SURA-80
    RESIST_SHAMAN-81
    ATT_SPEED-7
    MOV_SPEED-8
    '
    #CONSULTA BONOS 1 AL 5
    for i in $BONOS15; do
    line=$i
    NOMBRE=${line%-*}
    VALUE=${line#*-}
    #echo $NOMBRE
    #echo $VALUE
    MAX=`echo "SELECT player.item_attr.lv5 FROM player.item_attr WHERE apply='$NOMBRE' ;" | mysql -N -B -u $DBUSER -p$DBPASS $DBASE`
    for valmax in $MAX ;
    do
    #echo $valmax
    RES=`echo "SELECT player.player.account_id FROM player.item, player.player WHERE ((attrtype0=$VALUE and attrvalue0 > $valmax) OR (attrtype1=$VALUE and attrvalue1 > $valmax) OR (attrtype2=$VALUE and attrvalue2 > $valmax) OR (attrtype3=$VALUE and attrvalue3 > $valmax) OR (attrtype4=$VALUE and attrvalue4 > $valmax) OR (attrtype5=$VALUE and attrvalue5 > $valmax) OR (attrtype6=$VALUE and attrvalue6 > $valmax)) and ((player.item.owner_id = player.player.id) or (player.item.owner_id = player.player.account_id)) ;" | mysql -N -B -u $DBUSER -p$DBPASS $DBASE`
    for data in $RES ;
    do
    #aki bannear a la banda o hacer el informe
    BANEO=`echo "UPDATE account SET status='AUTOBAN' WHERE id='$data' ;" | mysql -N -B -u $DBUSER -p$DBPASS $DBASE`
    echo $FECHA account: $data bono: $NOMBRE valor maximo: $valmax
    done
    done
    done
    #CONSULTA BONOS 6 Y 7
    for i in $BONOS67; do
    line=$i
    NOMBRE=${line%-*}
    VALUE=${line#*-}
    #echo $NOMBRE
    #echo $VALUE
    MAX=`echo "SELECT player.item_attr_rare.lv5 FROM player.item_attr_rare WHERE apply='$NOMBRE' ;" | mysql -N -B -u $DBUSER -p$DBPASS $DBASE`
    for valmax in $MAX ;
    do
    #echo $valmax
    RES=`echo "SELECT player.player.account_id FROM player.item, player.player WHERE ((attrtype0=$VALUE and attrvalue0 > $valmax) OR (attrtype1=$VALUE and attrvalue1 > $valmax) OR (attrtype2=$VALUE and attrvalue2 > $valmax) OR (attrtype3=$VALUE and attrvalue3 > $valmax) OR (attrtype4=$VALUE and attrvalue4 > $valmax) OR (attrtype5=$VALUE and attrvalue5 > $valmax) OR (attrtype6=$VALUE and attrvalue6 > $valmax)) and ((player.item.owner_id = player.player.id) or (player.item.owner_id = player.player.account_id)) ;" | mysql -N -B -u $DBUSER -p$DBPASS $DBASE`
    for data in $RES ;
    do
    #aki bannear a la banda o hacer el informe
    BANEO=`echo "UPDATE account SET status='AUTOBAN' WHERE id='$data' ;" | mysql -N -B -u $DBUSER -p$DBPASS $DBASE`
    echo $FECHA account: $data bono: $NOMBRE valor maximo: $valmax
    done
    done
    done
    #mail -s "Informe Baneo Automatico" "[email protected]" < RES.TXT
     
     
    Instalacion:
     
    1.- Copiar el texto a un archivo de notepad y guardarlo con el nombre que quieran y extension .sh por ejemplo autobaneo.sh
     
    2.- Al inicio del codigo se definen las variables con los datos del mysql, cambiar los datos segun como los tengan en su server.
     
    3.- al final del script esta comentada (#) la linea de correo, esta linea es por si queremos enviarnos el "log" via correo electronico, si tienes el server mail de tu freebsd configurado y fincionando puedes descomentarla y porsupuesto cambiar el correo por el tuyo, si no dejala asi.
     
    4.- una vez hecho todo esto, subir el archivo fia filezilla o winscp a tu servidor, no te olvides anotar la ruta, por comodidad lo ideal seria subirlo a la carpeta de los files, por ejemplo /usr/home/game una vez subido anota la ruta.
     
    5.- ejecutar el siguiente comando para establecer los permisos del script:
    chmod u+x /ruta/del/script.sh
     
    Si nuestra ruta al script es /usr/home/game y nuestro script se llama autoban.sh el comando seria asi:
    chmod u+x /usr/home/game/autoban.sh
     
    Agradecer no cuesta.
     
    Saludos!
×
×
  • Crear nuevo...