TEST_FUNCTION = 0 NEW_LOGIN_INTERFACE = 0 INPUT_IGNORE = 0 DISABLE_MODEL_PREVIEW = 0 IS_REFINE_CHANCE_BOOST = False Dominios = { 'dominios' : {}, 'subdominios' : {}, } TitleSystem = { 'title_pvm' : [], 'title_pvp' : [], 'load' : 0, } Achievements = { 'QID' : 0, 'QCMD' : '', 'achievements' : {}, 'last_achievements' : [], 'achievementshop' : {'items': {}}, 'POINTS' : 0 } #PATCHS PATCH = "nano_interface/" COMMON = PATCH + "/" SCRIPTS = "nano_scripts/" CHAR_CREATE = "nano_interface/character_create/" CHAR_SELECT = "nano_interface/select_character/" ## COLORS COLOR_NORMAL = 0xffa08784 COLOR_HOVER = 0xfff8d090 SING_IN_COLOR = 0xfff0e6d2 COLOR_RED = 0xffbe1e27 COLOR_LOGIN_TEXT = 0xffe8decb COLOR_WHITE = 0xffe5dfcf COLOR_HOVER2 = 0xffaca17d SPEED_BUTTON=0 TEST_FUNCTION = 0 mob_perro = 0 SEQUENCE_PACKET_ENABLE = 0 # EXTRA BEGIN # loads 5 (B,M,G,P,F) skills .mse ENABLE_NEW_LEVELSKILL_SYSTEM = 0 # don't set a random channel when you open the client ENABLE_RANDOM_CHANNEL_SEL = 0 # don't remove id&pass if the login attempt fails ENABLE_CLEAN_DATA_IF_FAIL_LOGIN = 0 # ctrl+v will now work ENABLE_PASTE_FEATURE = 0 # display all the bonuses added by a stone instead of the first one ENABLE_FULLSTONE_DETAILS = 1 # enable successfulness % in the refine dialog ENABLE_REFINE_PCT = 0 # extra ui features EXTRA_UI_FEATURE = 1 # AffectShowHide = 1 IS_FIRST_LOGIN = True ENABLE_UI_DEBUG_WINDOW = False # load DebugWindow.py from client folder instead of login window # STOP_CHAT = 0 LOAD_CURTAIN = 0 import app if app.ENABLE_REFINE_RENEWAL: IS_AUTO_REFINE = False AUTO_REFINE_TYPE = 0 AUTO_REFINE_DATA = { "ITEM" : [-1, -1], "NPC" : [0, -1, -1, 0] } import item import os ENABLE_POTIONS_AFFECTSHOWER = 1 ## 0=Disable / 1=Enable yesilefsunbotu = 0 uideleteitem = 0 uinewbiolog = 0 auto_pick_item = 1 auto_pick_yang = 1 IS_BONUS_CHANGER = FALSE if app.ENABLE_HUNTING_SYSTEM: HUNTING_MAIN_UI_SHOW = 0 HUNTING_MINI_UI_SHOW = 0 HUNTING_BUTTON_FLASH = 0 HUNTING_BUTTON_IS_FLASH = 0 if app.ENABLE_HIDE_COSTUME_SYSTEM: HIDDEN_BODY_COSTUME = 0 HIDDEN_HAIR_COSTUME = 0 _interface_instance = None def GetInterfaceInstance(): global _interface_instance return _interface_instance def SetInterfaceInstance(instance): global _interface_instance if _interface_instance: del _interface_instance _interface_instance = instance GM_LIST = ["[SYSTEM]"] NEW_678TH_SKILL_ENABLE = 1 # EXTRA END import app if app.ENABLE_SKILL_SELECT_FEATURE: ARE_ENABLED_6TH_SKILLS = 1 if app.ENABLE_SEND_TARGET_INFO: MONSTER_INFO_DATA = {} if app.AUTO_SHOUT: auto_shout_status = 0 auto_shout_text = "" BOSS_TRACKING = 0 bosstracking = 0 CREATE_PRIVATE_SHOP_EFFECT = (0,False,app.GetTime()) CLIENT_YOL = "lib/" if app.LINK_IN_CHAT: def GetLink(text): start = text.find("http://") if start == -1: start = text.find("https://") if start == -1: return "" link = text[start:len(text)] splitted = link.split(" ") return splitted[0] import app if app.NEW_SALES_SYSTEM: SalesList = {} Sales_Temp_ItemList = [] Sales_Temp_Index = 0 sarirenk="|cffFDD017|H|h" normalrenk="|h|r" kirmizirenk="|cffff0000|Hemp|h" yesilrenk="|cff00ff00|H|h" kapaliyesilrenk="|cff00CC00|Hemp|h" if app.ENABLE_OFFLINE_SHOP_SYSTEM: CREATE_PRIVATE_SHOP_EFFECT = (0,False,app.GetTime()) OFFLINE_SHOP_SALES = [] OFFLINE_SHOP_ITEM_PRICE_DIC = {} def MapNameByIndex(idx): # import localeInfo # MAP_INDEX_DICT = { # 0 : localeInfo.MAP_NONE, # 1 : localeInfo.MAP_A1, # 21 : localeInfo.MAP_B1, # 41 : localeInfo.MAP_C1, # 61 : localeInfo.MAP_N_SNOWM_01, # 62 : localeInfo.MAP_N_FLAME_01, # 63 : localeInfo.MAP_N_DESERT_01, # 64 : localeInfo.MAP_N_THREEWAY, # 65 : localeInfo.MAP_MILGYO, # 66 : localeInfo.MAP_DEVILTOWER1, # 72 : localeInfo.MAP_SKIPIA_DUNGEON_01, # 73 : localeInfo.MAP_SKIPIA_DUNGEON_02, # 208 : localeInfo.MAP_SKIPIA_DUNGEON_BOSS, # 216 : localeInfo.MAP_DEVILCATACOMB, # 217 : localeInfo.MAP_SPIDERDUNGEON_03, # 321 : localeInfo.MAP_DAWNMIST_DUNGEON_01, # 322 : localeInfo.MAP_MT_TH_DUNGEON_01, # 351 : localeInfo.MAP_N_FLAME_DUNGEON_01, # 352 : localeInfo.MAP_N_SNOW_DUNGEON_01, # 109 : "Cave dos Macacos", # 357 : "Esconderijo dos Orcs", # 30 : "Gruta da Praga", # 57 : "Caverna do Dragão", # 13 : "Catacumbas de Azrael", # 56 : "Ruínas de Ganesha", # 364 : "Túmulo da Sphinx", # } # if idx in MAP_INDEX_DICT: return MAP_INDEX_DICT[idx] # else: return MAP_INDEX_DICT[0] return "Map ID: %d" % (idx) def SetOfflineShopItemPrice(itemVNum, itemPrice, itemCount): import math real_item_price = int(math.ceil(itemPrice/itemCount)) OFFLINE_SHOP_ITEM_PRICE_DIC[int(itemVNum)] = real_item_price def GetOfflineShopItemPrice(itemVNum, itemCount): try: return long(OFFLINE_SHOP_ITEM_PRICE_DIC[itemVNum] * itemCount) except KeyError: return 0 def ExistSavedItemPrice(itemVNum): return OFFLINE_SHOP_ITEM_PRICE_DIC.has_key(int(itemVNum)) # enable save account ENABLE_SAVE_ACCOUNT = True if ENABLE_SAVE_ACCOUNT: class SAB: ST_CACHE, ST_FILE, ST_REGISTRY = xrange(3) slotCount = 7 storeType = ST_REGISTRY # 0 cache, 1 file, 2 registry btnName = { "Kaydet": "SaveAccountButton_Save_%02d", "Onay": "SaveAccountButton_Access_%02d", "Sil": "SaveAccountButton_Remove_%02d", } accData = {} regPath = r"SOFTWARE\HasMetin2" regName = "slot%02d_%s" regValueId = "id" regValuePwd = "pwd" regValuePin = "pin" fileExt = ".do.not.share.it.txt" def CreateSABDataFolder(filePath): import os folderPath = os.path.split(filePath)[0] if not os.path.exists(folderPath): os.makedirs(folderPath) def IsExistSABDataFile(filePath): import os return os.path.exists(filePath) def GetSABDataFile(idx): import os filePath = "%s\\Metin2\\" % os.getenv('appdata') filePath += SAB.regName % (idx, SAB.regValueId) filePath += SAB.fileExt return filePath def DelJsonSABData(idx): import os filePath = GetSABDataFile(idx) if IsExistSABDataFile(filePath): os.remove(filePath) def GetJsonSABData(idx): (id, pwd, pin) = ("", "", "") filePath = GetSABDataFile(idx) if not IsExistSABDataFile(filePath): return (id, pwd, pin) with old_open(filePath) as data_file: try: import json (id, pwd, pin) = json.load(data_file) id = str(id) # unicode to ascii pwd = str(pwd) # unicode to ascii pin = str(pin) # unicode to ascii except ValueError: pass return (id, pwd, pin) def SetJsonSABData(idx, slotData): filePath = GetSABDataFile(idx) CreateSABDataFolder(filePath) with open(filePath, "w", encoding="utf-8") as data_file: import json json.dump(slotData, data_file) def DelWinRegKeyValue(keyPath, keyName): try: import _winreg _winreg.CreateKey(_winreg.HKEY_CURRENT_USER, keyPath) _tmpKey = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, keyPath, 0, _winreg.KEY_WRITE) _winreg.DeleteValue(_tmpKey, keyName) _winreg.CloseKey(_tmpKey) return True except WindowsError: return False def GetWinRegKeyValue(keyPath, keyName): try: import _winreg _tmpKey = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, keyPath, 0, _winreg.KEY_READ) keyValue, keyType = _winreg.QueryValueEx(_tmpKey, keyName) _winreg.CloseKey(_tmpKey) return str(keyValue) # unicode to ascii except WindowsError: return None def SetWinRegKeyValue(keyPath, keyName, keyValue): try: import _winreg _winreg.CreateKey(_winreg.HKEY_CURRENT_USER, keyPath) _tmpKey = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, keyPath, 0, _winreg.KEY_WRITE) _winreg.SetValueEx(_tmpKey, keyName, 0, _winreg.REG_SZ, keyValue) _winreg.CloseKey(_tmpKey) return True except WindowsError: return False # classic minmax def def minmax(tmin, tmid, tmax): if tmid < tmin: return tmin elif tmid > tmax: return tmax return tmid # EXTRA END # option IN_GAME_SHOP_ENABLE = 1 CONSOLE_ENABLE = 0 Vectors = '' YangDrop = 1 maintenanceinfo = { "time" : 0, "active" : 0, "duration" : 0, } if app.ENABLE_ITEM_DELETE_SYSTEM: silme = 0 if app.ENABLE_ITEM_DELETE_SYSTEM: ITEM_DELETE_LIST = {} PVPMODE_ENABLE = 1 PVPMODE_TEST_ENABLE = 0 PVPMODE_ACCELKEY_ENABLE = 1 PVPMODE_ACCELKEY_DELAY = 0.5 PVPMODE_PROTECTED_LEVEL = 15 FOG_LEVEL0 = 4800.0 MuzikKontrol = False FOG_LEVEL1 = 9600.0 FOG_LEVEL2 = 12800.0 FOG_LEVEL = FOG_LEVEL0 FOG_LEVEL_LIST=[FOG_LEVEL0, FOG_LEVEL1, FOG_LEVEL2] CAMERA_MAX_DISTANCE_SHORT = 2500.0 CAMERA_MAX_DISTANCE_LONG = 3500.0 CAMERA_MAX_DISTANCE_LIST=[CAMERA_MAX_DISTANCE_SHORT, CAMERA_MAX_DISTANCE_LONG] CAMERA_MAX_DISTANCE = CAMERA_MAX_DISTANCE_SHORT CHRNAME_COLOR_INDEX = 0 ENVIRONMENT_NIGHT="d:/ymir work/environment/moonlight04.msenv" Night = 0 # constant HIGH_PRICE = 500000 MIDDLE_PRICE = 50000 ERROR_METIN_STONE = 28960 SUB2_LOADING_ENABLE = 1 EXPANDED_COMBO_ENABLE = 1 CONVERT_EMPIRE_LANGUAGE_ENABLE = 0 USE_ITEM_WEAPON_TABLE_ATTACK_BONUS = 0 ADD_DEF_BONUS_ENABLE = 0 LOGIN_COUNT_LIMIT_ENABLE = 0 USE_SKILL_EFFECT_UPGRADE_ENABLE = 1 VIEW_OTHER_EMPIRE_PLAYER_TARGET_BOARD = 1 GUILD_MONEY_PER_GSP = 100 GUILD_WAR_TYPE_SELECT_ENABLE = 1 TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUE = 10 HAIR_COLOR_ENABLE = 1 ARMOR_SPECULAR_ENABLE = 1 WEAPON_SPECULAR_ENABLE = 1 SEQUENCE_PACKET_ENABLE = 1 KEEP_ACCOUNT_CONNETION_ENABLE = 1 MINIMAP_POSITIONINFO_ENABLE = 1 isItemQuestionDialog = 0 def GET_ITEM_QUESTION_DIALOG_STATUS(): global isItemQuestionDialog return isItemQuestionDialog def SET_ITEM_QUESTION_DIALOG_STATUS(flag): global isItemQuestionDialog isItemQuestionDialog = flag import app import net ######################## def SET_DEFAULT_FOG_LEVEL(): global FOG_LEVEL app.SetMinFog(FOG_LEVEL) def SET_FOG_LEVEL_INDEX(index): global FOG_LEVEL global FOG_LEVEL_LIST try: FOG_LEVEL=FOG_LEVEL_LIST[index] except IndexError: FOG_LEVEL=FOG_LEVEL_LIST[0] app.SetMinFog(FOG_LEVEL) def GET_FOG_LEVEL_INDEX(): global FOG_LEVEL global FOG_LEVEL_LIST return FOG_LEVEL_LIST.index(FOG_LEVEL) ######################## def SET_DEFAULT_CAMERA_MAX_DISTANCE(): global CAMERA_MAX_DISTANCE app.SetCameraMaxDistance(CAMERA_MAX_DISTANCE) def SET_CAMERA_MAX_DISTANCE_INDEX(index): global CAMERA_MAX_DISTANCE global CAMERA_MAX_DISTANCE_LIST try: CAMERA_MAX_DISTANCE=CAMERA_MAX_DISTANCE_LIST[index] except: CAMERA_MAX_DISTANCE=CAMERA_MAX_DISTANCE_LIST[0] app.SetCameraMaxDistance(CAMERA_MAX_DISTANCE) def GET_CAMERA_MAX_DISTANCE_INDEX(): global CAMERA_MAX_DISTANCE global CAMERA_MAX_DISTANCE_LIST return CAMERA_MAX_DISTANCE_LIST.index(CAMERA_MAX_DISTANCE) ######################## import chrmgr import player import app