Advertisement
Guest User

Untitled

a guest
Jun 8th, 2021
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.57 KB | None | 0 0
  1. import uvvY2sBNvVcbJz4jvDr6fSWYdmqv9NPQ as pythonApi
  2. app = __import__(pythonApi.GetModuleName("app"))
  3. net = __import__(pythonApi.GetModuleName("net"))
  4. item = __import__(pythonApi.GetModuleName("item"))
  5. player = __import__(pythonApi.GetModuleName("player"))
  6. chat = __import__(pythonApi.GetModuleName("chat"))
  7. chr = __import__(pythonApi.GetModuleName("chr"))
  8. exchange = __import__(pythonApi.GetModuleName("exchange"))
  9. guild = __import__(pythonApi.GetModuleName("guild"))
  10. import ui
  11. import grp
  12. import time
  13. import wndMgr
  14. import uiCommon
  15. import localeInfo
  16. import mouseModule
  17. import uiPickMoney
  18. import playerSettingModule
  19. import uiToolTip
  20. import constInfo
  21.  
  22. from playerSettingModule import RACE_WARRIOR_M, RACE_WARRIOR_W, RACE_ASSASSIN_M, RACE_ASSASSIN_W, RACE_SURA_M, RACE_SURA_W, RACE_SHAMAN_M, RACE_SHAMAN_W, RACE_WOLFMAN_M
  23. from time import strftime
  24. from datetime import datetime
  25.  
  26. if app.ENABLE_EXCHANGE_WINDOW_SYSTEM:
  27. FACE_IMAGE_DICT = {
  28. RACE_WARRIOR_M : "icon/face/warrior_m.tga",
  29. RACE_WARRIOR_W : "icon/face/warrior_w.tga",
  30. RACE_ASSASSIN_M : "icon/face/assassin_m.tga",
  31. RACE_ASSASSIN_W : "icon/face/assassin_w.tga",
  32. RACE_SURA_M : "icon/face/sura_m.tga",
  33. RACE_SURA_W : "icon/face/sura_w.tga",
  34. RACE_SHAMAN_M : "icon/face/shaman_m.tga",
  35. RACE_SHAMAN_W : "icon/face/shaman_w.tga",
  36. }
  37. FACE_IMAGE_DICT.update({playerSettingModule.RACE_WOLFMAN_M : "icon/face/wolfman_m.tga",})
  38. HIGHLIGHT_SLOT = "d:/ymir work/ui/public/slot_highlight.sub"
  39. BASE_VISUALS_ROUTE = "d:/ymir work/ui/game/exchange/"
  40.  
  41. class ExchangeDialog(ui.ScriptWindow):
  42. class TextRenderer(ui.Window):
  43. def OnRender(self):
  44. (x, y) = self.GetGlobalPosition()
  45. chat.RenderBox("$EXCHANGE_CHAT$", x, y-3)
  46.  
  47. def __init__(self):
  48. ui.ScriptWindow.__init__(self)
  49. self.TitleName = 0
  50. self.tooltipItem = 0
  51. self.xStart = 0
  52. self.yStart = 0
  53. self.interface = 0
  54. self.questionDialog = 0
  55. self.wndInventory = 0
  56. self.lockedItems = {i:(-1,-1) for i in range(exchange.EXCHANGE_ITEM_MAX_NUM)}
  57.  
  58. def __del__(self):
  59. ui.ScriptWindow.__del__(self)
  60.  
  61. def LoadDialog(self):
  62. PythonScriptLoader = ui.PythonScriptLoader()
  63. PythonScriptLoader.LoadScriptFile(self, "UIScript/exchangedialog_new.py")
  64.  
  65. ## Owner
  66. self.OwnerSlot = self.GetChild("Owner_Slot")
  67. self.OwnerSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectOwnerEmptySlot))
  68. self.OwnerSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectOwnerItemSlot))
  69. self.OwnerSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInOwnerItem))
  70. self.OwnerSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  71. self.OwnerSlot.SetUnselectItemSlotEvent(ui.__mem_func__(self.RightClickItemSlot))
  72.  
  73. self.OwnerMoney = self.GetChild("Owner_Money_Value")
  74. #self.OwnerAcceptLight = self.GetChild("Owner_Accept_Light")
  75. #self.OwnerAcceptLight.Disable()
  76. self.OwnerMoneyButton = self.GetChild("Owner_Money")
  77. self.OwnerMoneyButton.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog))
  78. if app.ENABLE_CHEQUE_SYSTEM:
  79. self.OwnerCheque = self.GetChild("Owner_Cheque_Value")
  80. self.OwnerChequeButton = self.GetChild("Owner_Cheque")
  81. self.OwnerChequeButton.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog))
  82. self.OwnerRaceImage = self.GetChild("Owner_Race_Image")
  83. self.OwnerOverlay = self.GetChild("Owner_Overlay")
  84. self.OwnerOverlay.Hide()
  85.  
  86. ## Target
  87. self.TargetSlot = self.GetChild("Target_Slot")
  88. self.TargetSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInTargetItem))
  89. self.TargetSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  90. self.TargetMoney = self.GetChild("Target_Money_Value")
  91. if app.ENABLE_CHEQUE_SYSTEM:
  92. self.TargetCheque = self.GetChild("Target_Cheque_Value")
  93. #self.TargetAcceptLight = self.GetChild("Target_Accept_Light")
  94. #self.TargetAcceptLight.Disable()
  95.  
  96. self.Character_Name = self.GetChild("Character_Name")
  97. self.Character_Level = self.GetChild("Character_Level")
  98. self.TargetName = self.GetChild("Target_Name")
  99. self.TargetLevel = self.GetChild("Target_Level")
  100. self.TargetGuild = self.GetChild("Target_Guild")
  101. self.CharacterGuild = self.GetChild("Character_Guild")
  102. self.TargetFriendIndicator = self.GetChild("Target_Friend_Indicator")
  103. self.TargetFriendIndicator.Hide()
  104.  
  105. self.TargetRaceImage = self.GetChild("Target_Race_Image")
  106. self.TargetOverlay = self.GetChild("Target_Overlay")
  107. self.TargetOverlay.Hide()
  108.  
  109. ## PickMoneyDialog
  110. dlgPickMoney = uiPickMoney.PickMoneyDialog()
  111. dlgPickMoney.LoadDialog()
  112. dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
  113. dlgPickMoney.SetTitleName(localeInfo.EXCHANGE_MONEY)
  114. dlgPickMoney.SetMax(10)
  115. #if app.ENABLE_CHEQUE_SYSTEM:
  116. #dlgPickMoney.SetMaxCheque(3)
  117. dlgPickMoney.Hide()
  118. self.dlgPickMoney = dlgPickMoney
  119.  
  120. ## Button
  121. self.ReadyButton = self.GetChild("Middle_Exchange_Button")
  122. self.ReadyButton.SetEvent(ui.__mem_func__(self.ReadyExchange))
  123.  
  124. self.TitleName = self.GetChild("TitleName")
  125. self.GetChild("TitleBar").SetCloseEvent(net.SendExchangeExitPacket)
  126.  
  127. ## Scroll
  128. self.scrollBar = self.GetChild("scrollbar")
  129. self.scrollBar.SetScrollEvent(ui.__mem_func__(self.OnScroll))
  130. self.scrollBar.SetPos(0.0)
  131.  
  132. ## Chat
  133. self.textRenderer = self.TextRenderer()
  134. self.textRenderer.SetParent(self)
  135. self.textRenderer.SetPosition(40, 239)
  136. self.textRenderer.Show()
  137.  
  138. def Destroy(self):
  139. print "---------------------------------------------------------------------------- DESTROY EXCHANGE"
  140. self.ClearDictionary()
  141. self.dlgPickMoney.Destroy()
  142. self.dlgPickMoney = 0
  143. self.scrollBar.Destroy()
  144. self.scrollBar = 0
  145. self.OwnerSlot = 0
  146. self.OwnerMoney = 0
  147. if app.ENABLE_CHEQUE_SYSTEM:
  148. self.OwnerCheque = 0
  149. self.OwnerAcceptLight = 0
  150. self.OwnerMoneyButton = 0
  151. if app.ENABLE_CHEQUE_SYSTEM:
  152. self.OwnerChequeButton = 0
  153. self.TargetSlot = 0
  154. self.TargetMoney = 0
  155. if app.ENABLE_CHEQUE_SYSTEM:
  156. self.TargetCheque = 0
  157. self.TargetAcceptLight = 0
  158. self.TitleName = 0
  159. self.ReadyButton = 0
  160. self.tooltipItem = 0
  161.  
  162. self.TargetName = 0
  163. self.Character_Name = 0
  164. self.TargetLevel = 0
  165. self.Character_Level = 0
  166. self.TargetGuild = 0
  167. self.CharacterGuild = 0
  168. self.TargetFriendIndicator = 0
  169. self.TargetRaceImage = 0
  170. self.TargetOverlay = 0
  171. self.OwnerRaceImage = 0
  172. self.OwnerOverlay = 0
  173. self.questionDialog = 0
  174. self.wndInventory = 0
  175. self.lockedItems = {i:(-1,-1) for i in range(exchange.EXCHANGE_ITEM_MAX_NUM)}
  176. self.textRenderer = None
  177.  
  178. def OpenDialog(self):
  179. # Reset the info box
  180. chat.ClearBox("$EXCHANGE_CHAT$")
  181. chat.CreateFloatingBox("$EXCHANGE_CHAT$")
  182. chat.SetBoxSize("$EXCHANGE_CHAT$", 370, 80)
  183. chat.SetRenderDownwards("$EXCHANGE_CHAT$", True)
  184.  
  185. targetVID = exchange.GetTargetVID()
  186.  
  187. self.TargetName.SetText(chr.GetNameByVID(targetVID))
  188. self.Character_Name.SetText(player.GetName())
  189. self.TargetLevel.SetText("Lv. "+str(exchange.GetLevelFromTarget()))
  190. self.Character_Level.SetText("Lv. "+str(exchange.GetLevelFromSelf()))
  191. if chr.GetGuildID(targetVID) != 0:
  192. self.TargetGuild.SetText(guild.GetGuildName(chr.GetGuildID(targetVID)))
  193. else:
  194. self.TargetGuild.SetText("")
  195. if chr.GetGuildID(player.GetMainCharacterIndex()) != 0:
  196. self.CharacterGuild.SetText(guild.GetGuildName(chr.GetGuildID(player.GetMainCharacterIndex())))
  197. else:
  198. self.CharacterGuild.SetText("")
  199.  
  200. #if messenger.IsFriendByName(chr.GetNameByVID(targetVID)):
  201. # self.TargetFriendIndicator.Show()
  202. #else:
  203. # self.TargetFriendIndicator.Hide()
  204.  
  205. # Race img for target
  206. try:
  207. race = chr.GetRaceByVID(targetVID)
  208. faceImageName = FACE_IMAGE_DICT[race]
  209.  
  210. try:
  211. self.TargetRaceImage.LoadImage(faceImageName)
  212. except:
  213. print "TradeWindow, could not load image for target: race=%d, faceImageName=%s" % (race, faceImageName)
  214. self.TargetRaceImage.Hide()
  215.  
  216. except KeyError:
  217. self.TargetRaceImage.Hide()
  218.  
  219. # Race image for owner
  220. try:
  221. race = chr.GetRaceByVID(player.GetMainCharacterIndex())
  222. faceImageName = FACE_IMAGE_DICT[race]
  223.  
  224. try:
  225. self.OwnerRaceImage.LoadImage(faceImageName)
  226. except:
  227. print "TradeWindow, could not load image for owner: race=%d, faceImageName=%s" % (race, faceImageName)
  228. self.OwnerRaceImage.Hide()
  229.  
  230. except KeyError:
  231. self.OwnerRaceImage.Hide()
  232.  
  233. self.Show()
  234.  
  235. (self.xStart, self.yStart, z) = player.GetMainCharacterPosition()
  236. self.interface.SetOnTopWindow(player.ON_TOP_WND_EXCHANGE)
  237. self.interface.RefreshMarkInventoryBag()
  238.  
  239. def CloseDialog(self):
  240. wndMgr.OnceIgnoreMouseLeftButtonUpEvent()
  241.  
  242. if 0 != self.tooltipItem:
  243. self.tooltipItem.HideToolTip()
  244.  
  245. self.dlgPickMoney.Close()
  246.  
  247. self.Hide()
  248. for exchangePos, (itemInvenPage, itemSlotPos) in self.lockedItems.items():
  249. if itemInvenPage == self.wndInventory.GetInventoryPageIndex():
  250. self.wndInventory.wndItem.SetCanMouseEventSlot(itemSlotPos)
  251.  
  252. self.lockedItems = {i:(-1,-1) for i in range(exchange.EXCHANGE_ITEM_MAX_NUM)}
  253. self.interface.SetOnTopWindow(player.ON_TOP_WND_NONE)
  254. self.interface.RefreshMarkInventoryBag()
  255.  
  256. def AppendInformation(self, unixTime, info, error = False):
  257. if not error:
  258. chatType = chat.WHISPER_TYPE_CHAT
  259. else:
  260. chatType = chat.WHISPER_TYPE_SYSTEM
  261.  
  262. time = datetime.fromtimestamp(unixTime).timetuple()
  263.  
  264. chat.AppendToBox(chatType, "$EXCHANGE_CHAT$", "["+strftime("%H:%M:%S", time) + "] "+info)
  265.  
  266. def SetItemToolTip(self, tooltipItem):
  267. self.tooltipItem = tooltipItem
  268.  
  269. def OpenPickMoneyDialog(self):
  270. if self.OwnerMoney.GetText() != "0" or self.OwnerCheque.GetText() != "0" :
  271. return
  272.  
  273. if app.ENABLE_CHEQUE_SYSTEM:
  274. if exchange.GetElkFromSelf() > 0 or exchange.GetChequeFromSelf() > 0:
  275. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANT_EDIT_MONEY)
  276. return
  277.  
  278. self.dlgPickMoney.Open(player.GetElk(), player.GetCheque())
  279. else:
  280. if exchange.GetElkFromSelf() > 0:
  281. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANT_EDIT_MONEY)
  282. return
  283.  
  284. self.dlgPickMoney.Open(player.GetElk())
  285.  
  286. def OnPickMoney(self, money, cheque):
  287. if app.ENABLE_CHEQUE_SYSTEM:
  288. if money > 0:
  289. net.SendExchangeElkAddPacket(money)
  290. if cheque > 0:
  291. net.SendExchangeChequeAddPacket(cheque)
  292. else:
  293. net.SendExchangeElkAddPacket(money)
  294.  
  295. def ReadyExchange(self):
  296. emptyslots = 0;
  297. emptyslots_self = 0;
  298. for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  299. itemVnum_self = exchange.GetItemVnumFromSelf(i)
  300. itemVnum = exchange.GetItemVnumFromTarget(i)
  301. if itemVnum == 0:
  302. emptyslots += 1
  303. if itemVnum_self == 0:
  304. emptyslots_self += 1
  305.  
  306. # if emptyslots_self != exchange.EXCHANGE_ITEM_MAX_NUM:
  307. # if emptyslots == exchange.EXCHANGE_ITEM_MAX_NUM and exchange.GetElkFromTarget() <= 10000:
  308. # self.questionDialog = uiCommon.QuestionDialog3()
  309. # self.questionDialog.SetText1(localeInfo.TRADE_FOR_NOTHING1)
  310. # self.questionDialog.SetText2(localeInfo.TRADE_FOR_NOTHING2)
  311. # self.questionDialog.SetText3(localeInfo.TRADE_FOR_NOTHING3)
  312. # self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.DoExchange))
  313. # self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
  314. # self.questionDialog.Open()
  315. # else:
  316. # self.DoExchange()
  317. # else:
  318. self.DoExchange()
  319.  
  320. def DoExchange(self):
  321. net.SendExchangeAcceptPacket()
  322. self.OnCloseQuestionDialog()
  323.  
  324. def OnCloseQuestionDialog(self):
  325. if not self.questionDialog:
  326. return
  327.  
  328. self.questionDialog.Close()
  329. self.questionDialog = None
  330. constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
  331.  
  332. def OnScroll(self):
  333. chat.SetBoxPosition("$EXCHANGE_CHAT$", 1 - self.scrollBar.GetPos())
  334.  
  335. def SelectOwnerEmptySlot(self, SlotIndex):
  336.  
  337. if False == mouseModule.mouseController.isAttached():
  338. return
  339.  
  340. if mouseModule.mouseController.IsAttachedMoney():
  341. net.SendExchangeElkAddPacket(long(mouseModule.mouseController.GetAttachedMoneyAmount()))
  342. else:
  343. attachedSlotType = mouseModule.mouseController.GetAttachedType()
  344. if (player.SLOT_TYPE_INVENTORY == attachedSlotType or player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedSlotType):
  345.  
  346. attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
  347. SrcSlotNumber = mouseModule.mouseController.GetRealAttachedSlotNumber()
  348. DstSlotNumber = SlotIndex
  349.  
  350. itemID = player.GetItemIndex(attachedInvenType, SrcSlotNumber)
  351. item.SelectItem(itemID)
  352.  
  353. if item.IsAntiFlag(item.ANTIFLAG_GIVE):
  354. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE)
  355. mouseModule.mouseController.DeattachObject()
  356. return
  357.  
  358. if app.ENABLE_SOULBIND_SYSTEM:
  359. if player.GetItemSealDate(attachedInvenType, SrcSlotNumber):
  360. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE_SEAL_ITEM)
  361. return
  362.  
  363. print "src:", SrcSlotNumber, ", dst:", DstSlotNumber
  364. net.SendExchangeItemAddPacket(attachedInvenType, SrcSlotNumber, DstSlotNumber)
  365. if app.UK_ENABLE_SPECIAL_STORAGE:
  366. if player.SLOT_TYPE_UPGRADE_INVENTORY == attachedSlotType or\
  367. player.SLOT_TYPE_BOOK_INVENTORY == attachedSlotType or\
  368. player.SLOT_TYPE_STONE_INVENTORY == attachedSlotType or\
  369. player.SLOT_TYPE_ATTR_INVENTORY == attachedSlotType or\
  370. player.SLOT_TYPE_FLOWER_INVENTORY == attachedSlotType or\
  371. player.SLOT_TYPE_BLEND_INVENTORY == attachedSlotType:
  372. attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
  373. SrcSlotNumber = mouseModule.mouseController.GetAttachedSlotNumber()
  374. DstSlotNumber = SlotIndex
  375.  
  376. itemID = player.GetItemIndex(attachedSlotType, SrcSlotNumber)
  377. item.SelectItem(itemID)
  378.  
  379. if item.IsAntiFlag(item.ANTIFLAG_GIVE):
  380. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE)
  381. mouseModule.mouseController.DeattachObject()
  382. return
  383.  
  384. if app.ENABLE_SOULBIND_SYSTEM:
  385. if player.GetItemSealDate(attachedInvenType, SrcSlotNumber):
  386. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE_SEAL_ITEM)
  387. return
  388.  
  389. net.SendExchangeItemAddPacket(attachedInvenType, SrcSlotNumber, DstSlotNumber)
  390.  
  391. mouseModule.mouseController.DeattachObject()
  392.  
  393. def RightClickItemSlot(self, SlotIndex):
  394. print "Requesting removal of", SlotIndex
  395. net.SendExchangeItemDelPacket(SlotIndex)
  396. self.lockedItems[SlotIndex] = (-1, -1)
  397.  
  398. def SelectOwnerItemSlot(self, SlotIndex):
  399. print "SelectOwnerItemSlot: ",SlotIndex
  400. if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex():
  401. money = mouseModule.mouseController.GetAttachedItemCount()
  402. net.SendExchangeElkAddPacket(long(money))
  403.  
  404. def HighlightSlots(self, isSelf):
  405. if isSelf:
  406. slotWindow = self.OwnerSlot
  407. getItemVnumFunc = exchange.GetItemVnumFromSelf
  408. else:
  409. slotWindow = self.TargetSlot
  410. getItemVnumFunc = exchange.GetItemVnumFromTarget
  411.  
  412. for slotIndex in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  413. itemVnum = getItemVnumFunc(slotIndex)
  414. if itemVnum < 1:
  415. continue
  416.  
  417. item.SelectItem(itemVnum)
  418. itemType = item.GetItemType()
  419. if itemType != item.ITEM_TYPE_WEAPON and itemType != item.ITEM_TYPE_ARMOR:
  420. continue
  421.  
  422. itemName = item.GetItemName()
  423. _, itemHeight = item.GetItemSize()
  424.  
  425. for plus in xrange(6, 9+1):
  426. if "+"+str(plus) in itemName or "+ "+str(plus) in itemName:
  427. print "Found",plus,"in the item name"
  428.  
  429. for row in xrange(0, itemHeight):
  430. print "Setting bg for: "+str(slotIndex + row*6)
  431. slotWindow.SetSlotHighlightedGreeen(slotIndex + row*6,0)
  432.  
  433. break # Outside the plus loop
  434.  
  435. #slotWindow.ClearBackgroundImage()
  436.  
  437. def RefreshOwnerSlot(self):
  438. for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  439. itemVnum = exchange.GetItemVnumFromSelf(i)
  440. itemCount = exchange.GetItemCountFromSelf(i)
  441.  
  442. if itemCount == 1:
  443. itemCount = 0
  444.  
  445. self.OwnerSlot.SetItemSlot(i, itemVnum, itemCount)
  446. if app.ENABLE_CHANGELOOK_SYSTEM:
  447. itemTransmutedVnum = exchange.GetItemTransmutation(i, True)
  448. if itemTransmutedVnum:
  449. self.OwnerSlot.DisableCoverButton(i)
  450. else:
  451. self.OwnerSlot.EnableCoverButton(i)
  452.  
  453. # See if any item needs highlighting
  454. self.HighlightSlots(True)
  455. self.OwnerSlot.RefreshSlot()
  456.  
  457. def RefreshTargetSlot(self):
  458. for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  459. itemVnum = exchange.GetItemVnumFromTarget(i)
  460. itemCount = exchange.GetItemCountFromTarget(i)
  461. if itemCount == 1:
  462. itemCount = 0
  463.  
  464. self.TargetSlot.SetItemSlot(i, itemVnum, itemCount)
  465. if app.ENABLE_CHANGELOOK_SYSTEM:
  466. itemTransmutedVnum = exchange.GetItemTransmutation(i, False)
  467. if itemTransmutedVnum:
  468. self.TargetSlot.DisableCoverButton(i)
  469. else:
  470. self.TargetSlot.EnableCoverButton(i)
  471.  
  472. # See if the any item needs highlighting
  473. self.HighlightSlots(False)
  474. self.TargetSlot.RefreshSlot()
  475.  
  476. def Refresh(self):
  477. self.RefreshOwnerSlot()
  478. self.RefreshTargetSlot()
  479. self.RefreshLockedSlot()
  480.  
  481. self.OwnerMoney.SetText(localeInfo.NumberToString(exchange.GetElkFromSelf()))
  482. self.TargetMoney.SetText(localeInfo.NumberToString(exchange.GetElkFromTarget()))
  483. if app.ENABLE_CHEQUE_SYSTEM:
  484. self.OwnerCheque.SetText(localeInfo.NumberToString(exchange.GetChequeFromSelf()))
  485. self.TargetCheque.SetText(localeInfo.NumberToString(exchange.GetChequeFromTarget()))
  486.  
  487. if exchange.GetAcceptFromSelf():
  488. self.OwnerOverlay.Show()
  489.  
  490. self.ReadyButton.SetUpVisual(BASE_VISUALS_ROUTE+"player_ready_button.tga");
  491. self.ReadyButton.SetDownVisual(BASE_VISUALS_ROUTE+"player_ready_button.tga");
  492. self.ReadyButton.SetOverVisual(BASE_VISUALS_ROUTE+"player_ready_button.tga");
  493. else:
  494. self.OwnerOverlay.Hide()
  495.  
  496. if exchange.GetAcceptFromTarget():
  497. self.TargetOverlay.Show()
  498.  
  499. self.ReadyButton.SetUpVisual(BASE_VISUALS_ROUTE+"target_ready_button.tga");
  500. self.ReadyButton.SetDownVisual(BASE_VISUALS_ROUTE+"target_ready_button.tga");
  501. self.ReadyButton.SetOverVisual(BASE_VISUALS_ROUTE+"target_ready_button.tga");
  502. else:
  503. self.TargetOverlay.Hide()
  504.  
  505. if not exchange.GetAcceptFromSelf() and not exchange.GetAcceptFromTarget():
  506. self.ReadyButton.SetUpVisual(BASE_VISUALS_ROUTE+"none_ready_button.tga");
  507. self.ReadyButton.SetDownVisual(BASE_VISUALS_ROUTE+"none_ready_button.tga");
  508. self.ReadyButton.SetOverVisual(BASE_VISUALS_ROUTE+"none_ready_button.tga");
  509.  
  510. def OverInOwnerItem(self, slotIndex):
  511.  
  512. if 0 != self.tooltipItem:
  513. self.tooltipItem.SetExchangeOwnerItem(slotIndex)
  514.  
  515. def OverInTargetItem(self, slotIndex):
  516.  
  517. if 0 != self.tooltipItem:
  518. self.tooltipItem.SetExchangeTargetItem(slotIndex)
  519.  
  520. def OverOutItem(self):
  521.  
  522. if 0 != self.tooltipItem:
  523. self.tooltipItem.HideToolTip()
  524.  
  525. def OnTop(self):
  526. if self.tooltipItem:
  527. self.tooltipItem.SetTop()
  528.  
  529. def BindInterface(self, interface):
  530. self.interface = interface
  531.  
  532. def OnMouseLeftButtonDown(self):
  533. hyperlink = ui.GetHyperlink()
  534. if hyperlink:
  535. self.interface.MakeHyperlinkTooltip(hyperlink)
  536.  
  537. def OnUpdate(self):
  538. USE_EXCHANGE_LIMIT_RANGE = 1000
  539.  
  540. (x, y, z) = player.GetMainCharacterPosition()
  541. if abs(x - self.xStart) > USE_EXCHANGE_LIMIT_RANGE or abs(y - self.yStart) > USE_EXCHANGE_LIMIT_RANGE:
  542. (self.xStart, self.yStart, z) = player.GetMainCharacterPosition()
  543. net.SendExchangeExitPacket()
  544.  
  545. def CantTradableItem(self, destSlotIndex, srcSlotIndex):
  546. if True == exchange.GetAcceptFromTarget():
  547. return
  548.  
  549. itemInvenPage = srcSlotIndex / player.INVENTORY_PAGE_SIZE
  550. localSlotPos = srcSlotIndex - (itemInvenPage * player.INVENTORY_PAGE_SIZE)
  551. self.lockedItems[destSlotIndex] = (itemInvenPage, localSlotPos)
  552.  
  553. if self.wndInventory.GetInventoryPageIndex() == itemInvenPage and self.IsShow():
  554. self.wndInventory.wndItem.SetCantMouseEventSlot(localSlotPos)
  555.  
  556. def RefreshLockedSlot(self):
  557. if self.wndInventory:
  558. for exchangePos, (itemInvenPage, itemSlotPos) in self.lockedItems.items():
  559. if self.wndInventory.GetInventoryPageIndex() == itemInvenPage:
  560. self.wndInventory.wndItem.SetCantMouseEventSlot(itemSlotPos)
  561.  
  562. self.wndInventory.wndItem.RefreshSlot()
  563.  
  564. def SetInven(self, wndInventory):
  565. from _weakref import proxy
  566. self.wndInventory = proxy(wndInventory)
  567.  
  568. if app.ENABLE_FAST_ATTACH_ITEMS_SYSTEM:
  569. def __GetCurrentItemGrid(self):
  570. itemGrid = [False for cell in xrange(exchange.EXCHANGE_ITEM_MAX_NUM)]
  571.  
  572. for slot in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  573. itemVnum = exchange.GetItemVnumFromSelf(slot)
  574. if itemVnum <> 0:
  575. item.SelectItem(itemVnum)
  576. (w, h) = item.GetItemSize()
  577. for i in xrange(h):
  578. itemGrid[slot + i * 6] = True
  579.  
  580. return itemGrid
  581.  
  582. def __FindEmptyCellForSize(self, itemGrid, size):
  583. for slot in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  584. if itemGrid[slot] == False:
  585. possible = True
  586. for i in xrange(size):
  587. p = slot + 6 * i
  588. try:
  589. if itemGrid[p] == True:
  590. possible = False
  591. break
  592. except IndexError:
  593. possible = False
  594. break
  595.  
  596. if possible:
  597. return slot
  598.  
  599. return -1
  600.  
  601. def AttachItemFromInventory(self, slotWindow, slotIndex):
  602. attachedItemID = player.GetItemIndex(slotWindow, slotIndex)
  603. item.SelectItem(attachedItemID)
  604. if item.IsAntiFlag(item.ITEM_ANTIFLAG_GIVE):
  605. return False
  606.  
  607. itemGrid = self.__GetCurrentItemGrid()
  608.  
  609. item.SelectItem(attachedItemID)
  610. emptySlot = self.__FindEmptyCellForSize(itemGrid, item.GetItemSize()[1])
  611. if emptySlot == -1 or item.GetItemType() == item.ITEM_TYPE_ELK:
  612. return False
  613.  
  614. net.SendExchangeItemAddPacket(slotWindow, slotIndex, emptySlot)
  615. return True
  616.  
  617. else:
  618. class ExchangeDialog(ui.ScriptWindow):
  619.  
  620. def __init__(self):
  621. ui.ScriptWindow.__init__(self)
  622. self.TitleName = 0
  623. self.tooltipItem = 0
  624. self.xStart = 0
  625. self.yStart = 0
  626.  
  627. def __del__(self):
  628. ui.ScriptWindow.__del__(self)
  629.  
  630. def LoadDialog(self):
  631. PythonScriptLoader = ui.PythonScriptLoader()
  632. PythonScriptLoader.LoadScriptFile(self, "UIScript/exchangedialog.py")
  633.  
  634. ## Owner
  635. self.OwnerSlot = self.GetChild("Owner_Slot")
  636. self.OwnerSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectOwnerEmptySlot))
  637. self.OwnerSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectOwnerItemSlot))
  638. self.OwnerSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInOwnerItem))
  639. self.OwnerSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  640. self.OwnerMoney = self.GetChild("Owner_Money_Value")
  641. self.OwnerAcceptLight = self.GetChild("Owner_Accept_Light")
  642. self.OwnerAcceptLight.Disable()
  643. self.OwnerMoneyButton = self.GetChild("Owner_Money")
  644. self.OwnerMoneyButton.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog))
  645.  
  646. ## Target
  647. self.TargetSlot = self.GetChild("Target_Slot")
  648. self.TargetSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInTargetItem))
  649. self.TargetSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  650. self.TargetMoney = self.GetChild("Target_Money_Value")
  651. self.TargetAcceptLight = self.GetChild("Target_Accept_Light")
  652. self.TargetAcceptLight.Disable()
  653.  
  654. ## PickMoneyDialog
  655. dlgPickMoney = uiPickMoney.PickMoneyDialog()
  656. dlgPickMoney.LoadDialog()
  657. dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
  658. dlgPickMoney.SetTitleName(localeInfo.EXCHANGE_MONEY)
  659. if app.ENABLE_FULL_YANG_SYSTEM:
  660. dlgPickMoney.SetMax(10)
  661. else:
  662. dlgPickMoney.SetMax(7)
  663. dlgPickMoney.Hide()
  664. self.dlgPickMoney = dlgPickMoney
  665.  
  666. ## Button
  667. self.AcceptButton = self.GetChild("Owner_Accept_Button")
  668. self.AcceptButton.SetToggleDownEvent(ui.__mem_func__(self.AcceptExchange))
  669.  
  670. self.TitleName = self.GetChild("TitleName")
  671. self.GetChild("TitleBar").SetCloseEvent(net.SendExchangeExitPacket)
  672.  
  673. def Destroy(self):
  674. print "---------------------------------------------------------------------------- DESTROY EXCHANGE"
  675. self.ClearDictionary()
  676. self.dlgPickMoney.Destroy()
  677. self.dlgPickMoney = 0
  678. self.OwnerSlot = 0
  679. self.OwnerMoney = 0
  680. self.OwnerAcceptLight = 0
  681. self.OwnerMoneyButton = 0
  682. self.TargetSlot = 0
  683. self.TargetMoney = 0
  684. self.TargetAcceptLight = 0
  685. self.TitleName = 0
  686. self.AcceptButton = 0
  687. self.tooltipItem = 0
  688.  
  689. def OpenDialog(self):
  690. self.TitleName.SetText(localeInfo.EXCHANGE_TITLE_LEVEL % (exchange.GetNameFromTarget(), exchange.GetLevelFromTarget()))
  691. self.AcceptButton.Enable()
  692. self.AcceptButton.SetUp()
  693. self.Show()
  694.  
  695. (self.xStart, self.yStart, z) = player.GetMainCharacterPosition()
  696.  
  697. def CloseDialog(self):
  698. wndMgr.OnceIgnoreMouseLeftButtonUpEvent()
  699.  
  700. if 0 != self.tooltipItem:
  701. self.tooltipItem.HideToolTip()
  702.  
  703. self.dlgPickMoney.Close()
  704. self.Hide()
  705.  
  706. def SetItemToolTip(self, tooltipItem):
  707. self.tooltipItem = tooltipItem
  708.  
  709. def OpenPickMoneyDialog(self):
  710.  
  711. if exchange.GetElkFromSelf() > 0:
  712. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANT_EDIT_MONEY)
  713. return
  714.  
  715. self.dlgPickMoney.Open(player.GetElk())
  716.  
  717. def OnPickMoney(self, money):
  718. net.SendExchangeElkAddPacket(money)
  719.  
  720. def AcceptExchange(self):
  721. net.SendExchangeAcceptPacket()
  722. self.AcceptButton.Disable()
  723.  
  724. def SelectOwnerEmptySlot(self, SlotIndex):
  725.  
  726. if False == mouseModule.mouseController.isAttached():
  727. return
  728.  
  729. if mouseModule.mouseController.IsAttachedMoney():
  730. net.SendExchangeElkAddPacket(mouseModule.mouseController.GetAttachedMoneyAmount())
  731. else:
  732. attachedSlotType = mouseModule.mouseController.GetAttachedType()
  733. if (player.SLOT_TYPE_INVENTORY == attachedSlotType
  734. or player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedSlotType):
  735.  
  736. attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
  737. SrcSlotNumber = mouseModule.mouseController.GetAttachedSlotNumber()
  738. DstSlotNumber = SlotIndex
  739.  
  740. itemID = player.GetItemIndex(attachedInvenType, SrcSlotNumber)
  741. item.SelectItem(itemID)
  742.  
  743. if item.IsAntiFlag(item.ANTIFLAG_GIVE):
  744. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE)
  745. mouseModule.mouseController.DeattachObject()
  746. return
  747.  
  748. if app.ENABLE_SOULBIND_SYSTEM:
  749. if player.GetItemSealDate(attachedInvenType, SrcSlotNumber):
  750. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE_SEAL_ITEM)
  751. return
  752.  
  753. net.SendExchangeItemAddPacket(attachedInvenType, SrcSlotNumber, DstSlotNumber)
  754.  
  755. mouseModule.mouseController.DeattachObject()
  756.  
  757. def SelectOwnerItemSlot(self, SlotIndex):
  758.  
  759. if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex():
  760.  
  761. money = mouseModule.mouseController.GetAttachedItemCount()
  762. net.SendExchangeElkAddPacket(money)
  763.  
  764. def RefreshOwnerSlot(self):
  765. for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  766. itemIndex = exchange.GetItemVnumFromSelf(i)
  767. itemCount = exchange.GetItemCountFromSelf(i)
  768. if 1 == itemCount:
  769. itemCount = 0
  770. self.OwnerSlot.SetItemSlot(i, itemIndex, itemCount)
  771. self.OwnerSlot.RefreshSlot()
  772.  
  773. def RefreshTargetSlot(self):
  774. for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  775. itemIndex = exchange.GetItemVnumFromTarget(i)
  776. itemCount = exchange.GetItemCountFromTarget(i)
  777. if 1 == itemCount:
  778. itemCount = 0
  779. self.TargetSlot.SetItemSlot(i, itemIndex, itemCount)
  780. self.TargetSlot.RefreshSlot()
  781.  
  782. def Refresh(self):
  783.  
  784. self.RefreshOwnerSlot()
  785. self.RefreshTargetSlot()
  786.  
  787. self.OwnerMoney.SetText(localeInfo.NumberToMoneyString(exchange.GetElkFromSelf()))
  788. self.TargetMoney.SetText(localeInfo.NumberToMoneyString(exchange.GetElkFromTarget()))
  789.  
  790. if True == exchange.GetAcceptFromSelf():
  791. self.OwnerAcceptLight.Down()
  792. else:
  793. self.AcceptButton.Enable()
  794. self.AcceptButton.SetUp()
  795. self.OwnerAcceptLight.SetUp()
  796.  
  797. if True == exchange.GetAcceptFromTarget():
  798. self.TargetAcceptLight.Down()
  799. else:
  800. self.TargetAcceptLight.SetUp()
  801.  
  802. def OverInOwnerItem(self, slotIndex):
  803.  
  804. if 0 != self.tooltipItem:
  805. self.tooltipItem.SetExchangeOwnerItem(slotIndex)
  806.  
  807. def OverInTargetItem(self, slotIndex):
  808.  
  809. if 0 != self.tooltipItem:
  810. self.tooltipItem.SetExchangeTargetItem(slotIndex)
  811.  
  812. def OverOutItem(self):
  813.  
  814. if 0 != self.tooltipItem:
  815. self.tooltipItem.HideToolTip()
  816.  
  817. def OnTop(self):
  818. self.tooltipItem.SetTop()
  819.  
  820. def OnUpdate(self):
  821.  
  822. USE_EXCHANGE_LIMIT_RANGE = 1000
  823.  
  824. (x, y, z) = player.GetMainCharacterPosition()
  825. if abs(x - self.xStart) > USE_EXCHANGE_LIMIT_RANGE or abs(y - self.yStart) > USE_EXCHANGE_LIMIT_RANGE:
  826. (self.xStart, self.yStart, z) = player.GetMainCharacterPosition()
  827. net.SendExchangeExitPacket()
  828.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement