Advertisement
Guest User

Untitled

a guest
Apr 15th, 2020
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.61 KB | None | 0 0
  1. import ui
  2. import snd
  3. import shop
  4. import mouseModule
  5. import player
  6. import chr
  7. import net
  8. import uiCommon
  9. import localeInfo
  10. import chat
  11. import item
  12.  
  13. g_isBuildingPrivateShop = FALSE
  14.  
  15. g_itemPriceDict={}
  16.  
  17. def Clear():
  18.     global g_itemPriceDict
  19.     global g_isBuildingPrivateShop
  20.     g_itemPriceDict={}
  21.     g_isBuildingPrivateShop = FALSE
  22.  
  23. def IsPrivateShopItemPriceList():
  24.     global g_itemPriceDict
  25.     if g_itemPriceDict:
  26.         return TRUE
  27.     else:
  28.         return FALSE
  29.  
  30. def IsBuildingPrivateShop():
  31.     global g_isBuildingPrivateShop
  32.     if player.IsOpenPrivateShop() or g_isBuildingPrivateShop:
  33.         return TRUE
  34.     else:
  35.         return FALSE
  36.  
  37. def SetPrivateShopItemPrice(itemVNum, itemPrice):
  38.     global g_itemPriceDict
  39.     g_itemPriceDict[int(itemVNum)]=itemPrice
  40.    
  41. def GetPrivateShopItemPrice(itemVNum):
  42.     try:
  43.         global g_itemPriceDict
  44.         return g_itemPriceDict[itemVNum]
  45.     except KeyError:
  46.         return 0
  47.        
  48.  
  49. class PrivateShopAdvertisementBoard(ui.ThinBoard):
  50.     def __init__(self):
  51.         ui.ThinBoard.__init__(self, "UI_BOTTOM")
  52.  
  53.         self.vid = None
  54.  
  55.         self.__MakeTextLine()
  56.  
  57.     def __del__(self):
  58.         ui.ThinBoard.__del__(self)
  59.  
  60.     def __MakeTextLine(self):
  61.         self.textLine = ui.TextLine()
  62.         self.textLine.SetParent(self)
  63.         self.textLine.SetWindowHorizontalAlignCenter()
  64.         self.textLine.SetWindowVerticalAlignCenter()
  65.         self.textLine.SetHorizontalAlignCenter()
  66.         self.textLine.SetVerticalAlignCenter()
  67.         self.textLine.Show()
  68.  
  69.     def Open(self, vid, text):
  70.  
  71.         self.vid = vid
  72.  
  73.         self.textLine.SetText(text)
  74.         self.textLine.UpdateRect()
  75.  
  76.         self.SetSize(len(text)*6 + 10*2, 20)
  77.         self.Show()
  78.        
  79.     def OnMouseLeftButtonUp(self):
  80.  
  81.         if not self.vid:
  82.             return
  83.  
  84.         net.SendOnClickPacket(self.vid)
  85.  
  86.         return TRUE
  87.  
  88.     def OnUpdate(self):
  89.         if not self.vid:
  90.             return
  91.  
  92.         x, y = chr.GetProjectPosition(self.vid, 220)
  93.         self.SetPosition(x - self.GetWidth()/2, y - self.GetHeight()/2)
  94.  
  95.  
  96. class PrivateShopBuilder(ui.ScriptWindow):
  97.  
  98.     def __init__(self):
  99.         #print "NEW MAKE_PRIVATE_SHOP_WINDOW ----------------------------------------------------------------"
  100.         ui.ScriptWindow.__init__(self)
  101.  
  102.         self.__LoadWindow()
  103.         self.itemStock = {}
  104.         self.tooltipItem = None
  105.         self.priceInputBoard = None
  106.         self.title = ""
  107.  
  108.     def __del__(self):
  109.         #print "------------------------------------------------------------- DELETE MAKE_PRIVATE_SHOP_WINDOW"
  110.         ui.ScriptWindow.__del__(self)
  111.  
  112.     def __LoadWindow(self):
  113.         try:
  114.             pyScrLoader = ui.PythonScriptLoader()
  115.             pyScrLoader.LoadScriptFile(self, "UIScript/PrivateShopBuilder.py")
  116.         except:
  117.             import exception
  118.             exception.Abort("PrivateShopBuilderWindow.LoadWindow.LoadObject")
  119.  
  120.         try:
  121.             GetObject = self.GetChild
  122.             self.nameLine = GetObject("NameLine")
  123.             self.itemSlot = GetObject("ItemSlot")
  124.             self.btnOk = GetObject("OkButton")
  125.             self.btnClose = GetObject("CloseButton")
  126.             self.titleBar = GetObject("TitleBar")
  127.         except:
  128.             import exception
  129.             exception.Abort("PrivateShopBuilderWindow.LoadWindow.BindObject")
  130.  
  131.         self.btnOk.SetEvent(ui.__mem_func__(self.OnOk))
  132.         self.btnClose.SetEvent(ui.__mem_func__(self.OnClose))
  133.         self.titleBar.SetCloseEvent(ui.__mem_func__(self.OnClose))
  134.  
  135.         self.itemSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.OnSelectEmptySlot))
  136.         self.itemSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.OnSelectItemSlot))
  137.         self.itemSlot.SetOverInItemEvent(ui.__mem_func__(self.OnOverInItem))
  138.         self.itemSlot.SetOverOutItemEvent(ui.__mem_func__(self.OnOverOutItem))
  139.  
  140.     def Destroy(self):
  141.         self.ClearDictionary()
  142.  
  143.         self.nameLine = None
  144.         self.itemSlot = None
  145.         self.btnOk = None
  146.         self.btnClose = None
  147.         self.titleBar = None
  148.         self.priceInputBoard = None
  149.  
  150.     def Open(self, title):
  151.  
  152.         self.title = title
  153.  
  154.         if len(title) > 25:
  155.             title = title[:22] + "..."
  156.  
  157.         self.itemStock = {}
  158.         shop.ClearPrivateShopStock()
  159.         self.nameLine.SetText(title)
  160.         self.SetCenterPosition()
  161.         self.Refresh()
  162.         self.Show()
  163.  
  164.         global g_isBuildingPrivateShop
  165.         g_isBuildingPrivateShop = TRUE
  166.  
  167.     def Close(self):
  168.         global g_isBuildingPrivateShop
  169.         g_isBuildingPrivateShop = FALSE
  170.  
  171.         self.title = ""
  172.         self.itemStock = {}
  173.         shop.ClearPrivateShopStock()
  174.         self.Hide()
  175.  
  176.     def SetItemToolTip(self, tooltipItem):
  177.         self.tooltipItem = tooltipItem
  178.  
  179.     def Refresh(self):
  180.         getitemVNum=player.GetItemIndex
  181.         getItemCount=player.GetItemCount
  182.         setitemVNum=self.itemSlot.SetItemSlot
  183.         delItem=self.itemSlot.ClearSlot
  184.  
  185.         for i in xrange(shop.SHOP_SLOT_COUNT):
  186.  
  187.             if not self.itemStock.has_key(i):
  188.                 delItem(i)
  189.                 continue
  190.  
  191.             pos = self.itemStock[i]
  192.  
  193.             itemCount = getItemCount(pos)
  194.             if itemCount <= 1:
  195.                 itemCount = 0
  196.             setitemVNum(i, getitemVNum(pos), itemCount)
  197.  
  198.         self.itemSlot.RefreshSlot()
  199.  
  200.     def OnSelectEmptySlot(self, selectedSlotPos):
  201.  
  202.         isAttached = mouseModule.mouseController.isAttached()
  203.         if isAttached:
  204.             attachedSlotType = mouseModule.mouseController.GetAttachedType()
  205.             attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
  206.             mouseModule.mouseController.DeattachObject()
  207.  
  208.             if player.SLOT_TYPE_INVENTORY != attachedSlotType:
  209.                 return
  210.  
  211.             itemVNum = player.GetItemIndex(attachedSlotPos)
  212.             item.SelectItem(itemVNum)
  213.  
  214.             if item.IsAntiFlag(item.ITEM_ANTIFLAG_GIVE) or item.IsAntiFlag(item.ITEM_ANTIFLAG_MYSHOP):
  215.                 chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.PRIVATE_SHOP_CANNOT_SELL_ITEM)
  216.                 return
  217.  
  218.             priceInputBoard = uiCommon.MoneyInputDialog()
  219.             priceInputBoard.SetTitle(localeInfo.PRIVATE_SHOP_INPUT_PRICE_DIALOG_TITLE)
  220.             priceInputBoard.SetAcceptEvent(ui.__mem_func__(self.AcceptInputPrice))
  221.             priceInputBoard.SetDemoEvent(ui.__mem_func__(self.DemoPrice))
  222.             priceInputBoard.SetCancelEvent(ui.__mem_func__(self.CancelInputPrice))
  223.             priceInputBoard.Open()
  224.  
  225.             itemPrice=GetPrivateShopItemPrice(itemVNum)
  226.  
  227.             if itemPrice>0:
  228.                 priceInputBoard.SetValue(itemPrice)
  229.            
  230.             self.priceInputBoard = priceInputBoard
  231.             self.priceInputBoard.itemVNum = itemVNum
  232.             self.priceInputBoard.sourceSlotPos = attachedSlotPos
  233.             self.priceInputBoard.targetSlotPos = selectedSlotPos
  234.  
  235.     def OnSelectItemSlot(self, selectedSlotPos):
  236.  
  237.         isAttached = mouseModule.mouseController.isAttached()
  238.         if isAttached:
  239.             snd.PlaySound("sound/ui/loginfail.wav")
  240.             mouseModule.mouseController.DeattachObject()
  241.  
  242.         else:
  243.             if not selectedSlotPos in self.itemStock:
  244.                 return
  245.  
  246.             inventoryPos = self.itemStock[selectedSlotPos]
  247.             shop.DelPrivateShopItemStock(inventoryPos)
  248.             snd.PlaySound("sound/ui/drop.wav")
  249.  
  250.             del self.itemStock[selectedSlotPos]
  251.  
  252.             self.Refresh()
  253.    
  254.     def AcceptInputPrice(self):
  255.  
  256.         if not self.priceInputBoard:
  257.             return TRUE
  258.  
  259.         text = self.priceInputBoard.GetText()
  260.  
  261.         if not text:
  262.             return TRUE
  263.  
  264.         if not text.isdigit():
  265.             return TRUE
  266.  
  267.         if int(text) <= 0:
  268.             return TRUE
  269.  
  270.         sourceSlotPos = self.priceInputBoard.sourceSlotPos
  271.         targetSlotPos = self.priceInputBoard.targetSlotPos
  272.  
  273.         for privatePos, inventorySlotPos in self.itemStock.items():
  274.             if inventorySlotPos == sourceSlotPos:
  275.                 shop.DelPrivateShopItemStock(targetSlotPos)
  276.                 del self.itemStock[privatePos]
  277.  
  278.         price = int(self.priceInputBoard.GetText())
  279.  
  280.         if IsPrivateShopItemPriceList():
  281.             SetPrivateShopItemPrice(self.priceInputBoard.itemVNum, price)
  282.  
  283.         shop.AddPrivateShopItemStock(sourceSlotPos, targetSlotPos, price)
  284.         self.itemStock[targetSlotPos] = sourceSlotPos
  285.         snd.PlaySound("sound/ui/drop.wav")
  286.  
  287.         self.Refresh()     
  288.  
  289.         #####
  290.  
  291.         self.priceInputBoard = None
  292.         return TRUE
  293.        
  294.     def DemoPrice(self):
  295.         sourceSlotPos = self.priceInputBoard.sourceSlotPos
  296.         targetSlotPos = self.priceInputBoard.targetSlotPos
  297.  
  298.         for privatePos, inventorySlotPos in self.itemStock.items():
  299.             if inventorySlotPos == sourceSlotPos:
  300.                 shop.DelPrivateShopItemStock(targetSlotPos)
  301.                 del self.itemStock[privatePos]
  302.  
  303.         price = 0
  304.  
  305.         if IsPrivateShopItemPriceList():
  306.             SetPrivateShopItemPrice(self.priceInputBoard.itemVNum, price)
  307.  
  308.         shop.AddPrivateShopItemStock(sourceSlotPos, targetSlotPos, price)
  309.         self.itemStock[targetSlotPos] = sourceSlotPos
  310.         snd.PlaySound("sound/ui/drop.wav")
  311.  
  312.         self.Refresh()     
  313.  
  314.         #####
  315.  
  316.         self.priceInputBoard = None
  317.         return TRUE
  318.  
  319.     def CancelInputPrice(self):
  320.         self.priceInputBoard = None
  321.         return TRUE
  322.  
  323.     def OnOk(self):
  324.  
  325.         if not self.title:
  326.             return
  327.  
  328.         if 0 == len(self.itemStock):
  329.             return
  330.  
  331.         shop.BuildPrivateShop(self.title)
  332.         self.Close()
  333.  
  334.     def OnClose(self):
  335.         self.Close()
  336.  
  337.     def OnPressEscapeKey(self):
  338.         self.Close()
  339.         return TRUE
  340.  
  341.     def OnOverInItem(self, slotIndex):
  342.  
  343.         if self.tooltipItem:
  344.             if self.itemStock.has_key(slotIndex):
  345.                 self.tooltipItem.SetPrivateShopBuilderItem(self.itemStock[slotIndex], slotIndex)
  346.  
  347.     def OnOverOutItem(self):
  348.  
  349.         if self.tooltipItem:
  350.             self.tooltipItem.HideToolTip()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement