Skocz do zawartości
Masz już aplikację Sharegon?

Odkryj wszystkie możliwości. Dowiedz się więcej

Sharegon.pl

Zainstaluj aplikację Sharegon i korzystaj z powiadomień push oraz licznika nowych aktywności bezpośrednio z ekranu głównego.

Aby zainstalować tę aplikację na iOS i iPadOS.
  1. Tap the Share icon in Safari
  2. Przewiń menu i stuknij Dodaj do ekranu początkowego.
  3. Stuknij Dodaj w prawym górnym rogu.
Zainstaluj aplikację Sharegon na Androidzie
  1. Otwórz Sklep Google Play na swoim smarfonie.
  2. Wyszukaj „Sharegon” w pasku wyszukiwania.
  3. Stuknij „Zainstaluj”, aby pobrać aplikację.

Pliki serwerowe MT2009 + source

Featured Replies

Opublikowano
W dniu 12.02.2026 o 12:40, Mizuki napisał(a):

Tutaj na start masz do poprawy

  • Cythona

  • Captcha

  • SQL

  • State po stronie source bo się przepełnia, ale to wygląda jak celowe uszkodzenie

  • Cofanie postaci przy PvP

  • Lag przy teleporcie

  • No i połowa root jest rozkopana przez kogoś kto nawet kodu nie umie usuwać

Hej uruchomic ci pliki

  • Odpowiedzi 161
  • Wyświetleń 9,1 tys.
  • Dodano
  • Ostatniej odpowiedzi

Top użytkownicy w tym temacie

Najbardziej popularny wpis

  • @Mizuki nie dasz ty, to ja dam toolsa. ( może w końcu nie będziesz miał problemów z mysql) HOWTO.zip

  • Thorek
    Thorek

    W tym kontekście nazywanie kogokolwiek kto się tym zajmował „programistą” to duże nadużycie :D

  • Przyjmuje zakłady, ile dni minie do pierwszego serwera na tych plikach

Najbardziej pomocny post

  • właśnie, przypomniało mi się @bosmanxmetin szukałeś plików, no to masz XDD

  • Sevence
    Sevence

    Grymuar?

  • Nooooo, ale 2009 to kilka edycji, a nie układanie 95% rozgrywki na nowo c:

Opublikowane grafiki

Opublikowano

Zamiast się wyzywać i prześmiewać drugiego to może porozkminiamy jak fixnac te błędy z cython, cofaniem w pvp i kickami 😀 Ja nie mam pojęcia ale może ktoś coś podpowie? Jak rozumiem ten captcha to useless i można to po prostu wywalić z kodu? Wtedy nie będzie problemu ale też nie będzie możliwości wysłania captcha jako GM do gracza?

Opublikowano
  • Autor
W dniu 12.02.2026 o 14:09, mefedronix napisał(a):

Zamiast się wyzywać i prześmiewać drugiego to może porozkminiamy jak fixnac te błędy z cython, cofaniem w pvp i kickami 😀 Ja nie mam pojęcia ale może ktoś coś podpowie? Jak rozumiem ten captcha to useless i można to po prostu wywalić z kodu? Wtedy nie będzie problemu ale też nie będzie możliwości wysłania captcha jako GM do gracza?

sharegon_1770908952492.png

Opublikowano

Panowie jakie hasło do pobrania z tego mega.nz?

Opublikowano
W dniu 12.02.2026 o 14:09, mefedronix napisał(a):

Zamiast się wyzywać i prześmiewać drugiego to może porozkminiamy jak fixnac te błędy z cython, cofaniem w pvp i kickami 😀 Ja nie mam pojęcia ale może ktoś coś podpowie? Jak rozumiem ten captcha to useless i można to po prostu wywalić z kodu? Wtedy nie będzie problemu ale też nie będzie możliwości wysłania captcha jako GM do gracza?

Jak nie masz pojęcia jak to naprawiać to lepiej zostaw te pliki w spokoju i weź się za coś przy czym będziesz mógł od zera się nauczyć 😉😁

Opublikowano
W dniu 12.02.2026 o 12:19, mefedronix napisał(a):

w root/ uitooltip zakomentuj sobie self.auxiliaryDict = kwargs.get("auxiliaryDict", player.GetAuxiliaryString(window_type, slotIndex))

@Mizuki szkoda 😢 Bo source ciekawe tylko niepotrzebnie tyle osób przy tym grzebało i narobiło syfu.

Dzięki za odpowiedz. dodałem # przed ta linijki w uitooltip, ale dalej to samo jest po zapakowaniu.

Opublikowano

Odnośnie braku tytułów i opisów dla rzeczy w eq, w moim przypadku pomogła edycja 3 linijek po stronie klienta w uitooltip.py, a mianowicie:

linia132: self.auxiliaryDict = "" -> self.auxiliaryDict = {}
linia140: self.auxiliaryDict = "" -> self.auxiliaryDict = {}

+dodanie # przy linijce jak ktoś wyżej napisał
#self.auxiliaryDict = kwargs.get("auxiliaryDict", player.GetAuxiliaryString(window_type, slotIndex))

Samo dodanie # bez zmiany linii 132 i 140 nie zadziałało

Zamieniłem znaki "" na {} i naprawiło się. Nie wiem czy przy okazji nie wysypałem czegoś innego bo nie siedzę na co dzień w tym, ale po tym udało mi się to naprawić i nie zauważyłem żeby coś innego się wykrzyczało.

Opublikowano

Ktoś wie czemu mam błąd podczas łączenia się z serwerem? Obstawiam, że client ma inne ip ustawione ale nigdzie nie mogę znaleźć serverinfo.py a root jest jakoś dziwnie zaszyfrowany + ten unpacker nie działa co jest w folderze pack. Siedzę nad tym pół dnia i za chiny nie mogę tego uruchomić.

Opublikowano
W dniu 14.02.2026 o 01:08, xBodzio23 napisał(a):

Ktoś wie czemu mam błąd podczas łączenia się z serwerem? Obstawiam, że client ma inne ip ustawione ale nigdzie nie mogę znaleźć serverinfo.py a root jest jakoś dziwnie zaszyfrowany + ten unpacker nie działa co jest w folderze pack. Siedzę nad tym pół dnia i za chiny nie mogę tego uruchomić.

Musisz pobrać PackMakerLite i exe wrzucić do pack, żebyś .bat mógł używać. Powinien być na forum.

Edytowane przez Magdon

Opublikowano
W dniu 11.02.2026 o 22:19, Sasori napisał(a):

Łapta skrypt w pythonie by chat GPT do wyciągniecie item proto i mob proto Z MT2009 do txt

Skrypt

PythonKod został skopiowany
#!/usr/bin/env python3# -*- coding: utf-8 -*- import pymysql # =========================# USTAWIENIA POŁĄCZENIA# =========================host_mysql = "adres_aj_pi"user_mysql = "login_usera"passwd_mysql = "haslo_usera*"db_name = "world"       #-- Nowa struktura tabeli world na mt2009 port_mysql = 3306def mysql_connect():    """    Wymusza kodowanie połączenia na utf8mb4, żeby polskie znaki wracały poprawnie.    """    return pymysql.connect(        host=host_mysql,        user=user_mysql,        password=passwd_mysql,        database=db_name,        port=port_mysql,        charset="utf8mb4",        use_unicode=True,        init_command="SET NAMES utf8mb4 COLLATE utf8mb4_general_ci",        autocommit=True,        cursorclass=pymysql.cursors.Cursor,    ) def fix_text(v):    """    Naprawa typowych krzaków z baz Metin2:    - latin1->utf8 (mojibake)    - latin1->cp1250 (PL znaki typu: D³ugi = Długi)    """    if v is None:        return ""     # jak DB zwróci bytes (rzadziej)    if isinstance(v, (bytes, bytearray)):        for enc in ("utf-8", "cp1250", "latin1"):            try:                return v.decode(enc)            except UnicodeDecodeError:                pass        return v.decode("latin1", errors="replace")     if not isinstance(v, str):        return str(v)     # 1) typowe mojibake: latin1 -> utf8    try:        repaired = v.encode("latin1").decode("utf-8")        if repaired != v:            return repaired    except UnicodeError:        pass     # 2) klasyk Metin: CP1250 udaje latin1 (D³ugi, Pi±tek, itp.)    try:        repaired = v.encode("latin1").decode("cp1250")        # jeśli to była taka konwersja, to zwykle znikają ³, ±, ¶ itd.        if repaired != v:            return repaired    except UnicodeError:        pass     return v def convert_mob_proto():    rank = {        1: "S_PAWN",        2: "KNIGHT",        3: "S_KNIGHT",        4: "BOSS",        5: "KING",    }     typeee = {        1: "NPC",        2: "STONE",        3: "WARP",        4: "DOOR",        5: "BUILDING",        7: "POLYMORPH_PC",        8: "HORSE",        9: "GOTO",    }     battletype = {        2: "RANGE",        3: "MAGIC",        4: "SPECIAL",        5: "POWER",        6: "TANKER",    }     def q(s: str) -> str:        return f"\"{s}\""     def get_rank(level):        return q(rank.get(level, "PAWN"))     def get_type(typee_):        return q(typeee.get(typee_, "MONSTER"))     def get_battletype(battle):        return q(battletype.get(battle, "MELEE"))     def get_flag(flag):        flag = fix_text(flag)        return "" if flag == "" else q(flag)     def get_race(race):        race = fix_text(race)        return "" if race == "" else q(race)     def get_immune(immune):        immune = fix_text(immune)        return "" if immune == "" else q(immune)     def get_folder(folder):        folder = fix_text(folder)        return q("wolf" if folder == "" else folder)     print("Connecting to database proto...")    db = mysql_connect()    print("Connected.")     with db.cursor() as cur:        cur.execute("SELECT * FROM mob_proto")        rows = cur.fetchall()     # utf-8-sig = UTF-8 z BOM (Windows/Notepad od razu widzi polskie znaki)    with open("mob_proto.txt", "w", encoding="utf-8-sig", newline="") as out_file_mobproto, \         open("mob_names.txt", "w", encoding="utf-8-sig", newline="") as out_file_mobnames:         print("Converting mob_proto...")         for row in rows:            mob_proto_line = (                "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s"                % (                    row[0],                    f"\"{fix_text(row[1])}\"",                    get_rank(row[3]),                    get_type(row[4]),                    get_battletype(row[5]),                    row[6],                    row[7],                    get_flag(row[8]),                    row[9],                    get_race(row[10]),                    get_immune(row[11]),                    row[12],                    get_folder(row[13]),                    row[14],                    row[15],                    row[16],                    row[17],                    row[18],                    row[19],                    row[20],                    row[21],                    row[22],                    row[23],                    row[24],                    row[25],                    row[26],                    row[27],                    row[28],                    row[29],                    row[30],                    row[31],                    row[32],                    row[33],                    row[34],                    row[35],                    row[36],                    row[37],                    row[38],                    row[39],                    row[40],                    row[41],                    row[42],                    row[43],                    row[44],                    row[45],                    row[46],                    row[47],                    row[48],                    row[49],                    row[50],                    row[51],                    row[52],                    row[53],                    row[54],                    row[55],                    row[56],                    row[57],                    row[58],                    row[59],                    row[60],                    row[61],                    row[62],                    row[63],                    row[64],                    row[65],                    row[66],                    row[67],                    row[68],                    row[69],                    row[70],                    row[71],                )            )             mob_names_line = "%s\t%s" % (row[0], fix_text(row[2]))             out_file_mobproto.write(mob_proto_line + "\r\n")            out_file_mobnames.write(mob_names_line + "\r\n")     db.close()    print("Mob proto converted!")    return "OK"def convert_item_proto():    item_type = {        0: "ITEM_NONE",        1: "ITEM_WEAPON",        2: "ITEM_ARMOR",        3: "ITEM_USE",        4: "ITEM_AUTOUSE",        5: "ITEM_MATERIAL",        6: "ITEM_SPECIAL",        7: "ITEM_TOOL",        8: "ITEM_LOTTERY",        9: "ITEM_ELK",        10: "ITEM_METIN",        11: "ITEM_CONTAINER",        12: "ITEM_FISH",        13: "ITEM_ROD",        14: "ITEM_RESOURCE",        15: "ITEM_CAMPFIRE",        16: "ITEM_UNIQUE",        17: "ITEM_SKILLBOOK",        18: "ITEM_QUEST",        19: "ITEM_POLYMORPH",        20: "ITEM_TREASURE_BOX",        21: "ITEM_TREASURE_KEY",        22: "ITEM_SKILLFORGET",        23: "ITEM_GIFTBOX",        24: "ITEM_PICK",        25: "ITEM_HAIR",        26: "ITEM_TOTEM",        27: "ITEM_BLEND",        28: "ITEM_COSTUME",        29: "ITEM_DS",        30: "ITEM_SPECIAL_DS",        31: "ITEM_EXTRACT",        32: "ITEM_SECONDARY_COIN",        33: "ITEM_RING",        34: "ITEM_BELT",    }     item_subtype = {        1: {            0: "WEAPON_SWORD",            1: "WEAPON_DAGGER",            2: "WEAPON_BOW",            3: "WEAPON_TWO_HANDED",            4: "WEAPON_BELL",            5: "WEAPON_FAN",            6: "WEAPON_ARROW",            7: "WEAPON_MOUNT_SPEAR",            8: "WEAPON_NUM_TYPES",        },        2: {            0: "ARMOR_BODY",            1: "ARMOR_HEAD",            2: "ARMOR_SHIELD",            3: "ARMOR_WRIST",            4: "ARMOR_FOOTS",            5: "ARMOR_NECK",            6: "ARMOR_EAR",            7: "ARMOR_NUM_TYPES",        },        3: {            0: "USE_POTION",            1: "USE_TALISMAN",            2: "USE_TUNING",            3: "USE_MOVE",            4: "USE_TREASURE_BOX",            5: "USE_MONEYBAG",            6: "USE_BAIT",            7: "USE_ABILITY_UP",            8: "USE_AFFECT",            9: "USE_CREATE_STONE",            10: "USE_SPECIAL",            11: "USE_POTION_NODELAY",            12: "USE_CLEAR",            13: "USE_INVISIBILITY",            14: "USE_DETACHMENT",            15: "USE_BUCKET",            16: "USE_POTION_CONTINUE",            17: "USE_CLEAN_SOCKET",            18: "USE_CHANGE_ATTRIBUTE",            19: "USE_ADD_ATTRIBUTE",            20: "USE_ADD_ACCESSORY_SOCKET",            21: "USE_PUT_INTO_ACCESSORY_SOCKET",            22: "USE_ADD_ATTRIBUTE2",            23: "USE_RECIPE",            24: "USE_CHANGE_ATTRIBUTE2",            25: "USE_BIND",            26: "USE_UNBIND",            27: "USE_TIME_CHARGE_PER",            28: "USE_TIME_CHARGE_FIX",            29: "USE_PUT_INTO_BELT_SOCKET",            30: "USE_PUT_INTO_RING_SOCKET",        },        4: {            0: "AUTOUSE_POTION",            1: "AUTOUSE_ABILITY_UP",            2: "AUTOUSE_BOMB",            3: "AUTOUSE_GOLD",            4: "AUTOUSE_MONEYBAG",            5: "AUTOUSE_TREASURE_BOX",        },        5: {            0: "MATERIAL_LEATHER",            1: "MATERIAL_BLOOD",            2: "MATERIAL_ROOT",            3: "MATERIAL_NEEDLE",            4: "MATERIAL_JEWEL",            5: "MATERIAL_DS_REFINE_NORMAL",            6: "MATERIAL_DS_REFINE_BLESSED",            7: "MATERIAL_DS_REFINE_HOLLY",        },        6: {            0: "SPECIAL_MAP",            1: "SPECIAL_KEY",            2: "SPECIAL_DOC",            3: "SPECIAL_SPIRIT",        },        7: {0: "TOOL_FISHING_ROD"},        8: {0: "LOTTERY_TICKET", 1: "LOTTERY_INSTANT"},        10: {0: "METIN_NORMAL", 1: "METIN_GOLD"},        12: {0: "FISH_ALIVE", 1: "FISH_DEAD"},        14: {            0: "RESOURCE_FISHBONE",            1: "RESOURCE_WATERSTONEPIECE",            2: "RESOURCE_WATERSTONE",            3: "RESOURCE_BLOOD_PEARL",            4: "RESOURCE_BLUE_PEARL",            5: "RESOURCE_WHITE_PEARL",            6: "RESOURCE_BUCKET",            7: "RESOURCE_CRYSTAL",            8: "RESOURCE_GEM",            9: "RESOURCE_STONE",            10: "RESOURCE_METIN",            11: "RESOURCE_ORE",        },        16: {            0: "UNIQUE_NONE",            1: "UNIQUE_BOOK",            2: "UNIQUE_SPECIAL_RIDE",            3: "UNIQUE_3",            4: "UNIQUE_4",            5: "UNIQUE_5",            6: "UNIQUE_6",            7: "UNIQUE_7",            8: "UNIQUE_8",            9: "UNIQUE_9",            10: "USE_SPECIAL",        },        28: {0: "COSTUME_BODY", 1: "COSTUME_HAIR"},        29: {            0: "DS_SLOT1",            1: "DS_SLOT2",            2: "DS_SLOT3",            3: "DS_SLOT4",            4: "DS_SLOT5",            5: "DS_SLOT6",        },        31: {0: "EXTRACT_DRAGON_SOUL", 1: "EXTRACT_DRAGON_HEART"},    }     wearflag = {        1: "WEAR_BODY",        2: "WEAR_HEAD",        4: "WEAR_FOOTS",        8: "WEAR_WRIST",        16: "WEAR_WEAPON",        32: "WEAR_NECK",        64: "WEAR_EAR",        128: "WEAR_SHIELD",        256: "WEAR_UNIQUE",        512: "WEAR_ARROW",        1024: "WEAR_HAIR",        2048: "WEAR_ABILITY",    }     limittype = {        1: "LEVEL",        2: "STR",        3: "DEX",        4: "INT",        5: "CON",        6: "PC_BANG",        7: "REAL_TIME",        8: "REAL_TIME_FIRST_USE",        9: "TIMER_BASED_ON_WEAR",    }     bonus = {        1: "APPLY_MAX_HP",        2: "APPLY_MAX_SP",        3: "APPLY_CON",        4: "APPLY_INT",        5: "APPLY_STR",        6: "APPLY_DEX",        7: "APPLY_ATT_SPEED",        8: "APPLY_MOV_SPEED",        9: "APPLY_CAST_SPEED",        10: "APPLY_HP_REGEN",        11: "APPLY_SP_REGEN",        12: "APPLY_POISON_PCT",        13: "APPLY_STUN_PCT",        14: "APPLY_SLOW_PCT",        15: "APPLY_CRITICAL_PCT",        16: "APPLY_PENETRATE_PCT",        17: "APPLY_ATTBONUS_HUMAN",        18: "APPLY_ATTBONUS_ANIMAL",        19: "APPLY_ATTBONUS_ORC",        20: "APPLY_ATTBONUS_MILGYO",        21: "APPLY_ATTBONUS_UNDEAD",        22: "APPLY_ATTBONUS_DEVIL",        23: "APPLY_STEAL_HP",        24: "APPLY_STEAL_SP",        25: "APPLY_MANA_BURN_PCT",        26: "APPLY_DAMAGE_SP_RECOVER",        27: "APPLY_BLOCK",        28: "APPLY_DODGE",        29: "APPLY_RESIST_SWORD",        30: "APPLY_RESIST_TWOHAND",        31: "APPLY_RESIST_DAGGER",        32: "APPLY_RESIST_BELL",        33: "APPLY_RESIST_FAN",        34: "APPLY_RESIST_BOW",        35: "APPLY_RESIST_FIRE",        36: "APPLY_RESIST_ELEC",        37: "APPLY_RESIST_MAGIC",        38: "APPLY_RESIST_WIND",        39: "APPLY_REFLECT_MELEE",        40: "APPLY_REFLECT_CURSE",        41: "APPLY_POISON_REDUCE",        42: "APPLY_KILL_SP_RECOVER",        43: "APPLY_EXP_DOUBLE_BONUS",        44: "APPLY_GOLD_DOUBLE_BONUS",        45: "APPLY_ITEM_DROP_BONUS",        46: "APPLY_POTION_BONUS",        47: "APPLY_KILL_HP_RECOVER",        48: "APPLY_IMMUNE_STUN",        49: "APPLY_IMMUNE_SLOW",        50: "APPLY_IMMUNE_FALL",        51: "APPLY_SKILL",        52: "APPLY_BOW_DISTANCE",        53: "APPLY_ATT_GRADE_BONUS",        54: "APPLY_DEF_GRADE_BONUS",        55: "APPLY_MAGIC_ATT_GRADE",        56: "APPLY_MAGIC_DEF_GRADE",        57: "APPLY_CURSE_PCT",        58: "APPLY_MAX_STAMINA",        59: "APPLY_ATTBONUS_WARRIOR",        60: "APPLY_ATTBONUS_ASSASSIN",        61: "APPLY_ATTBONUS_SURA",        62: "APPLY_ATTBONUS_SHAMAN",        63: "APPLY_ATTBONUS_MONSTER",        64: "APPLY_MALL_ATTBONUS",        65: "APPLY_MALL_DEFBONUS",        66: "APPLY_MALL_EXPBONUS",        67: "APPLY_MALL_ITEMBONUS",        68: "APPLY_MALL_GOLDBONUS",        69: "APPLY_MAX_HP_PCT",        70: "APPLY_MAX_SP_PCT",        71: "APPLY_SKILL_DAMAGE_BONUS",        72: "APPLY_NORMAL_HIT_DAMAGE_BONUS",        73: "APPLY_SKILL_DEFEND_BONUS",        74: "APPLY_NORMAL_HIT_DEFEND_BONUS",        75: "APPLY_PC_BANG_EXP_BONUS",        76: "APPLY_PC_BANG_DROP_BONUS",        77: "APPLY_EXTRACT_HP_PCT",        78: "APPLY_RESIST_WARRIOR",        79: "APPLY_RESIST_ASSASSIN",        80: "APPLY_RESIST_SURA",        81: "APPLY_RESIST_SHAMAN",        82: "APPLY_ENERGY",        83: "APPLY_DEF_GRADE",        84: "APPLY_COSTUME_ATTR_BONUS",        85: "APPLY_MAGIC_ATTBONUS_PER",        86: "APPLY_MELEE_MAGIC_ATTBONUS_PER",        87: "APPLY_RESIST_ICE",        88: "APPLY_RESIST_EARTH",        89: "APPLY_RESIST_DARK",        90: "APPLY_ANTI_CRITICAL_PCT",        91: "APPLY_ANTI_PENETRATE_PCT",    }     errors = ""     def q(s: str) -> str:        return f"\"{s}\""     def get_item_type(t, vnum):        nonlocal errors        errors = ""        if t in item_type:            return item_type[t]        errors += f"Strange type in item {vnum}\r\n"        return item_type[0]     def get_item_subtype(t, st, vnum):        nonlocal errors        errors = ""        if t in item_subtype and st in item_subtype[t]:            return item_subtype[t][st]        errors += f"Strange subtype in item {vnum}\r\n"        return "NONE"     def get_antiflag(antiflag, vnum):        nonlocal errors        s = ""        for bit, name in [            (131072, "ANTI_SAFEBOX"),            (65536, "ANTI_MYSHOP"),            (32768, "ANTI_STACK"),            (16384, "ANTI_PKDROP"),            (8192, "ANTI_GIVE"),            (4096, "ANTI_SAVE"),            (2048, "ANTI_EMPIRE_C"),            (1024, "ANTI_EMPIRE_B"),            (512, "ANTI_EMPIRE_A"),            (256, "ANTI_SELL"),            (64, "ANTI_GET"),            (32, "ANTI_MUDANG"),            (16, "ANTI_SURA"),            (8, "ANTI_ASSASSIN"),            (4, "ANTI_MUSA"),            (2, "ANTI_MALE"),            (1, "ANTI_FEMALE"),        ]:            if antiflag >= bit:                antiflag -= bit                s = name if not s else f"{name} | {s}"         if antiflag == 0 and s:            return q(s)         errors += f"Strange antiflag in item {vnum}\r\n"        return "\"NONE\""     def get_flag(flag, vnum):        nonlocal errors        s = ""        for bit, name in [            (32768, "ITEM_APPLICABLE"),            (16384, "REFINEABLE"),            (8192, "LOG"),            (4096, "ITEM_QUEST"),            (2048, "QUEST_GIVE"),            (1024, "QUEST_USE_MULTIPLE"),            (512, "QUEST_USE"),            (256, "CONFIRM_WHEN_USE"),            (128, "ITEM_IRREMOVABLE"),            (64, "ITEM_MAKECOUNT"),            (32, "ITEM_UNIQUE"),            (16, "ITEM_SLOW_QUERY"),            (8, "COUNT_PER_1GOLD"),            (4, "ITEM_STACKABLE"),            (2, "ITEM_SAVE"),            (1, "ITEM_TUNABLE"),        ]:            if flag >= bit:                flag -= bit                s = name if not s else f"{name} | {s}"         if flag == 0 and s:            return q(s)         errors += f"Strange flag in item {vnum}\r\n"        return "\"NONE\""     def get_wearflag(wear, vnum):        nonlocal errors        if wear in wearflag:            return q(wearflag[wear])        errors += f"Strange wearflag in item {vnum}\r\n"        return "\"NONE\""     def get_immuneflag(_immune):        return "\"NONE\""     def get_limittype(limit):        return q(limittype.get(limit, "LIMIT_NONE"))     def get_apply(apply):        return q(bonus.get(apply, "APPLY_NONE"))     print("Connecting to database proto...")    db = mysql_connect()    print("Connected.")     with db.cursor() as cur:        cur.execute("SELECT * FROM item_proto")        rows = cur.fetchall()     # utf-8-sig = UTF-8 z BOM (Windows/Notepad od razu widzi polskie znaki)    with open("item_proto.txt", "w", encoding="utf-8-sig", newline="") as out_file_itemproto, \         open("item_names.txt", "w", encoding="utf-8-sig", newline="") as out_file_itemnames:         print("Converting item_proto...")         for row in rows:            item_proto_line = (                "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s"                % (                    row[0],                    f"\"{fix_text(row[1])}\"",                    q(get_item_type(row[3], row[0])),                    q(get_item_subtype(row[3], row[4], row[0])),                    row[6],                    get_antiflag(row[7], row[0]),                    get_flag(row[8], row[0]),                    get_wearflag(row[9], row[0]),                    get_immuneflag(row[10]),                    row[11],                    row[12],                    row[13],                    row[14],                    row[16],                    get_limittype(row[17]),                    row[18],                    get_limittype(row[19]),                    row[20],                    get_apply(row[21]),                    row[22],                    get_apply(row[23]),                    row[24],                    get_apply(row[25]),                    row[26],                    row[27],                    row[28],                    row[29],                    row[30],                    row[31],                    row[32],                    row[39],                    row[40],                    row[41],                )            )             item_names_line = "%s\t%s" % (row[0], fix_text(row[2]))             out_file_itemproto.write(item_proto_line + "\r\n")            out_file_itemnames.write(item_names_line + "\r\n")     db.close()    print("Item proto converted!")    return "OK"if __name__ == "__main__":    print(convert_item_proto())    print(convert_mob_proto())

Dump_proto mt2009

dump_proto.exeNiedostępne

Po wygenerowaniu plików txt i spakowaniu jest błąd i gra się zawiesza przy wchodziu. Różnią się od ryginału wielkościa

Opublikowano
W dniu 14.02.2026 o 09:48, Nietykalny napisał(a):

Po wygenerowaniu plików txt i spakowaniu jest błąd i gra się zawiesza przy wchodziu. Różnią się od ryginału wielkościa

No to chyba inny wyciek mamy bo u mnie śmiga xd

Opublikowano

Ktoś naprawił laga przy zmianie itemów, albo może nakierować co jest powodem?

Opublikowano
W dniu 14.02.2026 o 08:52, Magdon napisał(a):

Musisz pobrać PackMakerLite i exe wrzucić do pack, żebyś .bat mógł używać. Powinien być na forum.

Tak właśnie zrobiłem, ale niby pisze mi "root unpack" ale nie mam nigdzie tych plików i folderu root. Nie wiem gdzie się to wypakowuję.

Opublikowano
W dniu 14.02.2026 o 17:05, xBodzio23 napisał(a):

tak właśnie zrobiłem, ale niby pisze mi "root unpack" ale nie mam nigdzie tych plików i folderu root. Nie wiem gdzie się to wypakowywuje.

Musisz przeciągnąć plik na plik bat, nie otwierasz .bat

Opublikowano
W dniu 15.02.2026 o 09:17, Magdon napisał(a):

Musisz przeciągnąć plik na plik bat, nie otwierasz .bat

tak wlasnie robie. Na innych plikach serwerowych działa a tutaj nie.

Opublikowano
  • Autor
W dniu 15.02.2026 o 11:48, xBodzio23 napisał(a):

tak wlasnie robie. Na innych plikach serwerowych działa a tutaj nie.

Bro wszystko działa wrzucasz do pack program PackMakerLite.exe, który pobierasz z forum. I wtedy przeciągasz plik .index na plik PackMakerLite_u.bat otworzy się konsola i rozpakuje plik pojawi się rozpakowany folder.

Opublikowano
W dniu 15.02.2026 o 11:55, Sevence napisał(a):

Bro wszystko działa wrzucasz do pack program PackMakerLite.exe, który pobierasz z forum. I wtedy przeciągasz plik .index na plik PackMakerLite_u.bat otworzy się konsola i rozpakuje plik pojawi się rozpakowany folder.

https://youtu.be/EOszp3QyAYY

Bro specjalnie dla ciebie nagrałem to, drugi client to dla porównania odpakowanie roota na cliencie TMP4 i tam wszystko działa.

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Konto

Nawigacja

Skonfiguruj powiadomienia push w przeglądarce.

Chrome (Android)
  1. Stuknij ikonę kłódki obok paska adresu.
  2. Wybierz Uprawnienia → Powiadomienia.
  3. Dostosuj swoje preferencje.
Chrome (Desktop)
  1. Kliknij ikonę kłódki na pasku adresu.
  2. Wybierz Ustawienia witryny.
  3. Znajdź Powiadomienia i dostosuj swoje preferencje.