Advertisement
Guest User

Untitled

a guest
Aug 28th, 2014
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.87 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 locale
  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, locale.PRIVATE_SHOP_CANNOT_SELL_ITEM)
  216.                 return
  217.  
  218.             priceInputBoard = uiCommon.MoneyInputDialog()
  219.             priceInputBoard.SetTitle(locale.PRIVATE_SHOP_INPUT_PRICE_DIALOG_TITLE)
  220.             priceInputBoard.SetAcceptEvent(ui.__mem_func__(self.AcceptInputPrice))
  221.             priceInputBoard.SetCancelEvent(ui.__mem_func__(self.CancelInputPrice))
  222.             priceInputBoard.Open()
  223.  
  224.             itemPrice=GetPrivateShopItemPrice(itemVNum)
  225.  
  226.             if itemPrice>0:
  227.                 priceInputBoard.SetValue(itemPrice)
  228.            
  229.             self.priceInputBoard = priceInputBoard
  230.             self.priceInputBoard.itemVNum = itemVNum
  231.             self.priceInputBoard.sourceSlotPos = attachedSlotPos
  232.             self.priceInputBoard.targetSlotPos = selectedSlotPos
  233.  
  234.     def OnSelectItemSlot(self, selectedSlotPos):
  235.  
  236.         isAttached = mouseModule.mouseController.isAttached()
  237.         if isAttached:
  238.             snd.PlaySound("sound/ui/loginfail.wav")
  239.             mouseModule.mouseController.DeattachObject()
  240.  
  241.         else:
  242.             if not selectedSlotPos in self.itemStock:
  243.                 return
  244.  
  245.             inventoryPos = self.itemStock[selectedSlotPos]
  246.             shop.DelPrivateShopItemStock(inventoryPos)
  247.             snd.PlaySound("sound/ui/drop.wav")
  248.  
  249.             del self.itemStock[selectedSlotPos]
  250.  
  251.             self.Refresh()
  252.  
  253.     def AcceptInputPrice(self):
  254.  
  255.         if not self.priceInputBoard:
  256.             return TRUE
  257.  
  258.         text = self.priceInputBoard.GetText()
  259.  
  260.         if not text:
  261.             return TRUE
  262.  
  263.         if not text.isdigit():
  264.             return TRUE
  265.  
  266.         if int(text) <= 0:
  267.             return TRUE
  268.  
  269.         sourceSlotPos = self.priceInputBoard.sourceSlotPos
  270.         targetSlotPos = self.priceInputBoard.targetSlotPos
  271.  
  272.         for privatePos, inventorySlotPos in self.itemStock.items():
  273.             if inventorySlotPos == sourceSlotPos:
  274.                 shop.DelPrivateShopItemStock(targetSlotPos)
  275.                 del self.itemStock[privatePos]
  276.  
  277.         price = int(self.priceInputBoard.GetText())
  278.  
  279.         if IsPrivateShopItemPriceList():
  280.             SetPrivateShopItemPrice(self.priceInputBoard.itemVNum, price)
  281.  
  282.         shop.AddPrivateShopItemStock(sourceSlotPos, targetSlotPos, price)
  283.         self.itemStock[targetSlotPos] = sourceSlotPos
  284.         snd.PlaySound("sound/ui/drop.wav")
  285.  
  286.         self.Refresh()     
  287.  
  288.         #####
  289.  
  290.         self.priceInputBoard = None
  291.         return TRUE
  292.  
  293.     def CancelInputPrice(self):
  294.         self.priceInputBoard = None
  295.         return TRUE
  296.  
  297.     def OnOk(self):
  298.  
  299.         if not self.title:
  300.             return
  301.  
  302.         if 0 == len(self.itemStock):
  303.             return
  304.  
  305.         shop.BuildPrivateShop(self.title)
  306.         self.Close()
  307.  
  308.     def OnClose(self):
  309.         self.Close()
  310.  
  311.     def OnPressEscapeKey(self):
  312.         self.Close()
  313.         return TRUE
  314.  
  315.     def OnOverInItem(self, slotIndex):
  316.  
  317.         if self.tooltipItem:
  318.             if self.itemStock.has_key(slotIndex):
  319.                 self.tooltipItem.SetPrivateShopBuilderItem(self.itemStock[slotIndex], slotIndex)
  320.  
  321.     def OnOverOutItem(self):
  322.  
  323.         if self.tooltipItem:
  324.             self.tooltipItem.HideToolTip()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement