Jump to content

themagicfreak

Miembro
  • Contador contenido

    18
  • Ingreso

  • Última visita

Todo lo publicado por themagicfreak

  1. Bien esto lo publico iMer de elitepvpers el 19-06-2013 y trata de que un personaje tiene que estar a 25 metros o menos para golpear a otro personaje. Para utilizarlo hay que aumentar el tamaño de la memoria asignada para crear la clase de caracteres. esto se hace implementando este Diff: Game 2089M: game 0005EE00: 94 A0 Game 2089: game 0005EE00: 94 A0 Obviamente, sólo el game 2089 (M) es compatible y si estás utilizando una versión anterior debes actualizar el game a la 2089 o 2089M. Archivos .so 2089M: http://imer.cc/files/libgame_kickhackfix_2089M.so 2089: http://imer.cc/files/libgame_kickhackfix_2089.so Creditos: iMer Fuente: http://www.elitepvpers.com/forum/metin2-pserver-guides-strategies/2669955-lib-besserer-kickhackfix.html
  2. Hola foreros y foreras hoy les traigo algo que a simple vista me impacto y a la vez gusto mucho,desde elitepvpers les traigo este login para sus clientes que lo disfruten. ANTES QUE NADA HACER COPIA DE SEGURIDAD DE LOS ARCHIVOS QUE VIENEN EN EL COMPRIMIDO: Bien aqui os dejo un video y una imagen: Video: http://www.youtube.com/watch?v=IyT6XiVCe6M Imagen: http://i.epvpimg.com/L3cab.jpg Instalacion: primero de nada debemos decompilar el locale.epk locale.eix,seguidamente irnos a la carpeta ui (dentro del locale decompilado) y sustituir los archivos por los que vienen en el archivo comprimido.(/locale/ui) Decompilamos el root.epk y root.eix,sustituimos o copiamos el/los archivos "intrologin.py","serverinfo.py","intrologin.txt" y "ui.txt" Compilamos el locale y el root y añadimos al cliente. P.D: Acuerdate en el archivo serverinfo.py de poner la ip y puertos que uses para tu servidor. Descarga: http://www.mediafire.com/?gaabqqhmnzcspws Creditos: AG.Simpsey Fuente: Elitepvpers
  3. es que no se que quieres que mas explique simplemente es editar el game y meter ese diff en el game que uses no hay mas y mil guias hay de eso...( de como editar el game),por algo esta en modificacion avanzada no voy a estar ahora poniendo como diffear un game si hay tutoriales en el foro..http://metin2zone.ne...iff-en-un-game/ y lo de copy paste... lo traduje mas o menos entendible y sencillo,pero mejor ubiera sido que solo los que tubieran servidor dedicado ubieran utilizado solo los files? pues no,traje esto puesto que es (para mi) una informacion importante tanto para estos files como para otros por ejemplo lauling V.3 que tiene el mismo error,y si te fijas en mis post traigo aportes que hasta el momento en esta comunidad no estaban posteadas,y siempre lo digo,Fuentes y creditos.
  4. ami tambien me sono raro pero al parecer si... es como un trabajo del pj
  5. Hola bueno he sacodo este sistema de elitepvpers y para los que alli no se enteran mucho las traigo aqui,alla vamos. Está viendo el "sistema de la minería", que ha sido publicado recientemente. ¿Qué se puede hacer? -> puedes comprar minas -> Se puede ajustar la APN de trabajo para obtener más yang de las minas -> Puede permitir a los jugadores trabajar, lo que da a ambas partes Yang -> puedes cambiar un balance en el que se puede ver la cantidad de las minas -> puedes tratar de atacar a otras minas -> Se necesitan pases de plata y Yang para la apertura de una mina de plata -> La búsqueda es fácilmente personalizable. La quest: quest mine begin state start begin function get_minecount(playername) if playername == nil then local playername = pc.get_name() end local curmines = mysql_query("SELECT mines FROM player.player WHERE player.`name`='"..playername."'") return tonumber(curmines[1][1]) end function get_working() local result = mysql_query("SELECT working FROM player.player WHERE player.name='"..pc.get_name().."'") return tonumber(result[1][1]) end function buy_mine() local curmine = mine.get_minecount() mysql_query("UPDATE player.player SET mines=mines+1 WHERE player.`name`='"..pc.get_name().."'") mysql_query("INSERT INTO player.mine_proto (owner) VALUES('"..pc.get_id(pc.get_name()).."')") mysql_query("INSERT INTO player.mine_index (id) SELECT id FROM sh_player.mine_proto WHERE mine_proto.`owner`='"..pc.get_id(pc.get_name()).."'") chat("Du hast eine Silbermine gekauft!") chat("Du hast nun "..curmine.." Minen") end function calc_price() local pricelist = { } local curmine = mine.get_minecount() local calcprice = curmine*100000000+100000000 table.insert(pricelist, calcprice) table.insert(pricelist, 1) return pricelist end function get_title(mine_id) assert(type(mine_id)=="number", "mine_id ist keine Zahl!") local title = mysql_query("SELECT bezeichnung FROM player.mine_proto WHERE mine_proto.id='"..mine_id.."'") return tostring(title[1][1]) end function get_money(mine_id) assert(type(mine_id)=="number", "mine_id ist keine Zahl!") local money = mysql_query("SELECT money FROM player.mine_proto WHERE mine_proto.id='"..mine_id.."'") return tonumber(money[1][1]) end function get_workers(mine_id) assert(type(mine_id)=="number", "mine_id ist keine Zahl!") local workers = mysql_query("SELECT workers FROM player.mine_proto WHERE mine_proto.id='"..mine_id.."'") return tonumber(workers[1][1]) end function get_user_workers(mine_id) assert(type(mine_id)=="number", "mine_id ist keine Zahl!") local result = {} local title = mysql_query("SELECT user1,user2,user3,user4,user5 FROM player.mine_index WHERE mine_index.id='"..mine_id.."'") for x = 1, 5, 1 do table.insert(result, tonumber(title[1][x])) end return result end function get_income(mine_id) assert(type(mine_id)=="number", "mine_id ist keine Zahl!") local workers = mine.get_workers(mine_id) local workers2 = mine.get_user_workers(mine_id) local counter = 0 for x = 1, 5, 1 do if workers2[x] != 0 then local counter=counter+1 end end local income1 = workers*10000 local income2 = counter*50000 return tonumber(income1+income2) end function update(mine_id) assert(type(mine_id)=="number", "mine_id ist keine Zahl!") local last_update = mysql_query("SELECT last_update FROM player.mine_proto WHERE mine_proto.id='"..mine_id.."'") local calcdif = get_time()-tonumber(last_update[1][1]) local abstand = math.floor(calcdif/3600) if abstand == 0 then return end local mine_income = mine.get_income(mine_id) local give_money = mine_income*abstand mysql_query("UPDATE player.mine_proto SET last_update='"..get_time().."' WHERE mine_proto.id='"..mine_id.."'") mysql_query("UPDATE player.mine_proto SET money=money+'"..tonumber(give_money).."' WHERE mine_proto.id='"..mine_id.."'") end function get_mines(playername) if playername == nil then local playername = pc.get_name() end local mymines = mine.get_minecount() local get_mines = mysql_query("SELECT id FROM player.mine_proto WHERE owner='"..pc.get_id(playername).."'") local result = {} for x = 1, mymines, 1 do table.insert(result, tonumber(get_mines[1][x])) end return result end when 20092.chat."Die Silberminen" begin local silberpass = 100079 local yangkosten = 100000000 say_title("Die Silberminen") say("Hallo "..pc.get_name().."!") say("Die Silberminen sind offen!") say("Wenn du einen Pass dafür hast und") say("die Aufwendungen bezahlen kannst,") say("kannst du gerne eine Silbermine eröffnen!") say_reward("Du brauchst einen Silberpass.") say_reward("Du brauchst "..yangkosten.." Yang!") local a = select("Silbermine eröffnen!", "Was ist das?", "Abbrechen") if a== 3 then return end if a == 2 then say_title("Die Silberminen") say("Wenn du eine Silbermine aufmachst,") say("erhälst du immer wieder Yang. Das Yang") say("werden deine Arbeiter in der Mine lagern.") say("Du kannst es jederzeit abholen.") say("Je mehr Arbeiter darin arbeiten, desto") say("mehr Yang erhälst du.") return end if pc.count_item(silberpass) == 0 then say_title("Die Silberminen") say("Du hast leider keinen Pass!") say("Bitte finde einen Silberpass!") say_item_vnum(silberpass) return end if pc.get_gold() < yangkosten then say_title("Die Silberminen") say("Du hast leider nicht genug Yang.") say("Komm wieder, wenn du genug hast.") return end pc.change_gold(-yangkosten) pc.remove_item(silberpass) mine.buy_mine() say_title("Die Silberminen -> Mine anlegen") say("Du hast die Silbermine gekauft.") say("Ab sofort kannst du sie verwalten!") wait() setstate(mines) end end state mines begin when login or enter begin send_letter("Silberminen") end when button or info begin local silberpass = 100079 say_title("Silberminen") say("Was möchtest du tun?") if pc.getqf("mines") == 5 then local a = select("Silberminen", "Minen überfallen","Bilanz", "Abbrechen") else local a = select("Silberminen", "Minen überfallen","Bilanz", "Abbrechen", "Mine kaufen") end if a == 4 then return end if a == 5 then local pricer = mine.calc_price() say_title("Silbermine kaufen") say("Du möchtest eine Silbermine aufmachen?") say("Das kostet dich "..pricer[1].." Yang.") say("Zudem brauchst du noch:") say(pricer[2].." Silberpässe.") local a2 = select("Kaufen", "Abbrechen") if a2 == 2 then return end if pc.get_gold() < tonumber(pricer[1]) then say("Du hast nicht genug Yang!") return end if pc.count_item(silberpass) < tonumber(pricer[2]) then say("Du hast nicht genügend Silberpässe!") return end pc.change_gold(-tonumber(pricer[1])) pc.remove_item(silberpass, tonumber(pricer[2])) mine.buy_mine() setskin(NOWINDOW) return end if a == 3 then local getmines = mine.get_mines() local moneymines = {} local incomemines = {} for x = 1, table.getn(getmines), 1 do mine.update(getmines[x]) table.insert(moneymines, mine.get_money(tonumber(getmines[x]))) table.insert(incomemines, mine.get_income(tonumber(getmines[x]))) end local endincome = 0 local endmoney = 0 for x = 1, table.getn(moneymines), 1 do local endincome = endincome+incomemines[x] local endmoney = endmoney+moneymines[x] end say_title("Silberminen -> Bilanz") for x = 1, table.getn(getmines), 1 do say("Einkommen "..mine.get_title(getmines[x])..": "..incomemines[x]) say("Yang "..mine.get_title(getmines[x])..": "..moneymines[x]) say("---") end say("---") say("Kumuliertes Einkommen: "..endincome) say("Kumuliertes Yang: "..endmoney) return end if a == 1 then local getmines = mine.get_mines() local moneymines = {} local incomemines = {} for x = 1, table.getn(getmines), 1 do mine.update(getmines[x]) table.insert(moneymines, mine.get_money(tonumber(getmines[x]))) table.insert(incomemines, mine.get_income(tonumber(getmines[x]))) end for x = 1, table.getn(getmines), 1 do say_title(mine.get_title(getmines[x])) say("Einkommen: "..incomemines[x]) say("Yang: "..moneymines[x]) say("Arbeiter: "..mine.get_workers(getmines[x])) say("Beschäftigte Arbeiter:") local userworkers = mine.get_user_workers(getmines[x]) local counter = 0 for y = 1, table.getn(userworkers), 1 do if userworkers[y] != 0 then local counter = counter+1 end end for y = 1, counter, 1 do say(" - "..pc.get_name_by_id(userworkers[y])) end local b = select("Auszahlen", "Arbeiter feuern", "NPC-Arbeiter verändern", "Fertig") if b == 1 then say_title("Auszahlen") say("Wie viel möchtest du auszahlen?") local c = input("") if c == "" or c == 0 then return end local c = tonumber(c) if c < 0 then return end if moneymines[x] < c then say_title("Auszahlen") say("Du hast nicht so viel Yang in der Mine!") return end mysql_query("UPDATE player.mine_proto SET money=money-"..c.." WHERE id='"..getmines[x].."'") pc.give_gold(c) chat("Du hast "..c.. " Yang entnommen!") return end if b == 2 then say_title("Arbeiter feuern") say("Welchen Arbeiter möchtest du entlassen?") local cleanlist = {} for x2 = 1, table.getn(userworkers), 1 do if userworkers[x2] != 0 then table.insert(cleanlist, userworkers[x2]) else table.insert(cleanlist, "---") end end local c2 = select(cleanlist[1], cleanlist[2], cleanlist[3], cleanlist[4], cleanlist[5]) if c2 <= 5 and c2 >= 1 then if userworkers[c2] == 0 then return end say_title("Arbeiter entlassen") say("Bist du sicher, dass du den Arbeiter entlassen willst?") local c3 = select("Entlassen", "Abbrechen") if c3 == 2 then return end mysql_query("UPDATE player.mine_index SET user"..c2.."='0' WHERE id='"..getmines[x].."'") chat("Du hast den Arbeiter entlassen!") end return end if b == 3 then say_title("NPC-Arbeiter verändern") say("Gib bitte die Veränderung an.") say("Jeder Arbeiter kostet dich 1000000 Yang.") say("Du erhälst das Yang beim Entlassen zu 50% zurück.") say("Negative Zahlen lässt Arbeiter verschwinden, bis keine") say("mehr übrig sind.") local c = input("") if c == "" or c == 0 then return end local c = tonumber(c) if c < 0 then local workers = mine.get_workers(getmines[x]) if workers-math.abs(c) < 0 then mysql_query("UPDATE player.player SET workers=0 WHERE id='"..getmines[x].."'") pc.give_gold(workers*500000) else mysql_query("UPDATE player.player SET workers=workers-"..math.abs(c).." WHERE id='"..getmines[x].."'") pc.give_gold(math.abs(c)*500000) end else if pc.get_gold() < math.abs(c)*1000000 then say("Du hast leider nicht genug Yang!") return end pc.change_gold(-math.abs(c)*1000000) mysql_query("UPDATE player.player SET workers=workers+"..math.abs(c).." WHERE id='"..getmines[x].."'") say("Du hast erfolgreich die NPC-Arbeiter eingestellt!") end end end return end if a == 2 then say_title("Mine überfallen") say("Von welchem Spieler möchtest du eine Mine überfallen?") local b = input("") if b == "" then return end if pc.exists(b) == false then say("Den Spieler gibt es nicht!") return end local minecount = mine.get_minecount(b) if minecount == 0 then say("Dieser Spieler hat keine Minen!") return end say("Wie viel Yang möchtest du für den überfall einsetzen?") local d = input("") if d == "" or d <= 0 then return end if pc.get_money() < d then say("Du hast nicht genug Yang!") return end local factor = d / number(10, 100) if d > 1000000 then local chance = 10 elseif d > 750000 then local chance = 9 elseif d > 500000 then local chance = 8 elseif d > 250000 then local chance = 7 elseif d > 100000 then local chance = 6 elseif d > 75000 then local chance = 5 elseif d > 50000 then local chance = 4 elseif d > 25000 then local chance = 3 elseif d > 10000 then local chance = 2 else local chance = 1 end local finishchance = number(chance, 15) if finishchance == 15 then local c = number(1, minecount) local playermines = mine.get_mines(b) local get_themoney = mine.get_money(playermines[c]) local moneycalc = get_the_money/4 mysql_query("UPDATE player.mine_proto SET money=money-"..moneycalc.." WHERE id='"..playermines[c].."'") pc.give_gold(moneycalc) say_title("überfall -> Erfolg!") say("Du hast die Mine erfolgreich überfallen.") say("Deine Beute: "..moneycalc) else say_title("überfall -> Fehlschlag") say("Du hast es leider nicht geschafft.") end end end when 20092.chat."In den Minen arbeiten" with mine.get_working() < 5 begin say_title("In den Minen arbeiten") say("Du kannst in einer Mine arbeiten, wenn du willst.") say("Du erhälst dafür 500.000 Yang jeden Tag!") say("Du musst aber daran denken, hier vorbei zu kommen.") say("Möchtest du dich in eine Mine eintragen?") local a = select("Eintragen", "Abbrechen") if a == 2 then return end say_title("In einer Mine arbeiten") say("Bitte gib' den Spielernamen an, bei") say("dem du arbeiten willst.") local b = input("") if b == "" then return end if pc.exists(b) == false then say("Der Spieler existiert nicht!") return end local minecount = mine.get_minecount(b) if minecount == 0 then say("Dieser Spieler hat keine Minen!") return end local playermines = mine.get_mines(b) for x = 1, minecount, 1 do local userworkers = mine.get_user_workers(playermines[x]) for y = 1, table.getn(userworkers), 1 do if userworkers[y] == 0 then say_title("Platz gefunden!") say("Ein Platz in "..mine.get_title(playermines[x]).." ist frei!") say("Möchtest du dort arbeiten?") local c = select("Auswählen", "Abbrechen") if c == 1 then mysql_query("UPDATE player.mine_index SET user"..y.." = '"..pc.get_id().."'") mysql_query("UPDATE player.player SET working=working+1 WHERE `name`='"..pc.get_name().."'") chat("Du arbeitest nun in der Mine!") return end end end end say("Leider konnten keine weiteren Stellen gefunden werden.") end when 20092.chat."Minenarbeit belohnen!" with mine.get_working() >= 1 begin setskin(NOWINDOW) local thisdate = tonumber(os.date("%d")) if pc.getqf("lastdate") != thisdate then local belohnung = mine.get_working()*500000 pc.give_gold(belohnung) pc.setqf("lastdate", thisdate) chat("Du hast deine Belohnung abgeholt!") else chat("Leider gibt es heute keine Belohnung mehr.") chat("Komm' morgen wieder.") end end end end Y las funciones que se necesitan en questlib: function pc.exists(playername) assert(type(playername)=="string", "Spielername ist kein String!") local ergebnis = mysql_query("SELECT exists FROM player.player WHERE player.`name`='"..playername.."'") local result = tonumber(ergebnis[1][1]) if result == 1 then return true end return false end function pc.get_id(playername) if playername == nil then local playername = pc.get_name() end local result = mysql_query("SELECT id FROM player.player WHERE player.`name`='"..playername.."'") assert(type(result[1][1])!="nil", "Keine ID zum Namen!") return tonumber(result[1][1]) end function pc.get_name_by_id(playerid) assert(type(playerid)=="number", "Playerid ist keine Nummer!") local result = mysql_query("SELECT `name` FROM player.player WHERE player.id='"..playerid.."'") assert(type(result[1][1])!="nil", "Kein Name zur ID!") return tostring(result[1][1]) end Además, es necesario ampliar la tabla de la DB del jugador: ALTER TABLE player ADD `exists` enum('1','0') NOT NULL DEFAULT '1'; ALTER TABLE player ADD `mines` int(1) NOT NULL DEFAULT '0'; ALTER TABLE player ADD `working` int(1) NOT NULL DEFAULT '0'; Acontinuancion deberas crear otras 2 tablas: CREATE TABLE `mine_index` ( `id` int(10) unsigned NOT NULL DEFAULT '0', `user1` int(12) unsigned NOT NULL DEFAULT '0', `user2` int(12) unsigned NOT NULL DEFAULT '0', `user3` int(12) unsigned NOT NULL DEFAULT '0', `user4` int(12) unsigned NOT NULL DEFAULT '0', `user5` int(12) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CREATE TABLE `mine_proto` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `owner` int(12) unsigned NOT NULL DEFAULT '0', `money` bigint(64) unsigned NOT NULL DEFAULT '0', `controller` int(12) unsigned NOT NULL DEFAULT '0', `workers` int(12) unsigned NOT NULL DEFAULT '0', `bezeichnung` varchar(18) NOT NULL DEFAULT 'Mine', `last_update` bigint(64) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC; Creditos: .Alessa Fuente: http://www.elitepvpers.com/ Las traducciones de las quest es a gusto de cada uno yo solo traigo para la gente que no visita Epvp
  6. toma http://metin2zone.net/index.php?/topic/7772-traduccion-de-los-localeeix-y-epk-del-cliente-invoice/
  7. Gracias por traerlas pero pon la fuente y los creditos
  8. gracias! eso es exactamente lo que teneis que hacer disculpen que no he tenido internet en casa estoy desde un ciber pero si alguno no les quedo claro intentare hacer un videotutorial y subirlo disculpenn!
  9. algun moderador que saque a ese interesado energumeno de esta comunidad porfavor
  10. por algo esta en configuracion avanzada dije que cuando pudiera haria el video
  11. si no va aqui muevanlo porfavor =). Hacer Copia de seguridad del servidor esto me lo paso el creador de los files 2013 invoice de elitepvpers y esta en elitepvpers obviamente la acomode un poco en español y aqui engo a ponerla. algunos de nosotros estamos familiarizados con el problema de que los jugadores solo lleguen hasta elejir personaje y los devuelva al login, si el servidor si se ejecuta en una máquina local y no en un dedicado. La razón por la que este problema se está produciendo es la sucesión de paquetes de inicio de sesión: Codigo: struct SSimplePlayer { unsigned long dwID; unsigned char szName[25]; unsigned char byJob; unsigned char byLevel; unsigned long dwPlayMinutes; unsigned char byST; unsigned char byHT; unsigned char byDX; unsigned char byIQ; unsigned short wMainPart; bool bChangeName; unsigned short wHairPart; unsigned char bDummy[4]; long int x; long int y; unsigned long int lAddr; unsigned short wPort; unsigned char skill_group; }; typedef SSimplePlayer TSimplePlayer; struct packet_login_success { unsigned char bHeader; TSimplePlayer players[4]; unsigned long guild_id[4]; unsigned char guild_name[4][13]; unsigned long handle; unsigned long random_key; }; typedef packet_login_success TPacketGCLoginSuccess; TSimplePlayer :: laddr es la dirección de destino para el servidor (laddr equivalente a g_szPublicIP). g_szPublicIP es la dirección de la tarjeta de interfaz de red local, por ejemplo, 192.168.0.1. El significado de esto es que el jugador consiga esta dirección local al iniciar sesion y conectarse al servidor creado en estas direcciones ... Así, cuando el jugador selecciona el carácter, el jugador obtiene una desconexión, ya que la dirección local no está disponible en Internet. ¿Cómo solucionarlo? Patch (r2089M ~ Versión 47 MB): (es el game que tienen en los server files) Codigo: 000916C4: F0 00 000916C5: 62 63 000916DD: F0 00 000916DE: 62 63 00091769: F0 00 0009176A: 62 63 001AB8E5: F0 00 001AB8E6: 62 63 001AB916: F0 00 001AB917: 62 63 001AB93B: F0 00 001AB93C: 62 63 Y empezar los núcleos con los siguientes argumentos: . /game -I <PUBLIC_ADDRESS> Si lo desea, puede configurar el puerto con -p <PUERTO> y si lo desea, puede especificar el archivo de configuración con -n <TAG> (esquema:. CONFIG {TAG}). Así que los jugadores no necesitan un mc o sura para entrar a servidores locales o múltiples servidores! Diff Pacth: http://imer.cc/files/dif.exe Creditos: Anohros Fuente: http://www.elitepvpe...ers-dyndns.html
×
×
  • Crear nuevo...