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
7 minut temu, BillyEilish napisał(a):

Testuje sobie je teraz i są ostro pobugowane. Bardzo dużo pracy potrzeba w to włożyć.

Nie dziwne jak były przekazywane przez kilka osób i każda z nich coś od siebie popsuła

  • Odpowiedzi 155
  • Wyświetleń 7 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
32 minuty temu, Fredek napisał(a):

Nie dziwne jak były przekazywane przez kilka osób i każda z nich coś od siebie popsuła

Jakby miał ktoś te pierwszą wersje nie popsutą. to priv :D

Opublikowano

Strasznie dużo błędów. Mam na myśli mikro lagi przy zakładaniu miecza, nie widać opisów i bonusów przedmiotów. Fajnie by było jakoś to ogarnąć.

Opublikowano
2 godziny temu, mefedronix napisał(a):

Strasznie dużo błędów. Mam na myśli mikro lagi przy zakładaniu miecza, nie widać opisów i bonusów przedmiotów. Fajnie by było jakoś to ogarnąć.

Dużo tzn.? Bo te opisy to poprawisz w 3 minuty.

Opublikowano
  • Autor
18 minut temu, marcin9994PL napisał(a):

Widzę że co poniektórzy oczekują jeszcze frytki do tego 😆

Ogółem to przydałby się jeszcze strona obowiązkowo z itemshopem i ktoś umie to podpiąć pod bank żeby mi kasa się nabijała jak uruchomie już? zapłace jak coś ale tak do 100 zl bo tyle mam akurat

Opublikowano
35 minut temu, Sevence napisał(a):

Ogółem to przydałby się jeszcze strona obowiązkowo z itemshopem i ktoś umie to podpiąć pod bank żeby mi kasa się nabijała jak uruchomie już? zapłace jak coś ale tak do 100 zl bo tyle mam akurat

Ja Ci podepnę, ale pod swoje konto, ale to jak zapłacisz 100 polskich cebulionów.

Żeby nie było offtopu to nic specjalnego w tych plikach nie ma :>

Edytowane przez wojciech74

Opublikowano
1 godzinę temu, Magdon napisał(a):

Dużo tzn.? Bo te opisy to poprawisz w 3 minuty.

a jesteś w stanie podpowiedziec jak się za to zabrać?

syserr

0209 13:57:53864 :: CRaceMotionData::SetName - UNKNOWN NAME 352

0209 13:57:54551 :: CRaceMotionData::SetName - UNKNOWN NAME 352

0209 13:57:55166 :: CRaceMotionData::SetName - UNKNOWN NAME 352

0209 13:57:55875 :: CRaceMotionData::SetName - UNKNOWN NAME 352

0209 13:57:56627 :: CRaceMotionData::SetName - UNKNOWN NAME 352

0209 13:57:57266 :: CRaceMotionData::SetName - UNKNOWN NAME 352

0209 13:57:57888 :: CRaceMotionData::SetName - UNKNOWN NAME 352

0209 13:57:58511 :: CRaceMotionData::SetName - UNKNOWN NAME 352

0209 13:58:00075 :: Traceback (most recent call last):

0209 13:58:00075 :: File "ui.py", line 2159, in OnOverInItem

0209 13:58:00075 :: File "ui.py", line 174, in call

0209 13:58:00079 :: File "ui.py", line 165, in call

0209 13:58:00079 :: File "uiInventory.py", line 1556, in OverInItem

0209 13:58:00079 :: File "uiInventory.py", line 1774, in ShowToolTip

0209 13:58:00080 :: File "uiToolTip.py", line 602, in SetInventoryItem

0209 13:58:00080 :: File "uiToolTip.py", line 1548, in AddItemData

0209 13:58:00080 :: File "uiToolTip.py", line 1570, in AdditionalTips

0209 13:58:00080 :: AttributeError

0209 13:58:00080 :: :

0209 13:58:00080 :: 'str' object has no attribute 'items'

0209 13:58:00080 ::

Edytowane przez mefedronix

Opublikowano
1 godzinę temu, mefedronix napisał(a):

a jesteś w stanie podpowiedziec jak się za to zabrać?

syserr

0209 13:57:53864 :: CRaceMotionData::SetName - UNKNOWN NAME 352

0209 13:57:54551 :: CRaceMotionData::SetName - UNKNOWN NAME 352

0209 13:57:55166 :: CRaceMotionData::SetName - UNKNOWN NAME 352

0209 13:57:55875 :: CRaceMotionData::SetName - UNKNOWN NAME 352

0209 13:57:56627 :: CRaceMotionData::SetName - UNKNOWN NAME 352

0209 13:57:57266 :: CRaceMotionData::SetName - UNKNOWN NAME 352

0209 13:57:57888 :: CRaceMotionData::SetName - UNKNOWN NAME 352

0209 13:57:58511 :: CRaceMotionData::SetName - UNKNOWN NAME 352

0209 13:58:00075 :: Traceback (most recent call last):

0209 13:58:00075 :: File "ui.py", line 2159, in OnOverInItem

0209 13:58:00075 :: File "ui.py", line 174, in call

0209 13:58:00079 :: File "ui.py", line 165, in call

0209 13:58:00079 :: File "uiInventory.py", line 1556, in OverInItem

0209 13:58:00079 :: File "uiInventory.py", line 1774, in ShowToolTip

0209 13:58:00080 :: File "uiToolTip.py", line 602, in SetInventoryItem

0209 13:58:00080 :: File "uiToolTip.py", line 1548, in AddItemData

0209 13:58:00080 :: File "uiToolTip.py", line 1570, in AdditionalTips

0209 13:58:00080 :: AttributeError

0209 13:58:00080 :: :

0209 13:58:00080 :: 'str' object has no attribute 'items'

0209 13:58:00080 ::

Chyba to było to: #self.auxiliaryDict = kwargs.get("auxiliaryDict", player.GetAuxiliaryString(window_type, slotIndex))

Opublikowano

nic specjalnego ogolnie tu nie ma xD to sie nada jedynie na podstawke pod serweer

Opublikowano
2 minuty temu, YamahaYZF napisał(a):

nic specjalnego ogolnie tu nie ma xD to sie nada jedynie na podstawke pod serweer

Nie to się nie nada nawet pod podstawkę pod serwer. Jeśli to wypuścił Flourine to dajcie ludzie spokój.

Opublikowano
20 minut temu, Marchewa napisał(a):

Nie to się nie nada nawet pod podstawkę pod serwer. Jeśli to wypuścił Flourine to dajcie ludzie spokój.

mateusz naczelny ćpun :D

Opublikowano

Witam. Wiecie może dlaczego po odpaleniu serwera na liście procesów odpala mi tylko ./db a kolejne dwa jak auth i game wyłączają się od razu przez co serwer nie może wystartować? pomoże ktoś?

Opublikowano
19 godzin temu, dawid99979 napisał(a):

Witam. Wiecie może dlaczego po odpaleniu serwera na liście procesów odpala mi tylko ./db a kolejne dwa jak auth i game wyłączają się od razu przez co serwer nie może wystartować? pomoże ktoś?

Pewnie crashują, z taką ilością informacji to może być wszystko.

Opublikowano

Posiada ktoś dump proto czy trzeba samemu posklejać?

Niby próbuje ustawić tak jak w source serwera ale nie uja mi nie wychodzi:/ Item proto w ogóle nie rozpakowuje a mob proto tak lecz po spakowaniu nie ma widocznych nazw mobów.

Opublikowano
33 minuty temu, Nietykalny napisał(a):

Posiada ktoś dump proto czy trzeba samemu posklejać?

Niby próbuje ustawić tak jak w source serwera ale nie uja mi nie wychodzi:/ Item proto w ogóle nie rozpakowuje a mob proto tak lecz po spakowaniu nie ma widocznych nazw mobów.

Wiesz, zależy kto ma jaką wersję bo wy macie tą ubogą, w sumie protosy skleić to nie problem bo dużo tam nie ma.

sharegon_1770812006626.png

Opublikowano
5 godzin temu, Nietykalny napisał(a):

Dzięki :) chodź i tak musze ogarnąć souce bo nic nie zdziałam.

11111111111111111111.png

Source nie udostępnię, chyba nikt tutaj na forum nie ma działających toolsow

Opublikowano
W dniu 9.02.2026 o 12:41, Nietykalny napisał(a):

gotowa maszyna:

https://mega.nz/file/0lxAyJpL#CT1imL3maSQrtaB-ApcxaEg53X2u4vbYKLAp4mMYJKw

root

dev

navicat: Kk6M3zmr8Sc_sYd.$<VN4W#

Dzięki zainstalowałem serwer i wystartowałem. jak można zalogować się do gry??mam klienta z paczki cos musze ustawić z IP czy nie?? klient sie nie wlacza znika po kilku sekundach

Edytowane przez Madada22

Opublikowano

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

Skrypt

#!/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 = 3306


def 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.exe

Opublikowano
W dniu 9.02.2026 o 18:02, Magdon napisał(a):

Dużo tzn.? Bo te opisy to poprawisz w 3 minuty.

Jak to naprawić?

Opublikowano
10 godzin temu, Madada22 napisał(a):

Jak to naprawić?

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

17 godzin temu, Mizuki napisał(a):

Source nie udostępnię, chyba nikt tutaj na forum nie ma działających toolsow

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

Opublikowano
16 minut temu, 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.

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ć

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.