[R] EQ-DropDlg | KillGUI

Indította [VIP]P3NG3R, 2013-10-16, 08:25:40

Sziasztok

Ebben 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:


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:
(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:


[/SPOILER]

Nos ennyi lett volna.
Ha esetleg valahol elírtam volna valamit, akkor azt jelezd nekem PM-ben.
Ha netán elakadsz a beüzemeltetésben vagy esetleg nem megy akkor ---> Segítség(!)
Kicsomagolás --> Katt