[Only registered and activated users can see links. Click Here To Register...]
Liebe Community,
da der Auftraggeber des Achievementsystems nicht mehr erreichbar ist, habe ich mich entschlossen - bevor es auf meiner Festplatte vergammelt -, das System zu releasen. Seht als Nach-Weihnachts / Silvester-Release ;)
Download im Anhang! ([Only registered and activated users can see links. Click Here To Register...])
Für alle, die eine Python Version unter 2.5 benutzen: Da in der uiachievement.py kurze if-Statements benutzt werden, müsst ihr die Version für unter 2.5 noch extra downloaden und diese statt der anderen nutzen. ([Only registered and activated users can see links. Click Here To Register...])
Einbau - Serverside:
Zuerst ladet ihr die achievementsystem.lua und die achievementsystem_extension.lua in euer Questverzeichnis (ggf. Unterordner/whatever).
Nun tragt ihr in die questlib.lua unten folgendes ein (evtl. den Pfad anpassen):
Anschließend tragt ihr noch diese Befehle in eure quest_functions ein:
Einbau - Clientside:
Ihr packt den heruntergeladenen yiv work-Ordner in ein Archiv (bspw. in ETC) und packt das Archiv.
Nun entpackt ihr euer root-Archiv und fügt dort die uiachievement.py ein.
Anschließend öffnet ihr eure constInfo.py und fügt folgendes ein:
Nun öffnet ihr eure interfacemodule.py und sucht nach def OpenQuestWindow(self, skin, idx): und fügt dort an den Anfang der Funktion folgendes ein:
Als letztes öffnet ihr nun noch die game.py und fügt ganz oben bei den imports diesen import ein
Nun sucht nach dem Konstruktor der GameWindow Klasse (def __init__(self, stream)) und fügt dort, fast am Ende, unter
noch das hinzu:
Nun sucht ihr - immernoch in der game.py - nach def Close(self): und fügt unter
noch das hinzu:
Sucht nun nach def __BuildKeyDict(self): und fügt dort, irgendwo unter onPressKeyDict = {} nochfolgendes hinzu:
Ihr seht hier, dass durch app.DIK_F6 die Taste F6 belegt wird, um das Achievement-Fenster zu öffnen/zu schließen. Falls diese Taste schon vergeben sein sollte, benutzt am besten einfach eine freie F-Taste oder irgendeine andere Taste, die eben noch nicht in Benutzung ist (bspw. X -> app.DIK_X).
Nun sucht ihr nach def __ServerCommand_Build(self): und fügt folgendes in das serverCommandList-Array ein:
Als letztes fügt ihr nun noch am Ende der game.py folgendes ein:
Anpassen der Achievements & des Achievementshops:
Alle Anpassungen finden in der achievementsystem_extension.lua statt!
Ihr findet in Zeile 12 das Array der Items im Achievementshop:
Hier habe ich 4 Items (Schwert+4, Schwert+9, Mönchsplattenpanzer+9 und Eisenplattenpanzer+9) als Beispiele hinzugefügt. Ein Item-Eintrag ist folgendermaßen aufgebaut:
Der Achievementshop ist 8 x 8 Slots groß (8 Zeilen zu je 8 Spalten) und dementsprechend ist auch das Array aufgebaut.
Für die Anpassung der Achievements findet ihr in der unbearbeiteten Datei in Zeile 29 die Definition der Mob-Achievements und in Zeile 41 die Definition der Level-Achievements.
Die Level-Achievements sollten eig. selbsterklärend sein, aber es ist zu beachten, dass sie der Reihe nach geordnet sein müssen, also das Level 20-Achievement folgt dem Level 10 Achievement und nicht umgekehrt.
Aufbau:
Die Mob-Achievements sind ein wenig anders. Ich habe beispielsweise mal 4 Achievements angelegt.
Der Aufbau sieht also folgendermaßen aus:
Ein Mob kann mehrere Achievements haben, diese müssen einfach durch ein Komma getrennt angegeben werden. Der Wildhund hat aktuell beispielsweise 3 Achievements (10 Kills, 25 Kills und 50 Kills). Ein Achievement ist so aufgebaut:
Nun habt ihr schonmal für einen Mob die Achievements eingestellt, es ist aber noch nicht verfügbar. Der Mob muss erst in Zeile 30 für ausgewählte Maps "freigeschalten" werden.
Auf der Map mit Index 1 kann man also die Achievements für die Mobs mit den Vnums 101 & 102 erhalten, auf der Map mit dem Index 21 die Achievements für 101, 102 & 103 und auf der Map mit dem Index 41 die Achievements für 101, 102 & 104.
Achievement-Coupons Quest
Hier noch eine kleine Erweiterung: Diese Quest ermöglicht es euch, Achievement-Coupons hinzuzufügen. Einfach in die Quest-Liste (locale_list / quest_list / etc.) eintragen, die ID's und Werte anpassen und fertig. :)
Ich denke, das sollten nun die meisten hinbekommen, wer dennoch Fragen und/oder Probleme hat, kann natürlich hier im Thread Hilfe suchen.
Special Thanks:
Lee - Because of Brathering
Poccix - HA!
NyBu - Weil darum und Designs
DasSchwarzeT - Bischt du plöd?
JuleZ (aka. x"Kazuki) - Will auch mal in die Special Thanks
Mit freundlichen Grüßen
Yiv
Liebe Community,
da der Auftraggeber des Achievementsystems nicht mehr erreichbar ist, habe ich mich entschlossen - bevor es auf meiner Festplatte vergammelt -, das System zu releasen. Seht als Nach-Weihnachts / Silvester-Release ;)
Download im Anhang! ([Only registered and activated users can see links. Click Here To Register...])
Für alle, die eine Python Version unter 2.5 benutzen: Da in der uiachievement.py kurze if-Statements benutzt werden, müsst ihr die Version für unter 2.5 noch extra downloaden und diese statt der anderen nutzen. ([Only registered and activated users can see links. Click Here To Register...])
| Achievementsystem-Demonstration | |
|
|
|
Einbau - Serverside:
Zuerst ladet ihr die achievementsystem.lua und die achievementsystem_extension.lua in euer Questverzeichnis (ggf. Unterordner/whatever).
Nun tragt ihr in die questlib.lua unten folgendes ein (evtl. den Pfad anpassen):
Code:
dofile("locale/germany/quest/achievementsystem_extension.lua")
Code:
achievement.init achievement.getNextLevelAchievementInfo achievement.nextLevelAchievement achievement.getMobAchievementInfo achievement.increasePoints achievement.getf achievement.setf achievement.login achievement.initLevel achievement.initShop achievement.initMob achievement.buyItem achievement.clientCommunication
Einbau - Clientside:
Ihr packt den heruntergeladenen yiv work-Ordner in ein Archiv (bspw. in ETC) und packt das Archiv.
Nun entpackt ihr euer root-Archiv und fügt dort die uiachievement.py ein.
Anschließend öffnet ihr eure constInfo.py und fügt folgendes ein:
Code:
# YIV WORK: Achievement CQC = 0 CQC_INFO = ""
Code:
# YIV WORK: Achievement if constInfo.CQC == 1: return
Als letztes öffnet ihr nun noch die game.py und fügt ganz oben bei den imports diesen import ein
Code:
import uiAchievement
Code:
self.playerGauge = uiPlayerGauge.PlayerGauge(self) self.playerGauge.Hide()
Code:
# YIV WORK: Achievement self.achievementWindow = uiAchievement.AchievementBoard() self.achievementWindow.Close()
Nun sucht ihr - immernoch in der game.py - nach def Close(self): und fügt unter
Code:
self.ClearDictionary()
Code:
# YIV WORK: Achievement self.achievementWindow.Close() self.achievementWindow = None
Sucht nun nach def __BuildKeyDict(self): und fügt dort, irgendwo unter onPressKeyDict = {} nochfolgendes hinzu:
Code:
# YIV WORK: Achievement onPressKeyDict[app.DIK_F6] = lambda : self.achievementWindow.ToggleVisible()
Nun sucht ihr nach def __ServerCommand_Build(self): und fügt folgendes in das serverCommandList-Array ein:
Code:
# YIV WORK: Achievement "achievement" : self.achievementWindow.HandleAchievementServerCommand, "cqc_start" : self.cqcStart, "cqc_get" : self.cqcGet, "cqc_end" : self.cqcEnd,
Als letztes fügt ihr nun noch am Ende der game.py folgendes ein:
Code:
# YIV WORK: Achievement def cqcStart(self): constInfo.CQC = 1 def cqcGet(self): net.SendQuestInputStringPacket(str(constInfo.CQC_INFO)) def cqcEnd(self): constInfo.CQC_INFO = None constInfo.CQC = 0
Anpassen der Achievements & des Achievementshops:
Alle Anpassungen finden in der achievementsystem_extension.lua statt!
Ihr findet in Zeile 12 das Array der Items im Achievementshop:
Code:
achievement.shop = {
{{14,1,10},{19,1,20},{11209,1,25},{11219,1,30},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
}
Code:
{VNUM, ANZAHL, PREIS}
Für die Anpassung der Achievements findet ihr in der unbearbeiteten Datei in Zeile 29 die Definition der Mob-Achievements und in Zeile 41 die Definition der Level-Achievements.
Die Level-Achievements sollten eig. selbsterklärend sein, aber es ist zu beachten, dass sie der Reihe nach geordnet sein müssen, also das Level 20-Achievement folgt dem Level 10 Achievement und nicht umgekehrt.
Aufbau:
Code:
{LEVEL, ACHIEVEMENTPUNTKE}
Code:
achievement.mob[101] = {{10, 5}, {25, 10}, {50, 15}}
achievement.mob[102] = {{29, 29}}
achievement.mob[103] = {{88, 88}, {1337, 1000}}
achievement.mob[104] = {{99, 99}, {2674, 2000}}
Code:
achievement.mob[VNUM] = {...}
Code:
{KILLS, ACHIEVEMENTPUNKTE}
Code:
achievement.mob['L'] = {
[1] = {101, 102},
[21] = {101, 102, 103},
[41] = {101, 102, 104},
}
Achievement-Coupons Quest
Hier noch eine kleine Erweiterung: Diese Quest ermöglicht es euch, Achievement-Coupons hinzuzufügen. Einfach in die Quest-Liste (locale_list / quest_list / etc.) eintragen, die ID's und Werte anpassen und fertig. :)
Code:
quest achievement_coupons begin
state start begin
when 30093.use or 30094.use or 30095.use or 30096.use begin
local points = ({
[30093] = 25,
[30094] = 50,
[30095] = 100,
[30096] = 200
})[item.get_vnum()]
achievement.increasePoints(points)
item.remove()
end
end
end
Ich denke, das sollten nun die meisten hinbekommen, wer dennoch Fragen und/oder Probleme hat, kann natürlich hier im Thread Hilfe suchen.
Special Thanks:
Lee - Because of Brathering
Poccix - HA!
NyBu - Weil darum und Designs
DasSchwarzeT - Bischt du plöd?
JuleZ (aka. x"Kazuki) - Will auch mal in die Special Thanks
Mit freundlichen Grüßen
Yiv
Unterstützt durch:
[Only registered and activated users can see links. Click Here To Register...][Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...][Only registered and activated users can see links. Click Here To Register...]