client/bin_original/pack/root/uiprivateshopbuilder.py

348 lines
8.9 KiB
Python

import ui
import snd
import shop
import mouseModule
import player
import chr
import net
import uiCommon
import locale
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, locale.PRIVATE_SHOP_CANNOT_SELL_ITEM)
return
priceInputBoard = uiCommon.MoneyInputDialog()
priceInputBoard.SetTitle(locale.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()