Cum pot sa pun un buton pentru switch pe bara de jos??

Totalitatea subiectelor care nu respectă regulamentul impus in sectiunea "Probleme şi Întrebări" vor fi stocate aici.
Închis
Avatar utilizator
GAU
Nivel 1

Nivel 1
Mesaje: 79
Membru din: 20 Ian 2014, 17:54
Server: metin2benz
Regat: Jinno
Aprecieri: 3  
Mulţumiri: 1  
Medalii

Salut ! M-am tot chinuit, am gasit cateva lucruri, dar nu sunt suficiete pentru mine, sau nu sunt complete. Sa trecem la subiect: Am adaugat un switchbot in serverul de metin si se activeaza apasand tasta F6 (ceea ce nu ma prea incanta). Vreau sa fac in asa fel incat sa pot sa adaug un buton pe bara de jos (eventual langa butonul "Camera") care sa activeze switchul. Vedeti in poza cam cum as crea sa arate. Am butonul in format .tga, dar nu ma descurc sa il incarc unde trebuie.
Astept sugestiile voastre. Multumesc !

Aici este uiinventori.py (daca mai trebuie si alt fisier il incarc)
import ui
import player
import mouseModule
import net
import app
import snd
import item
import player
import chat
import grp
import uiScriptLocale
import uiRefine
import uiAttachMetin
import uiPickMoney
import uiCommon
import uiPrivateShopBuilder # 개인상점 열동안 ItemMove 방지
import locale
import constInfo
import ime
import uiToolTip

ITEM_MALL_BUTTON_ENABLE = TRUE



ITEM_FLAG_APPLICABLE = 1 << 14

class CostumeWindow(ui.ScriptWindow):

def __init__(self, wndInventory):
import exception

if not app.ENABLE_COSTUME_SYSTEM:
exception.Abort("What do you do?")
return

if not wndInventory:
exception.Abort("wndInventory parameter must be set to InventoryWindow")
return

ui.ScriptWindow.__init__(self)

self.isLoaded = 0
self.wndInventory = wndInventory;

self.__LoadWindow()

def __del__(self):
ui.ScriptWindow.__del__(self)

def Show(self):
self.__LoadWindow()
self.RefreshCostumeSlot()

ui.ScriptWindow.Show(self)

def Close(self):
self.Hide()

def __LoadWindow(self):
if self.isLoaded == 1:
return

self.isLoaded = 1

try:
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, "UIScript/CostumeWindow.py")
except:
import exception
exception.Abort("CostumeWindow.LoadWindow.LoadObject")

try:
wndEquip = self.GetChild("CostumeSlot")
self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))

except:
import exception
exception.Abort("CostumeWindow.LoadWindow.BindObject")

## Equipment
wndEquip.SetOverInItemEvent(ui.__mem_func__(self.wndInventory.OverInItem))
wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.wndInventory.OverOutItem))
wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))
wndEquip.SetUseSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))
wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.wndInventory.SelectEmptySlot))
wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.wndInventory.SelectItemSlot))

self.wndEquip = wndEquip

def RefreshCostumeSlot(self):
getItemVNum=player.GetItemIndex

for i in xrange(item.COSTUME_SLOT_COUNT):
slotNumber = item.COSTUME_SLOT_START + i
self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0)

self.wndEquip.RefreshSlot()


class InventoryWindow(ui.ScriptWindow):

USE_TYPE_TUPLE = ("USE_CLEAN_SOCKET", "USE_CHANGE_ATTRIBUTE", "USE_ADD_ATTRIBUTE", "USE_ADD_ATTRIBUTE2", "USE_ADD_ACCESSORY_SOCKET", "USE_PUT_INTO_ACCESSORY_SOCKET")

def __init__(self):
ui.ScriptWindow.__init__(self)
self.questionDialog = None
self.tooltipItem = None
self.sellingSlotNumber = -1
self.isLoaded = 0
self.isOpenedCostumeWindowWhenClosingInventory = 0 # 인벤토리 닫을 때 코스츔이 열려있었는지 여부-_-; 네이밍 ㅈㅅ

self.__LoadWindow()

def __del__(self):
ui.ScriptWindow.__del__(self)

def Show(self):
self.__LoadWindow()

ui.ScriptWindow.Show(self)

# 인벤토리를 닫을 때 코스츔이 열려있었다면 인벤토리를 열 때 코스츔도 같이 열도록 함.
if self.isOpenedCostumeWindowWhenClosingInventory and self.wndCostume:
self.wndCostume.Show()

def BindInterfaceClass(self, interface):
self.interface = interface

def __LoadWindow(self):
if self.isLoaded == 1:
return

self.isLoaded = 1

try:
pyScrLoader = ui.PythonScriptLoader()

if ITEM_MALL_BUTTON_ENABLE:
pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "InventoryWindow.py")
else:
pyScrLoader.LoadScriptFile(self, "UIScript/InventoryWindow.py")
except:
import exception
exception.Abort("InventoryWindow.LoadWindow.LoadObject")

try:
wndItem = self.GetChild("ItemSlot")
wndEquip = self.GetChild("EquipmentSlot")
self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))
self.wndMoney = self.GetChild("Money")
self.wndMoneySlot = self.GetChild("Money_Slot")
self.mallButton = self.GetChild2("MallButton")
#self.DSSButton = self.GetChild2("DSSButton")
self.costumeButton = self.GetChild2("CostumeButton")
##BONUS_PAGE_START
self.GetChild("Valoare_aparare_sabie").SetText(str(player.GetStatus(69)))
self.GetChild("Valoare_aparare_doua_maini").SetText(str(player.GetStatus(70)))
self.GetChild("Valoare_aparare_pumnal").SetText(str(player.GetStatus(71)))
self.GetChild("Valoare_aparare_arc").SetText(str(player.GetStatus(74)))
self.GetChild("Valoare_aparare_clopot").SetText(str(player.GetStatus(72)))
self.GetChild("Valoare_aparare_evantai").SetText(str(player.GetStatus(73)))
self.GetChild("Valoare_aparare_magie").SetText(str(player.GetStatus(77)))
self.GetChild("Valoare_rezistenta_otrava").SetText(str(player.GetStatus(81)))
self.GetChild("Valoare_rezistenta_razboinic").SetText(str(player.GetStatus(59)))
self.GetChild("Valoare_rezistenta_ninja").SetText(str(player.GetStatus(60)))
self.GetChild("Valoare_rezistenta_sura").SetText(str(player.GetStatus(61)))
self.GetChild("Valoare_rezistenta_saman").SetText(str(player.GetStatus(62)))
self.GetChild("Valoare_lovitura_critica").SetText(str(player.GetStatus(40)))
self.GetChild("Valoare_lovitura_patrunzatoare").SetText(str(player.GetStatus(41)))
self.GetChild("Atac_semi_oameni").SetText(str(player.GetStatus(43)))
self.GetChild("Atac_vampiri").SetText(str(player.GetStatus(47)))
self.GetChild("Atac_diavol").SetText(str(player.GetStatus(48)))
self.GetChild("Atac_razboinic").SetText(str(player.GetStatus(54)))
self.GetChild("Atac_ninja").SetText(str(player.GetStatus(55)))
self.GetChild("Atac_sura").SetText(str(player.GetStatus(56)))
self.GetChild("Atac_saman").SetText(str(player.GetStatus(57)))
self.GetChild("Atac_monstrii").SetText(str(player.GetStatus(53)))
self.GetChild("Aparare_skill").SetText(str(player.GetStatus(123)))
##BONUS_PAGE_END
self.inventoryTab = []
self.inventoryTab.append(self.GetChild("Inventory_Tab_01"))
self.inventoryTab.append(self.GetChild("Inventory_Tab_02"))

self.equipmentTab = []
self.equipmentTab.append(self.GetChild("Equipment_Tab_01"))
self.equipmentTab.append(self.GetChild("Equipment_Tab_02"))

if self.costumeButton and not app.ENABLE_COSTUME_SYSTEM:
self.costumeButton.Hide()
self.costumeButton.Destroy()
self.costumeButton = 0

except:
import exception
exception.Abort("InventoryWindow.LoadWindow.BindObject")

## Item
wndItem.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
wndItem.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))
wndItem.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))
wndItem.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))
wndItem.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
wndItem.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))

## Equipment
wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))
wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))
wndEquip.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))
wndEquip.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))

## PickMoneyDialog
dlgPickMoney = uiPickMoney.PickMoneyDialog()
dlgPickMoney.LoadDialog()
dlgPickMoney.Hide()

## RefineDialog
self.refineDialog = uiRefine.RefineDialog()
self.refineDialog.Hide()

## AttachMetinDialog
self.attachMetinDialog = uiAttachMetin.AttachMetinDialog()
self.attachMetinDialog.Hide()

## MoneySlot
self.wndMoneySlot.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog))

self.inventoryTab[0].SetEvent(lambda arg=0: self.SetInventoryPage(arg))
self.inventoryTab[1].SetEvent(lambda arg=1: self.SetInventoryPage(arg))
self.inventoryTab[0].Down()

self.equipmentTab[0].SetEvent(lambda arg=0: self.SetEquipmentPage(arg))
self.equipmentTab[1].SetEvent(lambda arg=1: self.SetEquipmentPage(arg))
self.equipmentTab[0].Down()
self.equipmentTab[0].Hide()
self.equipmentTab[1].Hide()

self.wndItem = wndItem
self.wndEquip = wndEquip
self.dlgPickMoney = dlgPickMoney

# MallButton
if self.mallButton:
self.mallButton.SetEvent(ui.__mem_func__(self.ClickMallButton))

#if self.DSSButton:
# self.DSSButton.SetEvent(ui.__mem_func__(self.ClickDSSButton))

# Costume Button
if self.costumeButton:
self.costumeButton.SetEvent(ui.__mem_func__(self.ClickCostumeButton))

self.wndCostume = None

#####

## Refresh
self.SetInventoryPage(0)
self.SetEquipmentPage(0)
self.RefreshItemSlot()
self.RefreshStatus()

def Destroy(self):
self.ClearDictionary()

self.dlgPickMoney.Destroy()
self.dlgPickMoney = 0

self.refineDialog.Destroy()
self.refineDialog = 0

self.attachMetinDialog.Destroy()
self.attachMetinDialog = 0

self.tooltipItem = None
self.wndItem = 0
self.wndEquip = 0
self.dlgPickMoney = 0
self.wndMoney = 0
self.wndMoneySlot = 0
self.questionDialog = None
self.mallButton = None
#self.DSSButton = None
self.interface = None

if self.wndCostume:
self.wndCostume.Destroy()
self.wndCostume = 0

self.inventoryTab = []
self.equipmentTab = []

def Close(self):
if None != self.tooltipItem:
self.tooltipItem.HideToolTip()

if self.wndCostume:
self.isOpenedCostumeWindowWhenClosingInventory = self.wndCostume.IsShow() # 인벤토리 창이 닫힐 때 코스츔이 열려 있었는가?
self.wndCostume.Close()

self.OnCloseQuestionDialog()
self.dlgPickMoney.Close()
self.Hide()

def SetInventoryPage(self, page):
self.inventoryPageIndex = page
self.inventoryTab[1-page].SetUp()
self.RefreshBagSlotWindow()

def SetEquipmentPage(self, page):
self.equipmentPageIndex = page
self.equipmentTab[1-page].SetUp()
self.RefreshEquipSlotWindow()

def ClickMallButton(self):
print "click_mall_button"
net.SendChatPacket("/click_mall")

# DSSButton
#def ClickDSSButton(self):
#print "click_dss_button"
# self.interface.ToggleDragonSoulWindow()

def ClickCostumeButton(self):
print "Click Costume Button"
if self.wndCostume:
if self.wndCostume.IsShow():
self.wndCostume.Hide()
else:
self.wndCostume.Show()
else:
self.wndCostume = CostumeWindow(self)
self.wndCostume.Show()

def OpenPickMoneyDialog(self):

if mouseModule.mouseController.isAttached():

attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
if player.SLOT_TYPE_SAFEBOX == mouseModule.mouseController.GetAttachedType():

if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex():
net.SendSafeboxWithdrawMoneyPacket(mouseModule.mouseController.GetAttachedItemCount())
snd.PlaySound("sound/ui/money.wav")

mouseModule.mouseController.DeattachObject()

else:
curMoney = player.GetElk()

if curMoney <= 0:
return

self.dlgPickMoney.SetTitleName(locale.PICK_MONEY_TITLE)
self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
self.dlgPickMoney.Open(curMoney)
self.dlgPickMoney.SetMax(7) # 인벤토리 990000 제한 버그 수정

def OnPickMoney(self, money):
mouseModule.mouseController.AttachMoney(self, player.SLOT_TYPE_INVENTORY, money)

def OnPickItem(self, count):
itemSlotIndex = self.dlgPickMoney.itemGlobalSlotIndex
selectedItemVNum = player.GetItemIndex(itemSlotIndex)
mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, count)

def __InventoryLocalSlotPosToGlobalSlotPos(self, local):

if player.IsEquipmentSlot(local) or player.IsCostumeSlot(local):
return local

return self.inventoryPageIndex*player.INVENTORY_PAGE_SIZE + local

##BONUS_PAGE_START
def __LoadRefreshBonus(self):
self.RefreshBonus()

def RefreshBonus(self):
try:
self.GetChild("Valoare_aparare_sabie").SetText(str(player.GetStatus(69)))
self.GetChild("Valoare_aparare_doua_maini").SetText(str(player.GetStatus(70)))
self.GetChild("Valoare_aparare_pumnal").SetText(str(player.GetStatus(71)))
self.GetChild("Valoare_aparare_arc").SetText(str(player.GetStatus(74)))
self.GetChild("Valoare_aparare_clopot").SetText(str(player.GetStatus(72)))
self.GetChild("Valoare_aparare_evantai").SetText(str(player.GetStatus(73)))
self.GetChild("Valoare_aparare_magie").SetText(str(player.GetStatus(77)))
self.GetChild("Valoare_rezistenta_otrava").SetText(str(player.GetStatus(81)))
self.GetChild("Valoare_rezistenta_razboinic").SetText(str(player.GetStatus(59)))
self.GetChild("Valoare_rezistenta_ninja").SetText(str(player.GetStatus(60)))
self.GetChild("Valoare_rezistenta_sura").SetText(str(player.GetStatus(61)))
self.GetChild("Valoare_rezistenta_saman").SetText(str(player.GetStatus(62)))
self.GetChild("Valoare_lovitura_critica").SetText(str(player.GetStatus(40)))
self.GetChild("Valoare_lovitura_patrunzatoare").SetText(str(player.GetStatus(41)))
self.GetChild("Atac_semi_oameni").SetText(str(player.GetStatus(43)))
self.GetChild("Atac_vampiri").SetText(str(player.GetStatus(47)))
self.GetChild("Atac_diavol").SetText(str(player.GetStatus(48)))
self.GetChild("Atac_razboinic").SetText(str(player.GetStatus(54)))
self.GetChild("Atac_ninja").SetText(str(player.GetStatus(55)))
self.GetChild("Atac_sura").SetText(str(player.GetStatus(56)))
self.GetChild("Atac_saman").SetText(str(player.GetStatus(57)))
self.GetChild("Atac_monstrii").SetText(str(player.GetStatus(53)))
self.GetChild("Aparare_skill").SetText(str(player.GetStatus(123)))
except:
import exception
exception.Abort("InventoryWindow.RefreshBonus.BindObject")
##BONUS_PAGE_END

def RefreshBagSlotWindow(self):
getItemVNum=player.GetItemIndex
getItemCount=player.GetItemCount
setItemVNum=self.wndItem.SetItemSlot

for i in xrange(player.INVENTORY_PAGE_SIZE):
slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i)

itemCount = getItemCount(slotNumber)
# itemCount == 0이면 소켓을 비운다.
if 0 == itemCount:
self.wndItem.ClearSlot(i)
continue
elif 1 == itemCount:
itemCount = 0

itemVnum = getItemVNum(slotNumber)
setItemVNum(i, itemVnum, itemCount)

## 자동물약 (HP: #72723 ~ #72726, SP: #72727 ~ #72730) 특수처리 - 아이템인데도 슬롯에 활성화/비활성화 표시를 위한 작업임 - [hyo]
if constInfo.IS_AUTO_POTION(itemVnum):
# metinSocket - [0] : 활성화 여부, [1] : 사용한 양, [2] : 최대 용량
metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]

if slotNumber >= player.INVENTORY_PAGE_SIZE:
slotNumber -= player.INVENTORY_PAGE_SIZE

isActivated = 0 != metinSocket[0]

if isActivated:
self.wndItem.ActivateSlot(slotNumber)
potionType = 0;
if constInfo.IS_AUTO_POTION_HP(itemVnum):
potionType = player.AUTO_POTION_TYPE_HP
elif constInfo.IS_AUTO_POTION_SP(itemVnum):
potionType = player.AUTO_POTION_TYPE_SP

usedAmount = int(metinSocket[1])
totalAmount = int(metinSocket[2])
player.SetAutoPotionInfo(potionType, isActivated, (totalAmount - usedAmount), totalAmount, self.__InventoryLocalSlotPosToGlobalSlotPos(i))

else:
self.wndItem.DeactivateSlot(slotNumber)

self.wndItem.RefreshSlot()

def RefreshEquipSlotWindow(self):
getItemVNum=player.GetItemIndex
getItemCount=player.GetItemCount
setItemVNum=self.wndEquip.SetItemSlot
for i in xrange(player.EQUIPMENT_PAGE_COUNT):
slotNumber = player.EQUIPMENT_SLOT_START + i
itemCount = getItemCount(slotNumber)
if itemCount <= 1:
itemCount = 0
setItemVNum(slotNumber, getItemVNum(slotNumber), itemCount)

self.wndEquip.RefreshSlot()

if self.wndCostume:
self.wndCostume.RefreshCostumeSlot()

def RefreshItemSlot(self):
self.RefreshBagSlotWindow()
self.RefreshEquipSlotWindow()

def RefreshStatus(self):
money = player.GetElk()
self.wndMoney.SetText(locale.NumberToMoneyString(money))

def SetItemToolTip(self, tooltipItem):
self.tooltipItem = tooltipItem

def SellItem(self):

net.SendShopSellPacketNew(self.sellingSlotNumber, self.questionDialog.count)
snd.PlaySound("sound/ui/money.wav")
self.OnCloseQuestionDialog()

def OnDetachMetinFromItem(self):
if None == self.questionDialog:
return

#net.SendItemUseToItemPacket(self.questionDialog.sourcePos, self.questionDialog.targetPos)
self.__SendUseItemToItemPacket(self.questionDialog.sourcePos, self.questionDialog.targetPos)
self.OnCloseQuestionDialog()

def OnCloseQuestionDialog(self):
if self.questionDialog:
self.questionDialog.Close()

self.questionDialog = None

## Slot Event
def SelectEmptySlot(self, selectedSlotPos):
if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:
return

selectedSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(selectedSlotPos)

if mouseModule.mouseController.isAttached():

attachedSlotType = mouseModule.mouseController.GetAttachedType()
attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()
attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()

if player.SLOT_TYPE_INVENTORY == attachedSlotType:
itemCount = player.GetItemCount(attachedSlotPos)
attachedCount = mouseModule.mouseController.GetAttachedItemCount()
self.__SendMoveItemPacket(attachedSlotPos, selectedSlotPos, attachedCount)

if item.IsRefineScroll(attachedItemIndex):
self.wndItem.SetUseMode(FALSE)

elif player.SLOT_TYPE_PRIVATE_SHOP == attachedSlotType:
mouseModule.mouseController.RunCallBack("INVENTORY")

elif player.SLOT_TYPE_SHOP == attachedSlotType:
net.SendShopBuyPacket(attachedSlotPos)

elif player.SLOT_TYPE_SAFEBOX == attachedSlotType:

if player.ITEM_MONEY == attachedItemIndex:
net.SendSafeboxWithdrawMoneyPacket(mouseModule.mouseController.GetAttachedItemCount())
snd.PlaySound("sound/ui/money.wav")

else:
net.SendSafeboxCheckoutPacket(attachedSlotPos, selectedSlotPos)

elif player.SLOT_TYPE_MALL == attachedSlotType:
net.SendMallCheckoutPacket(attachedSlotPos, selectedSlotPos)

mouseModule.mouseController.DeattachObject()

def SelectItemSlot(self, itemSlotIndex):
if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:
return

itemSlotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(itemSlotIndex)

if mouseModule.mouseController.isAttached():
attachedSlotType = mouseModule.mouseController.GetAttachedType()
attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
attachedItemVID = mouseModule.mouseController.GetAttachedItemIndex()

if player.SLOT_TYPE_INVENTORY == attachedSlotType:
self.__DropSrcItemToDestItemInInventory(attachedItemVID, attachedSlotPos, itemSlotIndex)

mouseModule.mouseController.DeattachObject()

else:

curCursorNum = app.GetCursor()
if app.SELL == curCursorNum:
self.__SellItem(itemSlotIndex)

elif app.BUY == curCursorNum:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.SHOP_BUY_INFO)

elif app.IsPressed(app.DIK_LALT):
link = player.GetItemLink(itemSlotIndex)
ime.PasteString(link)

elif app.IsPressed(app.DIK_LSHIFT):
itemCount = player.GetItemCount(itemSlotIndex)

if itemCount > 1:
self.dlgPickMoney.SetTitleName(locale.PICK_ITEM_TITLE)
self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickItem))
self.dlgPickMoney.Open(itemCount)
self.dlgPickMoney.itemGlobalSlotIndex = itemSlotIndex
#else:
#selectedItemVNum = player.GetItemIndex(itemSlotIndex)
#mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum)

elif app.IsPressed(app.DIK_LCONTROL):
itemIndex = player.GetItemIndex(itemSlotIndex)

if TRUE == item.CanAddToQuickSlotItem(itemIndex):
player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_INVENTORY, itemSlotIndex)
else:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.QUICKSLOT_REGISTER_DISABLE_ITEM)

else:
selectedItemVNum = player.GetItemIndex(itemSlotIndex)
itemCount = player.GetItemCount(itemSlotIndex)
mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, itemCount)

if self.__IsUsableItemToItem(selectedItemVNum, itemSlotIndex):
self.wndItem.SetUseMode(TRUE)
else:
self.wndItem.SetUseMode(FALSE)

snd.PlaySound("sound/ui/pick.wav")

def __DropSrcItemToDestItemInInventory(self, srcItemVID, srcItemSlotPos, dstItemSlotPos):
if srcItemSlotPos == dstItemSlotPos:
return

if item.IsRefineScroll(srcItemVID):
self.RefineItem(srcItemSlotPos, dstItemSlotPos)
self.wndItem.SetUseMode(FALSE)

elif item.IsMetin(srcItemVID):
self.AttachMetinToItem(srcItemSlotPos, dstItemSlotPos)

elif item.IsDetachScroll(srcItemVID):
self.DetachMetinFromItem(srcItemSlotPos, dstItemSlotPos)

elif item.IsKey(srcItemVID):
self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)

elif (player.GetItemFlags(srcItemSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)

elif item.GetUseType(srcItemVID) in self.USE_TYPE_TUPLE:
self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)

else:
#snd.PlaySound("sound/ui/drop.wav")

## 이동시킨 곳이 장착 슬롯일 경우 아이템을 사용해서 장착 시킨다 - [levites]
if player.IsEquipmentSlot(dstItemSlotPos):

## 들고 있는 아이템이 장비일때만
if item.IsEquipmentVID(srcItemVID):
self.__UseItem(srcItemSlotPos)

else:
self.__SendMoveItemPacket(srcItemSlotPos, dstItemSlotPos, 0)
#net.SendItemMovePacket(srcItemSlotPos, dstItemSlotPos, 0)

def __SellItem(self, itemSlotPos):
if not player.IsEquipmentSlot(itemSlotPos):
self.sellingSlotNumber = itemSlotPos
itemIndex = player.GetItemIndex(itemSlotPos)
itemCount = player.GetItemCount(itemSlotPos)

item.SelectItem(itemIndex)
itemPrice = item.GetISellItemPrice()

if item.Is1GoldItem():
itemPrice = itemCount / itemPrice / 5
else:
itemPrice = itemPrice * itemCount / 5

item.GetItemName(itemIndex)
itemName = item.GetItemName()

self.questionDialog = uiCommon.QuestionDialog()
self.questionDialog.SetText(locale.DO_YOU_SELL_ITEM(itemName, itemCount, itemPrice))
self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.SellItem))
self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
self.questionDialog.Open()
self.questionDialog.count = itemCount

def RefineItem(self, scrollSlotPos, targetSlotPos):

scrollIndex = player.GetItemIndex(scrollSlotPos)
targetIndex = player.GetItemIndex(targetSlotPos)

if player.REFINE_OK != player.CanRefine(scrollIndex, targetSlotPos):
return

###########################################################
self.__SendUseItemToItemPacket(scrollSlotPos, targetSlotPos)
#net.SendItemUseToItemPacket(scrollSlotPos, targetSlotPos)
return
###########################################################

###########################################################
#net.SendRequestRefineInfoPacket(targetSlotPos)
#return
###########################################################

result = player.CanRefine(scrollIndex, targetSlotPos)

if player.REFINE_ALREADY_MAX_SOCKET_COUNT == result:
#snd.PlaySound("sound/ui/jaeryun_fail.wav")
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NO_MORE_SOCKET)

elif player.REFINE_NEED_MORE_GOOD_SCROLL == result:
#snd.PlaySound("sound/ui/jaeryun_fail.wav")
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NEED_BETTER_SCROLL)

elif player.REFINE_CANT_MAKE_SOCKET_ITEM == result:
#snd.PlaySound("sound/ui/jaeryun_fail.wav")
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_SOCKET_DISABLE_ITEM)

elif player.REFINE_NOT_NEXT_GRADE_ITEM == result:
#snd.PlaySound("sound/ui/jaeryun_fail.wav")
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_UPGRADE_DISABLE_ITEM)

elif player.REFINE_CANT_REFINE_METIN_TO_EQUIPMENT == result:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_EQUIP_ITEM)

if player.REFINE_OK != result:
return

self.refineDialog.Open(scrollSlotPos, targetSlotPos)

def DetachMetinFromItem(self, scrollSlotPos, targetSlotPos):
scrollIndex = player.GetItemIndex(scrollSlotPos)
targetIndex = player.GetItemIndex(targetSlotPos)

if not player.CanDetach(scrollIndex, targetSlotPos):
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_METIN_INSEPARABLE_ITEM)
return

self.questionDialog = uiCommon.QuestionDialog()
self.questionDialog.SetText(locale.REFINE_DO_YOU_SEPARATE_METIN)
self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.OnDetachMetinFromItem))
self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
self.questionDialog.Open()
self.questionDialog.sourcePos = scrollSlotPos
self.questionDialog.targetPos = targetSlotPos

def AttachMetinToItem(self, metinSlotPos, targetSlotPos):
metinIndex = player.GetItemIndex(metinSlotPos)
targetIndex = player.GetItemIndex(targetSlotPos)

item.SelectItem(metinIndex)
itemName = item.GetItemName()

result = player.CanAttachMetin(metinIndex, targetSlotPos)

if player.ATTACH_METIN_NOT_MATCHABLE_ITEM == result:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_CAN_NOT_ATTACH(itemName))

if player.ATTACH_METIN_NO_MATCHABLE_SOCKET == result:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NO_SOCKET(itemName))

elif player.ATTACH_METIN_NOT_EXIST_GOLD_SOCKET == result:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NO_GOLD_SOCKET(itemName))

elif player.ATTACH_METIN_CANT_ATTACH_TO_EQUIPMENT == result:
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_EQUIP_ITEM)

if player.ATTACH_METIN_OK != result:
return

self.attachMetinDialog.Open(metinSlotPos, targetSlotPos)



def OverOutItem(self):
self.wndItem.SetUsableItem(FALSE)
if None != self.tooltipItem:
self.tooltipItem.HideToolTip()

def OverInItem(self, overSlotPos):
overSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(overSlotPos)
self.wndItem.SetUsableItem(FALSE)

if mouseModule.mouseController.isAttached():
attachedItemType = mouseModule.mouseController.GetAttachedType()
if player.SLOT_TYPE_INVENTORY == attachedItemType:

attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
attachedItemVNum = mouseModule.mouseController.GetAttachedItemIndex()

if self.__CanUseSrcItemToDstItem(attachedItemVNum, attachedSlotPos, overSlotPos):
self.wndItem.SetUsableItem(TRUE)
self.ShowToolTip(overSlotPos)
return

self.ShowToolTip(overSlotPos)


def __IsUsableItemToItem(self, srcItemVNum, srcSlotPos):
"다른 아이템에 사용할 수 있는 아이템인가?"

if item.IsRefineScroll(srcItemVNum):
return TRUE
elif item.IsMetin(srcItemVNum):
return TRUE
elif item.IsDetachScroll(srcItemVNum):
return TRUE
elif item.IsKey(srcItemVNum):
return TRUE
elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
return TRUE
else:
if item.GetUseType(srcItemVNum) in self.USE_TYPE_TUPLE:
return TRUE

return FALSE

def __CanUseSrcItemToDstItem(self, srcItemVNum, srcSlotPos, dstSlotPos):
"대상 아이템에 사용할 수 있는가?"

if srcSlotPos == dstSlotPos:
return FALSE

if item.IsRefineScroll(srcItemVNum):
if player.REFINE_OK == player.CanRefine(srcItemVNum, dstSlotPos):
return TRUE
elif item.IsMetin(srcItemVNum):
if player.ATTACH_METIN_OK == player.CanAttachMetin(srcItemVNum, dstSlotPos):
return TRUE
elif item.IsDetachScroll(srcItemVNum):
if player.DETACH_METIN_OK == player.CanDetach(srcItemVNum, dstSlotPos):
return TRUE
elif item.IsKey(srcItemVNum):
if player.CanUnlock(srcItemVNum, dstSlotPos):
return TRUE

elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
return TRUE

else:
useType=item.GetUseType(srcItemVNum)

if "USE_CLEAN_SOCKET" == useType:
if self.__CanCleanBrokenMetinStone(dstSlotPos):
return TRUE
elif "USE_CHANGE_ATTRIBUTE" == useType:
if self.__CanChangeItemAttrList(dstSlotPos):
return TRUE
elif "USE_ADD_ATTRIBUTE" == useType:
if self.__CanAddItemAttr(dstSlotPos):
return TRUE
elif "USE_ADD_ATTRIBUTE2" == useType:
if self.__CanAddItemAttr(dstSlotPos):
return TRUE
elif "USE_ADD_ACCESSORY_SOCKET" == useType:
if self.__CanAddAccessorySocket(dstSlotPos):
return TRUE
elif "USE_PUT_INTO_ACCESSORY_SOCKET" == useType:
if self.__CanPutAccessorySocket(dstSlotPos, srcItemVNum):
return TRUE;

return FALSE

def __CanCleanBrokenMetinStone(self, dstSlotPos):
dstItemVNum = player.GetItemIndex(dstSlotPos)
if dstItemVNum == 0:
return FALSE

item.SelectItem(dstItemVNum)

if item.ITEM_TYPE_WEAPON != item.GetItemType():
return FALSE

for i in xrange(player.METIN_SOCKET_MAX_NUM):
if player.GetItemMetinSocket(dstSlotPos, i) == constInfo.ERROR_METIN_STONE:
return TRUE

return FALSE

def __CanChangeItemAttrList(self, dstSlotPos):
dstItemVNum = player.GetItemIndex(dstSlotPos)
if dstItemVNum == 0:
return FALSE

item.SelectItem(dstItemVNum)

if not item.GetItemType() in (item.ITEM_TYPE_WEAPON, item.ITEM_TYPE_ARMOR):
return FALSE

for i in xrange(player.METIN_SOCKET_MAX_NUM):
if player.GetItemAttribute(dstSlotPos, i) != 0:
return TRUE

return FALSE

def __CanPutAccessorySocket(self, dstSlotPos, mtrlVnum):
dstItemVNum = player.GetItemIndex(dstSlotPos)
if dstItemVNum == 0:
return FALSE

item.SelectItem(dstItemVNum)

if item.GetItemType() != item.ITEM_TYPE_ARMOR:
return FALSE

if not item.GetItemSubType() in (item.ARMOR_WRIST, item.ARMOR_NECK, item.ARMOR_EAR):
return FALSE

curCount = player.GetItemMetinSocket(dstSlotPos, 0)
maxCount = player.GetItemMetinSocket(dstSlotPos, 1)

if mtrlVnum != constInfo.GET_ACCESSORY_MATERIAL_VNUM(dstItemVNum, item.GetItemSubType()):
return FALSE

if curCount>=maxCount:
return FALSE

return TRUE

def __CanAddAccessorySocket(self, dstSlotPos):
dstItemVNum = player.GetItemIndex(dstSlotPos)
if dstItemVNum == 0:
return FALSE

item.SelectItem(dstItemVNum)

if item.GetItemType() != item.ITEM_TYPE_ARMOR:
return FALSE

if not item.GetItemSubType() in (item.ARMOR_WRIST, item.ARMOR_NECK, item.ARMOR_EAR):
return FALSE

curCount = player.GetItemMetinSocket(dstSlotPos, 0)
maxCount = player.GetItemMetinSocket(dstSlotPos, 1)

ACCESSORY_SOCKET_MAX_SIZE = 3
if maxCount >= ACCESSORY_SOCKET_MAX_SIZE:
return FALSE

return TRUE

def __CanAddItemAttr(self, dstSlotPos):
dstItemVNum = player.GetItemIndex(dstSlotPos)
if dstItemVNum == 0:
return FALSE

item.SelectItem(dstItemVNum)

if not item.GetItemType() in (item.ITEM_TYPE_WEAPON, item.ITEM_TYPE_ARMOR):
return FALSE

attrCount = 0
for i in xrange(player.METIN_SOCKET_MAX_NUM):
if player.GetItemAttribute(dstSlotPos, i) != 0:
attrCount += 1

if attrCount<4:
return TRUE

return FALSE

def ShowToolTip(self, slotIndex):
if None != self.tooltipItem:
self.tooltipItem.SetInventoryItem(slotIndex)

def OnTop(self):
if None != self.tooltipItem:
self.tooltipItem.SetTop()

def OnPressEscapeKey(self):
self.Close()
return TRUE

def UseItemSlot(self, slotIndex):
if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS():
return

slotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(slotIndex)

#if app.ENABLE_DRAGON_SOUL_SYSTEM:
#if self.wndDragonSoulRefine.IsShow():
# self.wndDragonSoulRefine.AutoSetItem((player.INVENTORY, slotIndex), 1)
# return

self.__UseItem(slotIndex)
mouseModule.mouseController.DeattachObject()
self.OverOutItem()

def __UseItem(self, slotIndex):
ItemVNum = player.GetItemIndex(slotIndex)
item.SelectItem(ItemVNum)
if item.IsFlag(item.ITEM_FLAG_CONFIRM_WHEN_USE):
self.questionDialog = uiCommon.QuestionDialog()
self.questionDialog.SetText(locale.INVENTORY_REALLY_USE_ITEM)
self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.__UseItemQuestionDialog_OnAccept))
self.questionDialog.SetCancelEvent(ui.__mem_func__(self.__UseItemQuestionDialog_OnCancel))
self.questionDialog.Open()
self.questionDialog.slotIndex = slotIndex

else:
self.__SendUseItemPacket(slotIndex)
#net.SendItemUsePacket(slotIndex)

def __UseItemQuestionDialog_OnCancel(self):
self.OnCloseQuestionDialog()

def __UseItemQuestionDialog_OnAccept(self):
self.__SendUseItemPacket(self.questionDialog.slotIndex)

if self.questionDialog:
self.questionDialog.Close()
self.questionDialog = None

def __SendUseItemToItemPacket(self, srcSlotPos, dstSlotPos):
# 개인상점 열고 있는 동안 아이템 사용 방지
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.USE_ITEM_FAILURE_PRIVATE_SHOP)
return

net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos)

def __SendUseItemPacket(self, slotPos):
# 개인상점 열고 있는 동안 아이템 사용 방지
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.USE_ITEM_FAILURE_PRIVATE_SHOP)
return

net.SendItemUsePacket(slotPos)

def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount):
# 개인상점 열고 있는 동안 아이템 사용 방지
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
return

net.SendItemMovePacket(srcSlotPos, dstSlotPos, srcItemCount)

##BONUS_PAGE_START
def OnUpdate(self):
if self.isLoaded == 1:
self.__LoadRefreshBonus()
##BONUS_PAGE_END

#def SetDragonSoulRefineWindow(self, wndDragonSoulRefine):
# if app.ENABLE_DRAGON_SOUL_SYSTEM:
# self.wndDragonSoulRefine = wndDragonSoulRefine
EDIT: Am reusit sa introduc butonul in taskbar, insa nu stiu cum sa il fac sa reactioneze.
Am introdus butonul in root/taskbar.py pt cei care sunt interesati :
{
"name" : "SwitchButton",
"type" : "button",

"x" : SCREEN_WIDTH - 178,
"y" : 3 + Y_ADD_POSITION,

"tooltip_text" : "SwitchBot",

"default_image" : ROOT + "TaskBar/Switch_Button_01.sub",
"over_image" : ROOT + "TaskBar/Switch_Button_02.sub",
"down_image" : ROOT + "TaskBar/Switch_Button_03.sub",
},
Daca ma poate ajuta cineva cu o rezolvare o astept cu cea mai mare placere. Multumesc ! Imagine
Ultima oară modificat 28 Mar 2016, 13:39 de către GAU, modificat 1 dată în total.
Imagine
Afișează semnătura
Avatar utilizator
Kid0
Veteran

Veteran
Mesaje: 1420
Membru din: 12 Aug 2015, 13:33
Server: restoria2(ex)
Regat: Shinsoo
Aprecieri: 39  
Mulţumiri: 13  
Discord: Copiază ID
 Contact:
Medalii

Asa il pui din uitaskbar.py,dar functia pt deschidere tio faci si tu.

[ Mesaj scris via Windows Smartphone ] Imagine
Imagine
Imagine
Imagine
Afișează semnătura
Avatar utilizator
GAU
Nivel 1

Nivel 1
Mesaje: 79
Membru din: 20 Ian 2014, 17:54
Server: metin2benz
Regat: Jinno
Aprecieri: 3  
Mulţumiri: 1  
Medalii

Si cum as putea face asta?? Daca poti sa imi dai un exemplu sa pot sa ma orientez. Multumesc!


Am reusit sa introduc butonul in taskbar, insa nu stiu cum sa il fac sa reactioneze.
Am introdus butonul in root/taskbar.py pt cei care sunt interesati :
{
"name" : "SwitchButton",
"type" : "button",

"x" : SCREEN_WIDTH - 178,
"y" : 3 + Y_ADD_POSITION,

"tooltip_text" : "SwitchBot",

"default_image" : ROOT + "TaskBar/Switch_Button_01.sub",
"over_image" : ROOT + "TaskBar/Switch_Button_02.sub",
"down_image" : ROOT + "TaskBar/Switch_Button_03.sub",
},
Daca ma poate ajuta cineva cu o rezolvare o astept cu cea mai mare placere. Multumesc !
[ Mesaj scris via iPhone ] Imagine
Ultima oară modificat 28 Mar 2016, 15:23 de către Stefan, modificat 1 dată în total.
Motiv: mesaje unite
Imagine
Afișează semnătura
Avatar utilizator
GAU
Nivel 1

Nivel 1
Mesaje: 79
Membru din: 20 Ian 2014, 17:54
Server: metin2benz
Regat: Jinno
Aprecieri: 3  
Mulţumiri: 1  
Medalii

up! cineva stie exact un tutorial?
Imagine
Afișează semnătura
Avatar utilizator
GAU
Nivel 1

Nivel 1
Mesaje: 79
Membru din: 20 Ian 2014, 17:54
Server: metin2benz
Regat: Jinno
Aprecieri: 3  
Mulţumiri: 1  
Medalii

Am reusit sa introduc butonul in taskbar, insa nu stiu cum sa il fac sa reactioneze.
Am introdus butonul in root/taskbar.py pt cei care sunt interesati :
{
"name" : "SwitchButton",
"type" : "button",

"x" : SCREEN_WIDTH - 178,
"y" : 3 + Y_ADD_POSITION,

"tooltip_text" : "SwitchBot",

"default_image" : ROOT + "TaskBar/Switch_Button_01.sub",
"over_image" : ROOT + "TaskBar/Switch_Button_02.sub",
"down_image" : ROOT + "TaskBar/Switch_Button_03.sub",
},
Daca ma poate ajuta cineva cu o rezolvare o astept cu cea mai mare placere. Multumesc !
Imagine
Afișează semnătura
Avatar utilizator
GAU
Nivel 1

Nivel 1
Mesaje: 79
Membru din: 20 Ian 2014, 17:54
Server: metin2benz
Regat: Jinno
Aprecieri: 3  
Mulţumiri: 1  
Medalii

Stie cineva?

[ Mesaj scris via iPhone ] Imagine
Imagine
Afișează semnătura
Avatar utilizator
GAU
Nivel 1

Nivel 1
Mesaje: 79
Membru din: 20 Ian 2014, 17:54
Server: metin2benz
Regat: Jinno
Aprecieri: 3  
Mulţumiri: 1  
Medalii

Up! Sa inteleg ca nu stie nimeni? :d

[ Mesaj scris via iPhone ] Imagine
Imagine
Afișează semnătura
Avatar utilizator
GAU
Nivel 1

Nivel 1
Mesaje: 79
Membru din: 20 Ian 2014, 17:54
Server: metin2benz
Regat: Jinno
Aprecieri: 3  
Mulţumiri: 1  
Medalii

up. cineva?
Imagine
Afișează semnătura
Avatar utilizator
GAU
Nivel 1

Nivel 1
Mesaje: 79
Membru din: 20 Ian 2014, 17:54
Server: metin2benz
Regat: Jinno
Aprecieri: 3  
Mulţumiri: 1  
Medalii

Chiar nu stie nimeni cum pot sa fac butonul asta sa reactioneze sa-mi deschida switchul ? Imagine
Imagine
Afișează semnătura
Avatar utilizator
Yahiko
Membru Club

Membru Club
Mesaje: 3865
Membru din: 25 Mai 2015, 18:31
Aprecieri: 0
Mulţumiri: 4857  
Discord: Copiază ID
 Contact:
Medalii

Subiect inactiv. Arhivat.
*Contact Discord: Yahiko#2936
*Doar SMS: 0749592613
*Grup discord: Click
Cu stimă,
Yahiko.

GL & HF
Afișează semnătura
Închis
Răspunsuri
5
Vizualizări
387
Răspunsuri
2
Vizualizări
144
Răspunsuri
6
Vizualizări
232

Înapoi la “Arhivă Probleme şi Întrebări”

  • Informaţie
  • Cine este conectat

    Utilizatori ce ce navighează pe acest forum: Semrush [Bot] și 17 vizitatori