348 lines
8.9 KiB
Python
348 lines
8.9 KiB
Python
import ui
|
|
import snd
|
|
import shop
|
|
import mouseModule
|
|
import player
|
|
import chr
|
|
import net
|
|
import uiCommon
|
|
import localeInfo
|
|
import chat
|
|
import item
|
|
import systemSetting #±èÁØÈ£
|
|
import player #±èÁØÈ£
|
|
|
|
g_isBuildingPrivateShop = False
|
|
|
|
g_itemPriceDict={}
|
|
|
|
g_privateShopAdvertisementBoardDict={}
|
|
|
|
def Clear():
|
|
global g_itemPriceDict
|
|
global g_isBuildingPrivateShop
|
|
g_itemPriceDict={}
|
|
g_isBuildingPrivateShop = False
|
|
|
|
def IsPrivateShopItemPriceList():
|
|
global g_itemPriceDict
|
|
if g_itemPriceDict:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
def IsBuildingPrivateShop():
|
|
global g_isBuildingPrivateShop
|
|
if player.IsOpenPrivateShop() or g_isBuildingPrivateShop:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
def SetPrivateShopItemPrice(itemVNum, itemPrice):
|
|
global g_itemPriceDict
|
|
g_itemPriceDict[int(itemVNum)]=itemPrice
|
|
|
|
def GetPrivateShopItemPrice(itemVNum):
|
|
try:
|
|
global g_itemPriceDict
|
|
return g_itemPriceDict[itemVNum]
|
|
except KeyError:
|
|
return 0
|
|
|
|
def UpdateADBoard():
|
|
for key in g_privateShopAdvertisementBoardDict.keys():
|
|
g_privateShopAdvertisementBoardDict[key].Show()
|
|
|
|
def DeleteADBoard(vid):
|
|
if not g_privateShopAdvertisementBoardDict.has_key(vid):
|
|
return
|
|
|
|
del g_privateShopAdvertisementBoardDict[vid]
|
|
|
|
|
|
class PrivateShopAdvertisementBoard(ui.ThinBoard):
|
|
def __init__(self):
|
|
ui.ThinBoard.__init__(self, "UI_BOTTOM")
|
|
self.vid = None
|
|
self.__MakeTextLine()
|
|
|
|
def __del__(self):
|
|
ui.ThinBoard.__del__(self)
|
|
|
|
def __MakeTextLine(self):
|
|
self.textLine = ui.TextLine()
|
|
self.textLine.SetParent(self)
|
|
self.textLine.SetWindowHorizontalAlignCenter()
|
|
self.textLine.SetWindowVerticalAlignCenter()
|
|
self.textLine.SetHorizontalAlignCenter()
|
|
self.textLine.SetVerticalAlignCenter()
|
|
self.textLine.Show()
|
|
|
|
def Open(self, vid, text):
|
|
self.vid = vid
|
|
|
|
self.textLine.SetText(text)
|
|
self.textLine.UpdateRect()
|
|
self.SetSize(len(text)*6 + 10*2, 20)
|
|
self.Show()
|
|
|
|
g_privateShopAdvertisementBoardDict[vid] = self
|
|
|
|
def OnMouseLeftButtonUp(self):
|
|
if not self.vid:
|
|
return
|
|
net.SendOnClickPacket(self.vid)
|
|
|
|
return True
|
|
|
|
def OnUpdate(self):
|
|
if not self.vid:
|
|
return
|
|
|
|
if systemSetting.IsShowSalesText():
|
|
self.Show()
|
|
x, y = chr.GetProjectPosition(self.vid, 220)
|
|
self.SetPosition(x - self.GetWidth()/2, y - self.GetHeight()/2)
|
|
|
|
else:
|
|
for key in g_privateShopAdvertisementBoardDict.keys():
|
|
if player.GetMainCharacterIndex() == key: #»óÁ¡Ç³¼±À» ¾Èº¸ÀÌ°Ô °¨Ãß´Â °æ¿ì¿¡µµ, Ç÷¹À̾î ÀÚ½ÅÀÇ »óÁ¡ dz¼±Àº º¸À̵µ·Ï ÇÔ. by ±èÁØÈ£
|
|
g_privateShopAdvertisementBoardDict[key].Show()
|
|
x, y = chr.GetProjectPosition(player.GetMainCharacterIndex(), 220)
|
|
g_privateShopAdvertisementBoardDict[key].SetPosition(x - self.GetWidth()/2, y - self.GetHeight()/2)
|
|
else:
|
|
g_privateShopAdvertisementBoardDict[key].Hide()
|
|
|
|
class PrivateShopBuilder(ui.ScriptWindow):
|
|
|
|
def __init__(self):
|
|
#print "NEW MAKE_PRIVATE_SHOP_WINDOW ----------------------------------------------------------------"
|
|
ui.ScriptWindow.__init__(self)
|
|
|
|
self.__LoadWindow()
|
|
self.itemStock = {}
|
|
self.tooltipItem = None
|
|
self.priceInputBoard = None
|
|
self.title = ""
|
|
|
|
def __del__(self):
|
|
#print "------------------------------------------------------------- DELETE MAKE_PRIVATE_SHOP_WINDOW"
|
|
ui.ScriptWindow.__del__(self)
|
|
|
|
def __LoadWindow(self):
|
|
try:
|
|
pyScrLoader = ui.PythonScriptLoader()
|
|
pyScrLoader.LoadScriptFile(self, "UIScript/PrivateShopBuilder.py")
|
|
except:
|
|
import exception
|
|
exception.Abort("PrivateShopBuilderWindow.LoadWindow.LoadObject")
|
|
|
|
try:
|
|
GetObject = self.GetChild
|
|
self.nameLine = GetObject("NameLine")
|
|
self.itemSlot = GetObject("ItemSlot")
|
|
self.btnOk = GetObject("OkButton")
|
|
self.btnClose = GetObject("CloseButton")
|
|
self.titleBar = GetObject("TitleBar")
|
|
except:
|
|
import exception
|
|
exception.Abort("PrivateShopBuilderWindow.LoadWindow.BindObject")
|
|
|
|
self.btnOk.SetEvent(ui.__mem_func__(self.OnOk))
|
|
self.btnClose.SetEvent(ui.__mem_func__(self.OnClose))
|
|
self.titleBar.SetCloseEvent(ui.__mem_func__(self.OnClose))
|
|
|
|
self.itemSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.OnSelectEmptySlot))
|
|
self.itemSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.OnSelectItemSlot))
|
|
self.itemSlot.SetOverInItemEvent(ui.__mem_func__(self.OnOverInItem))
|
|
self.itemSlot.SetOverOutItemEvent(ui.__mem_func__(self.OnOverOutItem))
|
|
|
|
def Destroy(self):
|
|
self.ClearDictionary()
|
|
|
|
self.nameLine = None
|
|
self.itemSlot = None
|
|
self.btnOk = None
|
|
self.btnClose = None
|
|
self.titleBar = None
|
|
self.priceInputBoard = None
|
|
|
|
def Open(self, title):
|
|
|
|
self.title = title
|
|
|
|
if len(title) > 25:
|
|
title = title[:22] + "..."
|
|
|
|
self.itemStock = {}
|
|
shop.ClearPrivateShopStock()
|
|
self.nameLine.SetText(title)
|
|
self.SetCenterPosition()
|
|
self.Refresh()
|
|
self.Show()
|
|
|
|
global g_isBuildingPrivateShop
|
|
g_isBuildingPrivateShop = True
|
|
|
|
def Close(self):
|
|
global g_isBuildingPrivateShop
|
|
g_isBuildingPrivateShop = False
|
|
|
|
self.title = ""
|
|
self.itemStock = {}
|
|
shop.ClearPrivateShopStock()
|
|
self.Hide()
|
|
|
|
def SetItemToolTip(self, tooltipItem):
|
|
self.tooltipItem = tooltipItem
|
|
|
|
def Refresh(self):
|
|
getitemVNum=player.GetItemIndex
|
|
getItemCount=player.GetItemCount
|
|
setitemVNum=self.itemSlot.SetItemSlot
|
|
delItem=self.itemSlot.ClearSlot
|
|
|
|
for i in xrange(shop.SHOP_SLOT_COUNT):
|
|
|
|
if not self.itemStock.has_key(i):
|
|
delItem(i)
|
|
continue
|
|
|
|
pos = self.itemStock[i]
|
|
|
|
itemCount = getItemCount(*pos)
|
|
if itemCount <= 1:
|
|
itemCount = 0
|
|
setitemVNum(i, getitemVNum(*pos), itemCount)
|
|
|
|
self.itemSlot.RefreshSlot()
|
|
|
|
def OnSelectEmptySlot(self, selectedSlotPos):
|
|
|
|
isAttached = mouseModule.mouseController.isAttached()
|
|
if isAttached:
|
|
attachedSlotType = mouseModule.mouseController.GetAttachedType()
|
|
attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
|
|
mouseModule.mouseController.DeattachObject()
|
|
|
|
if player.SLOT_TYPE_INVENTORY != attachedSlotType and player.SLOT_TYPE_DRAGON_SOUL_INVENTORY != attachedSlotType:
|
|
return
|
|
attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
|
|
|
|
itemVNum = player.GetItemIndex(attachedInvenType, attachedSlotPos)
|
|
item.SelectItem(itemVNum)
|
|
|
|
if item.IsAntiFlag(item.ANTIFLAG_GIVE) or item.IsAntiFlag(item.ANTIFLAG_MYSHOP):
|
|
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.PRIVATE_SHOP_CANNOT_SELL_ITEM)
|
|
return
|
|
|
|
priceInputBoard = uiCommon.MoneyInputDialog()
|
|
priceInputBoard.SetTitle(localeInfo.PRIVATE_SHOP_INPUT_PRICE_DIALOG_TITLE)
|
|
priceInputBoard.SetAcceptEvent(ui.__mem_func__(self.AcceptInputPrice))
|
|
priceInputBoard.SetCancelEvent(ui.__mem_func__(self.CancelInputPrice))
|
|
priceInputBoard.Open()
|
|
|
|
itemPrice=GetPrivateShopItemPrice(itemVNum)
|
|
|
|
if itemPrice>0:
|
|
priceInputBoard.SetValue(itemPrice)
|
|
|
|
self.priceInputBoard = priceInputBoard
|
|
self.priceInputBoard.itemVNum = itemVNum
|
|
self.priceInputBoard.sourceWindowType = attachedInvenType
|
|
self.priceInputBoard.sourceSlotPos = attachedSlotPos
|
|
self.priceInputBoard.targetSlotPos = selectedSlotPos
|
|
|
|
def OnSelectItemSlot(self, selectedSlotPos):
|
|
|
|
isAttached = mouseModule.mouseController.isAttached()
|
|
if isAttached:
|
|
snd.PlaySound("sound/ui/loginfail.wav")
|
|
mouseModule.mouseController.DeattachObject()
|
|
|
|
else:
|
|
if not selectedSlotPos in self.itemStock:
|
|
return
|
|
|
|
invenType, invenPos = self.itemStock[selectedSlotPos]
|
|
shop.DelPrivateShopItemStock(invenType, invenPos)
|
|
snd.PlaySound("sound/ui/drop.wav")
|
|
|
|
del self.itemStock[selectedSlotPos]
|
|
|
|
self.Refresh()
|
|
|
|
def AcceptInputPrice(self):
|
|
|
|
if not self.priceInputBoard:
|
|
return True
|
|
|
|
text = self.priceInputBoard.GetText()
|
|
|
|
if not text:
|
|
return True
|
|
|
|
if not text.isdigit():
|
|
return True
|
|
|
|
if int(text) <= 0:
|
|
return True
|
|
|
|
attachedInvenType = self.priceInputBoard.sourceWindowType
|
|
sourceSlotPos = self.priceInputBoard.sourceSlotPos
|
|
targetSlotPos = self.priceInputBoard.targetSlotPos
|
|
|
|
for privatePos, (itemWindowType, itemSlotIndex) in self.itemStock.items():
|
|
if itemWindowType == attachedInvenType and itemSlotIndex == sourceSlotPos:
|
|
shop.DelPrivateShopItemStock(itemWindowType, itemSlotIndex)
|
|
del self.itemStock[privatePos]
|
|
|
|
price = int(self.priceInputBoard.GetText())
|
|
|
|
if IsPrivateShopItemPriceList():
|
|
SetPrivateShopItemPrice(self.priceInputBoard.itemVNum, price)
|
|
|
|
shop.AddPrivateShopItemStock(attachedInvenType, sourceSlotPos, targetSlotPos, price)
|
|
self.itemStock[targetSlotPos] = (attachedInvenType, sourceSlotPos)
|
|
snd.PlaySound("sound/ui/drop.wav")
|
|
|
|
self.Refresh()
|
|
|
|
#####
|
|
|
|
self.priceInputBoard = None
|
|
return True
|
|
|
|
def CancelInputPrice(self):
|
|
self.priceInputBoard = None
|
|
return True
|
|
|
|
def OnOk(self):
|
|
|
|
if not self.title:
|
|
return
|
|
|
|
if 0 == len(self.itemStock):
|
|
return
|
|
|
|
shop.BuildPrivateShop(self.title)
|
|
self.Close()
|
|
|
|
def OnClose(self):
|
|
self.Close()
|
|
|
|
def OnPressEscapeKey(self):
|
|
self.Close()
|
|
return True
|
|
|
|
def OnOverInItem(self, slotIndex):
|
|
|
|
if self.tooltipItem:
|
|
if self.itemStock.has_key(slotIndex):
|
|
self.tooltipItem.SetPrivateShopBuilderItem(*self.itemStock[slotIndex] + (slotIndex,))
|
|
|
|
def OnOverOutItem(self):
|
|
|
|
if self.tooltipItem:
|
|
self.tooltipItem.HideToolTip()
|