1. import ui
  2. import net
  3. import item
  4. import skill
  5. import localeInfo
  6. import wndMgr
  7. import player
  8. import constInfo
  9. import mouseModule
  10. import uiScriptLocale
  11. import app
  12. MOUSE_SETTINGS = [0, 0]
  13. def InitMouseButtonSettings(left, right):
  14. global MOUSE_SETTINGS
  15. MOUSE_SETTINGS = [left, right]
  16. def SetMouseButtonSetting(dir, event):
  17. global MOUSE_SETTINGS
  18. MOUSE_SETTINGS[dir] = event
  19. def GetMouseButtonSettings():
  20. global MOUSE_SETTINGS
  21. return MOUSE_SETTINGS
  22. def SaveMouseButtonSettings():
  23. global MOUSE_SETTINGS
  24. open("mouse.cfg", "w").write("%s\t%s" % tuple(MOUSE_SETTINGS))
  25. def LoadMouseButtonSettings():
  26. global MOUSE_SETTINGS
  27. tokens = open("mouse.cfg", "r").read().split()
  28. if len(tokens) != 2:
  29. raise RuntimeError, "MOUSE_SETTINGS_FILE_ERROR"
  30. MOUSE_SETTINGS[0] = int(tokens[0])
  31. MOUSE_SETTINGS[1] = int(tokens[1])
  32. def unsigned32(n):
  33. return n & 0xFFFFFFFFL
  34. #-------------------Giftbox Begin------------------------------
  35. class GiftBox(ui.ScriptWindow):
  36. class TextToolTip(ui.Window):
  37. def __init__(self):
  38. ui.Window.__init__(self, "TOP_MOST")
  39. self.SetWindowName("GiftBox")
  40. textLine = ui.TextLine()
  41. textLine.SetParent(self)
  42. textLine.SetHorizontalAlignCenter()
  43. textLine.SetOutline()
  44. textLine.Show()
  45. self.textLine = textLine
  46. def __del__(self):
  47. ui.Window.__del__(self)
  48. def SetText(self, text):
  49. self.textLine.SetText(text)
  50. def OnRender(self):
  51. (mouseX, mouseY) = wndMgr.GetMousePosition()
  52. self.textLine.SetPosition(mouseX, mouseY - 15)
  53. def __init__(self):
  54. #print "NEW TASKBAR ----------------------------------------------------------------------------"
  55. ui.ScriptWindow.__init__(self)
  56. self.tooltipGift = self.TextToolTip()
  57. self.tooltipGift.Show()
  58. def __del__(self):
  59. #print "---------------------------------------------------------------------------- DELETE TASKBAR"
  60. ui.ScriptWindow.__del__(self)
  61. def LoadWindow(self):
  62. try:
  63. pyScrLoader = ui.PythonScriptLoader()
  64. pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "giftbox.py")
  65. except:
  66. import exception
  67. exception.Abort("GiftBox.LoadWindow.LoadObject")
  68. self.giftBoxIcon = self.GetChild("GiftBox_Icon")
  69. self.giftBoxToolTip = self.GetChild("GiftBox_ToolTip")
  70. def Destroy(self):
  71. self.giftBoxIcon = 0
  72. self.giftBoxToolTip = 0
  73. #-------------------Giftbox End------------------------------
  74. class EnergyBar(ui.ScriptWindow):
  75. class TextToolTip(ui.Window):
  76. def __init__(self):
  77. ui.Window.__init__(self, "TOP_MOST")
  78. self.SetWindowName("EnergyBar")
  79. textLine = ui.TextLine()
  80. textLine.SetParent(self)
  81. textLine.SetHorizontalAlignCenter()
  82. textLine.SetOutline()
  83. textLine.Show()
  84. self.textLine = textLine
  85. def __del__(self):
  86. ui.Window.__del__(self)
  87. def SetText(self, text):
  88. self.textLine.SetText(text)
  89. def OnRender(self):
  90. (mouseX, mouseY) = wndMgr.GetMousePosition()
  91. self.textLine.SetPosition(mouseX, mouseY - 15)
  92. def __init__(self):
  93. #print "NEW TASKBAR ----------------------------------------------------------------------------"
  94. ui.ScriptWindow.__init__(self)
  95. self.tooltipEnergy = self.TextToolTip()
  96. self.tooltipEnergy.Show()
  97. def __del__(self):
  98. #print "---------------------------------------------------------------------------- DELETE TASKBAR"
  99. ui.ScriptWindow.__del__(self)
  100. def LoadWindow(self):
  101. try:
  102. pyScrLoader = ui.PythonScriptLoader()
  103. pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "EnergyBar.py")
  104. except:
  105. import exception
  106. exception.Abort("EnergyBar.LoadWindow.LoadObject")
  107. self.energyEmpty = self.GetChild("EnergyGauge_Empty")
  108. self.energyHungry = self.GetChild("EnergyGauge_Hungry")
  109. self.energyFull = self.GetChild("EnergyGauge_Full")
  110. self.energyGaugeBoard = self.GetChild("EnergyGauge_Board")
  111. self.energyGaugeToolTip = self.GetChild("EnergyGauge_ToolTip")
  112. def Destroy(self):
  113. self.energyEmpty = None
  114. self.energyHungry = None
  115. self.energyFull = None
  116. self.energyGaugeBoard = 0
  117. self.energyGaugeToolTip = 0
  118. self.tooltipEnergy = 0
  119. ## Gauge
  120. def RefreshStatus(self):
  121. pointEnergy = player.GetStatus (player.ENERGY)
  122. leftTimeEnergy = player.GetStatus (player.ENERGY_END_TIME) - app.GetGlobalTimeStamp()
  123. # 충기환 지속 시간 = 2시간.
  124. self.SetEnergy (pointEnergy, leftTimeEnergy, 7200)
  125. def SetEnergy (self, point, leftTime, maxTime):
  126. leftTime = max (leftTime, 0)
  127. maxTime = max (maxTime, 0)
  128. self.energyEmpty.Hide()
  129. self.energyHungry.Hide()
  130. self.energyFull.Hide()
  131. if leftTime == 0:
  132. self.energyEmpty.Show()
  133. elif ((leftTime * 100) / maxTime) < 15:
  134. self.energyHungry.Show()
  135. else:
  136. self.energyFull.Show()
  137. self.tooltipEnergy.SetText(" " + localeInfo.SecondToHM(leftTime) + " - Energie +" + str(point) + "%")
  138. def OnUpdate(self):
  139. if TRUE == self.energyGaugeToolTip.IsIn():
  140. self.RefreshStatus()
  141. self.tooltipEnergy.Show()
  142. else:
  143. self.tooltipEnergy.Hide()
  144. class TaskBar(ui.ScriptWindow):
  145. BUTTON_CHARACTER = 0
  146. BUTTON_INVENTORY = 1
  147. BUTTON_MESSENGER = 2
  148. BUTTON_SYSTEM = 3
  149. BUTTON_CHAT = 4
  150. BUTTON_EXPAND = 4
  151. BUTTON_HORSEQUICK = 5
  152. IS_EXPANDED = FALSE
  153. MOUSE_BUTTON_LEFT = 0
  154. MOUSE_BUTTON_RIGHT = 1
  155. NONE = 255
  156. EVENT_MOVE = 0
  157. EVENT_ATTACK = 1
  158. EVENT_MOVE_AND_ATTACK = 2
  159. EVENT_CAMERA = 3
  160. EVENT_SKILL = 4
  161. EVENT_AUTO = 5
  162. GAUGE_WIDTH = 95
  163. GAUGE_HEIGHT = 13
  164. QUICKPAGE_NUMBER_FILENAME = [
  165. "d:/ymir work/ui/game/taskbar/1.sub",
  166. "d:/ymir work/ui/game/taskbar/2.sub",
  167. "d:/ymir work/ui/game/taskbar/3.sub",
  168. "d:/ymir work/ui/game/taskbar/4.sub",
  169. ]
  170. #gift icon show and hide
  171. def ShowGift(self):
  172. self.wndGiftBox.Show()
  173. def HideGift(self):
  174. self.wndGiftBox.Hide()
  175. class TextToolTip(ui.Window):
  176. def __init__(self):
  177. ui.Window.__init__(self, "TOP_MOST")
  178. textLine = ui.TextLine()
  179. textLine.SetParent(self)
  180. textLine.SetHorizontalAlignCenter()
  181. textLine.SetOutline()
  182. textLine.Show()
  183. self.textLine = textLine
  184. def __del__(self):
  185. ui.Window.__del__(self)
  186. def SetText(self, text):
  187. self.textLine.SetText(text)
  188. def OnRender(self):
  189. (mouseX, mouseY) = wndMgr.GetMousePosition()
  190. self.textLine.SetPosition(mouseX, mouseY - 15)
  191. class SkillButton(ui.SlotWindow):
  192. def __init__(self):
  193. ui.SlotWindow.__init__(self)
  194. self.event = 0
  195. self.arg = 0
  196. self.slotIndex = 0
  197. self.skillIndex = 0
  198. slotIndex = 0
  199. wndMgr.SetSlotBaseImage(self.hWnd, "d:/ymir work/ui/public/slot_base.sub", 1.0, 1.0, 1.0, 1.0)
  200. wndMgr.AppendSlot(self.hWnd, slotIndex, 0, 0, 32, 32)
  201. self.SetCoverButton(slotIndex, "d:/ymir work/ui/public/slot_cover_button_01.sub",\
  202. "d:/ymir work/ui/public/slot_cover_button_02.sub",\
  203. "d:/ymir work/ui/public/slot_cover_button_03.sub",\
  204. "d:/ymir work/ui/public/slot_cover_button_04.sub", TRUE, FALSE)
  205. self.SetSize(32, 32)
  206. def __del__(self):
  207. ui.SlotWindow.__del__(self)
  208. def Destroy(self):
  209. if 0 != self.tooltipSkill:
  210. self.tooltipSkill.HideToolTip()
  211. def RefreshSkill(self):
  212. if 0 != self.slotIndex:
  213. self.SetSkill(self.slotIndex)
  214. def SetSkillToolTip(self, tooltip):
  215. self.tooltipSkill = tooltip
  216. def SetSkill(self, skillSlotNumber):
  217. slotNumber = 0
  218. skillIndex = player.GetSkillIndex(skillSlotNumber)
  219. skillGrade = player.GetSkillGrade(skillSlotNumber)
  220. skillLevel = player.GetSkillLevel(skillSlotNumber)
  221. skillType = skill.GetSkillType(skillIndex)
  222. self.skillIndex = skillIndex
  223. if 0 == self.skillIndex:
  224. self.ClearSlot(slotNumber)
  225. return
  226. self.slotIndex = skillSlotNumber
  227. self.SetSkillSlotNew(slotNumber, skillIndex, skillGrade, skillLevel)
  228. self.SetSlotCountNew(slotNumber, skillGrade, skillLevel)
  229. ## NOTE : CoolTime 체크
  230. if player.IsSkillCoolTime(skillSlotNumber):
  231. (coolTime, elapsedTime) = player.GetSkillCoolTime(skillSlotNumber)
  232. self.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)
  233. ## NOTE : Activate 되어 있다면 아이콘도 업데이트
  234. if player.IsSkillActive(skillSlotNumber):
  235. self.ActivateSlot(slotNumber)
  236. def SetSkillEvent(self, event, arg=0):
  237. self.event = event
  238. self.arg = arg
  239. def GetSkillIndex(self):
  240. return self.skillIndex
  241. def GetSlotIndex(self):
  242. return self.slotIndex
  243. def Activate(self, coolTime):
  244. self.SetSlotCoolTime(0, coolTime)
  245. if skill.IsToggleSkill(self.skillIndex):
  246. self.ActivateSlot(0)
  247. def Deactivate(self):
  248. if skill.IsToggleSkill(self.skillIndex):
  249. self.DeactivateSlot(0)
  250. def OnOverInItem(self, dummy):
  251. self.tooltipSkill.SetSkill(self.skillIndex)
  252. def OnOverOutItem(self):
  253. self.tooltipSkill.HideToolTip()
  254. def OnSelectItemSlot(self, dummy):
  255. if 0 != self.event:
  256. if 0 != self.arg:
  257. self.event(self.arg)
  258. else:
  259. self.event()
  260. def __init__(self):
  261. #print "NEW TASKBAR ----------------------------------------------------------------------------"
  262. ui.ScriptWindow.__init__(self, "TOP_MOST")
  263. self.quickPageNumImageBox = None
  264. self.tooltipItem = 0
  265. self.tooltipSkill = 0
  266. self.mouseModeButtonList = [ ui.ScriptWindow("TOP_MOST"), ui.ScriptWindow("TOP_MOST") ]
  267. self.tooltipHP = self.TextToolTip()
  268. self.tooltipHP.Show()
  269. self.tooltipSP = self.TextToolTip()
  270. self.tooltipSP.Show()
  271. self.tooltipST = self.TextToolTip()
  272. self.tooltipST.Show()
  273. self.tooltipEXP = self.TextToolTip()
  274. self.tooltipEXP.Show()
  275. self.skillCategoryNameList = [ "ACTIVE_1", "ACTIVE_2", "ACTIVE_3" ]
  276. self.skillPageStartSlotIndexDict = {
  277. "ACTIVE_1" : 1,
  278. "ACTIVE_2" : 21,
  279. "ACTIVE_3" : 41,
  280. }
  281. self.selectSkillButtonList = []
  282. self.lastUpdateQuickSlot = 0
  283. self.SetWindowName("TaskBar")
  284. def __del__(self):
  285. #print "---------------------------------------------------------------------------- DELETE TASKBAR"
  286. ui.ScriptWindow.__del__(self)
  287. def LoadWindow(self):
  288. try:
  289. pyScrLoader = ui.PythonScriptLoader()
  290. if constInfo.IN_GAME_SHOP_ENABLE:
  291. pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "TaskBar.py")
  292. else:
  293. pyScrLoader.LoadScriptFile(self, "UIScript/TaskBar.py")
  294. pyScrLoader.LoadScriptFile(self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT], "UIScript/MouseButtonWindow.py")
  295. pyScrLoader.LoadScriptFile(self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT], "UIScript/RightMouseButtonWindow.py")
  296. except:
  297. import exception
  298. exception.Abort("TaskBar.LoadWindow.LoadObject")
  299. self.quickslot = []
  300. self.quickslot.append(self.GetChild("quick_slot_1"))
  301. self.quickslot.append(self.GetChild("quick_slot_2"))
  302. for slot in self.quickslot:
  303. slot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
  304. slot.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptyQuickSlot))
  305. slot.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemQuickSlot))
  306. slot.SetUnselectItemSlotEvent(ui.__mem_func__(self.UnselectItemQuickSlot))
  307. slot.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
  308. slot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  309. toggleButtonDict = {}
  310. toggleButtonDict[TaskBar.BUTTON_CHARACTER]=self.GetChild("CharacterButton")
  311. toggleButtonDict[TaskBar.BUTTON_INVENTORY]=self.GetChild("InventoryButton")
  312. toggleButtonDict[TaskBar.BUTTON_MESSENGER]=self.GetChild("MessengerButton")
  313. toggleButtonDict[TaskBar.BUTTON_SYSTEM]=self.GetChild("SystemButton")
  314. toggleButtonDict[TaskBar.BUTTON_HORSEQUICK]=self.GetChild("button_horse")
  315. # ChatButton, ExpandButton 둘 중 하나는 반드시 존재한다.
  316. try:
  317. toggleButtonDict[TaskBar.BUTTON_CHAT]=self.GetChild("ChatButton")
  318. except:
  319. toggleButtonDict[TaskBar.BUTTON_EXPAND]=self.GetChild("ExpandButton")
  320. TaskBar.IS_EXPANDED = TRUE
  321. if localeInfo.IsARABIC():
  322. systemButton = toggleButtonDict[TaskBar.BUTTON_SYSTEM]
  323. if systemButton.ToolTipText:
  324. tx, ty = systemButton.ToolTipText.GetLocalPosition()
  325. tw = systemButton.ToolTipText.GetWidth()
  326. systemButton.ToolTipText.SetPosition(-tw/2, ty)
  327. expGauge = []
  328. expGauge.append(self.GetChild("EXPGauge_01"))
  329. expGauge.append(self.GetChild("EXPGauge_02"))
  330. expGauge.append(self.GetChild("EXPGauge_03"))
  331. expGauge.append(self.GetChild("EXPGauge_04"))
  332. for exp in expGauge:
  333. exp.SetSize(0, 0)
  334. self.quickPageNumImageBox=self.GetChild("QuickPageNumber")
  335. self.GetChild("QuickPageUpButton").SetEvent(ui.__mem_func__(self.__OnClickQuickPageUpButton))
  336. self.GetChild("QuickPageDownButton").SetEvent(ui.__mem_func__(self.__OnClickQuickPageDownButton))
  337. ########Anti Exp Button by Sanii##########
  338. #self.antiexp = self.GetChild("AntiButton")
  339. #self.antiexp.SetEvent(ui.__mem_func__(self.AntiExp))
  340. #if constInfo.ANTI_EXP_STATE == 1:
  341. #self.antiexp.SetText("-")
  342. #self.antiexp.SetToolTipText("Anti-Erfahrung deaktivieren")
  343. #else:
  344. #self.antiexp.SetText("+")
  345. #self.antiexp.SetToolTipText("Anti-Erfahrung aktivieren")
  346. mouseLeftButtonModeButton = self.GetChild("LeftMouseButton")
  347. mouseRightButtonModeButton = self.GetChild("RightMouseButton")
  348. mouseLeftButtonModeButton.SetEvent(ui.__mem_func__(self.ToggleLeftMouseButtonModeWindow))
  349. mouseRightButtonModeButton.SetEvent(ui.__mem_func__(self.ToggleRightMouseButtonModeWindow))
  350. self.curMouseModeButton = [ mouseLeftButtonModeButton, mouseRightButtonModeButton ]
  351. (xLocalRight, yLocalRight) = mouseRightButtonModeButton.GetLocalPosition()
  352. self.curSkillButton = self.SkillButton()
  353. self.curSkillButton.SetParent(self)
  354. self.curSkillButton.SetPosition(xLocalRight, 3)
  355. self.curSkillButton.SetSkillEvent(ui.__mem_func__(self.ToggleRightMouseButtonModeWindow))
  356. self.curSkillButton.Hide()
  357. (xLeft, yLeft) = mouseLeftButtonModeButton.GetGlobalPosition()
  358. (xRight, yRight) = mouseRightButtonModeButton.GetGlobalPosition()
  359. leftModeButtonList = self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT]
  360. leftModeButtonList.SetPosition(xLeft, yLeft - leftModeButtonList.GetHeight()-5)
  361. rightModeButtonList = self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT]
  362. rightModeButtonList.SetPosition(xRight - rightModeButtonList.GetWidth() + 32, yRight - rightModeButtonList.GetHeight()-5)
  363. rightModeButtonList.GetChild("button_skill").SetEvent(lambda adir=self.MOUSE_BUTTON_RIGHT, aevent=self.EVENT_SKILL: self.SelectMouseButtonEvent(adir, aevent))
  364. rightModeButtonList.GetChild("button_skill").Hide()
  365. mouseImage = ui.ImageBox("TOP_MOST")
  366. mouseImage.AddFlag("float")
  367. mouseImage.LoadImage("d:/ymir work/ui/game/taskbar/mouse_button_camera_01.sub")
  368. mouseImage.SetPosition(xRight, wndMgr.GetScreenHeight() - 34)
  369. mouseImage.Hide()
  370. self.mouseImage = mouseImage
  371. dir = self.MOUSE_BUTTON_LEFT
  372. wnd = self.mouseModeButtonList[dir]
  373. wnd.GetChild("button_move_and_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_MOVE_AND_ATTACK: self.SelectMouseButtonEvent(adir, aevent))
  374. wnd.GetChild("button_auto_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_AUTO: self.SelectMouseButtonEvent(adir, aevent))
  375. wnd.GetChild("button_camera").SetEvent(lambda adir=dir, aevent=self.EVENT_CAMERA: self.SelectMouseButtonEvent(adir, aevent))
  376. dir = self.MOUSE_BUTTON_RIGHT
  377. wnd = self.mouseModeButtonList[dir]
  378. wnd.GetChild("button_move_and_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_MOVE_AND_ATTACK: self.SelectMouseButtonEvent(adir, aevent))
  379. wnd.GetChild("button_camera").SetEvent(lambda adir=dir, aevent=self.EVENT_CAMERA: self.SelectMouseButtonEvent(adir, aevent))
  380. self.toggleButtonDict = toggleButtonDict
  381. self.expGauge = expGauge
  382. if constInfo.IN_GAME_SHOP_ENABLE:
  383. self.rampageGauge1 = self.GetChild("RampageGauge")
  384. self.rampageGauge1.OnMouseOverIn = ui.__mem_func__(self.__RampageGauge_OverIn)
  385. self.rampageGauge2 = self.GetChild("RampageGauge2")
  386. self.rampageGauge2.OnMouseOverOut = ui.__mem_func__(self.__RampageGauge_OverOut)
  387. self.rampageGauge2.OnMouseLeftButtonUp = ui.__mem_func__(self.__RampageGauge_Click)
  388. self.__RampageGauge_OverOut()
  389. self.hpGauge = self.GetChild("HPGauge")
  390. self.mpGauge = self.GetChild("SPGauge")
  391. self.stGauge = self.GetChild("STGauge")
  392. self.hpRecoveryGaugeBar = self.GetChild("HPRecoveryGaugeBar")
  393. self.spRecoveryGaugeBar = self.GetChild("SPRecoveryGaugeBar")
  394. self.hpGaugeBoard=self.GetChild("HPGauge_Board")
  395. self.mpGaugeBoard=self.GetChild("SPGauge_Board")
  396. self.stGaugeBoard=self.GetChild("STGauge_Board")
  397. self.expGaugeBoard=self.GetChild("EXP_Gauge_Board")
  398. #giftbox object
  399. wndGiftBox = GiftBox()
  400. wndGiftBox.LoadWindow()
  401. self.wndGiftBox = wndGiftBox
  402. self.__LoadMouseSettings()
  403. self.RefreshStatus()
  404. self.RefreshQuickSlot()
  405. def __RampageGauge_OverIn(self):
  406. print "rampage_over_in"
  407. self.rampageGauge2.Show()
  408. self.rampageGauge1.Hide()
  409. def __RampageGauge_OverOut(self):
  410. print "rampage_over_out"
  411. self.rampageGauge2.Hide()
  412. self.rampageGauge1.Show()
  413. def __RampageGauge_Click(self):
  414. print "rampage_up"
  415. net.SendChatPacket("/in_game_mall")
  416. # gift icon hide when click mall icon
  417. self.wndGiftBox.Hide()
  418. def __LoadMouseSettings(self):
  419. try:
  420. LoadMouseButtonSettings()
  421. (mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings()
  422. if not self.__IsInSafeMouseButtonSettingRange(mouseLeftButtonEvent) or not self.__IsInSafeMouseButtonSettingRange(mouseRightButtonEvent):
  423. raise RuntimeError, "INVALID_MOUSE_BUTTON_SETTINGS"
  424. except:
  425. InitMouseButtonSettings(self.EVENT_MOVE_AND_ATTACK, self.EVENT_CAMERA)
  426. (mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings()
  427. try:
  428. self.SelectMouseButtonEvent(self.MOUSE_BUTTON_LEFT, mouseLeftButtonEvent)
  429. self.SelectMouseButtonEvent(self.MOUSE_BUTTON_RIGHT, mouseRightButtonEvent)
  430. except:
  431. InitMouseButtonSettings(self.EVENT_MOVE_AND_ATTACK, self.EVENT_CAMERA)
  432. (mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings()
  433. self.SelectMouseButtonEvent(self.MOUSE_BUTTON_LEFT, mouseLeftButtonEvent)
  434. self.SelectMouseButtonEvent(self.MOUSE_BUTTON_RIGHT, mouseRightButtonEvent)
  435. def __IsInSafeMouseButtonSettingRange(self, arg):
  436. return arg >= self.EVENT_MOVE and arg <= self.EVENT_AUTO
  437. def Destroy(self):
  438. SaveMouseButtonSettings()
  439. self.ClearDictionary()
  440. self.mouseModeButtonList[0].ClearDictionary()
  441. self.mouseModeButtonList[1].ClearDictionary()
  442. self.mouseModeButtonList = 0
  443. self.curMouseModeButton = 0
  444. self.curSkillButton = 0
  445. self.selectSkillButtonList = 0
  446. self.expGauge = None
  447. self.hpGauge = None
  448. self.mpGauge = None
  449. self.stGauge = None
  450. self.hpRecoveryGaugeBar = None
  451. self.spRecoveryGaugeBar = None
  452. self.tooltipItem = 0
  453. self.tooltipSkill = 0
  454. self.quickslot = 0
  455. self.toggleButtonDict = 0
  456. self.hpGaugeBoard = 0
  457. self.mpGaugeBoard = 0
  458. self.stGaugeBoard = 0
  459. self.expGaugeBoard = 0
  460. self.tooltipHP = 0
  461. self.tooltipSP = 0
  462. self.tooltipST = 0
  463. self.tooltipEXP = 0
  464. self.mouseImage = None
  465. def __OnClickQuickPageUpButton(self):
  466. player.SetQuickPage(player.GetQuickPage()-1)
  467. def __OnClickQuickPageDownButton(self):
  468. player.SetQuickPage(player.GetQuickPage()+1)
  469. def SetToggleButtonEvent(self, eButton, kEventFunc):
  470. self.toggleButtonDict[eButton].SetEvent(kEventFunc)
  471. def SetItemToolTip(self, tooltipItem):
  472. self.tooltipItem = tooltipItem
  473. def SetSkillToolTip(self, tooltipSkill):
  474. self.tooltipSkill = tooltipSkill
  475. self.curSkillButton.SetSkillToolTip(self.tooltipSkill)
  476. ## Mouse Image
  477. def ShowMouseImage(self):
  478. self.mouseImage.SetTop()
  479. self.mouseImage.Show()
  480. def HideMouseImage(self):
  481. player.SetQuickCameraMode(FALSE)
  482. self.mouseImage.Hide()
  483. ## Gauge
  484. def RefreshStatus(self):
  485. curHP = player.GetStatus(player.HP)
  486. maxHP = player.GetStatus(player.MAX_HP)
  487. curSP = player.GetStatus(player.SP)
  488. maxSP = player.GetStatus(player.MAX_SP)
  489. curEXP = unsigned32(player.GetStatus(player.EXP))
  490. nextEXP = unsigned32(player.GetStatus(player.NEXT_EXP))
  491. recoveryHP = player.GetStatus(player.HP_RECOVERY)
  492. recoverySP = player.GetStatus(player.SP_RECOVERY)
  493. self.RefreshStamina()
  494. self.SetHP(curHP, recoveryHP, maxHP)
  495. self.SetSP(curSP, recoverySP, maxSP)
  496. self.SetExperience(curEXP, nextEXP)
  497. def RefreshStamina(self):
  498. curST = player.GetStatus(player.STAMINA)
  499. maxST = player.GetStatus(player.MAX_STAMINA)
  500. self.SetST(curST, maxST)
  501. def RefreshSkill(self):
  502. self.curSkillButton.RefreshSkill()
  503. for button in self.selectSkillButtonList:
  504. button.RefreshSkill()
  505. def SetHP(self, curPoint, recoveryPoint, maxPoint):
  506. curPoint = min(curPoint, maxPoint)
  507. if maxPoint > 0:
  508. self.hpGauge.SetPercentage(curPoint, maxPoint)
  509. self.tooltipHP.SetText("%s : %d / %d" % (localeInfo.TASKBAR_HP, curPoint, maxPoint))
  510. if 0 == recoveryPoint:
  511. self.hpRecoveryGaugeBar.Hide()
  512. else:
  513. destPoint = min(maxPoint, curPoint + recoveryPoint)
  514. newWidth = int(self.GAUGE_WIDTH * (float(destPoint) / float(maxPoint)))
  515. self.hpRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT)
  516. self.hpRecoveryGaugeBar.Show()
  517. def SetSP(self, curPoint, recoveryPoint, maxPoint):
  518. curPoint = min(curPoint, maxPoint)
  519. if maxPoint > 0:
  520. self.mpGauge.SetPercentage(curPoint, maxPoint)
  521. self.tooltipSP.SetText("%s : %d / %d" % (localeInfo.TASKBAR_SP, curPoint, maxPoint))
  522. if 0 == recoveryPoint:
  523. self.spRecoveryGaugeBar.Hide()
  524. else:
  525. destPoint = min(maxPoint, curPoint + recoveryPoint)
  526. newWidth = int(self.GAUGE_WIDTH * (float(destPoint) / float(maxPoint)))
  527. self.spRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT)
  528. self.spRecoveryGaugeBar.Show()
  529. def SetST(self, curPoint, maxPoint):
  530. curPoint = min(curPoint, maxPoint)
  531. if maxPoint > 0:
  532. self.stGauge.SetPercentage(curPoint, maxPoint)
  533. self.tooltipST.SetText("%s : %d / %d" % (localeInfo.TASKBAR_ST, curPoint, maxPoint))
  534. def SetExperience(self, curPoint, maxPoint):
  535. curPoint = min(curPoint, maxPoint)
  536. curPoint = max(curPoint, 0)
  537. maxPoint = max(maxPoint, 0)
  538. quarterPoint = maxPoint / 4
  539. FullCount = 0
  540. if 0 != quarterPoint:
  541. FullCount = min(4, curPoint / quarterPoint)
  542. for i in xrange(4):
  543. self.expGauge[i].Hide()
  544. for i in xrange(FullCount):
  545. self.expGauge[i].SetRenderingRect(0.0, 0.0, 0.0, 0.0)
  546. self.expGauge[i].Show()
  547. if 0 != quarterPoint:
  548. if FullCount < 4:
  549. Percentage = float(curPoint % quarterPoint) / quarterPoint - 1.0
  550. self.expGauge[FullCount].SetRenderingRect(0.0, Percentage, 0.0, 0.0)
  551. self.expGauge[FullCount].Show()
  552. #####
  553. self.tooltipEXP.SetText("%s : %.2f%%" % (localeInfo.TASKBAR_EXP, float(curPoint) / max(1, float(maxPoint)) * 100))
  554. ## QuickSlot
  555. def RefreshQuickSlot(self):
  556. pageNum = player.GetQuickPage()
  557. try:
  558. self.quickPageNumImageBox.LoadImage(TaskBar.QUICKPAGE_NUMBER_FILENAME[pageNum])
  559. except:
  560. pass
  561. startNumber = 0
  562. for slot in self.quickslot:
  563. for i in xrange(4):
  564. slotNumber = i+startNumber
  565. (Type, Position) = player.GetLocalQuickSlot(slotNumber)
  566. if player.SLOT_TYPE_NONE == Type:
  567. slot.ClearSlot(slotNumber)
  568. continue
  569. if player.SLOT_TYPE_INVENTORY == Type:
  570. itemIndex = player.GetItemIndex(Position)
  571. itemCount = player.GetItemCount(Position)
  572. if itemCount <= 1:
  573. itemCount = 0
  574. ## 자동물약 (#72723, #72724) 특수처리 - 아이템인데도 슬롯에 활성화/비활성화 표시를 위한 작업임 - [hyo]
  575. if constInfo.IS_AUTO_POTION(itemIndex):
  576. # metinSocket - [0] : 활성화 여부, [1] : 사용한 양, [2] : 최대 용량
  577. metinSocket = [player.GetItemMetinSocket(Position, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
  578. if 0 != int(metinSocket[0]):
  579. slot.ActivateSlot(slotNumber)
  580. else:
  581. slot.DeactivateSlot(slotNumber)
  582. slot.SetItemSlot(slotNumber, itemIndex, itemCount)
  583. elif player.SLOT_TYPE_SKILL == Type:
  584. skillIndex = player.GetSkillIndex(Position)
  585. if 0 == skillIndex:
  586. slot.ClearSlot(slotNumber)
  587. continue
  588. skillType = skill.GetSkillType(skillIndex)
  589. if skill.SKILL_TYPE_GUILD == skillType:
  590. import guild
  591. skillGrade = 0
  592. skillLevel = guild.GetSkillLevel(Position)
  593. else:
  594. skillGrade = player.GetSkillGrade(Position)
  595. skillLevel = player.GetSkillLevel(Position)
  596. slot.SetSkillSlotNew(slotNumber, skillIndex, skillGrade, skillLevel)
  597. slot.SetSlotCountNew(slotNumber, skillGrade, skillLevel)
  598. slot.SetCoverButton(slotNumber)
  599. ## NOTE : CoolTime 체크
  600. if player.IsSkillCoolTime(Position):
  601. (coolTime, elapsedTime) = player.GetSkillCoolTime(Position)
  602. slot.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)
  603. ## NOTE : Activate 되어 있다면 아이콘도 업데이트
  604. if player.IsSkillActive(Position):
  605. slot.ActivateSlot(slotNumber)
  606. elif player.SLOT_TYPE_EMOTION == Type:
  607. emotionIndex = Position
  608. slot.SetEmotionSlot(slotNumber, emotionIndex)
  609. slot.SetCoverButton(slotNumber)
  610. slot.SetSlotCount(slotNumber, 0)
  611. slot.RefreshSlot()
  612. startNumber += 4
  613. def canAddQuickSlot(self, Type, slotNumber):
  614. if player.SLOT_TYPE_INVENTORY == Type:
  615. itemIndex = player.GetItemIndex(slotNumber)
  616. return item.CanAddToQuickSlotItem(itemIndex)
  617. return TRUE
  618. def AddQuickSlot(self, localSlotIndex):
  619. AttachedSlotType = mouseModule.mouseController.GetAttachedType()
  620. AttachedSlotNumber = mouseModule.mouseController.GetAttachedSlotNumber()
  621. AttachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()
  622. if player.SLOT_TYPE_QUICK_SLOT == AttachedSlotType:
  623. player.RequestMoveGlobalQuickSlotToLocalQuickSlot(AttachedSlotNumber, localSlotIndex)
  624. elif player.SLOT_TYPE_EMOTION == AttachedSlotType:
  625. player.RequestAddLocalQuickSlot(localSlotIndex, AttachedSlotType, AttachedItemIndex)
  626. elif TRUE == self.canAddQuickSlot(AttachedSlotType, AttachedSlotNumber):
  627. ## Online Code
  628. player.RequestAddLocalQuickSlot(localSlotIndex, AttachedSlotType, AttachedSlotNumber)
  629. mouseModule.mouseController.DeattachObject()
  630. self.RefreshQuickSlot()
  631. def SelectEmptyQuickSlot(self, slotIndex):
  632. if TRUE == mouseModule.mouseController.isAttached():
  633. self.AddQuickSlot(slotIndex)
  634. def SelectItemQuickSlot(self, localQuickSlotIndex):
  635. if TRUE == mouseModule.mouseController.isAttached():
  636. self.AddQuickSlot(localQuickSlotIndex)
  637. else:
  638. globalQuickSlotIndex=player.LocalQuickSlotIndexToGlobalQuickSlotIndex(localQuickSlotIndex)
  639. mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_QUICK_SLOT, globalQuickSlotIndex, globalQuickSlotIndex)
  640. def UnselectItemQuickSlot(self, localSlotIndex):
  641. if FALSE == mouseModule.mouseController.isAttached():
  642. player.RequestUseLocalQuickSlot(localSlotIndex)
  643. return
  644. elif mouseModule.mouseController.isAttached():
  645. mouseModule.mouseController.DeattachObject()
  646. return
  647. def OnUseSkill(self, usedSlotIndex, coolTime):
  648. QUICK_SLOT_SLOT_COUNT = 4
  649. slotIndex = 0
  650. ## Current Skill Button
  651. if usedSlotIndex == self.curSkillButton.GetSlotIndex():
  652. self.curSkillButton.Activate(coolTime)
  653. ## Quick Slot
  654. for slotWindow in self.quickslot:
  655. for i in xrange(QUICK_SLOT_SLOT_COUNT):
  656. (Type, Position) = player.GetLocalQuickSlot(slotIndex)
  657. if Type == player.SLOT_TYPE_SKILL:
  658. if usedSlotIndex == Position:
  659. slotWindow.SetSlotCoolTime(slotIndex, coolTime)
  660. return
  661. slotIndex += 1
  662. def OnActivateSkill(self, usedSlotIndex):
  663. slotIndex = 0
  664. ## Current Skill Button
  665. if usedSlotIndex == self.curSkillButton.GetSlotIndex():
  666. self.curSkillButton.Deactivate()
  667. ## Quick Slot
  668. for slotWindow in self.quickslot:
  669. for i in xrange(4):
  670. (Type, Position) = player.GetLocalQuickSlot(slotIndex)
  671. if Type == player.SLOT_TYPE_SKILL:
  672. if usedSlotIndex == Position:
  673. slotWindow.ActivateSlot(slotIndex)
  674. return
  675. slotIndex += 1
  676. def OnDeactivateSkill(self, usedSlotIndex):
  677. slotIndex = 0
  678. ## Current Skill Button
  679. if usedSlotIndex == self.curSkillButton.GetSlotIndex():
  680. self.curSkillButton.Deactivate()
  681. ## Quick Slot
  682. for slotWindow in self.quickslot:
  683. for i in xrange(4):
  684. (Type, Position) = player.GetLocalQuickSlot(slotIndex)
  685. if Type == player.SLOT_TYPE_SKILL:
  686. if usedSlotIndex == Position:
  687. slotWindow.DeactivateSlot(slotIndex)
  688. return
  689. slotIndex += 1
  690. ## ToolTip
  691. def OverInItem(self, slotNumber):
  692. if mouseModule.mouseController.isAttached():
  693. return
  694. (Type, Position) = player.GetLocalQuickSlot(slotNumber)
  695. if player.SLOT_TYPE_INVENTORY == Type:
  696. self.tooltipItem.SetInventoryItem(Position)
  697. self.tooltipSkill.HideToolTip()
  698. elif player.SLOT_TYPE_SKILL == Type:
  699. skillIndex = player.GetSkillIndex(Position)
  700. skillType = skill.GetSkillType(skillIndex)
  701. if skill.SKILL_TYPE_GUILD == skillType:
  702. import guild
  703. skillGrade = 0
  704. skillLevel = guild.GetSkillLevel(Position)
  705. else:
  706. skillGrade = player.GetSkillGrade(Position)
  707. skillLevel = player.GetSkillLevel(Position)
  708. self.tooltipSkill.SetSkillNew(Position, skillIndex, skillGrade, skillLevel)
  709. self.tooltipItem.HideToolTip()
  710. def OverOutItem(self):
  711. if 0 != self.tooltipItem:
  712. self.tooltipItem.HideToolTip()
  713. if 0 != self.tooltipSkill:
  714. self.tooltipSkill.HideToolTip()
  715. def OnUpdate(self):
  716. if app.GetGlobalTime() - self.lastUpdateQuickSlot > 500:
  717. self.lastUpdateQuickSlot = app.GetGlobalTime()
  718. self.RefreshQuickSlot()
  719. if TRUE == self.hpGaugeBoard.IsIn():
  720. self.tooltipHP.Show()
  721. else:
  722. self.tooltipHP.Hide()
  723. if TRUE == self.mpGaugeBoard.IsIn():
  724. self.tooltipSP.Show()
  725. else:
  726. self.tooltipSP.Hide()
  727. if TRUE == self.stGaugeBoard.IsIn():
  728. self.tooltipST.Show()
  729. else:
  730. self.tooltipST.Hide()
  731. if TRUE == self.expGaugeBoard.IsIn():
  732. self.tooltipEXP.Show()
  733. else:
  734. self.tooltipEXP.Hide()
  735. ## Skill
  736. def ToggleLeftMouseButtonModeWindow(self):
  737. wndMouseButtonMode = self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT]
  738. if TRUE == wndMouseButtonMode.IsShow():
  739. wndMouseButtonMode.Hide()
  740. else:
  741. wndMouseButtonMode.Show()
  742. def ToggleRightMouseButtonModeWindow(self):
  743. wndMouseButtonMode = self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT]
  744. if TRUE == wndMouseButtonMode.IsShow():
  745. wndMouseButtonMode.Hide()
  746. self.CloseSelectSkill()
  747. else:
  748. wndMouseButtonMode.Show()
  749. self.OpenSelectSkill()
  750. def OpenSelectSkill(self):
  751. PAGE_SLOT_COUNT = 6
  752. (xSkillButton, y) = self.curSkillButton.GetGlobalPosition()
  753. y -= (37 + 32 + 1)
  754. for key in self.skillCategoryNameList:
  755. appendCount = 0
  756. startNumber = self.skillPageStartSlotIndexDict[key]
  757. x = xSkillButton
  758. getSkillIndex=player.GetSkillIndex
  759. getSkillLevel=player.GetSkillLevel
  760. for i in xrange(PAGE_SLOT_COUNT):
  761. skillIndex = getSkillIndex(startNumber+i)
  762. skillLevel = getSkillLevel(startNumber+i)
  763. if 0 == skillIndex:
  764. continue
  765. if 0 == skillLevel:
  766. continue
  767. if skill.IsStandingSkill(skillIndex):
  768. continue
  769. ## FIXME : 스킬 하나당 슬롯 하나씩 할당하는건 아무리 봐도 부하가 크다.
  770. ## 이 부분은 시간을 나면 고치도록. - [levites]
  771. skillButton = self.SkillButton()
  772. skillButton.SetSkill(startNumber+i)
  773. skillButton.SetPosition(x, y)
  774. skillButton.SetSkillEvent(ui.__mem_func__(self.CloseSelectSkill), startNumber+i+1)
  775. skillButton.SetSkillToolTip(self.tooltipSkill)
  776. skillButton.SetTop()
  777. skillButton.Show()
  778. self.selectSkillButtonList.append(skillButton)
  779. appendCount += 1
  780. x -= 32
  781. if appendCount > 0:
  782. y -= 32
  783. def CloseSelectSkill(self, slotIndex=-1):
  784. self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT].Hide()
  785. for button in self.selectSkillButtonList:
  786. button.Destroy()
  787. self.selectSkillButtonList = []
  788. if -1 != slotIndex:
  789. self.curSkillButton.Show()
  790. self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Hide()
  791. player.SetMouseFunc(player.MBT_RIGHT, player.MBF_SKILL)
  792. player.ChangeCurrentSkillNumberOnly(slotIndex-1)
  793. else:
  794. self.curSkillButton.Hide()
  795. self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Show()
  796. def SelectMouseButtonEvent(self, dir, event):
  797. SetMouseButtonSetting(dir, event)
  798. self.CloseSelectSkill()
  799. self.mouseModeButtonList[dir].Hide()
  800. btn = 0
  801. type = self.NONE
  802. func = self.NONE
  803. tooltip_text = ""
  804. if self.MOUSE_BUTTON_LEFT == dir:
  805. type = player.MBT_LEFT
  806. elif self.MOUSE_BUTTON_RIGHT == dir:
  807. type = player.MBT_RIGHT
  808. if self.EVENT_MOVE == event:
  809. btn = self.mouseModeButtonList[dir].GetChild("button_move")
  810. func = player.MBF_MOVE
  811. tooltip_text = localeInfo.TASKBAR_MOVE
  812. elif self.EVENT_ATTACK == event:
  813. btn = self.mouseModeButtonList[dir].GetChild("button_attack")
  814. func = player.MBF_ATTACK
  815. tooltip_text = localeInfo.TASKBAR_ATTACK
  816. elif self.EVENT_AUTO == event:
  817. btn = self.mouseModeButtonList[dir].GetChild("button_auto_attack")
  818. func = player.MBF_AUTO
  819. tooltip_text = localeInfo.TASKBAR_AUTO
  820. elif self.EVENT_MOVE_AND_ATTACK == event:
  821. btn = self.mouseModeButtonList[dir].GetChild("button_move_and_attack")
  822. func = player.MBF_SMART
  823. tooltip_text = localeInfo.TASKBAR_ATTACK
  824. elif self.EVENT_CAMERA == event:
  825. btn = self.mouseModeButtonList[dir].GetChild("button_camera")
  826. func = player.MBF_CAMERA
  827. tooltip_text = localeInfo.TASKBAR_CAMERA
  828. elif self.EVENT_SKILL == event:
  829. btn = self.mouseModeButtonList[dir].GetChild("button_skill")
  830. func = player.MBF_SKILL
  831. tooltip_text = localeInfo.TASKBAR_SKILL
  832. if 0 != btn:
  833. self.curMouseModeButton[dir].SetToolTipText(tooltip_text, 0, -18)
  834. self.curMouseModeButton[dir].SetUpVisual(btn.GetUpVisualFileName())
  835. self.curMouseModeButton[dir].SetOverVisual(btn.GetOverVisualFileName())
  836. self.curMouseModeButton[dir].SetDownVisual(btn.GetDownVisualFileName())
  837. self.curMouseModeButton[dir].Show()
  838. player.SetMouseFunc(type, func)
  839. def OnChangeCurrentSkill(self, skillSlotNumber):
  840. self.curSkillButton.SetSkill(skillSlotNumber)
  841. self.curSkillButton.Show()
  842. self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Hide()
  843. ########Anti Exp Button by Sanii##########
  844. def AntiExp(self):
  845. import constInfo
  846. import event
  847. import net
  848. qid = constInfo.ANTI_EXP
  849. state = constInfo.ANTI_EXP_STATE
  850. if state == 0:
  851. self.antiexp.SetText("-")
  852. self.antiexp.SetToolTipText("Anti-Erfahrung deaktivieren")
  853. event.QuestButtonClick(qid)
  854. else:
  855. self.antiexp.SetText("+")
  856. self.antiexp.SetToolTipText("Anti-Erfahrung aktivieren")
  857. event.QuestButtonClick(qid)
  858. ##########################################