[Release]Achievement system

  • Liebe Community,
    ich möchte euch das Alchievement system Releasen .


    Vorab das ganze ist von Yiv!


    Bitte melden Sie sich an, um diesen Link zu sehen.


    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.(Bitte melden Sie sich an, um diesen Link zu sehen.)


    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.luaunten folgendes ein (evtl. den Pfad anpassen):

    Code
    1. dofile("locale/germany/quest/achievementsystem_extension.lua")

    Anschließend tragt ihr noch diese Befehle in eure quest_functionsein:








    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 dieuiachievement.py ein.


    Anschließend öffnet ihr eure constInfo.py und fügt folgendes ein:




    Code
    1. <strong># YIV WORK: Achievement
    2. <strong>CQC = 0
    3. <strong>CQC_INFO = ""


    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:






    Code
    1. # YIV WORK: Achievement
    2. if constInfo.CQC == 1:
    3. return




    Als letztes öffnet ihr nun noch diegame.py und fügt ganz oben bei den imports diesen import ein


    Code
    1. import uiAchievement


    Nun sucht nach dem Konstruktor der GameWindow Klasse (def __init__(self, stream)) und fügt dort, fast am Ende, unter



    Code
    1. self.playerGauge = uiPlayerGauge.PlayerGauge(self)
    2. self.playerGauge.Hide()

    noch das hinzu:






    Code
    1. # YIV WORK: Achievement
    2. self.achievementWindow = uiAchievement.AchievementBoard()
    3. self.achievementWindow.Close()





    Nun sucht ihr - immernoch in der game.py - nach def Close(self): und fügt unter


    Code
    1. self.ClearDictionary()

    noch das hinzu:



    Code
    1. # YIV WORK: Achievement
    2. self.achievementWindow.Close()
    3. self.achievementWindow = None


    Sucht nun nach def __BuildKeyDict(self): und fügt dort, irgendwo unteronPressKeyDict = {} nochfolgendes hinzu:



    Code
    1. <strong> # YIV WORK: Achievement
    2. <strong> onPressKeyDict[app.DIK_F6] = lambda : self.achievementWindow.ToggleVisible()


    Ihr seht hier, dass durch app.DIK_F6die 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:


    Code
    1. # YIV WORK: Achievement
    2. "achievement" : self.achievementWindow.HandleAchievementServerCommand,
    3. "cqc_start" : self.cqcStart,
    4. "cqc_get" : self.cqcGet,
    5. "cqc_end" : self.cqcEnd,


    Als letztes fügt ihr nun noch am Ende der game.py folgendes ein:





    Anpassen der Achievements & des Achievementshops:
    Alle Anpassungen finden in derachievementsystem_extension.luastatt!
    Ihr findet in Zeile 12 das Array der Items im Achievementshop:


    Code
    1. achievement.shop = {
    2. {{14,1,10},{19,1,20},{11209,1,25},{11219,1,30},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
    3. {{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
    4. {{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
    5. {{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
    6. {{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
    7. {{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
    8. {{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
    9. {{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
    10. }


    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:




    Code
    1. {VNUM, ANZAHL, PREIS}


    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 unbearbeitetenDatei 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
    1. {LEVEL, ACHIEVEMENTPUNTKE}

    Die Mob-Achievements sind ein wenig anders. Ich habe beispielsweise mal 4 Achievements angelegt.


    Code
    1. 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}}

    Der Aufbau sieht also folgendermaßen aus:





    Code
    1. <strong>achievement.mob[VNUM] = {...}



    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:





    Code
    1. <strong>{KILLS, ACHIEVEMENTPUNKTE}



    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.



    Code
    1. <strong>achievement.mob['L'] = { [1] = {101, 102}, [21] = {101, 102, 103}, [41] = {101, 102, 104}, }


    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. Bitte melden Sie sich an, um dieses Bild zu sehen.

    Downloadlink:


    Ich Wünsche euch viel spaß mit dem System!
    Das Ganze System ist von Yiv !


    Mfg Destryus

    5 Mal editiert, zuletzt von Destryus ()

  • Dieses Thema enthält 19 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind, bitte registrieren Sie sich oder melden Sie sich an um diese lesen zu können.