Advertisement
deadx2

Untitled

Sep 15th, 2017
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 32.65 KB | None | 0 0
  1. import app
  2. import uimg
  3. import player
  4. import net
  5. import wndMgr
  6. import messenger
  7. import guild
  8. import chr
  9. import nonplayer
  10. import localemg
  11. import constInfo
  12. import event
  13. import os
  14. import uiCommon
  15. import chat
  16. import uiHealth
  17. import uiToolTip
  18. import item
  19.  
  20. if app.ENABLE_SEND_TARGET_INFO:
  21. def HAS_FLAG(value, flag):
  22. return (value & flag) == flag
  23.  
  24. class TargetBoard(uimg.ThinBoard):
  25.  
  26. if app.ENABLE_SEND_TARGET_INFO:
  27. class InfoBoard(uimg.ThinBoard):
  28. class ItemListBoxItem(uimg.ListBoxExNew.Item):
  29. def __init__(self, width):
  30. uimg.ListBoxExNew.Item.__init__(self)
  31.  
  32. image = uimg.ExpandedImageBox()
  33. image.SetParent(self)
  34. image.Show()
  35. self.image = image
  36.  
  37. nameLine = uimg.TextLine()
  38. nameLine.SetParent(self)
  39. nameLine.SetPosition(32 + 5, 0)
  40. nameLine.Show()
  41. self.nameLine = nameLine
  42.  
  43. self.SetSize(width, 32 + 5)
  44.  
  45. def LoadImage(self, image, name = None):
  46. self.image.LoadImage(image)
  47. self.SetSize(self.GetWidth(), self.image.GetHeight() + 5 * (self.image.GetHeight() / 32))
  48. if name != None:
  49. self.SetText(name)
  50.  
  51. def SetText(self, text):
  52. self.nameLine.SetText(text)
  53.  
  54. def RefreshHeight(self):
  55. uimg.ListBoxExNew.Item.RefreshHeight(self)
  56. self.image.SetRenderingRect(0.0, 0.0 - float(self.removeTop) / float(self.GetHeight()), 0.0, 0.0 - float(self.removeBottom) / float(self.GetHeight()))
  57. self.image.SetPosition(0, - self.removeTop)
  58.  
  59. MAX_ITEM_COUNT = 5
  60.  
  61. EXP_BASE_LVDELTA = [
  62. 1, # -15 0
  63. 5, # -14 1
  64. 10, # -13 2
  65. 20, # -12 3
  66. 30, # -11 4
  67. 50, # -10 5
  68. 70, # -9 6
  69. 80, # -8 7
  70. 85, # -7 8
  71. 90, # -6 9
  72. 92, # -5 10
  73. 94, # -4 11
  74. 96, # -3 12
  75. 98, # -2 13
  76. 100, # -1 14
  77. 100, # 0 15
  78. 105, # 1 16
  79. 110, # 2 17
  80. 115, # 3 18
  81. 120, # 4 19
  82. 125, # 5 20
  83. 130, # 6 21
  84. 135, # 7 22
  85. 140, # 8 23
  86. 145, # 9 24
  87. 150, # 10 25
  88. 155, # 11 26
  89. 160, # 12 27
  90. 165, # 13 28
  91. 170, # 14 29
  92. 180, # 15 30
  93. ]
  94.  
  95. RACE_FLAG_TO_NAME = {
  96. 1 << 0 : localemg.TARGET_INFO_RACE_ANIMAL,
  97. 1 << 1 : localemg.TARGET_INFO_RACE_UNDEAD,
  98. 1 << 2 : localemg.TARGET_INFO_RACE_DEVIL,
  99. 1 << 3 : localemg.TARGET_INFO_RACE_HUMAN,
  100. 1 << 4 : localemg.TARGET_INFO_RACE_ORC,
  101. 1 << 5 : localemg.TARGET_INFO_RACE_MILGYO,
  102. }
  103.  
  104. SUB_RACE_FLAG_TO_NAME = {
  105. 1 << 11 : localemg.TARGET_INFO_RACE_ELEC,
  106. 1 << 12 : localemg.TARGET_INFO_RACE_FIRE,
  107. 1 << 13 : localemg.TARGET_INFO_RACE_ICE,
  108. 1 << 14 : localemg.TARGET_INFO_RACE_WIND,
  109. 1 << 15 : localemg.TARGET_INFO_RACE_EARTH,
  110. 1 << 16 : localemg.TARGET_INFO_RACE_DARK,
  111. }
  112.  
  113. STONE_START_VNUM = 28030
  114. STONE_LAST_VNUM = 28042
  115.  
  116. BOARD_WIDTH = 250
  117.  
  118. def __init__(self):
  119. uimg.ThinBoard.__init__(self)
  120.  
  121. self.HideCorners(self.LT)
  122. self.HideCorners(self.RT)
  123. self.HideLine(self.T)
  124.  
  125. self.race = 0
  126. self.hasItems = False
  127.  
  128. self.itemTooltip = uiToolTip.ItemToolTip()
  129. self.itemTooltip.HideToolTip()
  130.  
  131. self.stoneImg = None
  132. self.stoneVnum = None
  133. self.lastStoneVnum = 0
  134. self.nextStoneIconChange = 0
  135.  
  136. self.SetSize(self.BOARD_WIDTH, 0)
  137.  
  138. def __del__(self):
  139. uimg.ThinBoard.__del__(self)
  140.  
  141. def __UpdatePosition(self, targetBoard):
  142. self.SetPosition(targetBoard.GetLeft() + (targetBoard.GetWidth() - self.GetWidth()) / 2, targetBoard.GetBottom() - 17)
  143.  
  144. def Open(self, targetBoard, race):
  145. self.__LoadInformation(race)
  146.  
  147. self.SetSize(self.BOARD_WIDTH, self.yPos + 10)
  148. self.__UpdatePosition(targetBoard)
  149.  
  150. self.Show()
  151.  
  152. def Refresh(self):
  153. self.__LoadInformation(self.race)
  154. self.SetSize(self.BOARD_WIDTH, self.yPos + 10)
  155.  
  156. def Close(self):
  157. self.itemTooltip.HideToolTip()
  158. self.Hide()
  159.  
  160. def __LoadInformation(self, race):
  161. self.yPos = 7
  162. self.children = []
  163. self.race = race
  164. self.stoneImg = None
  165. self.stoneVnum = None
  166. self.nextStoneIconChange = 0
  167.  
  168. self.__LoadInformation_Default(race)
  169. self.__LoadInformation_Race(race)
  170. self.__LoadInformation_Drops(race)
  171.  
  172. def __LoadInformation_Default_GetHitRate(self, race):
  173. attacker_dx = nonplayer.GetMonsterDX(race)
  174. attacker_level = nonplayer.GetMonsterLevel(race)
  175.  
  176. self_dx = player.GetStatus(player.DX)
  177. self_level = player.GetStatus(player.LEVEL)
  178.  
  179. iARSrc = min(90, (attacker_dx * 4 + attacker_level * 2) / 6)
  180. iERSrc = min(90, (self_dx * 4 + self_level * 2) / 6)
  181.  
  182. fAR = (float(iARSrc) + 210.0) / 300.0
  183. fER = (float(iERSrc) * 2 + 5) / (float(iERSrc) + 95) * 3.0 / 10.0
  184.  
  185. return fAR - fER
  186.  
  187. def __LoadInformation_Default(self, race):
  188. self.AppendSeperator()
  189. self.AppendTextLine(localemg.TARGET_INFO_MAX_HP % str(nonplayer.GetMonsterMaxHP(race)))
  190.  
  191. # calc att damage
  192. monsterLevel = nonplayer.GetMonsterLevel(race)
  193. fHitRate = self.__LoadInformation_Default_GetHitRate(race)
  194. iDamMin, iDamMax = nonplayer.GetMonsterDamage(race)
  195. iDamMin = int((iDamMin + nonplayer.GetMonsterST(race)) * 2 * fHitRate) + monsterLevel * 2
  196. iDamMax = int((iDamMax + nonplayer.GetMonsterST(race)) * 2 * fHitRate) + monsterLevel * 2
  197. iDef = player.GetStatus(player.DEF_GRADE) * (100 + player.GetStatus(player.DEF_BONUS)) / 100
  198. fDamMulti = nonplayer.GetMonsterDamageMultiply(race)
  199. iDamMin = int(max(0, iDamMin - iDef) * fDamMulti)
  200. iDamMax = int(max(0, iDamMax - iDef) * fDamMulti)
  201. if iDamMin < 1:
  202. iDamMin = 1
  203. if iDamMax < 5:
  204. iDamMax = 5
  205. self.AppendTextLine(localemg.TARGET_INFO_DAMAGE % (str(iDamMin), str(iDamMax)))
  206.  
  207. idx = min(len(self.EXP_BASE_LVDELTA) - 1, max(0, (monsterLevel + 15) - player.GetStatus(player.LEVEL)))
  208. iExp = nonplayer.GetMonsterExp(race) * self.EXP_BASE_LVDELTA[idx] / 100
  209. self.AppendTextLine(localemg.TARGET_INFO_EXP % str(iExp))
  210.  
  211. def __LoadInformation_Race(self, race):
  212. dwRaceFlag = nonplayer.GetMonsterRaceFlag(race)
  213. self.AppendSeperator()
  214.  
  215. mainrace = ""
  216. subrace = ""
  217. for i in xrange(17):
  218. curFlag = 1 << i
  219. if HAS_FLAG(dwRaceFlag, curFlag):
  220. if self.RACE_FLAG_TO_NAME.has_key(curFlag):
  221. mainrace += self.RACE_FLAG_TO_NAME[curFlag] + ", "
  222. elif self.SUB_RACE_FLAG_TO_NAME.has_key(curFlag):
  223. subrace += self.SUB_RACE_FLAG_TO_NAME[curFlag] + ", "
  224. if nonplayer.IsMonsterStone(race):
  225. mainrace += localemg.TARGET_INFO_RACE_METIN + ", "
  226. if mainrace == "":
  227. mainrace = localemg.TARGET_INFO_NO_RACE
  228. else:
  229. mainrace = mainrace[:-2]
  230. if subrace == "":
  231. subrace = localemg.TARGET_INFO_NO_RACE
  232. else:
  233. subrace = subrace[:-2]
  234.  
  235. self.AppendTextLine(localemg.TARGET_INFO_MAINRACE % mainrace)
  236. self.AppendTextLine(localemg.TARGET_INFO_SUBRACE % subrace)
  237.  
  238. def __LoadInformation_Drops(self, race):
  239. self.AppendSeperator()
  240.  
  241. if race in constInfo.MONSTER_INFO_DATA:
  242. if len(constInfo.MONSTER_INFO_DATA[race]["items"]) == 0:
  243. self.AppendTextLine(localemg.TARGET_INFO_NO_ITEM_TEXT)
  244. else:
  245. itemListBox = uimg.ListBoxExNew(32 + 5, self.MAX_ITEM_COUNT)
  246. itemListBox.SetSize(self.GetWidth() - 15 * 2 - uimg.ScrollBar.SCROLLBAR_WIDTH, (32 + 5) * self.MAX_ITEM_COUNT)
  247. height = 0
  248. for curItem in constInfo.MONSTER_INFO_DATA[race]["items"]:
  249. if curItem.has_key("vnum_list"):
  250. height += self.AppendItem(itemListBox, curItem["vnum_list"], curItem["count"])
  251. else:
  252. height += self.AppendItem(itemListBox, curItem["vnum"], curItem["count"])
  253. if height < itemListBox.GetHeight():
  254. itemListBox.SetSize(itemListBox.GetWidth(), height)
  255. self.AppendWindow(itemListBox, 15)
  256. itemListBox.SetBasePos(0)
  257.  
  258. if len(constInfo.MONSTER_INFO_DATA[race]["items"]) > itemListBox.GetViewItemCount():
  259. itemScrollBar = uimg.ScrollBar()
  260. itemScrollBar.SetParent(self)
  261. itemScrollBar.SetPosition(itemListBox.GetRight(), itemListBox.GetTop())
  262. itemScrollBar.SetScrollBarSize(32 * self.MAX_ITEM_COUNT + 5 * (self.MAX_ITEM_COUNT - 1))
  263. itemScrollBar.SetMiddleBarSize(float(self.MAX_ITEM_COUNT) / float(height / (32 + 5)))
  264. itemScrollBar.Show()
  265. itemListBox.SetScrollBar(itemScrollBar)
  266. else:
  267. self.AppendTextLine(localemg.TARGET_INFO_NO_ITEM_TEXT)
  268.  
  269. def AppendTextLine(self, text):
  270. textLine = uimg.TextLine()
  271. textLine.SetParent(self)
  272. textLine.SetWindowHorizontalAlignCenter()
  273. textLine.SetHorizontalAlignCenter()
  274. textLine.SetText(text)
  275. textLine.SetPosition(0, self.yPos)
  276. textLine.Show()
  277.  
  278. self.children.append(textLine)
  279. self.yPos += 17
  280.  
  281. def AppendSeperator(self):
  282. img = uimg.ImageBox()
  283. img.LoadImage("d:/ymir work/ui/seperator.tga")
  284. self.AppendWindow(img)
  285. img.SetPosition(img.GetLeft(), img.GetTop() - 15)
  286. self.yPos -= 15
  287.  
  288. def AppendItem(self, listBox, vnums, count):
  289. if type(vnums) == int:
  290. vnum = vnums
  291. else:
  292. vnum = vnums[0]
  293.  
  294. item.SelectItem(vnum)
  295. itemName = item.GetItemName()
  296. if type(vnums) != int and len(vnums) > 1:
  297. vnums = sorted(vnums)
  298. realName = itemName[:itemName.find("+")]
  299. if item.GetItemType() == item.ITEM_TYPE_METIN:
  300. realName = localemg.TARGET_INFO_STONE_NAME
  301. itemName = realName + "+0 - +4"
  302. else:
  303. itemName = realName + "+" + str(vnums[0] % 10) + " - +" + str(vnums[len(vnums) - 1] % 10)
  304. vnum = vnums[len(vnums) - 1]
  305.  
  306. myItem = self.ItemListBoxItem(listBox.GetWidth())
  307. myItem.LoadImage(item.GetIconImageFileName())
  308. if count <= 1:
  309. myItem.SetText(itemName)
  310. else:
  311. myItem.SetText("%dx %s" % (count, itemName))
  312. myItem.SAFE_SetOverInEvent(self.OnShowItemTooltip, vnum)
  313. myItem.SAFE_SetOverOutEvent(self.OnHideItemTooltip)
  314. listBox.AppendItem(myItem)
  315.  
  316. if item.GetItemType() == item.ITEM_TYPE_METIN:
  317. self.stoneImg = myItem
  318. self.stoneVnum = vnums
  319. self.lastStoneVnum = self.STONE_LAST_VNUM + vnums[len(vnums) - 1] % 1000 / 100 * 100
  320.  
  321. return myItem.GetHeight()
  322.  
  323. def OnShowItemTooltip(self, vnum):
  324. item.SelectItem(vnum)
  325. if item.GetItemType() == item.ITEM_TYPE_METIN:
  326. self.itemTooltip.isStone = True
  327. self.itemTooltip.isBook = False
  328. self.itemTooltip.isBook2 = False
  329. self.itemTooltip.SetItemToolTip(self.lastStoneVnum)
  330. else:
  331. self.itemTooltip.isStone = False
  332. self.itemTooltip.isBook = True
  333. self.itemTooltip.isBook2 = True
  334. self.itemTooltip.SetItemToolTip(vnum)
  335.  
  336. def OnHideItemTooltip(self):
  337. self.itemTooltip.HideToolTip()
  338.  
  339. def AppendWindow(self, wnd, x = 0, width = 0, height = 0):
  340. if width == 0:
  341. width = wnd.GetWidth()
  342. if height == 0:
  343. height = wnd.GetHeight()
  344.  
  345. wnd.SetParent(self)
  346. if x == 0:
  347. wnd.SetPosition((self.GetWidth() - width) / 2, self.yPos)
  348. else:
  349. wnd.SetPosition(x, self.yPos)
  350. wnd.Show()
  351.  
  352. self.children.append(wnd)
  353. self.yPos += height + 5
  354.  
  355. def OnUpdate(self):
  356. if self.stoneImg != None and self.stoneVnum != None and app.GetTime() >= self.nextStoneIconChange:
  357. nextImg = self.lastStoneVnum + 1
  358. if nextImg % 100 > self.STONE_LAST_VNUM % 100:
  359. nextImg -= (self.STONE_LAST_VNUM - self.STONE_START_VNUM) + 1
  360. self.lastStoneVnum = nextImg
  361. self.nextStoneIconChange = app.GetTime() + 2.5
  362.  
  363. item.SelectItem(nextImg)
  364. itemName = item.GetItemName()
  365. realName = itemName[:itemName.find("+")]
  366. realName = realName + "+0 - +4"
  367. self.stoneImg.LoadImage(item.GetIconImageFileName(), realName)
  368.  
  369. if self.itemTooltip.IsShow() and self.itemTooltip.isStone:
  370. self.itemTooltip.SetItemToolTip(nextImg)
  371.  
  372. BUTTON_NAME_LIST = (
  373. localemg.TARGET_BUTTON_WHISPER,
  374. localemg.TARGET_BUTTON_EXCHANGE,
  375. localemg.TARGET_BUTTON_FIGHT,
  376. localemg.TARGET_BUTTON_ACCEPT_FIGHT,
  377. localemg.TARGET_BUTTON_AVENGE,
  378. localemg.TARGET_BUTTON_FRIEND,
  379. localemg.TARGET_BUTTON_INVITE_PARTY,
  380. localemg.TARGET_BUTTON_LEAVE_PARTY,
  381. localemg.TARGET_BUTTON_EXCLUDE,
  382. localemg.TARGET_BUTTON_INVITE_GUILD,
  383. localemg.TARGET_BUTTON_DISMOUNT,
  384. localemg.TARGET_BUTTON_EXIT_OBSERVER,
  385. localemg.TARGET_BUTTON_VIEW_EQUIPMENT,
  386. localemg.TARGET_BUTTON_REQUEST_ENTER_PARTY,
  387. localemg.TARGET_BUTTON_BUILDING_DESTROY,
  388. localemg.TARGET_BUTTON_EMOTION_ALLOW,
  389. "VOTE_BLOCK_CHAT",
  390. )
  391.  
  392. GRADE_NAME = {
  393. nonplayer.PAWN : localemg.TARGET_LEVEL_PAWN,
  394. nonplayer.S_PAWN : localemg.TARGET_LEVEL_S_PAWN,
  395. nonplayer.KNIGHT : localemg.TARGET_LEVEL_KNIGHT,
  396. nonplayer.S_KNIGHT : localemg.TARGET_LEVEL_S_KNIGHT,
  397. nonplayer.BOSS : localemg.TARGET_LEVEL_BOSS,
  398. nonplayer.KING : localemg.TARGET_LEVEL_KING,
  399. }
  400. EXCHANGE_LIMIT_RANGE = 3000
  401.  
  402. def __init__(self):
  403. uimg.ThinBoard.__init__(self)
  404.  
  405. name = uimg.TextLine()
  406. name.SetFontColorNew(212, 49, 39)
  407. name.SetParent(self)
  408. name.SetDefaultFontName()
  409. name.SetOutline()
  410. name.Show()
  411.  
  412. hpGauge = uimg.Gauge()
  413. hpGauge.SetParent(self)
  414. hpGauge.MakeGauge(140, "red")
  415. hpGauge.Hide()
  416.  
  417. hpText = uimg.TextLine()
  418. hpText.SetPosition(0, -17)
  419. hpText.SetWindowHorizontalAlignCenter()
  420. hpText.SetHorizontalAlignCenter()
  421. hpText.Hide()
  422.  
  423. closeButton = uimg.Button()
  424. closeButton.SetParent(self)
  425. closeButton.SetUpVisual("illumina/controls/common/button/thinboard_close_01_normal.tga")
  426. closeButton.SetOverVisual("illumina/controls/common/button/thinboard_close_02_hover.tga")
  427. closeButton.SetDownVisual("illumina/controls/common/button/thinboard_close_03_active.tga")
  428. closeButton.SetPosition(30, 10)
  429.  
  430. if localemg.IsARABIC():
  431. hpGauge.SetPosition(55, 17)
  432. hpGauge.SetWindowHorizontalAlignLeft()
  433. closeButton.SetWindowHorizontalAlignLeft()
  434. else:
  435. hpGauge.SetPosition(175, 17)
  436. hpGauge.SetWindowHorizontalAlignRight()
  437. closeButton.SetWindowHorizontalAlignRight()
  438. if app.ENABLE_SEND_TARGET_INFO:
  439. infoButton = uimg.Button()
  440. infoButton.SetParent(self)
  441. infoButton.SetUpVisual("d:/ymir work/ui/pattern/q_mark_01.tga")
  442. infoButton.SetOverVisual("d:/ymir work/ui/pattern/q_mark_02.tga")
  443. infoButton.SetDownVisual("d:/ymir work/ui/pattern/q_mark_01.tga")
  444. infoButton.SetEvent(uimg.__mem_func__(self.OnPressedInfoButton))
  445. infoButton.Hide()
  446.  
  447. infoBoard = self.InfoBoard()
  448. infoBoard.Hide()
  449. infoButton.showWnd = infoBoard
  450.  
  451. closeButton.SetEvent(uimg.__mem_func__(self.OnPressedCloseButton))
  452. closeButton.Show()
  453.  
  454. self.buttonDict = {}
  455. self.showingButtonList = []
  456. for buttonName in self.BUTTON_NAME_LIST:
  457. button = uimg.Button()
  458. button.SetFontColorNew(160, 121, 112)
  459. button.SetParent(self)
  460.  
  461. if localemg.IsARABIC():
  462. button.SetUpVisual("illumina/inne/btn_green1.tga")
  463. button.SetOverVisual("illumina/inne/btn_green2.tga")
  464. button.SetDownVisual("illumina/inne/btn_green3.tga")
  465. else:
  466. button.SetUpVisual("illumina/inne/btn_green1.tga")
  467. button.SetOverVisual("illumina/inne/btn_green2.tga")
  468. button.SetDownVisual("illumina/inne/btn_green3.tga")
  469.  
  470. button.SetWindowHorizontalAlignCenter()
  471. button.SetText(buttonName)
  472. button.Hide()
  473. self.buttonDict[buttonName] = button
  474. self.showingButtonList.append(button)
  475.  
  476. self.buttonDict[localemg.TARGET_BUTTON_WHISPER].SetEvent(uimg.__mem_func__(self.OnWhisper))
  477. self.buttonDict[localemg.TARGET_BUTTON_EXCHANGE].SetEvent(uimg.__mem_func__(self.OnExchange))
  478. self.buttonDict[localemg.TARGET_BUTTON_FIGHT].SetEvent(uimg.__mem_func__(self.OnPVP))
  479. self.buttonDict[localemg.TARGET_BUTTON_ACCEPT_FIGHT].SetEvent(uimg.__mem_func__(self.OnPVP))
  480. self.buttonDict[localemg.TARGET_BUTTON_AVENGE].SetEvent(uimg.__mem_func__(self.OnPVP))
  481. #DEMIRGAME & TURKMMO [P-NEW] PVP SYSTEM
  482. self.buttonDict[localemg.TARGET_BUTTON_FIGHT].SetEvent(uimg.__mem_func__(self.demirwsgame))
  483. self.buttonDict[localemg.TARGET_BUTTON_ACCEPT_FIGHT].SetEvent(uimg.__mem_func__(self.demirgogame))
  484. self.buttonDict[localemg.TARGET_BUTTON_AVENGE].SetEvent(uimg.__mem_func__(self.demirgogame))
  485. self.buttonDict[localemg.TARGET_BUTTON_ACCEPT_FIGHT].SetEvent(uimg.__mem_func__(self.demirwsgame))
  486. self.buttonDict[localemg.TARGET_BUTTON_AVENGE].SetEvent(uimg.__mem_func__(self.demirwsgame))
  487. #DEMIRGAME & TURKMMO [P-NEW] PVP SYSTEM
  488. self.buttonDict[localemg.TARGET_BUTTON_FRIEND].SetEvent(uimg.__mem_func__(self.OnAppendToMessenger))
  489. self.buttonDict[localemg.TARGET_BUTTON_FRIEND].SetEvent(uimg.__mem_func__(self.OnAppendToMessenger))
  490. self.buttonDict[localemg.TARGET_BUTTON_INVITE_PARTY].SetEvent(uimg.__mem_func__(self.OnPartyInvite))
  491. self.buttonDict[localemg.TARGET_BUTTON_LEAVE_PARTY].SetEvent(uimg.__mem_func__(self.OnPartyExit))
  492. self.buttonDict[localemg.TARGET_BUTTON_EXCLUDE].SetEvent(uimg.__mem_func__(self.OnPartyRemove))
  493.  
  494. self.buttonDict[localemg.TARGET_BUTTON_INVITE_GUILD].SAFE_SetEvent(self.__OnGuildAddMember)
  495. self.buttonDict[localemg.TARGET_BUTTON_DISMOUNT].SAFE_SetEvent(self.__OnDismount)
  496. self.buttonDict[localemg.TARGET_BUTTON_EXIT_OBSERVER].SAFE_SetEvent(self.__OnExitObserver)
  497. self.buttonDict[localemg.TARGET_BUTTON_VIEW_EQUIPMENT].SAFE_SetEvent(self.__OnViewEquipment)
  498. self.buttonDict[localemg.TARGET_BUTTON_REQUEST_ENTER_PARTY].SAFE_SetEvent(self.__OnRequestParty)
  499. self.buttonDict[localemg.TARGET_BUTTON_BUILDING_DESTROY].SAFE_SetEvent(self.__OnDestroyBuilding)
  500. self.buttonDict[localemg.TARGET_BUTTON_EMOTION_ALLOW].SAFE_SetEvent(self.__OnEmotionAllow)
  501.  
  502. self.buttonDict["VOTE_BLOCK_CHAT"].SetEvent(uimg.__mem_func__(self.__OnVoteBlockChat))
  503.  
  504. self.name = name
  505. self.hpGauge = hpGauge
  506. if app.ENABLE_SEND_TARGET_INFO:
  507. self.infoButton = infoButton
  508. if app.ENABLE_SEND_TARGET_INFO:
  509. self.vnum = 0
  510. self.hpText = hpText
  511. hpText.SetParent(hpGauge)
  512. self.closeButton = closeButton
  513. self.nameString = 0
  514. self.nameLength = 0
  515. self.vid = 0
  516. self.eventWhisper = None
  517. self.isShowButton = False
  518. self.healthBoard = uiHealth.HealthBoard()
  519.  
  520. self.__Initialize()
  521. self.ResetTargetBoard()
  522.  
  523. def __del__(self):
  524. uimg.ThinBoard.__del__(self)
  525.  
  526. print "===================================================== DESTROYED TARGET BOARD"
  527.  
  528. def __Initialize(self):
  529. self.nameString = ""
  530. self.nameLength = 0
  531. self.vid = 0
  532. if app.ENABLE_SEND_TARGET_INFO:
  533. self.vnum = 0
  534. self.isShowButton = False
  535.  
  536. def Destroy(self):
  537. self.eventWhisper = None
  538. if app.ENABLE_SEND_TARGET_INFO:
  539. self.infoButton = None
  540. self.closeButton = None
  541. self.showingButtonList = None
  542. self.buttonDict = None
  543. self.name = None
  544. self.hpGauge = None
  545. self.hpText = None
  546. self.__Initialize()
  547. if app.ENABLE_SEND_TARGET_INFO:
  548. def RefreshMonsterInfoBoard(self):
  549. if not self.infoButton.showWnd.IsShow():
  550. return
  551.  
  552. self.infoButton.showWnd.Refresh()
  553.  
  554. def OnPressedInfoButton(self):
  555. net.SendTargetInfoLoad(player.GetTargetVID())
  556. if self.infoButton.showWnd.IsShow():
  557. self.infoButton.showWnd.Close()
  558. elif self.vnum != 0:
  559. self.infoButton.showWnd.Open(self, self.vnum)
  560.  
  561. def OnPressedCloseButton(self):
  562. player.ClearTarget()
  563. self.Close()
  564.  
  565. def Close(self):
  566. self.__Initialize()
  567. if app.ENABLE_SEND_TARGET_INFO:
  568. self.infoButton.showWnd.Close()
  569. self.healthBoard.Hide()
  570. self.Hide()
  571.  
  572. def Open(self, vid, name):
  573. if vid:
  574. if not constInfo.GET_VIEW_OTHER_EMPIRE_PLAYER_TARGET_BOARD():
  575. if not player.IsSameEmpire(vid):
  576. self.Hide()
  577. return
  578.  
  579. if vid != self.GetTargetVID():
  580. self.ResetTargetBoard()
  581. self.SetTargetVID(vid)
  582. self.SetTargetName(name)
  583.  
  584. if player.IsMainCharacterIndex(vid):
  585. self.__ShowMainCharacterMenu()
  586. #elif chr.INSTANCE_TYPE_BUILDING == chr.GetInstanceType(self.vid):
  587. # self.Hide()
  588. else:
  589. self.RefreshButton()
  590. self.Show()
  591. else:
  592. self.HideAllButton()
  593. self.__ShowButton(localemg.TARGET_BUTTON_WHISPER)
  594. self.__ShowButton("VOTE_BLOCK_CHAT")
  595. self.__ArrangeButtonPosition()
  596. self.SetTargetName(name)
  597. self.Show()
  598.  
  599. def Refresh(self):
  600. if self.IsShow():
  601. if self.IsShowButton():
  602. self.RefreshButton()
  603.  
  604. def RefreshByVID(self, vid):
  605. if vid == self.GetTargetVID():
  606. self.Refresh()
  607.  
  608. def RefreshByName(self, name):
  609. if name == self.GetTargetName():
  610. self.Refresh()
  611.  
  612. def __ShowMainCharacterMenu(self):
  613. canShow=0
  614.  
  615. self.HideAllButton()
  616.  
  617. if player.IsMountingHorse():
  618. self.__ShowButton(localemg.TARGET_BUTTON_DISMOUNT)
  619. canShow=1
  620.  
  621. if player.IsObserverMode():
  622. self.__ShowButton(localemg.TARGET_BUTTON_EXIT_OBSERVER)
  623. canShow=1
  624.  
  625. if canShow:
  626. self.__ArrangeButtonPosition()
  627. self.Show()
  628. else:
  629. self.Hide()
  630.  
  631. def __ShowNameOnlyMenu(self):
  632. self.HideAllButton()
  633.  
  634. def SetWhisperEvent(self, event):
  635. self.eventWhisper = event
  636.  
  637. def UpdatePosition(self):
  638. self.SetPosition(wndMgr.GetScreenWidth()/2 - self.GetWidth()/2, 10)
  639.  
  640. def ResetTargetBoard(self):
  641.  
  642. for btn in self.buttonDict.values():
  643. btn.Hide()
  644.  
  645. self.__Initialize()
  646.  
  647. self.name.SetPosition(0, 13)
  648. self.name.SetHorizontalAlignCenter()
  649. self.name.SetWindowHorizontalAlignCenter()
  650. self.hpGauge.Hide()
  651. if app.ENABLE_SEND_TARGET_INFO:
  652. self.infoButton.Hide()
  653. self.infoButton.showWnd.Close()
  654. self.hpText.Hide()
  655. self.SetSize(250, 40)
  656.  
  657. def SetTargetVID(self, vid):
  658. self.vid = vid
  659. if app.ENABLE_SEND_TARGET_INFO:
  660. self.vnum = 0
  661.  
  662. def SetEnemyVID(self, vid):
  663. self.SetTargetVID(vid)
  664.  
  665. name = chr.GetNameByVID(vid)
  666. if app.ENABLE_SEND_TARGET_INFO:
  667. vnum = nonplayer.GetRaceNumByVID(vid)
  668. level = nonplayer.GetLevelByVID(vid)
  669. grade = nonplayer.GetGradeByVID(vid)
  670.  
  671. nameFront = ""
  672. if -1 != level:
  673. nameFront += "Lv." + str(level) + " "
  674. if self.GRADE_NAME.has_key(grade):
  675. nameFront += "(" + self.GRADE_NAME[grade] + ") "
  676.  
  677. self.SetTargetName(nameFront + name)
  678. if app.ENABLE_SEND_TARGET_INFO:
  679. (textWidth, textHeight) = self.name.GetTextSize()
  680.  
  681. self.infoButton.SetPosition(textWidth + 25, 12)
  682. self.infoButton.SetWindowHorizontalAlignLeft()
  683.  
  684. self.vnum = vnum
  685. self.infoButton.Show()
  686.  
  687. def GetTargetVID(self):
  688. return self.vid
  689.  
  690. def GetTargetName(self):
  691. return self.nameString
  692.  
  693. def SetTargetName(self, name):
  694. self.nameString = name
  695. self.nameLength = len(name)
  696. self.name.SetText(name)
  697.  
  698. def SetHP(self, hpPercentage):
  699. if not self.hpGauge.IsShow():
  700.  
  701. self.SetSize(200 + 7*self.nameLength, self.GetHeight())
  702.  
  703. if localemg.IsARABIC():
  704. self.name.SetPosition( self.GetWidth()-23, 13)
  705. else:
  706. self.name.SetPosition(23, 13)
  707.  
  708. self.name.SetWindowHorizontalAlignLeft()
  709. self.name.SetHorizontalAlignLeft()
  710. self.hpGauge.Show()
  711. self.UpdatePosition()
  712. self.hpText.SetPosition(0*self.nameLength-80, -4)
  713. self.hpText.Show()
  714.  
  715. self.hpGauge.SetPercentage(hpPercentage, 100)
  716. self.hpText.SetText("%d%%" % (hpPercentage))
  717.  
  718. def ShowDefaultButton(self):
  719.  
  720. self.isShowButton = True
  721. self.showingButtonList.append(self.buttonDict[localemg.TARGET_BUTTON_WHISPER])
  722. self.showingButtonList.append(self.buttonDict[localemg.TARGET_BUTTON_EXCHANGE])
  723. self.showingButtonList.append(self.buttonDict[localemg.TARGET_BUTTON_FIGHT])
  724. self.showingButtonList.append(self.buttonDict[localemg.TARGET_BUTTON_EMOTION_ALLOW])
  725. for button in self.showingButtonList:
  726. button.Show()
  727.  
  728. def HideAllButton(self):
  729. self.isShowButton = False
  730. for button in self.showingButtonList:
  731. button.Hide()
  732. self.showingButtonList = []
  733.  
  734. def __ShowButton(self, name):
  735.  
  736. if not self.buttonDict.has_key(name):
  737. return
  738.  
  739. self.buttonDict[name].Show()
  740. self.showingButtonList.append(self.buttonDict[name])
  741.  
  742. def __HideButton(self, name):
  743.  
  744. if not self.buttonDict.has_key(name):
  745. return
  746.  
  747. button = self.buttonDict[name]
  748. button.Hide()
  749.  
  750. for btnInList in self.showingButtonList:
  751. if btnInList == button:
  752. self.showingButtonList.remove(button)
  753. break
  754.  
  755. def OnWhisper(self):
  756. if None != self.eventWhisper:
  757. self.eventWhisper(self.nameString)
  758.  
  759. def OnExchange(self):
  760. net.SendExchangeStartPacket(self.vid)
  761.  
  762. ## def OnPVP(self):
  763. ## net.SendChatPacket("/pvp %d" % (self.vid))
  764. def OnPVP(self):
  765. """ Paylasimci ZacqooLeaven """
  766. if player.IsChallengeInstance(self.vid):
  767. questionDialog = uiCommon.QuestionDialog()
  768. if constInfo.DUELLODAIZINVARMI == "":
  769. questionDialog.SetText("Rakibin HP ve SP gorebilsin mi ? " + " " + chr.GetNameByVID(self.vid)+": Rakip kabul etmedi.")
  770. else:
  771. questionDialog.SetText("Rakibin HP ve SP gorebilsin mi ? " + " " + chr.GetNameByVID(self.vid)+":" + constInfo.DUELLODAIZINVARMI)
  772. questionDialog.SetAcceptEvent(uimg.__mem_func__(self.Yes2))
  773. questionDialog.SetCancelEvent(uimg.__mem_func__(self.No2))
  774. questionDialog.Open()
  775. self.questionDialog = questionDialog
  776. elif not player.IsCantFightInstance(self.vid) or player.IsRevengeInstance(self.vid) or player.IsChallengeInstance(self.vid):
  777. questionDialog = uiCommon.QuestionDialog()
  778. questionDialog.SetText("Rakibinin HP ve SP gormesine izin veriyor musun? ")
  779. questionDialog.SetAcceptEvent(uimg.__mem_func__(self.Yes))
  780. questionDialog.SetCancelEvent(uimg.__mem_func__(self.No))
  781. questionDialog.Open()
  782. self.questionDialog = questionDialog
  783.  
  784. def Yes(self):
  785. self.questionDialog.Close()
  786. net.SendWhisperPacket(chr.GetNameByVID(self.vid), "||"+"HP kabul ettimaq.")
  787. net.SendChatPacket("/pvp %d" % (self.vid))
  788.  
  789. def No(self):
  790. self.questionDialog.Close()
  791. net.SendWhisperPacket(chr.GetNameByVID(self.vid), "||"+"HP kabul etmedi.Hpstanceingilizcebitti")
  792. net.SendChatPacket("/pvp %d" % (self.vid))
  793.  
  794. def Yes2(self):
  795. if constInfo.DUELLODAIZINVARMI == "Kabul etmedi." or constInfo.DUELLODAIZINVARMI == "":
  796. constInfo.DUELLODAIZINVARMI = ""
  797. chat.AppendChat(chat.CHAT_TYPE_INFO, locale.RAKIPKABULETMEDISENDEETMEDIN)
  798. net.SendChatPacket("/pvp %d" % (self.vid))
  799. net.SendWhisperPacket(chr.GetNameByVID(self.vid), '||zacqooleavenhpsp||')
  800. else:
  801. net.SendWhisperPacket(chr.GetNameByVID(self.vid), "||"+"C kabul ettimaq.")
  802. net.SendChatPacket("/pvp %d" % (self.vid))
  803. self.questionDialog.Close()
  804.  
  805. def No2(self):
  806. self.questionDialog.Close()
  807. if constInfo.DUELLODAIZINVARMI == "Kabul etti.":
  808. constInfo.DUELLODAIZINVARMI = ""
  809. chat.AppendChat(chat.CHAT_TYPE_INFO, locale.RAKIPKABULETMEDISENDEETMEDIN2)
  810. net.SendWhisperPacket(chr.GetNameByVID(self.vid), '||zacqooleavenhpspq||')
  811. net.SendChatPacket("/pvp %d" % (self.vid))
  812. else:
  813. net.SendWhisperPacket(chr.GetNameByVID(self.vid), "||"+"C kabul etmedi.Hpstanceingilizcebitti")
  814. net.SendChatPacket("/pvp %d" % (self.vid))
  815.  
  816. #DEMIRGAME & TURKMMO [P-NEW] PVP SYSTEM
  817. ## def demirwsgame(self):
  818. ## net.SendChatPacket("/pvp %d" % (self.vid))
  819. ## constInfo.demirstartgame = self.vid
  820. ## event.QuestButtonClick(constInfo.demirvidgame)
  821.  
  822. def demirwsgame(self):
  823. if player.IsChallengeInstance(self.vid):
  824. questionDialog = uiCommon.QuestionDialog()
  825. if constInfo.DUELLODAIZINVARMI == "":
  826. questionDialog.SetText("Rakibin HP ve SP gorebilsin mi ? " + " " + chr.GetNameByVID(self.vid)+": Rakip kabul etmedi.")
  827. else:
  828. questionDialog.SetText("Rakibin HP ve SP gorebilsin mi ? " + " " + chr.GetNameByVID(self.vid)+":" + constInfo.DUELLODAIZINVARMI)
  829. questionDialog.SetAcceptEvent(uimg.__mem_func__(self.Yes2))
  830. questionDialog.SetCancelEvent(uimg.__mem_func__(self.No2))
  831. questionDialog.Open()
  832. self.questionDialog = questionDialog
  833. elif not player.IsCantFightInstance(self.vid) or player.IsRevengeInstance(self.vid) or player.IsChallengeInstance(self.vid):
  834. questionDialog = uiCommon.QuestionDialog()
  835. questionDialog.SetText("Rakibinin HP ve SP gormesine izin veriyor musun? ")
  836. questionDialog.SetAcceptEvent(uimg.__mem_func__(self.Yes))
  837. questionDialog.SetCancelEvent(uimg.__mem_func__(self.No))
  838. questionDialog.Open()
  839. self.questionDialog = questionDialog
  840.  
  841. def Yes(self):
  842. self.questionDialog.Close()
  843. net.SendWhisperPacket(chr.GetNameByVID(self.vid), "||"+"HP kabul ettimaq.")
  844. net.SendChatPacket("/pvp %d" % (self.vid))
  845. constInfo.demirstartgame = self.vid
  846. event.QuestButtonClick(constInfo.demirvidgame)
  847.  
  848. def No(self):
  849. self.questionDialog.Close()
  850. net.SendWhisperPacket(chr.GetNameByVID(self.vid), "||"+"HP kabul etmedi.Hpstanceingilizcebitti")
  851. net.SendChatPacket("/pvp %d" % (self.vid))
  852. constInfo.demirstartgame = self.vid
  853. event.QuestButtonClick(constInfo.demirvidgame)
  854.  
  855. def Yes2(self):
  856. if constInfo.DUELLODAIZINVARMI == "Kabul etmedi." or constInfo.DUELLODAIZINVARMI == "":
  857. constInfo.DUELLODAIZINVARMI = ""
  858. chat.AppendChat(chat.CHAT_TYPE_INFO, localemg.RAKIPKABULETMEDISENDEETMEDIN)
  859. net.SendChatPacket("/pvp %d" % (self.vid))
  860. net.SendWhisperPacket(chr.GetNameByVID(self.vid), '||zacqooleavenhpsp||')
  861. else:
  862. net.SendWhisperPacket(chr.GetNameByVID(self.vid), "||"+"C kabul ettimaq.")
  863. net.SendChatPacket("/pvp %d" % (self.vid))
  864. self.questionDialog.Close()
  865.  
  866. def No2(self):
  867. self.questionDialog.Close()
  868. if constInfo.DUELLODAIZINVARMI == "Kabul etti.":
  869. constInfo.DUELLODAIZINVARMI = ""
  870. chat.AppendChat(chat.CHAT_TYPE_INFO, localemg.RAKIPKABULETMEDISENDEETMEDIN2)
  871. net.SendWhisperPacket(chr.GetNameByVID(self.vid), '||zacqooleavenhpspq||')
  872. net.SendChatPacket("/pvp %d" % (self.vid))
  873. else:
  874. net.SendWhisperPacket(chr.GetNameByVID(self.vid), "||"+"C kabul etmedi.Hpstanceingilizcebitti")
  875. net.SendChatPacket("/pvp %d" % (self.vid))
  876.  
  877. def demirgogame(self):
  878. constInfo.demirstartgame = self.vid
  879. event.QuestButtonClick(constInfo.demirvid)
  880.  
  881. def demirgogame(self):
  882. constInfo.demirstartgame = self.vid
  883. event.QuestButtonClick(constInfo.demirvid)
  884. #DEMIRGAME & TURKMMO [P-NEW] PVP SYSTEM
  885.  
  886. def OnAppendToMessenger(self):
  887. net.SendMessengerAddByVIDPacket(self.vid)
  888.  
  889. def OnPartyInvite(self):
  890. net.SendPartyInvitePacket(self.vid)
  891.  
  892. def OnPartyExit(self):
  893. net.SendPartyExitPacket()
  894.  
  895. def OnPartyRemove(self):
  896. net.SendPartyRemovePacket(self.vid)
  897.  
  898. def __OnGuildAddMember(self):
  899. net.SendGuildAddMemberPacket(self.vid)
  900.  
  901. def __OnDismount(self):
  902. net.SendChatPacket("/unmount")
  903.  
  904. def __OnExitObserver(self):
  905. net.SendChatPacket("/observer_exit")
  906.  
  907. def __OnViewEquipment(self):
  908. net.SendChatPacket("/view_equip " + str(self.vid))
  909.  
  910. def __OnRequestParty(self):
  911. net.SendChatPacket("/party_request " + str(self.vid))
  912.  
  913. def __OnDestroyBuilding(self):
  914. net.SendChatPacket("/build d %d" % (self.vid))
  915.  
  916. def __OnEmotionAllow(self):
  917. net.SendChatPacket("/emotion_allow %d" % (self.vid))
  918.  
  919. def __OnVoteBlockChat(self):
  920. cmd = "/vote_block_chat %s" % (self.nameString)
  921. net.SendChatPacket(cmd)
  922.  
  923. def OnPressEscapeKey(self):
  924. self.OnPressedCloseButton()
  925. return True
  926.  
  927. def IsShowButton(self):
  928. return self.isShowButton
  929.  
  930. def RefreshButton(self):
  931.  
  932. self.HideAllButton()
  933.  
  934. if chr.INSTANCE_TYPE_BUILDING == chr.GetInstanceType(self.vid):
  935. self.__ShowButton(localemg.TARGET_BUTTON_BUILDING_DESTROY)
  936. self.__ArrangeButtonPosition()
  937. return
  938.  
  939. if player.IsPVPInstance(self.vid) or player.IsObserverMode():
  940. # PVP_INFO_SIZE_BUG_FIX
  941. self.SetSize(200 + 7*self.nameLength, 40)
  942. self.UpdatePosition()
  943. # END_OF_PVP_INFO_SIZE_BUG_FIX
  944. return
  945.  
  946. self.ShowDefaultButton()
  947.  
  948. if guild.MainPlayerHasAuthority(guild.AUTH_ADD_MEMBER):
  949. if not guild.IsMemberByName(self.nameString):
  950. if 0 == chr.GetGuildID(self.vid):
  951. self.__ShowButton(localemg.TARGET_BUTTON_INVITE_GUILD)
  952.  
  953. if not messenger.IsFriendByName(self.nameString):
  954. self.__ShowButton(localemg.TARGET_BUTTON_FRIEND)
  955.  
  956. if player.IsPartyMember(self.vid):
  957.  
  958. self.__HideButton(localemg.TARGET_BUTTON_FIGHT)
  959.  
  960. if player.IsPartyLeader(self.vid):
  961. self.__ShowButton(localemg.TARGET_BUTTON_LEAVE_PARTY)
  962. elif player.IsPartyLeader(player.GetMainCharacterIndex()):
  963. self.__ShowButton(localemg.TARGET_BUTTON_EXCLUDE)
  964.  
  965. else:
  966. if player.IsPartyMember(player.GetMainCharacterIndex()):
  967. if player.IsPartyLeader(player.GetMainCharacterIndex()):
  968. self.__ShowButton(localemg.TARGET_BUTTON_INVITE_PARTY)
  969. else:
  970. if chr.IsPartyMember(self.vid):
  971. self.__ShowButton(localemg.TARGET_BUTTON_REQUEST_ENTER_PARTY)
  972. else:
  973. self.__ShowButton(localemg.TARGET_BUTTON_INVITE_PARTY)
  974.  
  975. if player.IsRevengeInstance(self.vid):
  976. self.__HideButton(localemg.TARGET_BUTTON_FIGHT)
  977. self.__ShowButton(localemg.TARGET_BUTTON_AVENGE)
  978. elif player.IsChallengeInstance(self.vid):
  979. self.__HideButton(localemg.TARGET_BUTTON_FIGHT)
  980. self.__ShowButton(localemg.TARGET_BUTTON_ACCEPT_FIGHT)
  981. elif player.IsCantFightInstance(self.vid):
  982. self.__HideButton(localemg.TARGET_BUTTON_FIGHT)
  983.  
  984. if not player.IsSameEmpire(self.vid):
  985. #self.__HideButton(localemg.TARGET_BUTTON_INVITE_PARTY)
  986. self.__HideButton(localemg.TARGET_BUTTON_FRIEND)
  987. self.__HideButton(localemg.TARGET_BUTTON_FIGHT)
  988.  
  989. distance = player.GetCharacterDistance(self.vid)
  990. if distance > self.EXCHANGE_LIMIT_RANGE:
  991. self.__HideButton(localemg.TARGET_BUTTON_EXCHANGE)
  992. self.__ArrangeButtonPosition()
  993.  
  994. self.__ArrangeButtonPosition()
  995.  
  996. def __ArrangeButtonPosition(self):
  997. showingButtonCount = len(self.showingButtonList)
  998.  
  999. pos = -(showingButtonCount / 2) * 68
  1000. if 0 == showingButtonCount % 2:
  1001. pos += 34
  1002.  
  1003. for button in self.showingButtonList:
  1004. button.SetPosition(pos, 33)
  1005. pos += 68
  1006.  
  1007. self.SetSize(max(150, showingButtonCount * 75), 65)
  1008. self.UpdatePosition()
  1009.  
  1010. def OnUpdate(self):
  1011. if self.isShowButton:
  1012.  
  1013. exchangeButton = self.buttonDict[localemg.TARGET_BUTTON_EXCHANGE]
  1014. distance = player.GetCharacterDistance(self.vid)
  1015.  
  1016. if distance < 0:
  1017. return
  1018.  
  1019. if exchangeButton.IsShow():
  1020. if distance > self.EXCHANGE_LIMIT_RANGE:
  1021. self.RefreshButton()
  1022.  
  1023. else:
  1024. if distance < self.EXCHANGE_LIMIT_RANGE:
  1025. self.RefreshButton()
  1026.  
  1027. if self.vid != 0 and player.IsPVPInstance(self.vid) and constInfo.DUELLODAIZINVARMI == "Kabul etti.":
  1028. constInfo.PLAYER_VID = self.vid
  1029. constInfo.PYTHONISLEM = "#hp_sp#"
  1030. event.QuestButtonClick(constInfo.PYTHONTOLUA)
  1031. if not self.healthBoard.IsShow():
  1032. self.healthBoard.Show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement