LethalArms

Metin2 uiExchange.py

Oct 10th, 2022
1,229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 12.83 KB | Source Code | 0 0
  1. import ui
  2. import app
  3. import net
  4. import grp
  5. import chat
  6. import item
  7. import time
  8. import wndMgr
  9. import player
  10. import uiCommon
  11. import exchange
  12. import localeInfo
  13. import mouseModule
  14. import uiPickMoney
  15. import playerSettingModule
  16.  
  17. NEW_YANG_LIMIT = 1
  18.  
  19. class ExchangeDialog(ui.ScriptWindow):
  20.     FACE_IMAGE_DICT = {
  21.                         playerSettingModule.RACE_WARRIOR_M : "icon/face/warrior_m.tga",
  22.                         playerSettingModule.RACE_WARRIOR_W : "icon/face/warrior_w.tga",
  23.                         playerSettingModule.RACE_ASSASSIN_M : "icon/face/assassin_m.tga",
  24.                         playerSettingModule.RACE_ASSASSIN_W : "icon/face/assassin_w.tga",
  25.                         playerSettingModule.RACE_SURA_M : "icon/face/sura_m.tga",
  26.                         playerSettingModule.RACE_SURA_W : "icon/face/sura_w.tga",
  27.                         playerSettingModule.RACE_SHAMAN_M : "icon/face/shaman_m.tga",
  28.                         playerSettingModule.RACE_SHAMAN_W : "icon/face/shaman_w.tga",
  29.     }
  30.  
  31.     def __init__(self):
  32.         ui.ScriptWindow.__init__(self)
  33.         self.TitleName = 0
  34.         self.tooltipItem = 0
  35.         self.xStart = 0
  36.         self.yStart = 0
  37.  
  38.     def __del__(self):
  39.         ui.ScriptWindow.__del__(self)
  40.  
  41.     class Item(ui.ListBoxEx.Item):
  42.         def __init__(self,parent, text, value=0):
  43.             ui.ListBoxEx.Item.__init__(self)
  44.             self.textBox=ui.TextLine()
  45.             self.textBox.SetParent(self)
  46.             self.textBox.SetText(text)
  47.             self.textBox.Show()
  48.             self.value = value
  49.  
  50.         def GetValue(self):
  51.             return self.value
  52.  
  53.         def __del__(self):
  54.             ui.ListBoxEx.Item.__del__(self)
  55.  
  56.     def LoadDialog(self):
  57.         PythonScriptLoader = ui.PythonScriptLoader()
  58.         if app.ENABLE_NEW_EXCHANGE_WINDOW:
  59.             PythonScriptLoader.LoadScriptFile(self, "UIScript/exchangedialog_new.py")
  60.         else:
  61.             PythonScriptLoader.LoadScriptFile(self, "UIScript/exchangedialog.py")
  62.        
  63.         self.OwnerSlot = self.GetChild("Owner_Slot")
  64.         self.OwnerSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectOwnerEmptySlot))
  65.         self.OwnerSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectOwnerItemSlot))
  66.         self.OwnerSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInOwnerItem))
  67.         self.OwnerSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  68.         self.OwnerMoney = self.GetChild("Owner_Money_Value")
  69.         if not app.ENABLE_NEW_EXCHANGE_WINDOW:
  70.             self.OwnerAcceptLight = self.GetChild("Owner_Accept_Light")
  71.             self.OwnerAcceptLight.Disable()
  72.         self.OwnerMoneyButton = self.GetChild("Owner_Money")
  73.         self.OwnerMoneyButton.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog))
  74.        
  75.         self.TargetSlot = self.GetChild("Target_Slot")
  76.         self.TargetSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInTargetItem))
  77.         self.TargetSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  78.         self.TargetMoney = self.GetChild("Target_Money_Value")
  79.         if not app.ENABLE_NEW_EXCHANGE_WINDOW:
  80.             self.TargetAcceptLight = self.GetChild("Target_Accept_Light")
  81.             self.TargetAcceptLight.Disable()
  82.        
  83.         dlgPickMoney = uiPickMoney.PickMoneyDialog()
  84.         dlgPickMoney.LoadDialog()
  85.         dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
  86.         dlgPickMoney.SetTitleName(localeInfo.EXCHANGE_MONEY)
  87.         dlgPickMoney.SetMax(12)
  88.         dlgPickMoney.Hide()
  89.         self.dlgPickMoney = dlgPickMoney
  90.        
  91.         self.AcceptButton = self.GetChild("Owner_Accept_Button")
  92.         self.AcceptButton.SetToggleDownEvent(ui.__mem_func__(self.AcceptExchange))
  93.        
  94.         if app.ENABLE_NEW_EXCHANGE_WINDOW:
  95.             self.TargetAcceptButton = self.GetChild("Target_Accept_Button")
  96.        
  97.         self.TitleName = self.GetChild("TitleName")
  98.         self.GetChild("TitleBar").SetCloseEvent(net.SendExchangeExitPacket)
  99.         if app.ENABLE_NEW_EXCHANGE_WINDOW:
  100.             self.FaceOwnerImage = self.GetChild("FaceOwner_Image")
  101.             self.FaceTargetImage = self.GetChild("FaceTarget_Image")
  102.             self.TargetName = self.GetChild("target_NameText")
  103.             # self.TargetLevel = self.GetChild("target_LvText")
  104.             self.ExchangeLogs = self.GetChild("ExchangeLogs")
  105.             self.LogsScrollBar = ui.ThinScrollBar()
  106.             self.LogsScrollBar.SetParent(self.ExchangeLogs)
  107.             self.LogsScrollBar.SetPosition(442 - 75, 17)
  108.             self.LogsScrollBar.SetScrollBarSize(50)
  109.             self.LogsScrollBar.Show()
  110.             self.LogsDropList = ui.ListBoxEx()
  111.             self.LogsDropList.SetParent(self.ExchangeLogs)
  112.             self.LogsDropList.itemHeight = 12
  113.             self.LogsDropList.itemStep = 13
  114.             self.LogsDropList.SetPosition(35, 27)
  115.             self.LogsDropList.SetSize(0, 45)
  116.             self.LogsDropList.SetScrollBar(self.LogsScrollBar)
  117.             self.LogsDropList.SetViewItemCount(2)
  118.             self.LogsDropList.Show()
  119.             self.LogsScrollBar.Show()
  120.             self.listOwnerSlot = []
  121.             self.listTargetSlot = []
  122.  
  123.     def Destroy(self):
  124.         print "---------------------------------------------------------------------------- DESTROY EXCHANGE"
  125.         self.ClearDictionary()
  126.         self.dlgPickMoney.Destroy()
  127.         self.dlgPickMoney = 0
  128.         self.OwnerSlot = 0
  129.         self.OwnerMoney = 0
  130.         if not app.ENABLE_NEW_EXCHANGE_WINDOW:
  131.             self.OwnerAcceptLight = 0
  132.         self.OwnerMoneyButton = 0
  133.         self.TargetSlot = 0
  134.         self.TargetMoney = 0
  135.         if not app.ENABLE_NEW_EXCHANGE_WINDOW:
  136.             self.TargetAcceptLight = 0
  137.         self.TitleName = 0
  138.         self.AcceptButton = 0
  139.         if app.ENABLE_NEW_EXCHANGE_WINDOW:
  140.             self.TargetAcceptButton = 0
  141.             self.FaceOwnerImage = None
  142.             self.FaceTargetImage = None
  143.             self.TargetName = None
  144.             self.TargetLevel = None
  145.             self.ExchangesLogsWindow = None
  146.             self.LogsDropList.RemoveAllItems()
  147.             self.LogsScrollBar = None
  148.             self.LogsDropList = None
  149.        
  150.         self.tooltipItem = 0
  151.  
  152.     def OpenDialog(self):
  153.         self.TitleName.SetText(localeInfo.EXCHANGE_TITLE % (exchange.GetNameFromTarget()))
  154.        
  155.         self.AcceptButton.Enable()
  156.         self.AcceptButton.SetUp()
  157.         if app.ENABLE_NEW_EXCHANGE_WINDOW:
  158.             self.TargetAcceptButton.Disable()
  159.             self.TargetAcceptButton.SetUp()
  160.             self.FaceOwnerImage.LoadImage(self.FACE_IMAGE_DICT[exchange.GetRaceFromSelf()])
  161.             self.FaceTargetImage.LoadImage(self.FACE_IMAGE_DICT[exchange.GetRaceFromTarget()])
  162.             self.TargetName.SetText(exchange.GetNameFromTarget())
  163.             # self.TargetLevel.SetText(localeInfo.NEW_EXCHANGE_LEVEL % (exchange.GetLevelFromTarget()))
  164.             self.LogsDropList.RemoveAllItems()
  165.             self.LogsDropList.AppendItem(self.Item(self, localeInfo.NEW_EXCHANGE_YOU_READY % (str(time.strftime("[%H:%M:%S]"))), 0))
  166.        
  167.         self.Show()
  168.         (self.xStart, self.yStart, z) = player.GetMainCharacterPosition()
  169.  
  170.     def CloseDialog(self):
  171.         wndMgr.OnceIgnoreMouseLeftButtonUpEvent()
  172.         if 0 != self.tooltipItem:
  173.             self.tooltipItem.HideToolTip()
  174.        
  175.         self.dlgPickMoney.Close()
  176.         self.Hide()
  177.  
  178.     def SetItemToolTip(self, tooltipItem):
  179.         self.tooltipItem = tooltipItem
  180.  
  181.     def OpenPickMoneyDialog(self):
  182.         if exchange.GetElkFromSelf() > 0:
  183.             chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANT_EDIT_MONEY)
  184.             return
  185.        
  186.         self.dlgPickMoney.Open(player.GetElk())
  187.  
  188.     def OnPickMoney(self, money):
  189.         net.SendExchangeElkAddPacket(str(money))
  190.  
  191.     def AcceptExchange(self):
  192.         if app.ENABLE_NEW_EXCHANGE_WINDOW:
  193.             atLeastOneItem = 0
  194.             atLeastOneYang = 0
  195.             for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  196.                 itemCount = exchange.GetItemCountFromTarget(i)
  197.                 if itemCount >= 1:
  198.                     atLeastOneYang = 1
  199.                     break
  200.            
  201.             if exchange.GetElkFromTarget() >= 1:
  202.                 atLeastOneYang = 1
  203.            
  204.             if atLeastOneItem or atLeastOneYang:
  205.                 net.SendExchangeAcceptPacket()
  206.                 self.AcceptButton.Disable()
  207.             else:
  208.                 atLeastOneItem = 0
  209.                 atLeastOneYang = 0
  210.                 for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  211.                     itemCount = exchange.GetItemCountFromSelf(i)
  212.                     if itemCount >= 1:
  213.                         atLeastOneYang = 1
  214.                         break
  215.                
  216.                 if exchange.GetElkFromSelf() >= 1:
  217.                     atLeastOneYang = 1
  218.                
  219.                 if atLeastOneItem or atLeastOneYang:
  220.                     self.questionDialog = uiCommon.QuestionDialog2()
  221.                     self.questionDialog.SetText1(localeInfo.NEW_EXCHANGE_ALERT1)
  222.                     self.questionDialog.SetText2(localeInfo.NEW_EXCHANGE_ALERT2)
  223.                     self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.AcceptQuestion))
  224.                     self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
  225.                     self.questionDialog.Open()
  226.                 else:
  227.                     net.SendExchangeAcceptPacket()
  228.                     self.AcceptButton.Disable()
  229.         else:
  230.             net.SendExchangeAcceptPacket()
  231.             self.AcceptButton.Disable()
  232.  
  233.     if app.ENABLE_NEW_EXCHANGE_WINDOW:
  234.         def AcceptQuestion(self):
  235.             net.SendExchangeAcceptPacket()
  236.             self.AcceptButton.Disable()
  237.             if self.questionDialog:
  238.                 self.questionDialog.Close()
  239.            
  240.             self.questionDialog = None
  241.  
  242.         def OnCloseQuestionDialog(self):
  243.             if self.questionDialog:
  244.                 self.questionDialog.Close()
  245.            
  246.             self.questionDialog = None
  247.             self.AcceptButton.Enable()
  248.             self.AcceptButton.SetUp()
  249.  
  250.     def SelectOwnerEmptySlot(self, SlotIndex):
  251.         if False == mouseModule.mouseController.isAttached():
  252.             return
  253.        
  254.         if mouseModule.mouseController.IsAttachedMoney():
  255.             net.SendExchangeElkAddPacket(str(mouseModule.mouseController.GetAttachedMoneyAmount()))
  256.         else:
  257.             attachedSlotType = mouseModule.mouseController.GetAttachedType()
  258.             if (player.SLOT_TYPE_INVENTORY == attachedSlotType or player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedSlotType):
  259.                 attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
  260.                 SrcSlotNumber = mouseModule.mouseController.GetAttachedSlotNumber()
  261.                 DstSlotNumber = SlotIndex
  262.                 itemID = player.GetItemIndex(attachedInvenType, SrcSlotNumber)
  263.                 item.SelectItem(itemID)
  264.                 if item.IsAntiFlag(item.ANTIFLAG_GIVE):
  265.                     chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE)
  266.                     mouseModule.mouseController.DeattachObject()
  267.                     return
  268.                
  269.                 net.SendExchangeItemAddPacket(attachedInvenType, SrcSlotNumber, DstSlotNumber)
  270.        
  271.         mouseModule.mouseController.DeattachObject()
  272.  
  273.     def SelectOwnerItemSlot(self, SlotIndex):
  274.         if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex():
  275.             money = mouseModule.mouseController.GetAttachedItemCount()
  276.             net.SendExchangeElkAddPacket(str(money))
  277.  
  278.     def RefreshOwnerSlot(self):
  279.         for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  280.             itemIndex = exchange.GetItemVnumFromSelf(i)
  281.             itemCount = exchange.GetItemCountFromSelf(i)
  282.             if 1 == itemCount:
  283.                 itemCount = 0
  284.            
  285.             self.OwnerSlot.SetItemSlot(i, itemIndex, itemCount)
  286.        
  287.         self.OwnerSlot.RefreshSlot()
  288.  
  289.     def RefreshTargetSlot(self):
  290.         for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  291.             itemIndex = exchange.GetItemVnumFromTarget(i)
  292.             itemCount = exchange.GetItemCountFromTarget(i)
  293.             if 1 == itemCount:
  294.                 itemCount = 0
  295.            
  296.             self.TargetSlot.SetItemSlot(i, itemIndex, itemCount)
  297.        
  298.         self.TargetSlot.RefreshSlot()
  299.  
  300.     def Refresh(self):
  301.         self.RefreshOwnerSlot()
  302.         self.RefreshTargetSlot()
  303.        
  304.         self.OwnerMoney.SetText(localeInfo.NumberToMoneyString(exchange.GetElkFromSelf()))
  305.         self.TargetMoney.SetText(localeInfo.NumberToMoneyString(exchange.GetElkFromTarget()))
  306.         if exchange.GetAcceptFromSelf() == True:
  307.             if not app.ENABLE_NEW_EXCHANGE_WINDOW:
  308.                 self.OwnerAcceptLight.Down()
  309.             else:
  310.                 self.OwnerSlot.SetSlotBaseImage("d:/ymir work/ui/public/slot_base.sub", 0.3500, 0.8500, 0.3500, 1.0)
  311.                 self.LogsDropList.AppendItem(self.Item(self, localeInfo.NEW_EXCHANGE_YOU_ACCEPT % (str((time.strftime("[%H:%M:%S]")))), 0))
  312.         else:
  313.             if self.AcceptButton.IsDown() == True:
  314.                 self.LogsDropList.AppendItem(self.Item(self, localeInfo.NEW_EXCHANGE_YOU_ABORT % (str((time.strftime("[%H:%M:%S]")))), 0))
  315.            
  316.             self.AcceptButton.Enable()
  317.             self.AcceptButton.SetUp()
  318.             if not app.ENABLE_NEW_EXCHANGE_WINDOW:
  319.                 self.OwnerAcceptLight.SetUp()
  320.             else:
  321.                 self.OwnerSlot.SetSlotBaseImage("d:/ymir work/ui/public/slot_base.sub", 1.0, 1.0, 1.0, 1.0)
  322.        
  323.         if exchange.GetAcceptFromTarget() == True:
  324.             if not app.ENABLE_NEW_EXCHANGE_WINDOW:
  325.                 self.TargetAcceptLight.Down()
  326.             else:
  327.                 self.TargetAcceptButton.Down()
  328.                 self.TargetSlot.SetSlotBaseImage("d:/ymir work/ui/public/slot_base.sub", 0.3500, 0.8500, 0.3500, 1.0)
  329.                 self.LogsDropList.AppendItem(self.Item(self, localeInfo.NEW_EXCHANGE_ACCEPT % (str((time.strftime("[%H:%M:%S]"))), exchange.GetNameFromTarget()), 0))
  330.         else:
  331.             if not app.ENABLE_NEW_EXCHANGE_WINDOW:
  332.                 self.TargetAcceptLight.SetUp()
  333.             else:
  334.                 if self.TargetAcceptButton.IsDown() == True:
  335.                     self.LogsDropList.AppendItem(self.Item(self, localeInfo.NEW_EXCHANGE_ABORT % (str((time.strftime("[%H:%M:%S]"))), exchange.GetNameFromTarget()), 0))
  336.                
  337.                 self.TargetAcceptButton.SetUp()
  338.                 self.TargetSlot.SetSlotBaseImage("d:/ymir work/ui/public/slot_base.sub", 1.0, 1.0, 1.0, 1.0)
  339.  
  340.     def OverInOwnerItem(self, slotIndex):
  341.         if 0 != self.tooltipItem:
  342.             self.tooltipItem.SetExchangeOwnerItem(slotIndex)
  343.  
  344.     def OverInTargetItem(self, slotIndex):
  345.         if 0 != self.tooltipItem:
  346.             self.tooltipItem.SetExchangeTargetItem(slotIndex)
  347.  
  348.     def OverOutItem(self):
  349.         if 0 != self.tooltipItem:
  350.             self.tooltipItem.HideToolTip()
  351.  
  352.     def OnTop(self):
  353.         self.tooltipItem.SetTop()
  354.  
  355.     def OnUpdate(self):
  356.         USE_EXCHANGE_LIMIT_RANGE = 1000
  357.         (x, y, z) = player.GetMainCharacterPosition()
  358.         if abs(x - self.xStart) > USE_EXCHANGE_LIMIT_RANGE or abs(y - self.yStart) > USE_EXCHANGE_LIMIT_RANGE:
  359.             (self.xStart, self.yStart, z) = player.GetMainCharacterPosition()
  360.             net.SendExchangeExitPacket()
  361.  
  362.  
Tags: metin2
Advertisement
Add Comment
Please, Sign In to add comment