|
You last visited: Today at 10:59
Advertisement
[Python-Release] Inventory Bonus Dialog
Discussion on [Python-Release] Inventory Bonus Dialog within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.
03/09/2014, 12:57
|
#91
|
elite*gold: 0
Join Date: Oct 2011
Posts: 35
Received Thanks: 1
|
Hi , can someone add this bonus dialog to my client files please ? ?
Here is my Uiinventory.py:
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
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.LoadObje ct")
try:
wndEquip = self.GetChild("CostumeSlot")
self.GetChild("TitleBar").SetCloseEvent(ui.__mem_f unc__(self.Close))
except:
import exception
exception.Abort("CostumeWindow.LoadWindow.BindObje ct")
## Equipment
wndEquip.SetOverInItemEvent(ui.__mem_func__(self.w ndInventory.OverInItem))
wndEquip.SetOverOutItemEvent(ui.__mem_func__(self. wndInventory.OverOutItem))
wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__( self.wndInventory.UseItemSlot))
wndEquip.SetUseSlotEvent(ui.__mem_func__(self.wndI nventory.UseItemSlot))
wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(s elf.wndInventory.SelectEmptySlot))
wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(se lf.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 __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.LoadOb ject")
try:
wndItem = self.GetChild("ItemSlot")
wndEquip = self.GetChild("EquipmentSlot")
self.GetChild("TitleBar").SetCloseEvent(ui.__mem_f unc__(self.Close))
self.wndMoney = self.GetChild("Money")
self.wndMoneySlot = self.GetChild("Money_Slot")
self.mallButton = self.GetChild2("MallButton")
self.costumeButton = self.GetChild2("CostumeButton")
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.BindOb ject")
## Item
wndItem.SetSelectEmptySlotEvent(ui.__mem_func__(se lf.SelectEmptySlot))
wndItem.SetSelectItemSlotEvent(ui.__mem_func__(sel f.SelectItemSlot))
wndItem.SetUnselectItemSlotEvent(ui.__mem_func__(s elf.UseItemSlot))
wndItem.SetUseSlotEvent(ui.__mem_func__(self.UseIt emSlot))
wndItem.SetOverInItemEvent(ui.__mem_func__(self.Ov erInItem))
wndItem.SetOverOutItemEvent(ui.__mem_func__(self.O verOutItem))
## Equipment
wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(s elf.SelectEmptySlot))
wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(se lf.SelectItemSlot))
wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__( self.UseItemSlot))
wndEquip.SetUseSlotEvent(ui.__mem_func__(self.UseI temSlot))
wndEquip.SetOverInItemEvent(ui.__mem_func__(self.O verInItem))
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.Op enPickMoneyDialog))
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.Clic kMallButton))
# Costume Button
if self.costumeButton:
self.costumeButton.SetEvent(ui.__mem_func__(self.C lickCostumeButton))
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
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")
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.mou seController.GetAttachedItemCount())
snd.PlaySound("sound/ui/money.wav")
mouseModule.mouseController.DeattachObject()
else:
curMoney = player.GetElk()
if curMoney <= 0:
return
self.dlgPickMoney.SetTitleName(locale.PICK_MONEY_T ITLE)
self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(s elf.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
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)
if itemCount <= 1:
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(m oney))
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.s ourcePos, 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(select edSlotPos)
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.mou seController.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(itemSl otIndex)
if mouseModule.mouseController.isAttached():
attachedSlotType = mouseModule.mouseController.GetAttachedType()
attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber( )
attachedItemVID = mouseModule.mouseController.GetAttachedItemIndex()
if player.SLOT_TYPE_INVENTORY == attachedSlotType:
self.__DropSrcItemToDestItemInInventory(attachedIt emVID, 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_TI TLE)
self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(s elf.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_ITE M(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_S EPARATE_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(overSl otPos)
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(slotIn dex)
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_REALL Y_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.slotI ndex)
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)
And here is inventorywindow.py:
import uiScriptLocale
EQUIPMENT_START_INDEX = 90
window = {
"name" : "InventoryWindow",
## 600 - (width + żŔ¸ĄÂĘŔ¸·Î şÎĹÍ ¶çżě±â 24 px)
"x" : SCREEN_WIDTH - 176,
"y" : SCREEN_HEIGHT - 37 - 565,
"style" : ("movable", "float",),
"width" : 176,
"height" : 565,
"children" :
(
{
"name" : "board",
"type" : "board",
"style" : ("attach",),
"x" : 0,
"y" : 0,
"width" : 176,
"height" : 565,
"children" :
(
## Title
{
"name" : "TitleBar",
"type" : "titlebar",
"style" : ("attach",),
"x" : 8,
"y" : 7,
"width" : 161,
"color" : "yellow",
"children" :
(
{ "name":"TitleName", "type":"text", "x":77, "y":3, "text":uiScriptLocale.INVENTORY_TITLE, "text_horizontal_align":"center" },
),
},
## Equipment Slot
{
"name" : "Equipment_Base",
"type" : "expanded_image",
"x" : 10,
"y" : 33,
"image" : "d:/ymir work/ui/game/windows/equipment_base.sub",
"children" :
(
{
"name" : "EquipmentSlot",
"type" : "slot",
"x" : 3,
"y" : 3,
"width" : 150,
"height" : 182,
"slot" : (
{"index":EQUIPMENT_START_INDEX+0, "x":39, "y":37, "width":32, "height":64},
{"index":EQUIPMENT_START_INDEX+1, "x":39, "y":2, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+2, "x":39, "y":145, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+3, "x":75, "y":67, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+4, "x":3, "y":3, "width":32, "height":96},
{"index":EQUIPMENT_START_INDEX+5, "x":114, "y":84, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+6, "x":114, "y":52, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+7, "x":2, "y":113, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+8, "x":75, "y":113, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+9, "x":114, "y":2, "width":32, "height":32},
{"index":EQUIPMENT_START_INDEX+10, "x":75, "y":35, "width":32, "height":32},
),
},
## Dragon Soul Button
{
"name" : "DSSButton",
"type" : "button",
"x" : 114,
"y" : 120,
"tooltip_text" : uiScriptLocale.TASKBAR_DRAGON_SOUL,
"default_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_01.tga",
"over_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_02.tga",
"down_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_03.tga",
},
## MallButton
{
"name" : "MallButton",
"type" : "button",
"x" : 118,
"y" : 154,
"tooltip_text" : uiScriptLocale.MALL_TITLE,
"default_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_01.tga",
"over_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_02.tga",
"down_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_03.tga",
},
## CostumeButton
{
"name" : "CostumeButton",
"type" : "button",
"x" : 78,
"y" : 5,
"tooltip_text" : uiScriptLocale.COSTUME_TITLE,
"default_image" : "d:/ymir work/ui/game/taskbar/costume_Button_01.tga",
"over_image" : "d:/ymir work/ui/game/taskbar/costume_Button_02.tga",
"down_image" : "d:/ymir work/ui/game/taskbar/costume_Button_03.tga",
},
{
"name" : "Equipment_Tab_01",
"type" : "radio_button",
"x" : 86,
"y" : 161,
"default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub",
"children" :
(
{
"name" : "Equipment_Tab_01_Print",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "I",
},
),
},
{
"name" : "Equipment_Tab_02",
"type" : "radio_button",
"x" : 86 + 32,
"y" : 161,
"default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub",
"children" :
(
{
"name" : "Equipment_Tab_02_Print",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "II",
},
),
},
),
},
{
"name" : "Inventory_Tab_01",
"type" : "radio_button",
"x" : 10,
"y" : 33 + 191,
"default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
"tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_1,
"children" :
(
{
"name" : "Inventory_Tab_01_Print",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "I",
},
),
},
{
"name" : "Inventory_Tab_02",
"type" : "radio_button",
"x" : 10 + 78,
"y" : 33 + 191,
"default_image" : "d:/ymir work/ui/game/windows/tab_button_large_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/tab_button_large_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/tab_button_large_03.sub",
"tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_2,
"children" :
(
{
"name" : "Inventory_Tab_02_Print",
"type" : "text",
"x" : 0,
"y" : 0,
"all_align" : "center",
"text" : "II",
},
),
},
## Item Slot
{
"name" : "ItemSlot",
"type" : "grid_table",
"x" : 8,
"y" : 246,
"start_index" : 0,
"x_count" : 5,
"y_count" : 9,
"x_step" : 32,
"y_step" : 32,
"image" : "d:/ymir work/ui/public/Slot_Base.sub"
},
## Print
{
"name":"Money_Slot",
"type":"button",
"x":8,
"y":28,
"horizontal_align":"center",
"vertical_align":"bottom",
"default_image" : "d:/ymir work/ui/public/parameter_slot_05.sub",
"over_image" : "d:/ymir work/ui/public/parameter_slot_05.sub",
"down_image" : "d:/ymir work/ui/public/parameter_slot_05.sub",
"children" :
(
{
"name":"Money_Icon",
"type":"image",
"x":-18,
"y":2,
"image":"d:/ymir work/ui/game/windows/money_icon.sub",
},
{
"name" : "Money",
"type" : "text",
"x" : 3,
"y" : 3,
"horizontal_align" : "right",
"text_horizontal_align" : "right",
"text" : "123456789",
},
),
},
),
},
),
}
|
|
|
04/26/2015, 11:30
|
#92
|
elite*gold: 0
Join Date: Jul 2009
Posts: 19
Received Thanks: 0
|
0426 12:29:37095 :: Failed to load script file : locale/tr/ui/InventoryWindow.py
0426 12:29:37133 ::
ui.py(line:2769) LoadScriptFile
system.py(line:197) execfile
system.py(line:168) Run
locale/tr/ui/InventoryWindow.py(line:6) ?
LoadScriptFile!!!!!!!!!!!!!! - exceptions.NameError:name 'MIDDLE_VALUE_FILE' is not defined
0426 12:29:37133 :: ================================================== ================================================== ========
0426 12:29:37133 :: Abort!!!!
0426 12:29:37135 ::
uiInventory.py(line:293) __LoadWindow
ui.py(line:2786) LoadScriptFile
exception.py(line:36) Abort
InventoryWindow.LoadWindow.LoadObject - exceptions.SystemExit:
0426 12:29:37135 :: ================================================== ================================================== ========
0426 12:29:37135 :: Abort!!!!
|
|
|
 |
|
Similar Threads
|
[Python-Modul]EXP-Donator (kompatibel mit Python Loader)
11/23/2013 - Metin2 Hacks, Bots, Cheats, Exploits & Macros - 27 Replies
Moin,
da man mich danach gefragt hat und ich sowieso mal ein Beispiel für die Benutzung meines Python Loaders veröffentlichen wollte, habe ich die Gelegenheit genutzt und euch eben einen EXP-Spendebot geschrieben.
Man kann ihn einfach mit dem oben verlinkten Python Module Loader laden und ihn mit F5 aktivieren/deaktivieren.
Sobald ihr mehr als 99 Erfahrungspunkte habt (man kann nur in 100er Schritten spenden), werden alle Erfahrungspunkte an eure Gilde gespendet.
Wer Lust hat und...
|
[Python Release]Bonusswitcher v1.1
02/09/2013 - Metin2 PServer Guides & Strategies - 303 Replies
Habe neulich etwas recht altes wieder auf meinem Rechner bei Aufräumarbeiten gefunden, meinen alten Switchbot v1.1.
Da ich inzwischen meine Version 2.0 habe und somit die alte überhaupt nicht mehr brauchen kann und von meinem Rechner löschen werde nach dem Release, stelle ich ihn nun public(unter anderem dank dem positiven Einfluss xCPx's Abganges =) ).
Das Script war noch eines meiner ersten Scripts überhaupt, welches nicht nur Modifizierungen von Orginal Scripts waren.
Hab gerade eben...
|
[Python-Release]All Pm log
04/23/2012 - Metin2 PServer Guides & Strategies - 6 Replies
This is a very simple thing, maybe to be used in combination with another.I want them in a folder called "log" are written all pm that i receive.
That said, it acts in a simple, well follow the steps:
1) Create a folder "log" in the directory of the client.
2) Search: def OnRecvWhisper
3)Replace this : def OnRecvWhisper(self, mode, name, line):
if mode == chat.WHISPER_TYPE_GM:
self.interface.RegisterGameMasterName(name)
chat.AppendWhisper(mode, name,...
|
[Python Release]Bonusswitcher v1.1<---- LOL?
01/28/2012 - Metin2 Private Server - 4 Replies
Hey... ich kapiere das nicht...
Wen ich das Downloade sind da 2 Ordner root und uiscript
was muss ich dan machen? LoL spiele auf Pandora2...
|
[Release!]NPC Dialog Creator!
07/30/2011 - CO2 PServer Guides & Releases - 11 Replies
NPC Creator
Credits:
xBlackPlaug3x For the Console Code ( I had permission to use the code and release after I got finished.)
drakejoe67 For help when needed
Me(FatalAddiction/xTwiztedKidx) Making GUI and what not.
Do NOT post this on any other forum without my permission.
The source coding will not be given at this time.
Pictures Below. (Click Spoiler.)
|
All times are GMT +1. The time now is 11:00.
|
|