SziasztokEbben a témában szeretnék megosztani veletek két régebben elkészített ún. unalom-projektemet.
Első az egy Felszerelés eldobási panel, a második pedig egy már közismert Ölési statisztikai panel.
Nos az utóbbi, kicsit összetettebb művelet lesz(majd meglátod).
Felszerelés eldobási panel:[SPOILER]
Először is kezdném a tárgyeldobási panellel, melynek használatával elkerülhetőek
a véletlen tárgy eldobások. Az ötlet adójára már nem emlékszem, de van róla egy képem:
(https://board.ddmt2.net/proxy.php?request=http%3A%2F%2Fimagerz.com%2FQE4UWEtvAwMCUV0YFwVR&hash=e25c5df55cc1e54335ef0e9a576d7b04c45f8a65)
Unatkoztam és eleinte csak amolyan hordozható verzióban írtam meg amit a game.py
fájlban mentettem el, majd átírtam úgymond Metin2 nyelvezetűre.
Ezalatt arra gondolok, hogy felhasználtam a kliens PythonScriptLoader-ét.
Tehát így az átirat után már az uiCommon.py fájlban helyezkedik el, mint a többi
felugró ablakok nagy része.
Tulajdonságai:
- Egy kis ablakon belül mutatja a tárgy ikonját.
- Ha ráviszed a kurzort kimutatja a tárgynak a bónuszait.
Na nem húzom tovább a szót, így néz ki:
(https://board.ddmt2.net/proxy.php?request=http%3A%2F%2Fimagerz.com%2FQE4UWEtvAwMCUV0YFgVR&hash=4b5264ee5e9772e56af1ec33340139240c48c505)
(Ha kicsik a képek -> Jobb klick -> Kép megjelenítése)
Használati útmutató:1.) root és uiscript fájlok kibontása.
2.) game.py megnyitás majd keresés a következő funkcióra:
def __DropItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount):
3.) Majd a "dropItemName = item.GetItemName()" alá a következőket(TAB-okra ügyelni!)
dropItemType = item.GetItemType()
dropItemSubType = item.GetItemSubType()
4.) Ezután a következő kódrészt kiegészíteni vagy totálisan lecserélni.
## Dialog
itemDropQuestionDialog = uiCommon.QuestionDialog()
itemDropQuestionDialog.SetText(questionText)
itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg))
itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg))
itemDropQuestionDialog.Open()
itemDropQuestionDialog.dropType = attachedType
itemDropQuestionDialog.dropNumber = attachedItemSlotPos
itemDropQuestionDialog.dropCount = attachedItemCount
self.itemDropQuestionDialog = itemDropQuestionDialog
Erre:
## Dialog_Equipments
if dropItemType in [1, 2] and dropItemSubType in xrange(7):
itemDropQuestionDialog = uiCommon.EquipmentDropQuestion()
itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg))
itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg))
itemDropQuestionDialog.dropType = attachedType
itemDropQuestionDialog.dropNumber = attachedItemSlotPos
itemDropQuestionDialog.dropCount = attachedItemCount
itemDropQuestionDialog.Open(attachedItemSlotPos)
self.itemDropQuestionDialog = itemDropQuestionDialog
## Dialog_Items
else:
itemDropQuestionDialog = uiCommon.QuestionDialog()
itemDropQuestionDialog.SetText(questionText)
itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg))
itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg))
itemDropQuestionDialog.Open()
itemDropQuestionDialog.dropType = attachedType
itemDropQuestionDialog.dropNumber = attachedItemSlotPos
itemDropQuestionDialog.dropCount = attachedItemCount
self.itemDropQuestionDialog = itemDropQuestionDialog
5.) Mentsd el és zárd be. Majd nyisd meg az uicommon.py fájl.
6.) Az import-ok közé vagy alá írd oda a következőt:
import uiToolTip
import player
import item
7.) Ha az import-okkal megvagy, másold be a fájl aljára a következő osztályt:
class EquipmentDropQuestion(ui.ScriptWindow):
BOARD_SIZE_POS = {
1 : 55,
2 : 32,
3 : 0
}
def __init__(self):
ui.ScriptWindow.__init__(self)
self.__CreateDialog()
def __del__(self):
ui.ScriptWindow.__del__(self)
def __CreateDialog(self):
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, "uiscript/equipdropdialog.py")
try:
self.Board = self.GetChild("Board")
self.titleBar = self.GetChild("TitleBar")
self.titleName = self.GetChild("TitleName")
self.itemBoard = self.GetChild("ItemBoard")
self.itemIcon = self.GetChild("ItemIcon")
self.acceptButton = self.GetChild("AcceptButton")
self.cancelButton = self.GetChild("CancelButton")
self.itemToolTip = uiToolTip.ItemToolTip()
except:
import exception
exception.Abort("uiCommon::EquipmentDropQuestion.__CreateDialog.BindObject")
def Open(self, iPos=None):
if None == iPos or iPos >= 90 or iPos < 0:
return
self.SetCenterPosition()
self.SetTop()
self.Show()
self.UpdateBoard(iPos)
def Close(self):
self.ClearDictionary()
self.Board = None
self.titleBar = None
self.titleName = None
self.itemBoard = None
self.itemIcon = None
self.acceptButton = None
self.cancelButton = None
self.itemToolTip = None
self.Hide()
def UpdateBoard(self, iPos):
itemVnum = player.GetItemIndex(iPos)
if 0 == itemVnum:
self.Close()
return
self.itemToolTip.SetInventoryItem(iPos)
item.SelectItem(itemVnum)
self.titleName.SetText(item.GetItemName())
(iw, ih) = item.GetItemSize()
self.itemBoard.SetSize(0, ih*32+24)
self.itemBoard.Show()
self.itemIcon.LoadImage(item.GetIconImageFileName())
self.itemIcon.SetPosition(16, 16)
self.itemIcon.Show()
(bw, bh) = self.GetWidth(), self.GetHeight() - self.BOARD_SIZE_POS[ih]
self.SetSize(bw, bh)
self.Board.SetSize(bw, bh)
self.SetCenterPosition()
self.UpdateRect()
self.acceptButton.SetPosition(-40, 165 - self.BOARD_SIZE_POS[ih])
self.acceptButton.Show()
self.cancelButton.SetPosition(40, 165 - self.BOARD_SIZE_POS[ih])
self.cancelButton.Show()
def SAFE_SetAcceptEvent(self, event):
self.acceptButton.SAFE_SetEvent(event)
def SAFE_SetCancelEvent(self, event):
self.cancelButton.SAFE_SetEvent(event)
def SetAcceptEvent(self, event):
self.acceptButton.SetEvent(event)
def SetCancelEvent(self, event):
self.titleBar.SetCloseEvent(event)
self.cancelButton.SetEvent(event)
def SetAcceptText(self, text):
self.acceptButton.SetText(text)
def SetCancelText(self, text):
self.cancelButton.SetText(text)
def OnUpdate(self):
if TRUE == self.itemIcon.IsIn():
self.itemToolTip.Show()
else:
self.itemToolTip.Hide()
def OnPressEscapeKey(self):
self.Close()
return TRUE
8.) Ha megvan, mentsd el és zárd be.
9.) Következő lépésként tedd az "equipdropdialog.py" fájl a kicsomagolt uiscript mappába.
10.) Ha megvolt írd bele az uiscript_pack.xml fájlba:
<File archivedPath="uiscript/equipdropdialog.py" type="2"><![CDATA[Source\uiscript\equipdropdialog.py]]></File>
11.) Most már nincs más teendő, mint a becsomagolás. cmd> m2 root_pack.xml uiscript_pack.xml
(Egyszerre is ellehet végezni a becsomagolásokat szóközzel ellátott xml megadással)
Biztos ami biztos csatoltam egy archív fájl, amiben benne vannak fájlok érintett területei, hogy
lásd hogyan is néz ki, illetve hogyan kéne berakni.
[/SPOILER]
Ölési statisztikai panel:[SPOILER]
Nos ha ehhez leírást készítenék, hogy hogyan kell betenni a kliensbe 24.000 karaktert is meghaladná
valószínűleg, ezért mellékeltem a csatolt fájlban minden érintett fájlt, illetve még amolyan
összehasonlíthatósági fájlokat, amik KR fájlok, ezért is és más okokból kifolyólag sem
ajánlott a fájlok felülírása(!). A letöltésben találsz egy ReadMe.ini fájlt ehhez a panelhez, abban
van még egy kis meglepi is :D, amit ide nem írok már ki. Aki akar készíthet hozzá egy részletesebb
leírást a berakásról, annak ellenére, hogy minden érthető a letöltésben.
Azt azért megmutatom, hogy hogyan is néz ki, nehogy látatlanba szedd le:
(https://board.ddmt2.net/proxy.php?request=http%3A%2F%2Fimagerz.com%2FQE4UWEtvAwMCUV0YGQVR&hash=8590a53ef6e2e831db1600c23a901bf3ebce40f3)
[/SPOILER]
Nos ennyi lett volna.
Ha esetleg valahol elírtam volna valamit, akkor azt jelezd nekem PM (http://metin2hungary.net/index.php?action=pm;sa=send;u=15513)-ben.
Ha netán elakadsz a beüzemeltetésben vagy esetleg nem megy akkor ---> Segítség(!) (http://metin2hungary.net/index.php?action=post;board=42.0)
Kicsomagolás --> Katt (http://metin2hungary.net/index.php/topic,81444.msg532937.html#msg532937)