martysama0134

uiExchange.py (no chat box)

Jun 13th, 2021
693
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.             pass
  258.             #if not error:
  259.             #   chatType = chat.WHISPER_TYPE_CHAT
  260.             #else:
  261.             #   chatType = chat.WHISPER_TYPE_SYSTEM
  262.  
  263.             #time = datetime.fromtimestamp(unixTime).timetuple()
  264.  
  265.             #chat.AppendToBox(chatType, "$EXCHANGE_CHAT$", "["+strftime("%H:%M:%S", time) + "] "+info)
  266.  
  267.         def SetItemToolTip(self, tooltipItem):
  268.             self.tooltipItem = tooltipItem
  269.  
  270.         def OpenPickMoneyDialog(self):
  271.             if self.OwnerMoney.GetText() != "0" or self.OwnerCheque.GetText() != "0" :
  272.                 return
  273.  
  274.             if app.ENABLE_CHEQUE_SYSTEM:
  275.                 if exchange.GetElkFromSelf() > 0 or exchange.GetChequeFromSelf() > 0:
  276.                     chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANT_EDIT_MONEY)
  277.                     return
  278.  
  279.                 self.dlgPickMoney.Open(player.GetElk(), player.GetCheque())
  280.             else:
  281.                 if exchange.GetElkFromSelf() > 0:
  282.                     chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANT_EDIT_MONEY)
  283.                     return
  284.  
  285.                 self.dlgPickMoney.Open(player.GetElk())
  286.  
  287.         def OnPickMoney(self, money, cheque):
  288.             if app.ENABLE_CHEQUE_SYSTEM:
  289.                 if money > 0:
  290.                     net.SendExchangeElkAddPacket(money)
  291.                 if cheque > 0:
  292.                     net.SendExchangeChequeAddPacket(cheque)
  293.             else:
  294.                 net.SendExchangeElkAddPacket(money)
  295.  
  296.         def ReadyExchange(self):
  297.             emptyslots = 0;
  298.             emptyslots_self = 0;
  299.             for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  300.                 itemVnum_self = exchange.GetItemVnumFromSelf(i)
  301.                 itemVnum = exchange.GetItemVnumFromTarget(i)
  302.                 if itemVnum == 0:
  303.                     emptyslots += 1
  304.                 if itemVnum_self == 0:
  305.                     emptyslots_self += 1
  306.  
  307.             # if emptyslots_self != exchange.EXCHANGE_ITEM_MAX_NUM:
  308.                 # if emptyslots == exchange.EXCHANGE_ITEM_MAX_NUM and exchange.GetElkFromTarget() <= 10000:
  309.                     # self.questionDialog = uiCommon.QuestionDialog3()
  310.                     # self.questionDialog.SetText1(localeInfo.TRADE_FOR_NOTHING1)
  311.                     # self.questionDialog.SetText2(localeInfo.TRADE_FOR_NOTHING2)
  312.                     # self.questionDialog.SetText3(localeInfo.TRADE_FOR_NOTHING3)
  313.                     # self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.DoExchange))
  314.                     # self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
  315.                     # self.questionDialog.Open()
  316.                 # else:
  317.                     # self.DoExchange()
  318.             # else:
  319.             self.DoExchange()
  320.  
  321.         def DoExchange(self):
  322.             net.SendExchangeAcceptPacket()
  323.             self.OnCloseQuestionDialog()
  324.  
  325.         def OnCloseQuestionDialog(self):
  326.             if not self.questionDialog:
  327.                 return
  328.            
  329.             self.questionDialog.Close()
  330.             self.questionDialog = None
  331.             constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
  332.            
  333.         def OnScroll(self):
  334.             pass
  335.             #chat.SetBoxPosition("$EXCHANGE_CHAT$", 1 - self.scrollBar.GetPos())
  336.  
  337.         def SelectOwnerEmptySlot(self, SlotIndex):
  338.  
  339.             if False == mouseModule.mouseController.isAttached():
  340.                 return
  341.  
  342.             if mouseModule.mouseController.IsAttachedMoney():
  343.                 net.SendExchangeElkAddPacket(long(mouseModule.mouseController.GetAttachedMoneyAmount()))
  344.             else:
  345.                 attachedSlotType = mouseModule.mouseController.GetAttachedType()
  346.                 if (player.SLOT_TYPE_INVENTORY == attachedSlotType or player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedSlotType):
  347.  
  348.                     attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
  349.                     SrcSlotNumber = mouseModule.mouseController.GetRealAttachedSlotNumber()
  350.                     DstSlotNumber = SlotIndex
  351.  
  352.                     itemID = player.GetItemIndex(attachedInvenType, SrcSlotNumber)
  353.                     item.SelectItem(itemID)
  354.  
  355.                     if item.IsAntiFlag(item.ANTIFLAG_GIVE):
  356.                         chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE)
  357.                         mouseModule.mouseController.DeattachObject()
  358.                         return
  359.  
  360.                     if app.ENABLE_SOULBIND_SYSTEM:
  361.                         if player.GetItemSealDate(attachedInvenType, SrcSlotNumber):
  362.                             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE_SEAL_ITEM)
  363.                             return
  364.  
  365.                     print "src:", SrcSlotNumber, ", dst:", DstSlotNumber
  366.                     net.SendExchangeItemAddPacket(attachedInvenType, SrcSlotNumber, DstSlotNumber)
  367.                 if app.UK_ENABLE_SPECIAL_STORAGE:
  368.                     if player.SLOT_TYPE_UPGRADE_INVENTORY == attachedSlotType or\
  369.                         player.SLOT_TYPE_BOOK_INVENTORY == attachedSlotType or\
  370.                         player.SLOT_TYPE_STONE_INVENTORY == attachedSlotType or\
  371.                         player.SLOT_TYPE_ATTR_INVENTORY == attachedSlotType or\
  372.                         player.SLOT_TYPE_FLOWER_INVENTORY == attachedSlotType or\
  373.                         player.SLOT_TYPE_BLEND_INVENTORY == attachedSlotType:
  374.                         attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
  375.                         SrcSlotNumber = mouseModule.mouseController.GetAttachedSlotNumber()
  376.                         DstSlotNumber = SlotIndex
  377.        
  378.                         itemID = player.GetItemIndex(attachedSlotType, SrcSlotNumber)
  379.                         item.SelectItem(itemID)
  380.                        
  381.                         if item.IsAntiFlag(item.ANTIFLAG_GIVE):
  382.                             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE)
  383.                             mouseModule.mouseController.DeattachObject()
  384.                             return
  385.                            
  386.                         if app.ENABLE_SOULBIND_SYSTEM:
  387.                             if player.GetItemSealDate(attachedInvenType, SrcSlotNumber):
  388.                                 chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE_SEAL_ITEM)
  389.                                 return
  390.                            
  391.                         net.SendExchangeItemAddPacket(attachedInvenType, SrcSlotNumber, DstSlotNumber)
  392.  
  393.             mouseModule.mouseController.DeattachObject()
  394.  
  395.         def RightClickItemSlot(self, SlotIndex):
  396.             print "Requesting removal of", SlotIndex
  397.             net.SendExchangeItemDelPacket(SlotIndex)
  398.             self.lockedItems[SlotIndex] = (-1, -1)
  399.  
  400.         def SelectOwnerItemSlot(self, SlotIndex):
  401.             print "SelectOwnerItemSlot: ",SlotIndex
  402.             if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex():
  403.                 money = mouseModule.mouseController.GetAttachedItemCount()
  404.                 net.SendExchangeElkAddPacket(long(money))
  405.  
  406.         def HighlightSlots(self, isSelf):
  407.             if isSelf:
  408.                 slotWindow = self.OwnerSlot
  409.                 getItemVnumFunc = exchange.GetItemVnumFromSelf
  410.             else:
  411.                 slotWindow = self.TargetSlot
  412.                 getItemVnumFunc = exchange.GetItemVnumFromTarget
  413.  
  414.             for slotIndex in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  415.                 itemVnum = getItemVnumFunc(slotIndex)
  416.                 if itemVnum < 1:
  417.                     continue
  418.  
  419.                 item.SelectItem(itemVnum)
  420.                 itemType = item.GetItemType()
  421.                 if itemType != item.ITEM_TYPE_WEAPON and itemType != item.ITEM_TYPE_ARMOR:     
  422.                     continue
  423.  
  424.                 itemName = item.GetItemName()
  425.                 _, itemHeight = item.GetItemSize()
  426.  
  427.                 for plus in xrange(6, 9+1):
  428.                     if "+"+str(plus) in itemName or "+ "+str(plus) in itemName:
  429.                         print "Found",plus,"in the item name"
  430.  
  431.                         for row in xrange(0, itemHeight):
  432.                             print "Setting bg for: "+str(slotIndex + row*6)
  433.                             slotWindow.SetSlotHighlightedGreeen(slotIndex + row*6,0)
  434.  
  435.                         break # Outside the plus loop
  436.  
  437.             #slotWindow.ClearBackgroundImage()
  438.  
  439.         def RefreshOwnerSlot(self):
  440.             for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  441.                 itemVnum = exchange.GetItemVnumFromSelf(i)
  442.                 itemCount = exchange.GetItemCountFromSelf(i)
  443.  
  444.                 if itemCount == 1:
  445.                     itemCount = 0
  446.  
  447.                 self.OwnerSlot.SetItemSlot(i, itemVnum, itemCount)
  448.                 if app.ENABLE_CHANGELOOK_SYSTEM:
  449.                     itemTransmutedVnum = exchange.GetItemTransmutation(i, True)
  450.                     if itemTransmutedVnum:
  451.                         self.OwnerSlot.DisableCoverButton(i)
  452.                     else:
  453.                         self.OwnerSlot.EnableCoverButton(i)
  454.  
  455.             # See if any item needs highlighting
  456.             self.HighlightSlots(True)
  457.             self.OwnerSlot.RefreshSlot()
  458.  
  459.         def RefreshTargetSlot(self):
  460.             for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  461.                 itemVnum = exchange.GetItemVnumFromTarget(i)
  462.                 itemCount = exchange.GetItemCountFromTarget(i)
  463.                 if itemCount == 1:
  464.                     itemCount = 0
  465.  
  466.                 self.TargetSlot.SetItemSlot(i, itemVnum, itemCount)    
  467.                 if app.ENABLE_CHANGELOOK_SYSTEM:
  468.                     itemTransmutedVnum = exchange.GetItemTransmutation(i, False)
  469.                     if itemTransmutedVnum:
  470.                         self.TargetSlot.DisableCoverButton(i)
  471.                     else:
  472.                         self.TargetSlot.EnableCoverButton(i)
  473.                
  474.             # See if the any item needs highlighting
  475.             self.HighlightSlots(False)
  476.             self.TargetSlot.RefreshSlot()
  477.  
  478.         def Refresh(self):
  479.             self.RefreshOwnerSlot()
  480.             self.RefreshTargetSlot()
  481.             self.RefreshLockedSlot()
  482.  
  483.             self.OwnerMoney.SetText(localeInfo.NumberToString(exchange.GetElkFromSelf()))
  484.             self.TargetMoney.SetText(localeInfo.NumberToString(exchange.GetElkFromTarget()))
  485.             if app.ENABLE_CHEQUE_SYSTEM:
  486.                 self.OwnerCheque.SetText(localeInfo.NumberToString(exchange.GetChequeFromSelf()))
  487.                 self.TargetCheque.SetText(localeInfo.NumberToString(exchange.GetChequeFromTarget()))
  488.  
  489.             if exchange.GetAcceptFromSelf():
  490.                 self.OwnerOverlay.Show()
  491.  
  492.                 self.ReadyButton.SetUpVisual(BASE_VISUALS_ROUTE+"player_ready_button.tga");
  493.                 self.ReadyButton.SetDownVisual(BASE_VISUALS_ROUTE+"player_ready_button.tga");
  494.                 self.ReadyButton.SetOverVisual(BASE_VISUALS_ROUTE+"player_ready_button.tga");
  495.             else:
  496.                 self.OwnerOverlay.Hide()
  497.  
  498.             if exchange.GetAcceptFromTarget():
  499.                 self.TargetOverlay.Show()
  500.  
  501.                 self.ReadyButton.SetUpVisual(BASE_VISUALS_ROUTE+"target_ready_button.tga");
  502.                 self.ReadyButton.SetDownVisual(BASE_VISUALS_ROUTE+"target_ready_button.tga");
  503.                 self.ReadyButton.SetOverVisual(BASE_VISUALS_ROUTE+"target_ready_button.tga");
  504.             else:
  505.                 self.TargetOverlay.Hide()
  506.  
  507.             if not exchange.GetAcceptFromSelf() and not exchange.GetAcceptFromTarget():
  508.                 self.ReadyButton.SetUpVisual(BASE_VISUALS_ROUTE+"none_ready_button.tga");
  509.                 self.ReadyButton.SetDownVisual(BASE_VISUALS_ROUTE+"none_ready_button.tga");
  510.                 self.ReadyButton.SetOverVisual(BASE_VISUALS_ROUTE+"none_ready_button.tga");
  511.  
  512.         def OverInOwnerItem(self, slotIndex):
  513.  
  514.             if 0 != self.tooltipItem:
  515.                 self.tooltipItem.SetExchangeOwnerItem(slotIndex)
  516.  
  517.         def OverInTargetItem(self, slotIndex):
  518.  
  519.             if 0 != self.tooltipItem:
  520.                 self.tooltipItem.SetExchangeTargetItem(slotIndex)
  521.  
  522.         def OverOutItem(self):
  523.  
  524.             if 0 != self.tooltipItem:
  525.                 self.tooltipItem.HideToolTip()
  526.                
  527.         def OnTop(self):
  528.             if self.tooltipItem:
  529.                 self.tooltipItem.SetTop()
  530.            
  531.         def BindInterface(self, interface):
  532.             self.interface = interface
  533.  
  534.         def OnMouseLeftButtonDown(self):
  535.             hyperlink = ui.GetHyperlink()
  536.             if hyperlink:
  537.                 self.interface.MakeHyperlinkTooltip(hyperlink)
  538.  
  539.         def OnUpdate(self):
  540.             USE_EXCHANGE_LIMIT_RANGE = 1000
  541.  
  542.             (x, y, z) = player.GetMainCharacterPosition()
  543.             if abs(x - self.xStart) > USE_EXCHANGE_LIMIT_RANGE or abs(y - self.yStart) > USE_EXCHANGE_LIMIT_RANGE:
  544.                 (self.xStart, self.yStart, z) = player.GetMainCharacterPosition()
  545.                 net.SendExchangeExitPacket()
  546.                
  547.         def CantTradableItem(self, destSlotIndex, srcSlotIndex):
  548.             if True == exchange.GetAcceptFromTarget():
  549.                 return
  550.  
  551.             itemInvenPage = srcSlotIndex / player.INVENTORY_PAGE_SIZE
  552.             localSlotPos = srcSlotIndex - (itemInvenPage * player.INVENTORY_PAGE_SIZE)
  553.             self.lockedItems[destSlotIndex] = (itemInvenPage, localSlotPos)
  554.  
  555.             if self.wndInventory.GetInventoryPageIndex() == itemInvenPage and self.IsShow():
  556.                 self.wndInventory.wndItem.SetCantMouseEventSlot(localSlotPos)
  557.  
  558.         def RefreshLockedSlot(self):
  559.             if self.wndInventory:
  560.                 for exchangePos, (itemInvenPage, itemSlotPos) in self.lockedItems.items():
  561.                     if self.wndInventory.GetInventoryPageIndex() == itemInvenPage:
  562.                         self.wndInventory.wndItem.SetCantMouseEventSlot(itemSlotPos)
  563.  
  564.                 self.wndInventory.wndItem.RefreshSlot()
  565.  
  566.         def SetInven(self, wndInventory):
  567.             from _weakref import proxy
  568.             self.wndInventory = proxy(wndInventory)
  569.  
  570.         if app.ENABLE_FAST_ATTACH_ITEMS_SYSTEM:
  571.             def __GetCurrentItemGrid(self):
  572.                 itemGrid = [False for cell in xrange(exchange.EXCHANGE_ITEM_MAX_NUM)]
  573.  
  574.                 for slot in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  575.                     itemVnum = exchange.GetItemVnumFromSelf(slot)
  576.                     if itemVnum <> 0:
  577.                         item.SelectItem(itemVnum)
  578.                         (w, h) = item.GetItemSize()
  579.                         for i in xrange(h):
  580.                             itemGrid[slot + i * 6] = True
  581.  
  582.                 return itemGrid
  583.  
  584.             def __FindEmptyCellForSize(self, itemGrid, size):
  585.                 for slot in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  586.                     if itemGrid[slot] == False:
  587.                         possible = True
  588.                         for i in xrange(size):
  589.                             p = slot + 6 * i
  590.                             try:
  591.                                 if itemGrid[p] == True:
  592.                                     possible = False
  593.                                     break
  594.                             except IndexError:
  595.                                 possible = False
  596.                                 break
  597.  
  598.                             if possible:
  599.                                 return slot
  600.  
  601.                 return -1
  602.  
  603.             def AttachItemFromInventory(self, slotWindow, slotIndex):
  604.                 attachedItemID = player.GetItemIndex(slotWindow, slotIndex)
  605.                 item.SelectItem(attachedItemID)
  606.                 if item.IsAntiFlag(item.ITEM_ANTIFLAG_GIVE):
  607.                     return False
  608.  
  609.                 itemGrid = self.__GetCurrentItemGrid()
  610.  
  611.                 item.SelectItem(attachedItemID)
  612.                 emptySlot = self.__FindEmptyCellForSize(itemGrid, item.GetItemSize()[1])
  613.                 if emptySlot == -1 or item.GetItemType() == item.ITEM_TYPE_ELK:
  614.                     return False
  615.  
  616.                 net.SendExchangeItemAddPacket(slotWindow, slotIndex, emptySlot)
  617.                 return True
  618.  
  619. else:
  620.     class ExchangeDialog(ui.ScriptWindow):
  621.  
  622.         def __init__(self):
  623.             ui.ScriptWindow.__init__(self)
  624.             self.TitleName = 0
  625.             self.tooltipItem = 0
  626.             self.xStart = 0
  627.             self.yStart = 0
  628.  
  629.         def __del__(self):
  630.             ui.ScriptWindow.__del__(self)
  631.  
  632.         def LoadDialog(self):
  633.             PythonScriptLoader = ui.PythonScriptLoader()
  634.             PythonScriptLoader.LoadScriptFile(self, "UIScript/exchangedialog.py")
  635.  
  636.             ## Owner
  637.             self.OwnerSlot = self.GetChild("Owner_Slot")
  638.             self.OwnerSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectOwnerEmptySlot))
  639.             self.OwnerSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectOwnerItemSlot))
  640.             self.OwnerSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInOwnerItem))
  641.             self.OwnerSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  642.             self.OwnerMoney = self.GetChild("Owner_Money_Value")
  643.             self.OwnerAcceptLight = self.GetChild("Owner_Accept_Light")
  644.             self.OwnerAcceptLight.Disable()
  645.             self.OwnerMoneyButton = self.GetChild("Owner_Money")
  646.             self.OwnerMoneyButton.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog))
  647.  
  648.             ## Target
  649.             self.TargetSlot = self.GetChild("Target_Slot")
  650.             self.TargetSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInTargetItem))
  651.             self.TargetSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  652.             self.TargetMoney = self.GetChild("Target_Money_Value")
  653.             self.TargetAcceptLight = self.GetChild("Target_Accept_Light")
  654.             self.TargetAcceptLight.Disable()
  655.  
  656.             ## PickMoneyDialog
  657.             dlgPickMoney = uiPickMoney.PickMoneyDialog()
  658.             dlgPickMoney.LoadDialog()
  659.             dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
  660.             dlgPickMoney.SetTitleName(localeInfo.EXCHANGE_MONEY)
  661.             if app.ENABLE_FULL_YANG_SYSTEM:
  662.                 dlgPickMoney.SetMax(10)
  663.             else:
  664.                 dlgPickMoney.SetMax(7)
  665.             dlgPickMoney.Hide()
  666.             self.dlgPickMoney = dlgPickMoney
  667.  
  668.             ## Button
  669.             self.AcceptButton = self.GetChild("Owner_Accept_Button")
  670.             self.AcceptButton.SetToggleDownEvent(ui.__mem_func__(self.AcceptExchange))
  671.  
  672.             self.TitleName = self.GetChild("TitleName")
  673.             self.GetChild("TitleBar").SetCloseEvent(net.SendExchangeExitPacket)
  674.  
  675.         def Destroy(self):
  676.             print "---------------------------------------------------------------------------- DESTROY EXCHANGE"
  677.             self.ClearDictionary()
  678.             self.dlgPickMoney.Destroy()
  679.             self.dlgPickMoney = 0
  680.             self.OwnerSlot = 0
  681.             self.OwnerMoney = 0
  682.             self.OwnerAcceptLight = 0
  683.             self.OwnerMoneyButton = 0
  684.             self.TargetSlot = 0
  685.             self.TargetMoney = 0
  686.             self.TargetAcceptLight = 0
  687.             self.TitleName = 0
  688.             self.AcceptButton = 0
  689.             self.tooltipItem = 0
  690.  
  691.         def OpenDialog(self):
  692.             self.TitleName.SetText(localeInfo.EXCHANGE_TITLE_LEVEL % (exchange.GetNameFromTarget(), exchange.GetLevelFromTarget()))
  693.             self.AcceptButton.Enable()
  694.             self.AcceptButton.SetUp()
  695.             self.Show()
  696.  
  697.             (self.xStart, self.yStart, z) = player.GetMainCharacterPosition()
  698.  
  699.         def CloseDialog(self):
  700.             wndMgr.OnceIgnoreMouseLeftButtonUpEvent()
  701.  
  702.             if 0 != self.tooltipItem:
  703.                 self.tooltipItem.HideToolTip()
  704.  
  705.             self.dlgPickMoney.Close()
  706.             self.Hide()
  707.  
  708.         def SetItemToolTip(self, tooltipItem):
  709.             self.tooltipItem = tooltipItem
  710.  
  711.         def OpenPickMoneyDialog(self):
  712.  
  713.             if exchange.GetElkFromSelf() > 0:
  714.                 chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANT_EDIT_MONEY)
  715.                 return
  716.  
  717.             self.dlgPickMoney.Open(player.GetElk())
  718.  
  719.         def OnPickMoney(self, money):
  720.             net.SendExchangeElkAddPacket(money)
  721.  
  722.         def AcceptExchange(self):
  723.             net.SendExchangeAcceptPacket()
  724.             self.AcceptButton.Disable()
  725.  
  726.         def SelectOwnerEmptySlot(self, SlotIndex):
  727.  
  728.             if False == mouseModule.mouseController.isAttached():
  729.                 return
  730.  
  731.             if mouseModule.mouseController.IsAttachedMoney():
  732.                 net.SendExchangeElkAddPacket(mouseModule.mouseController.GetAttachedMoneyAmount())
  733.             else:
  734.                 attachedSlotType = mouseModule.mouseController.GetAttachedType()
  735.                 if (player.SLOT_TYPE_INVENTORY == attachedSlotType
  736.                     or player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedSlotType):
  737.  
  738.                     attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
  739.                     SrcSlotNumber = mouseModule.mouseController.GetAttachedSlotNumber()
  740.                     DstSlotNumber = SlotIndex
  741.  
  742.                     itemID = player.GetItemIndex(attachedInvenType, SrcSlotNumber)
  743.                     item.SelectItem(itemID)
  744.  
  745.                     if item.IsAntiFlag(item.ANTIFLAG_GIVE):
  746.                         chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE)
  747.                         mouseModule.mouseController.DeattachObject()
  748.                         return
  749.  
  750.                     if app.ENABLE_SOULBIND_SYSTEM:
  751.                         if player.GetItemSealDate(attachedInvenType, SrcSlotNumber):
  752.                             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE_SEAL_ITEM)
  753.                             return
  754.  
  755.                     net.SendExchangeItemAddPacket(attachedInvenType, SrcSlotNumber, DstSlotNumber)
  756.  
  757.             mouseModule.mouseController.DeattachObject()
  758.  
  759.         def SelectOwnerItemSlot(self, SlotIndex):
  760.  
  761.             if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex():
  762.  
  763.                 money = mouseModule.mouseController.GetAttachedItemCount()
  764.                 net.SendExchangeElkAddPacket(money)
  765.  
  766.         def RefreshOwnerSlot(self):
  767.             for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  768.                 itemIndex = exchange.GetItemVnumFromSelf(i)
  769.                 itemCount = exchange.GetItemCountFromSelf(i)
  770.                 if 1 == itemCount:
  771.                     itemCount = 0
  772.                 self.OwnerSlot.SetItemSlot(i, itemIndex, itemCount)
  773.             self.OwnerSlot.RefreshSlot()
  774.  
  775.         def RefreshTargetSlot(self):
  776.             for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  777.                 itemIndex = exchange.GetItemVnumFromTarget(i)
  778.                 itemCount = exchange.GetItemCountFromTarget(i)
  779.                 if 1 == itemCount:
  780.                     itemCount = 0
  781.                 self.TargetSlot.SetItemSlot(i, itemIndex, itemCount)
  782.             self.TargetSlot.RefreshSlot()
  783.  
  784.         def Refresh(self):
  785.  
  786.             self.RefreshOwnerSlot()
  787.             self.RefreshTargetSlot()
  788.  
  789.             self.OwnerMoney.SetText(localeInfo.NumberToMoneyString(exchange.GetElkFromSelf()))
  790.             self.TargetMoney.SetText(localeInfo.NumberToMoneyString(exchange.GetElkFromTarget()))
  791.  
  792.             if True == exchange.GetAcceptFromSelf():
  793.                 self.OwnerAcceptLight.Down()
  794.             else:
  795.                 self.AcceptButton.Enable()
  796.                 self.AcceptButton.SetUp()
  797.                 self.OwnerAcceptLight.SetUp()
  798.  
  799.             if True == exchange.GetAcceptFromTarget():
  800.                 self.TargetAcceptLight.Down()
  801.             else:
  802.                 self.TargetAcceptLight.SetUp()
  803.  
  804.         def OverInOwnerItem(self, slotIndex):
  805.  
  806.             if 0 != self.tooltipItem:
  807.                 self.tooltipItem.SetExchangeOwnerItem(slotIndex)
  808.  
  809.         def OverInTargetItem(self, slotIndex):
  810.  
  811.             if 0 != self.tooltipItem:
  812.                 self.tooltipItem.SetExchangeTargetItem(slotIndex)
  813.  
  814.         def OverOutItem(self):
  815.  
  816.             if 0 != self.tooltipItem:
  817.                 self.tooltipItem.HideToolTip()
  818.  
  819.         def OnTop(self):
  820.             self.tooltipItem.SetTop()
  821.  
  822.         def OnUpdate(self):
  823.  
  824.             USE_EXCHANGE_LIMIT_RANGE = 1000
  825.  
  826.             (x, y, z) = player.GetMainCharacterPosition()
  827.             if abs(x - self.xStart) > USE_EXCHANGE_LIMIT_RANGE or abs(y - self.yStart) > USE_EXCHANGE_LIMIT_RANGE:
  828.                 (self.xStart, self.yStart, z) = player.GetMainCharacterPosition()
  829.                 net.SendExchangeExitPacket()
  830.  
RAW Paste Data