Opublikowano 9 Lutego9 Lut 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
Opublikowano 9 Lutego9 Lut 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łaJakby miał ktoś te pierwszą wersje nie popsutą. to priv :D
Opublikowano 9 Lutego9 Lut 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 9 Lutego9 Lut 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 9 Lutego9 Lut 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 9 Lutego9 Lut 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 akuratJa 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 9 Lutego9 Lut przez wojciech74
Opublikowano 9 Lutego9 Lut 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ć?syserr0209 13:57:53864 :: CRaceMotionData::SetName - UNKNOWN NAME 3520209 13:57:54551 :: CRaceMotionData::SetName - UNKNOWN NAME 3520209 13:57:55166 :: CRaceMotionData::SetName - UNKNOWN NAME 3520209 13:57:55875 :: CRaceMotionData::SetName - UNKNOWN NAME 3520209 13:57:56627 :: CRaceMotionData::SetName - UNKNOWN NAME 3520209 13:57:57266 :: CRaceMotionData::SetName - UNKNOWN NAME 3520209 13:57:57888 :: CRaceMotionData::SetName - UNKNOWN NAME 3520209 13:57:58511 :: CRaceMotionData::SetName - UNKNOWN NAME 3520209 13:58:00075 :: Traceback (most recent call last):0209 13:58:00075 :: File "ui.py", line 2159, in OnOverInItem0209 13:58:00075 :: File "ui.py", line 174, in call0209 13:58:00079 :: File "ui.py", line 165, in call0209 13:58:00079 :: File "uiInventory.py", line 1556, in OverInItem0209 13:58:00079 :: File "uiInventory.py", line 1774, in ShowToolTip0209 13:58:00080 :: File "uiToolTip.py", line 602, in SetInventoryItem0209 13:58:00080 :: File "uiToolTip.py", line 1548, in AddItemData0209 13:58:00080 :: File "uiToolTip.py", line 1570, in AdditionalTips0209 13:58:00080 :: AttributeError0209 13:58:00080 :: : 0209 13:58:00080 :: 'str' object has no attribute 'items'0209 13:58:00080 :: Edytowane 9 Lutego9 Lut przez mefedronix
Opublikowano 9 Lutego9 Lut 1 godzinę temu, mefedronix napisał(a):a jesteś w stanie podpowiedziec jak się za to zabrać?syserr0209 13:57:53864 :: CRaceMotionData::SetName - UNKNOWN NAME 3520209 13:57:54551 :: CRaceMotionData::SetName - UNKNOWN NAME 3520209 13:57:55166 :: CRaceMotionData::SetName - UNKNOWN NAME 3520209 13:57:55875 :: CRaceMotionData::SetName - UNKNOWN NAME 3520209 13:57:56627 :: CRaceMotionData::SetName - UNKNOWN NAME 3520209 13:57:57266 :: CRaceMotionData::SetName - UNKNOWN NAME 3520209 13:57:57888 :: CRaceMotionData::SetName - UNKNOWN NAME 3520209 13:57:58511 :: CRaceMotionData::SetName - UNKNOWN NAME 3520209 13:58:00075 :: Traceback (most recent call last):0209 13:58:00075 :: File "ui.py", line 2159, in OnOverInItem0209 13:58:00075 :: File "ui.py", line 174, in call0209 13:58:00079 :: File "ui.py", line 165, in call0209 13:58:00079 :: File "uiInventory.py", line 1556, in OverInItem0209 13:58:00079 :: File "uiInventory.py", line 1774, in ShowToolTip0209 13:58:00080 :: File "uiToolTip.py", line 602, in SetInventoryItem0209 13:58:00080 :: File "uiToolTip.py", line 1548, in AddItemData0209 13:58:00080 :: File "uiToolTip.py", line 1570, in AdditionalTips0209 13:58:00080 :: AttributeError0209 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 9 Lutego9 Lut nic specjalnego ogolnie tu nie ma xD to sie nada jedynie na podstawke pod serweer
Opublikowano 9 Lutego9 Lut 2 minuty temu, YamahaYZF napisał(a):nic specjalnego ogolnie tu nie ma xD to sie nada jedynie na podstawke pod serweerNie to się nie nada nawet pod podstawkę pod serwer. Jeśli to wypuścił Flourine to dajcie ludzie spokój.
Opublikowano 9 Lutego9 Lut 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 9 Lutego9 Lut 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 10 Lutego10 Lut 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 11 Lutego11 Lut 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 11 Lutego11 Lut 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.
Opublikowano 11 Lutego11 Lut 5 godzin temu, Nietykalny napisał(a):Dzięki :) chodź i tak musze ogarnąć souce bo nic nie zdziałam.Source nie udostępnię, chyba nikt tutaj na forum nie ma działających toolsow
Opublikowano 11 Lutego11 Lut @Mizuki nie dasz ty, to ja dam toolsa. ( może w końcu nie będziesz miał problemów z mysql) HOWTO.zip
Opublikowano 11 Lutego11 Lut W dniu 9.02.2026 o 12:41, Nietykalny napisał(a):gotowa maszyna:https://mega.nz/file/0lxAyJpL#CT1imL3maSQrtaB-ApcxaEg53X2u4vbYKLAp4mMYJKwrootdevnavicat: 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 11 Lutego11 Lut przez Madada22
Opublikowano 11 Lutego11 Lut Łapta skrypt w pythonie by chat GPT do wyciągniecie item proto i mob proto Z MT2009 do txtSkrypt#!/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 12 Lutego12 Lut 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 12 Lutego12 Lut 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 12 Lutego12 Lut 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 CaptchaSQL 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