da Ich grade etwas Langeweile habe, wollte Ich mal die Methode erklären,
mit welcher .Alessa das Kostümsystem gemacht hat - die Client-Quest-Kommunikation.
Dieses Tutorial wird die Programmiersprachen Lua und Python enthalten.
Fangen wir mal mit dem Python-Teil an:
Als Erstes öffnet ihr die constInfo.py und tragt eine "Variable" ein.
Die Werte, die man dort einträgt, kann man in etwas mit einer Questflag vergleichen.
Ich schreibe einfach mal Costume = 0 rein.
Der Unterschied zu einer Questflag:
Wenn der Client geschlossen wird, erhält der Eintrag wieder seinen Startwert,
bzw. den ursprünglichen Wert.
In diesem Fall wäre der Wert wieder 0.
Danach öffnet Ihr die game.py und sucht nach folgendem Source:
Code:
serverCommandList={
per cmdchat über eine Quest angesprochen werden können.
Ihr geht an's Ende der Liste und fügt in etwa sowas ein:
Code:
"costume" : self.__Costume,
Das macht ihr so:
Code:
def __Costume(self, in):
Es ist relativ das Gleiche, wie ein Pointer (oder auch Zeiger) in anderen Sprachen.
Hinweis: Ein Pointer zeigt auf die Speicheradresse einer Variable/Funktion o.ä .
Das in ist einfach nur ein Parameter, der per cmdchat später übergeben wird.
So.
Die Funktion soll bewirken, dass der constInfo-Eintrag geändert wird,
da dieser später noch gebraucht wird.
So kann man andere Dateien bearbeiten bzw. auf sie zugreifen:
Um es zu verdeutlichen importiere ich die Datei, obwohl es in der game.py unnötig ist,
die constinfo.py zu importieren.
Code:
import constinfo
Ein Beispiel für das Auslesen:
Code:
x = constInfo.Costume
Die Variable x könnten wir jetzt als constInfo-Eintrag für if-Blöcke, Schleifen o.ä verwenden.
Ein Beispiel für das Bearbeiten:
Code:
constInfo.Costume = 0
aber der Eintrag nicht.
Da der constinfo-Eintrag den Wert des übergebenen Paramaters bekommen soll,
sollte die Funktion in etwa so aussehen:
Code:
def __Costume(self, in): import constinfo constInfo.Costume = in
Da es jetzt kein GUI-Tutorial o.ä werden soll, habe ich eins vorgeschrieben,
welches ihr mit F5 öffnen könnt.
Code:
onPressKeyDict[app.DIK_F5] = lambda : self.__costumebutton()
def __costumebutton(self):
self.Board = ui.Board()
self.Board.SetSize(200, 200)
self.Board.SetCenterPosition()
self.Board.Show()
Button1 = ui.Button()
Button1.SetParent(self.Board)
Button1.SetUpVisual("d:/ymir work/ui/public/large_button_01.sub")
Button1.SetOverVisual("d:/ymir work/ui/public/large_button_02.sub")
Button1.SetDownVisual("d:/ymir work/ui/public/large_button_03.sub")
Button1.SetText("Klick")
Button1.SetEvent(self.__buttonfunc)
Button1.SetPosition(100, 50)
Button1.Show()
def __buttonfunc(self):
event.QuestButtonClick(constInfo.Costume)
könnt ihr in dem offiziellen Release nachlesen.
Nun der Lua Teil:
Wir fangen mal damit an, dass beim Login der Questindex (Platz in der questlist)
an die game.py übergeben wird.
Das sieht dann so aus:
Code:
when login begin
cmdchat("costume "..q.getcurrentquestindex())
end
der für diese Methode benötigt wird.
Mit cmdchat("costume") wird die Funktion, die in die serverCommandList
eingetragen wurde, angesprochen.
Durch "..q.getcurrentquestindex() übergibt den Questindex als Parameter.
Als nächsten sprechen wir den Button als "Event" an.
Mit:
Code:
when button or info begin
Als erstes baut man ein Ereignis ein, falls kein Kostüm angelegt ist.
Das siegt dann wie folgt aus:
Code:
if pc.getqf("costume_system_main_active") == 0
and pc.getqf("costume_system_hair_active") == 0 then return end
und der Block wird an dieser Stelle unterbrochen.
Sprich das, was danach kommt, wird nicht mehr ausgeführt.
Als nächstes kommt der Block, in dem definiert wird, was passiert,
wenn ein "Main"-Kostüm (über der Rüstung) angelegt ist.
Dort muss man nur reinschreiben, dass der Mainpart wieder zur Rüstung wechseln soll,
dass man das Kostüm wiederbekommt und das die Flags auf 0 gesetzt werden.
Das sieht dann ca. so aus:
Code:
if pc.getqf("costume_system_main_active") == 1 then
pc.give_item2(pc.getqf("costume_system_main_vnum"), 1)
pc.setqf("costume_system_main_active", 0)
pc.set_part(PART_MAIN, pc.get_armor())
end
pc.get_armor() gibt die Vnum der angelegten Rüstung wider.
Zuletzt noch der Teil, was mit den Frisuren passiert.
Dort wird definiert, dass die Frisur zurückgegeben wird,
die eigentliche Frisur gesetzt wird und, dass die Flags auf 0 gesetzt werden.
Das sollte so aussehen:
Code:
if pc.getqf("costume_system_hair_active") == 1 then
pc.give_item2(pc.getqf("hair_vnum"), 1)
pc.set_part(PART_HAIR, costume_system_read("part_hair_old"))
pc.setqf("costume_system_hair_active", 0)
end
Ich hoffe, ich konnte euch bei der Client-Quest Kommunikation weiterhelfen.
Falls Fragen offen sind, könnt ihr sie mir stellen.
MfG .Remix








