Jump to content

Sneaky Sneaky

Inactive Member
  • Posts

    21
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by Sneaky Sneaky

  1. i recommend using mariadb as mentioned,

    For compiling your source you will need gcc49.

    download this:

    This is the hidden content, please

    Run it on a Virtual Machine on your windows. Install it on your locale network - see tutorials

    user: root
    pw: dev

    this virtual machine has gcc installed and works perfectly

    put your source on /usr/src

    and on putty

    cd /usr/src/your path/game or cd /usr/src/your path/db

    gmake clean

    gmake dep

    gmake -j20
     

    • Metin2 Dev 42
    • Eyes 1
    • Scream 1
    • Good 21
    • Love 1
    • Love 21
  2. 59 minutes ago, dumita123 said:

     

    import uvvY2sBNvVcbJz4jvDr6fSWYdmqv9NPQ as pythonApi
    app = __import__(pythonApi.GetModuleName("app"))
    chr = __import__(pythonApi.GetModuleName("chr"))
    player = __import__(pythonApi.GetModuleName("player"))
    net = __import__(pythonApi.GetModuleName("net"))
    skill = __import__(pythonApi.GetModuleName("skill"))
    quest = __import__(pythonApi.GetModuleName("quest"))
    event = __import__(pythonApi.GetModuleName("event"))
    chat = __import__(pythonApi.GetModuleName("chat"))
    systemSetting = __import__(pythonApi.GetModuleName("systemSetting"))
    import ui
    import uiScriptLocale
    import dbg
    import snd
    import mouseModule
    import wndMgr
    import playerSettingModule
    import localeInfo
    import uiToolTip
    import constInfo
    import emotion
    import grp
    import uiCommon
    if app.ENABLE_DETAILS_UI:
    	import uiCharacterDetails
    import uiQuest
    import interfaceModule
    import math
    
    #Hizli-Menu#
    import gameInfo
    import uiskybox
    import uiesyaislem
    import uiefsunlar
    # import uiswitchbot
    import uikeyboardsettings
    import guvenli
    import uifastequip
    import uiisinlanma
    import uiinterfececolor
    if app.ENABLE_SKILL_COLOR_SYSTEM:
    	import uiSkillColor
    import uiRutbeBilgi
    
    SHOW_ONLY_ACTIVE_SKILL = FALSE
    SHOW_LIMIT_SUPPORT_SKILL_LIST = []
    HIDE_SUPPORT_SKILL_POINT = TRUE
    
    SHOW_LIMIT_SUPPORT_SKILL_LIST = [121, 122, 123, 124, 126, 127, 129, 128, 131, 137, 138, 139, 140, 141, 142]
    
    FACE_IMAGE_DICT = {
    	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/wolfman_m.tga",
    }
    def unsigned32(n):
    	return n & 0xFFFFFFFFL
    	
    quest_slot_listbar = {
    	"name" : "Quest_Slot",
    	"type" : "listbar",
        
    	"x" : 0,
    	"y" : 0,
    
    	"width" : 210,
    	"height" : 20,
    	"text" : "Quest title",
    	"align" : "left",
    	"horizontal_align" : "left",
    	"vertical_align" : "left",
    	"text_horizontal_align" : "left",
    	"all_align" : "left",
    	"text_height": 20
    }
    	
    class CharacterWindow(ui.ScriptWindow):
    
    	ACTIVE_PAGE_SLOT_COUNT = 8
    	SUPPORT_PAGE_SLOT_COUNT = 12
    
    	PAGE_SLOT_COUNT = 12
    	PAGE_HORSE = 2
    
    	SKILL_GROUP_NAME_DICT = {
    		playerSettingModule.JOB_WARRIOR	: { 1 : localeInfo.SKILL_GROUP_WARRIOR_1,	2 : localeInfo.SKILL_GROUP_WARRIOR_2, },
    		playerSettingModule.JOB_ASSASSIN	: { 1 : localeInfo.SKILL_GROUP_ASSASSIN_1,	2 : localeInfo.SKILL_GROUP_ASSASSIN_2, },
    		playerSettingModule.JOB_SURA		: { 1 : localeInfo.SKILL_GROUP_SURA_1,		2 : localeInfo.SKILL_GROUP_SURA_2, },
    		playerSettingModule.JOB_SHAMAN		: { 1 : localeInfo.SKILL_GROUP_SHAMAN_1,	2 : localeInfo.SKILL_GROUP_SHAMAN_2, },
    		playerSettingModule.JOB_WOLFMAN		: { 1 : "έη Gόdό",	2 : "N.A", },		
    	}
    
    	STAT_DESCRIPTION =	{
    		"HTH" : localeInfo.STAT_TOOLTIP_CON,
    		"INT" : localeInfo.STAT_TOOLTIP_INT,
    		"STR" : localeInfo.STAT_TOOLTIP_STR,
    		"DEX" : localeInfo.STAT_TOOLTIP_DEX,
    		"HTH_QUICK" : localeInfo.STAT_TOOLTIP_CON_QUICK,
    		"INT_QUICK" : localeInfo.STAT_TOOLTIP_INT_QUICK,
    		"STR_QUICK" : localeInfo.STAT_TOOLTIP_STR_QUICK,
    		"DEX_QUICK" : localeInfo.STAT_TOOLTIP_DEX_QUICK,
    	}
    
    	MAX_QUEST_HEIGHT = 275
    
    	STAT_MINUS_DESCRIPTION = localeInfo.STAT_MINUS_DESCRIPTION
    
    	def __init__(self):
    
    		if app.ENABLE_DETAILS_UI:
    			self.chDetailsWnd = None
    			self.isOpenedDetailsWnd = False
    
    		if app.ENABLE_SKILL_COLOR_SYSTEM:
    			self.skillColorWnd = None
    			self.skillColorButton = []
    
    		ui.ScriptWindow.__init__(self)
    		self.state = "STATUS"
    		self.isLoaded = 0
    		self.finishFirstLoad = False
    		
    		self.toolTipSkill = 0
    				
    		self.__Initialize()
    		self.__LoadWindow()
    		
    		#Hizli-Menu#
    		self.keyboardsettings = uikeyboardsettings.KeyChangeWindow()
    		self.keyboardsettings.Hide()
    		#Hizli-Menu#
    
    		self.statusPlusCommandDict={
    			"HTH" : "/stat ht",
    			"INT" : "/stat iq",
    			"STR" : "/stat st",
    			"DEX" : "/stat dx",
    		}
    		
    		self.statusHizliPlusCommandDict={
    			"HTH_QUICK" : "/hizlistatuver ht",
    			"INT_QUICK" : "/hizlistatuver iq",
    			"STR_QUICK" : "/hizlistatuver st",
    			"DEX_QUICK" : "/hizlistatuver dx",
    		}
    
    		self.statusMinusCommandDict={
    			"HTH-" : "/stat- ht",
    			"INT-" : "/stat- iq",
    			"STR-" : "/stat- st",
    			"DEX-" : "/stat- dx",
    		}
    
    	def __del__(self):
    		ui.ScriptWindow.__del__(self)
    
    	def __Initialize(self):
    		self.refreshToolTip = 0
    		self.curSelectedSkillGroup = 0
    		self.canUseHorseSkill = -1
    
    		self.toolTip = None
    		self.toolTipJob = None
    		self.toolTipAlignment = None
    		self.toolTipSkill = None
    
    		self.faceImage = None
    		self.statusPlusLabel = None
    		self.statusPlusValue = None
    		self.activeSlot = None
    		self.tabDict = None
    		self.tabButtonDict = None
    		self.pageDict = None
    		self.titleBarDict = None
    		self.statusPlusButtonDict = None
    		self.statusHizliPlusButtonDict = None
    		self.statusMinusButtonDict = None
    
    		self.skillPageDict = None
    		self.skillGroupButton = ()
    
    		self.activeSlot = None
    		self.activeSkillPointValue = None
    		self.supportSkillPointValue = None
    		self.skillGroupButton1 = None
    		self.skillGroupButton2 = None
    		self.activeSkillGroupName = None
    
    		self.guildNameSlot = None
    		self.guildNameValue = None
    		self.characterNameSlot = None
    		self.characterNameValue = None
    
    		self.emotionToolTip = None
    		self.soloEmotionSlot = None
    		self.dualEmotionSlot = None
    
    		self.questScrollBar = None
    		self.lastScrollPosition = 0
    		self.questBoard = None
    		self.questPage = None
    		self.questTitleBar = None
    		self.questShowingStartIndex = 0
    		self.wndQuestSlideWindow = {}
    		self.wndQuestSlideWindowNewKey = 0
    		self.category_flag = -1
    		self.cnt = -1
    		#self.lp_x = 0
    		#self.lp_y = 0
    		self.slotIndex = 0
    		self.questCategoryList = None
    		#self.IsOpenCategoryList = None
    		self.IsSameFlag = False
    		self.willOpenCategory = None
    
    		# Colored quests/categories
    		self.qColorList = {'green': 0xFF83C055, 'blue': 0xFF45678D, 'golden': 0xFFCAB62F, 'default_title': 0xFFFFE3AD}
    
    		# New quest stuff
    		self.maxConcurrentCategories = 1 # NOTE! The current implementation of the system assumes at some places that
    										 # there can only be one category open at a given time (as the original did)
    		self.openCategories = []
    		self.clickedQuests = []
    		self.questIndexMap = {}		
    		self.displayY = 0
    		self.extraSpace = 0
    		self.counterList = []
    		self.clockList = []
    		self.catPositionRender = []
    		self.baseCutY = 0
    		
    		#Hizli-Menu#
    		self.HizliIsinlanma = None
    		self.HizliEfsunBotu = None
    		self.HizliMarketAra = None
    		self.HizliAtCagir = None
    		self.HizliEkipman = None
    		self.HizliTicaretGecmis = None
    		self.HizliPet = None
    		self.HizliAfrodit = None
    		self.HizliYoutuber = None
    		self.HizliGuvenliPc = None
    		self.HizliUzakMarket = None
    		self.HizliBossSiralamasi = None
    		self.HizliStatus = None
    		self.HizliTamEkran = None
    		self.HizliOtoTopla = None
    		self.HizliOtoYang = None
    		self.HizliGeceGunduz = None
    		self.HizliKarliZemin = None
    		self.HizliKarYagdirma = None
    		self.HizliBonusPenceresi = None
    		#Hizli-Menu#
    		
    	if app.ENABLE_DETAILS_UI:
    		def OnTop(self):
    			if self.chDetailsWnd:
    				self.chDetailsWnd.SetTop()
    
    	if app.ENABLE_DETAILS_UI:
    		def Hide(self):
    			if self.chDetailsWnd:
    				self.isOpenedDetailsWnd = self.chDetailsWnd.IsShow()
    				self.chDetailsWnd.Close()
    			wndMgr.Hide(self.hWnd)
    
    	def Show(self):
    		self.__LoadWindow()
    		
    		if app.ENABLE_DETAILS_UI:
    			self.__InitCharacterDetailsUIButton()
    			if self.chDetailsWnd and self.isOpenedDetailsWnd:
    				self.chDetailsWnd.Show()
    
    		ui.ScriptWindow.Show(self)
    
    	def __LoadScript(self, fileName):
    		pyScrLoader = ui.PythonScriptLoader()
    		pyScrLoader.LoadScriptFile(self, fileName)	
    		
    	def __BindObject(self):
    		self.toolTip = uiToolTip.ToolTip()
    		self.toolTipJob = uiToolTip.ToolTip()
    		self.toolTipAlignment = uiToolTip.ToolTip(130)		
    
    		self.faceImage = self.GetChild("Face_Image")
    
    		faceSlot=self.GetChild("Face_Slot")
    		if 949 == app.GetDefaultCodePage():
    			faceSlot.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowJobToolTip)
    			faceSlot.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideJobToolTip)
    
    		self.statusPlusLabel = self.GetChild("Status_Plus_Label")
    		self.statusPlusValue = self.GetChild("Status_Plus_Value")
    		
    		self.characterNameSlot = self.GetChild("Character_Name_Slot")			
    		self.characterNameValue = self.GetChild("Character_Name")
    		self.guildNameSlot = self.GetChild("Guild_Name_Slot")
    		self.guildNameValue = self.GetChild("Guild_Name")
    		self.characterNameSlot.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowAlignmentToolTip)
    		self.characterNameSlot.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideAlignmentToolTip)
    
    		self.activeSlot = self.GetChild("Skill_Active_Slot")
    		self.activeSkillPointValue = self.GetChild("Active_Skill_Point_Value")
    		self.supportSkillPointValue = self.GetChild("Support_Skill_Point_Value")
    		self.skillGroupButton1 = self.GetChild("Skill_Group_Button_1")
    		self.skillGroupButton2 = self.GetChild("Skill_Group_Button_2")
    		self.activeSkillGroupName = self.GetChild("Active_Skill_Group_Name")
    		
    		self.questBoard = self.GetChild("board")
    		self.questPage = self.GetChild("Quest_Page")
    		self.questTitleBar = self.GetChild("Quest_TitleBar")
    		self.questShowingStartIndex = 0	
    		self.questSlotList = []
    		self.questCategoryList=[]
    
    		self.tabDict = {
    			"STATUS"	: self.GetChild("Tab_01"),
    			"SKILL"		: self.GetChild("Tab_02"),
    			"EMOTICON"	: self.GetChild("Tab_03"),
    			"QUEST"		: self.GetChild("Tab_04"),
    			"BUTON"		: self.GetChild("Tab_05")
    		}
    
    		self.tabButtonDict = {
    			"STATUS"	: self.GetChild("Tab_Button_01"),
    			"SKILL"		: self.GetChild("Tab_Button_02"),
    			"EMOTICON"	: self.GetChild("Tab_Button_03"),
    			"QUEST"		: self.GetChild("Tab_Button_04")
    		}
    
    		self.pageDict = {
    			"STATUS"	: self.GetChild("Character_Page"),
    			"SKILL"		: self.GetChild("Skill_Page"),
    			"EMOTICON"	: self.GetChild("Emoticon_Page"),
    			"QUEST"		: self.GetChild("Quest_Page"),
    			"BUTON"		: self.GetChild("Buton_Page")
    		}
    
    		self.titleBarDict = {
    			"STATUS"	: self.GetChild("Character_TitleBar"),
    			"SKILL"		: self.GetChild("Skill_TitleBar"),
    			"EMOTICON"	: self.GetChild("Emoticon_TitleBar"),
    			"QUEST"		: self.GetChild("Quest_TitleBar"),
    			"BUTON"		: self.GetChild("Buton_TitleBar")
    		}
    
    		self.statusPlusButtonDict = {
    			"HTH"		: self.GetChild("HTH_Plus"),
    			"INT"		: self.GetChild("INT_Plus"),
    			"STR"		: self.GetChild("STR_Plus"),
    			"DEX"		: self.GetChild("DEX_Plus"),
    		}
    
    		self.statusHizliPlusButtonDict = {
    			"HTH_QUICK"		: self.GetChild("HTH_HizliPlus"),
    			"INT_QUICK"		: self.GetChild("INT_HizliPlus"),
    			"STR_QUICK"		: self.GetChild("STR_HizliPlus"),
    			"DEX_QUICK"		: self.GetChild("DEX_HizliPlus"),
    		}
    
    		self.statusMinusButtonDict = {
    			"HTH-"		: self.GetChild("HTH_Minus"),
    			"INT-"		: self.GetChild("INT_Minus"),
    			"STR-"		: self.GetChild("STR_Minus"),
    			"DEX-"		: self.GetChild("DEX_Minus"),
    		}
    
    		self.skillPageDict = {
    			"ACTIVE" : self.GetChild("Skill_Active_Slot"),
    			"SUPPORT" : self.GetChild("Skill_ETC_Slot"),
    			"HORSE" : self.GetChild("Skill_Active_Slot"),
    		}
    
    		self.skillPageStatDict = {
    			"SUPPORT"	: player.SKILL_SUPPORT,
    			"ACTIVE"	: player.SKILL_ACTIVE,
    			"HORSE"		: player.SKILL_HORSE,
    		}
    
    		self.skillGroupButton = (
    			self.GetChild("Skill_Group_Button_1"),
    			self.GetChild("Skill_Group_Button_2"),
    		)
    
    		
    		global SHOW_ONLY_ACTIVE_SKILL
    		global HIDE_SUPPORT_SKILL_POINT
    		if SHOW_ONLY_ACTIVE_SKILL or HIDE_SUPPORT_SKILL_POINT:	
    			self.GetChild("Support_Skill_Point_Label").Hide()
    
    		self.soloEmotionSlot = self.GetChild("SoloEmotionSlot")
    		self.dualEmotionSlot = self.GetChild("DualEmotionSlot")
    		self.__SetEmotionSlot()
    
    		for i in xrange(quest.QUEST_CATEGORY_MAX_NUM):
    			self.questCategoryList.append(self.GetChild("Quest_Category_0" + str(i)))
    			self.catPositionRender.append(0)
    
    		self.RearrangeCategories(xrange(quest.QUEST_CATEGORY_MAX_NUM))
    		
    		#Hizli-Menu#
    		self.HizliIsinlanma = self.GetChild("Isinlanma")
    		self.HizliIsinlanma.SetEvent(ui.__mem_func__(self.HizliMenu), 1)
    
    		self.HizliEfsunBotu = self.GetChild("EfsunBotu")
    		self.HizliEfsunBotu.SetEvent(ui.__mem_func__(self.HizliMenu), 2)
    
    		# self.HizliMarketAra = self.GetChild("MarketArama")
    		# self.HizliMarketAra.SetEvent(ui.__mem_func__(self.HizliMenu), 3)
    
    		# self.HizliAtCagir = self.GetChild("AtCagirma")
    		# self.HizliAtCagir.SetEvent(ui.__mem_func__(self.HizliMenu), 4)
    
    		# self.HizliEkipman = self.GetChild("HizliEkipman")
    		# self.HizliEkipman.SetEvent(ui.__mem_func__(self.HizliMenu), 5)
    
    		# self.HizliTicaretGecmis = self.GetChild("TicaretGecmisi")
    		# self.HizliTicaretGecmis.SetEvent(ui.__mem_func__(self.HizliMenu), 6)
    
    		# self.HizliPet = self.GetChild("PetEkran")
    		# self.HizliPet.SetEvent(ui.__mem_func__(self.HizliMenu), 7)
    
    		# self.HizliAfrodit = self.GetChild("AfroditEkran")
    		# self.HizliAfrodit.SetEvent(ui.__mem_func__(self.HizliMenu), 8)
    
    		# self.HizliYoutuber = self.GetChild("Youtuber")
    		# self.HizliYoutuber.SetEvent(ui.__mem_func__(self.HizliMenu), 9)
    
    		# self.HizliGuvenliPc = self.GetChild("GuvenliPc")
    		# self.HizliGuvenliPc.SetEvent(ui.__mem_func__(self.HizliMenu), 10)
    
    		self.HizliUzakMarket = self.GetChild("UzakMarket")
    		self.HizliUzakMarket.SetEvent(ui.__mem_func__(self.HizliMenu), 11)
    
    		# self.HizliBossSiralamasi = self.GetChild("BossSiralamasi")
    		# self.HizliBossSiralamasi.SetEvent(ui.__mem_func__(self.HizliMenu), 12)
    
    		# self.HizliStatus = self.GetChild("HizliStatus")
    		# self.HizliStatus.SetEvent(ui.__mem_func__(self.HizliMenu), 13)
    
    		# self.HizliTamEkran = self.GetChild("TamEkran")
    		# self.HizliTamEkran.SetEvent(ui.__mem_func__(self.HizliMenu), 14)
    
    		# self.HizliOtoTopla = self.GetChild("OtoTopla")
    		# self.HizliOtoTopla.SetEvent(ui.__mem_func__(self.HizliMenu), 15)
    
    		# self.HizliOtoYang = self.GetChild("OtoYangTopla")
    		# self.HizliOtoYang.SetEvent(ui.__mem_func__(self.HizliMenu), 16)
    
    		# self.HizliGeceGunduz = self.GetChild("GeceGunduzModu")
    		# self.HizliGeceGunduz.SetEvent(ui.__mem_func__(self.HizliMenu), 17)
    
    		# self.HizliKarliZemin = self.GetChild("KarliZemin")
    		# self.HizliKarliZemin.SetEvent(ui.__mem_func__(self.HizliMenu), 18)
    
    		# self.HizliKarYagdirma = self.GetChild("KarYagdirma")
    		# self.HizliKarYagdirma.SetEvent(ui.__mem_func__(self.HizliMenu), 19)
    
    		self.HizliBonusPenceresi = self.GetChild("BonusPenceresi")
    		self.HizliBonusPenceresi.SetEvent(ui.__mem_func__(self.HizliMenu), 20)
    		#Hizli-Menu#
    			
    		if app.ENABLE_DETAILS_UI:
    			self.MainBoard = self.GetChild("board")
    			self.ExpandBtn = ui.MakeButton(self.MainBoard, 240, 120, "", "d:/ymir work/ui/game/belt_inventory/", "btn_minimize_normal.tga", "btn_minimize_over.tga", "btn_minimize_down.tga")
    			self.ExpandBtn.SetEvent(ui.__mem_func__(self.__ClickExpandButton))
    			self.MinimizeBtn = ui.MakeButton(self.MainBoard, 240, 120, "", "d:/ymir work/ui/game/belt_inventory/", "btn_expand_normal.tga", "btn_expand_over.tga", "btn_expand_down.tga")
    			self.MinimizeBtn.SetEvent(ui.__mem_func__(self.__ClickMinimizeButton))
    			
    	#Hizli-Menu#
    	def HizliMenu(self, type):
    		if type == 1:
    			gameInfo.SYSTEMS_PAKET0=1
    
    		elif type == 2:
    			self.EfsunBotDialog = uiefsunlar.OptionDialog()
    			self.EfsunBotDialog.Show()
    
    		elif type == 3:
    			player.OpenKeychangeWindow()
    
    		elif type == 4:
    			net.SendChatPacket("/horse_summon_user")
    
    		elif type == 5:
    			self.EkipmanButton = uifastequip.changeequip()
    			self.EkipmanButton.Show()
    
    		elif type == 6:
    			gameInfo.SYSTEMS_PAKET1=1
    
    		elif type == 7:
    			gameInfo.SYSTEMS_PAKET2=1
    
    		elif type == 8:
    			gameInfo.SYSTEMS_PAKET3=1
    
    		elif type == 9:
    			self.EsyaBotDialog = uiesyaislem.OptionDialog()
    			self.EsyaBotDialog.Show()
    
    		elif type == 10:
    			self.GuvenliPC = guvenli.GuvenliDialog()
    			self.GuvenliPC.Show()
    
    		elif type == 11:
    			gameInfo.SYSTEMS_PAKET4=1
    
    		elif type == 12:
    			namem=str(player.GetName())
    			self.KoyDialog = uiCommon.QuestionDialog2()
    			self.KoyDialog.SetText1("Hi,"+constInfo.bosluk+namem+constInfo.bosluk+constInfo.normalrenk)
    			self.KoyDialog.SetText2("Do you want to teleport to your sheep?")
    			self.KoyDialog.SetAcceptEvent(lambda arg = True: self.OnWarpStart(1))
    			self.KoyDialog.SetCancelEvent(lambda arg = False: self.OnWarpStart(2))
    			self.KoyDialog.Open()
    
    		elif type == 13:
    			gameInfo.SYSTEMS_PAKET5=1
    
    		elif type == 14:
    			gameInfo.SYSTEMS_PAKET6=1
    
    		elif type == 15:
    			qid = constInfo.kilitqin
    			event.QuestButtonClick(qid)
    
    		elif type == 16:
    			self.isinlanmaxdd = uiisinlanma.Isinlanma()
    			self.isinlanmaxdd.Show()
    
    		elif type == 17:
    			gameInfo.SYSTEMS_PAKET9=1
    
    		elif type == 18:
    			self.RutbeBilgiGoster = uiRutbeBilgi.Rutbe_Bilgi()
    			self.RutbeBilgiGoster.Show()
    			#import os
    			#os.system('start VideoRecord/screenrecorder.exe')
    			#chat.AppendChat(chat.CHAT_TYPE_INFO, '1- Kirmizi butona basarak kaydedebilirsiniz.')
    			#chat.AppendChat(chat.CHAT_TYPE_INFO, '2- Tam ekran video almak icin : Ayar isaretine tiklayarak Full Screen secin')
    			#chat.AppendChat(chat.CHAT_TYPE_INFO, '3- Kaydedilen videolar, metin2 klasorundeki Video-Recording klasorune kaydedilir.')
    
    		elif type == 19:
    			gameInfo.SYSTEMS_PAKET8=1
    			#if constInfo.balikbot == 0:
    				#execfile('balikbot.py',{})
    
    		elif type == 20:
    			gameInfo.BOSS_TRACKING=1
    
    	def OnWarpStart(self, gelen):
    		self.KoyDialog.Close()
    		if gelen == 1:
    			net.SendChatPacket("/koye_git")
    
    	#Hizli-Menu#
    	
    	if app.ENABLE_DETAILS_UI:
    		def __InitCharacterDetailsUIButton(self):
    			self.ExpandBtn.Show()
    			self.MinimizeBtn.Hide()
    			
    		def __ClickExpandButton(self):
    			if not self.chDetailsWnd:
    				self.chDetailsWnd = uiCharacterDetails.CharacterDetailsUI(self)
    				self.chDetailsWnd.Show()
    			else:
    				self.chDetailsWnd.Show()
    				
    			self.ExpandBtn.Hide()
    			self.MinimizeBtn.Show()
    
    			if app.ENABLE_SKILL_COLOR_SYSTEM:
    				if self.skillColorWnd and self.skillColorWnd.IsShow():
    					self.skillColorWnd.Hide()
    
    		def __ClickMinimizeButton(self):
    			self.chDetailsWnd.Hide()
    			self.MinimizeBtn.Hide()
    			self.ExpandBtn.Show()
    			
    		def OnMoveWindow(self, x, y):
    			if self.chDetailsWnd:
    				self.chDetailsWnd.AdjustPosition(x, y)
    
    	def __SetSkillSlotEvent(self):
    		for skillPageValue in self.skillPageDict.itervalues():
    			skillPageValue.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
    			skillPageValue.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectSkill))
    			skillPageValue.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
    			skillPageValue.SetUnselectItemSlotEvent(ui.__mem_func__(self.ClickSkillSlot))
    			skillPageValue.SetUseSlotEvent(ui.__mem_func__(self.ClickSkillSlot))
    			skillPageValue.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
    			skillPageValue.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
    			skillPageValue.SetPressedSlotButtonEvent(ui.__mem_func__(self.OnPressedSlotButton))
    			skillPageValue.AppendSlotButton("d:/ymir work/ui/game/windows/btn_plus_up.sub",\
    											"d:/ymir work/ui/game/windows/btn_plus_over.sub",\
    											"d:/ymir work/ui/game/windows/btn_plus_down.sub")
    
    	def __SetEmotionSlot(self):
    
    		self.emotionToolTip = uiToolTip.ToolTip()
    
    		for slot in (self.soloEmotionSlot, self.dualEmotionSlot):
    			slot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
    			slot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectEmotion))
    			slot.SetUnselectItemSlotEvent(ui.__mem_func__(self.__ClickEmotionSlot))
    			slot.SetUseSlotEvent(ui.__mem_func__(self.__ClickEmotionSlot))
    			slot.SetOverInItemEvent(ui.__mem_func__(self.__OverInEmotion))
    			slot.SetOverOutItemEvent(ui.__mem_func__(self.__OverOutEmotion))
    			slot.AppendSlotButton("d:/ymir work/ui/game/windows/btn_plus_up.sub",\
    											"d:/ymir work/ui/game/windows/btn_plus_over.sub",\
    											"d:/ymir work/ui/game/windows/btn_plus_down.sub")
    
    		for slotIdx, datadict in emotion.EMOTION_DICT.items():
    			emotionIdx = slotIdx
    
    			slot = self.soloEmotionSlot
    			if slotIdx > 50:
    				slot = self.dualEmotionSlot
    
    			slot.SetEmotionSlot(slotIdx, emotionIdx)
    			slot.SetCoverButton(slotIdx)
    
    	def __SelectEmotion(self, slotIndex):
    		if not slotIndex in emotion.EMOTION_DICT:
    			return
    
    		if app.IsPressed(app.DIK_LCONTROL):
    			player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_EMOTION, slotIndex)
    			return
    
    		mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_EMOTION, slotIndex, slotIndex)
    
    	def __ClickEmotionSlot(self, slotIndex):
    
    		if not slotIndex in emotion.EMOTION_DICT:
    			return
    		print "check acting"
    		if player.IsActingEmotion():
    			return
    		command = emotion.EMOTION_DICT[slotIndex]["command"]
    		print "command", command
    
    		if slotIndex > 50:
    			vid = player.GetTargetVID()
    
    			if 0 == vid or vid == player.GetMainCharacterIndex() or chr.IsNPC(vid) or chr.IsEnemy(vid):
    				chat = __import__(pythonApi.GetModuleName("chat"))
    				chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EMOTION_CHOOSE_ONE)
    				return
    
    			command += " " + chr.GetNameByVID(vid)
    
    		print "send_command", command
    		net.SendChatPacket(command)
    
    	def ActEmotion(self, emotionIndex):
    		self.__ClickEmotionSlot(emotionIndex)
    
    	def __OverInEmotion(self, slotIndex):
    		if self.emotionToolTip:
    
    			if not slotIndex in emotion.EMOTION_DICT:
    				return
    
    			self.emotionToolTip.ClearToolTip()
    			self.emotionToolTip.SetTitle(emotion.EMOTION_DICT[slotIndex]["name"])
    			self.emotionToolTip.AlignHorizonalCenter()
    			self.emotionToolTip.ShowToolTip()
    
    	def __OverOutEmotion(self):
    		if self.emotionToolTip:
    			self.emotionToolTip.HideToolTip()
    
    	def __BindEvent(self):
    		for i in xrange(len(self.skillGroupButton)):
    			self.skillGroupButton[i].SetEvent(lambda arg=i: self.__SelectSkillGroup(arg))
    
    		self.RefreshQuest()
    		self.__HideJobToolTip()
    
    		for (tabKey, tabButton) in self.tabButtonDict.items():
    			tabButton.SetEvent(ui.__mem_func__(self.__OnClickTabButton), tabKey)
    
    		for (statusPlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
    			statusPlusButton.SAFE_SetEvent(self.__OnClickStatusPlusButton, statusPlusKey)
    			statusPlusButton.ShowToolTip = lambda arg=statusPlusKey: self.__OverInStatButton(arg)
    			statusPlusButton.HideToolTip = lambda arg=statusPlusKey: self.__OverOutStatButton()
    
    		for (statusHizliPlusKey, statusHizliPlusButton) in self.statusHizliPlusButtonDict.items():
    			statusHizliPlusButton.SAFE_SetEvent(self.__OnClickHizliStatusPlusButton, statusHizliPlusKey)
    			statusHizliPlusButton.ShowToolTip = lambda arg=statusHizliPlusKey: self.__OverInStatButton(arg)
    			statusHizliPlusButton.HideToolTip = lambda arg=statusHizliPlusKey: self.__OverOutStatButton()
    		
    		for (statusMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
    			statusMinusButton.SAFE_SetEvent(self.__OnClickStatusMinusButton, statusMinusKey)
    			statusMinusButton.ShowToolTip = lambda arg=statusMinusKey: self.__OverInStatMinusButton(arg)
    			statusMinusButton.HideToolTip = lambda arg=statusMinusKey: self.__OverOutStatMinusButton()
    
    		for titleBarValue in self.titleBarDict.itervalues():
    			if app.ENABLE_DETAILS_UI:
    				titleBarValue.SetCloseEvent(ui.__mem_func__(self.Close))
    			else:
    				titleBarValue.SetCloseEvent(ui.__mem_func__(self.Hide))
    
    		self.questTitleBar.SetCloseEvent(ui.__mem_func__(self.Close))
           	
    		for i in xrange(quest.QUEST_CATEGORY_MAX_NUM):
    			self.questCategoryList[i].SetEvent(ui.__mem_func__(self.__OnClickQuestCategoryButton),i)
    
    	def __LoadWindow(self):
    		if self.isLoaded == 1:
    			return
    
    		self.isLoaded = 1
    
    		try:
    			if localeInfo.IsARABIC() or localeInfo.IsVIETNAM() or localeInfo.IsJAPAN():
    				self.__LoadScript(uiScriptLocale.LOCALE_UISCRIPT_PATH + "CharacterWindow.py")
    			else:
    				self.__LoadScript("UIScript/CharacterWindow.py")
    				
    			self.__BindObject()
    			self.__BindEvent()
    			self.questScrollBar = self.GetChild("QuestScrollBar")
    			self.questScrollBar.SetScrollEvent(ui.__mem_func__(self.__OnScrollQuest))	
    		except:
    			import exception
    			exception.Abort("CharacterWindow.__LoadWindow")
    
    		#self.tabButtonDict["EMOTICON"].Disable()
    		self.SetState("STATUS")
    
    	def Destroy(self):
    		self.Hide()
    		self.ClearDictionary()
    
    		self.__Initialize()
    
    	def Close(self):
    
    		if app.ENABLE_SKILL_COLOR_SYSTEM:
    			if self.skillColorWnd and self.skillColorWnd.IsShow():
    				self.skillColorWnd.Hide()
    
    		self.Hide()
    		if None != self.toolTipSkill:
    			self.toolTipSkill.Hide()
    
    		if app.ENABLE_DETAILS_UI:
    			if self.chDetailsWnd and self.chDetailsWnd.IsShow():
    				self.chDetailsWnd.Hide()
    				
    		if self.wndQuestSlideWindowNewKey>0:
    			if self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1] is not None:
    				self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1].CloseSelf()
    
    	def SetSkillToolTip(self, toolTipSkill):
    		self.toolTipSkill = toolTipSkill			
    
    	def __OnClickStatusPlusButton(self, statusKey):
    		try:
    			statusPlusCommand=self.statusPlusCommandDict[statusKey]
    			net.SendChatPacket(statusPlusCommand)
    		except KeyError, msg:
    			dbg.TraceError("CharacterWindow.__OnClickStatusPlusButton KeyError: %s", msg)
    
    	def __OnClickHizliStatusPlusButton(self, statusKey):
    		try:
    			statusHizliPlusCommand=self.statusHizliPlusCommandDict[statusKey]
    			net.SendChatPacket(statusHizliPlusCommand)
    		except KeyError, msg:
    			dbg.TraceError("CharacterWindow.__OnClickStatusHizliPlusButton KeyError: %s", msg)
    	
    	def __OnClickStatusMinusButton(self, statusKey):
    		try:
    			statusMinusCommand=self.statusMinusCommandDict[statusKey]
    			net.SendChatPacket(statusMinusCommand)
    		except KeyError, msg:
    			dbg.TraceError("CharacterWindow.__OnClickStatusMinusButton KeyError: %s", msg)
    
    
    	def __OnClickTabButton(self, stateKey):
    		self.SetState(stateKey)
    
    	def SetState(self, stateKey):
    		if self.tabButtonDict == None:
    			return
    		
    		self.state = stateKey
    		
    		if stateKey != "QUEST":
    			self.questPage.Hide()
    			if self.wndQuestSlideWindowNewKey > 0:
    				if self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1] is not None:
    					self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1].CloseSelf()
    		else:
    			self.__LoadQuestCat()
    		
    		for (tabKey, tabButton) in self.tabButtonDict.items():
    			if stateKey!=tabKey:
    				tabButton.SetUp()
    
    		for tabValue in self.tabDict.itervalues():
    			tabValue.Hide()
    
    		for pageValue in self.pageDict.itervalues():
    			pageValue.Hide()
    
    		for titleBarValue in self.titleBarDict.itervalues():
    			titleBarValue.Hide()
    
    		self.titleBarDict[stateKey].Show()
    		self.tabDict[stateKey].Show()
    		self.pageDict[stateKey].Show()
    		
    
    	def GetState(self):
    		return self.state
    
    	def __GetTotalAtkText(self):
    		minAtk=player.GetStatus(player.ATT_MIN)
    		maxAtk=player.GetStatus(player.ATT_MAX)
    		atkBonus=player.GetStatus(player.ATT_BONUS)
    		attackerBonus=player.GetStatus(player.ATTACKER_BONUS)
    		min = int(minAtk+atkBonus+attackerBonus)
    		max = int(maxAtk+atkBonus+attackerBonus)
    		if minAtk==maxAtk:
    			return "%s" % (localeInfo.NumberToString2(min))
    		else:
    			return "%s-%s" % (localeInfo.NumberToString2(min), localeInfo.NumberToString2(max))
    
    	def __GetTotalMagAtkText(self):
    		minMagAtk=player.GetStatus(player.MAG_ATT)+player.GetStatus(player.MIN_MAGIC_WEP)
    		maxMagAtk=player.GetStatus(player.MAG_ATT)+player.GetStatus(player.MAX_MAGIC_WEP)
    
    		if minMagAtk==maxMagAtk:
    			return "%d" % (minMagAtk)
    		else:
    			return "%d-%d" % (minMagAtk, maxMagAtk)
    
    	def __GetTotalDefText(self):
    		defValue=player.GetStatus(player.DEF_GRADE)
    		if constInfo.ADD_DEF_BONUS_ENABLE:
    			defValue+=player.GetStatus(player.DEF_BONUS)
    		return "%s" % (localeInfo.NumberToString2(defValue))
    	
    	def RefreshStatus(self):
    		if self.isLoaded==0:
    			return
    
    		try:
    			self.GetChild("Level_Value").SetText(str(player.GetStatus(player.LEVEL)))
    			self.GetChild("Exp_Value").SetText(str(unsigned32(player.GetEXP())))
    			self.GetChild("RestExp_Value").SetText(str(unsigned32(player.GetStatus(player.NEXT_EXP)) - unsigned32(player.GetStatus(player.EXP))))
    			#self.GetChild("HP_Value").SetText(str(player.GetStatus(player.HP)) + '/' + str(player.GetStatus(player.MAX_HP)))
    			#self.GetChild("SP_Value").SetText(str(player.GetStatus(player.SP)) + '/' + str(player.GetStatus(player.MAX_SP)))
    			self.GetChild("HP_Value").SetText(localeInfo.NumberToString2(str(player.GetStatus(player.HP))) + '/' + localeInfo.NumberToString2(str(player.GetStatus(player.MAX_HP))))
    			self.GetChild("SP_Value").SetText(localeInfo.NumberToString2(str(player.GetStatus(player.SP))) + '/' + localeInfo.NumberToString2(str(player.GetStatus(player.MAX_SP))))
    
    			self.GetChild("STR_Value").SetText(str(player.GetStatus(player.ST)))
    			self.GetChild("DEX_Value").SetText(str(player.GetStatus(player.DX)))
    			self.GetChild("HTH_Value").SetText(str(player.GetStatus(player.HT)))
    			self.GetChild("INT_Value").SetText(str(player.GetStatus(player.IQ)))
    
    			self.GetChild("ATT_Value").SetText(self.__GetTotalAtkText())
    			self.GetChild("DEF_Value").SetText(self.__GetTotalDefText())
    
    			self.GetChild("MATT_Value").SetText(self.__GetTotalMagAtkText())
    			#self.GetChild("MATT_Value").SetText(str(player.GetStatus(player.MAG_ATT)))
    
    			self.GetChild("MDEF_Value").SetText(str(player.GetStatus(player.MAG_DEF)))
    			self.GetChild("ASPD_Value").SetText(str(player.GetStatus(player.ATT_SPEED)))
    			self.GetChild("MSPD_Value").SetText(str(player.GetStatus(player.MOVING_SPEED)))
    			self.GetChild("CSPD_Value").SetText(str(player.GetStatus(player.CASTING_SPEED)))
    			self.GetChild("ER_Value").SetText(str(player.GetStatus(player.EVADE_RATE)))
    
    		except:
    			#import exception
    			#exception.Abort("CharacterWindow.RefreshStatus.BindObject")
    			## °ΤΐΣΐΜ Ζ¨°ά ΉφΈ²
    			pass
    
    		self.__RefreshStatusPlusButtonList()
    		self.__RefreshStatusMinusButtonList()
    		self.RefreshAlignment()
    
    		if self.refreshToolTip:
    			self.refreshToolTip()
    			
    		if app.ENABLE_DETAILS_UI:
    			if self.chDetailsWnd and self.chDetailsWnd.IsShow():
    				self.chDetailsWnd.RefreshLabel()
    
    	def __RefreshStatusPlusButtonList(self):
    		if self.isLoaded==0:
    			return
    
    		statusPlusPoint=player.GetStatus(player.STAT)
    
    		if statusPlusPoint>0:
    			self.statusPlusValue.SetText(str(statusPlusPoint))
    			self.statusPlusLabel.Show()
    			self.ShowStatusPlusButtonList()
    			self.ShowStatusHizliPlusButtonList()
    		else:
    			self.statusPlusValue.SetText(str(0))
    			self.statusPlusLabel.Hide()
    			self.HideStatusPlusButtonList()
    			self.HideStatusHizliPlusButtonList()
    
    	def __RefreshStatusMinusButtonList(self):
    		if self.isLoaded==0:
    			return
    
    		statusMinusPoint=self.__GetStatMinusPoint()
    
    		if statusMinusPoint>0:
    			self.__ShowStatusMinusButtonList()
    		else:
    			self.__HideStatusMinusButtonList()
    
    	def RefreshAlignment(self):
    		point, grade = player.GetAlignmentData()
    
    		import colorInfo
    		COLOR_DICT = {	0 : colorInfo.TITLE_RGB_GOOD_7,
    						1 : colorInfo.TITLE_RGB_GOOD_6,
    						2 : colorInfo.TITLE_RGB_GOOD_5,
    						3 : colorInfo.TITLE_RGB_GOOD_4,
    						4 : colorInfo.TITLE_RGB_GOOD_3,
    						5 : colorInfo.TITLE_RGB_GOOD_2,
    						6 : colorInfo.TITLE_RGB_GOOD_1,
    						7 : colorInfo.TITLE_RGB_NORMAL,
    						8 : colorInfo.TITLE_RGB_EVIL_1,
    						9 : colorInfo.TITLE_RGB_EVIL_2,
    						10 : colorInfo.TITLE_RGB_EVIL_3,
    						11 : colorInfo.TITLE_RGB_EVIL_4, }
    		colorList = COLOR_DICT.get(grade, colorInfo.TITLE_RGB_NORMAL)
    		gradeColor = ui.GenerateColor(colorList[0], colorList[1], colorList[2])
    
    		self.toolTipAlignment.ClearToolTip()
    		self.toolTipAlignment.AutoAppendTextLine(localeInfo.TITLE_NAME_LIST[grade], gradeColor)
    		self.toolTipAlignment.AutoAppendTextLine(localeInfo.ALIGNMENT_NAME + str(point))
    		#self.toolTipAlignment.AppendSpace(2)
    		#self.toolTipAlignment.AutoAppendTextLine(localeInfo.YEAR_ROUND_NAME + str(player.GetYearRoundPoint()))
    		#self.toolTipAlignment.AppendSpace(2)
    		#self.toolTipAlignment.AutoAppendTextLine(localeInfo.ACHIEVEMENT_NAME + str(player.GetAchievementPoint()))
    		#self.toolTipAlignment.AppendSpace(2)
    		#self.toolTipAlignment.AutoAppendTextLine(localeInfo.BOSS_EVENT_NAME + str(player.GetBossEventPoint()))
    		#self.toolTipAlignment.AppendSpace(2)
    		#self.toolTipAlignment.AutoAppendTextLine(localeInfo.RAMADAN_EVENT_NAME + str(player.GetRamadanEventPoint()))
    		self.toolTipAlignment.AppendSpace(2)
    		self.toolTipAlignment.AlignHorizonalCenter()
    
    		self.GetChild("Level_Value").SetText(str(player.GetStatus(player.LEVEL)))
    	
    	def __ShowStatusMinusButtonList(self):
    		for (stateMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
    			statusMinusButton.Show()
    
    	def __HideStatusMinusButtonList(self):
    		for (stateMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
    			statusMinusButton.Hide()
    
    	def ShowStatusPlusButtonList(self):
    		for (statePlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
    			statusPlusButton.Show()
    
    	def HideStatusPlusButtonList(self):
    		for (statePlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
    			statusPlusButton.Hide()
    
    	def ShowStatusHizliPlusButtonList(self):
    		for (statePlusKey, statusHizliPlusButton) in self.statusHizliPlusButtonDict.items():
    			statusHizliPlusButton.Show()
    
    	def HideStatusHizliPlusButtonList(self):
    		for (statePlusKey, statusHizliPlusButton) in self.statusHizliPlusButtonDict.items():
    			statusHizliPlusButton.Hide()
    
    	def SelectSkill(self, skillSlotIndex):
    
    		mouseController = mouseModule.mouseController
    
    		if FALSE == mouseController.isAttached():
    
    			srcSlotIndex = self.__RealSkillSlotToSourceSlot(skillSlotIndex)
    			selectedSkillIndex = player.GetSkillIndex(srcSlotIndex)
    
    			if skill.CanUseSkill(selectedSkillIndex):
    
    				if app.IsPressed(app.DIK_LCONTROL):
    
    					player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_SKILL, srcSlotIndex)
    					return
    
    				mouseController.AttachObject(self, player.SLOT_TYPE_SKILL, srcSlotIndex, selectedSkillIndex)
    
    		else:
    
    			mouseController.DeattachObject()
    
    	def SelectEmptySlot(self, SlotIndex):
    		mouseModule.mouseController.DeattachObject()
    
    	## ToolTip
    	def OverInItem(self, slotNumber):
    
    		if mouseModule.mouseController.isAttached():
    			return
    
    		if not self.toolTipSkill:
    			return
    			
    		srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotNumber)
    		skillIndex = player.GetSkillIndex(srcSlotIndex)
    		skillLevel = player.GetSkillLevel(srcSlotIndex)
    		skillGrade = player.GetSkillGrade(srcSlotIndex)
    		skillType = skill.GetSkillType(skillIndex)
    
    		## ACTIVE
    		if skill.SKILL_TYPE_ACTIVE == skillType:
    			overInSkillGrade = self.__GetSkillGradeFromSlot(slotNumber)
    
    			if overInSkillGrade == skill.SKILL_GRADE_COUNT-1 and skillGrade == skill.SKILL_GRADE_COUNT:
    				self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, skillGrade, skillLevel)
    			elif overInSkillGrade == skillGrade:
    				if app.ENABLE_SKILLS_LEVEL_OVER_P and skillGrade == 2:
    					self.toolTipSkill.SetSkillOnlyName(srcSlotIndex, skillIndex, overInSkillGrade + 1)
    				else:
    					self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, overInSkillGrade, skillLevel)
    			elif app.ENABLE_SKILLS_LEVEL_OVER_P and overInSkillGrade == skill.SKILL_GRADE_COUNT-2 and skillGrade >= skill.SKILL_GRADE_COUNT-1:
    				self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, skillGrade, skillLevel)
    			else:
    				if app.ENABLE_SKILLS_LEVEL_OVER_P and overInSkillGrade == 1 and skillGrade == 2:
    					self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, overInSkillGrade + 1, skillLevel)
    				elif app.ENABLE_SKILLS_LEVEL_OVER_P and overInSkillGrade == 2 and skillGrade < 3:
    					self.toolTipSkill.SetSkillOnlyName(srcSlotIndex, skillIndex, overInSkillGrade + 1)
    				else:
    					self.toolTipSkill.SetSkillOnlyName(srcSlotIndex, skillIndex, overInSkillGrade)
    		else:
    			self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, skillGrade, skillLevel)
    
    	def OverOutItem(self):
    		if None == self.toolTipSkill:
    			return
    			
    		if 0 != self.toolTipSkill:
    			self.toolTipSkill.HideToolTip()
    
    	def __GetStatMinusPoint(self):
    		POINT_STAT_RESET_COUNT = 112
    		return player.GetStatus(POINT_STAT_RESET_COUNT)
    
    	def __OverInStatMinusButton(self, stat):
    		try:
    			self.__ShowStatToolTip(self.STAT_MINUS_DESCRIPTION[stat] % self.__GetStatMinusPoint())
    		except KeyError:
    			pass
    
    		self.refreshToolTip = lambda arg=stat: self.__OverInStatMinusButton(arg) 
    
    	def __OverOutStatMinusButton(self):
    		self.__HideStatToolTip()
    		self.refreshToolTip = 0
    
    	def __OverInStatButton(self, stat):	
    		try:
    			self.__ShowStatToolTip(self.STAT_DESCRIPTION[stat])
    		except KeyError:
    			pass
    			
    	def __OverInStatButton2(self):	
    		try:
    			self.__ShowStatToolTip("statu")
    		except KeyError:
    			pass	
    
    	def __OverOutStatButton(self):
    		self.__HideStatToolTip()
    
    	def __ShowStatToolTip(self, statDesc):
    		if self.toolTip:
    			self.toolTip.ClearToolTip()
    			self.toolTip.AppendTextLine(statDesc)
    			self.toolTip.Show()
    
    	def __HideStatToolTip(self):
    		if self.toolTip:
    			self.toolTip.Hide()
    
    	def OnPressEscapeKey(self):
    		self.Close()
    		return TRUE
    
    	## Skill Process
    	def __RefreshSkillPage(self, name, slotCount):
    		global SHOW_LIMIT_SUPPORT_SKILL_LIST
    
    		skillPage = self.skillPageDict[name]
    
    		startSlotIndex = skillPage.GetStartIndex()
    		if name == "ACTIVE":
    			if self.PAGE_HORSE == self.curSelectedSkillGroup:
    				startSlotIndex += slotCount
    		
    		getSkillType = skill.GetSkillType
    		getSkillIndex = player.GetSkillIndex
    		getSkillGrade = player.GetSkillGrade
    		getSkillLevel = player.GetSkillLevel
    		getSkillMaxLevel = skill.GetSkillMaxLevel
    		getSkillLevelUpPoint = skill.GetSkillLevelUpPoint
    		if app.ENABLE_SKILLS_LEVEL_OVER_P:
    			refresh = 0
    		
    		for i in xrange(slotCount + 1):
    			slotIndex = i + startSlotIndex
    			skillIndex = getSkillIndex(slotIndex)
    			if not app.ENABLE_SKILLS_LEVEL_OVER_P:
    				for j in xrange(skill.SKILL_GRADE_COUNT):
    					skillPage.ClearSlot(self.__GetRealSkillSlot(j, i))
    			else:
    				if not refresh and skillIndex >= 137 and skillIndex <= 140:
    					for w in xrange(slotCount + 1):
    						for q in xrange(skill.SKILL_GRADE_COUNT):
    							skillPage.ClearSlot(self.__GetRealSkillSlot(q, w))
    					
    					refresh = 1
    			
    			if app.ENABLE_SKILLS_LEVEL_OVER_P:
    				if slotIndex == 7 or slotIndex == 8:
    					for j in xrange(skill.SKILL_GRADE_COUNT):
    						skillPage.ClearSlot(self.__GetRealSkillSlot(j, slotIndex))
    			
    			if not skillIndex:
    				continue
    			
    			skillType = getSkillType(skillIndex)
    			skillGrade = getSkillGrade(slotIndex)
    			skillLevel = getSkillLevel(slotIndex)
    			
    			if skillIndex == player.SKILL_INDEX_RIDING:
    				if app.ENABLE_SKILLS_LEVEL_OVER_P:
    					skGrade = 0
    					if skillLevel >= 11 and skillLevel < 20:
    						skGrade = 1
    					elif skillGrade == 1:
    						skGrade = 2
    				
    				if skillGrade == 1:
    					skillLevel += 19
    				elif skillGrade == 2:
    					skillLevel += 29
    				elif skillGrade == 3:
    					skillLevel = 40
    				
    				skGr = max(skillLevel - 1, 0)
    				if app.ENABLE_SKILLS_LEVEL_OVER_P:
    					skGr = skGrade
    				
    				skillPage.SetSkillSlotNew(slotIndex, skillIndex, skGr, skillLevel)
    				skillPage.SetSlotCount(slotIndex, skillLevel)
    			elif skillType == skill.SKILL_TYPE_ACTIVE:
    				for j in xrange(skill.SKILL_GRADE_COUNT):
    					if app.ENABLE_SKILLS_LEVEL_OVER_P:
    						if j == 2 and skillGrade == 1:
    							continue
    					
    					realSlotIndex = self.__GetRealSkillSlot(j, slotIndex)
    					skillPage.SetSkillSlotNew(realSlotIndex, skillIndex, j, skillLevel)
    					skillPage.SetCoverButton(realSlotIndex)
    					if (skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT - 1):
    						skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
    					elif (not self.__CanUseSkillNow()) or (skillGrade != j):
    						if app.ENABLE_SKILLS_LEVEL_OVER_P:
    							if j != 2 and skillGrade != 2:
    								skillPage.ClearSlot(realSlotIndex)
    								skillPage.SetSkillSlotNew(realSlotIndex, skillIndex, j, skillLevel)
    								skillPage.SetCoverButton(realSlotIndex)
    							elif skillGrade == 2 and j >= 3:
    								skillPage.ClearSlot(realSlotIndex)
    								skillPage.SetSkillSlotNew(realSlotIndex, skillIndex, j, skillLevel)
    								skillPage.SetCoverButton(realSlotIndex)
    						
    						skillPage.SetSlotCount(realSlotIndex, 0)
    						skillPage.DisableCoverButton(realSlotIndex)
    					else:
    						skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
    			else:
    				if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
    					realSlotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
    					skillPage.SetSkillSlot(realSlotIndex, skillIndex, skillLevel)
    					skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
    					if skill.CanUseSkill(skillIndex):
    						skillPage.SetCoverButton(realSlotIndex)
    	
    			skillPage.RefreshSlot()
    
    		if app.ENABLE_SKILL_COLOR_SYSTEM:
    			if "ACTIVE" == name:
    				if self.PAGE_HORSE != self.curSelectedSkillGroup:
    					self.__CreateSkillColorButton(skillPage)
    				else:
    					self.skillColorButton = []
    
    
    	def RefreshSkill(self):
    
    		if self.isLoaded==0:
    			return
    
    		if self.__IsChangedHorseRidingSkillLevel():
    			self.RefreshCharacter()
    			return
    
    
    		global SHOW_ONLY_ACTIVE_SKILL
    		if SHOW_ONLY_ACTIVE_SKILL:
    			self.__RefreshSkillPage("ACTIVE", self.ACTIVE_PAGE_SLOT_COUNT)
    		else:
    			self.__RefreshSkillPage("ACTIVE", self.ACTIVE_PAGE_SLOT_COUNT)
    			self.__RefreshSkillPage("SUPPORT", self.SUPPORT_PAGE_SLOT_COUNT)
    
    		self.RefreshSkillPlusButtonList()
    
    	def CanShowPlusButton(self, skillIndex, skillLevel, curStatPoint):
    
    		## ½ΊΕ³ΐΜ ΐΦΐΈΈι
    		if 0 == skillIndex:
    			return FALSE
    
    		## ·ΉΊ§Ύχ Α¶°Ηΐ» ΈΈΑ·ΗΡ΄ΩΈι
    		if not skill.CanLevelUpSkill(skillIndex, skillLevel):
    			return FALSE
    
    		return TRUE
    
    	def __RefreshSkillPlusButton(self, name):
    		global HIDE_SUPPORT_SKILL_POINT
    		if HIDE_SUPPORT_SKILL_POINT and "SUPPORT" == name:
    			return
    
    		slotWindow = self.skillPageDict[name]
    		slotWindow.HideAllSlotButton()
    
    		slotStatType = self.skillPageStatDict[name]
    		if 0 == slotStatType:
    			return
    
    		statPoint = player.GetStatus(slotStatType)
    		startSlotIndex = slotWindow.GetStartIndex()
    		if "HORSE" == name:
    			startSlotIndex += self.ACTIVE_PAGE_SLOT_COUNT
    
    		if statPoint > 0:
    			for i in xrange(self.PAGE_SLOT_COUNT):
    				slotIndex = i + startSlotIndex
    				skillIndex = player.GetSkillIndex(slotIndex)
    				skillGrade = player.GetSkillGrade(slotIndex)
    				skillLevel = player.GetSkillLevel(slotIndex)
    
    				if skillIndex == 0:
    					continue
    				if skillGrade != 0:
    					continue
    
    				if name == "HORSE":
    					if player.GetStatus(player.LEVEL) >= skill.GetSkillLevelLimit(skillIndex):
    						if skillLevel < 20:
    							slotWindow.ShowSlotButton(self.__GetETCSkillRealSlotIndex(slotIndex))
    
    				else:
    					if "SUPPORT" == name:						
    						if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
    							if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
    								slotWindow.ShowSlotButton(slotIndex)
    					else:
    						if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
    							slotWindow.ShowSlotButton(slotIndex)
    
    	if app.ENABLE_SKILL_COLOR_SYSTEM:
    		def __CreateSkillColorButton(self, parent):
    			self.skillColorButton = []
    
    			xPos, yPos = 0, 0
    			for idx in xrange(self.PAGE_SLOT_COUNT):
    				skillSlot = idx
    				if skillSlot < 6:
    					if (skillSlot % 2) == 0:
    						xPos = 75
    						yPos = 4 + (skillSlot / 2 * 36)
    					else:
    						xPos = 187
    						yPos = 4 + (skillSlot / 2 * 36)
    
    					skillIndex = player.GetSkillIndex(skillSlot + 1)
    					skillMaxGrade = 3
    
    					if len(self.skillColorButton) == skillSlot:
    						self.skillColorButton.append([])
    						self.skillColorButton[skillSlot] = ui.Button()
    						self.skillColorButton[skillSlot].SetParent(parent)
    						self.skillColorButton[skillSlot].SetUpVisual("d:/ymir work/ui/skillcolor/skill_color_button_default.tga")
    						self.skillColorButton[skillSlot].SetOverVisual("d:/ymir work/ui/skillcolor/skill_color_button_over.tga")
    						self.skillColorButton[skillSlot].SetDownVisual("d:/ymir work/ui/skillcolor/skill_color_button_down.tga")
    						self.skillColorButton[skillSlot].SetPosition(xPos, yPos)
    						self.skillColorButton[skillSlot].SetEvent(lambda arg = skillSlot, arg2 = skillIndex: self.__OnPressSkillColorButton(arg, arg2))
    						if player.GetSkillGrade(skillSlot + 1) >= skillMaxGrade:
    							self.skillColorButton[skillSlot].Show()
    						else:
    							self.skillColorButton[skillSlot].Hide()
    					else:
    						self.skillColorButton[skillSlot].SetPosition(xPos, yPos)
    
    		def __UpdateSkillColorPosition(self):
    			x, y = self.GetGlobalPosition()
    			self.skillColorWnd.SetPosition(x + 250, y)
    
    		def __OnPressSkillColorButton(self, skillSlot, skillIndex):
    			self.skillColorWnd = uiSkillColor.SkillColorWindow(skillSlot, skillIndex)
    			if self.skillColorWnd and not self.skillColorWnd.IsShow():
    				self.skillColorWnd.Show()
    
    	def RefreshSkillPlusButtonList(self):
    
    		if self.isLoaded==0:
    			return
    
    		self.RefreshSkillPlusPointLabel()
    
    		if not self.__CanUseSkillNow():
    			return
    
    		try:
    			if self.PAGE_HORSE == self.curSelectedSkillGroup:
    				self.__RefreshSkillPlusButton("HORSE")
    			else:
    				self.__RefreshSkillPlusButton("ACTIVE")
    
    			self.__RefreshSkillPlusButton("SUPPORT")
    
    		except:
    			import exception
    			exception.Abort("CharacterWindow.RefreshSkillPlusButtonList.BindObject")
    
    	def RefreshSkillPlusPointLabel(self):
    		if self.isLoaded==0:
    			return
    
    		if self.PAGE_HORSE == self.curSelectedSkillGroup:
    			activeStatPoint = player.GetStatus(player.SKILL_HORSE)
    			self.activeSkillPointValue.SetText(str(activeStatPoint))
    
    		else:
    			activeStatPoint = player.GetStatus(player.SKILL_ACTIVE)
    			self.activeSkillPointValue.SetText(str(activeStatPoint))
    
    		supportStatPoint = max(0, player.GetStatus(player.SKILL_SUPPORT))
    		self.supportSkillPointValue.SetText(str(supportStatPoint))
    
    	## Skill Level Up Button
    	def OnPressedSlotButton(self, slotNumber):
    		srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotNumber)
    
    		skillIndex = player.GetSkillIndex(srcSlotIndex)
    		curLevel = player.GetSkillLevel(srcSlotIndex)
    		maxLevel = skill.GetSkillMaxLevel(skillIndex)
    
    		net.SendChatPacket("/skillup " + str(skillIndex))
    
    	## Use Skill
    	def ClickSkillSlot(self, slotIndex):
    
    		srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotIndex)
    		skillIndex = player.GetSkillIndex(srcSlotIndex)
    		skillType = skill.GetSkillType(skillIndex)
    
    		if not self.__CanUseSkillNow():
    			if skill.SKILL_TYPE_ACTIVE == skillType:
    				return
    
    		for slotWindow in self.skillPageDict.values():
    			if slotWindow.HasSlot(slotIndex):
    				if skill.CanUseSkill(skillIndex):
    					player.ClickSkillSlot(srcSlotIndex)
    					return
    
    		mouseModule.mouseController.DeattachObject()
    
    	## FIXME : ½ΊΕ³ΐ» »ηΏλΗίΐ»¶§ ½½·Τ ΉψΘ£Έ¦ °΅Αφ°ν ΗΨ΄η ½½·Τΐ» Γ£ΎΖΌ­ Ύχµ¥ΐΜΖ® ΗΡ΄Ω.
    	##         ΈΕΏμ ΊΗΥΈ®. ±ΈΑ¶ ΐΪΓΌΈ¦ °³Ό±ΗΨΎί Ηµν.
    	def OnUseSkill(self, slotIndex, coolTime):
    
    		skillIndex = player.GetSkillIndex(slotIndex)
    		skillType = skill.GetSkillType(skillIndex)
    
    		## ACTIVE
    		if skill.SKILL_TYPE_ACTIVE == skillType:
    			skillGrade = player.GetSkillGrade(slotIndex)
    			slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
    		## ETC
    		else:
    			slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
    
    		for slotWindow in self.skillPageDict.values():
    			if slotWindow.HasSlot(slotIndex):
    				slotWindow.SetSlotCoolTime(slotIndex, coolTime)
    				return
    
    	def OnActivateSkill(self, slotIndex):
    		skillGrade = player.GetSkillGrade(slotIndex)
    		slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
    		for slotWindow in self.skillPageDict.values():
    			if slotWindow.HasSlot(slotIndex):
    				slotWindow.ActivateSlot(slotIndex)
    				
    				return
    
    	def OnDeactivateSkill(self, slotIndex):
    		skillGrade = player.GetSkillGrade(slotIndex)
    		slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
    		for slotWindow in self.skillPageDict.values():
    			if slotWindow.HasSlot(slotIndex):
    				slotWindow.DeactivateSlot(slotIndex)
    				
    				return
    
    	def __ShowJobToolTip(self):
    		self.toolTipJob.ShowToolTip()
    
    	def __HideJobToolTip(self):
    		self.toolTipJob.HideToolTip()
    
    	def __SetJobText(self, mainJob, subJob):
    		if player.GetStatus(player.LEVEL)<5:
    			subJob=0
    
    		if 949 == app.GetDefaultCodePage():
    			self.toolTipJob.ClearToolTip()
    
    			try:
    				jobInfoTitle=localeInfo.JOBINFO_TITLE[mainJob][subJob]
    				jobInfoData=localeInfo.JOBINFO_DATA_LIST[mainJob][subJob]
    			except IndexError:
    				print "uiCharacter.CharacterWindow.__SetJobText(mainJob=%d, subJob=%d)" % (mainJob, subJob)
    				return
    
    			self.toolTipJob.AutoAppendTextLine(jobInfoTitle)
    			self.toolTipJob.AppendSpace(5)
    
    			for jobInfoDataLine in jobInfoData:
    				self.toolTipJob.AutoAppendTextLine(jobInfoDataLine)
    
    			self.toolTipJob.AlignHorizonalCenter()
    
    	def __ShowAlignmentToolTip(self):
    		if self.toolTipAlignment:
    			self.toolTipAlignment.ShowToolTip()
    
    	def __HideAlignmentToolTip(self):
    		if self.toolTipAlignment:
    			self.toolTipAlignment.HideToolTip()
    
    	def RefreshCharacter(self):
    
    		if self.isLoaded==0:
    			return
    
    		## Name
    		try:
    			characterName = player.GetName()
    			guildName = player.GetGuildName()
    			self.characterNameValue.SetText(characterName)
    			self.guildNameValue.SetText(guildName)
    			if not guildName:
    				if localeInfo.IsARABIC():
    					self.characterNameSlot.SetPosition(19, 34)
    				else:
    					self.characterNameSlot.SetPosition(109, 34)
    
    				self.guildNameSlot.Hide()
    			else:
    				if localeInfo.IsJAPAN():
    					self.characterNameSlot.SetPosition(143, 34)
    				else:
    					self.characterNameSlot.SetPosition(148, 34)
    				self.guildNameSlot.Show()
    		except:
    			import exception
    			exception.Abort("CharacterWindow.RefreshCharacter.BindObject")
    
    		race = net.GetMainActorRace()
    		group = net.GetMainActorSkillGroup()
    		empire = net.GetMainActorEmpire()
    
    		## Job Text
    		job = chr.RaceToJob(race)
    		self.__SetJobText(job, group)
    
    		## FaceImage
    		try:
    			faceImageName = FACE_IMAGE_DICT[race]
    
    			try:
    				self.faceImage.LoadImage(faceImageName)
    			except:
    				print "CharacterWindow.RefreshCharacter(race=%d, faceImageName=%s)" % (race, faceImageName)
    				self.faceImage.Hide()
    
    		except KeyError:
    			self.faceImage.Hide()
    
    		## GroupName
    		self.__SetSkillGroupName(race, group)
    
    		## Skill
    		if 0 == group:
    			self.__SelectSkillGroup(0)
    
    		else:
    			self.__SetSkillSlotData(race, group, empire)
    
    			if self.__CanUseHorseSkill():
    				self.__SelectSkillGroup(0)
    
    	def __SetSkillGroupName(self, race, group):
    
    		job = chr.RaceToJob(race)
    
    		if not self.SKILL_GROUP_NAME_DICT.has_key(job):
    			return
    
    		nameList = self.SKILL_GROUP_NAME_DICT[job]
    
    		if 0 == group:
    			self.skillGroupButton1.SetText(nameList[1])
    			self.skillGroupButton2.SetText(nameList[2])
    			self.skillGroupButton1.Show()
    			self.skillGroupButton2.Show()
    			self.activeSkillGroupName.Hide()
    
    		else:
    
    			if self.__CanUseHorseSkill():
    				self.activeSkillGroupName.Hide()
    				self.skillGroupButton1.SetText(nameList.get(group, "Noname"))
    				self.skillGroupButton2.SetText(localeInfo.SKILL_GROUP_HORSE)
    				self.skillGroupButton1.Show()
    				self.skillGroupButton2.Show()
    
    			else:
    				self.activeSkillGroupName.SetText(nameList.get(group, "Noname"))
    				self.activeSkillGroupName.Show()
    				self.skillGroupButton1.Hide()
    				self.skillGroupButton2.Hide()
    
    	def __SetSkillSlotData(self, race, group, empire=0):
    
    		## SkillIndex
    		playerSettingModule.RegisterSkill(race, group, empire)
    
    		## Event
    		self.__SetSkillSlotEvent()
    
    		## Refresh
    		self.RefreshSkill()
    
    	def __SelectSkillGroup(self, index):
    		for btn in self.skillGroupButton:
    			btn.SetUp()
    		self.skillGroupButton[index].Down()
    
    		if self.__CanUseHorseSkill():
    			if 0 == index:
    				index = net.GetMainActorSkillGroup()-1
    			elif 1 == index:
    				index = self.PAGE_HORSE
    
    		self.curSelectedSkillGroup = index
    		self.__SetSkillSlotData(net.GetMainActorRace(), index+1, net.GetMainActorEmpire())
    
    	def __CanUseSkillNow(self):
    		if 0 == net.GetMainActorSkillGroup():
    			return FALSE
    
    		return TRUE
    
    	def __CanUseHorseSkill(self):
    
    		slotIndex = player.GetSkillSlotIndex(player.SKILL_INDEX_RIDING)
    
    		if not slotIndex:
    			return FALSE
    
    		grade = player.GetSkillGrade(slotIndex)
    		level = player.GetSkillLevel(slotIndex)
    		if level < 0:
    			level *= -1
    		if grade >= 1 and level >= 1:
    			return TRUE
    
    		return FALSE
    
    	def __IsChangedHorseRidingSkillLevel(self):
    		ret = FALSE
    
    		if -1 == self.canUseHorseSkill:
    			self.canUseHorseSkill = self.__CanUseHorseSkill()
    
    		if self.canUseHorseSkill != self.__CanUseHorseSkill():
    			ret = TRUE
    
    		self.canUseHorseSkill = self.__CanUseHorseSkill()
    		return ret
    
    	def __GetRealSkillSlot(self, skillGrade, skillSlot):
    		_min = skill.SKILL_GRADE_COUNT - 1
    		if app.ENABLE_SKILLS_LEVEL_OVER_P:
    			_min -= 1
    			if skillGrade == 2:
    				skillGrade -= 1
    		
    		__calc = skillSlot + min(_min, skillGrade) * skill.SKILL_GRADE_STEP_COUNT
    		return __calc
    
    	def __GetETCSkillRealSlotIndex(self, skillSlot):
    		if skillSlot > 100:
    			return skillSlot
    		return skillSlot % self.ACTIVE_PAGE_SLOT_COUNT
    
    	def __RealSkillSlotToSourceSlot(self, realSkillSlot):
    		if realSkillSlot > 100:
    			return realSkillSlot
    		if self.PAGE_HORSE == self.curSelectedSkillGroup:
    			return realSkillSlot + self.ACTIVE_PAGE_SLOT_COUNT
    		return realSkillSlot % skill.SKILL_GRADE_STEP_COUNT
    
    	def __GetSkillGradeFromSlot(self, skillSlot):
    		return int(skillSlot / skill.SKILL_GRADE_STEP_COUNT)
    
    	def SelectSkillGroup(self, index):
    		self.__SelectSkillGroup(index)
    
    	###################################
    	############# QUESTS ##############
    	###################################
    	
    	def __OnScrollQuest(self):
    		if self.state != "QUEST":
    			return
    
    		curPos = self.questScrollBar.GetPos()
    		if math.fabs(curPos - self.lastScrollPosition) >= 0.001:
    			self.RerenderArea()
    			self.lastScrollPosition = curPos
    
    	def ResetQuestScroll(self):
    		self.questScrollBar.Hide()
    
    		if self.questScrollBar.GetPos() != 0:
    			self.questScrollBar.SetPos(0)
    
    	def RerenderArea(self):
    		overflowingY = self.displayY - self.MAX_QUEST_HEIGHT
    		if overflowingY < 0:
    			overflowingY = 0
    		
    		self.baseCutY = math.ceil(overflowingY * self.questScrollBar.GetPos()/20) * 20
    		print "OverflowingY: ",overflowingY, "baseCutY: ", self.baseCutY
    		self.displayY = 0
    		self.RearrangeCategories(xrange(quest.QUEST_CATEGORY_MAX_NUM))
    		self.RefreshCategory()
    
    		if overflowingY > 0:
    			self.questScrollBar.Show()
    		else:
    			self.ResetQuestScroll()
    
    	def __LoadQuestCat(self):
    		self.questPage.Show()
    
    		if self.isLoaded==0:
    			return
    		
    		for i in xrange(quest.QUEST_CATEGORY_MAX_NUM):
    			cat = self.questCategoryList[i]
    
    			catName = cat.GetProperty("name")
    			if not catName:
    				cat.SetProperty("name", cat.GetText())
    				catName = cat.GetText()
    			
    			count = self.GetCountQuestInCategory(i)
    			print "Loading quests: "+catName+", "+str(count)
    			self.questCategoryList[i].SetTextAlignLeft(catName + " (" + str(count) + ")")
    			self.questCategoryList[i].SetTextColor(self.GetCategoryColor(i))
    			self.questCategoryList[i].Show()
    		
    		self.RefreshCategory()
    		if self.finishFirstLoad == False:
    			self.questScrollBar.Hide()
    		else:
    			self.RerenderArea()
    		self.finishFirstLoad = True
    
    	def GetCategoryColor(self, cat):
    		return self.qColorList['default_title']
    
    	def GetQuestProperties(self, questName):
    		# If it finds one of the tokens in the list it colors the whole quest that way
    		find = {"&": "green", 
    				"*": "blue", 
    				"~": "golden"}
    
    		if questName[0] in find:
    			return (questName[1:], find[questName[0]])
    
    		return (questName, None)
    
    	def IsCategoryOpen(self, cat):
    		return (cat in self.openCategories)
    
    	def ToggleCategory(self, cat):
    		if self.IsCategoryOpen(cat):
    			print "Toggle:close"
    			self.CloseCategory(cat)
    		else:
    			print "Toggle:Open"
    			self.OpenCategory(cat)
    
    	def RearrangeCategories(self, catRange):
    		i = 0
    		for i in catRange:
    			if self.displayY - self.baseCutY >= 0 and self.displayY - self.baseCutY < self.MAX_QUEST_HEIGHT:
    				self.questCategoryList[i].SetPosition(7, self.displayY - self.baseCutY)
    				self.questCategoryList[i].Show()
    			else:
    				self.questCategoryList[i].Hide()
    
    			self.displayY += 20
    			self.catPositionRender[i] = self.displayY
    
    	def CloseCategory(self, cat):
    		if cat in self.openCategories:
    			self.openCategories.remove(cat)
    
    		for curSlot in self.questSlotList:
    			if curSlot.GetProperty("category") == cat:
    				curSlot.Hide()
    				self.displayY -= curSlot.GetHeight()
    
    		self.RerenderArea()
    			
    	def OpenCategory(self, cat):
    		print "Opening category "+str(cat)
    
    		while len(self.openCategories) >= self.maxConcurrentCategories: #close opened ones if we go over the limit
    			ccat = self.openCategories.pop()
    			self.CloseCategory(ccat)
    			print "Closing category "+str(ccat)
    
    		self.openCategories.append(cat)
    		self.RefreshCategory(cat)
    		self.RerenderArea()
    		
    	def __SelectQuest(self, slotIndex):
    		questIndex = self.questIndexMap[slotIndex]
    
    		if not questIndex in self.clickedQuests:
    			self.clickedQuests.append(questIndex)
    
    		event = __import__(pythonApi.GetModuleName("event"))
    		event.QuestButtonClick(-2147483648 + questIndex)
    
    	def RefreshCategory(self, cat = -1):
    		if self.isLoaded == 0 or self.state != "QUEST":
    			return
    
    		cats = []
    		if cat == -1:
    			cats = self.openCategories
    		elif not cat in self.openCategories:
    			self.OpenCategory(cat)
    			return
    		else:
    			cats.append(cat)
    
    		for curCat in cats:
    			self.displayY = self.catPositionRender[curCat]
    			print "Rendering category "+str(curCat)+", position: "+str(self.displayY)
    			# Load
    			self.LoadCategory(curCat)
    			# Rearrange
    			self.RearrangeCategories(xrange(curCat+1, quest.QUEST_CATEGORY_MAX_NUM))
    
    	def ReceiveNewQuest(self, idx):
    		if not self.finishFirstLoad:
    			return
    
    		for cat in xrange(quest.QUEST_CATEGORY_MAX_NUM):
    			for q in self.GetQuestsInCategory(cat):
    				(questID, questIndex, questName, questCategory, questIcon, questCounterName, questCounterValue) = q
    				if questIndex == idx:
    					self.RefreshCategory(cat)
    					self.RefreshCategoriesCount()
    					self.RerenderArea()
    
    	def RefreshCategoriesCount(self):
    		for cat in xrange(quest.QUEST_CATEGORY_MAX_NUM):
    			# Refresh category count
    			catName = self.questCategoryList[cat].GetProperty("name")
    			count = self.GetCountQuestInCategory(cat)
    			print "Refreshing cat count:",cat,",",count
    			self.questCategoryList[cat].SetTextAlignLeft(catName + " (" + str(count) + ")")
    
    	def RefreshQuest(self):
    		if self.isLoaded == 0 or self.state != "QUEST":
    			return
    
    		print "Refreshing ALL"
    		for cat in self.openCategories:
    			print "Refreshing cat:",cat
    			self.RefreshCategory(cat)
    
    		self.RefreshCategoriesCount()
    
    	def CreateQuestSlot(self, name):
    		for cSlot in self.questSlotList:
    			if cSlot.GetWindowName() == name:
    				return cSlot
    
    		pyScrLoader = ui.PythonScriptLoader()
    		slot = ui.ListBar()
    		pyScrLoader.LoadElementListBar(slot, quest_slot_listbar, self.questPage)
    		
    		slot.SetParent(self.questPage)
    		slot.SetWindowName(name)
    		slot.Hide()
    
    		# Store it
    		self.questSlotList.append(slot)
    
    		return slot
    
    	def SetQuest(self, slot, questID, questName, questCounterName, questCounterValue):
    		(name, color) = self.GetQuestProperties(questName)
    		slot.SetTextAlignLeft(name)
    		#if color:
    			#slot.SetTextColor(self.qColorList[color])
    		slot.SetEvent(ui.__mem_func__(self.__SelectQuest), questID)
    		slot.SetWindowHorizontalAlignLeft()
    		slot.Show()
    
    	def LoadCategory(self, cat):
    		# Reinitialize everything
    		self.slotIndex = 0
    		self.questIndexMap = {}
    		self.extraSpace = 0
    		self.counterList = []
    		self.clockList = []
    
    		# Hidea all the slots first
    		for slot in self.questSlotList:
    			slot.Hide()
    		
    		qPos = 0		
    		for q in self.GetQuestsInCategory(cat):
    			(questID, questIndex, questName, questCategory, _, questCounterName, questCounterValue) = q
    			(questClockName, questClockTime) = quest.GetQuestLastTime(questID)
    
    			# Generate slot
    			slot = self.CreateQuestSlot("QuestSlotList_"+str(questCategory)+"_"+str(questID))
    
    			# Position it
    			slot.SetPosition(10, self.displayY - self.baseCutY)
    			baseDisplayY = self.displayY
    			
    			# Set counters if any
    			hasCounter = False
    			if questCounterName != "":
    				self.displayY += 15
    
    				counter = ui.TextLine()
    				counter.SetParent(slot)
    				counter.SetPosition(35, 20)
    				counter.SetText(questCounterName+": "+str(questCounterValue))
    				counter.Show()
    
    				self.counterList.append(counter)
    				hasCounter = True
    
    			# Show clocks if any
    			if len(questClockName) > 1:
    				if questClockTime <= 0:
    					clockText = localeInfo.QUEST_TIMEOVER
    				else:
    					questLastMinute = questClockTime / 60
    					questLastSecond = questClockTime % 60
    
    					clockText = questClockName + ": "
    
    					if questLastMinute > 0:
    						clockText += str(questLastMinute) + localeInfo.QUEST_MIN
    						if questLastSecond > 0:
    							clockText += " "
    
    					if questLastSecond > 0:
    						clockText += str(questLastSecond) + localeInfo.QUEST_SEC
    
    				clock = ui.TextLine()
    				clock.SetParent(slot)
    				clock.SetPosition(35, 20 + int(hasCounter)*14)
    				clock.SetText(clockText)
    				clock.SetProperty("idx", questID)
    				clock.Show()
    
    				self.clockList.append(clock)
    
    				self.displayY += 20
    
    			slot.SetProperty("category", questCategory)
    
    			if questIndex in self.clickedQuests:
    				slot.OnClickEvent() # mark it
    
    			# Display and save it if necessary
    			if baseDisplayY - self.baseCutY >= 0 and baseDisplayY - self.baseCutY < self.MAX_QUEST_HEIGHT:
    				# print "Saved "+questName+" at "+str(self.slotIndex)+", id "+str(self.questIndexMap[questID])
    				self.questIndexMap[questID] = questIndex
    				self.SetQuest(slot, questID, questName, questCounterName, questCounterValue)
    
    			self.displayY += 20
    
    		# Clean non-displayed slots!
    		oldList = self.questSlotList
    		newList = []
    		for slot in self.questSlotList:
    			if slot.IsShow():
    				newList.append(slot)
    
    		self.questSlotList = newList
    
    	def __UpdateQuestClock(self):
    		if "QUEST" == self.state:
    			for clock in self.clockList:
    				if not clock.GetProperty("idx"):
    					print "Invalid clock property"
    					return
    
    				(questClockName, questClockTime) = quest.GetQuestLastTime(clock.GetProperty("idx"))
    
    				if questClockTime <= 0:
    					clockText = localeInfo.QUEST_TIMEOVER
    				else:
    					questLastMinute = questClockTime / 60
    					questLastSecond = questClockTime % 60
    
    					clockText = questClockName + ": "
    
    					if questLastMinute > 0:
    						clockText += str(questLastMinute) + localeInfo.QUEST_MIN
    						if questLastSecond > 0:
    							clockText += " "
    
    					if questLastSecond > 0:
    						clockText += str(questLastSecond) + localeInfo.QUEST_SEC
    
    				clock.SetText(clockText)
    	
    	def __OnClickQuestCategoryButton(self, category):
    		self.ToggleCategory(category)
    
    	def GetQuestsInCategory(self, category, retCount = False):
    		qlist = []
    		count = 0
    		for i in xrange(quest.GetQuestCount()):
    			(questIndex, questName, questCategory, questIcon, questCounterName, questCounterValue) = quest.GetQuestData(i)
    			if questCategory == category:
    				count += 1
    				qlist.append((i, questIndex, questName, questCategory, questIcon, questCounterName, questCounterValue))
    		
    		if retCount:
    			return count
    
    		return qlist
    
    	def GetCountQuestInCategory(self, category):
    		return self.GetQuestsInCategory(category, True)
    		
    	def OpenQuestSlideWindow(self, skin, idx):
    		#wnds = ()
    		#
    		#if self.IsShow() == False:
    		#	return
    		#q = uiQuest.QuestSlideDialog(self, skin, idx)
    		#q.SetWindowName("QuestSlideWindow" + str(idx))
    		#self.SetTop()
    		#q.Show()
            #
    		##?? ???? ????? ? ??? ??? ???? ??? ??? ??
    		#if self.wndQuestSlideWindowNewKey > 0 and self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1] is not None:
    		#	self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1].CloseSelf()
    		#
    		#self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey] = q
    		#
    		#self.wndQuestSlideWindowNewKey = self.wndQuestSlideWindowNewKey + 1
    		#if self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1] is not None:
    		#	self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1].AddOnCloseEvent(lambda key = self.wndQuestSlideWindowNewKey:ui.__mem_func__(self.RemoveQuestSlideDialog)(key-1))
    		return
    
    		def OnUpdate(self):
    			self.__UpdateQuestClock()
    			if app.ENABLE_SKILL_COLOR_SYSTEM:
    				if self.skillColorWnd:
    					self.__UpdateSkillColorPosition()
    	
    	def OnMoveWindow(self, x, y):
    		if self.wndQuestSlideWindowNewKey-1 >= 0:
    			if self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1] is not None:
    				self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1].AdjustPositionAndSize()
    	
    	def RemoveQuestSlideDialog(self,key):
    		if self.wndQuestSlideWindow[key]:
    			self.wndQuestSlideWindow[key] = None

    this is the current .py

     

     

    and here is my old .py

    Quote
    
    import uvvY2sBNvVcbJz4jvDr6fSWYdmqv9NPQ as pythonApi
    app = __import__(pythonApi.GetModuleName("app"))
    chr = __import__(pythonApi.GetModuleName("chr"))
    player = __import__(pythonApi.GetModuleName("player"))
    net = __import__(pythonApi.GetModuleName("net"))
    skill = __import__(pythonApi.GetModuleName("skill"))
    quest = __import__(pythonApi.GetModuleName("quest"))
    event = __import__(pythonApi.GetModuleName("event"))
    chat = __import__(pythonApi.GetModuleName("chat"))
    systemSetting = __import__(pythonApi.GetModuleName("systemSetting"))
    import ui
    import uiScriptLocale
    import dbg
    import snd
    import mouseModule
    import wndMgr
    import playerSettingModule
    import localeInfo
    import uiToolTip
    import constInfo
    import emotion
    import grp
    import uiCommon
    if app.ENABLE_DETAILS_UI:
    	import uiCharacterDetails
    import uiQuest
    import interfaceModule
    import math
    
    #Hizli-Menu#
    import gameInfo
    import uiskybox
    import uiesyaislem
    import uiefsunlar
    import uiswitchbot
    import uikeyboardsettings
    import guvenli
    import uifastequip
    import uiisinlanma
    import uiinterfececolor
    import uiskillcolor
    import uiRutbeBilgi
    
    SHOW_ONLY_ACTIVE_SKILL = FALSE
    SHOW_LIMIT_SUPPORT_SKILL_LIST = []
    HIDE_SUPPORT_SKILL_POINT = TRUE
    
    SHOW_LIMIT_SUPPORT_SKILL_LIST = [121, 122, 123, 124, 126, 127, 129, 128, 131, 137, 138, 139, 140, 141, 142]
    
    FACE_IMAGE_DICT = {
    	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/wolfman_m.tga",
    }
    def unsigned32(n):
    	return n & 0xFFFFFFFFL
    	
    quest_slot_listbar = {
    	"name" : "Quest_Slot",
    	"type" : "listbar",
        
    	"x" : 0,
    	"y" : 0,
    
    	"width" : 210,
    	"height" : 20,
    	"text" : "Quest title",
    	"align" : "left",
    	"horizontal_align" : "left",
    	"vertical_align" : "left",
    	"text_horizontal_align" : "left",
    	"all_align" : "left",
    	"text_height": 20
    }
    	
    class CharacterWindow(ui.ScriptWindow):
    
    	ACTIVE_PAGE_SLOT_COUNT = 8
    	SUPPORT_PAGE_SLOT_COUNT = 12
    
    	PAGE_SLOT_COUNT = 12
    	PAGE_HORSE = 2
    
    	SKILL_GROUP_NAME_DICT = {
    		playerSettingModule.JOB_WARRIOR	: { 1 : localeInfo.SKILL_GROUP_WARRIOR_1,	2 : localeInfo.SKILL_GROUP_WARRIOR_2, },
    		playerSettingModule.JOB_ASSASSIN	: { 1 : localeInfo.SKILL_GROUP_ASSASSIN_1,	2 : localeInfo.SKILL_GROUP_ASSASSIN_2, },
    		playerSettingModule.JOB_SURA		: { 1 : localeInfo.SKILL_GROUP_SURA_1,		2 : localeInfo.SKILL_GROUP_SURA_2, },
    		playerSettingModule.JOB_SHAMAN		: { 1 : localeInfo.SKILL_GROUP_SHAMAN_1,	2 : localeInfo.SKILL_GROUP_SHAMAN_2, },
    		playerSettingModule.JOB_WOLFMAN		: { 1 : "έη Gόdό",	2 : "N.A", },		
    	}
    
    	STAT_DESCRIPTION =	{
    		"HTH" : localeInfo.STAT_TOOLTIP_CON,
    		"INT" : localeInfo.STAT_TOOLTIP_INT,
    		"STR" : localeInfo.STAT_TOOLTIP_STR,
    		"DEX" : localeInfo.STAT_TOOLTIP_DEX,
    		"HTH_QUICK" : localeInfo.STAT_TOOLTIP_CON_QUICK,
    		"INT_QUICK" : localeInfo.STAT_TOOLTIP_INT_QUICK,
    		"STR_QUICK" : localeInfo.STAT_TOOLTIP_STR_QUICK,
    		"DEX_QUICK" : localeInfo.STAT_TOOLTIP_DEX_QUICK,
    	}
    
    	MAX_QUEST_HEIGHT = 275
    
    	STAT_MINUS_DESCRIPTION = localeInfo.STAT_MINUS_DESCRIPTION
    
    	def __init__(self):
    
    		if app.ENABLE_DETAILS_UI:
    			self.chDetailsWnd = None
    			self.isOpenedDetailsWnd = False
    	
    		ui.ScriptWindow.__init__(self)
    		self.state = "STATUS"
    		self.isLoaded = 0
    		self.finishFirstLoad = False
    		
    		self.toolTipSkill = 0
    				
    		self.__Initialize()
    		self.__LoadWindow()
    		
    		#Hizli-Menu#
    		self.keyboardsettings = uikeyboardsettings.KeyChangeWindow()
    		self.keyboardsettings.Hide()
    		#Hizli-Menu#
    
    		self.statusPlusCommandDict={
    			"HTH" : "/stat ht",
    			"INT" : "/stat iq",
    			"STR" : "/stat st",
    			"DEX" : "/stat dx",
    		}
    		
    		self.statusHizliPlusCommandDict={
    			"HTH_QUICK" : "/hizlistatuver ht",
    			"INT_QUICK" : "/hizlistatuver iq",
    			"STR_QUICK" : "/hizlistatuver st",
    			"DEX_QUICK" : "/hizlistatuver dx",
    		}
    
    		self.statusMinusCommandDict={
    			"HTH-" : "/stat- ht",
    			"INT-" : "/stat- iq",
    			"STR-" : "/stat- st",
    			"DEX-" : "/stat- dx",
    		}
    
    	def __del__(self):
    		ui.ScriptWindow.__del__(self)
    
    	def __Initialize(self):
    		self.refreshToolTip = 0
    		self.curSelectedSkillGroup = 0
    		self.canUseHorseSkill = -1
    
    		self.skill_color_gui = None
    		self.open_gui_btn = []
    
    		self.toolTip = None
    		self.toolTipJob = None
    		self.toolTipAlignment = None
    		self.toolTipSkill = None
    
    		self.faceImage = None
    		self.statusPlusLabel = None
    		self.statusPlusValue = None
    		self.activeSlot = None
    		self.tabDict = None
    		self.tabButtonDict = None
    		self.pageDict = None
    		self.titleBarDict = None
    		self.statusPlusButtonDict = None
    		self.statusHizliPlusButtonDict = None
    		self.statusMinusButtonDict = None
    
    		self.skillPageDict = None
    		self.skillGroupButton = ()
    
    		self.activeSlot = None
    		self.activeSkillPointValue = None
    		self.supportSkillPointValue = None
    		self.skillGroupButton1 = None
    		self.skillGroupButton2 = None
    		self.activeSkillGroupName = None
    
    		self.guildNameSlot = None
    		self.guildNameValue = None
    		self.characterNameSlot = None
    		self.characterNameValue = None
    
    		self.emotionToolTip = None
    		self.soloEmotionSlot = None
    		self.dualEmotionSlot = None
    
    		self.questScrollBar = None
    		self.lastScrollPosition = 0
    		self.questBoard = None
    		self.questPage = None
    		self.questTitleBar = None
    		self.questShowingStartIndex = 0
    		self.wndQuestSlideWindow = {}
    		self.wndQuestSlideWindowNewKey = 0
    		self.category_flag = -1
    		self.cnt = -1
    		#self.lp_x = 0
    		#self.lp_y = 0
    		self.slotIndex = 0
    		self.questCategoryList = None
    		#self.IsOpenCategoryList = None
    		self.IsSameFlag = False
    		self.willOpenCategory = None
    
    		# Colored quests/categories
    		self.qColorList = {'green': 0xFF83C055, 'blue': 0xFF45678D, 'golden': 0xFFCAB62F, 'default_title': 0xFFFFE3AD}
    
    		# New quest stuff
    		self.maxConcurrentCategories = 1 # NOTE! The current implementation of the system assumes at some places that
    										 # there can only be one category open at a given time (as the original did)
    		self.openCategories = []
    		self.clickedQuests = []
    		self.questIndexMap = {}		
    		self.displayY = 0
    		self.extraSpace = 0
    		self.counterList = []
    		self.clockList = []
    		self.catPositionRender = []
    		self.baseCutY = 0
    		
    		#Hizli-Menu#
    		self.HizliIsinlanma = None
    		self.HizliEfsunBotu = None
    		self.HizliMarketAra = None
    		self.HizliAtCagir = None
    		self.HizliEkipman = None
    		self.HizliTicaretGecmis = None
    		self.HizliPet = None
    		self.HizliAfrodit = None
    		self.HizliYoutuber = None
    		self.HizliGuvenliPc = None
    		self.HizliUzakMarket = None
    		self.HizliBossSiralamasi = None
    		self.HizliStatus = None
    		self.HizliTamEkran = None
    		self.HizliOtoTopla = None
    		self.HizliOtoYang = None
    		self.HizliGeceGunduz = None
    		self.HizliKarliZemin = None
    		self.HizliKarYagdirma = None
    		self.HizliBonusPenceresi = None
    		#Hizli-Menu#
    		
    	if app.ENABLE_DETAILS_UI:
    		def OnTop(self):
    			if self.chDetailsWnd:
    				self.chDetailsWnd.SetTop()
    
    	if app.ENABLE_DETAILS_UI:
    		def Hide(self):
    			if self.chDetailsWnd:
    				self.isOpenedDetailsWnd = self.chDetailsWnd.IsShow()
    				self.chDetailsWnd.Close()
    			wndMgr.Hide(self.hWnd)
    
    	def Show(self):
    		self.__LoadWindow()
    		
    		if app.ENABLE_DETAILS_UI:
    			self.__InitCharacterDetailsUIButton()
    			if self.chDetailsWnd and self.isOpenedDetailsWnd:
    				self.chDetailsWnd.Show()
    
    		ui.ScriptWindow.Show(self)
    
    	def __LoadScript(self, fileName):
    		pyScrLoader = ui.PythonScriptLoader()
    		pyScrLoader.LoadScriptFile(self, fileName)	
    		
    	def __BindObject(self):
    		self.toolTip = uiToolTip.ToolTip()
    		self.toolTipJob = uiToolTip.ToolTip()
    		self.toolTipAlignment = uiToolTip.ToolTip(130)		
    
    		self.faceImage = self.GetChild("Face_Image")
    
    		faceSlot=self.GetChild("Face_Slot")
    		if 949 == app.GetDefaultCodePage():
    			faceSlot.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowJobToolTip)
    			faceSlot.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideJobToolTip)
    
    		self.statusPlusLabel = self.GetChild("Status_Plus_Label")
    		self.statusPlusValue = self.GetChild("Status_Plus_Value")
    		
    		self.characterNameSlot = self.GetChild("Character_Name_Slot")			
    		self.characterNameValue = self.GetChild("Character_Name")
    		self.guildNameSlot = self.GetChild("Guild_Name_Slot")
    		self.guildNameValue = self.GetChild("Guild_Name")
    		self.characterNameSlot.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowAlignmentToolTip)
    		self.characterNameSlot.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideAlignmentToolTip)
    
    		self.activeSlot = self.GetChild("Skill_Active_Slot")
    		self.activeSkillPointValue = self.GetChild("Active_Skill_Point_Value")
    		self.supportSkillPointValue = self.GetChild("Support_Skill_Point_Value")
    		self.skillGroupButton1 = self.GetChild("Skill_Group_Button_1")
    		self.skillGroupButton2 = self.GetChild("Skill_Group_Button_2")
    		self.activeSkillGroupName = self.GetChild("Active_Skill_Group_Name")
    		
    		self.questBoard = self.GetChild("board")
    		self.questPage = self.GetChild("Quest_Page")
    		self.questTitleBar = self.GetChild("Quest_TitleBar")
    		self.questShowingStartIndex = 0	
    		self.questSlotList = []
    		self.questCategoryList=[]
    
    		self.tabDict = {
    			"STATUS"	: self.GetChild("Tab_01"),
    			"SKILL"		: self.GetChild("Tab_02"),
    			"EMOTICON"	: self.GetChild("Tab_03"),
    			"QUEST"		: self.GetChild("Tab_04"),
    			"BUTON"		: self.GetChild("Tab_05")
    		}
    
    		self.tabButtonDict = {
    			"STATUS"	: self.GetChild("Tab_Button_01"),
    			"SKILL"		: self.GetChild("Tab_Button_02"),
    			"EMOTICON"	: self.GetChild("Tab_Button_03"),
    			"QUEST"		: self.GetChild("Tab_Button_04")
    		}
    
    		self.pageDict = {
    			"STATUS"	: self.GetChild("Character_Page"),
    			"SKILL"		: self.GetChild("Skill_Page"),
    			"EMOTICON"	: self.GetChild("Emoticon_Page"),
    			"QUEST"		: self.GetChild("Quest_Page"),
    			"BUTON"		: self.GetChild("Buton_Page")
    		}
    
    		self.titleBarDict = {
    			"STATUS"	: self.GetChild("Character_TitleBar"),
    			"SKILL"		: self.GetChild("Skill_TitleBar"),
    			"EMOTICON"	: self.GetChild("Emoticon_TitleBar"),
    			"QUEST"		: self.GetChild("Quest_TitleBar"),
    			"BUTON"		: self.GetChild("Buton_TitleBar")
    		}
    
    		self.statusPlusButtonDict = {
    			"HTH"		: self.GetChild("HTH_Plus"),
    			"INT"		: self.GetChild("INT_Plus"),
    			"STR"		: self.GetChild("STR_Plus"),
    			"DEX"		: self.GetChild("DEX_Plus"),
    		}
    
    		self.statusHizliPlusButtonDict = {
    			"HTH_QUICK"		: self.GetChild("HTH_HizliPlus"),
    			"INT_QUICK"		: self.GetChild("INT_HizliPlus"),
    			"STR_QUICK"		: self.GetChild("STR_HizliPlus"),
    			"DEX_QUICK"		: self.GetChild("DEX_HizliPlus"),
    		}
    
    		self.statusMinusButtonDict = {
    			"HTH-"		: self.GetChild("HTH_Minus"),
    			"INT-"		: self.GetChild("INT_Minus"),
    			"STR-"		: self.GetChild("STR_Minus"),
    			"DEX-"		: self.GetChild("DEX_Minus"),
    		}
    
    		self.skillPageDict = {
    			"ACTIVE" : self.GetChild("Skill_Active_Slot"),
    			"SUPPORT" : self.GetChild("Skill_ETC_Slot"),
    			"HORSE" : self.GetChild("Skill_Active_Slot"),
    		}
    
    		self.skillPageStatDict = {
    			"SUPPORT"	: player.SKILL_SUPPORT,
    			"ACTIVE"	: player.SKILL_ACTIVE,
    			"HORSE"		: player.SKILL_HORSE,
    		}
    
    		self.skillGroupButton = (
    			self.GetChild("Skill_Group_Button_1"),
    			self.GetChild("Skill_Group_Button_2"),
    		)
    
    		
    		global SHOW_ONLY_ACTIVE_SKILL
    		global HIDE_SUPPORT_SKILL_POINT
    		if SHOW_ONLY_ACTIVE_SKILL or HIDE_SUPPORT_SKILL_POINT:	
    			self.GetChild("Support_Skill_Point_Label").Hide()
    
    		self.soloEmotionSlot = self.GetChild("SoloEmotionSlot")
    		self.dualEmotionSlot = self.GetChild("DualEmotionSlot")
    		self.__SetEmotionSlot()
    
    		for i in xrange(quest.QUEST_CATEGORY_MAX_NUM):
    			self.questCategoryList.append(self.GetChild("Quest_Category_0" + str(i)))
    			self.catPositionRender.append(0)
    
    		self.RearrangeCategories(xrange(quest.QUEST_CATEGORY_MAX_NUM))
    		
    		#Hizli-Menu#
    		self.HizliIsinlanma = self.GetChild("Isinlanma")
    		self.HizliIsinlanma.SetEvent(ui.__mem_func__(self.HizliMenu), 1)
    
    		self.HizliEfsunBotu = self.GetChild("EfsunBotu")
    		self.HizliEfsunBotu.SetEvent(ui.__mem_func__(self.HizliMenu), 2)
    
    		# self.HizliMarketAra = self.GetChild("MarketArama")
    		# self.HizliMarketAra.SetEvent(ui.__mem_func__(self.HizliMenu), 3)
    
    		# self.HizliAtCagir = self.GetChild("AtCagirma")
    		# self.HizliAtCagir.SetEvent(ui.__mem_func__(self.HizliMenu), 4)
    
    		# self.HizliEkipman = self.GetChild("HizliEkipman")
    		# self.HizliEkipman.SetEvent(ui.__mem_func__(self.HizliMenu), 5)
    
    		# self.HizliTicaretGecmis = self.GetChild("TicaretGecmisi")
    		# self.HizliTicaretGecmis.SetEvent(ui.__mem_func__(self.HizliMenu), 6)
    
    		# self.HizliPet = self.GetChild("PetEkran")
    		# self.HizliPet.SetEvent(ui.__mem_func__(self.HizliMenu), 7)
    
    		# self.HizliAfrodit = self.GetChild("AfroditEkran")
    		# self.HizliAfrodit.SetEvent(ui.__mem_func__(self.HizliMenu), 8)
    
    		# self.HizliYoutuber = self.GetChild("Youtuber")
    		# self.HizliYoutuber.SetEvent(ui.__mem_func__(self.HizliMenu), 9)
    
    		# self.HizliGuvenliPc = self.GetChild("GuvenliPc")
    		# self.HizliGuvenliPc.SetEvent(ui.__mem_func__(self.HizliMenu), 10)
    
    		self.HizliUzakMarket = self.GetChild("UzakMarket")
    		self.HizliUzakMarket.SetEvent(ui.__mem_func__(self.HizliMenu), 11)
    
    		# self.HizliBossSiralamasi = self.GetChild("BossSiralamasi")
    		# self.HizliBossSiralamasi.SetEvent(ui.__mem_func__(self.HizliMenu), 12)
    
    		# self.HizliStatus = self.GetChild("HizliStatus")
    		# self.HizliStatus.SetEvent(ui.__mem_func__(self.HizliMenu), 13)
    
    		# self.HizliTamEkran = self.GetChild("TamEkran")
    		# self.HizliTamEkran.SetEvent(ui.__mem_func__(self.HizliMenu), 14)
    
    		# self.HizliOtoTopla = self.GetChild("OtoTopla")
    		# self.HizliOtoTopla.SetEvent(ui.__mem_func__(self.HizliMenu), 15)
    
    		# self.HizliOtoYang = self.GetChild("OtoYangTopla")
    		# self.HizliOtoYang.SetEvent(ui.__mem_func__(self.HizliMenu), 16)
    
    		# self.HizliGeceGunduz = self.GetChild("GeceGunduzModu")
    		# self.HizliGeceGunduz.SetEvent(ui.__mem_func__(self.HizliMenu), 17)
    
    		# self.HizliKarliZemin = self.GetChild("KarliZemin")
    		# self.HizliKarliZemin.SetEvent(ui.__mem_func__(self.HizliMenu), 18)
    
    		# self.HizliKarYagdirma = self.GetChild("KarYagdirma")
    		# self.HizliKarYagdirma.SetEvent(ui.__mem_func__(self.HizliMenu), 19)
    
    		self.HizliBonusPenceresi = self.GetChild("BonusPenceresi")
    		self.HizliBonusPenceresi.SetEvent(ui.__mem_func__(self.HizliMenu), 20)
    		#Hizli-Menu#
    			
    		if app.ENABLE_DETAILS_UI:
    			self.MainBoard = self.GetChild("board")
    			self.ExpandBtn = ui.MakeButton(self.MainBoard, 240, 120, "", "d:/ymir work/ui/game/belt_inventory/", "btn_minimize_normal.tga", "btn_minimize_over.tga", "btn_minimize_down.tga")
    			self.ExpandBtn.SetEvent(ui.__mem_func__(self.__ClickExpandButton))
    			self.MinimizeBtn = ui.MakeButton(self.MainBoard, 240, 120, "", "d:/ymir work/ui/game/belt_inventory/", "btn_expand_normal.tga", "btn_expand_over.tga", "btn_expand_down.tga")
    			self.MinimizeBtn.SetEvent(ui.__mem_func__(self.__ClickMinimizeButton))
    			
    	#Hizli-Menu#
    	def HizliMenu(self, type):
    		if type == 1:
    			gameInfo.SYSTEMS_PAKET0=1
    
    		elif type == 2:
    			self.EfsunBotDialog = uiefsunlar.OptionDialog()
    			self.EfsunBotDialog.Show()
    
    		elif type == 3:
    			player.OpenKeychangeWindow()
    
    		elif type == 4:
    			net.SendChatPacket("/horse_summon_user")
    
    		elif type == 5:
    			self.EkipmanButton = uifastequip.changeequip()
    			self.EkipmanButton.Show()
    
    		elif type == 6:
    			gameInfo.SYSTEMS_PAKET1=1
    
    		elif type == 7:
    			gameInfo.SYSTEMS_PAKET2=1
    
    		elif type == 8:
    			gameInfo.SYSTEMS_PAKET3=1
    
    		elif type == 9:
    			self.EsyaBotDialog = uiesyaislem.OptionDialog()
    			self.EsyaBotDialog.Show()
    
    		elif type == 10:
    			self.GuvenliPC = guvenli.GuvenliDialog()
    			self.GuvenliPC.Show()
    
    		elif type == 11:
    			gameInfo.SYSTEMS_PAKET4=1
    
    		elif type == 12:
    			namem=str(player.GetName())
    			self.KoyDialog = uiCommon.QuestionDialog2()
    			self.KoyDialog.SetText1("Hi,"+constInfo.bosluk+namem+constInfo.bosluk+constInfo.normalrenk)
    			self.KoyDialog.SetText2("Do you want to teleport to your sheep?")
    			self.KoyDialog.SetAcceptEvent(lambda arg = True: self.OnWarpStart(1))
    			self.KoyDialog.SetCancelEvent(lambda arg = False: self.OnWarpStart(2))
    			self.KoyDialog.Open()
    
    		elif type == 13:
    			gameInfo.SYSTEMS_PAKET5=1
    
    		elif type == 14:
    			gameInfo.SYSTEMS_PAKET6=1
    
    		elif type == 15:
    			qid = constInfo.kilitqin
    			event.QuestButtonClick(qid)
    
    		elif type == 16:
    			self.isinlanmaxdd = uiisinlanma.Isinlanma()
    			self.isinlanmaxdd.Show()
    
    		elif type == 17:
    			gameInfo.SYSTEMS_PAKET9=1
    
    		elif type == 18:
    			self.RutbeBilgiGoster = uiRutbeBilgi.Rutbe_Bilgi()
    			self.RutbeBilgiGoster.Show()
    			#import os
    			#os.system('start VideoRecord/screenrecorder.exe')
    			#chat.AppendChat(chat.CHAT_TYPE_INFO, '1- Kirmizi butona basarak kaydedebilirsiniz.')
    			#chat.AppendChat(chat.CHAT_TYPE_INFO, '2- Tam ekran video almak icin : Ayar isaretine tiklayarak Full Screen secin')
    			#chat.AppendChat(chat.CHAT_TYPE_INFO, '3- Kaydedilen videolar, metin2 klasorundeki Video-Recording klasorune kaydedilir.')
    
    		elif type == 19:
    			gameInfo.SYSTEMS_PAKET8=1
    			#if constInfo.balikbot == 0:
    				#execfile('balikbot.py',{})
    
    		elif type == 20:
    			gameInfo.BOSS_TRACKING=1
    
    	def OnWarpStart(self, gelen):
    		self.KoyDialog.Close()
    		if gelen == 1:
    			net.SendChatPacket("/koye_git")
    
    	#Hizli-Menu#
    	
    	if app.ENABLE_DETAILS_UI:
    		def __InitCharacterDetailsUIButton(self):
    			self.ExpandBtn.Show()
    			self.MinimizeBtn.Hide()
    			
    		def __ClickExpandButton(self):
    			if not self.chDetailsWnd:
    				self.chDetailsWnd = uiCharacterDetails.CharacterDetailsUI(self)
    				self.chDetailsWnd.Show()
    			else:
    				self.chDetailsWnd.Show()
    				
    			self.ExpandBtn.Hide()
    			self.MinimizeBtn.Show()
    				
    		def __ClickMinimizeButton(self):
    			self.chDetailsWnd.Hide()
    			self.MinimizeBtn.Hide()
    			self.ExpandBtn.Show()
    			
    		def OnMoveWindow(self, x, y):
    			if self.chDetailsWnd:
    				self.chDetailsWnd.AdjustPosition(x, y)
    
    	def __SetSkillSlotEvent(self):
    		for skillPageValue in self.skillPageDict.itervalues():
    			skillPageValue.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
    			skillPageValue.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectSkill))
    			skillPageValue.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
    			skillPageValue.SetUnselectItemSlotEvent(ui.__mem_func__(self.ClickSkillSlot))
    			skillPageValue.SetUseSlotEvent(ui.__mem_func__(self.ClickSkillSlot))
    			skillPageValue.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
    			skillPageValue.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
    			skillPageValue.SetPressedSlotButtonEvent(ui.__mem_func__(self.OnPressedSlotButton))
    			skillPageValue.AppendSlotButton("d:/ymir work/ui/game/windows/btn_plus_up.sub",\
    											"d:/ymir work/ui/game/windows/btn_plus_over.sub",\
    											"d:/ymir work/ui/game/windows/btn_plus_down.sub")
    
    	def __SetEmotionSlot(self):
    
    		self.emotionToolTip = uiToolTip.ToolTip()
    
    		for slot in (self.soloEmotionSlot, self.dualEmotionSlot):
    			slot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
    			slot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectEmotion))
    			slot.SetUnselectItemSlotEvent(ui.__mem_func__(self.__ClickEmotionSlot))
    			slot.SetUseSlotEvent(ui.__mem_func__(self.__ClickEmotionSlot))
    			slot.SetOverInItemEvent(ui.__mem_func__(self.__OverInEmotion))
    			slot.SetOverOutItemEvent(ui.__mem_func__(self.__OverOutEmotion))
    			slot.AppendSlotButton("d:/ymir work/ui/game/windows/btn_plus_up.sub",\
    											"d:/ymir work/ui/game/windows/btn_plus_over.sub",\
    											"d:/ymir work/ui/game/windows/btn_plus_down.sub")
    
    		for slotIdx, datadict in emotion.EMOTION_DICT.items():
    			emotionIdx = slotIdx
    
    			slot = self.soloEmotionSlot
    			if slotIdx > 50:
    				slot = self.dualEmotionSlot
    
    			slot.SetEmotionSlot(slotIdx, emotionIdx)
    			slot.SetCoverButton(slotIdx)
    
    	def __SelectEmotion(self, slotIndex):
    		if not slotIndex in emotion.EMOTION_DICT:
    			return
    
    		if app.IsPressed(app.DIK_LCONTROL):
    			player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_EMOTION, slotIndex)
    			return
    
    		mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_EMOTION, slotIndex, slotIndex)
    
    	def __ClickEmotionSlot(self, slotIndex):
    
    		if not slotIndex in emotion.EMOTION_DICT:
    			return
    		print "check acting"
    		if player.IsActingEmotion():
    			return
    		command = emotion.EMOTION_DICT[slotIndex]["command"]
    		print "command", command
    
    		if slotIndex > 50:
    			vid = player.GetTargetVID()
    
    			if 0 == vid or vid == player.GetMainCharacterIndex() or chr.IsNPC(vid) or chr.IsEnemy(vid):
    				chat = __import__(pythonApi.GetModuleName("chat"))
    				chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EMOTION_CHOOSE_ONE)
    				return
    
    			command += " " + chr.GetNameByVID(vid)
    
    		print "send_command", command
    		net.SendChatPacket(command)
    
    	def ActEmotion(self, emotionIndex):
    		self.__ClickEmotionSlot(emotionIndex)
    
    	def __OverInEmotion(self, slotIndex):
    		if self.emotionToolTip:
    
    			if not slotIndex in emotion.EMOTION_DICT:
    				return
    
    			self.emotionToolTip.ClearToolTip()
    			self.emotionToolTip.SetTitle(emotion.EMOTION_DICT[slotIndex]["name"])
    			self.emotionToolTip.AlignHorizonalCenter()
    			self.emotionToolTip.ShowToolTip()
    
    	def __OverOutEmotion(self):
    		if self.emotionToolTip:
    			self.emotionToolTip.HideToolTip()
    
    	def __BindEvent(self):
    		for i in xrange(len(self.skillGroupButton)):
    			self.skillGroupButton[i].SetEvent(lambda arg=i: self.__SelectSkillGroup(arg))
    
    		self.RefreshQuest()
    		self.__HideJobToolTip()
    
    		for (tabKey, tabButton) in self.tabButtonDict.items():
    			tabButton.SetEvent(ui.__mem_func__(self.__OnClickTabButton), tabKey)
    
    		for (statusPlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
    			statusPlusButton.SAFE_SetEvent(self.__OnClickStatusPlusButton, statusPlusKey)
    			statusPlusButton.ShowToolTip = lambda arg=statusPlusKey: self.__OverInStatButton(arg)
    			statusPlusButton.HideToolTip = lambda arg=statusPlusKey: self.__OverOutStatButton()
    
    		for (statusHizliPlusKey, statusHizliPlusButton) in self.statusHizliPlusButtonDict.items():
    			statusHizliPlusButton.SAFE_SetEvent(self.__OnClickHizliStatusPlusButton, statusHizliPlusKey)
    			statusHizliPlusButton.ShowToolTip = lambda arg=statusHizliPlusKey: self.__OverInStatButton(arg)
    			statusHizliPlusButton.HideToolTip = lambda arg=statusHizliPlusKey: self.__OverOutStatButton()
    		
    		for (statusMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
    			statusMinusButton.SAFE_SetEvent(self.__OnClickStatusMinusButton, statusMinusKey)
    			statusMinusButton.ShowToolTip = lambda arg=statusMinusKey: self.__OverInStatMinusButton(arg)
    			statusMinusButton.HideToolTip = lambda arg=statusMinusKey: self.__OverOutStatMinusButton()
    
    		for titleBarValue in self.titleBarDict.itervalues():
    			if app.ENABLE_DETAILS_UI:
    				titleBarValue.SetCloseEvent(ui.__mem_func__(self.Close))
    			else:
    				titleBarValue.SetCloseEvent(ui.__mem_func__(self.Hide))
    
    		self.questTitleBar.SetCloseEvent(ui.__mem_func__(self.Close))
           	
    		for i in xrange(quest.QUEST_CATEGORY_MAX_NUM):
    			self.questCategoryList[i].SetEvent(ui.__mem_func__(self.__OnClickQuestCategoryButton),i)
    
    	def __LoadWindow(self):
    		if self.isLoaded == 1:
    			return
    
    		self.isLoaded = 1
    
    		try:
    			if localeInfo.IsARABIC() or localeInfo.IsVIETNAM() or localeInfo.IsJAPAN():
    				self.__LoadScript(uiScriptLocale.LOCALE_UISCRIPT_PATH + "CharacterWindow.py")
    			else:
    				self.__LoadScript("UIScript/CharacterWindow.py")
    				
    			self.__BindObject()
    			self.__BindEvent()
    			self.questScrollBar = self.GetChild("QuestScrollBar")
    			self.questScrollBar.SetScrollEvent(ui.__mem_func__(self.__OnScrollQuest))	
    		except:
    			import exception
    			exception.Abort("CharacterWindow.__LoadWindow")
    
    		#self.tabButtonDict["EMOTICON"].Disable()
    		self.SetState("STATUS")
    
    	def Destroy(self):
    		self.Hide()
    		self.ClearDictionary()
    
    		self.__Initialize()
    
    	def Close(self):
    		self.Hide()
    		if None != self.toolTipSkill:
    			self.toolTipSkill.Hide()
    
    		if self.skill_color_gui:
    			self.skill_color_gui.Close()
    
    		if app.ENABLE_DETAILS_UI:
    			if self.chDetailsWnd and self.chDetailsWnd.IsShow():
    				self.chDetailsWnd.Hide()
    				
    		if self.wndQuestSlideWindowNewKey>0:
    			if self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1] is not None:
    				self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1].CloseSelf()
    
    	def SetSkillToolTip(self, toolTipSkill):
    		self.toolTipSkill = toolTipSkill			
    
    	def __OnClickStatusPlusButton(self, statusKey):
    		try:
    			statusPlusCommand=self.statusPlusCommandDict[statusKey]
    			net.SendChatPacket(statusPlusCommand)
    		except KeyError, msg:
    			dbg.TraceError("CharacterWindow.__OnClickStatusPlusButton KeyError: %s", msg)
    
    	def __OnClickHizliStatusPlusButton(self, statusKey):
    		try:
    			statusHizliPlusCommand=self.statusHizliPlusCommandDict[statusKey]
    			net.SendChatPacket(statusHizliPlusCommand)
    		except KeyError, msg:
    			dbg.TraceError("CharacterWindow.__OnClickStatusHizliPlusButton KeyError: %s", msg)
    	
    	def __OnClickStatusMinusButton(self, statusKey):
    		try:
    			statusMinusCommand=self.statusMinusCommandDict[statusKey]
    			net.SendChatPacket(statusMinusCommand)
    		except KeyError, msg:
    			dbg.TraceError("CharacterWindow.__OnClickStatusMinusButton KeyError: %s", msg)
    
    
    	def __OnClickTabButton(self, stateKey):
    		self.SetState(stateKey)
    
    	def SetState(self, stateKey):
    		if self.tabButtonDict == None:
    			return
    		
    		self.state = stateKey
    		
    		if stateKey != "QUEST":
    			self.questPage.Hide()
    			if self.wndQuestSlideWindowNewKey > 0:
    				if self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1] is not None:
    					self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1].CloseSelf()
    		else:
    			self.__LoadQuestCat()
    		
    		for (tabKey, tabButton) in self.tabButtonDict.items():
    			if stateKey!=tabKey:
    				tabButton.SetUp()
    
    		for tabValue in self.tabDict.itervalues():
    			tabValue.Hide()
    
    		for pageValue in self.pageDict.itervalues():
    			pageValue.Hide()
    
    		for titleBarValue in self.titleBarDict.itervalues():
    			titleBarValue.Hide()
    
    		self.titleBarDict[stateKey].Show()
    		self.tabDict[stateKey].Show()
    		self.pageDict[stateKey].Show()
    		
    
    	def GetState(self):
    		return self.state
    
    	def __GetTotalAtkText(self):
    		minAtk=player.GetStatus(player.ATT_MIN)
    		maxAtk=player.GetStatus(player.ATT_MAX)
    		atkBonus=player.GetStatus(player.ATT_BONUS)
    		attackerBonus=player.GetStatus(player.ATTACKER_BONUS)
    		min = int(minAtk+atkBonus+attackerBonus)
    		max = int(maxAtk+atkBonus+attackerBonus)
    		if minAtk==maxAtk:
    			return "%s" % (localeInfo.NumberToString2(min))
    		else:
    			return "%s-%s" % (localeInfo.NumberToString2(min), localeInfo.NumberToString2(max))
    
    	def __GetTotalMagAtkText(self):
    		minMagAtk=player.GetStatus(player.MAG_ATT)+player.GetStatus(player.MIN_MAGIC_WEP)
    		maxMagAtk=player.GetStatus(player.MAG_ATT)+player.GetStatus(player.MAX_MAGIC_WEP)
    
    		if minMagAtk==maxMagAtk:
    			return "%d" % (minMagAtk)
    		else:
    			return "%d-%d" % (minMagAtk, maxMagAtk)
    
    	def __GetTotalDefText(self):
    		defValue=player.GetStatus(player.DEF_GRADE)
    		if constInfo.ADD_DEF_BONUS_ENABLE:
    			defValue+=player.GetStatus(player.DEF_BONUS)
    		return "%s" % (localeInfo.NumberToString2(defValue))
    	
    	def RefreshStatus(self):
    		if self.isLoaded==0:
    			return
    
    		try:
    			self.GetChild("Level_Value").SetText(str(player.GetStatus(player.LEVEL)))
    			self.GetChild("Exp_Value").SetText(str(unsigned32(player.GetEXP())))
    			self.GetChild("RestExp_Value").SetText(str(unsigned32(player.GetStatus(player.NEXT_EXP)) - unsigned32(player.GetStatus(player.EXP))))
    			#self.GetChild("HP_Value").SetText(str(player.GetStatus(player.HP)) + '/' + str(player.GetStatus(player.MAX_HP)))
    			#self.GetChild("SP_Value").SetText(str(player.GetStatus(player.SP)) + '/' + str(player.GetStatus(player.MAX_SP)))
    			self.GetChild("HP_Value").SetText(localeInfo.NumberToString2(str(player.GetStatus(player.HP))) + '/' + localeInfo.NumberToString2(str(player.GetStatus(player.MAX_HP))))
    			self.GetChild("SP_Value").SetText(localeInfo.NumberToString2(str(player.GetStatus(player.SP))) + '/' + localeInfo.NumberToString2(str(player.GetStatus(player.MAX_SP))))
    
    			self.GetChild("STR_Value").SetText(str(player.GetStatus(player.ST)))
    			self.GetChild("DEX_Value").SetText(str(player.GetStatus(player.DX)))
    			self.GetChild("HTH_Value").SetText(str(player.GetStatus(player.HT)))
    			self.GetChild("INT_Value").SetText(str(player.GetStatus(player.IQ)))
    
    			self.GetChild("ATT_Value").SetText(self.__GetTotalAtkText())
    			self.GetChild("DEF_Value").SetText(self.__GetTotalDefText())
    
    			self.GetChild("MATT_Value").SetText(self.__GetTotalMagAtkText())
    			#self.GetChild("MATT_Value").SetText(str(player.GetStatus(player.MAG_ATT)))
    
    			self.GetChild("MDEF_Value").SetText(str(player.GetStatus(player.MAG_DEF)))
    			self.GetChild("ASPD_Value").SetText(str(player.GetStatus(player.ATT_SPEED)))
    			self.GetChild("MSPD_Value").SetText(str(player.GetStatus(player.MOVING_SPEED)))
    			self.GetChild("CSPD_Value").SetText(str(player.GetStatus(player.CASTING_SPEED)))
    			self.GetChild("ER_Value").SetText(str(player.GetStatus(player.EVADE_RATE)))
    
    		except:
    			#import exception
    			#exception.Abort("CharacterWindow.RefreshStatus.BindObject")
    			## °ΤΐΣΐΜ Ζ¨°ά ΉφΈ²
    			pass
    
    		self.__RefreshStatusPlusButtonList()
    		self.__RefreshStatusMinusButtonList()
    		self.RefreshAlignment()
    		if app.ENABLE_REBIRTH:
    			self.RefreshRebirth()
    
    		if self.refreshToolTip:
    			self.refreshToolTip()
    			
    		if app.ENABLE_DETAILS_UI:
    			if self.chDetailsWnd and self.chDetailsWnd.IsShow():
    				self.chDetailsWnd.RefreshLabel()
    
    	def __RefreshStatusPlusButtonList(self):
    		if self.isLoaded==0:
    			return
    
    		statusPlusPoint=player.GetStatus(player.STAT)
    
    		if statusPlusPoint>0:
    			self.statusPlusValue.SetText(str(statusPlusPoint))
    			self.statusPlusLabel.Show()
    			self.ShowStatusPlusButtonList()
    			self.ShowStatusHizliPlusButtonList()
    		else:
    			self.statusPlusValue.SetText(str(0))
    			self.statusPlusLabel.Hide()
    			self.HideStatusPlusButtonList()
    			self.HideStatusHizliPlusButtonList()
    
    	def __RefreshStatusMinusButtonList(self):
    		if self.isLoaded==0:
    			return
    
    		statusMinusPoint=self.__GetStatMinusPoint()
    
    		if statusMinusPoint>0:
    			self.__ShowStatusMinusButtonList()
    		else:
    			self.__HideStatusMinusButtonList()
    
    	def RefreshAlignment(self):
    		point, grade = player.GetAlignmentData()
    
    		import colorInfo
    		COLOR_DICT = {	0 : colorInfo.TITLE_RGB_GOOD_7,
    						1 : colorInfo.TITLE_RGB_GOOD_6,
    						2 : colorInfo.TITLE_RGB_GOOD_5,
    						3 : colorInfo.TITLE_RGB_GOOD_4,
    						4 : colorInfo.TITLE_RGB_GOOD_3,
    						5 : colorInfo.TITLE_RGB_GOOD_2,
    						6 : colorInfo.TITLE_RGB_GOOD_1,
    						7 : colorInfo.TITLE_RGB_NORMAL,
    						8 : colorInfo.TITLE_RGB_EVIL_1,
    						9 : colorInfo.TITLE_RGB_EVIL_2,
    						10 : colorInfo.TITLE_RGB_EVIL_3,
    						11 : colorInfo.TITLE_RGB_EVIL_4, }
    		colorList = COLOR_DICT.get(grade, colorInfo.TITLE_RGB_NORMAL)
    		gradeColor = ui.GenerateColor(colorList[0], colorList[1], colorList[2])
    
    		self.toolTipAlignment.ClearToolTip()
    		self.toolTipAlignment.AutoAppendTextLine(localeInfo.TITLE_NAME_LIST[grade], gradeColor)
    		self.toolTipAlignment.AutoAppendTextLine(localeInfo.ALIGNMENT_NAME + str(point))
    		#self.toolTipAlignment.AppendSpace(2)
    		#self.toolTipAlignment.AutoAppendTextLine(localeInfo.YEAR_ROUND_NAME + str(player.GetYearRoundPoint()))
    		#self.toolTipAlignment.AppendSpace(2)
    		#self.toolTipAlignment.AutoAppendTextLine(localeInfo.ACHIEVEMENT_NAME + str(player.GetAchievementPoint()))
    		#self.toolTipAlignment.AppendSpace(2)
    		#self.toolTipAlignment.AutoAppendTextLine(localeInfo.BOSS_EVENT_NAME + str(player.GetBossEventPoint()))
    		#self.toolTipAlignment.AppendSpace(2)
    		#self.toolTipAlignment.AutoAppendTextLine(localeInfo.RAMADAN_EVENT_NAME + str(player.GetRamadanEventPoint()))
    		self.toolTipAlignment.AppendSpace(2)
    		self.toolTipAlignment.AlignHorizonalCenter()
    
    	if app.ENABLE_REBIRTH:
    		def RefreshRebirth(self):
    			levelkontrol = player.GetStatus(player.LEVEL)
    			rebirth = player.GetRebirth()
    			if levelkontrol == 120: ## Serveriniz son seviyesine gore duzenleyin.
    				self.rebirtyazdir = self.GetChild("Level_Value").SetText(str(player.GetStatus(player.LEVEL)) + '-' + str(rebirth))
    			else:
    				self.GetChild("Level_Value").SetText(str(player.GetStatus(player.LEVEL)))
    	
    	def __ShowStatusMinusButtonList(self):
    		for (stateMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
    			statusMinusButton.Show()
    
    	def __HideStatusMinusButtonList(self):
    		for (stateMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
    			statusMinusButton.Hide()
    
    	def ShowStatusPlusButtonList(self):
    		for (statePlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
    			statusPlusButton.Show()
    
    	def HideStatusPlusButtonList(self):
    		for (statePlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
    			statusPlusButton.Hide()
    
    	def ShowStatusHizliPlusButtonList(self):
    		for (statePlusKey, statusHizliPlusButton) in self.statusHizliPlusButtonDict.items():
    			statusHizliPlusButton.Show()
    
    	def HideStatusHizliPlusButtonList(self):
    		for (statePlusKey, statusHizliPlusButton) in self.statusHizliPlusButtonDict.items():
    			statusHizliPlusButton.Hide()
    
    	def SelectSkill(self, skillSlotIndex):
    
    		mouseController = mouseModule.mouseController
    
    		if FALSE == mouseController.isAttached():
    
    			srcSlotIndex = self.__RealSkillSlotToSourceSlot(skillSlotIndex)
    			selectedSkillIndex = player.GetSkillIndex(srcSlotIndex)
    
    			if skill.CanUseSkill(selectedSkillIndex):
    
    				if app.IsPressed(app.DIK_LCONTROL):
    
    					player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_SKILL, srcSlotIndex)
    					return
    
    				mouseController.AttachObject(self, player.SLOT_TYPE_SKILL, srcSlotIndex, selectedSkillIndex)
    
    		else:
    
    			mouseController.DeattachObject()
    
    	def SelectEmptySlot(self, SlotIndex):
    		mouseModule.mouseController.DeattachObject()
    
    	## ToolTip
    	def OverInItem(self, slotNumber):
    
    		if mouseModule.mouseController.isAttached():
    			return
    
    		if not self.toolTipSkill:
    			return
    			
    		srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotNumber)
    		skillIndex = player.GetSkillIndex(srcSlotIndex)
    		skillLevel = player.GetSkillLevel(srcSlotIndex)
    		skillGrade = player.GetSkillGrade(srcSlotIndex)
    		skillType = skill.GetSkillType(skillIndex)
    
    		## ACTIVE
    		if skill.SKILL_TYPE_ACTIVE == skillType:
    			overInSkillGrade = self.__GetSkillGradeFromSlot(slotNumber)
    
    			if overInSkillGrade == skill.SKILL_GRADE_COUNT-1 and skillGrade == skill.SKILL_GRADE_COUNT:
    				self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, skillGrade, skillLevel)
    			elif overInSkillGrade == skillGrade:
    				if app.ENABLE_SKILLS_LEVEL_OVER_P and skillGrade == 2:
    					self.toolTipSkill.SetSkillOnlyName(srcSlotIndex, skillIndex, overInSkillGrade + 1)
    				else:
    					self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, overInSkillGrade, skillLevel)
    			elif app.ENABLE_SKILLS_LEVEL_OVER_P and overInSkillGrade == skill.SKILL_GRADE_COUNT-2 and skillGrade >= skill.SKILL_GRADE_COUNT-1:
    				self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, skillGrade, skillLevel)
    			else:
    				if app.ENABLE_SKILLS_LEVEL_OVER_P and overInSkillGrade == 1 and skillGrade == 2:
    					self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, overInSkillGrade + 1, skillLevel)
    				elif app.ENABLE_SKILLS_LEVEL_OVER_P and overInSkillGrade == 2 and skillGrade < 3:
    					self.toolTipSkill.SetSkillOnlyName(srcSlotIndex, skillIndex, overInSkillGrade + 1)
    				else:
    					self.toolTipSkill.SetSkillOnlyName(srcSlotIndex, skillIndex, overInSkillGrade)
    		else:
    			self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, skillGrade, skillLevel)
    
    	def OverOutItem(self):
    		if None == self.toolTipSkill:
    			return
    			
    		if 0 != self.toolTipSkill:
    			self.toolTipSkill.HideToolTip()
    
    	def __GetStatMinusPoint(self):
    		POINT_STAT_RESET_COUNT = 112
    		return player.GetStatus(POINT_STAT_RESET_COUNT)
    
    	def __OverInStatMinusButton(self, stat):
    		try:
    			self.__ShowStatToolTip(self.STAT_MINUS_DESCRIPTION[stat] % self.__GetStatMinusPoint())
    		except KeyError:
    			pass
    
    		self.refreshToolTip = lambda arg=stat: self.__OverInStatMinusButton(arg) 
    
    	def __OverOutStatMinusButton(self):
    		self.__HideStatToolTip()
    		self.refreshToolTip = 0
    
    	def __OverInStatButton(self, stat):	
    		try:
    			self.__ShowStatToolTip(self.STAT_DESCRIPTION[stat])
    		except KeyError:
    			pass
    			
    	def __OverInStatButton2(self):	
    		try:
    			self.__ShowStatToolTip("statu")
    		except KeyError:
    			pass	
    
    	def __OverOutStatButton(self):
    		self.__HideStatToolTip()
    
    	def __ShowStatToolTip(self, statDesc):
    		if self.toolTip:
    			self.toolTip.ClearToolTip()
    			self.toolTip.AppendTextLine(statDesc)
    			self.toolTip.Show()
    
    	def __HideStatToolTip(self):
    		if self.toolTip:
    			self.toolTip.Hide()
    
    	def OnPressEscapeKey(self):
    		self.Close()
    		return TRUE
    
    	## Skill Process
    	def __RefreshSkillPage(self, name, slotCount):
    		global SHOW_LIMIT_SUPPORT_SKILL_LIST
    
    		skillPage = self.skillPageDict[name]
    
    		startSlotIndex = skillPage.GetStartIndex()
    		if name == "ACTIVE":
    			if self.PAGE_HORSE == self.curSelectedSkillGroup:
    				startSlotIndex += slotCount
    		
    		getSkillType = skill.GetSkillType
    		getSkillIndex = player.GetSkillIndex
    		getSkillGrade = player.GetSkillGrade
    		getSkillLevel = player.GetSkillLevel
    		getSkillMaxLevel = skill.GetSkillMaxLevel
    		getSkillLevelUpPoint = skill.GetSkillLevelUpPoint
    		if app.ENABLE_SKILLS_LEVEL_OVER_P:
    			refresh = 0
    		
    		for i in xrange(slotCount + 1):
    			slotIndex = i + startSlotIndex
    			skillIndex = getSkillIndex(slotIndex)
    			if not app.ENABLE_SKILLS_LEVEL_OVER_P:
    				for j in xrange(skill.SKILL_GRADE_COUNT):
    					skillPage.ClearSlot(self.__GetRealSkillSlot(j, i))
    			else:
    				if not refresh and skillIndex >= 137 and skillIndex <= 140:
    					for w in xrange(slotCount + 1):
    						for q in xrange(skill.SKILL_GRADE_COUNT):
    							skillPage.ClearSlot(self.__GetRealSkillSlot(q, w))
    					
    					refresh = 1
    			
    			if app.ENABLE_SKILLS_LEVEL_OVER_P:
    				if slotIndex == 7 or slotIndex == 8:
    					for j in xrange(skill.SKILL_GRADE_COUNT):
    						skillPage.ClearSlot(self.__GetRealSkillSlot(j, slotIndex))
    			
    			if not skillIndex:
    				continue
    			
    			skillType = getSkillType(skillIndex)
    			skillGrade = getSkillGrade(slotIndex)
    			skillLevel = getSkillLevel(slotIndex)
    			
    			if skillIndex == player.SKILL_INDEX_RIDING:
    				if app.ENABLE_SKILLS_LEVEL_OVER_P:
    					skGrade = 0
    					if skillLevel >= 11 and skillLevel < 20:
    						skGrade = 1
    					elif skillGrade == 1:
    						skGrade = 2
    				
    				if skillGrade == 1:
    					skillLevel += 19
    				elif skillGrade == 2:
    					skillLevel += 29
    				elif skillGrade == 3:
    					skillLevel = 40
    				
    				skGr = max(skillLevel - 1, 0)
    				if app.ENABLE_SKILLS_LEVEL_OVER_P:
    					skGr = skGrade
    				
    				skillPage.SetSkillSlotNew(slotIndex, skillIndex, skGr, skillLevel)
    				skillPage.SetSlotCount(slotIndex, skillLevel)
    			elif skillType == skill.SKILL_TYPE_ACTIVE:
    				for j in xrange(skill.SKILL_GRADE_COUNT):
    					if app.ENABLE_SKILLS_LEVEL_OVER_P:
    						if j == 2 and skillGrade == 1:
    							continue
    					
    					realSlotIndex = self.__GetRealSkillSlot(j, slotIndex)
    					skillPage.SetSkillSlotNew(realSlotIndex, skillIndex, j, skillLevel)
    					skillPage.SetCoverButton(realSlotIndex)
    					if (skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT - 1):
    						skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
    					elif (not self.__CanUseSkillNow()) or (skillGrade != j):
    						if app.ENABLE_SKILLS_LEVEL_OVER_P:
    							if j != 2 and skillGrade != 2:
    								skillPage.ClearSlot(realSlotIndex)
    								skillPage.SetSkillSlotNew(realSlotIndex, skillIndex, j, skillLevel)
    								skillPage.SetCoverButton(realSlotIndex)
    							elif skillGrade == 2 and j >= 3:
    								skillPage.ClearSlot(realSlotIndex)
    								skillPage.SetSkillSlotNew(realSlotIndex, skillIndex, j, skillLevel)
    								skillPage.SetCoverButton(realSlotIndex)
    						
    						skillPage.SetSlotCount(realSlotIndex, 0)
    						skillPage.DisableCoverButton(realSlotIndex)
    					else:
    						skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
    			else:
    				if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
    					realSlotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
    					skillPage.SetSkillSlot(realSlotIndex, skillIndex, skillLevel)
    					skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
    					if skill.CanUseSkill(skillIndex):
    						skillPage.SetCoverButton(realSlotIndex)
    			
    			skillPage.RefreshSlot()
    
    	def RefreshSkill(self):
    
    		if self.isLoaded==0:
    			return
    
    		if self.__IsChangedHorseRidingSkillLevel():
    			self.RefreshCharacter()
    			return
    
    
    		global SHOW_ONLY_ACTIVE_SKILL
    		if SHOW_ONLY_ACTIVE_SKILL:
    			self.__RefreshSkillPage("ACTIVE", self.ACTIVE_PAGE_SLOT_COUNT)
    		else:
    			self.__RefreshSkillPage("ACTIVE", self.ACTIVE_PAGE_SLOT_COUNT)
    			self.__RefreshSkillPage("SUPPORT", self.SUPPORT_PAGE_SLOT_COUNT)
    
    		self.RefreshSkillPlusButtonList()
    
    	def CanShowPlusButton(self, skillIndex, skillLevel, curStatPoint):
    
    		## ½ΊΕ³ΐΜ ΐΦΐΈΈι
    		if 0 == skillIndex:
    			return FALSE
    
    		## ·ΉΊ§Ύχ Α¶°Ηΐ» ΈΈΑ·ΗΡ΄ΩΈι
    		if not skill.CanLevelUpSkill(skillIndex, skillLevel):
    			return FALSE
    
    		return TRUE
    
    	def __RefreshSkillPlusButton(self, name):
    		global HIDE_SUPPORT_SKILL_POINT
    		if HIDE_SUPPORT_SKILL_POINT and "SUPPORT" == name:
    			return
    
    		slotWindow = self.skillPageDict[name]
    		slotWindow.HideAllSlotButton()
    
    		slotStatType = self.skillPageStatDict[name]
    		if 0 == slotStatType:
    			return
    
    		statPoint = player.GetStatus(slotStatType)
    		startSlotIndex = slotWindow.GetStartIndex()
    		if "HORSE" == name:
    			startSlotIndex += self.ACTIVE_PAGE_SLOT_COUNT
    
    		if statPoint > 0:
    			for i in xrange(self.PAGE_SLOT_COUNT):
    				slotIndex = i + startSlotIndex
    				skillIndex = player.GetSkillIndex(slotIndex)
    				skillGrade = player.GetSkillGrade(slotIndex)
    				skillLevel = player.GetSkillLevel(slotIndex)
    
    				if skillIndex == 0:
    					continue
    				if skillGrade != 0:
    					continue
    
    				if name == "HORSE":
    					if player.GetStatus(player.LEVEL) >= skill.GetSkillLevelLimit(skillIndex):
    						if skillLevel < 20:
    							slotWindow.ShowSlotButton(self.__GetETCSkillRealSlotIndex(slotIndex))
    
    				else:
    					if "SUPPORT" == name:						
    						if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
    							if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
    								slotWindow.ShowSlotButton(slotIndex)
    					else:
    						if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
    							slotWindow.ShowSlotButton(slotIndex)
    					
    
    	def __RefreshOpenGUIButton(self):
    		posx,posy = 0,0
    		for i in xrange(self.PAGE_SLOT_COUNT):
    			if i < 6:
    				if i == 1 or i == 3 or i == 5:
    					posx = 130 + 2 * 37
    					posy = i * 18 + 10
    				else:
    					posx = 18 + 2 * 37
    					posy = i * 18 + 25
    				if self.PAGE_HORSE != self.curSelectedSkillGroup:
    					if len(self.open_gui_btn) == i:
    						self.open_gui_btn.append([])
    						self.open_gui_btn[i] = ui.Button()
    						self.open_gui_btn[i].SetParent(self.activeSlot)
    						self.open_gui_btn[i].SetUpVisual("d:/ymir work/ui/skillcolor/skill_color_button_default.tga")
    						self.open_gui_btn[i].SetOverVisual("d:/ymir work/ui/skillcolor/skill_color_button_over.tga")
    						self.open_gui_btn[i].SetDownVisual("d:/ymir work/ui/skillcolor/skill_color_button_down.tga")
    						self.open_gui_btn[i].SetPosition(posx, posy)
    						self.open_gui_btn[i].SetEvent(lambda arg = i: self.__OnPressOpenGUIButton(arg))
    						self.open_gui_btn[i].Show()
    					else:                  
    						self.open_gui_btn[i].SetPosition(posx, posy)
    				else:
    					self.open_gui_btn[i].Hide()
    
    	def __UpdateSkillColorPosition(self):
    		x,y = self.GetGlobalPosition()
    		self.skill_color_gui.SetPosition(x+250,y)
    
    	def __OnPressOpenGUIButton(self, arg):
    		if self.PAGE_HORSE != self.curSelectedSkillGroup:
    			self.skill_color_gui = uiskillcolor.ChangeSkillColorWindow(arg)
    			self.skill_color_gui.Show()
    	
    	def RefreshSkillPlusButtonList(self):
    
    		if self.isLoaded==0:
    			return
    
    		self.RefreshSkillPlusPointLabel()
    
    		if not self.__CanUseSkillNow():
    			return
    
    		try:
    			if self.PAGE_HORSE == self.curSelectedSkillGroup:
    				self.__RefreshSkillPlusButton("HORSE")
    			else:
    				self.__RefreshSkillPlusButton("ACTIVE")
    
    			self.__RefreshSkillPlusButton("SUPPORT")
    
    		except:
    			import exception
    			exception.Abort("CharacterWindow.RefreshSkillPlusButtonList.BindObject")
    
    	def RefreshSkillPlusPointLabel(self):
    		if self.isLoaded==0:
    			return
    
    		if self.PAGE_HORSE == self.curSelectedSkillGroup:
    			activeStatPoint = player.GetStatus(player.SKILL_HORSE)
    			self.activeSkillPointValue.SetText(str(activeStatPoint))
    
    		else:
    			activeStatPoint = player.GetStatus(player.SKILL_ACTIVE)
    			self.activeSkillPointValue.SetText(str(activeStatPoint))
    
    		supportStatPoint = max(0, player.GetStatus(player.SKILL_SUPPORT))
    		self.supportSkillPointValue.SetText(str(supportStatPoint))
    
    	## Skill Level Up Button
    	def OnPressedSlotButton(self, slotNumber):
    		srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotNumber)
    
    		skillIndex = player.GetSkillIndex(srcSlotIndex)
    		curLevel = player.GetSkillLevel(srcSlotIndex)
    		maxLevel = skill.GetSkillMaxLevel(skillIndex)
    
    		net.SendChatPacket("/skillup " + str(skillIndex))
    
    	## Use Skill
    	def ClickSkillSlot(self, slotIndex):
    
    		srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotIndex)
    		skillIndex = player.GetSkillIndex(srcSlotIndex)
    		skillType = skill.GetSkillType(skillIndex)
    
    		if not self.__CanUseSkillNow():
    			if skill.SKILL_TYPE_ACTIVE == skillType:
    				return
    
    		for slotWindow in self.skillPageDict.values():
    			if slotWindow.HasSlot(slotIndex):
    				if skill.CanUseSkill(skillIndex):
    					player.ClickSkillSlot(srcSlotIndex)
    					return
    
    		mouseModule.mouseController.DeattachObject()
    
    	## FIXME : ½ΊΕ³ΐ» »ηΏλΗίΐ»¶§ ½½·Τ ΉψΘ£Έ¦ °΅Αφ°ν ΗΨ΄η ½½·Τΐ» Γ£ΎΖΌ­ Ύχµ¥ΐΜΖ® ΗΡ΄Ω.
    	##         ΈΕΏμ ΊΗΥΈ®. ±ΈΑ¶ ΐΪΓΌΈ¦ °³Ό±ΗΨΎί Ηµν.
    	def OnUseSkill(self, slotIndex, coolTime):
    
    		skillIndex = player.GetSkillIndex(slotIndex)
    		skillType = skill.GetSkillType(skillIndex)
    
    		## ACTIVE
    		if skill.SKILL_TYPE_ACTIVE == skillType:
    			skillGrade = player.GetSkillGrade(slotIndex)
    			slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
    		## ETC
    		else:
    			slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
    
    		for slotWindow in self.skillPageDict.values():
    			if slotWindow.HasSlot(slotIndex):
    				slotWindow.SetSlotCoolTime(slotIndex, coolTime)
    				return
    
    	def OnActivateSkill(self, slotIndex):
    		skillGrade = player.GetSkillGrade(slotIndex)
    		slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
    		for slotWindow in self.skillPageDict.values():
    			if slotWindow.HasSlot(slotIndex):
    				slotWindow.ActivateSlot(slotIndex)
    				
    				return
    
    	def OnDeactivateSkill(self, slotIndex):
    		skillGrade = player.GetSkillGrade(slotIndex)
    		slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
    		for slotWindow in self.skillPageDict.values():
    			if slotWindow.HasSlot(slotIndex):
    				slotWindow.DeactivateSlot(slotIndex)
    				
    				return
    
    	def __ShowJobToolTip(self):
    		self.toolTipJob.ShowToolTip()
    
    	def __HideJobToolTip(self):
    		self.toolTipJob.HideToolTip()
    
    	def __SetJobText(self, mainJob, subJob):
    		if player.GetStatus(player.LEVEL)<5:
    			subJob=0
    
    		if 949 == app.GetDefaultCodePage():
    			self.toolTipJob.ClearToolTip()
    
    			try:
    				jobInfoTitle=localeInfo.JOBINFO_TITLE[mainJob][subJob]
    				jobInfoData=localeInfo.JOBINFO_DATA_LIST[mainJob][subJob]
    			except IndexError:
    				print "uiCharacter.CharacterWindow.__SetJobText(mainJob=%d, subJob=%d)" % (mainJob, subJob)
    				return
    
    			self.toolTipJob.AutoAppendTextLine(jobInfoTitle)
    			self.toolTipJob.AppendSpace(5)
    
    			for jobInfoDataLine in jobInfoData:
    				self.toolTipJob.AutoAppendTextLine(jobInfoDataLine)
    
    			self.toolTipJob.AlignHorizonalCenter()
    
    	def __ShowAlignmentToolTip(self):
    		if self.toolTipAlignment:
    			self.toolTipAlignment.ShowToolTip()
    
    	def __HideAlignmentToolTip(self):
    		if self.toolTipAlignment:
    			self.toolTipAlignment.HideToolTip()
    
    	def RefreshCharacter(self):
    
    		if self.isLoaded==0:
    			return
    
    		## Name
    		try:
    			characterName = player.GetName()
    			guildName = player.GetGuildName()
    			self.characterNameValue.SetText(characterName)
    			self.guildNameValue.SetText(guildName)
    			if not guildName:
    				if localeInfo.IsARABIC():
    					self.characterNameSlot.SetPosition(19, 34)
    				else:
    					self.characterNameSlot.SetPosition(109, 34)
    
    				self.guildNameSlot.Hide()
    			else:
    				if localeInfo.IsJAPAN():
    					self.characterNameSlot.SetPosition(143, 34)
    				else:
    					self.characterNameSlot.SetPosition(148, 34)
    				self.guildNameSlot.Show()
    		except:
    			import exception
    			exception.Abort("CharacterWindow.RefreshCharacter.BindObject")
    
    		race = net.GetMainActorRace()
    		group = net.GetMainActorSkillGroup()
    		empire = net.GetMainActorEmpire()
    
    		## Job Text
    		job = chr.RaceToJob(race)
    		self.__SetJobText(job, group)
    
    		## FaceImage
    		try:
    			faceImageName = FACE_IMAGE_DICT[race]
    
    			try:
    				self.faceImage.LoadImage(faceImageName)
    			except:
    				print "CharacterWindow.RefreshCharacter(race=%d, faceImageName=%s)" % (race, faceImageName)
    				self.faceImage.Hide()
    
    		except KeyError:
    			self.faceImage.Hide()
    
    		## GroupName
    		self.__SetSkillGroupName(race, group)
    		self.__RefreshOpenGUIButton()
    
    		## Skill
    		if 0 == group:
    			self.__SelectSkillGroup(0)
    
    		else:
    			self.__SetSkillSlotData(race, group, empire)
    
    			if self.__CanUseHorseSkill():
    				self.__SelectSkillGroup(0)
    
    	def __SetSkillGroupName(self, race, group):
    
    		job = chr.RaceToJob(race)
    
    		if not self.SKILL_GROUP_NAME_DICT.has_key(job):
    			return
    
    		nameList = self.SKILL_GROUP_NAME_DICT[job]
    
    		if 0 == group:
    			self.skillGroupButton1.SetText(nameList[1])
    			self.skillGroupButton2.SetText(nameList[2])
    			self.skillGroupButton1.Show()
    			self.skillGroupButton2.Show()
    			self.activeSkillGroupName.Hide()
    
    		else:
    
    			if self.__CanUseHorseSkill():
    				self.activeSkillGroupName.Hide()
    				self.skillGroupButton1.SetText(nameList.get(group, "Noname"))
    				self.skillGroupButton2.SetText(localeInfo.SKILL_GROUP_HORSE)
    				self.skillGroupButton1.Show()
    				self.skillGroupButton2.Show()
    
    			else:
    				self.activeSkillGroupName.SetText(nameList.get(group, "Noname"))
    				self.activeSkillGroupName.Show()
    				self.skillGroupButton1.Hide()
    				self.skillGroupButton2.Hide()
    
    	def __SetSkillSlotData(self, race, group, empire=0):
    
    		## SkillIndex
    		playerSettingModule.RegisterSkill(race, group, empire)
    
    		## Event
    		self.__SetSkillSlotEvent()
    
    		## Refresh
    		self.RefreshSkill()
    
    	def __SelectSkillGroup(self, index):
    		for btn in self.skillGroupButton:
    			btn.SetUp()
    		self.skillGroupButton[index].Down()
    
    		if self.__CanUseHorseSkill():
    			if 0 == index:
    				index = net.GetMainActorSkillGroup()-1
    			elif 1 == index:
    				index = self.PAGE_HORSE
    
    		self.curSelectedSkillGroup = index
    		self.__SetSkillSlotData(net.GetMainActorRace(), index+1, net.GetMainActorEmpire())
    
    	def __CanUseSkillNow(self):
    		if 0 == net.GetMainActorSkillGroup():
    			return FALSE
    
    		return TRUE
    
    	def __CanUseHorseSkill(self):
    
    		slotIndex = player.GetSkillSlotIndex(player.SKILL_INDEX_RIDING)
    
    		if not slotIndex:
    			return FALSE
    
    		grade = player.GetSkillGrade(slotIndex)
    		level = player.GetSkillLevel(slotIndex)
    		if level < 0:
    			level *= -1
    		if grade >= 1 and level >= 1:
    			return TRUE
    
    		return FALSE
    
    	def __IsChangedHorseRidingSkillLevel(self):
    		ret = FALSE
    
    		if -1 == self.canUseHorseSkill:
    			self.canUseHorseSkill = self.__CanUseHorseSkill()
    
    		if self.canUseHorseSkill != self.__CanUseHorseSkill():
    			ret = TRUE
    
    		self.canUseHorseSkill = self.__CanUseHorseSkill()
    		return ret
    
    	def __GetRealSkillSlot(self, skillGrade, skillSlot):
    		_min = skill.SKILL_GRADE_COUNT - 1
    		if app.ENABLE_SKILLS_LEVEL_OVER_P:
    			_min -= 1
    			if skillGrade == 2:
    				skillGrade -= 1
    		
    		__calc = skillSlot + min(_min, skillGrade) * skill.SKILL_GRADE_STEP_COUNT
    		return __calc
    
    	def __GetETCSkillRealSlotIndex(self, skillSlot):
    		if skillSlot > 100:
    			return skillSlot
    		return skillSlot % self.ACTIVE_PAGE_SLOT_COUNT
    
    	def __RealSkillSlotToSourceSlot(self, realSkillSlot):
    		if realSkillSlot > 100:
    			return realSkillSlot
    		if self.PAGE_HORSE == self.curSelectedSkillGroup:
    			return realSkillSlot + self.ACTIVE_PAGE_SLOT_COUNT
    		return realSkillSlot % skill.SKILL_GRADE_STEP_COUNT
    
    	def __GetSkillGradeFromSlot(self, skillSlot):
    		return int(skillSlot / skill.SKILL_GRADE_STEP_COUNT)
    
    	def SelectSkillGroup(self, index):
    		self.__SelectSkillGroup(index)
    
    	###################################
    	############# QUESTS ##############
    	###################################
    	
    	def __OnScrollQuest(self):
    		if self.state != "QUEST":
    			return
    
    		curPos = self.questScrollBar.GetPos()
    		if math.fabs(curPos - self.lastScrollPosition) >= 0.001:
    			self.RerenderArea()
    			self.lastScrollPosition = curPos
    
    	def ResetQuestScroll(self):
    		self.questScrollBar.Hide()
    
    		if self.questScrollBar.GetPos() != 0:
    			self.questScrollBar.SetPos(0)
    
    	def RerenderArea(self):
    		overflowingY = self.displayY - self.MAX_QUEST_HEIGHT
    		if overflowingY < 0:
    			overflowingY = 0
    		
    		self.baseCutY = math.ceil(overflowingY * self.questScrollBar.GetPos()/20) * 20
    		print "OverflowingY: ",overflowingY, "baseCutY: ", self.baseCutY
    		self.displayY = 0
    		self.RearrangeCategories(xrange(quest.QUEST_CATEGORY_MAX_NUM))
    		self.RefreshCategory()
    
    		if overflowingY > 0:
    			self.questScrollBar.Show()
    		else:
    			self.ResetQuestScroll()
    
    	def __LoadQuestCat(self):
    		self.questPage.Show()
    
    		if self.isLoaded==0:
    			return
    		
    		for i in xrange(quest.QUEST_CATEGORY_MAX_NUM):
    			cat = self.questCategoryList[i]
    
    			catName = cat.GetProperty("name")
    			if not catName:
    				cat.SetProperty("name", cat.GetText())
    				catName = cat.GetText()
    			
    			count = self.GetCountQuestInCategory(i)
    			print "Loading quests: "+catName+", "+str(count)
    			self.questCategoryList[i].SetTextAlignLeft(catName + " (" + str(count) + ")")
    			self.questCategoryList[i].SetTextColor(self.GetCategoryColor(i))
    			self.questCategoryList[i].Show()
    		
    		self.RefreshCategory()
    		if self.finishFirstLoad == False:
    			self.questScrollBar.Hide()
    		else:
    			self.RerenderArea()
    		self.finishFirstLoad = True
    
    	def GetCategoryColor(self, cat):
    		return self.qColorList['default_title']
    
    	def GetQuestProperties(self, questName):
    		# If it finds one of the tokens in the list it colors the whole quest that way
    		find = {"&": "green", 
    				"*": "blue", 
    				"~": "golden"}
    
    		if questName[0] in find:
    			return (questName[1:], find[questName[0]])
    
    		return (questName, None)
    
    	def IsCategoryOpen(self, cat):
    		return (cat in self.openCategories)
    
    	def ToggleCategory(self, cat):
    		if self.IsCategoryOpen(cat):
    			print "Toggle:close"
    			self.CloseCategory(cat)
    		else:
    			print "Toggle:Open"
    			self.OpenCategory(cat)
    
    	def RearrangeCategories(self, catRange):
    		i = 0
    		for i in catRange:
    			if self.displayY - self.baseCutY >= 0 and self.displayY - self.baseCutY < self.MAX_QUEST_HEIGHT:
    				self.questCategoryList[i].SetPosition(7, self.displayY - self.baseCutY)
    				self.questCategoryList[i].Show()
    			else:
    				self.questCategoryList[i].Hide()
    
    			self.displayY += 20
    			self.catPositionRender[i] = self.displayY
    
    	def CloseCategory(self, cat):
    		if cat in self.openCategories:
    			self.openCategories.remove(cat)
    
    		for curSlot in self.questSlotList:
    			if curSlot.GetProperty("category") == cat:
    				curSlot.Hide()
    				self.displayY -= curSlot.GetHeight()
    
    		self.RerenderArea()
    			
    	def OpenCategory(self, cat):
    		print "Opening category "+str(cat)
    
    		while len(self.openCategories) >= self.maxConcurrentCategories: #close opened ones if we go over the limit
    			ccat = self.openCategories.pop()
    			self.CloseCategory(ccat)
    			print "Closing category "+str(ccat)
    
    		self.openCategories.append(cat)
    		self.RefreshCategory(cat)
    		self.RerenderArea()
    		
    	def __SelectQuest(self, slotIndex):
    		questIndex = self.questIndexMap[slotIndex]
    
    		if not questIndex in self.clickedQuests:
    			self.clickedQuests.append(questIndex)
    
    		event = __import__(pythonApi.GetModuleName("event"))
    		event.QuestButtonClick(-2147483648 + questIndex)
    
    	def RefreshCategory(self, cat = -1):
    		if self.isLoaded == 0 or self.state != "QUEST":
    			return
    
    		cats = []
    		if cat == -1:
    			cats = self.openCategories
    		elif not cat in self.openCategories:
    			self.OpenCategory(cat)
    			return
    		else:
    			cats.append(cat)
    
    		for curCat in cats:
    			self.displayY = self.catPositionRender[curCat]
    			print "Rendering category "+str(curCat)+", position: "+str(self.displayY)
    			# Load
    			self.LoadCategory(curCat)
    			# Rearrange
    			self.RearrangeCategories(xrange(curCat+1, quest.QUEST_CATEGORY_MAX_NUM))
    
    	def ReceiveNewQuest(self, idx):
    		if not self.finishFirstLoad:
    			return
    
    		for cat in xrange(quest.QUEST_CATEGORY_MAX_NUM):
    			for q in self.GetQuestsInCategory(cat):
    				(questID, questIndex, questName, questCategory, questIcon, questCounterName, questCounterValue) = q
    				if questIndex == idx:
    					self.RefreshCategory(cat)
    					self.RefreshCategoriesCount()
    					self.RerenderArea()
    
    	def RefreshCategoriesCount(self):
    		for cat in xrange(quest.QUEST_CATEGORY_MAX_NUM):
    			# Refresh category count
    			catName = self.questCategoryList[cat].GetProperty("name")
    			count = self.GetCountQuestInCategory(cat)
    			print "Refreshing cat count:",cat,",",count
    			self.questCategoryList[cat].SetTextAlignLeft(catName + " (" + str(count) + ")")
    
    	def RefreshQuest(self):
    		if self.isLoaded == 0 or self.state != "QUEST":
    			return
    
    		print "Refreshing ALL"
    		for cat in self.openCategories:
    			print "Refreshing cat:",cat
    			self.RefreshCategory(cat)
    
    		self.RefreshCategoriesCount()
    
    	def CreateQuestSlot(self, name):
    		for cSlot in self.questSlotList:
    			if cSlot.GetWindowName() == name:
    				return cSlot
    
    		pyScrLoader = ui.PythonScriptLoader()
    		slot = ui.ListBar()
    		pyScrLoader.LoadElementListBar(slot, quest_slot_listbar, self.questPage)
    		
    		slot.SetParent(self.questPage)
    		slot.SetWindowName(name)
    		slot.Hide()
    
    		# Store it
    		self.questSlotList.append(slot)
    
    		return slot
    
    	def SetQuest(self, slot, questID, questName, questCounterName, questCounterValue):
    		(name, color) = self.GetQuestProperties(questName)
    		slot.SetTextAlignLeft(name)
    		#if color:
    			#slot.SetTextColor(self.qColorList[color])
    		slot.SetEvent(ui.__mem_func__(self.__SelectQuest), questID)
    		slot.SetWindowHorizontalAlignLeft()
    		slot.Show()
    
    	def LoadCategory(self, cat):
    		# Reinitialize everything
    		self.slotIndex = 0
    		self.questIndexMap = {}
    		self.extraSpace = 0
    		self.counterList = []
    		self.clockList = []
    
    		# Hidea all the slots first
    		for slot in self.questSlotList:
    			slot.Hide()
    		
    		qPos = 0		
    		for q in self.GetQuestsInCategory(cat):
    			(questID, questIndex, questName, questCategory, _, questCounterName, questCounterValue) = q
    			(questClockName, questClockTime) = quest.GetQuestLastTime(questID)
    
    			# Generate slot
    			slot = self.CreateQuestSlot("QuestSlotList_"+str(questCategory)+"_"+str(questID))
    
    			# Position it
    			slot.SetPosition(10, self.displayY - self.baseCutY)
    			baseDisplayY = self.displayY
    			
    			# Set counters if any
    			hasCounter = False
    			if questCounterName != "":
    				self.displayY += 15
    
    				counter = ui.TextLine()
    				counter.SetParent(slot)
    				counter.SetPosition(35, 20)
    				counter.SetText(questCounterName+": "+str(questCounterValue))
    				counter.Show()
    
    				self.counterList.append(counter)
    				hasCounter = True
    
    			# Show clocks if any
    			if len(questClockName) > 1:
    				if questClockTime <= 0:
    					clockText = localeInfo.QUEST_TIMEOVER
    				else:
    					questLastMinute = questClockTime / 60
    					questLastSecond = questClockTime % 60
    
    					clockText = questClockName + ": "
    
    					if questLastMinute > 0:
    						clockText += str(questLastMinute) + localeInfo.QUEST_MIN
    						if questLastSecond > 0:
    							clockText += " "
    
    					if questLastSecond > 0:
    						clockText += str(questLastSecond) + localeInfo.QUEST_SEC
    
    				clock = ui.TextLine()
    				clock.SetParent(slot)
    				clock.SetPosition(35, 20 + int(hasCounter)*14)
    				clock.SetText(clockText)
    				clock.SetProperty("idx", questID)
    				clock.Show()
    
    				self.clockList.append(clock)
    
    				self.displayY += 20
    
    			slot.SetProperty("category", questCategory)
    
    			if questIndex in self.clickedQuests:
    				slot.OnClickEvent() # mark it
    
    			# Display and save it if necessary
    			if baseDisplayY - self.baseCutY >= 0 and baseDisplayY - self.baseCutY < self.MAX_QUEST_HEIGHT:
    				# print "Saved "+questName+" at "+str(self.slotIndex)+", id "+str(self.questIndexMap[questID])
    				self.questIndexMap[questID] = questIndex
    				self.SetQuest(slot, questID, questName, questCounterName, questCounterValue)
    
    			self.displayY += 20
    
    		# Clean non-displayed slots!
    		oldList = self.questSlotList
    		newList = []
    		for slot in self.questSlotList:
    			if slot.IsShow():
    				newList.append(slot)
    
    		self.questSlotList = newList
    
    	def __UpdateQuestClock(self):
    		if "QUEST" == self.state:
    			for clock in self.clockList:
    				if not clock.GetProperty("idx"):
    					print "Invalid clock property"
    					return
    
    				(questClockName, questClockTime) = quest.GetQuestLastTime(clock.GetProperty("idx"))
    
    				if questClockTime <= 0:
    					clockText = localeInfo.QUEST_TIMEOVER
    				else:
    					questLastMinute = questClockTime / 60
    					questLastSecond = questClockTime % 60
    
    					clockText = questClockName + ": "
    
    					if questLastMinute > 0:
    						clockText += str(questLastMinute) + localeInfo.QUEST_MIN
    						if questLastSecond > 0:
    							clockText += " "
    
    					if questLastSecond > 0:
    						clockText += str(questLastSecond) + localeInfo.QUEST_SEC
    
    				clock.SetText(clockText)
    	
    	def __OnClickQuestCategoryButton(self, category):
    		self.ToggleCategory(category)
    
    	def GetQuestsInCategory(self, category, retCount = False):
    		qlist = []
    		count = 0
    		for i in xrange(quest.GetQuestCount()):
    			(questIndex, questName, questCategory, questIcon, questCounterName, questCounterValue) = quest.GetQuestData(i)
    			if questCategory == category:
    				count += 1
    				qlist.append((i, questIndex, questName, questCategory, questIcon, questCounterName, questCounterValue))
    		
    		if retCount:
    			return count
    
    		return qlist
    
    	def GetCountQuestInCategory(self, category):
    		return self.GetQuestsInCategory(category, True)
    		
    	def OpenQuestSlideWindow(self, skin, idx):
    		#wnds = ()
    		#
    		#if self.IsShow() == False:
    		#	return
    		#q = uiQuest.QuestSlideDialog(self, skin, idx)
    		#q.SetWindowName("QuestSlideWindow" + str(idx))
    		#self.SetTop()
    		#q.Show()
            #
    		##?? ???? ????? ? ??? ??? ???? ??? ??? ??
    		#if self.wndQuestSlideWindowNewKey > 0 and self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1] is not None:
    		#	self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1].CloseSelf()
    		#
    		#self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey] = q
    		#
    		#self.wndQuestSlideWindowNewKey = self.wndQuestSlideWindowNewKey + 1
    		#if self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1] is not None:
    		#	self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1].AddOnCloseEvent(lambda key = self.wndQuestSlideWindowNewKey:ui.__mem_func__(self.RemoveQuestSlideDialog)(key-1))
    		return
    	
    	if app.ENABLE_REBIRTH:
    		def OnUpdate(self):
    			self.RefreshRebirth()
    			self.__RefreshOpenGUIButton()
    			if self.skill_color_gui:
    				self.__UpdateSkillColorPosition()
    	else:
    		def OnUpdate(self):
    			if self.skill_color_gui:
    				self.__UpdateSkillColorPosition()
    	
    	def OnMoveWindow(self, x, y):
    		if self.wndQuestSlideWindowNewKey-1 >= 0:
    			if self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1] is not None:
    				self.wndQuestSlideWindow[self.wndQuestSlideWindowNewKey-1].AdjustPositionAndSize()
    	
    	def RemoveQuestSlideDialog(self,key):
    		if self.wndQuestSlideWindow[key]:
    			self.wndQuestSlideWindow[key] = None

     

    i used winmerge but only the systems i removed are the changes.

  3. hi,

    i was trying to add some weapon animated effects but i get this type of error

    Spoiler

    0222 10:02:22945 :: CPythonSkill::RegisterSkillDesc(dwSkillIndex=236) - Strange Skill Need Weapon(pp_palbang)
    0222 10:02:34219 ::
    playerSettingModule.py(line:1713) LoadGameData
    playerSettingModule.py(line:523) __LoadGameEffect

    LoadGameData - <type 'exceptions.AttributeError'>:'module' object has no attribute 'EFFECT_SWORD_REFINED_NEW1'

    0222 10:02:34219 :: ============================================================================================================
    0222 10:02:34219 :: Abort!!!!


    0222 10:02:34219 ::  !!! Failed to load game data : STEP [40]

     

    my code

    InstanceBase.cpp

    Spoiler

    #ifdef ENABLE_ARMAS_EFFECT_MOVIMIENTO
            if (pItem->GetSubType() == CItemData::WEAPON_SWORD)
            {
                DWORD vnum = pItem->GetIndex();
                if (vnum >= 69910 && vnum <= 69919) // Cambiar "ID" por el ID (vnum) de tu arma
                {
                    __ClearWeaponRefineEffect(); // Clear the previous effect
                    m_swordRefineEffectRight = EFFECT_REFINED + EFFECT_SWORD_REFINED_NEW1; //  NEW EFFECT (AQUI CAMBIAS EL NOMBRE SEGUN EL SET)
                }
            }
    #endif

     

    InstanceBase.h

    Spoiler

    #ifdef ENABLE_ARMAS_EFFECT_MOVIMIENTO
                EFFECT_SWORD_REFINED_NEW1 = 60,
    #endif

     

     

    i tried also

    #ifdef ENABLE_ARMAS_EFFECT_MOVIMIENTO
                EFFECT_SWORD_REFINED_NEW1,
    #endif

     

    my playersettingmode:

    Spoiler

    chrmgr.RegisterEffect(chrmgr.EFFECT_SWORD_REFINED_NEW1+60, "PART_WEAPON", "D:/ymir work/item/weapon/Effect/9/sword.mse")

    do you know what may be the problem?

  4. On 2/24/2019 at 10:22 PM, tierrilopes said:

     

    service ipfw stop 

    or

    service pf stop 

     

    PM if still unsolved by the time you read this

    still unsolved

    Cannot 'stop' ipfw. Set firewall_enable to YES in /etc/rc.conf or use 'onestop' instead of 'stop'.
    root@vps11031:~ # service ipfw onestop
    sysctl: unknown oid 'net.inet.ip.fw.enable'
    sysctl: unknown oid 'net.inet6.ip6.fw.enable'


    i did it with onestop but still ...

    Please close...

    my hosting company of web is a big retarded

    and didnt allow that ip as i had told them

  5. 1 minute ago, T4UMP said:
    
    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";
    
    // Create connection
    $conn = new mysqli($servername, $username, $password);
    
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    echo "Connected successfully";
    ?>

    yes mate i have that one... i test it says connection failed

    problem is that mysql is not allowed remote access

  6. 36 minutes ago, T4UMP said:

    Just create user in navicat  ex. homepage@<ip domain> and try it.

    dafuq?

    26 minutes ago, tierrilopes said:

    Make a test account and connect to it on your pc.

     

    If your pc connects to it, then your site is misconfigured (most likely)

    OR

    host of website is blocking port 3306 (unlikely)

    ___________________________________________________________________

    If your pc can not connect to it, the user you're using doesnt have permission to access remotly ( % )

    OR

    Your ipfw / pf of the database host is blocking the port.

     

     

    I assume (by the remote in your first comment) website is hosted somewhere else then the database, if thats not the case write it here.

    well i tried it on a website that i had an online server running from there didnt work so misconfiguration wont be because i also tried in 2-3 websites more.

    Website Host not blocking i think 3306 because in same host i had my online server running

    Same as vps hosting wont be blocking 3306 cause i can manage to enter to navicat

    I gave through putty  & navicat permissions to root but still shit


    as you told ipfw is blocking probably port.
    If i disable firewall will be problem huge... i havent tried through cause idk how to disable firewall in freebsd11
    Also idk how to permit remote mysql on freebsd11
    thats why i posted here probably someone know the fix for this shit

     

    --- i have in different host on website and server but when i asked my website hosting to whitelist this ip from theyr firewall they told me that is ok this ip
    now idk what the fk is problem

  7. well , in freebsd11.0 the my.cnf is at /usr/local/etc/mysql

    i have read all of that :D

    still havent managed to get access.

    my.cnf is like this:

    # $FreeBSD$
    
    [client]
    port                            = 3306
    socket                          = /tmp/mysql.sock
    
    [mysql]
    prompt                          = \u@\h [\d]>\_
    no_auto_rehash
    
    [mysqld]
    skip-grant-tables
    user                            = mysql
    port                            = 3306
    socket                          = /tmp/mysql.sock
    basedir                         = /usr/local
    datadir                         = /var/db/mysql
    tmpdir                          = /var/db/mysql_tmpdir
    slave-load-tmpdir               = /var/db/mysql_tmpdir
    secure-file-priv                = /var/db/mysql_secure
    log-bin                         = mysql-bin
    log-output                      = TABLE
    master-info-repository          = TABLE
    relay-log-info-repository       = TABLE
    relay-log-recovery              = 1
    slow-query-log                  = 1
    server-id                       = 1
    sync_binlog                     = 1
    sync_relay_log                  = 1
    binlog_cache_size               = 16M
    expire_logs_days                = 30
    log-slave-updates               = 1
    enforce-gtid-consistency        = 1
    gtid-mode                       = ON
    safe-user-create                = 1
    lower_case_table_names          = 1
    explicit-defaults-for-timestamp = 1
    myisam-recover-options          = BACKUP,FORCE
    open_files_limit                = 32768
    table_open_cache                = 16384
    table_definition_cache          = 8192
    net_retry_count                 = 16384
    key_buffer_size                 = 256M
    max_allowed_packet              = 64M
    query_cache_type                = 0
    query_cache_size                = 0
    long_query_time                 = 0.5
    innodb_buffer_pool_size         = 1G
    innodb_data_home_dir            = /var/db/mysql
    innodb_log_group_home_dir       = /var/db/mysql
    innodb_data_file_path           = ibdata1:128M:autoextend
    innodb_flush_method             = O_DIRECT
    innodb_log_file_size            = 256M
    innodb_log_buffer_size          = 16M
    innodb_write_io_threads         = 8
    innodb_read_io_threads          = 8
    innodb_autoinc_lock_mode        = 2
    skip-symbolic-links
    
    [mysqldump]
    max_allowed_packet              = 256M
    quote_names
    quick

     

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