Jump to content

Croparox

Inactive Member
  • Posts

    30
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by Croparox

  1. 0212 19:31:00608 :: ui:3405: RuntimeWarning: tp_compare didn't return -1 or -2 for exception
    
    0212 19:31:00609 :: 
    introLogin.py(line:532) __LoadScript
    ui.py(line:3061) LoadScriptFile
    ui.py(line:3127) LoadChildren
    ui.py(line:3405) LoadElementExpandedImage
    
    LoginWindow.__LoadScript.LoadObject - <type 'exceptions.RuntimeError'>:Failed to load image (filename: locale/tr/ui/serverlist.sub)
    
    0212 19:31:00609 :: ============================================================================================================
    0212 19:31:00609 :: Abort!!!!
    
    
    0212 19:31:00623 :: ============================================================================================================
    0212 19:31:00624 :: Abort!!!!

    I had that settings. Look:)

     

     

    EDIT: Where do I need to edit the path?

  2. Hi guys!

    Today I tried to translate the quests from my serverfile in english. I started with my locale.lua from /usr/home/game/share/locale/romania/quest and then with lv30.lua(biolog quest) from /usr/home/game/share/locale/romania/quest/toplu/biyolog to see if it works. But it wasn't... I tried /reload, /reload q and even a server reboot.. but everything is still the same. Can someone help me? It's my first time and I'm a beginner. :mellow:

    How can I translate the quests?

  3. Hi guys! I have a problem with my client. I get this error when I'm trying to open it after I tried to change the APP_TITLE in my localeinfo.py:

    lqLLHUC.png

     

    Below you have my full and original localeinfo.py:

    I just tried to change the APP TITLE from "BEST Production ?PRO SF" to something else.:blink:

    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 = "BEST Production ?PRO SF"
    
    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()	
    
    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() :
    	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
    elif IsJAPAN():
    	APP_TITLE = "CRUEL WAR - Return of the Metin2"
    	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, "v":1, "네":1, "녜":1, "놔":1, "R":1, "눠":1, "눼":1, "뇌":1, "뉘":1, "늬":1,
    	"다":1, "댜":1, "더":1, "뎌":1, "도":1, "됴":1, "두":1, "듀":1, "드":1, "디":1, "대":1, "?:1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
    	"":1, "x":1, "":1, "":1, "":1, "?:1, "뚜":1, "":1, "뜨":1, "띠":1, "때":1, "":1, "떼":1, "?:1, "":1, "":1, "?:1, "뛔":1, "뙤":1, "뛰":1, "띄":1,
    	"라":1, "랴":1, "러":1, "려":1, "로":1, "료":1, "루":1, "류":1, "르":1, "리":1, "래":1, "m":1, "레":1, "례":1, "롸":1, "O":1, "뤄":1, "뤠":1, "뢰":1, "뤼":1, "l":1,
    	"마":1, "먀":1, "머":1, "며":1, "모":1, "묘":1, "무":1, "뮤":1, "므":1, "미":1, "매":1, "?:1, "":1, "":1, "":1, "?:1, "뭐":1, "뭬":1, "뫼":1, "뮈":1, "?:1,
    	"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
    	"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "?:1, "뻬":1, "?:1, "?:1, "?:1, "?:1, "?:1, "":1, "?:1, "u":1,
    	"사":1, "샤":1, "서":1, "셔":1, "소":1, "쇼":1, "수":1, "슈":1, "스":1, "시":1, "새":1, "섀":1, "세":1, "셰":1, "솨":1, "쇄":1, "숴":1, "쉐":1, "쇠":1, "쉬":1, "?:1,
    	"":1, "X":1, "":1, "?:1, "쏘":1, "쑈":1, "쑤":1, "o":1, "쓰":1, "씨":1, "쌔":1, "y":1, "쎄":1, "?:1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
    	"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
    	"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "?":1,
    	"":1, "":1, "":1, "":1, "":1, "?":1, "":1, "":1, "":1, "":1, "":1, "?":1, "":1, "?":1, "":1, "":1, "":1, "?":1, "":1, "":1, "?":1,
    	"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "?":1, "":1, "":1, "":1, "?":1, "":1, "":1, "":1, "":1, "M":1,
    	"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "?":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "?":1,
    	"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "?":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1,
    	"":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "?":1, "":1, "":1, "":1, "?":1, "":1, "?":1, "":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 >= 30000:
    		return TITLE_NAME_LIST[0]
    	elif alignment >= 20000:
    		return TITLE_NAME_LIST[1]
    	elif alignment >= 12000:
    		return TITLE_NAME_LIST[2]
    	elif alignment >= 8000:
    		return TITLE_NAME_LIST[3]
    	elif alignment >= 4000:
    		return TITLE_NAME_LIST[4]
    	elif alignment >= 1000:
    		return TITLE_NAME_LIST[5]
    	elif alignment >= 0:
    		return TITLE_NAME_LIST[6]
    	elif alignment > -4000:
    		return TITLE_NAME_LIST[7]
    	elif alignment > -8000:
    		return TITLE_NAME_LIST[8]
    	elif alignment > -12000:
    		return TITLE_NAME_LIST[9]
    	elif alignment > -20000:
    		return TITLE_NAME_LIST[10]
    	elif alignment > -25000:
    		return TITLE_NAME_LIST[11]
    
    	return TITLE_NAME_LIST[12]
    
    
    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,],
    	[JOB_WOLFMAN0, JOB_WOLFMAN1, JOB_WOLFMAN2,],
    ]
    
    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, PVP_LEVEL9, PVP_LEVEL10, PVP_LEVEL11, PVP_LEVEL12, )
    
    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 ????H" % ( sellItemName, sellItemCount, NumberToMoneyString(sellItemPrice) )
    		else:
    			return "%s ?%s?????H" % (sellItemName, NumberToMoneyString(sellItemPrice) )
    
    	def DO_YOU_BUY_ITEM(buyItemName, buyItemCount, buyItemPrice) :
    		if buyItemCount > 1 :
    			return "%s %s??%s?????H" % ( buyItemName, buyItemCount, buyItemPrice )
    		else:
    			return "%s?%s?????H" % ( buyItemName, buyItemPrice )
    			
    	def REFINE_FAILURE_CAN_NOT_ATTACH(attachedItemName) :
    		return "%s?????ACe???B" % (attachedItemName)
    
    	def REFINE_FAILURE_NO_SOCKET(attachedItemName) :
    		return "%s???Pbg?????B" % (attachedItemName)
    
    	def REFINE_FAILURE_NO_GOLD_SOCKET(attachedItemName) :
    		return "%s??????Pbg?????B" % (attachedItemName)
    		
    	def HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, dropItemCount) :
    		if dropItemCount > 1 :
    			return "%s %d ???????H" % (dropItemName, dropItemCount)
    		else :	
    			return "%s??????H" % (dropItemName)
    
    	def FISHING_NOTIFY(isFish, fishName) :
    		if isFish :
    			return "%s ?H???????? % ( fishName )
    		else :
    			return "%s ????????? % ( fishName )
    
    	def FISHING_SUCCESS(isFish, fishName) :
    		if isFish :
    			return "%s ???????I" % (fishName)
    		else :
    			return "%s ?? ?????I" % (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 + " 球냇匣?
    		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) 

     

  4. On 6/10/2016 at 2:07 PM, arves100 said:

    If you compile your .exe binary with Granny 2.9, you have to use the Granny 2.9 dll. Same if you do it for Granny 2.4

    Hi!

    I have the same problem, but I'm beginner and I don't understand very well what are you trying to say. I have client source but I don't know how to check the version of granny that I have and I don't know how to compile a client. Can someone explain to me or give me a video/tutorial?

     

    Thank you!

  5. 9 hours ago, iltizio said:

    The best mysql version for metin2 is not mysql. Use MariaDB 

    to login on mysql 5.7 do this on your Shell:

    mysql -u root -p $(cat /root/.mysql_secret)

    Hi and thank you for the reply.

    Can you give me a good tutorial for installing MariaDB on FreeBSD 10.3 ? Or give me a step by step instructions?

     

    P.s. I'm beginner.

  6. Hi !

    I have some questions for you guys:

    1. Which is the best version of mysql and FreeBSD for a metin2 server?

    2. After I installed mysql 5.7 on FreeBSD 10.3 it gives me the error: Access denied for user ' root ' @ ' localhost ' (using password: NO). I've tried a few solutions from the internet but they are for older versions of mysql. I heard that in /root/.mysql_secret is a password that I should use, but I don't know how to do that. Can someone help me to install mysql 5.7 on FreeBSD 10.3?

  7. 13 hours ago, Croparox said:

     

    root@lonekek-dev:/usr/src/metin2source/game/src # gmake -j20
    compile acce.cpp
    compile BattleArena.cpp
    compile FSM.cpp
    compile MarkConvert.cpp
    compile MarkImage.cpp
    compile MarkManager.cpp
    compile OXEvent.cpp
    compile TrafficProfiler.cpp
    compile ani.cpp
    compile banword.cpp
    compile battle.cpp
    compile blend_item.cpp
    compile block_country.cpp
    compile buffer_manager.cpp
    compile building.cpp
    compile castle.cpp
    compile char.cpp
    compile char_affect.cpp
    compile char_battle.cpp
    compile arena.cpp
    char.cpp:7474:124: warning: trigraph ??) ignored, use -trigraphs to enable
    char.cpp:7474:248: warning: trigraph ??) ignored, use -trigraphs to enable
    char.cpp:7474:278: warning: trigraph ??) ignored, use -trigraphs to enable
    compile char_cards.cpp
    compile char_change_empire.cpp
    compile char_horse.cpp
    compile char_item.cpp
    compile char_manager.cpp
    compile char_quickslot.cpp
    compile char_resist.cpp
    acce.cpp: In function 'void FN_remove_material(CItem**, DWORD, int, int)':
    acce.cpp:87: warning: unused variable 'count'
    compile char_skill.cpp
    compile char_state.cpp
    acce.cpp: In function 'bool Acce_InformationInitialize()':
    acce.cpp:943: warning: comparison between signed and unsigned integer expressions
    compile PetSystem.cpp
    compile cmd.cpp
    compile cmd_emotion.cpp
    char.cpp: In member function 'void CHARACTER::CostumeBonusTransfer(DWORD, DWORD)':
    char.cpp:2844: warning: suggest parentheses around && within ||
    char.cpp:2855: warning: suggest parentheses around && within ||
    compile cmd_general.cpp
    compile cmd_gm.cpp
    char_cards.cpp: In member function 'void CHARACTER::Cards_pullout()':
    char_cards.cpp:76: warning: comparison between signed and unsigned integer expressions
    char_cards.cpp: In member function 'void CHARACTER::CardsAccept(DWORD)':
    char_cards.cpp:171: warning: comparison between signed and unsigned integer expressions
    char_cards.cpp:178: warning: comparison between signed and unsigned integer expressions
    compile cmd_oxevent.cpp
    compile config.cpp
    cmd_gm.cpp:2154:9: warning: multi-character character constant
    compile constants.cpp
    compile crc32.cpp
    compile cube.cpp
    compile db.cpp
    char_item.cpp: In member function 'bool CHARACTER::UseItem(TItemPos, TItemPos)':
    char_item.cpp:5468: warning: unused variable 'wCell'
    char_item.cpp:5469: warning: unused variable 'window_type'
    PetSystem.cpp: In member function 'virtual bool CPetActor::_UpdateFollowAI()':
    PetSystem.cpp:246: warning: unused variable 'bDoMoveAlone'
    PetSystem.cpp: In member function 'CPetActor* CPetSystem::Summon(DWORD, CItem*, const char*, bool, DWORD)':
    PetSystem.cpp:552: warning: unused variable 'petVID'
    compile desc.cpp
    compile desc_client.cpp
    compile desc_manager.cpp
    compile desc_p2p.cpp
    compile dev_log.cpp
    /usr/local/include/boost/functional/hash/extensions.hpp: In member function 'size_t boost::hash<T>::operator()(const T&) const [with T = VID]':
    /usr/local/include/boost/unordered/detail/buckets.hpp:599:   instantiated from 'static SizeT boost::unordered::detail::prime_policy<SizeT>::apply_hash(const Hash&, const T&) [with Hash = boost::hash<VID>, T = VID, SizeT = unsigned int]'
    /usr/local/include/boost/unordered/detail/table.hpp:758:   instantiated from 'size_t boost::unordered::detail::table<Types>::hash(const typename Types::key_type&) const [with Types = boost::unordered::detail::map<std::allocator<std::pair<const VID, unsigned int> >, VID, unsigned int, boost::hash<VID>, std::equal_to<VID> >]'
    /usr/local/include/boost/unordered/detail/table.hpp:784:   instantiated from 'boost::unordered::iterator_detail::iterator<typename Types::node> boost::unordered::detail::table<Types>::find_node(const typename Types::key_type&) const [with Types = boost::unordered::detail::map<std::allocator<std::pair<const VID, unsigned int> >, VID, unsigned int, boost::hash<VID>, std::equal_to<VID> >]'
    /usr/local/include/boost/unordered/unordered_map.hpp:1212:   instantiated from 'typename boost::unordered::unordered_map<K, T, H, P, A>::iterator boost::unordered::unordered_map<K, T, H, P, A>::find(const K&) [with K = VID, T = unsigned int, H = boost::hash<VID>, P = std::equal_to<VID>, A = std::allocator<std::pair<const VID, unsigned int> >]'
    char_skill.cpp:3620:   instantiated from here
    /usr/local/include/boost/functional/hash/extensions.hpp:262: error: no matching function for call to 'hash_value(const VID&)'
    Makefile:129: recipe for target 'OBJDIR/char_skill.o' failed
    gmake: *** [OBJDIR/char_skill.o] Error 1
    gmake: *** Waiting for unfinished jobs....
    db.cpp: In member function 'void DBManager::Query(const char*, ...)':
    db.cpp:93: warning: comparison between signed and unsigned integer expressions
    db.cpp: In member function 'SQLMsg* DBManager::DirectQuery(const char*, ...)':
    db.cpp:105: warning: comparison between signed and unsigned integer expressions
    cmd_general.cpp: In function 'void do_cards(CHARACTER*, const char*, int, int)':
    cmd_general.cpp:2503: warning: 'safemode' may be used uninitialized in this function
    cmd_general.cpp:2517: warning: 'destroy_index' may be used uninitialized in this function
    cmd_general.cpp:2525: warning: 'accpet_index' may be used uninitialized in this function
    cmd_general.cpp:2533: warning: 'restore_index' may be used uninitialized in this function
    char_item.cpp: In member function 'void CHARACTER::BuffOnAttr_ValueChange(BYTE, BYTE, BYTE)':
    char_item.cpp:6626: warning: 'pBuff' may be used uninitialized in this function
    cmd_gm.cpp: In function 'void do_costume_bonus_transfer(CHARACTER*, const char*, int, int)':
    cmd_gm.cpp:2856: warning: 'cell2' may be used uninitialized in this function
    root@lonekek-dev:/usr/src/metin2source/game/src #
     

    HELP

    • Love 1
  8. Hi !

    When I try to compile the game it give me this errors:

    root@lonekek-dev:/usr/src/metin2source/game/src # gmake -j20
    compile acce.cpp
    compile BattleArena.cpp
    compile FSM.cpp
    compile MarkConvert.cpp
    compile MarkImage.cpp
    compile MarkManager.cpp
    compile OXEvent.cpp
    compile TrafficProfiler.cpp
    compile ani.cpp
    compile banword.cpp
    compile battle.cpp
    compile blend_item.cpp
    compile block_country.cpp
    compile buffer_manager.cpp
    compile building.cpp
    compile castle.cpp
    compile char.cpp
    compile char_affect.cpp
    compile char_battle.cpp
    compile arena.cpp
    char.cpp:7474:124: warning: trigraph ??) ignored, use -trigraphs to enable
    char.cpp:7474:248: warning: trigraph ??) ignored, use -trigraphs to enable
    char.cpp:7474:278: warning: trigraph ??) ignored, use -trigraphs to enable
    compile char_cards.cpp
    compile char_change_empire.cpp
    compile char_horse.cpp
    compile char_item.cpp
    compile char_manager.cpp
    compile char_quickslot.cpp
    compile char_resist.cpp
    acce.cpp: In function 'void FN_remove_material(CItem**, DWORD, int, int)':
    acce.cpp:87: warning: unused variable 'count'
    compile char_skill.cpp
    compile char_state.cpp
    acce.cpp: In function 'bool Acce_InformationInitialize()':
    acce.cpp:943: warning: comparison between signed and unsigned integer expressions
    compile PetSystem.cpp
    compile cmd.cpp
    compile cmd_emotion.cpp
    char.cpp: In member function 'void CHARACTER::CostumeBonusTransfer(DWORD, DWORD)':
    char.cpp:2844: warning: suggest parentheses around && within ||
    char.cpp:2855: warning: suggest parentheses around && within ||
    compile cmd_general.cpp
    compile cmd_gm.cpp
    char_cards.cpp: In member function 'void CHARACTER::Cards_pullout()':
    char_cards.cpp:76: warning: comparison between signed and unsigned integer expressions
    char_cards.cpp: In member function 'void CHARACTER::CardsAccept(DWORD)':
    char_cards.cpp:171: warning: comparison between signed and unsigned integer expressions
    char_cards.cpp:178: warning: comparison between signed and unsigned integer expressions
    compile cmd_oxevent.cpp
    compile config.cpp
    cmd_gm.cpp:2154:9: warning: multi-character character constant
    compile constants.cpp
    compile crc32.cpp
    compile cube.cpp
    compile db.cpp
    char_item.cpp: In member function 'bool CHARACTER::UseItem(TItemPos, TItemPos)':
    char_item.cpp:5468: warning: unused variable 'wCell'
    char_item.cpp:5469: warning: unused variable 'window_type'
    PetSystem.cpp: In member function 'virtual bool CPetActor::_UpdateFollowAI()':
    PetSystem.cpp:246: warning: unused variable 'bDoMoveAlone'
    PetSystem.cpp: In member function 'CPetActor* CPetSystem::Summon(DWORD, CItem*, const char*, bool, DWORD)':
    PetSystem.cpp:552: warning: unused variable 'petVID'
    compile desc.cpp
    compile desc_client.cpp
    compile desc_manager.cpp
    compile desc_p2p.cpp
    compile dev_log.cpp
    /usr/local/include/boost/functional/hash/extensions.hpp: In member function 'size_t boost::hash<T>::operator()(const T&) const [with T = VID]':
    /usr/local/include/boost/unordered/detail/buckets.hpp:599:   instantiated from 'static SizeT boost::unordered::detail::prime_policy<SizeT>::apply_hash(const Hash&, const T&) [with Hash = boost::hash<VID>, T = VID, SizeT = unsigned int]'
    /usr/local/include/boost/unordered/detail/table.hpp:758:   instantiated from 'size_t boost::unordered::detail::table<Types>::hash(const typename Types::key_type&) const [with Types = boost::unordered::detail::map<std::allocator<std::pair<const VID, unsigned int> >, VID, unsigned int, boost::hash<VID>, std::equal_to<VID> >]'
    /usr/local/include/boost/unordered/detail/table.hpp:784:   instantiated from 'boost::unordered::iterator_detail::iterator<typename Types::node> boost::unordered::detail::table<Types>::find_node(const typename Types::key_type&) const [with Types = boost::unordered::detail::map<std::allocator<std::pair<const VID, unsigned int> >, VID, unsigned int, boost::hash<VID>, std::equal_to<VID> >]'
    /usr/local/include/boost/unordered/unordered_map.hpp:1212:   instantiated from 'typename boost::unordered::unordered_map<K, T, H, P, A>::iterator boost::unordered::unordered_map<K, T, H, P, A>::find(const K&) [with K = VID, T = unsigned int, H = boost::hash<VID>, P = std::equal_to<VID>, A = std::allocator<std::pair<const VID, unsigned int> >]'
    char_skill.cpp:3620:   instantiated from here
    /usr/local/include/boost/functional/hash/extensions.hpp:262: error: no matching function for call to 'hash_value(const VID&)'
    Makefile:129: recipe for target 'OBJDIR/char_skill.o' failed
    gmake: *** [OBJDIR/char_skill.o] Error 1
    gmake: *** Waiting for unfinished jobs....
    db.cpp: In member function 'void DBManager::Query(const char*, ...)':
    db.cpp:93: warning: comparison between signed and unsigned integer expressions
    db.cpp: In member function 'SQLMsg* DBManager::DirectQuery(const char*, ...)':
    db.cpp:105: warning: comparison between signed and unsigned integer expressions
    cmd_general.cpp: In function 'void do_cards(CHARACTER*, const char*, int, int)':
    cmd_general.cpp:2503: warning: 'safemode' may be used uninitialized in this function
    cmd_general.cpp:2517: warning: 'destroy_index' may be used uninitialized in this function
    cmd_general.cpp:2525: warning: 'accpet_index' may be used uninitialized in this function
    cmd_general.cpp:2533: warning: 'restore_index' may be used uninitialized in this function
    char_item.cpp: In member function 'void CHARACTER::BuffOnAttr_ValueChange(BYTE, BYTE, BYTE)':
    char_item.cpp:6626: warning: 'pBuff' may be used uninitialized in this function
    cmd_gm.cpp: In function 'void do_costume_bonus_transfer(CHARACTER*, const char*, int, int)':
    cmd_gm.cpp:2856: warning: 'cell2' may be used uninitialized in this function
    root@lonekek-dev:/usr/src/metin2source/game/src #

     

     

    What should I do ? I'm beginner. Thank you !
     

  9. Hi !

    Can someone explain me in detail how to do that bind_ip and exactly where? I'm beginner and I need a tutorial step by step.

    I need to know this because I have this problem: problem with connect to my server from outside IP. In my network I can connect to world server without any problems but if I want to connect to server from outside IP I can type my password, choose character and when I choose him, client disconnect me to login menu.

     

    Thank you !

  10. Hi !

    I made a server metin2 with virtualbox on ip(without hamachi) with maxmi 4.1 serverfile but my friend can not enter the game, I mean he can log in but when he wants to enter any character it gives him back to the login window. I tried this solution https://metin2dev.org/board/index.php?/topic/7271-how-touse-virtual-box-as-homeroot/ but it doesn't work at all. I use the client from serverfile and I've tried several serverfile and clients but I had the same problem. What should I do ?

    Below I'll put some pictures with my virtualbox, portmap and router(port forwarding) settings when my server is on.

    Virtualbox settings: https://metin2.download/picture/r3F9504x09DVmF8K988YXgTtGTP6KMUj/.gif , https://metin2.download/picture/r3F9504x09DVmF8K988YXgTtGTP6KMUj/.gif 

    Portmap settings: https://metin2.download/picture/r3F9504x09DVmF8K988YXgTtGTP6KMUj/.gif

    Router(port forwarding): https://metin2.download/picture/r3F9504x09DVmF8K988YXgTtGTP6KMUj/.gif

     

    Below I'll put my root files, serverip.cfg and serverismi.cfg(they work only together), that are already configured to my dns(i only need to change it from serverip.cfg). I use a free dns site for my ip.

    Download link: 

    This is the hidden content, please

    If you want the client I already have it on mega.nz, just message me.

     

    Can somebody help me ?

     

     

    • Metin2 Dev 1
    • Eyes 1
    • Love 2
  11. Hi !

    I made a server on VirtualBox with Maxmi 4.1 serverfile and I can connect to server and enter to game but my friends can't. I mean, they can log in but when they select a character, it gives back to log in window. I have opened portmap, I use the serverfile client(friends too) and the serverinfo.py is set properly. 

    On the internet I saw that I should use launcher from surakopf to solve this problem, but it did not work, I think it works only on older clients.

    Can somebody help me ? (sorry for my english) PS: I'm beginner.

  12. Hi !

    I made a server on VirtualBox with Maxmi 4.1 serverfile and I can connect to server and enter to game but my friends can't. I mean, they can log in but when they select a character, it gives back to log in window. I have opened portmap, I use the serverfile client(friends too) and the serverinfo.py is set properly. 

    On the internet I saw that I should use launcher from surakopf to solve this problem, but it did not work, I think it works only on older clients.

    Can somebody help me ? (sorry for my english) PS: I'm beginner.

  13. I tried with Pasha37 Windows Server Files 1.2 but I didn't find any db or any ch file that contain a line like 

    PLAYER_SQL: localhost metin2 password player

    :(

     

    and i receive the same error.

     

    Let me note that I did not open any port/s..

     

     

    EDIT: I found in D:Server_MT2SFWindowsdb and file "conf.txt" which contain these lines:

    SQL_ACCOUNT = "localhost account mt2 yolo 0"
    SQL_PLAYER = "localhost player mt2 yolo 0"
    SQL_COMMON = "localhost common mt2 yolo 0"
    SQL_HOTBACKUP = "localhost hotbackup mt2 yolo 0"

    What should I do ?
     

     

  14. I receive this error when I try to make a metin2 server with all serverfiles.

    Quote

    retrying in 5 secondsmysql_real_connect: Access denied for user 'mt2'@'localhost' (using password: YES)

     

     

    I'm beginner !

     

    I want to make a metin2 server only for me :) on my pc.

    If you want to help me add skype: cojocaru_dragos2010 or pm me or leave a reply with instructions.. :)

     

    Thanks in advance !

     
    • Love 2
×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.