Jump to content

EAkar

Inactive Member
  • Posts

    62
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by EAkar

  1. On 30.05.2021 at 14:51, Bizzy said:

    https://metin2.download/picture/r3F9504x09DVmF8K988YXgTtGTP6KMUj/.gif  sistem için teşekkürler ama introselect'e seviyeyi nasıl ekleyebileceğimi ve bunu herkese nasıl yapabileceğimi söyleyebilir misin  https://metin2.download/picture/r3F9504x09DVmF8K988YXgTtGTP6KMUj/.gif

    import app
    import net
    import chr
    import event
    import systemSetting
    import ui
    import grp
    import snd
    import math
    import wndMgr
    import uiCommon
    import uiTarget
    import constInfo
    import musicInfo
    import uiTaskBar
    import uiToolTip
    import localeInfo
    import uiCharacter
    import uiInventory
    import uiPlayerGauge
    import consoleModule
    import networkModule
    import uiAffectShower
    import uiScriptLocale
    import uiMapNameShower
    import interfaceModule
    import playerSettingModule
    
    LEAVE_BUTTON_FOR_POTAL = FALSE
    NOT_NEED_DELETE_CODE = FALSE
    ENABLE_ENGNUM_DELETE_CODE = FALSE
    
    if localeInfo.IsJAPAN():
    	NOT_NEED_DELETE_CODE = TRUE
    elif localeInfo.IsHONGKONG():
    	ENABLE_ENGNUM_DELETE_CODE = TRUE
    elif localeInfo.IsNEWCIBN() or localeInfo.IsCIBN10():
    	ENABLE_ENGNUM_DELETE_CODE = TRUE
    elif localeInfo.IsEUROPE():
    	ENABLE_ENGNUM_DELETE_CODE = TRUE
    
    class SelectCharacterWindow(ui.Window):
    	SLOT_COUNT = 5
    	CHARACTER_TYPE_COUNT = 5
    	
    	EMPIRE_NAME = {
    		net.EMPIRE_A : localeInfo.EMPIRE_A,
    		net.EMPIRE_B : localeInfo.EMPIRE_B,
    		net.EMPIRE_C : localeInfo.EMPIRE_C
    	}
    	
    	RACE_NAME = {
    					playerSettingModule.RACE_WARRIOR_M : localeInfo.JOB_WARRIOR,
    					playerSettingModule.RACE_WARRIOR_W : localeInfo.JOB_WARRIOR,
    					playerSettingModule.RACE_ASSASSIN_M : localeInfo.JOB_ASSASSIN,
    					playerSettingModule.RACE_ASSASSIN_W	: localeInfo.JOB_ASSASSIN,
    					playerSettingModule.RACE_SURA_M : localeInfo.JOB_SURA,
    					playerSettingModule.RACE_SURA_W : localeInfo.JOB_SURA,
    					playerSettingModule.RACE_SHAMAN_M : localeInfo.JOB_SHAMAN,
    					playerSettingModule.RACE_SHAMAN_W : localeInfo.JOB_SHAMAN,
    					playerSettingModule.RACE_WOLFMAN_M : localeInfo.JOB_WOLFMAN,
    	}
    	
    	DESCRIPTION_FILE_NAME =	{
    								playerSettingModule.RACE_WARRIOR_M : uiScriptLocale.JOBDESC_WARRIOR_PATH,
    								playerSettingModule.RACE_WARRIOR_W : uiScriptLocale.JOBDESC_WARRIOR_PATH,
    								playerSettingModule.RACE_ASSASSIN_M : uiScriptLocale.JOBDESC_ASSASSIN_PATH,
    								playerSettingModule.RACE_ASSASSIN_W	: uiScriptLocale.JOBDESC_ASSASSIN_PATH,
    								playerSettingModule.RACE_SURA_M : uiScriptLocale.JOBDESC_SURA_PATH,
    								playerSettingModule.RACE_SURA_W : uiScriptLocale.JOBDESC_SURA_PATH,
    								playerSettingModule.RACE_SHAMAN_M : uiScriptLocale.JOBDESC_SHAMAN_PATH,
    								playerSettingModule.RACE_SHAMAN_W : uiScriptLocale.JOBDESC_SHAMAN_PATH,
    								playerSettingModule.RACE_WOLFMAN_M : uiScriptLocale.JOBDESC_WOLFMAN_PATH,
    	}
    	
    	DESCRIPTION_FILE_NAME_LIMIT =	{
    								playerSettingModule.RACE_WARRIOR_M : 1,
    								playerSettingModule.RACE_WARRIOR_W : 1,
    								playerSettingModule.RACE_ASSASSIN_M : 1,
    								playerSettingModule.RACE_ASSASSIN_W	: 1,
    								playerSettingModule.RACE_SURA_M : 1,
    								playerSettingModule.RACE_SURA_W : 1,
    								playerSettingModule.RACE_SHAMAN_M : 0,
    								playerSettingModule.RACE_SHAMAN_W : 0,
    								playerSettingModule.RACE_WOLFMAN_M : 0,
    	}
    	
    	FACE_IMAGE_DICT_1 = {
    							playerSettingModule.RACE_WARRIOR_M : "d:/ymir work/ui/intro/public_intro/face/face_warrior_m_01.sub",
    							playerSettingModule.RACE_WARRIOR_W : "d:/ymir work/ui/intro/public_intro/face/face_warrior_w_01.sub",
    							playerSettingModule.RACE_ASSASSIN_M : "d:/ymir work/ui/intro/public_intro/face/face_assassin_m_01.sub",
    							playerSettingModule.RACE_ASSASSIN_W	: "d:/ymir work/ui/intro/public_intro/face/face_assassin_w_01.sub",
    							playerSettingModule.RACE_SURA_M : "d:/ymir work/ui/intro/public_intro/face/face_sura_m_01.sub",
    							playerSettingModule.RACE_SURA_W : "d:/ymir work/ui/intro/public_intro/face/face_sura_w_01.sub",
    							playerSettingModule.RACE_SHAMAN_M : "d:/ymir work/ui/intro/public_intro/face/face_shaman_m_01.sub",
    							playerSettingModule.RACE_SHAMAN_W : "d:/ymir work/ui/intro/public_intro/face/face_shaman_w_01.sub",
    							playerSettingModule.RACE_WOLFMAN_M : "d:/ymir work/ui/intro/public_intro/face/face_wolfman_m_01.sub",
    						}
    	
    	FACE_IMAGE_DICT_2 = {
    							playerSettingModule.RACE_WARRIOR_M : "d:/ymir work/ui/intro/public_intro/face/face_warrior_m_02.sub",
    							playerSettingModule.RACE_WARRIOR_W : "d:/ymir work/ui/intro/public_intro/face/face_warrior_w_02.sub",
    							playerSettingModule.RACE_ASSASSIN_M : "d:/ymir work/ui/intro/public_intro/face/face_assassin_m_02.sub",
    							playerSettingModule.RACE_ASSASSIN_W	: "d:/ymir work/ui/intro/public_intro/face/face_assassin_w_02.sub",
    							playerSettingModule.RACE_SURA_M : "d:/ymir work/ui/intro/public_intro/face/face_sura_m_02.sub",
    							playerSettingModule.RACE_SURA_W : "d:/ymir work/ui/intro/public_intro/face/face_sura_w_02.sub",
    							playerSettingModule.RACE_SHAMAN_M : "d:/ymir work/ui/intro/public_intro/face/face_shaman_m_02.sub",
    							playerSettingModule.RACE_SHAMAN_W : "d:/ymir work/ui/intro/public_intro/face/face_shaman_w_02.sub",
    							playerSettingModule.RACE_WOLFMAN_M : "d:/ymir work/ui/intro/public_intro/face/face_wolfman_m_02.sub",
    						}
    	
    	FACE_IMAGE_DICT_3 = {
    						playerSettingModule.RACE_WARRIOR_M : "icon/face/warrior_m.tga",
    						playerSettingModule.RACE_WARRIOR_W : "icon/face/warrior_w.tga",
    						playerSettingModule.RACE_ASSASSIN_M : "icon/face/assassin_m.tga",
    						playerSettingModule.RACE_ASSASSIN_W	: "icon/face/assassin_w.tga",
    						playerSettingModule.RACE_SURA_M : "icon/face/sura_m.tga",
    						playerSettingModule.RACE_SURA_W : "icon/face/sura_w.tga",
    						playerSettingModule.RACE_SHAMAN_M : "icon/face/shaman_m.tga",
    						playerSettingModule.RACE_SHAMAN_W : "icon/face/shaman_w.tga",
    						playerSettingModule.RACE_WOLFMAN_M : "icon/face/wolf_m.tga",
    					}
    	
    	class DescriptionBox(ui.Window):
    		def __init__(self):
    			ui.Window.__init__(self)
    			self.descIndex = 0
    		def __del__(self):
    			ui.Window.__del__(self)
    		def SetIndex(self, index):
    			self.descIndex = index
    		def OnRender(self):
    			event.RenderEventSet(self.descIndex)
    
    	class CharacterRenderer(ui.Window):
    		def OnRender(self):
    			grp.ClearDepthBuffer()
    			grp.SetGameRenderState()
    			grp.PushState()
    			grp.SetOmniLight()
    			
    			screenWidth = wndMgr.GetScreenWidth()
    			screenHeight = wndMgr.GetScreenHeight()
    			newScreenWidth = float(screenWidth - 270)
    			newScreenHeight = float(screenHeight)
    
    			if screenHeight<601:
    				grp.SetViewport(250.0/screenWidth, 0.0, newScreenWidth/screenWidth, newScreenHeight/screenHeight)
    			elif screenHeight>601 and screenHeight<801:
    				grp.SetViewport(255.15/screenWidth, 0.0, newScreenWidth/screenWidth, newScreenHeight/screenHeight)
    			elif screenHeight>801 and screenHeight<1200:
    				grp.SetViewport(270.15/screenWidth, 0.0, newScreenWidth/screenWidth, newScreenHeight/screenHeight)
    			else:
    				grp.SetViewport(270.0/screenWidth, 0.0, newScreenWidth/screenWidth, newScreenHeight/screenHeight)
    	
    			app.SetCenterPosition(0.0, 0.0, 0.0)
    			app.SetCamera(1795.0, 15.0, 180.0, 120.0)
    			grp.SetPerspective(10.0, newScreenWidth/newScreenHeight, 1000.0, 3000.0)
    
    			(x, y) = app.GetCursorPosition()
    			grp.SetCursorPosition(x, y)
    			chr.Deform()
    			chr.Render()
    			grp.RestoreViewport()
    			grp.PopState()
    			grp.SetInterfaceRenderState()
    
    	def __init__(self, stream):
    		ui.Window.__init__(self)
    		net.SetPhaseWindow(net.PHASE_WINDOW_SELECT, self)
    		self.stream=stream
    		self.slot = self.stream.GetCharacterSlot()
    		
    		self.openLoadingFlag = FALSE
    		self.startIndex = -1
    		self.startReservingTime = 0
    		
    		self.curNameAlpha = []
    		self.destNameAlpha = []
    		for i in xrange(self.CHARACTER_TYPE_COUNT):
    			self.curNameAlpha.append(0.0)
    			self.destNameAlpha.append(0.0)
    		
    		self.curGauge = [0.0, 0.0, 0.0, 0.0]
    		self.destGauge = [0.0, 0.0, 0.0, 0.0]
    		
    		self.dlgBoard = 0
    		self.changeNameFlag = FALSE
    		self.nameInputBoard = None
    		self.sendedChangeNamePacket = FALSE
    
    		self.startIndex = -1
    		self.isLoad = 0
    
    		if app.ENABLE_CONQUEROR_LEVEL:
    			self.toolTipConquerorInfoButton = None
    
    	def __del__(self):
    		ui.Window.__del__(self)
    		net.SetPhaseWindow(net.PHASE_WINDOW_SELECT, 0)
    
    	def Open(self):
    		if not self.__LoadBoardDialog("UIScript/SelectCharacterWindow.py"):
    			dbg.TraceError("SelectCharacterWindow.Open - __LoadScript Error")
    			return
    		
    		if not self.__LoadQuestionDialog("uiscript/questiondialog.py"):
    			return
    		
    		playerSettingModule.LoadGameData("INIT")
    		self.InitCharacterBoard()
    		self.btnStart.Enable()
    		self.btnCreate.Enable()
    		self.btnDelete.Enable()
    		self.btnExit.Enable()
    		self.dlgBoard.Show()
    		self.SetWindowName("SelectCharacterWindow")
    		self.Show()
    		
    		if self.slot >= 0:
    			self.SelectSlot(self.slot)
    		
    		if musicInfo.selectMusic != "":
    			snd.SetMusicVolume(systemSetting.GetMusicVolume())
    			snd.FadeInMusic("BGM/"+musicInfo.selectMusic)
    		
    		app.SetCenterPosition(0.0, 0.0, 0.0)
    		app.SetCamera(1550.0, 15.0, 180.0, 95.0)
    		
    		self.isLoad=1
    		self.Refresh()
    		
    		if self.stream.isAutoSelect:
    			chrSlot=self.stream.GetCharacterSlot()
    			self.SelectSlot(chrSlot)
    			self.StartGame()
    			
    		if self.__AreAllSlotEmpty():
    			self.stream.SetReselectEmpirePhase()
    
    		self.my_id.SetText(net.GetLoginID())
    		self.SetEmpire(net.GetEmpireID())
    		app.ShowCursor()
    
    		if app.ENABLE_CONQUEROR_LEVEL:
    			self.btnSungmaPrev.Enable()
    			self.btnSungmaNext.Enable()
    
    	def Close(self):
    		if musicInfo.selectMusic != "":
    			snd.FadeOutMusic("BGM/"+musicInfo.selectMusic)
    		
    		self.stream.popupWindow.Close()
    		if self.dlgBoard:
    			self.dlgBoard.ClearDictionary()
    		
    		self.my_id = None
    		self.textBoard = None
    		self.empireName = None
    		self.EmpireFlagA = None
    		self.EmpireFlagB = None
    		self.EmpireFlagC = None
    		self.dlgBoard = None
    		self.btnStart = None
    		self.btnCreate = None
    		self.btnDelete = None
    		self.btnExit = None
    		self.backGroundImg1 = None
    		self.backGroundImg2 = None
    		self.backGroundImg3 = None
    		self.dlgQuestion.ClearDictionary()
    		self.dlgQuestion = None
    		self.dlgQuestionText = None
    		self.dlgQuestionAcceptButton = None
    		self.dlgQuestionCancelButton = None
    		self.privateInputBoard = None
    		self.nameInputBoard = None
    
    		if app.ENABLE_CONQUEROR_LEVEL:
    			self.toolTipConquerorInfoButton = None
    			self.btnSungmaPrev = None
    			self.btnSungmaNext = None
    
    		chr.DeleteInstance(self.slot)
    		self.Hide()
    		self.KillFocus()
    		app.HideCursor()
    		event.Destroy()
    
    	def SetEmpire(self, id):
    		self.empireName.SetText(self.EMPIRE_NAME.get(id, ""))
    		if id == 1:
    			self.empireName.SetFontColor(1.0, 0, 0)
    			self.EmpireFlagA.Show()
    			self.EmpireFlagB.Hide()
    			self.EmpireFlagC.Hide()
    			self.BackGround = self.backGroundImg1
    			self.backGroundImg1.Show()
    			self.backGroundImg2.Hide()
    			self.backGroundImg3.Hide()
    			
    			self.chrRenderer = self.CharacterRenderer()
    			self.chrRenderer.SetParent(self.backGroundImg1)
    			self.chrRenderer.Show()
    		elif id == 2:
    			self.empireName.SetFontColor(1.0, 1.0, 0.0)
    			self.EmpireFlagA.Hide()
    			self.EmpireFlagB.Show()
    			self.EmpireFlagC.Hide()
    			self.BackGround = self.backGroundImg2
    			self.backGroundImg1.Hide()
    			self.backGroundImg2.Show()
    			self.backGroundImg3.Hide()
    			
    			self.chrRenderer = self.CharacterRenderer()
    			self.chrRenderer.SetParent(self.backGroundImg2)
    			self.chrRenderer.Show()
    		elif id == 3:
    			self.empireName.SetFontColor(0.0, 0, 1.0)
    			self.EmpireFlagA.Hide()
    			self.EmpireFlagB.Hide()
    			self.EmpireFlagC.Show()
    			self.BackGround = self.backGroundImg3
    			self.backGroundImg1.Hide()
    			self.backGroundImg2.Hide()
    			self.backGroundImg3.Show()
    			
    			self.chrRenderer = self.CharacterRenderer()
    			self.chrRenderer.SetParent(self.backGroundImg3)
    			self.chrRenderer.Show()
    
    	def Refresh(self):
    		if not self.isLoad:
    			return
    		
    		for i in xrange(self.SLOT_COUNT):
    			id = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_ID)
    			race = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_RACE)
    			form = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_FORM)
    			name = net.GetAccountCharacterSlotDataString(i, net.ACCOUNT_CHARACTER_SLOT_NAME)
    			hair = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_HAIR)
    			sash = 0
    			if app.ENABLE_SASH_SYSTEM:
    				sash = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_SASH)
    
    			if app.ENABLE_CONQUEROR_LEVEL:
    				conquerorlevel = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_CONQUEROR_LEVEL)
    
    			if id != 0:
    				self.MakeCharacter(i, id, name, race, form, hair, sash)
    				self.SelectSlot(i)
    				break
    
    		self.CharacterSlot_0.Hide()
    		self.CharacterFace_0.Hide()
    		self.CharacterSlot_0_Lv.Hide()
    		self.CharacterSlot_0_Name.Hide()
    		self.CharacterSlot_1.Hide()
    		self.CharacterFace_1.Hide()
    		self.CharacterSlot_1_Lv.Hide()
    		self.CharacterSlot_1_Name.Hide()
    		self.CharacterSlot_2.Hide()
    		self.CharacterFace_2.Hide()
    		self.CharacterSlot_2_Lv.Hide()
    		self.CharacterSlot_2_Name.Hide()
    		self.CharacterSlot_3.Hide()
    		self.CharacterFace_3.Hide()
    		self.CharacterSlot_3_Lv.Hide()
    		self.CharacterSlot_3_Name.Hide()
    		self.CharacterSlot_4.Hide()
    		self.CharacterFace_4.Hide()
    		self.CharacterSlot_4_Lv.Hide()
    		self.CharacterSlot_4_Name.Hide()
    		for i in xrange(self.SLOT_COUNT):
    			id = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_ID)
    			race = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_RACE)
    			name = net.GetAccountCharacterSlotDataString(i, net.ACCOUNT_CHARACTER_SLOT_NAME)
    			level = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_LEVEL)
    			if app.ENABLE_CONQUEROR_LEVEL:
    				conquerorlevel=net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_CONQUEROR_LEVEL)
    			if id != 0:
    				if i == 0:
    					self.CharacterFace_0.LoadImage(self.FACE_IMAGE_DICT_2[race])
    					self.CharacterFace_0.Show()
    					self.CharacterSlot_0.Show()
    					self.CharacterSlot_0_Name.SetText(name)
    					self.CharacterSlot_0_Name.Show()
    
    					if app.ENABLE_CONQUEROR_LEVEL:
    						if conquerorlevel:
    							self.CharacterSlot_0_Lv.SetText(localeInfo.INTRO_SELECT_LEVEL % (conquerorlevel))
    							self.CharacterSlot_0_Lv.SetPackedFontColor(0xFFBFD9FF)
    							self.CharacterSlot_0_Lv.Show()
    						else:
    							self.CharacterSlot_0_Lv.SetText(localeInfo.INTRO_SELECT_LEVEL % (level))
    							self.CharacterSlot_0_Lv.SetFontColor(30, 72, 168)
    							self.CharacterSlot_0_Lv.Show()
    					else:
    						self.CharacterSlot_0_Lv.SetText(localeInfo.INTRO_SELECT_LEVEL % (level))
    						self.CharacterSlot_0_Lv.SetFontColor(30, 72, 168)
    						self.CharacterSlot_0_Lv.Show()
    
    				elif i == 1:
    					self.CharacterFace_1.LoadImage(self.FACE_IMAGE_DICT_2[race])
    					self.CharacterFace_1.Show()
    					self.CharacterSlot_1.Show()
    					self.CharacterSlot_1_Name.SetText(name)
    					self.CharacterSlot_1_Name.Show()
    					if app.ENABLE_CONQUEROR_LEVEL:
    						if conquerorlevel:
    							self.CharacterSlot_1_Lv.SetText(localeInfo.INTRO_SELECT_LEVEL % (conquerorlevel))
    							self.CharacterSlot_1_Lv.SetPackedFontColor(0xFFBFD9FF)
    							self.CharacterSlot_1_Lv.Show()
    						else:
    							self.CharacterSlot_1_Lv.SetText(localeInfo.INTRO_SELECT_LEVEL % (level))
    							self.CharacterSlot_1_Lv.SetFontColor(30, 72, 168)
    							self.CharacterSlot_1_Lv.Show()
    					else:
    						self.CharacterSlot_1_Lv.SetText(localeInfo.INTRO_SELECT_LEVEL % (level))
    						self.CharacterSlot_1_Lv.SetFontColor(30, 72, 168)
    						self.CharacterSlot_1_Lv.Show()
    
    				elif i == 2:
    					self.CharacterFace_2.LoadImage(self.FACE_IMAGE_DICT_2[race])
    					self.CharacterFace_2.Show()
    					self.CharacterSlot_2.Show()
    					self.CharacterSlot_2_Name.SetText(name)
    					self.CharacterSlot_2_Name.Show()
    					if app.ENABLE_CONQUEROR_LEVEL:
    						if conquerorlevel:
    							self.CharacterSlot_2_Lv.SetText(localeInfo.INTRO_SELECT_LEVEL % (conquerorlevel))
    							self.CharacterSlot_2_Lv.SetPackedFontColor(0xFFBFD9FF)
    							self.CharacterSlot_2_Lv.Show()
    						else:
    							self.CharacterSlot_2_Lv.SetText(localeInfo.INTRO_SELECT_LEVEL % (level))
    							self.CharacterSlot_2_Lv.SetFontColor(30, 72, 168)
    							self.CharacterSlot_2_Lv.Show()
    					else:
    						self.CharacterSlot_2_Lv.SetText(localeInfo.INTRO_SELECT_LEVEL % (level))
    						self.CharacterSlot_2_Lv.SetFontColor(30, 72, 168)
    						self.CharacterSlot_2_Lv.Show()
    
    				elif i == 3:
    					self.CharacterFace_3.LoadImage(self.FACE_IMAGE_DICT_2[race])
    					self.CharacterFace_3.Show()
    					self.CharacterSlot_3.Show()
    					self.CharacterSlot_3_Name.SetText(name)
    					self.CharacterSlot_3_Name.Show()
    					if app.ENABLE_CONQUEROR_LEVEL:
    						if conquerorlevel:
    							self.CharacterSlot_3_Lv.SetText(localeInfo.INTRO_SELECT_LEVEL % (conquerorlevel))
    							self.CharacterSlot_3_Lv.SetPackedFontColor(0xFFBFD9FF)
    							self.CharacterSlot_3_Lv.Show()
    						else:
    							self.CharacterSlot_3_Lv.SetText(localeInfo.INTRO_SELECT_LEVEL % (level))
    							self.CharacterSlot_3_Lv.SetFontColor(30, 72, 168)
    							self.CharacterSlot_3_Lv.Show()
    					else:
    						self.CharacterSlot_3_Lv.SetText(localeInfo.INTRO_SELECT_LEVEL % (level))
    						self.CharacterSlot_3_Lv.SetFontColor(30, 72, 168)
    						self.CharacterSlot_3_Lv.Show()
    
    				elif i == 4:
    					self.CharacterFace_4.LoadImage(self.FACE_IMAGE_DICT_2[race])
    					self.CharacterFace_4.Show()
    					self.CharacterSlot_4.Show()
    					self.CharacterSlot_4_Name.SetText(name)
    					self.CharacterSlot_4_Name.Show()
    					if app.ENABLE_CONQUEROR_LEVEL:
    						if conquerorlevel:
    							self.CharacterSlot_4_Lv.SetText(localeInfo.INTRO_SELECT_LEVEL % (conquerorlevel))
    							self.CharacterSlot_4_Lv.SetPackedFontColor(0xFFBFD9FF)
    							self.CharacterSlot_4_Lv.Show()
    						else:
    							self.CharacterSlot_4_Lv.SetText(localeInfo.INTRO_SELECT_LEVEL % (level))
    							self.CharacterSlot_4_Lv.SetFontColor(30, 72, 168)
    							self.CharacterSlot_4_Lv.Show()
    					else:
    						self.CharacterSlot_4_Lv.SetText(localeInfo.INTRO_SELECT_LEVEL % (level))
    						self.CharacterSlot_4_Lv.SetFontColor(30, 72, 168)
    						self.CharacterSlot_4_Lv.Show()
    
    	def GetCharacterSlotID(self, slotIndex):
    		return net.GetAccountCharacterSlotDataInteger(slotIndex, net.ACCOUNT_CHARACTER_SLOT_ID)
    
    	def __LoadQuestionDialog(self, fileName):
    		self.dlgQuestion = ui.ScriptWindow()
    
    		try:
    			pyScrLoader = ui.PythonScriptLoader()
    			pyScrLoader.LoadScriptFile(self.dlgQuestion, fileName)
    		except:
    			import exception
    			exception.Abort("SelectCharacterWindow.LoadQuestionDialog.LoadScript")
    
    		try:
    			GetObject=self.dlgQuestion.GetChild
    			self.dlgQuestionText=GetObject("message")
    			self.dlgQuestionAcceptButton=GetObject("accept")
    			self.dlgQuestionCancelButton=GetObject("cancel")
    		except:
    			import exception
    			exception.Abort("SelectCharacterWindow.LoadQuestionDialog.BindObject")
    
    		self.dlgQuestionText.SetText(localeInfo.SELECT_DO_YOU_DELETE_REALLY)
    		self.dlgQuestionAcceptButton.SetEvent(ui.__mem_func__(self.RequestDeleteCharacter))
    		self.dlgQuestionCancelButton.SetEvent(ui.__mem_func__(self.dlgQuestion.Hide))
    		return 1
    
    	def __LoadBoardDialog(self, fileName):
    		self.dlgBoard = ui.ScriptWindow()
    		try:
    			pyScrLoader = ui.PythonScriptLoader()
    			pyScrLoader.LoadScriptFile(self.dlgBoard, fileName)
    		except:
    			import exception
    			exception.Abort("SelectCharacterWindow.LoadBoardDialog.LoadScript")
    		
    		try:
    			GetObject=self.dlgBoard.GetChild
    			self.backGroundImg1 = GetObject("BackGround")
    			self.backGroundImg2 = GetObject("BackGround2")
    			self.backGroundImg2.Hide()
    			self.backGroundImg3 = GetObject("BackGround3")
    			self.backGroundImg3.Hide()
    			
    			self.btnStart = GetObject("start_button")
    			self.btnCreate = GetObject("create_button")
    			self.btnDelete = GetObject("delete_button")
    			self.btnExit = GetObject("exit_button")
    			self.CharacterSlot_0 = GetObject("CharacterSlot_0")
    			self.CharacterFace_0 = GetObject("CharacterFace_0")
    			self.CharacterSlot_0_Lv = ui.TextLine()
    			self.CharacterSlot_0_Lv.SetParent(self.CharacterSlot_0)
    			self.CharacterSlot_0_Lv.SetPosition(108, 19)
    			self.CharacterSlot_0_Lv.SetHorizontalAlignLeft()
    			self.CharacterSlot_0_Lv.SetText("")
    			self.CharacterSlot_0_Name = ui.TextLine()
    			self.CharacterSlot_0_Name.SetParent(self.CharacterSlot_0)
    			self.CharacterSlot_0_Name.SetPosition(140, 3)
    			self.CharacterSlot_0_Name.SetHorizontalAlignRight()
    			self.CharacterSlot_0_Name.SetText("")
    			self.CharacterSlot_1 = GetObject("CharacterSlot_1")
    			self.CharacterFace_1 = GetObject("CharacterFace_1")
    			self.CharacterSlot_1_Lv = ui.TextLine()
    			self.CharacterSlot_1_Lv.SetParent(self.CharacterSlot_1)
    			self.CharacterSlot_1_Lv.SetPosition(108, 19)
    			self.CharacterSlot_1_Lv.SetHorizontalAlignLeft()
    			self.CharacterSlot_1_Lv.SetText("")
    			self.CharacterSlot_1_Name = ui.TextLine()
    			self.CharacterSlot_1_Name.SetParent(self.CharacterSlot_1)
    			self.CharacterSlot_1_Name.SetPosition(140, 3)
    			self.CharacterSlot_1_Name.SetHorizontalAlignRight()
    			self.CharacterSlot_1_Name.SetText("")
    			self.CharacterSlot_2 = GetObject("CharacterSlot_2")
    			self.CharacterFace_2 = GetObject("CharacterFace_2")
    			self.CharacterSlot_2_Lv = ui.TextLine()
    			self.CharacterSlot_2_Lv.SetParent(self.CharacterSlot_2)
    			self.CharacterSlot_2_Lv.SetPosition(108, 19)
    			self.CharacterSlot_2_Lv.SetHorizontalAlignLeft()
    			self.CharacterSlot_2_Lv.SetText("")
    			self.CharacterSlot_2_Name = ui.TextLine()
    			self.CharacterSlot_2_Name.SetParent(self.CharacterSlot_2)
    			self.CharacterSlot_2_Name.SetPosition(140, 3)
    			self.CharacterSlot_2_Name.SetHorizontalAlignRight()
    			self.CharacterSlot_2_Name.SetText("")
    			self.CharacterSlot_3 = GetObject("CharacterSlot_3")
    			self.CharacterFace_3 = GetObject("CharacterFace_3")
    			self.CharacterSlot_3_Lv = ui.TextLine()
    			self.CharacterSlot_3_Lv.SetParent(self.CharacterSlot_3)
    			self.CharacterSlot_3_Lv.SetPosition(108, 19)
    			self.CharacterSlot_3_Lv.SetHorizontalAlignLeft()
    			self.CharacterSlot_3_Lv.SetText("")
    			self.CharacterSlot_3_Name = ui.TextLine()
    			self.CharacterSlot_3_Name.SetParent(self.CharacterSlot_3)
    			self.CharacterSlot_3_Name.SetPosition(140, 3)
    			self.CharacterSlot_3_Name.SetHorizontalAlignRight()
    			self.CharacterSlot_3_Name.SetText("")
    			self.CharacterSlot_4 = GetObject("CharacterSlot_4")
    			self.CharacterFace_4 = GetObject("CharacterFace_4")
    			self.CharacterSlot_4_Lv = ui.TextLine()
    			self.CharacterSlot_4_Lv.SetParent(self.CharacterSlot_4)
    			self.CharacterSlot_4_Lv.SetPosition(108, 19)
    			self.CharacterSlot_4_Lv.SetHorizontalAlignLeft()
    			self.CharacterSlot_4_Lv.SetText("")
    			self.CharacterSlot_4_Name = ui.TextLine()
    			self.CharacterSlot_4_Name.SetParent(self.CharacterSlot_4)
    			self.CharacterSlot_4_Name.SetPosition(140, 3)
    			self.CharacterSlot_4_Name.SetHorizontalAlignRight()
    			self.CharacterSlot_4_Name.SetText("")
    			self.DiscFace = GetObject("DiscFace")
    			self.raceName = GetObject("raceName_Text")
    			
    			self.my_id = GetObject("my_id")
    			self.textBoard = GetObject("text_board")
    			self.textBoardPrev = GetObject("prev_button")
    			self.textBoardNext = GetObject("next_button")
    			
    			self.CharacterHTH = GetObject("hth_value")
    			self.CharacterINT = GetObject("int_value")
    			self.CharacterSTR = GetObject("str_value")
    			self.CharacterDEX = GetObject("dex_value")
    			
    			self.NameList = []
    			self.NameList.append(GetObject("name_warrior"))
    			self.NameList.append(GetObject("name_assassin"))
    			self.NameList.append(GetObject("name_sura"))
    			self.NameList.append(GetObject("name_shaman"))
    			self.NameList.append(GetObject("name_wolf"))
    			
    			self.GaugeList = []
    			self.GaugeList.append(GetObject("hth_gauge"))
    			self.GaugeList.append(GetObject("int_gauge"))
    			self.GaugeList.append(GetObject("str_gauge"))
    			self.GaugeList.append(GetObject("dex_gauge"))
    
    			if app.ENABLE_CONQUEROR_LEVEL:
    				self.toolTipConquerorInfoButton = uiToolTip.ToolTip()
    
    				self.btnSungmaPrev = GetObject("origin_stat_button")
    				self.btnSungmaNext = GetObject("sungma_stat_button")
    
    				self.HTH_IMG = GetObject("hth_img")
    				self.INT_IMG = GetObject("int_img")
    				self.STR_IMG = GetObject("str_img")
    				self.DEX_IMG = GetObject("dex_img")
    
    				self.HTH_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowHTHToolTip)
    				self.HTH_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideHTHToolTip)
    
    				self.INT_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowINTToolTip)
    				self.INT_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideINTToolTip)
    
    				self.STR_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowSTRToolTip)
    				self.STR_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideSTRToolTip)
    
    				self.DEX_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowDEXToolTip)
    				self.DEX_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideDEXToolTip)
    
    				self.SUNGMA_ST_IMG = GetObject("sungma_str_img")
    				self.SUNGMA_HP_IMG = GetObject("sungma_hp_img")
    				self.SUNGMA_MOVE_IMG = GetObject("sungma_move_img")
    				self.SUNGMA_INMUNE_IMG = GetObject("sungma_immune_img")
    
    				self.SUNGMA_ST_IMG.Hide()
    				self.SUNGMA_HP_IMG.Hide()
    				self.SUNGMA_MOVE_IMG.Hide()
    				self.SUNGMA_INMUNE_IMG.Hide()
    
    				self.SUNGMA_ST_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowSTToolTip)
    				self.SUNGMA_ST_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideSTToolTip)
    
    				self.SUNGMA_HP_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowHPToolTip)
    				self.SUNGMA_HP_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideHPToolTip)
    
    				self.SUNGMA_MOVE_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowMOVEToolTip)
    				self.SUNGMA_MOVE_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideMOVEToolTip)
    
    				self.SUNGMA_INMUNE_IMG.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowINMUNEToolTip)
    				self.SUNGMA_INMUNE_IMG.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideINMUNEToolTip)
    
    			self.empireName = GetObject("EmpireName")
    			self.EmpireFlagA = GetObject("EmpireFlag_A")
    			self.EmpireFlagB = GetObject("EmpireFlag_B")
    			self.EmpireFlagC = GetObject("EmpireFlag_C")
    		except:
    			import exception
    			exception.Abort("SelectCharacterWindow.LoadBoardDialog.BindObject")
    		
    		self.toolTip = uiToolTip.ToolTip()
    		self.toolTip.ClearToolTip()
    		
    		self.descIndex = 0
    		self.descriptionBox = self.DescriptionBox()
    		self.descriptionBox.Show()
    		self.textBoardPrev.SetEvent(ui.__mem_func__(self.PrevDescriptionPage))
    		self.textBoardNext.SetEvent(ui.__mem_func__(self.NextDescriptionPage))
    		GetObject("start_button").ShowToolTip = lambda arg=1: self.OverInButton(arg)
    		GetObject("start_button").HideToolTip = lambda arg=1: self.OverOutButton()
    		GetObject("exit_button").ShowToolTip = lambda arg=2: self.OverInButton(arg)
    		GetObject("exit_button").HideToolTip = lambda arg=2: self.OverOutButton()
    		GetObject("delete_button").ShowToolTip = lambda arg=3: self.OverInButton(arg)
    		GetObject("delete_button").HideToolTip = lambda arg=3: self.OverOutButton()
    		GetObject("create_button").ShowToolTip = lambda arg=4: self.OverInButton(arg)
    		GetObject("create_button").HideToolTip = lambda arg=4: self.OverOutButton()
    		GetObject("CharacterSlot_0").ShowToolTip = lambda arg=5: self.OverInButton(arg)
    		GetObject("CharacterSlot_0").HideToolTip = lambda arg=5: self.OverOutButton()
    		GetObject("CharacterSlot_1").ShowToolTip = lambda arg=6: self.OverInButton(arg)
    		GetObject("CharacterSlot_1").HideToolTip = lambda arg=6: self.OverOutButton()
    		GetObject("CharacterSlot_2").ShowToolTip = lambda arg=7: self.OverInButton(arg)
    		GetObject("CharacterSlot_2").HideToolTip = lambda arg=7: self.OverOutButton()
    		GetObject("CharacterSlot_3").ShowToolTip = lambda arg=8: self.OverInButton(arg)
    		GetObject("CharacterSlot_3").HideToolTip = lambda arg=8: self.OverOutButton()
    		GetObject("CharacterSlot_4").ShowToolTip = lambda arg=9: self.OverInButton(arg)
    		GetObject("CharacterSlot_4").HideToolTip = lambda arg=9: self.OverOutButton()
    		GetObject("prev_button").ShowToolTip = lambda arg=10: self.OverInButton(arg)
    		GetObject("prev_button").HideToolTip = lambda arg=10: self.OverOutButton()
    		GetObject("next_button").ShowToolTip = lambda arg=11: self.OverInButton(arg)
    		GetObject("next_button").HideToolTip = lambda arg=11: self.OverOutButton()
    
    		for name in self.NameList:
    			name.SetAlpha(0.0)
    
    		self.btnStart.SetEvent(ui.__mem_func__(self.StartGame))
    		self.btnCreate.SetEvent(ui.__mem_func__(self.CreateCharacter))
    		self.btnExit.SetEvent(ui.__mem_func__(self.ExitSelect))
    
    		self.CharacterSlot_0.SAFE_SetEvent(self.SelectSlot, 0)
    		self.CharacterSlot_1.SAFE_SetEvent(self.SelectSlot, 1)
    		self.CharacterSlot_2.SAFE_SetEvent(self.SelectSlot, 2)
    		self.CharacterSlot_3.SAFE_SetEvent(self.SelectSlot, 3)
    		self.CharacterSlot_4.SAFE_SetEvent(self.SelectSlot, 4)
    
    		if app.ENABLE_CONQUEROR_LEVEL:
    			self.btnSungmaPrev.SetEvent(ui.__mem_func__(self.SungmaPrev))
    			self.btnSungmaNext.SetEvent(ui.__mem_func__(self.SungmaNext))
    
    		if NOT_NEED_DELETE_CODE:
    			self.btnDelete.SetEvent(ui.__mem_func__(self.PopupDeleteQuestion))
    		else:
    			self.btnDelete.SetEvent(ui.__mem_func__(self.InputPrivateCode))
    		
    		self.chrRenderer = self.CharacterRenderer()
    		self.chrRenderer.SetParent(self.backGroundImg1)
    		self.chrRenderer.Show()
    		
    		return 1
    
    	if app.ENABLE_CONQUEROR_LEVEL:
    		def SungmaPrev(self):
    			self.SUNGMA_ST_IMG.Hide()
    			self.SUNGMA_HP_IMG.Hide()
    			self.SUNGMA_MOVE_IMG.Hide()
    			self.SUNGMA_INMUNE_IMG.Hide()
    
    			valueHTH=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_HTH)
    			valueINT=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_INT)
    			valueSTR=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_STR)
    			valueDEX=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_DEX)
    
    			self.CharacterHTH.SetText(str(valueHTH))
    			self.CharacterINT.SetText(str(valueINT))
    			self.CharacterSTR.SetText(str(valueSTR))
    			self.CharacterDEX.SetText(str(valueDEX))
    
    			self.destGauge = [0.0, 0.0, 0.0, 0.0]
    			statesSummary = 90
    			if statesSummary > 0.0:
    				self.destGauge =    [
    										float(valueHTH) / statesSummary,
    										float(valueINT) / statesSummary,
    										float(valueSTR) / statesSummary,
    										float(valueDEX) / statesSummary
    									]
    
    			for i in xrange(4):
    				self.curGauge[i] += (self.destGauge[i] - self.curGauge[i]) / 10.0
    				if abs(self.curGauge[i] - self.destGauge[i]) < 0.005:
    					self.curGauge[i] = self.destGauge[i]
    				self.GaugeList[i].SetPercentage(self.curGauge[i], 1.0)
    
    		def SungmaNext(self):
    			self.SUNGMA_ST_IMG.Show()
    			self.SUNGMA_HP_IMG.Show()
    			self.SUNGMA_MOVE_IMG.Show()
    			self.SUNGMA_INMUNE_IMG.Show()
    			
    			valueConquerorST=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_SUNGMA_ST)
    			valueConquerorHP=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_SUNGMA_HP)
    			valueConquerorMOVE=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_SUNGMA_MOVE)
    			valueConquerorINMUNE=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_SUNGMA_INMUNE)
    			
    			self.CharacterHTH.SetText(str(valueConquerorST))
    			self.CharacterINT.SetText(str(valueConquerorHP))
    			self.CharacterSTR.SetText(str(valueConquerorMOVE))
    			self.CharacterDEX.SetText(str(valueConquerorINMUNE))
    			
    			self.destGauge = [0.0, 0.0, 0.0, 0.0]
    			statesSummary = 90
    			if statesSummary > 0.0:
    				self.destGauge =	[
    										float(valueConquerorST) / statesSummary,
    										float(valueConquerorHP) / statesSummary,
    										float(valueConquerorMOVE) / statesSummary,
    										float(valueConquerorINMUNE) / statesSummary
    									]
    			for i in xrange(4):
    				self.curGauge[i] += (self.destGauge[i] - self.curGauge[i]) / 10.0
    				if abs(self.curGauge[i] - self.destGauge[i]) < 0.005:
    					self.curGauge[i] = self.destGauge[i]
    				self.GaugeList[i].SetPercentage(self.curGauge[i], 1.0)
    
    		def __ShowHTHToolTip(self):
    			self.toolTipConquerorInfoButton.ClearToolTip()
    			self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_IMG_CON)
    			self.toolTipConquerorInfoButton.AlignHorizonalCenter()
    			self.toolTipConquerorInfoButton.ShowToolTip()
    
    		def __HideHTHToolTip(self):
    			self.toolTipConquerorInfoButton.HideToolTip()
    
    		def __ShowINTToolTip(self):
    			self.toolTipConquerorInfoButton.ClearToolTip()
    			self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_IMG_INT)
    			self.toolTipConquerorInfoButton.AlignHorizonalCenter()
    			self.toolTipConquerorInfoButton.ShowToolTip()
    
    		def __HideINTToolTip(self):
    			self.toolTipConquerorInfoButton.HideToolTip()
    
    		def __ShowSTRToolTip(self):
    			self.toolTipConquerorInfoButton.ClearToolTip()
    			self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_IMG_STR)
    			self.toolTipConquerorInfoButton.AlignHorizonalCenter()
    			self.toolTipConquerorInfoButton.ShowToolTip()
    
    		def __HideSTRToolTip(self):
    			self.toolTipConquerorInfoButton.HideToolTip()
    
    		def __ShowDEXToolTip(self):
    			self.toolTipConquerorInfoButton.ClearToolTip()
    			self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_IMG_DEX)
    			self.toolTipConquerorInfoButton.AlignHorizonalCenter()
    			self.toolTipConquerorInfoButton.ShowToolTip()
    
    		def __HideDEXToolTip(self):
    			self.toolTipConquerorInfoButton.HideToolTip()
    
    		#Sungma
    		def __ShowSTToolTip(self):
    			self.toolTipConquerorInfoButton.ClearToolTip()
    			self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_SUNGMA_STR)
    			self.toolTipConquerorInfoButton.AlignHorizonalCenter()
    			self.toolTipConquerorInfoButton.ShowToolTip()
    
    		def __HideSTToolTip(self):
    			self.toolTipConquerorInfoButton.HideToolTip()
    
    		def __ShowHPToolTip(self):
    			self.toolTipConquerorInfoButton.ClearToolTip()
    			self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_SUNGMA_HP)
    			self.toolTipConquerorInfoButton.AlignHorizonalCenter()
    			self.toolTipConquerorInfoButton.ShowToolTip()
    
    		def __HideHPToolTip(self):
    			self.toolTipConquerorInfoButton.HideToolTip()
    
    		def __ShowMOVEToolTip(self):
    			self.toolTipConquerorInfoButton.ClearToolTip()
    			self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_SUNGMA_MOVE)
    			self.toolTipConquerorInfoButton.AlignHorizonalCenter()
    			self.toolTipConquerorInfoButton.ShowToolTip()
    
    		def __HideMOVEToolTip(self):
    			self.toolTipConquerorInfoButton.HideToolTip()
    
    		def __ShowINMUNEToolTip(self):
    			self.toolTipConquerorInfoButton.ClearToolTip()
    			self.toolTipConquerorInfoButton.AutoAppendTextLine(localeInfo.STAT_TOOLTIP_SUNGMA_IMMUNE)
    			self.toolTipConquerorInfoButton.AlignHorizonalCenter()
    			self.toolTipConquerorInfoButton.ShowToolTip()
    
    		def __HideINMUNEToolTip(self):
    			self.toolTipConquerorInfoButton.HideToolTip()
    
    	def MakeCharacter(self, index, id, name, race, form, hair, sash):
    		if 0 == id:
    			return
    		
    		chr.CreateInstance(index)
    		chr.SelectInstance(index)
    		chr.SetVirtualID(index)
    		chr.SetNameString(name)
    		chr.SetRace(race)
    		chr.SetArmor(form)
    		chr.SetHair(hair)
    		if app.ENABLE_SASH_SYSTEM:
    			chr.SetSash(sash)
    		chr.Refresh()
    		chr.SetMotionMode(chr.MOTION_MODE_GENERAL)
    		chr.SetLoopMotion(chr.MOTION_INTRO_WAIT)
    		chr.SetRotation(0.0)
    		
    		distance = 50.0
    		rotRadian = 82.0 * (math.pi*2) / 360.0
    		x = distance*math.sin(rotRadian) + distance*math.cos(rotRadian)
    		y = distance*math.cos(rotRadian) - distance*math.sin(rotRadian)
    		
    		chr.SetPixelPosition(int(x), int(y), 30)
    		self.DiscFace.LoadImage(self.FACE_IMAGE_DICT_3[race])
    		self.DiscFace.Show()
    		self.raceName.SetText(self.RACE_NAME[race])
    		self.raceName.Show()
    
    	def StartGame(self):
    		self.toolTip.Hide()
    		
    		if self.sendedChangeNamePacket:
    			return
    		
    		if self.changeNameFlag:
    			self.OpenChangeNameDialog()
    			return
    		
    		if -1 != self.startIndex:
    			return
    		
    		if musicInfo.selectMusic != "":
    			snd.FadeLimitOutMusic("BGM/"+musicInfo.selectMusic, systemSetting.GetMusicVolume()*0.05)
    		
    		self.btnStart.SetUp()
    		self.btnCreate.SetUp()
    		self.btnDelete.SetUp()
    		self.btnExit.SetUp()
    		
    		self.btnStart.Disable()
    		self.btnCreate.Disable()
    		self.btnDelete.Disable()
    		self.btnExit.Disable()
    		self.dlgQuestion.Hide()
    		
    		self.stream.SetCharacterSlot(self.slot)
    
    		if app.ENABLE_CONQUEROR_LEVEL:
    			self.btnSungmaNext.SetUp()
    			self.btnSungmaPrev.SetUp()
    			self.btnSungmaNext.Disable()
    			self.btnSungmaPrev.Disable()
    
    		self.startIndex = self.slot
    		self.startReservingTime = app.GetTime()
    		for i in xrange(self.SLOT_COUNT):
    			if FALSE == chr.HasInstance(i):
    				continue
    			
    			chr.SelectInstance(i)
    			if i == self.slot:
    				self.slot = self.slot
    				chr.PushOnceMotion(chr.MOTION_INTRO_SELECTED, 0.1)
    				continue
    			
    			chr.PushOnceMotion(chr.MOTION_INTRO_NOT_SELECTED, 0.1)
    
    	def OpenChangeNameDialog(self):
    		import uiCommon
    		nameInputBoard = uiCommon.InputDialogWithDescription()
    		nameInputBoard.SetTitle(localeInfo.SELECT_CHANGE_NAME_TITLE)
    		nameInputBoard.SetAcceptEvent(ui.__mem_func__(self.AcceptInputName))
    		nameInputBoard.SetCancelEvent(ui.__mem_func__(self.CancelInputName))
    		nameInputBoard.SetMaxLength(chr.PLAYER_NAME_MAX_LEN)
    		nameInputBoard.SetBoardWidth(200)
    		nameInputBoard.SetDescription(localeInfo.SELECT_INPUT_CHANGING_NAME)
    		nameInputBoard.Open()
    		nameInputBoard.slot = self.slot
    		self.nameInputBoard = nameInputBoard
    
    	def OnChangeName(self, id, name):
    		self.SelectSlot(id)
    		self.sendedChangeNamePacket = FALSE
    		self.PopupMessage(localeInfo.SELECT_CHANGED_NAME)
    
    	def AcceptInputName(self):
    		changeName = self.nameInputBoard.GetText()
    		if not changeName:
    			return
    
    		self.sendedChangeNamePacket = TRUE
    		net.SendChangeNamePacket(self.nameInputBoard.slot, changeName)
    		return self.CancelInputName()
    
    	def CancelInputName(self):
    		self.nameInputBoard.Close()
    		self.nameInputBoard = None
    		return TRUE
    
    	def OnCreateFailure(self, type):
    		self.sendedChangeNamePacket = FALSE
    		if 0 == type:
    			self.PopupMessage(localeInfo.SELECT_CHANGE_FAILURE_STRANGE_NAME)
    		elif 1 == type:
    			self.PopupMessage(localeInfo.SELECT_CHANGE_FAILURE_ALREADY_EXIST_NAME)
    		elif 100 == type:
    			self.PopupMessage(localeInfo.SELECT_CHANGE_FAILURE_STRANGE_INDEX)
    
    	def CreateCharacter(self):
    		self.toolTip.Hide()
    		for i in xrange(self.SLOT_COUNT):
    			id = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_ID)
    			if id == 0:
    				self.stream.SetCharacterSlot(i)
    				EMPIRE_MODE = 0
    				if EMPIRE_MODE:
    					if self.__AreAllSlotEmpty():
    						self.stream.SetReselectEmpirePhase()
    					else:
    						self.stream.SetCreateCharacterPhase()
    				else:
    					self.stream.SetCreateCharacterPhase()
    				
    				break
    
    	def __AreAllSlotEmpty(self):
    		for iSlot in xrange(self.SLOT_COUNT):
    			if 0 != net.GetAccountCharacterSlotDataInteger(iSlot, net.ACCOUNT_CHARACTER_SLOT_ID):
    				return 0
    		
    		return 1
    
    	def PopupDeleteQuestion(self):
    		id = self.GetCharacterSlotID(self.slot)
    		if 0 == id:
    			return
    
    		self.dlgQuestion.Show()
    		self.dlgQuestion.SetTop()
    
    	def RequestDeleteCharacter(self):
    		self.dlgQuestion.Hide()
    
    		id = self.GetCharacterSlotID(self.slot)
    		if 0 == id:
    			self.PopupMessage(localeInfo.SELECT_EMPTY_SLOT)
    			return
    
    		net.SendDestroyCharacterPacket(self.slot, "1234567")
    		self.PopupMessage(localeInfo.SELECT_DELEING)
    
    	def InputPrivateCode(self):
    		import uiCommon
    		privateInputBoard = uiCommon.InputDialogWithDescription()
    		privateInputBoard.SetTitle(localeInfo.INPUT_PRIVATE_CODE_DIALOG_TITLE)
    		privateInputBoard.SetAcceptEvent(ui.__mem_func__(self.AcceptInputPrivateCode))
    		privateInputBoard.SetCancelEvent(ui.__mem_func__(self.CancelInputPrivateCode))
    		
    		if ENABLE_ENGNUM_DELETE_CODE:
    			pass
    		else:
    			privateInputBoard.SetNumberMode()
    		
    		privateInputBoard.SetSecretMode()
    		privateInputBoard.SetMaxLength(7)
    		privateInputBoard.SetBoardWidth(250)
    		privateInputBoard.SetDescription(localeInfo.INPUT_PRIVATE_CODE_DIALOG_DESCRIPTION)
    		privateInputBoard.Open()
    		self.privateInputBoard = privateInputBoard
    
    	def AcceptInputPrivateCode(self):
    		privateCode = self.privateInputBoard.GetText()
    		if not privateCode:
    			return
    
    		id = self.GetCharacterSlotID(self.slot)
    		if 0 == id:
    			self.PopupMessage(localeInfo.SELECT_EMPTY_SLOT)
    			return
    
    		net.SendDestroyCharacterPacket(self.slot, privateCode)
    		self.PopupMessage(localeInfo.SELECT_DELEING)
    
    		self.CancelInputPrivateCode()
    		return TRUE
    
    	def CancelInputPrivateCode(self):
    		self.privateInputBoard = None
    		return TRUE
    
    	def OnDeleteSuccess(self, slot):
    		self.PopupMessage(localeInfo.SELECT_DELETED)
    		self.DeleteCharacter(slot)
    
    	def OnDeleteFailure(self):
    		self.PopupMessage(localeInfo.SELECT_CAN_NOT_DELETE)
    
    	def DeleteCharacter(self, index):
    		chr.DeleteInstance(index)
    		self.SelectSlot(self.slot)
    		self.Refresh()
    
    	def ExitSelect(self):
    		self.dlgQuestion.Hide()
    		if LEAVE_BUTTON_FOR_POTAL:
    			if app.loggined:
    				self.stream.SetPhaseWindow(0)
    			else:
    				self.stream.setloginphase()
    		else:
    			self.stream.SetLoginPhase()
    		
    		self.Hide()
    
    	def SelectSlot(self, index):
    		if index < 0:
    			return
    		
    		if index >= self.SLOT_COUNT:
    			return
    		
    		snd.PlaySound("sound/ui/click.wav")
    		chr.DeleteInstance(0)
    		chr.DeleteInstance(1)
    		chr.DeleteInstance(2)
    		chr.DeleteInstance(3)
    		chr.DeleteInstance(4)
    		self.DiscFace.Hide()
    		self.raceName.Hide()
    		id = net.GetAccountCharacterSlotDataInteger(index, net.ACCOUNT_CHARACTER_SLOT_ID)
    		race = net.GetAccountCharacterSlotDataInteger(index, net.ACCOUNT_CHARACTER_SLOT_RACE)
    		form = net.GetAccountCharacterSlotDataInteger(index, net.ACCOUNT_CHARACTER_SLOT_FORM)
    		name = net.GetAccountCharacterSlotDataString(index, net.ACCOUNT_CHARACTER_SLOT_NAME)
    		hair = net.GetAccountCharacterSlotDataInteger(index, net.ACCOUNT_CHARACTER_SLOT_HAIR)
    		sash = 0
    		if app.ENABLE_SASH_SYSTEM:
    			sash = net.GetAccountCharacterSlotDataInteger(index, net.ACCOUNT_CHARACTER_SLOT_SASH)
    
    		if id != 0:
    			self.MakeCharacter(index, id, name, race, form, hair, sash)
    		
    		if index == 0:
    			self.CharacterSlot_0.Down()
    			self.CharacterSlot_0_Name.SetFontColor(1.0, 0.6000, 0.3500)
    			self.CharacterFace_0.LoadImage(self.FACE_IMAGE_DICT_1[race])
    			self.CharacterSlot_1.SetUp()
    			self.CharacterSlot_2.SetUp()
    			self.CharacterSlot_3.SetUp()
    			self.CharacterSlot_4.SetUp()
    			self.CharacterSlot_1_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    			self.CharacterSlot_2_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    			self.CharacterSlot_3_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    			self.CharacterSlot_4_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    		elif index == 1:
    			self.CharacterSlot_1.Down()
    			self.CharacterSlot_1_Name.SetFontColor(1.0, 0.6000, 0.3500)
    			self.CharacterFace_1.LoadImage(self.FACE_IMAGE_DICT_1[race])
    			self.CharacterSlot_0.SetUp()
    			self.CharacterSlot_2.SetUp()
    			self.CharacterSlot_3.SetUp()
    			self.CharacterSlot_4.SetUp()
    			self.CharacterSlot_0_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    			self.CharacterSlot_2_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    			self.CharacterSlot_3_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    			self.CharacterSlot_4_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    		elif index == 2:
    			self.CharacterSlot_2.Down()
    			self.CharacterSlot_2_Name.SetFontColor(1.0, 0.6000, 0.3500)
    			self.CharacterFace_2.LoadImage(self.FACE_IMAGE_DICT_1[race])
    			self.CharacterSlot_0.SetUp()
    			self.CharacterSlot_1.SetUp()
    			self.CharacterSlot_3.SetUp()
    			self.CharacterSlot_4.SetUp()
    			self.CharacterSlot_0_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    			self.CharacterSlot_1_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    			self.CharacterSlot_3_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    			self.CharacterSlot_4_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    		elif index == 3:
    			self.CharacterSlot_3.Down()
    			self.CharacterSlot_3_Name.SetFontColor(1.0, 0.6000, 0.3500)
    			self.CharacterFace_3.LoadImage(self.FACE_IMAGE_DICT_1[race])
    			self.CharacterSlot_0.SetUp()
    			self.CharacterSlot_1.SetUp()
    			self.CharacterSlot_2.SetUp()
    			self.CharacterSlot_4.SetUp()
    			self.CharacterSlot_0_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    			self.CharacterSlot_1_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    			self.CharacterSlot_2_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    			self.CharacterSlot_4_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    		elif index == 4:
    			self.CharacterSlot_4.Down()
    			self.CharacterSlot_4_Name.SetFontColor(1.0, 0.6000, 0.3500)
    			self.CharacterFace_4.LoadImage(self.FACE_IMAGE_DICT_1[race])
    			self.CharacterSlot_0.SetUp()
    			self.CharacterSlot_1.SetUp()
    			self.CharacterSlot_2.SetUp()
    			self.CharacterSlot_3.SetUp()
    			self.CharacterSlot_0_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    			self.CharacterSlot_1_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    			self.CharacterSlot_2_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    			self.CharacterSlot_3_Name.SetFontColor(0.8549, 0.8549, 0.8549)
    		
    		self.slot = index
    		chr.SelectInstance(self.slot)
    		
    		for i in xrange(self.CHARACTER_TYPE_COUNT):
    			self.destNameAlpha[i] = 0.0
    		
    		self.destGauge = [0.0, 0.0, 0.0, 0.0]
    		id=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_ID)
    		if 0 != id:
    			self.btnStart.Show()
    			self.btnDelete.Show()
    			self.btnCreate.Hide()
    			for i in xrange(self.SLOT_COUNT):
    				id_check = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_ID)
    				if id_check == 0:
    					self.btnCreate.Show()
    			
    			playTime=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_PLAYTIME)
    			level=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_LEVEL)
    			if app.ENABLE_CONQUEROR_LEVEL:
    				conquerorlevel=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_CONQUEROR_LEVEL)
    			race=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_RACE)
    			valueHTH=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_HTH)
    			valueINT=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_INT)
    			valueSTR=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_STR)
    			valueDEX=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_DEX)
    			name=net.GetAccountCharacterSlotDataString(self.slot, net.ACCOUNT_CHARACTER_SLOT_NAME)
    			guildID=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_GUILD_ID)
    			guildName=net.GetAccountCharacterSlotDataString(self.slot, net.ACCOUNT_CHARACTER_SLOT_GUILD_NAME)
    			self.changeNameFlag=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_CHANGE_NAME_FLAG)
    			
    			job = chr.RaceToJob(race)
    			if job >= 0 and job < self.CHARACTER_TYPE_COUNT:
    				self.destNameAlpha[job] = 1.0
    			
    			self.CharacterHTH.SetText(str(valueHTH))
    			self.CharacterINT.SetText(str(valueINT))
    			self.CharacterSTR.SetText(str(valueSTR))
    			self.CharacterDEX.SetText(str(valueDEX))
    			
    			statesSummary = 90
    			if statesSummary > 0.0:
    				self.destGauge = [
    										((float(valueHTH) * 10) / 90) / 10,
    										((float(valueINT) * 10) / 90) / 10,
    										((float(valueSTR) * 10) / 90) / 10,
    										((float(valueDEX) * 10) / 90) / 10
    									]
    			
    			event.ClearEventSet(self.descIndex)
    			self.descIndex = event.RegisterEventSet(self.DESCRIPTION_FILE_NAME[race])
    			if self.DESCRIPTION_FILE_NAME_LIMIT[race] == 1:
    				self.textBoardPrev.Show()
    				self.textBoardNext.Show()
    			else:
    				self.textBoardPrev.Hide()
    				self.textBoardNext.Hide()
    		else:
    			self.textBoardPrev.Hide()
    			self.textBoardNext.Hide()
    			self.InitCharacterBoard()
    
    	def PrevDescriptionPage(self):
    		if event.IsWait(self.descIndex) == TRUE:
    			if event.GetVisibleStartLine(self.descIndex)-14 >= 0:
    				event.SetVisibleStartLine(self.descIndex, event.GetVisibleStartLine(self.descIndex)-14)
    				event.Skip(self.descIndex)
    		else:
    			event.Skip(self.descIndex)
    
    	def NextDescriptionPage(self):
    		if event.IsWait(self.descIndex) == TRUE:
    			event.SetVisibleStartLine(self.descIndex, event.GetVisibleStartLine(self.descIndex)+14)
    			event.Skip(self.descIndex)
    		else:
    			event.Skip(self.descIndex)
    
    	def InitCharacterBoard(self):
    		self.btnStart.Hide()
    		self.btnDelete.Hide()
    		self.btnCreate.Show()
    		
    		self.CharacterHTH.SetText("")
    		self.CharacterINT.SetText("")
    		self.CharacterSTR.SetText("")
    		self.CharacterDEX.SetText("")
    		
    
    	## Event
    	def GetSlotIndex(self):
    		return self.slot
    
    	def OnUpdate(self):
    		chr.Update()
    		(xposEventSet, yposEventSet) = self.textBoard.GetGlobalPosition()
    		event.UpdateEventSet(self.descIndex, xposEventSet+7, -(yposEventSet+7))
    		self.descriptionBox.SetIndex(self.descIndex)
    		
    		for i in xrange(4):
    			self.curGauge[i] += (self.destGauge[i] - self.curGauge[i]) / 10.0
    			if abs(self.curGauge[i] - self.destGauge[i]) < 0.005:
    				self.curGauge[i] = self.destGauge[i]
    			
    			self.GaugeList[i].SetPercentage(self.curGauge[i], 1.0)
    		for i in xrange(self.CHARACTER_TYPE_COUNT):
    			self.curNameAlpha[i] += (self.destNameAlpha[i] - self.curNameAlpha[i]) / 10.0
    			self.NameList[i].SetAlpha(self.curNameAlpha[i])
    		for i in xrange(self.SLOT_COUNT):
    			if FALSE == chr.HasInstance(i):
    				continue
    		if -1 != self.startIndex:
    			if app.GetTime() - self.startReservingTime > 0.1:
    				if FALSE == self.openLoadingFlag:
    					chrSlot=self.stream.GetCharacterSlot()
    
    					#print "chrSlot = %s" % chrSlot
    					if musicInfo.selectMusic != "":
    						snd.FadeLimitOutMusic("BGM/"+musicInfo.selectMusic, systemSetting.GetMusicVolume()*0.05)
    
    					net.DirectEnter(chrSlot)
    
    					playTime = net.GetAccountCharacterSlotDataInteger(chrSlot, net.ACCOUNT_CHARACTER_SLOT_PLAYTIME)
    					import player
    					player.SetPlayTime(playTime)
    
    					self.openLoadingFlag = TRUE
    
    					import chat
    					chat.Clear()
    
    	def PopupMessage(self, msg, func=0):
    		if not func:
    			func=self.EmptyFunc
    
    		self.stream.popupWindow.Close()
    		self.stream.popupWindow.Open(msg, func, localeInfo.UI_OK)
    
    	def OverInButton(self, stat):
    		if stat == 1:
    			self.toolTip.ClearToolTip()
    			self.toolTip.AlignHorizonalCenter()
    			self.toolTip.AutoAppendNewTextLine(uiScriptLocale.SELECT_SELECT, grp.GenerateColor(1.0, 1.0, 0.0, 1.0))
    			self.toolTip.Show()
    		elif stat == 2:
    			self.toolTip.ClearToolTip()
    			self.toolTip.AlignHorizonalCenter()
    			self.toolTip.AutoAppendNewTextLine(uiScriptLocale.SELECT_EXIT, grp.GenerateColor(1.0, 1.0, 0.0, 1.0))
    			self.toolTip.Show()
    		elif stat == 3:
    			self.toolTip.ClearToolTip()
    			self.toolTip.AlignHorizonalCenter()
    			self.toolTip.AutoAppendNewTextLine(uiScriptLocale.SELECT_DELETE, grp.GenerateColor(1.0, 1.0, 0.0, 1.0))
    			self.toolTip.Show()
    		elif stat == 4:
    			self.toolTip.ClearToolTip()
    			self.toolTip.AlignHorizonalCenter()
    			self.toolTip.AutoAppendNewTextLine(uiScriptLocale.SELECT_CREATE, grp.GenerateColor(1.0, 1.0, 0.0, 1.0))
    			self.toolTip.Show()
    		elif stat >= 5 and stat <= 9:
    			playTime = net.GetAccountCharacterSlotDataInteger(stat-5, net.ACCOUNT_CHARACTER_SLOT_PLAYTIME)
    			guildName = net.GetAccountCharacterSlotDataString(stat-5, net.ACCOUNT_CHARACTER_SLOT_GUILD_NAME)
    			
    			self.toolTip.ClearToolTip()
    			self.toolTip.AlignHorizonalCenter()
    			if guildName:
    				self.toolTip.AutoAppendNewTextLine(uiScriptLocale.SELECT_YES_GUILD % (guildName), grp.GenerateColor(1.0, 1.0, 0.0, 1.0), True)
    			else:
    				self.toolTip.AutoAppendNewTextLine(uiScriptLocale.SELECT_NO_GUILD, grp.GenerateColor(1.0, 1.0, 0.0, 1.0), True)
    			play_time = uiScriptLocale.SELECT_PLAYTIME + " :"
    			day = playTime / (60 * 24)
    			if day:
    				play_time = play_time + " " + str(day) + localeInfo.DAY
    			hour = (playTime - (day * 60 * 24))/60
    			if hour:
    				play_time = play_time + " " + str(hour) + localeInfo.HOUR
    			min = playTime - (hour * 60) - (day * 60 * 24)
    			play_time = play_time + " " + str(min) + localeInfo.MINUTE
    			self.toolTip.AutoAppendNewTextLine(play_time, 0xffffff00, False) 	##YELLOW##
    			self.toolTip.toolTipWidth += 55
    			self.toolTip.Show()
    		elif stat == 10:
    			self.toolTip.ClearToolTip()
    			self.toolTip.AlignHorizonalCenter()
    			self.toolTip.AutoAppendNewTextLine(uiScriptLocale.CREATE_PREV, grp.GenerateColor(1.0, 1.0, 0.0, 1.0))
    			self.toolTip.Show()
    		elif stat == 11:
    			self.toolTip.ClearToolTip()
    			self.toolTip.AlignHorizonalCenter()
    			self.toolTip.AutoAppendNewTextLine(uiScriptLocale.CREATE_NEXT, grp.GenerateColor(1.0, 1.0, 0.0, 1.0))
    			self.toolTip.Show()
    
    	def OverOutButton(self):
    		self.toolTip.Hide()
    
    	def EmptyFunc(self):
    		pass
    
    	def OnPressExitKey(self):
    		self.ExitSelect()
    		return TRUE
    
    	def OnPressEscapeKey(self):
    		self.ExitSelect()
    		return TRUE
    
    	#Event
    	def OnKeyDown(self, key):
    
    		if 1 == key:
    			self.ExitSelect()
    		if 2 == key:
    			self.SelectSlot(0)
    		if 3 == key:
    			self.SelectSlot(1)
    		if 4 == key:
    			self.SelectSlot(2)
    
    		if 28 == key:
    
    			id = net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_ID)
    			if 0 == id:
    				self.CreateCharacter()
    
    			else:
    				self.StartGame()
    
    		if 203 == key:
    			self.slot = (self.GetSlotIndex() - 1 + self.SLOT_COUNT) % self.SLOT_COUNT
    			self.SelectSlot(self.slot)
    		if 205 == key:
    			self.slot = (self.GetSlotIndex() + 1) % self.SLOT_COUNT
    			self.SelectSlot(self.slot)
    
    		return TRUE

     

  2. 11 hours ago, Hanma said:

    Problem with ClientManagerBoot.cpp

    https://pastebin.com/raw/Ntc5h5YA

     

    Can someone help me with this?

    Common/Length.h open
    Search:

    ATTRIBUTE_SET_MAX_NUM


    Add Above 

    ATTRIBUTE_SET_PENDANT,

     

    Look This:

    ATTRIBUTE_SET_PENDANT,

    ATTRIBUTE_SET_MAX_NUM

    or My Files:

     

    enum EAttributeSet
    {
    	ATTRIBUTE_SET_WEAPON,
    	ATTRIBUTE_SET_BODY,
    	ATTRIBUTE_SET_WRIST,
    	ATTRIBUTE_SET_FOOTS,
    	ATTRIBUTE_SET_NECK,
    	ATTRIBUTE_SET_HEAD,
    	ATTRIBUTE_SET_SHIELD,
    	ATTRIBUTE_SET_EAR,
    #ifdef ENABLE_ITEM_ATTR_COSTUME
    	ATTRIBUTE_SET_COSTUME_BODY,
    	ATTRIBUTE_SET_COSTUME_HAIR,
    #if defined(ENABLE_ITEM_ATTR_COSTUME) && defined(ENABLE_WEAPON_COSTUME_SYSTEM)
    	ATTRIBUTE_SET_COSTUME_WEAPON,
    #endif
    #endif
    #ifdef ENABLE_PENDANT_SYSTEM
    	ATTRIBUTE_SET_PENDANT,
    	ATTRIBUTE_SET_PENDANT_SPECIAL,
    #endif
    	ATTRIBUTE_SET_MAX_NUM
    };

    Ok ❤️

    Also 

    Basic Code ClientManagerBoot.cpp 

    ATTRIBUTE_SET_PENDANT

    Nice Code

    EAttributeSet::ATTRIBUTE_SET_PENDANT

  3. #0  CHARACTER::FindAffect (bApply=<optimized out>, dwType=<optimized out>,
        this=<optimized out>)
        at /usr/local/lib/gcc8/include/c++/bits/stl_list.h:308
            pkAffect = <optimized out>
            pkAffect = <optimized out>
            it = {_M_node = 0x0}
            it = <optimized out>
            pkAffect = <optimized out>
    #1  CHARACTER::AddAffect (this=0x4fc09a80, dwType=727, bApplyOn=0 '\000',
        lApplyValue=0, dwFlag=49, lDuration=3600, lSPCost=0, bOverride=true,
        IsCube=false) at char_affect.cpp:623
            __FUNCTION__ = "AddAffect"
            pkAff = 0x0
            wMovSpd = <optimized out>
            wAttSpd = <optimized out>
    #2  0x0825f976 in MeleyLair::r_meleyspawn_event (event=...,
        processing_time=750) at MeleyLair.h:103
            dwTime = <optimized out>
            stones_count = <optimized out>
            pEventInfo = 0x4fcb9760
            pMap = 0x4fb90080
            dwTimeReload = 30
            dwMobVnum = <optimized out>
    --Type <RET> for more, q to quit, c to continue without paging--


    AddAffect Function:

    bool CHARACTER::AddAffect(DWORD dwType, BYTE bApplyOn, long lApplyValue, DWORD dwFlag, long lDuration, long lSPCost, bool bOverride, bool IsCube)
     

    char_affect.cpp:623 (Inside the AddAffect function)

     

    	if (IsCube)
    		pkAff = FindAffect(dwType, bApplyOn);
    	else
    		pkAff = FindAffect(dwType);


    MeleyLair.h:103

            LPCHARACTER& GetStatue4Char() { return pkStatue4; }

    Thanks for your help.

    I don't know if it's correct to fix what I did, but I tried it like this.

    Previously :
    pMap->GetStatue4Char()->AddAffect(AFFECT_STATUE, POINT_NONE, 0, AFF_STATUE1, 3600, 0, true); 7 Argument

    Later:
    pMap->GetStatue4Char()->AddAffect(AFFECT_STATUE, POINT_NONE, 0, AFF_STATUE1, 3600, 0, true, false); 8 Argument

     

    AddAffect arguments:

    dwType, bApplyOn, lApplyValue, dwFlag, lDuration, lSPCost, bOverride, IsCube = 8 Argument

  4. On 9/17/2021 at 1:48 PM, Cunoo said:

    I think can be something like this.. Because I never got black screen after fix, but if I can "get" black screen (10 hours+ in game) Im kicked.. I test it 3x and same problem just Im kicked before I can got black screen... Game is compiled clean from kraizy same as client, only for test.. I think there is something more bad.. Game is overflowed with something more.. Im not sure where is problem because I try debug and nothing happen.. I dont have too much deep knowledges for more.. But for me is this problem really strange because I use clean game for test... Today I test it on my game.. So I write feedback too late..

    "_IMPROVED_PACKET_ENCRYPTION_" 

    delete this from your files. But fix it before you delete it. delete this encryption after repairing.

    • Lmao 1
  5. Hello friends. I wish everyone good health.

    Meley's skills do no damage. There are plugins for SkillValue SkillLimit in mob_proto file. I am adding the skills from the skill_proto.sql file. But it doesn't do any damage. How do I get Meley's skill effects to deal damage?

    SE_MELEY_DAMAGE
    SE_MELEY_NORMAL_DAMAGE

    Do I need to make an effect pack like this? and these effects do i need to add damage. Thank you very much to those who will inform me.

  6. It's working perfectly now.

    here is the plugin for new feelings for you:

    Search:

     

    { pkMotionManager.NAME_ANGRY, "angry.msa", 0 },

    ADD:

            { pkMotionManager.NAME_DANCE_7, "dance_7.msa", 0 },
            { pkMotionManager.NAME_JOY, "joy.msa", 0 },
            { pkMotionManager.NAME_PUSHUP, "pushup.msa", 0 },
            { pkMotionManager.NAME_EXERCISE, "exercise.msa", 0 },
            { pkMotionManager.NAME_DOZE, "doze.msa", 0 },
            { pkMotionManager.NAME_SELFIE, "selfie.msa", 0 },

    Search:

     

            { pkBase.EFFECT_EMOTICON + 11, "", "d:/ymir work/effect/etc/emoticon/fish.mse" },

     

    ADD:

     

            { pkBase.EFFECT_EMOTICON + 12, "", "d:/ymir work/effect/etc/emoticon/charging.mse" },
            { pkBase.EFFECT_EMOTICON + 13, "", "d:/ymir work/effect/etc/emoticon/nosay.mse" },
            { pkBase.EFFECT_EMOTICON + 14, "", "d:/ymir work/effect/etc/emoticon/weather1.mse" },
            { pkBase.EFFECT_EMOTICON + 15, "", "d:/ymir work/effect/etc/emoticon/weather2.mse" },
            { pkBase.EFFECT_EMOTICON + 16, "", "d:/ymir work/effect/etc/emoticon/weather3.mse" },
            { pkBase.EFFECT_EMOTICON + 17, "", "d:/ymir work/effect/etc/emoticon/hungry.mse" },
            { pkBase.EFFECT_EMOTICON + 18, "", "d:/ymir work/effect/etc/emoticon/siren.mse" },
            { pkBase.EFFECT_EMOTICON + 19, "", "d:/ymir work/effect/etc/emoticon/letter.mse" },
            { pkBase.EFFECT_EMOTICON + 20, "", "d:/ymir work/effect/etc/emoticon/call.mse" },
            { pkBase.EFFECT_EMOTICON + 21, "", "d:/ymir work/effect/etc/emoticon/celebration.mse" },
            { pkBase.EFFECT_EMOTICON + 22, "", "d:/ymir work/effect/etc/emoticon/alcohol.mse" },
            { pkBase.EFFECT_EMOTICON + 23, "", "d:/ymir work/effect/etc/emoticon/busy.mse" },
            { pkBase.EFFECT_EMOTICON + 24, "", "d:/ymir work/effect/etc/emoticon/whirl.mse" },


    If you use it this way, the emoji of new emotions will not appear in the game (except for animations such as dancing, selfie)

    So use it this way.

    Open PlayerSettingsModule.py

    Search:

    def __LoadGameEffect():
        if app.ENABLE_CPP_PSM:
            cpsm.LoadGameEffect()

    ADD:

            net.RegisterEmoticonString("(sweat)")
            net.RegisterEmoticonString("(money)")
            net.RegisterEmoticonString("(happy)")
            net.RegisterEmoticonString("(love)")
            net.RegisterEmoticonString("(love2)")
            net.RegisterEmoticonString("(angry)")
            net.RegisterEmoticonString("(aha)")
            net.RegisterEmoticonString("(gloom)")
            net.RegisterEmoticonString("(sorry)")
            net.RegisterEmoticonString("(!)")
            net.RegisterEmoticonString("(?)")
            net.RegisterEmoticonString("(fish)")
            if app.ENABLE_EXPRESSING_EMOTION: ## THANK YOU OWSAP ❤️
                net.RegisterEmoticonString("(charging)")
                net.RegisterEmoticonString("(nosay)")
                net.RegisterEmoticonString("(weather1)")
                net.RegisterEmoticonString("(weather2)")
                net.RegisterEmoticonString("(weather3)")
                net.RegisterEmoticonString("(hungry)")
                net.RegisterEmoticonString("(siren)")
                net.RegisterEmoticonString("(letter)")
                net.RegisterEmoticonString("(call)")
                net.RegisterEmoticonString("(celebration)")
                net.RegisterEmoticonString("(alcohol)")
                net.RegisterEmoticonString("(busy)")
                net.RegisterEmoticonString("(whirl)")

     

    now everything is ok. If you are using the S Skill system.

    PlayerSettingsModule.cpp Open

    Search and Replace:

     

    static const DWORD GUILD_SKILL_DRAGONBLOOD = pkMotionManager.NAME_SKILL + 107;
    static const DWORD GUILD_SKILL_DRAGONBLESS = pkMotionManager.NAME_SKILL + 108;
    static const DWORD GUILD_SKILL_BLESSARMOR = pkMotionManager.NAME_SKILL + 109;
    static const DWORD GUILD_SKILL_SPPEDUP = pkMotionManager.NAME_SKILL + 110;
    static const DWORD GUILD_SKILL_DRAGONWRATH = pkMotionManager.NAME_SKILL + 111;
    static const DWORD GUILD_SKILL_MAGICUP = pkMotionManager.NAME_SKILL + 112;

    static const DWORD HORSE_SKILL_WILDATTACK = pkMotionManager.NAME_SKILL + 113;
    static const DWORD HORSE_SKILL_CHARGE = pkMotionManager.NAME_SKILL + 114;
    static const DWORD HORSE_SKILL_SPLASH = pkMotionManager.NAME_SKILL + 115;

     

    Note : If your 6th Skills are not visible

    Open PlayerSettingsModule.py and Search and Change :

     

    NEW_678TH_SKILL_ENABLE = constInfo.NEW_678TH_SKILL_ENABLE

     

    Now everything is smooth. Take care of yourselves. I love you. Greetings from Turkey.

     

  7. On 4/9/2022 at 7:29 PM, avertusss said:

    I have the same problem @filipw1 Any solution? 

    Yes : "Bip01", "D:/ymir work/pc/common/effect/armor/armor_9_terabithia.mse"

    No :(VS ERROR) :   "Bip01", 'D:/ymir work/pc/common/effect/armor/armor_9_terabithia.mse"

    ' ' ' ' No 
    " " "  Yes 

    OK?

     

    Control files.

            { pkBase.EFFECT_EMOTICON + 17, "", "d:/ymir work/effect/etc/emoticon/hungry.mse" },
            { pkBase.EFFECT_EMOTICON + 18, "", "d:/ymir work/effect/etc/emoticon/siren.mse" },
            { pkBase.EFFECT_EMOTICON + 19, "", "d:/ymir work/effect/etc/emoticon/letter.mse" },
            { pkBase.EFFECT_EMOTICON + 20, "", "d:/ymir work/effect/etc/emoticon/call.mse" },
            { pkBase.EFFECT_EMOTICON + 21, "", "d:/ymir work/effect/etc/emoticon/celebration.mse" },
            { pkBase.EFFECT_EMOTICON + 22, "", "d:/ymir work/effect/etc/emoticon/alcohol.mse" },
            { pkBase.EFFECT_EMOTICON + 23, "", "d:/ymir work/effect/etc/emoticon/busy.mse" },
            { pkBase.EFFECT_EMOTICON + 24, "", "d:/ymir work/effect/etc/emoticon/whirl.mse" },

     

    new emotions(emotion bag) added but not working.

    On 3/13/2022 at 3:46 PM, Thorek said:

    You must add new emotion to m_vecEffectData vector and v_vecEmoticonString.

    new emotions(emotion bag) added but not working.

     

     

            { pkBase.EFFECT_EMOTICON + 17, "", "d:/ymir work/effect/etc/emoticon/hungry.mse" },
            { pkBase.EFFECT_EMOTICON + 18, "", "d:/ymir work/effect/etc/emoticon/siren.mse" },
            { pkBase.EFFECT_EMOTICON + 19, "", "d:/ymir work/effect/etc/emoticon/letter.mse" },
            { pkBase.EFFECT_EMOTICON + 20, "", "d:/ymir work/effect/etc/emoticon/call.mse" },
            { pkBase.EFFECT_EMOTICON + 21, "", "d:/ymir work/effect/etc/emoticon/celebration.mse" },
            { pkBase.EFFECT_EMOTICON + 22, "", "d:/ymir work/effect/etc/emoticon/alcohol.mse" },
            { pkBase.EFFECT_EMOTICON + 23, "", "d:/ymir work/effect/etc/emoticon/busy.mse" },
            { pkBase.EFFECT_EMOTICON + 24, "", "d:/ymir work/effect/etc/emoticon/whirl.mse" },

  8. My brother who coded this system, you are a marvel. I really admire you.

    But I just want to see inside the chests.

    How can I disable CTRL + LSHIFT. For example: How do I prevent the screen from turning on when I click Black Steel Armor? Thanks.

    PyObject* itemHasDropInfo(PyObject* poSelf, PyObject* poArgs)
    {
    	int iItemIndex;
    	if (!PyTuple_GetInteger(poArgs, 0, &iItemIndex))
    		return Py_BadArgument();
    
    	CItemManager::TChestDropItemInfoVec* vDropInfo = nullptr;
    
    	vDropInfo = CItemManager::Instance().GetItemDropInfoVec(iItemIndex);
    
    	return Py_BuildValue("b", (vDropInfo && !vDropInfo->empty()));
    }
    
    
    PyObject* itemGetDropInfo(PyObject* poSelf, PyObject* poArgs)
    {
    	int iItemIndex;
    	if (!PyTuple_GetInteger(poArgs, 0, &iItemIndex))
    		return Py_BadArgument();
    
    	PyObject* poList = PyList_New(0);
    	CItemManager::TChestDropItemInfoVec* vDropInfo = nullptr;
    
    	vDropInfo = CItemManager::Instance().GetItemDropInfoVec(iItemIndex);
    
    	return Py_BuildValue("iO", __CreateDropPage(vDropInfo, poList), poList);
    }
    
    
    
    
    
    	if app.__BL_CHEST_DROP_INFO__:
    		def OpenChestDropWindow(self, itemVnum):
    			if self.wndChestDropInfo:
    				self.wndChestDropInfo.Open(itemVnum)
    
    
    		if app.__BL_CHEST_DROP_INFO__:
    			if app.IsPressed(app.DIK_LCONTROL):
    				if item.HasDropInfo(ItemVNum) and self.interface:
    					self.interface.OpenChestDropWindow(ItemVNum)
    				return
    
    
    	if app.__BL_CHEST_DROP_INFO__:
    		def AppendChestDropInfo(self, itemVnum):
    			hasinfo = item.HasDropInfo(itemVnum, True)
    			if hasinfo:
    				self.AppendSpace(5)
    				self.AppendTextLine(localeInfo.CHEST_DROP_INFO, self.NORMAL_COLOR)
    

    Ok. Fixed

  9. 0412 04:34:04659 :: LZObject: not a valid data
    0412 04:34:04659 :: LoadLocaleData - LoadChestDropInfo(locale/xx/chest_drop) Error
    0412 04:34:04799 :: 
    networkModule.py(line:192) SetSelectCharacterPhase
    system.py(line:177) __hybrid_import
    system.py(line:142) _process_result
    introSelect.py(line:22) <module>
    system.py(line:177) __hybrid_import
    system.py(line:142) _process_result
    interfaceModule.py(line:44) <module>
    system.py(line:177) __hybrid_import
    system.py(line:142) _process_result
    uiaverage_price.py(line:55) <module>

    networkModule.SetSelectCharacterPhase - <type 'exceptions.RuntimeError'>:skill.GetSkillName - Failed to find skill by 1

    0412 04:34:04799 :: ============================================================================================================
    0412 04:34:04799 :: Abort!!!!

     

    Oky. Fix

    Edit : json open false -> true

  10. When I click on the blood victim object, I want affect to appear. and when i hover the mouse over this affect

    I want the spirits to write %d/20. I tried to do it myself, but affect does not come out.

    Type : ITEM_USE
    SubType: USE_SPECIAL


    My sample codes:

    char_item:

     

    			case 70311:
    				if (FindAffect(AFFECT_QUEST_SOUL))
    				{
    					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have used this before."));
    					return false;
    				}
    				if (GetQuestSoulPoint() >= 20)
    				{
    					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot use it now. Use spirits first."));
    					return false;
    				}
    				if (quest::CQuestManager::instance().GetEventFlag("enable_roulette_event") != 1)
    				{
    					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Ups! The event is currently inactive!"));
    					return false;
    				}
    				AddAffect(AFFECT_QUEST_SOUL, POINT_NONE, 0, AFF_NONE, 2*60*60, 0, true);
    				item->SetCount(item->GetCount() - 1);
    				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can collect souls."));
    				ChatPacket(CHAT_TYPE_COMMAND, "AffectBloodCommand %d", GetQuestSoulPoint());
    				break;

    affect.h

     

    	AFFECT_QUEST_SOUL					= 741,

    clientsource instancebase "yes"

    game.py

    serverCommandList["AffectBloodCommand"] = self.AffectBloodCommand
    		def AffectBloodCommand(self, point):
    			if self.affectShower:
    				self.affectShower.AffectShowerBlood(point)

    uiaffectshower.py

     

    	class MainBloodShower(ui.ExpandedImageBox):
    		def __init__(self):
    			ui.ExpandedImageBox.__init__(self)
    
    			self.point = 0
    
    			self.toolTip = uiToolTip.ToolTip(100)
    			self.toolTip.HideToolTip()
    
    		def SetState(self, point):
    			self.toolTip.ClearToolTip()
    
    			fileName ="d:/ymir work/ui/skill/common/affect/bloodpoint.sub"
    			self.LoadImage(fileName)
    
    			self.__AppendText(localeInfo.TOOLTIP_AFFECT_LATE_SUMMER_EVENT_BUFF % (self.point))
    
    			self.SetScale(0.7, 0.7)
    
    		def __AppendText(self, text):
    			self.toolTip.AppendTextLine(text)
    			self.toolTip.ResizeToolTip()
    
    		def OnMouseOverIn(self):
    			self.toolTip.ShowToolTip()
    
    		def OnMouseOverOut(self):
    			self.toolTip.HideToolTip()



    class AffectShower(ui.Window): for 

     

    	def __init__(self):
    
    			self.mainbloodshower=None
    
    	def ClearAllAffects(self):
    
    			self.mainbloodshower=None
    
    
    		def AffectShowerBlood(self, point):
    			image = MainBloodShower()
    			image.SetParent(self)
    			image.SetState(point)
    			image.Show()
    	
    			self.mainbloodshower=image
    			self.__ArrangeImageList()
    
    
    	def __ArrangeImageList(self):
    
    
    			if self.mainbloodshower:
    				self.mainbloodshower.SetPosition(xPos, 0)
    				xPos += self.IMAGE_STEP
    				AffectCount += 1
    
    

     

    but the effect does not come when I click on the item.

    char_battle.cpp

     

    	int randomnumberlimit = 800;
    	int prob = 100;
    	int DeleteSoulPoint = GetQuestSoulPoint();
    	int levelrange = 10;
    
    	if (quest::CQuestManager::instance().GetEventFlag("enable_roulette_event") == 1)
    	{
    		if (FindAffect(AFFECT_QUEST_SOUL) {
    			if (!IsPC() && (pkKiller && pkKiller->IsPC()))
    			{
    				if (pkKiller->GetLevel() >= (pkKiller->GetLevel() - levelrange))
    				{
    					if (GetMobRank() >= MOB_RANK_PAWN) {
    						if (number(1, randomnumberlimit) <= prob) {
    							pkKiller->PointChange(POINT_QSOUL, 1, true);
    							pkKiller->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Huha! Winner SoulPoint. "));
    						}
    					}
    					if (GetQuestSoulPoint() >= 20)
    						pkKiller->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have gathered the necessary souls. Now take it to the Ritual."));
    						RemoveAffect(AFFECT_QUEST_SOUL);
    				}
    			}
    		}
    	}

     

×
×
  • 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.