Initial commit: UI-Quellcode (root + uiscript)

Enthaelt die editierbaren Python-UI-Skripte (root/, uiscript/) des
EterNexus-Clients, u.a. die Aenderungen fuer aktivierbare Items
(constinfo.py: IS_ACTIVATABLE_ITEM/IS_MOUNT_SEAL, uiinventory.py:
RefreshBagSlotWindow). Kompilierte Pack-Dateien (.epk/.eix) sowie
Binaries/DLLs/Locale-Assets sind bewusst nicht Teil dieses Repos.
This commit is contained in:
Andreas Lierschaft
2026-08-17 21:50:23 +02:00
commit 11df29aa6b
185 changed files with 71869 additions and 0 deletions
+959
View File
@@ -0,0 +1,959 @@
import app
import constInfo
MAP_TRENT02 = "MAP_TRENT02" # 烙矫
MAP_WL = "MAP_WL" # 烙矫
MAP_NUSLUCK = "MAP_NUSLUCK" # 烙矫
MAP_TREE2 = "MAP_TREE2"
BLEND_POTION_NO_TIME = "BLEND_POTION_NO_TIME"
BLEND_POTION_NO_INFO = "BLEND_POTION_NO_INFO"
APP_TITLE = "METIN2"
GUILD_HEADQUARTER = "Main Building"
GUILD_FACILITY = "Facility"
GUILD_OBJECT = "Object"
GUILD_MEMBER_COUNT_INFINITY = "INFINITY"
LOGIN_FAILURE_WEB_BLOCK = "BLOCK_LOGIN(WEB)"
LOGIN_FAILURE_BLOCK_LOGIN = "BLOCK_LOGIN"
CHANNEL_NOTIFY_FULL = "CHANNEL_NOTIFY_FULL"
GUILD_BUILDING_LIST_TXT = app.GetLocalePath() + "/GuildBuildingList.txt"
GUILD_MARK_MIN_LEVEL = "3"
GUILD_MARK_NOT_ENOUGH_LEVEL = "辨靛饭骇 3捞惑 何磐 啊瓷钦聪促."
ERROR_MARK_UPLOAD_NEED_RECONNECT = "UploadMark: Reconnect to game"
ERROR_MARK_CHECK_NEED_RECONNECT = "CheckMark: Reconnect to game"
VIRTUAL_KEY_ALPHABET_LOWERS = r"[1234567890]/qwertyuiop\=asdfghjkl;`'zxcvbnm.,"
VIRTUAL_KEY_ALPHABET_UPPERS = r'{1234567890}?QWERTYUIOP|+ASDFGHJKL:~"ZXCVBNM<>'
VIRTUAL_KEY_SYMBOLS = '!@#$%^&*()_+|{}:"<>?~'
VIRTUAL_KEY_NUMBERS = "1234567890-=\[];',./`"
VIRTUAL_KEY_SYMBOLS_BR = '!@#$%^&*()_+|{}:"<>?~徉汊殍觏祗螋斛'
__IS_ENGLISH = "ENGLISH" == app.GetLocaleServiceName()
__IS_HONGKONG = "HONGKONG" == app.GetLocaleServiceName()
__IS_NEWCIBN = "locale/newcibn" == app.GetLocalePath()
__IS_EUROPE = "EUROPE" == app.GetLocaleServiceName()
__IS_CANADA = "locale/ca" == app.GetLocalePath()
__IS_BRAZIL = "locale/br" == app.GetLocalePath()
__IS_SINGAPORE = "locale/sg" == app.GetLocalePath()
__IS_VIETNAM = "locale/vn" == app.GetLocalePath()
__IS_ARABIC = "locale/ae" == app.GetLocalePath()
__IS_CIBN10 = "locale/cibn10" == app.GetLocalePath()
__IS_WE_KOREA = "locale/we_korea" == app.GetLocalePath()
__IS_TAIWAN = "locale/taiwan" == app.GetLocalePath()
__IS_JAPAN = "locale/japan" == app.GetLocalePath()
LOGIN_FAILURE_WRONG_SOCIALID = "ASDF"
LOGIN_FAILURE_SHUTDOWN_TIME = "ASDF"
if __IS_CANADA:
__IS_EUROPE = True
def IsYMIR():
return "locale/ymir" == app.GetLocalePath()
def IsJAPAN():
return "locale/japan" == app.GetLocalePath()
def IsENGLISH():
global __IS_ENGLISH
return __IS_ENGLISH
def IsHONGKONG():
global __IS_HONGKONG
return __IS_HONGKONG
def IsTAIWAN():
return "locale/taiwan" == app.GetLocalePath()
def IsNEWCIBN():
return "locale/newcibn" == app.GetLocalePath()
def IsCIBN10():
global __IS_CIBN10
return __IS_CIBN10
def IsEUROPE():
global __IS_EUROPE
return __IS_EUROPE
def IsCANADA():
global __IS_CANADA
return __IS_CANADA
def IsBRAZIL():
global __IS_BRAZIL
return __IS_BRAZIL
def IsVIETNAM():
global __IS_VIETNAM
return __IS_VIETNAM
def IsSINGAPORE():
global __IS_SINGAPORE
return __IS_SINGAPORE
def IsARABIC():
global __IS_ARABIC
return __IS_ARABIC
def IsWE_KOREA():
return "locale/we_korea" == app.GetLocalePath()
# SUPPORT_NEW_KOREA_SERVER
def LoadLocaleData():
if IsYMIR():
import net
SERVER = "蔫档 辑滚"
if SERVER == net.GetServerInfo()[:len(SERVER)]:
app.SetCHEONMA(0)
app.LoadLocaleData("locale/we_korea")
constInfo.ADD_DEF_BONUS_ENABLE = 0
else:
app.SetCHEONMA(1)
app.LoadLocaleData("locale/ymir")
constInfo.ADD_DEF_BONUS_ENABLE = 1
else:
app.LoadLocaleData(app.GetLocalePath())
def IsCHEONMA():
return IsYMIR() # 捞力 YMIR 肺纳老篮 公炼扒 玫付辑滚烙. 玫付辑滚啊 巩阑 摧扁 傈鳖瘤 函且 老 绝澜.
# END_OF_SUPPORT_NEW_KOREA_SERVER
def mapping(**kwargs): return kwargs
def SNA(text):
def f(x):
return text
return f
def SA(text):
def f(x):
return text % x
return f
def LoadLocaleFile(srcFileName, localeDict):
funcDict = {"SA":SA, "SNA":SNA}
lineIndex = 1
try:
lines = pack_open(srcFileName, "r").readlines()
except IOError:
import dbg
dbg.LogBox("LoadLocaleError(%(srcFileName)s)" % locals())
app.Abort()
for line in lines:
try:
tokens = line[:-1].split("\t")
if len(tokens) == 2:
localeDict[tokens[0]] = tokens[1]
elif len(tokens) >= 3:
type = tokens[2].strip()
if type:
localeDict[tokens[0]] = funcDict[type](tokens[1])
else:
localeDict[tokens[0]] = tokens[1]
else:
raise RuntimeError, "Unknown TokenSize"
lineIndex += 1
except:
import dbg
dbg.LogBox("%s: line(%d): %s" % (srcFileName, lineIndex, line), "Error")
raise
all = ["locale","error"]
if IsEUROPE() and IsBRAZIL() :
FN_GM_MARK = "%s/effect/gm.mse" % app.GetLocalePath()
LOCALE_FILE_NAME = "%s/locale_game.txt" % app.GetLocalePath()
constInfo.IN_GAME_SHOP_ENABLE = 0
elif IsSINGAPORE() :
FN_GM_MARK = "%s/effect/gm.mse" % app.GetLocalePath()
LOCALE_FILE_NAME = "%s/locale_game.txt" % app.GetLocalePath()
constInfo.IN_GAME_SHOP_ENABLE = 0
elif IsNEWCIBN() :
##霸烙疙捞柄柳促.
APP_TITLE = "新倚天2"
FN_GM_MARK = "%s/effect/gm.mse" % app.GetLocalePath()
LOCALE_FILE_NAME = "%s/locale_game.txt" % app.GetLocalePath()
constInfo.IN_GAME_SHOP_ENABLE = 1
elif IsTAIWAN():
APP_TITLE = "矮III瓣"
FN_GM_MARK = "%s/effect/gm.mse" % app.GetLocalePath()
LOCALE_FILE_NAME = "%s/locale_game.txt" % app.GetLocalePath()
constInfo.IN_GAME_SHOP_ENABLE = 1
else:
FN_GM_MARK = "%s/effect/gm.mse" % app.GetLocalePath()
LOCALE_FILE_NAME = "%s/locale_game.txt" % app.GetLocalePath()
constInfo.IN_GAME_SHOP_ENABLE = 1
LoadLocaleFile(LOCALE_FILE_NAME, locals())
########################################################################################################
## NOTE : 酒捞袍阑 滚副锭 "公均阑/甫 滚府矫摆嚼聪鳖?" 巩磊凯狼 炼荤 急琶阑 困茄 内靛
dictSingleWord = {
"m":1, "n":1, "r":1, "M":1, "N":1, "R":1, "l":1, "L":1, "1":1, "3":1, "6":1, "7":1, "8":1, "0":1,
}
dictDoubleWord = {
"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "簿":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"":1, "":1, "":1, "":1, "":1, "":1, "穿":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "贿":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"轿":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"":1, "鹿":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
}
locale = mapping(
)
def GetAuxiliaryWordType(text):
textLength = len(text)
if textLength > 1:
singleWord = text[-1]
if (singleWord >= '0' and singleWord <= '9') or\
(singleWord >= 'a' and singleWord <= 'z') or\
(singleWord >= 'A' and singleWord <= 'Z'):
if not dictSingleWord.has_key(singleWord):
return 1
elif dictDoubleWord.has_key(text[-2:]):
return 1
return 0
def CutMoneyString(sourceText, startIndex, endIndex, insertingText, backText):
sourceLength = len(sourceText)
if sourceLength < startIndex:
return backText
text = sourceText[max(0, sourceLength-endIndex):sourceLength-startIndex]
if not text:
return backText
if int(text) <= 0:
return backText
text = str(int(text))
if backText:
backText = " " + backText
return text + insertingText + backText
def SecondToDHM(time):
if time < 60:
if IsARABIC():
return "%.2f %s" % (time, SECOND)
else:
return "0" + MINUTE
second = int(time % 60)
minute = int((time / 60) % 60)
hour = int((time / 60) / 60) % 24
day = int(int((time / 60) / 60) / 24)
text = ""
if day > 0:
text += str(day) + DAY
text += " "
if hour > 0:
text += str(hour) + HOUR
text += " "
if minute > 0:
text += str(minute) + MINUTE
return text
def SecondToHM(time):
if time < 60:
if IsARABIC():
return "%.2f %s" % (time, SECOND)
else:
return "0" + MINUTE
second = int(time % 60)
minute = int((time / 60) % 60)
hour = int((time / 60) / 60)
text = ""
if hour > 0:
text += str(hour) + HOUR
if hour > 0:
text += " "
if minute > 0:
text += str(minute) + MINUTE
return text
def GetAlignmentTitleName(alignment):
if alignment >= 12000:
return TITLE_NAME_LIST[0]
elif alignment >= 8000:
return TITLE_NAME_LIST[1]
elif alignment >= 4000:
return TITLE_NAME_LIST[2]
elif alignment >= 1000:
return TITLE_NAME_LIST[3]
elif alignment >= 0:
return TITLE_NAME_LIST[4]
elif alignment > -4000:
return TITLE_NAME_LIST[5]
elif alignment > -8000:
return TITLE_NAME_LIST[6]
elif alignment > -12000:
return TITLE_NAME_LIST[7]
return TITLE_NAME_LIST[8]
OPTION_PVPMODE_MESSAGE_DICT = {
0 : PVP_MODE_NORMAL,
1 : PVP_MODE_REVENGE,
2 : PVP_MODE_KILL,
3 : PVP_MODE_PROTECT,
4 : PVP_MODE_GUILD,
}
error = mapping(
CREATE_WINDOW = GAME_INIT_ERROR_MAIN_WINDOW,
CREATE_CURSOR = GAME_INIT_ERROR_CURSOR,
CREATE_NETWORK = GAME_INIT_ERROR_NETWORK,
CREATE_ITEM_PROTO = GAME_INIT_ERROR_ITEM_PROTO,
CREATE_MOB_PROTO = GAME_INIT_ERROR_MOB_PROTO,
CREATE_NO_DIRECTX = GAME_INIT_ERROR_DIRECTX,
CREATE_DEVICE = GAME_INIT_ERROR_GRAPHICS_NOT_EXIST,
CREATE_NO_APPROPRIATE_DEVICE = GAME_INIT_ERROR_GRAPHICS_BAD_PERFORMANCE,
CREATE_FORMAT = GAME_INIT_ERROR_GRAPHICS_NOT_SUPPORT_32BIT,
NO_ERROR = ""
)
GUILDWAR_NORMAL_DESCLIST = [GUILD_WAR_USE_NORMAL_MAP, GUILD_WAR_LIMIT_30MIN, GUILD_WAR_WIN_CHECK_SCORE]
GUILDWAR_WARP_DESCLIST = [GUILD_WAR_USE_BATTLE_MAP, GUILD_WAR_WIN_WIPE_OUT_GUILD, GUILD_WAR_REWARD_POTION]
GUILDWAR_CTF_DESCLIST = [GUILD_WAR_USE_BATTLE_MAP, GUILD_WAR_WIN_TAKE_AWAY_FLAG1, GUILD_WAR_WIN_TAKE_AWAY_FLAG2, GUILD_WAR_REWARD_POTION]
MINIMAP_ZONE_NAME_DICT = {
"metin2_map_a1" : MAP_A1,
"map_a2" : MAP_A2,
"metin2_map_a3" : MAP_A3,
"metin2_map_b1" : MAP_B1,
"map_b2" : MAP_B2,
"metin2_map_b3" : MAP_B3,
"metin2_map_c1" : MAP_C1,
"map_c2" : MAP_C2,
"metin2_map_c3" : MAP_C3,
"map_n_snowm_01" : MAP_SNOW,
"metin2_map_n_flame_01" : MAP_FLAME,
"metin2_map_n_desert_01" : MAP_DESERT,
"metin2_map_milgyo" : MAP_TEMPLE,
"metin2_map_spiderdungeon" : MAP_SPIDER,
"metin2_map_deviltower1" : MAP_SKELTOWER,
"metin2_map_guild_01" : MAP_AG,
"metin2_map_guild_02" : MAP_BG,
"metin2_map_guild_03" : MAP_CG,
"metin2_map_trent" : MAP_TREE,
"metin2_map_trent02" : MAP_TREE2,
"season1/metin2_map_WL_01" : MAP_WL,
"season1/metin2_map_nusluck01" : MAP_NUSLUCK,
"Metin2_map_CapeDragonHead" : MAP_CAPE,
"metin2_map_Mt_Thunder" : MAP_THUNDER,
"metin2_map_dawnmistwood" : MAP_DAWN,
"metin2_map_BayBlackSand" : MAP_BAY,
}
JOBINFO_TITLE = [
[JOB_WARRIOR0, JOB_WARRIOR1, JOB_WARRIOR2,],
[JOB_ASSASSIN0, JOB_ASSASSIN1, JOB_ASSASSIN2,],
[JOB_SURA0, JOB_SURA1, JOB_SURA2,],
[JOB_SHAMAN0, JOB_SHAMAN1, JOB_SHAMAN2,],
]
JOBINFO_DATA_LIST = [
[
["鸥绊抄 侩竿苞 绷洒瘤 臼绰 公荤狼",
"扁俺甫 荤恩甸篮 老拿绢 [侩磊]扼绊",
"何弗促. 绢栋茄 困扁俊辑档 弊甸篮 ",
"第肺 拱矾辑瘤 臼栏哥, 促摹绊 框流",
"捞扁 塞电 悼丰甫 困秦 窜脚栏肺",
"利甸苞 付林 轿快扁档 茄促. 捞甸篮",
"肋 窜访等 辟腊苞 塞, 碍仿茄 傍拜仿",
"栏肺 傈厘 弥急滴俊辑 傍拜柳栏肺",
"劝距茄促. ",],
["啊厘 老馆利牢 傍拜屈 公荤肺, ",
"利立傈俊 蝶弗 流立 傍拜栏肺 傈厘",
"俊辑 劝距茄促. 焙流 漂己惑 辟仿阑",
"皋牢栏肺 胶泡 器牢飘甫 捧磊窍登, ",
"利立傈俊 蝶弗 积疙仿 / 规绢仿",
"犬焊甫 困秦 眉仿阑 棵赴促. 肚茄",
"傍拜狼 沥犬己阑 臭捞扁 困秦 刮酶",
"俊档 器牢飘甫 捧磊且 鞘夸啊 乐促.",],
["惑寸 荐霖狼 沥脚仿阑 捞侩窍绰",
"吝/辟芭府 立傈屈 公荤肺, 阿 扁贱",
"窍唱窍唱狼 臭篮 傍拜仿栏肺 傈厘俊辑",
"劝距茄促. 焙流 漂己惑 辟仿阑 皋牢",
"栏肺 胶湃 器牢飘甫 捧磊窍登, ",
"吝/辟芭府 傍拜狼 沥犬己苞 疙吝伏阑",
"困秦 刮酶阑 棵赴促. 肚茄 立傈 矫 ",
"利 傍拜俊 蝶弗 积疙仿 / 规绢仿",
"犬焊甫 困秦 眉仿俊档 器牢飘甫",
"捧磊且 鞘夸啊 乐促. ",],
],
[
["磊按篮 绢栋茄 惑炔俊辑档 磊脚狼",
"个阑 见扁绊 篮剐茄 绢狄狼 烙公甫",
"荐青窍搁辑 傈厘狼 饶困甫 瘤盔窍绰",
"磊甸捞促. 捞甸篮 酒林 狐福绊 脚加",
"窍哥, 厚且 单 绝捞 苞皑窍绊 例力等",
"青悼栏肺 利狼 鞭家俊 摹疙鸥甫 朝府",
"登, 傈厘俊急 利柳阑 氢秦 公荐茄",
"拳混阑 郴徽栏哥 磊脚狼 侩竿阑",
"急焊牢促. "],
["滴颊 窜八阑 林公扁肺 促风哥, 脚加",
"窍霸 摹绊 狐瘤绰 磊按 漂蜡狼 框流烙",
"栏肺 傈厘俊辑 劝距茄促. 焙流 漂己惑",
"刮酶阑 皋牢栏肺 胶泡 器牢飘甫 捧磊",
"窍登, 辟仿阑 棵妨 傍拜仿阑 臭牢促.",
"肚茄 辟立傈俊 蝶弗 积疙仿/规绢仿 ",
"惑铰阑 困秦 眉仿俊档 器牢飘甫",
"捧磊且 鞘夸啊 乐促. ",],
["劝阑 林公扁肺 促风哥, 变 矫具客",
"荤沥芭府俊 蝶弗 盔芭府 傍拜栏肺",
"傈厘俊辑 劝距茄促. 焙流 漂己惑",
"傍拜 己傍伏狼 刘啊甫 困秦 刮酶阑",
"皋牢栏肺 棵妨具 窍哥, 盔芭府",
"傍拜狼 单固瘤 刘啊甫 困秦 辟仿阑",
"棵副 鞘夸啊 乐促. 肚茄 利甸俊霸",
"器困登菌阑 矫, 利 傍拜俊 滚萍扁",
"困茄 积疙仿/规绢仿 惑铰阑 困秦",
"眉仿俊档 器牢飘甫 捧磊且 鞘夸啊",
"乐促. ", ],
],
[
["荐扼绰 [刀篮 刀栏肺]狼 加己栏肺",
"芒汲等 漂荐 加己狼 焙流捞促. ",
"弊甸篮 傈厘俊辑 利甸狼 荤扁甫 历窍",
"矫虐绊, 厩付狼 塞阑 角篮 付藕栏肺",
"利狼 康去苞 腊脚阑 窿苟暗促. 锭肺",
"捞甸篮 磊脚狼 八苞 癌渴俊 绢狄狼",
"塞阑 角绢, 傈厘俊辑 公荤 给瘤 臼篮",
"傍拜仿阑 惯戎窍扁档 窍绰单, 利甸阑",
"磷咯措绰弊 葛嚼捞 况倡俊 阐嘛秦",
"荤恩甸篮 荐扼甫 老拿绢 [付脚]捞扼",
"何福扁甫 林历 旧绰促."],
["券公焙狼 荐扼绰 厩付狼 揪俊辑",
"掘绢瘤绰 付仿阑 公扁唱 规绢备俊",
"角绢 公荤 给瘤 臼篮 傈捧仿栏肺",
"傈厘俊辑 劝距茄促. 焙流 漂己惑",
"瘤瓷捞 臭酒龙荐废 馒侩 厘厚俊",
"角府绰 付仿狼 困仿捞 刘措登骨肺,",
"瘤瓷苞 辟仿阑 皋牢栏肺 胶湃",
"器牢飘甫 捧磊窍登, 立傈俊 蝶弗",
"积疙仿/规绢仿 犬焊甫 困秦 眉仿阑",
"棵赴促. 肚茄 傍拜狼 沥犬己苞",
"雀乔甫 困秦辑 刮酶俊档 器牢飘甫",
"捧磊且 鞘夸啊 乐促. ",],
["孺付焙狼 荐扼甸篮 阿辆 绢狄狼",
"林巩苞 厩付狼 付过栏肺 傈厘俊辑",
"劝距茄促. 焙流 漂己惑 付过 傍拜捞",
"林捞骨肺 瘤瓷阑 皋牢栏肺 胶泡",
"器牢飘甫 捧磊窍登, 盔芭府 付过",
"傍拜狼 沥犬己阑 困秦 刮酶阑 棵赴促.",
"肚茄 器困 登菌阑矫, 利 傍拜俊 蝶弗",
"积疙仿 / 规绢仿 犬焊甫 困秦 眉仿俊档",
"器牢飘甫 捧磊且 鞘夸啊 乐促. ",],
],
[
["公寸篮 侩脚苞 磊楷, 滴 绊措狼",
"塞阑 促逢 荐 乐绰 蜡老茄 流辆捞促.",
"弊甸篮 饶规俊辑 酒焙阑 焊炼窍绊",
"促模 悼丰狼 何惑阑 雀汗 矫虐哥",
"冻绢柳 荤扁甫 惑铰矫挪促. 弊甸篮",
"酒焙狼 荐搁苞 绒侥阑 规秦窍绰 磊甫 ",
"例措 侩辑窍瘤 臼栏哥, 弊繁 磊甸",
"俊霸绰 茄 痢 林历 绝捞 林巩阑",
"磐飘妨 弊 厚疤窃阑 决洒 隆拌茄促.",],
["玫锋焙狼 公寸甸篮 阿辆 何利贱苞",
"焊炼林巩俊 瓷窍哥, 利狼 流 / 埃立",
"傍拜栏肺何磐 酒焙阑 瘤挪促. 焙流",
"漂己惑 付过 瓷仿捞 林捞骨肺 瘤瓷阑",
"皋牢栏肺 胶泡 器牢飘甫 捧磊窍登,",
"器困登菌阑 矫, 利 傍拜俊 蝶弗",
"积疙仿 / 规绢仿 犬焊甫 困秦 眉仿阑",
"棵赴促. 肚茄 盔芭府 付过 傍拜狼",
"沥犬己阑 困俊 刮酶俊档 器牢飘甫",
"捧磊且 鞘夸啊 乐促. ",],
["堡汾焙狼 公寸甸篮 磊楷狼 塞阑",
"呼妨 酒焙阑 雀汗窍绊, 锄脚狼 ",
"塞栏肺 剐笼茄 利甸俊霸 奴 面拜阑",
"涝鳃 荐 乐绰 捞甸捞促. 焙流狼",
"漂己惑 付过 瓷仿捞 林捞骨肺 瘤瓷阑",
"皋牢栏肺 胶泡 器牢飘甫 捧磊窍登,",
"器困登菌阑矫, 利 傍拜俊 蝶弗",
"积疙仿 / 规绢仿 犬焊甫 困秦 眉仿阑",
"棵赴促. 肚茄 盔芭府 付过 傍拜狼",
"沥犬己阑 困俊 刮酶俊档 器牢飘甫",
"捧磊且 鞘夸啊 乐促. "],
],
]
WHISPER_ERROR = {
1 : CANNOT_WHISPER_NOT_LOGON,
2 : CANNOT_WHISPER_DEST_REFUSE,
3 : CANNOT_WHISPER_SELF_REFUSE,
}
NOTIFY_MESSAGE = {
"CANNOT_EQUIP_SHOP" : CANNOT_EQUIP_IN_SHOP,
"CANNOT_EQUIP_EXCHANGE" : CANNOT_EQUIP_IN_EXCHANGE,
}
ATTACK_ERROR_TAIL_DICT = {
"IN_SAFE" : CANNOT_ATTACK_SELF_IN_SAFE,
"DEST_IN_SAFE" : CANNOT_ATTACK_DEST_IN_SAFE,
}
SHOT_ERROR_TAIL_DICT = {
"EMPTY_ARROW" : CANNOT_SHOOT_EMPTY_ARROW,
"IN_SAFE" : CANNOT_SHOOT_SELF_IN_SAFE,
"DEST_IN_SAFE" : CANNOT_SHOOT_DEST_IN_SAFE,
}
USE_SKILL_ERROR_TAIL_DICT = {
"IN_SAFE" : CANNOT_SKILL_SELF_IN_SAFE,
"NEED_TARGET" : CANNOT_SKILL_NEED_TARGET,
"NEED_EMPTY_BOTTLE" : CANNOT_SKILL_NEED_EMPTY_BOTTLE,
"NEED_POISON_BOTTLE" : CANNOT_SKILL_NEED_POISON_BOTTLE,
"REMOVE_FISHING_ROD" : CANNOT_SKILL_REMOVE_FISHING_ROD,
"NOT_YET_LEARN" : CANNOT_SKILL_NOT_YET_LEARN,
"NOT_MATCHABLE_WEAPON" : CANNOT_SKILL_NOT_MATCHABLE_WEAPON,
"WAIT_COOLTIME" : CANNOT_SKILL_WAIT_COOLTIME,
"NOT_ENOUGH_HP" : CANNOT_SKILL_NOT_ENOUGH_HP,
"NOT_ENOUGH_SP" : CANNOT_SKILL_NOT_ENOUGH_SP,
"CANNOT_USE_SELF" : CANNOT_SKILL_USE_SELF,
"ONLY_FOR_ALLIANCE" : CANNOT_SKILL_ONLY_FOR_ALLIANCE,
"CANNOT_ATTACK_ENEMY_IN_SAFE_AREA" : CANNOT_SKILL_DEST_IN_SAFE,
"CANNOT_APPROACH" : CANNOT_SKILL_APPROACH,
"CANNOT_ATTACK" : CANNOT_SKILL_ATTACK,
"ONLY_FOR_CORPSE" : CANNOT_SKILL_ONLY_FOR_CORPSE,
"EQUIP_FISHING_ROD" : CANNOT_SKILL_EQUIP_FISHING_ROD,
"NOT_HORSE_SKILL" : CANNOT_SKILL_NOT_HORSE_SKILL,
"HAVE_TO_RIDE" : CANNOT_SKILL_HAVE_TO_RIDE,
}
LEVEL_LIST=["", HORSE_LEVEL1, HORSE_LEVEL2, HORSE_LEVEL3]
HEALTH_LIST=[
HORSE_HEALTH0,
HORSE_HEALTH1,
HORSE_HEALTH2,
HORSE_HEALTH3,
]
USE_SKILL_ERROR_CHAT_DICT = {
"NEED_EMPTY_BOTTLE" : SKILL_NEED_EMPTY_BOTTLE,
"NEED_POISON_BOTTLE" : SKILL_NEED_POISON_BOTTLE,
"ONLY_FOR_GUILD_WAR" : SKILL_ONLY_FOR_GUILD_WAR,
}
SHOP_ERROR_DICT = {
"NOT_ENOUGH_MONEY" : SHOP_NOT_ENOUGH_MONEY,
"SOLDOUT" : SHOP_SOLDOUT,
"INVENTORY_FULL" : SHOP_INVENTORY_FULL,
"INVALID_POS" : SHOP_INVALID_POS,
"NOT_ENOUGH_MONEY_EX" : SHOP_NOT_ENOUGH_MONEY_EX,
}
STAT_MINUS_DESCRIPTION = {
"HTH-" : STAT_MINUS_CON,
"INT-" : STAT_MINUS_INT,
"STR-" : STAT_MINUS_STR,
"DEX-" : STAT_MINUS_DEX,
}
MODE_NAME_LIST = ( PVP_OPTION_NORMAL, PVP_OPTION_REVENGE, PVP_OPTION_KILL, PVP_OPTION_PROTECT, )
TITLE_NAME_LIST = ( PVP_LEVEL0, PVP_LEVEL1, PVP_LEVEL2, PVP_LEVEL3, PVP_LEVEL4, PVP_LEVEL5, PVP_LEVEL6, PVP_LEVEL7, PVP_LEVEL8, )
def GetLetterImageName():
return "season1/icon/scroll_close.tga"
def GetLetterOpenImageName():
return "season1/icon/scroll_open.tga"
def GetLetterCloseImageName():
return "season1/icon/scroll_close.tga"
if 949 == app.GetDefaultCodePage():
def EUL(name):
if GetAuxiliaryWordType(name):
return ""
else:
return ""
def I(name):
if GetAuxiliaryWordType(name):
return ""
else:
return ""
def DO_YOU_SELL_ITEM(sellItemName, sellItemCount, sellItemPrice):
name = sellItemName
if sellItemCount > 1:
name += " "
name += str(sellItemCount)
name += ""
return name + EUL(name) + str(sellItemPrice) + "成俊 颇矫摆嚼聪鳖?"
def DO_YOU_BUY_ITEM(sellItemName, sellItemCount, sellItemPrice):
name = sellItemName
if sellItemCount > 1:
name += " "
name += str(sellItemCount)
name += ""
return name + EUL(name) + str(sellItemPrice) + "俊 荤矫摆嚼聪鳖?"
def REFINE_FAILURE_CAN_NOT_ATTACH(attachedItemName):
return attachedItemName+EUL(attachedItemName)+"何馒且 荐 绝绰 酒捞袍涝聪促"
def REFINE_FAILURE_NO_SOCKET(attachedItemName):
return attachedItemName+EUL(attachedItemName)+"何馒且 荐 乐绰 家南捞 绝嚼聪促"
def REFINE_FAILURE_NO_GOLD_SOCKET(attachedItemName):
return attachedItemName+EUL(attachedItemName)+"何馒且 荐 乐绰 炔陛 家南捞 绝嚼聪促"
def HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, dropItemCount):
name = dropItemName
if dropItemCount > 1:
name += " "
name += str(dropItemCount)
name += ""
return name+EUL(name)+"滚府矫摆嚼聪鳖?"
def NumberToMoneyString(number):
if number <= 0:
return "0成"
number = str(number)
result = CutMoneyString(number, 0, 4, "", "")
result = CutMoneyString(number, 4, 8, "", result)
result = CutMoneyString(number, 8, 12, "", result)
result = result + ""
return result
def NumberToSecondaryCoinString(number):
if number <= 0:
return "0傈"
number = str(number)
result = CutMoneyString(number, 0, 4, "", "")
result = CutMoneyString(number, 4, 8, "", result)
result = CutMoneyString(number, 8, 12, "", result)
result = result + ""
return result
def FISHING_NOTIFY(isFish, fishName):
if isFish:
return fishName + I(fishName) + "巩 淀 钦聪促."
else:
return fishName + I(fishName) + "吧赴淀 钦聪促."
def FISHING_SUCCESS(isFish, fishName):
if isFish:
return fishName + EUL(fishName) + "棱疽嚼聪促!"
else:
return fishName + EUL(fishName) + "掘菌嚼聪促!"
elif 932 == app.GetDefaultCodePage():
def DO_YOU_SELL_ITEM(sellItemName, sellItemCount, sellItemPrice):
if sellItemCount > 1 :
return "%s %s 屄傪 %s偵攧傝傑偡偐丠" % ( sellItemName, sellItemCount, NumberToMoneyString(sellItemPrice) )
else:
return "%s%s偱攧傝傑偡偐丠" % (sellItemName, NumberToMoneyString(sellItemPrice) )
def DO_YOU_BUY_ITEM(buyItemName, buyItemCount, buyItemPrice) :
if buyItemCount > 1 :
return "%s %s屄傪 %s偱攦偄傑偡偐丠" % ( buyItemName, buyItemCount, buyItemPrice )
else:
return "%s%s偱攦偄傑偡偐丠" % ( buyItemName, buyItemPrice )
def REFINE_FAILURE_CAN_NOT_ATTACH(attachedItemName) :
return "%s傪憰拝偱偒側偄傾僀僥?偱偡丅" % (attachedItemName)
def REFINE_FAILURE_NO_SOCKET(attachedItemName) :
return "%s傪憰拝偡傞?働僢僩偑偁傝傑偣傫丅" % (attachedItemName)
def REFINE_FAILURE_NO_GOLD_SOCKET(attachedItemName) :
return "%s傪憰拝偱偒傞墿嬥?働僢僩偑偁傝傑偣傫丅" % (attachedItemName)
def HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, dropItemCount) :
if dropItemCount > 1 :
return "%s %d 屄傪幪偰傑偡偐丠" % (dropItemName, dropItemCount)
else :
return "%s傪幪偰傑偡偐丠" % (dropItemName)
def FISHING_NOTIFY(isFish, fishName) :
if isFish :
return "%s 偑怘偄偮偄偨傛偆偱偡" % ( fishName )
else :
return "%s 偑偐偐偭偨傛偆偱偡" % ( fishName )
def FISHING_SUCCESS(isFish, fishName) :
if isFish :
return "%s 傪曔傑偊傑偟偨両" % (fishName)
else :
return "%s 傪庤偵擖傟傑偟偨両" % (fishName)
def NumberToMoneyString(number) :
if number <= 0 :
return "0椉"
number = str(number)
result = CutMoneyString(number, 0, 4, "", "")
result = CutMoneyString(number, 4, 8, "", result)
result = CutMoneyString(number, 8, 12, "", result)
result = result + ""
return result
def NumberToSecondaryCoinString(number) :
if number <= 0 :
return "0jun"
number = str(number)
result = CutMoneyString(number, 0, 4, "", "")
result = CutMoneyString(number, 4, 8, "", result)
result = CutMoneyString(number, 8, 12, "", result)
result = result + "jun"
return result
elif IsHONGKONG():
def DO_YOU_SELL_ITEM(sellItemName, sellItemCount, sellItemPrice):
if sellItemCount > 1 :
return DO_YOU_SELL_ITEM2 % (sellItemName, sellItemCount, NumberToMoneyString(sellItemPrice) )
else:
return DO_YOU_SELL_ITEM1 % (sellItemName, NumberToMoneyString(sellItemPrice) )
def DO_YOU_BUY_ITEM(buyItemName, buyItemCount, buyItemPrice) :
if buyItemCount > 1 :
return DO_YOU_BUY_ITEM2 % ( buyItemName, buyItemCount, buyItemPrice )
else:
return DO_YOU_BUY_ITEM1 % ( buyItemName, buyItemPrice )
def REFINE_FAILURE_CAN_NOT_ATTACH(attachedItemName) :
return REFINE_FAILURE_CAN_NOT_ATTACH0 % (attachedItemName)
def REFINE_FAILURE_NO_SOCKET(attachedItemName) :
return REFINE_FAILURE_NO_SOCKET0 % (attachedItemName)
def REFINE_FAILURE_NO_GOLD_SOCKET(attachedItemName) :
return REFINE_FAILURE_NO_GOLD_SOCKET0 % (attachedItemName)
def HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, dropItemCount) :
if dropItemCount > 1 :
return HOW_MANY_ITEM_DO_YOU_DROP2 % (dropItemName, dropItemCount)
else :
return HOW_MANY_ITEM_DO_YOU_DROP1 % (dropItemName)
def FISHING_NOTIFY(isFish, fishName) :
if isFish :
return FISHING_NOTIFY1 % ( fishName )
else :
return FISHING_NOTIFY2 % ( fishName )
def FISHING_SUCCESS(isFish, fishName) :
if isFish :
return FISHING_SUCCESS1 % (fishName)
else :
return FISHING_SUCCESS2 % (fishName)
def NumberToMoneyString(number) :
if number <= 0 :
return "0 %s" % (MONETARY_UNIT0)
number = str(number)
result = CutMoneyString(number, 0, 4, "", "")
result = CutMoneyString(number, 4, 8, MONETARY_UNIT1, result)
result = CutMoneyString(number, 8, 12, MONETARY_UNIT2, result)
result = result + MONETARY_UNIT0
return result
def NumberToSecondaryCoinString(number) :
if number <= 0 :
return "0 %s" % (MONETARY_UNIT_JUN)
number = str(number)
result = CutMoneyString(number, 0, 4, "", "")
result = CutMoneyString(number, 4, 8, MONETARY_UNIT1, result)
result = CutMoneyString(number, 8, 12, MONETARY_UNIT2, result)
result = result + MONETARY_UNIT_JUN
return result
elif IsNEWCIBN() or IsCIBN10():
def DO_YOU_SELL_ITEM(sellItemName, sellItemCount, sellItemPrice):
if sellItemCount>1:
return "确定要把%s%s%s金币卖掉吗?" % (str(sellItemCount), sellItemName, str(sellItemPrice))
else:
return "确定要把%s%s金币卖掉吗?" % (sellItemName, str(sellItemPrice))
def DO_YOU_BUY_ITEM(sellItemName, sellItemCount, sellItemPrice):
if sellItemCount>1:
return "确定要把%s%s%s金币买进吗?" % (str(sellItemCount), sellItemName, str(sellItemPrice))
else:
return "确定要把%s%s金币买进吗?" % (sellItemName, str(sellItemPrice))
def REFINE_FAILURE_CAN_NOT_ATTACH(attachedItemName):
return "无法镶嵌%s 的装备" % (attachedItemName)
def REFINE_FAILURE_NO_SOCKET(attachedItemName):
return "没有可以镶嵌%s 的孔" % (attachedItemName)
def REFINE_FAILURE_NO_GOLD_SOCKET(attachedItemName):
return "没有可以镶嵌%s 的黄金孔" % (attachedItemName)
def HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, dropItemCount):
if dropItemCount>1:
return "确定要扔掉%d%s吗?" % (dropItemCount, dropItemName)
else:
return "确定要扔掉%s吗?" % (dropItemName)
def FISHING_NOTIFY(isFish, fishName):
if isFish:
return fishName # 夯贰 咯扁俊 绢恫 富捞 嘿绢乐绰单, 牢内爹捞 柄廉乐绢辑 汗盔且 荐啊 绝促 ばば... cython俊辑 牢内爹 俊矾 唱辑 瘤况滚覆...
else:
return "钓着" + fishName + "了。"
def FISHING_SUCCESS(isFish, fishName):
if isFish:
return "钓着" + fishName + "了。"
else:
return "获得" + fishName + "了。"
def NumberToMoneyString(number):
if number <= 0:
return "0两"
number = str(number)
result = CutMoneyString(number, 0, 4, "", "")
result = CutMoneyString(number, 4, 8, "", result)
result = CutMoneyString(number, 8, 12, "亿", result)
result = result + ""
return result
def NumberToSecondaryCoinString(number):
if number <= 0:
return "0JUN"
number = str(number)
result = CutMoneyString(number, 0, 4, "", "")
result = CutMoneyString(number, 4, 8, "", result)
result = CutMoneyString(number, 8, 12, "亿", result)
result = result + "JUN"
return result
elif IsEUROPE() and not IsWE_KOREA() and not IsYMIR():
def DO_YOU_SELL_ITEM(sellItemName, sellItemCount, sellItemPrice):
if sellItemCount > 1 :
return DO_YOU_SELL_ITEM2 % (sellItemName, sellItemCount, NumberToMoneyString(sellItemPrice) )
else:
return DO_YOU_SELL_ITEM1 % (sellItemName, NumberToMoneyString(sellItemPrice) )
def DO_YOU_BUY_ITEM(buyItemName, buyItemCount, buyItemPrice) :
if buyItemCount > 1 :
return DO_YOU_BUY_ITEM2 % ( buyItemName, buyItemCount, buyItemPrice )
else:
return DO_YOU_BUY_ITEM1 % ( buyItemName, buyItemPrice )
def REFINE_FAILURE_CAN_NOT_ATTACH(attachedItemName) :
return REFINE_FAILURE_CAN_NOT_ATTACH0 % (attachedItemName)
def REFINE_FAILURE_NO_SOCKET(attachedItemName) :
return REFINE_FAILURE_NO_SOCKET0 % (attachedItemName)
def REFINE_FAILURE_NO_GOLD_SOCKET(attachedItemName) :
return REFINE_FAILURE_NO_GOLD_SOCKET0 % (attachedItemName)
def HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, dropItemCount) :
if dropItemCount > 1 :
return HOW_MANY_ITEM_DO_YOU_DROP2 % (dropItemName, dropItemCount)
else :
return HOW_MANY_ITEM_DO_YOU_DROP1 % (dropItemName)
def FISHING_NOTIFY(isFish, fishName) :
if isFish :
return FISHING_NOTIFY1 % ( fishName )
else :
return FISHING_NOTIFY2 % ( fishName )
def FISHING_SUCCESS(isFish, fishName) :
if isFish :
return FISHING_SUCCESS1 % (fishName)
else :
return FISHING_SUCCESS2 % (fishName)
def NumberToMoneyString(n) :
if n <= 0 :
return "0 %s" % (MONETARY_UNIT0)
return "%s %s" % ('.'.join([ i-3<0 and str(n)[:i] or str(n)[i-3:i] for i in range(len(str(n))%3, len(str(n))+1, 3) if i ]), MONETARY_UNIT0)
def NumberToSecondaryCoinString(n) :
if n <= 0 :
return "0 %s" % (MONETARY_UNIT_JUN)
return "%s %s" % ('.'.join([ i-3<0 and str(n)[:i] or str(n)[i-3:i] for i in range(len(str(n))%3, len(str(n))+1, 3) if i ]), MONETARY_UNIT_JUN)