Jump to content

Device41

Inactive Member
  • Posts

    10
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by Device41

  1.     def SetInventoryPage(self, page):
            self.inventoryPageIndex = page
            self.inventoryTab[(page+1)%4].SetUp()
            self.inventoryTab[(page+2)%4].SetUp()
            self.inventoryTab[(page+3)%4].SetUp()
            self.RefreshBagSlotWindow()

    and look

    return self.inventoryPageIndex*player.INVENTORY_PAGE_SIZE + local

  2. check_name_alphabet(const char* str) search and change.:
    int check_name_alphabet(const char* str)
    {
        const char* tmp;
    
        if (!str || !*str)
            return 0;
    
        if (strlen(str) < 2)
            return 0;
    
        for (tmp = str; *tmp; ++tmp)
        {
            if (isdigit(tmp) || isalpha(tmp))
                continue;
        #ifdef USE_SPECIAL_CHARACTERS
            switch (*tmp)
            {
            case ' ':
            case '.':
            case '-':
            case '_':
            case '@':
            case '!':
            case '^':
            case '#':
            case '$':
            case '%':
            case '&':
            case '*':
            case '(':
            case ')':
                continue;
            }
        #endif
        return 0;
        }
    
        return check_name_independent(str);
    }

     

    service.h add.:

    #define USE_SPECIAL_CHARACTERS

    INFO : locale_service.cpp 

  3. Hello to everyone

    First of all, I would like to thank @Rakancito from here because this system exists thanks to him.

    There are yohara talismans. RES will be a talisman, STR will be a talisman .....


    When I wear the talisman of speed (RES), yohara points appear in the status window. However, the character does not speed up instantly. He walks slowly.

    I am trying to complete this system.

    For example: RES score supported by the map: 3

    I wear the +9 RES will talisman and this gives me 9 RES points. When I use this, the RES Score in the status window is 9. But the character is not going fast. To go fast I have to get on and off a horse, it updates that way. When I wear my talisman, I want it to be updated instantly. I'm sorry for my bad english.

     

    spacer.png

  4. On 4/27/2021 at 4:00 AM, Rakancito said:

    Ok If you are using the shared system you can with my introselect.py because have all Yohara System, I hope it helps for you, just search for:

     

     

     

    I apologize from you.

    But my introselect.py file is not the same as your file. Therefore I can make mistakes. If I ask you, can you adapt it to me? Really thank you so much. you are very good person.


     

    import chr
    import grp
    import app
    import wndMgr
    import net
    import snd
    import musicInfo
    import event
    import systemSetting
    import localeInfo
    
    import ui
    import uiToolTip
    import uiScriptLocale
    import networkModule
    import playerSettingModule
    
    ####################################
    # Module loading sharing for fast execution
    ####################################
    
    import uiCommon
    import uiMapNameShower
    import uiAffectShower
    import uiPlayerGauge
    import uiCharacter
    import uiTarget
    import interfaceModule
    import uiTaskBar
    import uiInventory
    
    ###################################
    
    ENABLE_ENGNUM_DELETE_CODE = True
    
    M2_INIT_VALUE = -1
    CHARACTER_SLOT_COUNT_MAX = 5
    
    JOB_WARRIOR		= 0
    JOB_ASSASSIN	= 1
    JOB_SURA		= 2
    JOB_SHAMAN		= 3
    JOB_WOLFMAN		= 4
    
    M2_CONST_ID = 	(
    	(playerSettingModule.RACE_WARRIOR_M, playerSettingModule.RACE_WARRIOR_W),
    	(playerSettingModule.RACE_ASSASSIN_M, playerSettingModule.RACE_ASSASSIN_W),
    	(playerSettingModule.RACE_SURA_M, playerSettingModule.RACE_SURA_W),
    	(playerSettingModule.RACE_SHAMAN_M, playerSettingModule.RACE_SHAMAN_W),
    	(playerSettingModule.RACE_WOLFMAN_M, -1),
    )
    
    
    class MyCharacters:
    	class MyUnit:
    		#def __init__(self, const_id, name, level, race, playtime, guildname, form, hair, acce, stat_str, stat_dex, stat_hth, stat_int, change_name):
    		def __init__(self, const_id, name, level, race, playtime, guildname, form, hair, stat_str, stat_dex, stat_hth, stat_int, change_name):
    			self.UnitDataDic = {
    				"ID" 	: 	const_id,
    				"NAME"	:	name,
    				"LEVEL"	:	level,
    				"RACE"	:	race,
    				"PLAYTIME"	:	playtime,
    				"GUILDNAME"	:	guildname,
    				"FORM"	:	form,
    				"HAIR"	:	hair,
    				#"ACCE"	:	acce,
    				"STR"	:	stat_str,
    				"DEX"	:	stat_dex,
    				"HTH"	:	stat_hth,
    				"INT"	:	stat_int,
    				"CHANGENAME"	:	change_name,
    			}
    
    		def __del__(self):
    			#print self.UnitDataDic["NAME"]
    			self.UnitDataDic = None
    
    		def GetUnitData(self):
    			return self.UnitDataDic
    
    	def __init__(self, stream):
    		self.MainStream = stream
    		self.PriorityData = []
    		self.myUnitDic = {}
    		self.HowManyChar = 0
    		self.EmptySlot	=  []
    		self.Race 		= [None, None, None, None, None]
    		self.Job		= [None, None, None, None, None]
    		self.Guild_Name = [None, None, None, None, None]
    		self.Play_Time 	= [None, None, None, None, None]
    		self.Change_Name= [None, None, None, None, None]
    		self.Stat_Point = { 0: None, 1: None, 2: None, 3: None, 4: None }
    
    	def __del__(self):
    		self.MainStream = None
    
    		for i in xrange(self.HowManyChar):
    			chr.DeleteInstance(i)
    
    		self.PriorityData = None
    		self.myUnitDic = None
    		self.HowManyChar = None
    		self.EmptySlot	= None
    		self.Race = None
    		self.Job = None
    		self.Guild_Name = None
    		self.Play_Time = None
    		self.Change_Name = None
    		self.Stat_Point = None
    
    	def Show(self):
    		self.LoadCharacterData()
    
    	def LoadCharacterData(self):
    		self.RefreshData()
    		self.MainStream.All_ButtonInfoHide()
    		PrepareLastPlay = 0
    		for i in xrange(CHARACTER_SLOT_COUNT_MAX):
    			pid = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_ID)
    
    			if not pid:
    				self.EmptySlot.append(i)
    				continue
    
    			name 			= net.GetAccountCharacterSlotDataString(i, net.ACCOUNT_CHARACTER_SLOT_NAME)
    			level 			= net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_LEVEL)
    			race 			= net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_RACE)
    			playtime 		= net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_PLAYTIME)
    			guildname 		= net.GetAccountCharacterSlotDataString(i, net.ACCOUNT_CHARACTER_SLOT_GUILD_NAME)
    			form 			= net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_FORM)
    			hair 			= net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_HAIR)
    			stat_str 		= net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_STR)
    			stat_dex		= net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_DEX)
    			stat_hth		= net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_HTH)
    			stat_int		= net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_INT)
    			last_playtime	= net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_LAST_PLAYTIME) #net.ACCOUNT_CHARACTER_SLOT_LAST_PLAYTIME
    			change_name		= net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_CHANGE_NAME_FLAG)
    			#acce = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_ACCE)
    
    			if last_playtime <= 0:
    				PrepareLastPlay += 1
    				self.SetPriorityData(PrepareLastPlay)
    				self.myUnitDic[PrepareLastPlay] = self.MyUnit(i, name, level, race, playtime, guildname, form, hair, stat_str, stat_dex, stat_hth, stat_int, change_name) #last_playtimeself.myUnitDic[i] = self.MyUnit(i, name, level, race, playtime, guildname, form, hair, stat_str, stat_dex, stat_hth, stat_int, change_name) #last_playtime
    			else:
    				self.SetPriorityData(last_playtime)
    				self.myUnitDic[last_playtime] = self.MyUnit(i, name, level, race, playtime, guildname, form, hair, stat_str, stat_dex, stat_hth, stat_int, change_name) #last_playtime
    
    			#self.myUnitDic[i] = self.MyUnit(i, name, level, race, playtime, guildname, form, hair, acce, stat_str, stat_dex, stat_hth, stat_int, change_name) #last_playtime
    			#self.myUnitDic[i] = self.MyUnit(i, name, level, race, playtime, guildname, form, hair, stat_str, stat_dex, stat_hth, stat_int, change_name) #last_playtime
    
    		try: #python > 2.4
    			self.PriorityData.sort(reverse = True)
    		except:
    			pass
    
    		for index, data in enumerate(self.PriorityData):
    			DestDataDic = self.myUnitDic[data].GetUnitData()
    
    			self.SetSortingData(index, DestDataDic["RACE"], DestDataDic["GUILDNAME"], DestDataDic["PLAYTIME"], DestDataDic["STR"], DestDataDic["DEX"], DestDataDic["HTH"], DestDataDic["INT"], DestDataDic["CHANGENAME"])
    
    			#self.MakeCharacter(i, DestDataDic["NAME"], DestDataDic["RACE"], DestDataDic["FORM"], DestDataDic["HAIR"], DestDataDic["ACCE"])
    			self.MakeCharacter(index, DestDataDic["NAME"], DestDataDic["RACE"], DestDataDic["FORM"], DestDataDic["HAIR"])
    
    			self.MainStream.InitDataSet(index, DestDataDic["NAME"], DestDataDic["LEVEL"], DestDataDic["ID"])
    
    		## Default Setting ##
    		if self.HowManyChar:
    			self.MainStream.SelectButton(0)
    
    		return self.HowManyChar
    
    	def SetPriorityData(self, last_playtime):
    		self.PriorityData.append(last_playtime)
    
    	#def MakeCharacter(self, slot, name, race, form, hair, acce):
    	def MakeCharacter(self, slot, name, race, form, hair):
    		chr.CreateInstance(slot)
    		chr.SelectInstance(slot)
    		chr.SetVirtualID(slot)
    		chr.SetNameString(name)
    
    		chr.SetRace(race)
    		chr.SetArmor(form)
    		chr.SetHair(hair)
    		#chr.SetAcce(acce)
    
    		chr.SetMotionMode(chr.MOTION_MODE_GENERAL)
    		chr.SetLoopMotion(chr.MOTION_INTRO_WAIT)
    
    		if chr.RaceToJob(race) == JOB_WOLFMAN:
    			chr.SetScale(0.95,0.95,0.95)
    
    		chr.SetRotation(0.0)
    		chr.Hide()
    
    	def SetSortingData(self, slot, race, guildname, playtime, pStr, pDex, pHth, pInt, changename):
    		self.HowManyChar += 1
    		self.Race[slot] = race
    		self.Job[slot] = chr.RaceToJob(race)
    		self.Guild_Name[slot] = guildname
    		self.Play_Time[slot] = playtime
    		self.Change_Name[slot] = changename
    		self.Stat_Point[slot] = [pHth, pInt, pStr, pDex]
    
    	def GetRace(self, slot):
    		return self.Race[slot]
    
    	def GetJob(self, slot):
    		return self.Job[slot]
    
    	def GetMyCharacterCount(self):
    		return self.HowManyChar
    
    	def GetEmptySlot(self):
    		if not len(self.EmptySlot):
    			return M2_INIT_VALUE
    
    		#print "GetEmptySlot %s" % self.EmptySlot[0]
    		return self.EmptySlot[0]
    
    	def GetStatPoint(self, slot):
    		return self.Stat_Point[slot]
    
    	def GetGuildNamePlayTime(self, slot):
    		return self.Guild_Name[slot], self.Play_Time[slot]
    
    	def GetChangeName(self, slot):
    		return self.Change_Name[slot]
    
    	def SetChangeNameSuccess(self, slot):
    		self.Change_Name[slot] = 0
    
    	def RefreshData(self):
    		self.HowManyChar = 0
    		self.EmptySlot	=  []
    		self.PriorityData = []
    		self.Race 		= [None, None, None, None, None]
    		self.Guild_Name = [None, None, None, None, None]
    		self.Play_Time 	= [None, None, None, None, None]
    		self.Change_Name= [None, None, None, None, None]
    		self.Stat_Point = { 0: None, 1: None, 2: None, 3: None, 4: None }
    
    
    class SelectCharacterWindow(ui.Window):
    	EMPIRE_NAME = {
    		net.EMPIRE_A: localeInfo.EMPIRE_A,
    		net.EMPIRE_B: localeInfo.EMPIRE_B,
    		net.EMPIRE_C: localeInfo.EMPIRE_C
    	}
    	EMPIRE_NAME_COLOR = {
    		net.EMPIRE_A: (0.7450, 0, 0),
    		net.EMPIRE_B: (0.8666, 0.6156, 0.1843),
    		net.EMPIRE_C: (0.2235, 0.2549, 0.7490)
    	}
    	RACE_FACE_PATH = {
    		playerSettingModule.RACE_WARRIOR_M		:	"D:/ymir work/ui/intro/public_intro/face/face_warrior_m_0",
    		playerSettingModule.RACE_ASSASSIN_W		:	"D:/ymir work/ui/intro/public_intro/face/face_assassin_w_0",
    		playerSettingModule.RACE_SURA_M			:	"D:/ymir work/ui/intro/public_intro/face/face_sura_m_0",
    		playerSettingModule.RACE_SHAMAN_W		:	"D:/ymir work/ui/intro/public_intro/face/face_shaman_w_0",
    		playerSettingModule.RACE_WARRIOR_W		:	"D:/ymir work/ui/intro/public_intro/face/face_warrior_w_0",
    		playerSettingModule.RACE_ASSASSIN_M		:	"D:/ymir work/ui/intro/public_intro/face/face_assassin_m_0",
    		playerSettingModule.RACE_SURA_W			:	"D:/ymir work/ui/intro/public_intro/face/face_sura_w_0",
    		playerSettingModule.RACE_SHAMAN_M		:	"D:/ymir work/ui/intro/public_intro/face/face_shaman_m_0",
    		playerSettingModule.RACE_WOLFMAN_M		:	"D:/ymir work/ui/intro/public_intro/face/face_wolfman_m_0",
    	}
    	DISC_FACE_PATH = {
    		playerSettingModule.RACE_WARRIOR_M		:"d:/ymir work/bin/icon/face/warrior_m.tga",
    		playerSettingModule.RACE_ASSASSIN_W		:"d:/ymir work/bin/icon/face/assassin_w.tga",
    		playerSettingModule.RACE_SURA_M			:"d:/ymir work/bin/icon/face/sura_m.tga",
    		playerSettingModule.RACE_SHAMAN_W		:"d:/ymir work/bin/icon/face/shaman_w.tga",
    		playerSettingModule.RACE_WARRIOR_W		:"d:/ymir work/bin/icon/face/warrior_w.tga",
    		playerSettingModule.RACE_ASSASSIN_M		:"d:/ymir work/bin/icon/face/assassin_m.tga",
    		playerSettingModule.RACE_SURA_W			:"d:/ymir work/bin/icon/face/sura_w.tga",
    		playerSettingModule.RACE_SHAMAN_M		:"d:/ymir work/bin/icon/face/shaman_m.tga",
    		playerSettingModule.RACE_WOLFMAN_M		:"d:/ymir work/bin/icon/face/wolfman_m.tga",
    	}
    	##Job Description##
    	DESCRIPTION_FILE_NAME =	(
    		uiScriptLocale.JOBDESC_WARRIOR_PATH,
    		uiScriptLocale.JOBDESC_ASSASSIN_PATH,
    		uiScriptLocale.JOBDESC_SURA_PATH,
    		uiScriptLocale.JOBDESC_SHAMAN_PATH,
    		uiScriptLocale.JOBDESC_WOLFMAN_PATH,
    	)
    
    	##Job List##
    	JOB_LIST = {
    		0:	localeInfo.JOB_WARRIOR,
    		1:	localeInfo.JOB_ASSASSIN,
    		2:	localeInfo.JOB_SURA,
    		3:	localeInfo.JOB_SHAMAN,
    		4:	localeInfo.JOB_WOLFMAN,
    	}
    
    
    	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)
    			newScreenHeight = float(screenHeight)
    
    			grp.SetViewport(0.0, 0.0, newScreenWidth/screenWidth, newScreenHeight/screenHeight)
    
    			app.SetCenterPosition(0.0, 0.0, 0.0)
    			app.SetCamera(1550.0, 15.0, 180.0, 95.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
    
    		##Init Value##
    		self.SelectSlot = M2_INIT_VALUE
    		self.SelectEmpire = False
    		self.ShowToolTip = False
    		self.select_job = M2_INIT_VALUE
    		self.select_race = M2_INIT_VALUE
    		self.LEN_STATPOINT = 4
    		self.descIndex = 0
    		self.statpoint = [0, 0, 0, 0]
    		self.curGauge  = [0.0, 0.0, 0.0, 0.0]
    		self.Name_FontColor_Def	 = grp.GenerateColor(0.7215, 0.7215, 0.7215, 1.0)
    		self.Name_FontColor		 = grp.GenerateColor(197.0/255.0, 134.0/255.0, 101.0/255.0, 1.0)
    		self.Level_FontColor 	 = grp.GenerateColor(250.0/255.0, 211.0/255.0, 136.0/255.0, 1.0)
    		self.Not_SelectMotion = False
    		self.MotionStart = False
    		self.MotionTime = 0.0
    		self.RealSlot = []
    		self.Disable = False
    
    		for i in xrange(len(M2_CONST_ID)):
    			chr.DeleteInstance(i)
    
    	def __del__(self):
    		ui.Window.__del__(self)
    		net.SetPhaseWindow(net.PHASE_WINDOW_SELECT, 0)
    
    	def Open(self):
    		#print "##---------------------------------------- NEW INTRO SELECT OPEN"
    		playerSettingModule.LoadGameData("INIT")
    
    		dlgBoard = ui.ScriptWindow()
    		self.dlgBoard = dlgBoard
    		pythonScriptLoader = ui.PythonScriptLoader()
    		pythonScriptLoader.LoadScriptFile( self.dlgBoard, "UIScript/SelectCharacterWindow.py" )
    
    		getChild = self.dlgBoard.GetChild
    
    		##Background##
    		self.backGroundDict = {
    			net.EMPIRE_B: "d:/ymir work/ui/intro/empire/background/empire_chunjo.sub",
    			net.EMPIRE_C: "d:/ymir work/ui/intro/empire/background/empire_jinno.sub",
    		}
    		self.backGround = getChild("BackGround")
    
    		##Name List##
    		self.NameList = []
    		self.NameList.append(getChild("name_warrior"))
    		self.NameList.append(getChild("name_assassin"))
    		self.NameList.append(getChild("name_sura"))
    		self.NameList.append(getChild("name_shaman"))
    		self.NameList.append(getChild("name_wolfman"))
    
    		##Empire Flag##
    		self.empireName = getChild("EmpireName")
    		self.flagDict = {
    			net.EMPIRE_B: "d:/ymir work/ui/intro/empire/empireflag_b.sub",
    			net.EMPIRE_C: "d:/ymir work/ui/intro/empire/empireflag_c.sub",
    		}
    
    		self.flag = getChild("EmpireFlag")
    
    		##Button List##
    		self.btnStart		= getChild("start_button")
    		self.btnCreate		= getChild("create_button")
    		self.btnDelete		= getChild("delete_button")
    		self.btnExit		= getChild("exit_button")
    
    		##Face Image##
    		self.FaceImage = []
    		self.FaceImage.append(getChild("CharacterFace_0"))
    		self.FaceImage.append(getChild("CharacterFace_1"))
    		self.FaceImage.append(getChild("CharacterFace_2"))
    		self.FaceImage.append(getChild("CharacterFace_3"))
    		self.FaceImage.append(getChild("CharacterFace_4"))
    
    		##Select Character List##
    		self.CharacterButtonList = []
    		self.CharacterButtonList.append(getChild("CharacterSlot_0"))
    		self.CharacterButtonList.append(getChild("CharacterSlot_1"))
    		self.CharacterButtonList.append(getChild("CharacterSlot_2"))
    		self.CharacterButtonList.append(getChild("CharacterSlot_3"))
    		self.CharacterButtonList.append(getChild("CharacterSlot_4"))
    
    		##ToolTip: GuildName, PlayTime##
    		getChild("CharacterSlot_0").ShowToolTip = lambda arg = 0: self.OverInToolTip(arg)
    		getChild("CharacterSlot_0").HideToolTip = lambda: self.OverOutToolTip()
    		getChild("CharacterSlot_1").ShowToolTip = lambda arg = 1: self.OverInToolTip(arg)
    		getChild("CharacterSlot_1").HideToolTip = lambda: self.OverOutToolTip()
    		getChild("CharacterSlot_2").ShowToolTip = lambda arg = 2: self.OverInToolTip(arg)
    		getChild("CharacterSlot_2").HideToolTip = lambda: self.OverOutToolTip()
    		getChild("CharacterSlot_3").ShowToolTip = lambda arg = 3: self.OverInToolTip(arg)
    		getChild("CharacterSlot_3").HideToolTip = lambda: self.OverOutToolTip()
    		getChild("CharacterSlot_4").ShowToolTip = lambda arg = 4: self.OverInToolTip(arg)
    		getChild("CharacterSlot_4").HideToolTip = lambda: self.OverOutToolTip()
    
    		## ToolTip etc: Create, Delete, Start, Exit, Prev, Next ##
    		getChild("create_button").ShowToolTip = lambda arg = uiScriptLocale.SELECT_CREATE: self.OverInToolTipETC(arg)
    		getChild("create_button").HideToolTip = lambda: self.OverOutToolTip()
    		getChild("delete_button").ShowToolTip = lambda arg = uiScriptLocale.SELECT_DELETE: self.OverInToolTipETC(arg)
    		getChild("delete_button").HideToolTip = lambda: self.OverOutToolTip()
    		getChild("start_button").ShowToolTip = lambda arg = uiScriptLocale.SELECT_SELECT: self.OverInToolTipETC(arg)
    		getChild("start_button").HideToolTip = lambda: self.OverOutToolTip()
    		getChild("exit_button").ShowToolTip = lambda arg = uiScriptLocale.SELECT_EXIT: self.OverInToolTipETC(arg)
    		getChild("exit_button").HideToolTip = lambda: self.OverOutToolTip()
    		getChild("prev_button").ShowToolTip = lambda arg = uiScriptLocale.CREATE_PREV: self.OverInToolTipETC(arg)
    		getChild("prev_button").HideToolTip = lambda: self.OverOutToolTip()
    		getChild("next_button").ShowToolTip = lambda arg = uiScriptLocale.CREATE_NEXT: self.OverInToolTipETC(arg)
    		getChild("next_button").HideToolTip = lambda: self.OverOutToolTip()
    
    		##StatPoint Value##
    		self.statValue = []
    		self.statValue.append(getChild("hth_value"))
    		self.statValue.append(getChild("int_value"))
    		self.statValue.append(getChild("str_value"))
    		self.statValue.append(getChild("dex_value"))
    
    		##Gauge UI##
    		self.GaugeList = []
    		self.GaugeList.append(getChild("hth_gauge"))
    		self.GaugeList.append(getChild("int_gauge"))
    		self.GaugeList.append(getChild("str_gauge"))
    		self.GaugeList.append(getChild("dex_gauge"))
    
    		##Text##
    		self.textBoard = getChild("text_board")
    		self.btnPrev = getChild("prev_button")
    		self.btnNext = getChild("next_button")
    
    		##DescFace##
    		self.discFace = getChild("DiscFace")
    		self.raceNameText = getChild("raceName_Text")
    
    		##MyID##
    		#self.descPhaseText = getChild("desc_phase_text")
    		self.myID = getChild("my_id")
    		self.myID.SetText(net.GetLoginID())
    
    		##Button Event##
    		self.btnStart.SetEvent(ui.__mem_func__(self.StartGameButton))
    		self.btnCreate.SetEvent(ui.__mem_func__(self.CreateCharacterButton))
    		self.btnExit.SetEvent(ui.__mem_func__(self.ExitButton))
    		self.btnDelete.SetEvent(ui.__mem_func__(self.InputPrivateCode))
    
    		##Select MyCharacter##
    		self.CharacterButtonList[0].SetEvent(ui.__mem_func__(self.SelectButton), 0)
    		self.CharacterButtonList[1].SetEvent(ui.__mem_func__(self.SelectButton), 1)
    		self.CharacterButtonList[2].SetEvent(ui.__mem_func__(self.SelectButton), 2)
    		self.CharacterButtonList[3].SetEvent(ui.__mem_func__(self.SelectButton), 3)
    		self.CharacterButtonList[4].SetEvent(ui.__mem_func__(self.SelectButton), 4)
    
    		self.FaceImage[0].SetEvent(ui.__mem_func__(self.EventProgress), "mouse_click", 0)
    		self.FaceImage[1].SetEvent(ui.__mem_func__(self.EventProgress), "mouse_click", 1)
    		self.FaceImage[2].SetEvent(ui.__mem_func__(self.EventProgress), "mouse_click", 2)
    		self.FaceImage[3].SetEvent(ui.__mem_func__(self.EventProgress), "mouse_click", 3)
    		self.FaceImage[4].SetEvent(ui.__mem_func__(self.EventProgress), "mouse_click", 4)
    
    		self.FaceImage[0].SetEvent(ui.__mem_func__(self.EventProgress), "mouse_over_in", 0)
    		self.FaceImage[1].SetEvent(ui.__mem_func__(self.EventProgress), "mouse_over_in", 1)
    		self.FaceImage[2].SetEvent(ui.__mem_func__(self.EventProgress), "mouse_over_in", 2)
    		self.FaceImage[3].SetEvent(ui.__mem_func__(self.EventProgress), "mouse_over_in", 3)
    		self.FaceImage[4].SetEvent(ui.__mem_func__(self.EventProgress), "mouse_over_in", 4)
    
    		self.FaceImage[0].SetEvent(ui.__mem_func__(self.EventProgress), "mouse_over_out", 0)
    		self.FaceImage[1].SetEvent(ui.__mem_func__(self.EventProgress), "mouse_over_out", 1)
    		self.FaceImage[2].SetEvent(ui.__mem_func__(self.EventProgress), "mouse_over_out", 2)
    		self.FaceImage[3].SetEvent(ui.__mem_func__(self.EventProgress), "mouse_over_out", 3)
    		self.FaceImage[4].SetEvent(ui.__mem_func__(self.EventProgress), "mouse_over_out", 4)
    
    		##Job Description##
    		self.btnPrev.SetEvent(ui.__mem_func__(self.PrevDescriptionPage))
    		self.btnNext.SetEvent(ui.__mem_func__(self.NextDescriptionPage))
    
    		##MyCharacter CLASS##
    		self.mycharacters = MyCharacters(self)
    		self.mycharacters.LoadCharacterData()
    
    		if not self.mycharacters.GetMyCharacterCount():
    			self.stream.SetCharacterSlot(self.mycharacters.GetEmptySlot())
    			self.SelectEmpire = True
    
    		##Job Description Box##
    		self.descriptionBox = self.DescriptionBox()
    		self.descriptionBox.Show()
    
    		##Tool Tip(Guild Name, PlayTime)##
    		self.toolTip = uiToolTip.ToolTip()
    		self.toolTip.ClearToolTip()
    
    		self.dlgBoard.Show()
    		self.Show()
    
    		##Empire Flag & Background Setting##
    		my_empire = net.GetEmpireID()
    		self.SetEmpire(my_empire)
    		app.ShowCursor()
    
    		if musicInfo.selectMusic != "":
    			snd.SetMusicVolume(systemSetting.GetMusicVolume())
    			snd.FadeInMusic("BGM/"+musicInfo.selectMusic)
    
    		##Character Render##
    		self.chrRenderer = self.CharacterRenderer()
    		self.chrRenderer.SetParent(self.backGround)
    		self.chrRenderer.Show()
    
    		##Default Setting##
    	def EventProgress(self, event_type, slot) :
    		if self.Disable :
    			return
    
    		if "mouse_click" == event_type :
    			if slot == self.SelectSlot :
    				return
    
    			snd.PlaySound("sound/ui/click.wav")
    			self.SelectButton(slot)
    		elif "mouse_over_in" == event_type :
    			for button in self.CharacterButtonList :
    				button.SetUp()
    
    			self.CharacterButtonList[slot].Over()
    			self.CharacterButtonList[self.SelectSlot].Down()
    			self.OverInToolTip(slot)
    		elif "mouse_over_out" == event_type :
    			for button in self.CharacterButtonList :
    				button.SetUp()
    
    			self.CharacterButtonList[self.SelectSlot].Down()
    			self.OverOutToolTip()
    		else :
    			print " New_introSelect.py ::EventProgress : False"
    
    	def SelectButton(self, slot):
    		#print "self.RealSlot = %s" % self.RealSlot
    		#slot 0 ~ 4
    		if slot >= self.mycharacters.GetMyCharacterCount() or slot == self.SelectSlot:
    			return
    
    		if self.Not_SelectMotion or self.MotionTime != 0.0:
    			self.CharacterButtonList[slot].SetUp()
    			self.CharacterButtonList[slot].Over()
    			return
    
    		for button in self.CharacterButtonList:
    			button.SetUp()
    
    		self.SelectSlot = slot
    		self.CharacterButtonList[self.SelectSlot].Down()
    		self.stream.SetCharacterSlot(self.RealSlot[self.SelectSlot])
    
    		self.select_job = self.mycharacters.GetJob(self.SelectSlot)
    
    		##Job Descirption##
    		event.ClearEventSet(self.descIndex)
    		self.descIndex = event.RegisterEventSet(self.DESCRIPTION_FILE_NAME[self.select_job])
    		event.SetFontColor(self.descIndex, 0.7843, 0.7843, 0.7843)
    		event.SetRestrictedCount(self.descIndex, 35)
    
    		if event.BOX_VISIBLE_LINE_COUNT >= event.GetTotalLineCount(self.descIndex) :
    			self.btnPrev.Hide()
    			self.btnNext.Hide()
    		else :
    			self.btnPrev.Show()
    			self.btnNext.Show()
    		self.ResetStat()
    
    		## Setting ##
    		for i in xrange(len(self.NameList)):
    			if self.select_job == i	:
    				self.NameList[i].SetAlpha(1)
    			else:
    				self.NameList[i].SetAlpha(0)
    
    		## Face Setting & Font Color Setting ##
    		self.select_race = self.mycharacters.GetRace(self.SelectSlot)
    		#print "self.mycharacters.GetMyCharacterCount() = %s" % self.mycharacters.GetMyCharacterCount()
    		for i in xrange(self.mycharacters.GetMyCharacterCount()):
    			if slot == i:
    				self.FaceImage[slot].LoadImage(self.RACE_FACE_PATH[self.select_race] + "1.sub")
    				self.CharacterButtonList[slot].SetAppendTextColor(0, self.Name_FontColor)
    			else:
    				self.FaceImage[i].LoadImage(self.RACE_FACE_PATH[self.mycharacters.GetRace(i)] + "2.sub")
    				self.CharacterButtonList[i].SetAppendTextColor(0, self.Name_FontColor_Def)
    
    		## Desc Face & raceText Setting ##
    		self.discFace.LoadImage(self.DISC_FACE_PATH[self.select_race])
    		self.raceNameText.SetText(self.JOB_LIST[self.select_job])
    
    		chr.Hide()
    		chr.SelectInstance(self.SelectSlot)
    		chr.Show()
    
    	def Close(self):
    		#print "##---------------------------------------- NEW INTRO SELECT CLOSE"
    		del self.mycharacters
    		self.EMPIRE_NAME = None
    		self.EMPIRE_NAME_COLOR = None
    		self.RACE_FACE_PATH = None
    		self.DISC_FACE_PATH = None
    		self.DESCRIPTION_FILE_NAME = None
    		self.JOB_LIST = None
    
    		##Default Value##
    		self.SelectSlot = None
    		self.SelectEmpire = None
    		self.ShowToolTip = None
    		self.LEN_STATPOINT = None
    		self.descIndex = None
    		self.statpoint = None
    		self.curGauge  = None
    		self.Name_FontColor_Def	 = None
    		self.Name_FontColor		 = None
    		self.Level_FontColor 	 = None
    		self.Not_SelectMotion = None
    		self.MotionStart = None
    		self.MotionTime = None
    		self.RealSlot = None
    
    		self.select_job = None
    		self.select_race = None
    
    		##Open Func##
    		self.dlgBoard = None
    		self.backGround = None
    		self.backGroundDict = None
    		self.NameList = None
    		self.empireName = None
    		self.flag = None
    		self.flagDict = None
    		self.btnStart = None
    		self.btnCreate = None
    		self.btnDelete = None
    		self.btnExit = None
    		self.FaceImage = None
    		self.CharacterButtonList = None
    		self.statValue = None
    		self.GaugeList = None
    		self.textBoard = None
    		self.btnPrev = None
    		self.btnNext = None
    		self.raceNameText = None
    		#self.descPhaseText = None
    		self.myID = None
    
    		self.descriptionBox = None
    		self.toolTip = None
    		self.Disable = None
    
    		if musicInfo.selectMusic != "":
    			snd.FadeOutMusic("BGM/"+musicInfo.selectMusic)
    
    		self.Hide()
    		self.KillFocus()
    		app.HideCursor()
    		event.Destroy()
    
    	def SetEmpire(self, empire_id):
    		self.empireName.SetText(self.EMPIRE_NAME.get(empire_id, ""))
    		rgb = self.EMPIRE_NAME_COLOR[empire_id]
    		self.empireName.SetFontColor(rgb[0], rgb[1], rgb[2])
    		if empire_id != net.EMPIRE_A:
    			self.flag.LoadImage(self.flagDict[empire_id])
    			self.flag.SetScale(0.45, 0.45)
    			self.backGround.LoadImage(self.backGroundDict[empire_id])
    			self.backGround.SetScale(float(wndMgr.GetScreenWidth()) / 1024.0, float(wndMgr.GetScreenHeight()) / 768.0)
    
    	def CreateCharacterButton(self):
    		slotNumber = self.mycharacters.GetEmptySlot()
    
    		if slotNumber == M2_INIT_VALUE:
    			self.stream.popupWindow.Close()
    			self.stream.popupWindow.Open(localeInfo.CREATE_FULL, 0, localeInfo.UI_OK)
    			return
    
    		pid = self.GetCharacterSlotPID(slotNumber)
    
    		if not pid:
    			self.stream.SetCharacterSlot(slotNumber)
    
    			if not self.mycharacters.GetMyCharacterCount():
    				self.SelectEmpire = True
    			else:
    				self.stream.SetCreateCharacterPhase()
    				self.Hide()
    
    	def ExitButton(self):
    		self.stream.SetLoginPhase()
    		self.Hide()
    
    	def StartGameButton(self):
    		if not self.mycharacters.GetMyCharacterCount() or self.MotionTime != 0.0:
    			return
    
    		self.DisableWindow()
    
    		IsChangeName = self.mycharacters.GetChangeName(self.SelectSlot)
    		if IsChangeName:
    			self.OpenChangeNameDialog()
    			return
    
    		chr.PushOnceMotion(chr.MOTION_INTRO_SELECTED)
    		self.MotionStart = True
    		self.MotionTime = app.GetTime()
    
    	def OnUpdate(self):
    		chr.Update()
    		self.ToolTipProgress()
    
    		if self.SelectEmpire:
    			self.SelectEmpire = False
    			self.stream.SetReselectEmpirePhase()
    			self.Hide()
    
    		if self.MotionStart and app.GetTime() - self.MotionTime >= 0.2 :
    			self.MotionStart = False
    			#print " Start Game "
    			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)
    			import chat
    			chat.Clear()
    
    		(xposEventSet, yposEventSet) = self.textBoard.GetGlobalPosition()
    		event.UpdateEventSet(self.descIndex, xposEventSet+7, -(yposEventSet+7))
    		self.descriptionBox.SetIndex(self.descIndex)
    
    		for i in xrange(self.LEN_STATPOINT):
    			self.GaugeList[i].SetPercentage(self.curGauge[i], 1.0)
    
    	# def Refresh(self):
    	def GetCharacterSlotPID(self, slotIndex):
    		return net.GetAccountCharacterSlotDataInteger(slotIndex, net.ACCOUNT_CHARACTER_SLOT_ID)
    
    	def All_ButtonInfoHide(self):
    		for i in xrange(CHARACTER_SLOT_COUNT_MAX):
    			self.CharacterButtonList[i].Hide()
    			self.FaceImage[i].Hide()
    
    	def InitDataSet(self, slot, name, level, real_slot):
    		width = self.CharacterButtonList[slot].GetWidth()
    		height = self.CharacterButtonList[slot].GetHeight()
    
    		self.CharacterButtonList[slot].AppendTextLine(name				, localeInfo.UI_DEF_FONT, self.Name_FontColor_Def	, "right", width - 12, height/4 + 2)
    		self.CharacterButtonList[slot].AppendTextLine("Lv." + str(level), localeInfo.UI_DEF_FONT, self.Level_FontColor		, "left", width - 42, height*3/4)
    
    		self.CharacterButtonList[slot].Show()
    		self.FaceImage[slot].LoadImage(self.RACE_FACE_PATH[self.mycharacters.GetRace(slot)] + "2.sub")
    		self.FaceImage[slot].Show()
    		self.RealSlot.append(real_slot)
    
    	def InputPrivateCode(self):
    		if not self.mycharacters.GetMyCharacterCount():
    			return
    
    		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
    
    		self.DisableWindow()
    
    		if not self.Not_SelectMotion:
    			self.Not_SelectMotion = True
    			chr.PushOnceMotion(chr.MOTION_INTRO_NOT_SELECTED, 0.1)
    
    	def AcceptInputPrivateCode(self):
    		privateCode = self.privateInputBoard.GetText()
    		if not privateCode:
    			return
    
    		pid = net.GetAccountCharacterSlotDataInteger(self.RealSlot[self.SelectSlot], net.ACCOUNT_CHARACTER_SLOT_ID)
    
    		if not pid:
    			self.PopupMessage(localeInfo.SELECT_EMPTY_SLOT)
    			return
    
    		net.SendDestroyCharacterPacket(self.RealSlot[self.SelectSlot], privateCode)
    		self.PopupMessage(localeInfo.SELECT_DELEING)
    
    		self.CancelInputPrivateCode()
    		return True
    
    	def CancelInputPrivateCode(self):
    		self.privateInputBoard = None
    		self.Not_SelectMotion = False
    		chr.SetLoopMotion(chr.MOTION_INTRO_WAIT)
    		self.EnableWindow()
    		return True
    
    	def OnDeleteSuccess(self, slot):
    		self.PopupMessage(localeInfo.SELECT_DELETED)
    		for i in xrange(len(self.RealSlot)):
    			chr.DeleteInstance(i)
    
    		self.RealSlot = []
    		self.SelectSlot = M2_INIT_VALUE
    
    		for button in self.CharacterButtonList:
    			button.AppendTextLineAllClear()
    
    		if not self.mycharacters.LoadCharacterData():
    			self.stream.popupWindow.Close()
    			self.stream.SetCharacterSlot(self.mycharacters.GetEmptySlot())
    			self.SelectEmpire = True
    
    	def OnDeleteFailure(self):
    		self.PopupMessage(localeInfo.SELECT_CAN_NOT_DELETE)
    
    	def EmptyFunc(self):
    		pass
    
    	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 RefreshStat(self):
    		statSummary = 90.0
    		self.curGauge =	[
    			float(self.statpoint[0])/statSummary,
    			float(self.statpoint[1])/statSummary,
    			float(self.statpoint[2])/statSummary,
    			float(self.statpoint[3])/statSummary,
    		]
    
    		for i in xrange(self.LEN_STATPOINT):
    			self.statValue[i].SetText(str(self.statpoint[i]))
    
    	def ResetStat(self):
    		myStatPoint = self.mycharacters.GetStatPoint(self.SelectSlot)
    
    		if not myStatPoint:
    			return
    
    		for i in xrange(self.LEN_STATPOINT):
    			self.statpoint[i] = myStatPoint[i]
    
    		self.RefreshStat()
    
    	##Job Description Prev & Next Button##
    	def PrevDescriptionPage(self):
    		if True == event.IsWait(self.descIndex):
    			if event.GetVisibleStartLine(self.descIndex) - event.BOX_VISIBLE_LINE_COUNT >= 0:
    				event.SetVisibleStartLine(self.descIndex, event.GetVisibleStartLine(self.descIndex) - event.BOX_VISIBLE_LINE_COUNT)
    				event.Skip(self.descIndex)
    		else:
    			event.Skip(self.descIndex)
    
    	def NextDescriptionPage(self):
    		if True == event.IsWait(self.descIndex):
    			event.SetVisibleStartLine(self.descIndex, event.GetVisibleStartLine(self.descIndex) + event.BOX_VISIBLE_LINE_COUNT)
    			event.Skip(self.descIndex)
    		else:
    			event.Skip(self.descIndex)
    
    	##ToolTip: GuildName, PlayTime##
    	def OverInToolTip(self, slot):
    		GuildName = localeInfo.GUILD_NAME
    		myGuildName, myPlayTime = self.mycharacters.GetGuildNamePlayTime(slot)
    		pos_x, pos_y = self.CharacterButtonList[slot].GetGlobalPosition()
    
    		if not myGuildName:
    			myGuildName = localeInfo.SELECT_NOT_JOIN_GUILD
    
    		guild_name = GuildName + " : " + myGuildName
    		play_time = uiScriptLocale.SELECT_PLAYTIME + " :"
    		day = myPlayTime / (60 * 24)
    		if day:
    			play_time = play_time + " " + str(day) + localeInfo.DAY
    		hour = (myPlayTime - (day * 60 * 24))/60
    		if hour:
    			play_time = play_time + " " + str(hour) + localeInfo.HOUR
    		min = myPlayTime - (hour * 60) - (day * 60 * 24)
    
    		play_time = play_time + " " + str(min) + localeInfo.MINUTE
    
    		textlen = max(len(guild_name), len(play_time))
    		tooltip_width = 6 * textlen + 22
    
    		self.toolTip.ClearToolTip()
    		self.toolTip.SetThinBoardSize(tooltip_width)
    
    		self.toolTip.SetToolTipPosition(pos_x + 173 + tooltip_width/2, pos_y + 34)
    		self.toolTip.AppendTextLine(guild_name, 0xffe4cb1b, False) 	##YELLOW##
    		self.toolTip.AppendTextLine(play_time, 0xffffff00, False) 	##YELLOW##
    
    		self.toolTip.Show()
    
    	def OverInToolTipETC(self, arg):
    		arglen = len(str(arg))
    		pos_x, pos_y = wndMgr.GetMousePosition()
    
    		self.toolTip.ClearToolTip()
    		self.toolTip.SetThinBoardSize(11 * arglen)
    		self.toolTip.SetToolTipPosition(pos_x + 50, pos_y + 50)
    		self.toolTip.AppendTextLine(arg, 0xffffff00)
    		self.toolTip.Show()
    		self.ShowToolTip = True
    
    	def OverOutToolTip(self):
    		self.toolTip.Hide()
    		self.ShowToolTip = False
    
    	def ToolTipProgress(self):
    		if self.ShowToolTip:
    			pos_x, pos_y = wndMgr.GetMousePosition()
    			self.toolTip.SetToolTipPosition(pos_x + 50, pos_y + 50)
    
    	def SameLoginDisconnect(self):
    		self.stream.popupWindow.Close()
    		self.stream.popupWindow.Open(localeInfo.LOGIN_FAILURE_SAMELOGIN, self.ExitButton, localeInfo.UI_OK)
    
    	def OnKeyDown(self, key):
    		if self.MotionTime != 0.0:
    			return
    
    		if 1 == key: #ESC
    			self.ExitButton()
    		elif 2 == key: #1
    			self.SelectButton(0)
    		elif 3 == key:
    			self.SelectButton(1)
    		elif 4 == key:
    			self.SelectButton(2)
    		elif 5 == key:
    			self.SelectButton(3)
    		elif 6 == key:
    			self.SelectButton(4)
    		elif 28 == key: #and not self.stream.popupWindow.IsShow():
    			self.StartGameButton()
    		elif 200 == key or 208 == key:
    			self.KeyInputUpDown(key)
    		else:
    			return True
    
    		return True
    
    	def KeyInputUpDown(self, key):
    		idx = self.SelectSlot
    		maxValue = self.mycharacters.GetMyCharacterCount()
    		if 200 == key: #UP
    			idx = idx - 1
    			if idx < 0:
    				idx = maxValue - 1
    
    		elif 208 == key: #DOWN
    			idx = idx + 1
    			if idx >= maxValue:
    				idx = 0
    		else:
    			self.SelectButton(0)
    
    		self.SelectButton(idx)
    
    	def OnPressExitKey(self):
    		self.ExitButton()
    		return True
    
    	def DisableWindow(self):
    		self.btnStart.Disable()
    		self.btnCreate.Disable()
    		self.btnExit.Disable()
    		self.btnDelete.Disable()
    		self.btnPrev.Disable()
    		self.btnNext.Disable()
    		self.toolTip.Hide()
    		self.ShowToolTip = False
    		self.Disable = True
    		for button in self.CharacterButtonList:
    			button.Disable()
    
    		self.CharacterButtonList[self.SelectSlot].Down()
    
    	def EnableWindow(self):
    		self.btnStart.Enable()
    		self.btnCreate.Enable()
    		self.btnExit.Enable()
    		self.btnDelete.Enable()
    		self.btnPrev.Enable()
    		self.btnNext.Enable()
    		self.Disable = False
    		for button in self.CharacterButtonList:
    			button.Enable()
    
    		self.CharacterButtonList[self.SelectSlot].Down()
    
    	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.RealSlot[self.SelectSlot]
    		self.nameInputBoard = nameInputBoard
    
    	def AcceptInputName(self):
    		changeName = self.nameInputBoard.GetText()
    		if not changeName:
    			return
    
    		net.SendChangeNamePacket(self.nameInputBoard.slot, changeName)
    		return self.CancelInputName()
    
    	def CancelInputName(self):
    		self.nameInputBoard.Close()
    		self.nameInputBoard = None
    		self.EnableWindow()
    		return True
    
    	def OnCreateFailure(self, type):
    		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 OnChangeName(self, slot, name):
    		for i in xrange(len(self.RealSlot)):
    			if self.RealSlot[i] == slot:
    				self.ChangeNameButton(i, name)
    				self.SelectButton(i)
    				self.PopupMessage(localeInfo.SELECT_CHANGED_NAME)
    				break
    
    	def ChangeNameButton(self, slot, name):
    		self.CharacterButtonList[slot].SetAppendTextChangeText(0, name)
    		self.mycharacters.SetChangeNameSuccess(slot)

     

  5. here are my module functions for playermodule.cpp.

     

    PyObject * playerGetLevel(PyObject* poSelf, PyObject* poArgs)
    {
    	return Py_BuildValue("i", CPythonPlayer::Instance().GetStatus(POINT_LEVEL));
    }
    PyObject * playerGetConquerorLevel(PyObject* poSelf, PyObject* poArgs)
    {
    	return Py_BuildValue("i", CPythonPlayer::Instance().GetStatus(POINT_CONQUEROR_LEVEL));
    }

     

    		if player.GetConquerorLevel() >= 1:
    			self.CharacterButtonList[slot].AppendTextLine("Lv." + str(conquerorlevel), localeInfo.UI_DEF_FONT, self.ConquerorLevel_FontColor		, "left", width - 42, height*3/4)
    		else:
    			self.CharacterButtonList[slot].AppendTextLine("Lv." + str(level), localeInfo.UI_DEF_FONT, self.Level_FontColor		, "left", width - 42, height*3/4)

    When I use it this way, it does not affect in any way. Shows a Yohara level player as 120 levels.

    spacer.png

  6. packet.h

    typedef struct SSimplePlayerInformation
    #ifdef ENABLE_CONQUEROR_LEVEL
        BYTE byConquerorLevel;
    #endif


    phytonnetworkstream.cpp

    #ifdef ENABLE_CONQUEROR_LEVEL
            case ACCOUNT_CHARACTER_SLOT_CONQUEROR:
                return rkSimplePlayerInfo.byConquerorLevel;
    #endif

    networkstream.h

    #ifdef ENABLE_CONQUEROR_LEVEL
                ACCOUNT_CHARACTER_SLOT_CONQUEROR,
    #endif

    phaseloading.cpp

            else if (i == POINT_CONQUEROR_LEVEL)
                m_akSimplePlayerInfo[m_dwSelectedCharacterIndex].byConquerorLevel = PointsPacket.points[i];

    networkstreammodule.cpp

    #ifdef ENABLE_CONQUEROR_LEVEL
        PyModule_AddIntConstant(poModule, "ACCOUNT_CHARACTER_SLOT_CONQUEROR", CPythonNetworkStream::ACCOUNT_CHARACTER_SLOT_CONQUEROR);
    #endif

    common/tables.h

    typedef struct SSimplePlayer
    {

    #ifdef ENABLE_CONQUEROR_LEVEL
        BYTE        byConquerorLevel;
    #endif

     

    db/src (All add-ons for clientmanagerlogin.cpp are made)

     

    introselect.py

     

    class MyCharacters:
    	class MyUnit:
    		def __init__(self, const_id, name, level, conquerorlevel, race, playtime, guildname, form, hair, stat_str, stat_dex, stat_hth, stat_int, change_name):
    			self.UnitDataDic = {
    				"ID" 				: 	const_id,
    				"NAME"				:	name,
    				"LEVEL"				:	level,
    				"CONQUERORLEVEL"	:	conquerorlevel,
    				"RACE"				:	race,
    				"PLAYTIME"			:	playtime,
    				"GUILDNAME"			:	guildname,
    				"FORM"				:	form,
    				"HAIR"				:	hair,
    				"STR"				:	stat_str,
    				"DEX"				:	stat_dex,
    				"HTH"				:	stat_hth,
    				"INT"				:	stat_int,
    				"CHANGENAME"		:	change_name,
    			}


    and

                conquerorlevel            = net.GetAccountCharacterSlotDataInteger(i, net.ACCOUNT_CHARACTER_SLOT_CONQUEROR)
     

    and

     

    			if last_playtime <= 0:
    				PrepareLastPlay += 1
    				self.SetPriorityData(PrepareLastPlay)
    				self.myUnitDic[PrepareLastPlay] = self.MyUnit(i, name, level, conquerorlevel, race, playtime, guildname, form, hair, stat_str, stat_dex, stat_hth, stat_int, change_name) #last_playtimeself.myUnitDic[i] = self.MyUnit(i, name, level, race, playtime, guildname, form, hair, stat_str, stat_dex, stat_hth, stat_int, change_name) #last_playtime
    			else:
    				self.SetPriorityData(last_playtime)
    				self.myUnitDic[last_playtime] = self.MyUnit(i, name, level, conquerorlevel, race, playtime, guildname, form, hair, stat_str, stat_dex, stat_hth, stat_int, change_name) #last_playtime

     

    and

     

    			self.MainStream.InitDataSet(index, DestDataDic["NAME"], DestDataDic["LEVEL"], DestDataDic["CONQUERORLEVEL"], DestDataDic["ID"])

     

    and 

     

    		if app.ENABLE_CONQUEROR_LEVEL:
    			self.ConquerorLevel_FontColor	 = grp.GenerateColor(140.0/255.0, 200.0/255.0, 255.0/255.0, 1.0);

     

    		if app.ENABLE_CONQUEROR_LEVEL:
    			self.ConquerorLevel_FontColor 	 = None

     

     

    so far, everything is very good. 
     

    But when the player is at normal level Lv. (Normal Level and level color)

    How can I do this when I am at the yohara level Lv. (Yohara level and yohara color). I've tried code many times but it always shows yohara level.

    I'm sorry for my bad english.

    MY EXAMPLE CODE :

    		# if player.GetLevel <= 120:
    			# self.CharacterButtonList[slot].AppendTextLine("Lv." + str(level), localeInfo.UI_DEF_FONT, self.Level_FontColor		, "left", width - 42, height*3/4)
    		# else:
    			# self.CharacterButtonList[slot].AppendTextLine("Lv." + str(conquerorlevel), localeInfo.UI_DEF_FONT, self.ConquerorLevel_FontColor		, "left", width - 42, height*3/4)
    
    		# self.CharacterButtonList[slot].AppendTextLine("Lv." + str(level), localeInfo.UI_DEF_FONT, self.Level_FontColor		, "left", width - 42, height*3/4)
    
    		# if player.GetConquerorLevel >= 1:
    			# self.CharacterButtonList[slot].AppendTextLine("Lv." + str(conquerorlevel), localeInfo.UI_DEF_FONT, self.ConquerorLevel_FontColor		, "left", width - 42, height*3/4)
    		# else:
    			# self.CharacterButtonList[slot].AppendTextLine("Lv." + str(level), localeInfo.UI_DEF_FONT, self.Level_FontColor		, "left", width - 42, height*3/4)

     

    Here are a Few Pictures:

    spacer.png
     

    spacer.png  spacer.png

    Thank you for wanting to help.

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