[Release / HowTo] Einstellungsverwaltung von Quests (ohne /reload q ladbar)

02/16/2016 20:09 rollback#1
Vorwort:
Dieses Release richtet sich eher an die etwas erfahrenen Quester. Es sollten mindestens Grundlegende Kenntnisse verhanden sein.
Wofür das ganze?:
Mit diesem "System" könnt ihr viele Dinge eurer Quests verwalten und auch während der Server online ist das ganze neuladen. Und das ohne /reload q und den damit verbundenen Problemen!
Es kann z.B. die Dropchance eines Items geändert werden, komplette Dungeons deaktiviert werden und vieles mehr.

Einbau:
Um das ganze nutzen zu können müsst ihr zunächst folgende Dateien speichern:Nun öffnet ihr die questlib.lua (im Questordner) und fügt ganz unten die 3 Funktionen untereinander ein.

Anschließend speichert ihr die [Only registered and activated users can see links. Click Here To Register...] als neue Datei auf eurem Server, am besten im Questordner.
ACHTUNG!: DIE DATEI IST KEINE QUEST UND MUSS NICHT IN DIE LOCALE_LIST EINGETRAGEN WERDEN!

Nun schreibt ihr ganz unten in die questlib.lua (UNTER die eben eingefügten Funktionen) folgenden Code:
Code:
dofile("<HIER PFAD ZUR EBEN HOCHGELADENEN DATEI EINFÜGEN>")
Jetzt ist das Herzstück auch schon eingebaut. Es fehlt nurnoch die Quest zum neuladen der Einstellungsdateien:
[Only registered and activated users can see links. Click Here To Register...]
Diese wird wie jede normale Quest hochgeladen und auch in die locale_list eingetragen. Um einem Charakter die Rechte zum neuladen zu geben müsst ihr die Namen in der Quest im Table "allowList" eintragen. Hier ein Beispiel mit 2 Charakteren:
Code:
		function hasReloadRight()
			local allowList = {
				"Sensi",
				"YivAkaFagLelele",
			}
			
			return table.inList(allowList, pc.get_name())
		end

Benutzung:
Erstellen einer Settings-Datei:
Wenn ihr das ganze nun für eine eurer Quests nutzen wollt müsst ihr zunächst eine settings Datei erstellen. Ich nenne sie immer <questname>_settings.lua, die Namensgebung ist aber letztendlich euch überlassen.
Jede Settings-Datei muss einen Table returnen und über den Key "RELOAD" verfügen, der beim initialisieren des Tables auf die aktuelle Zeit gesetzt wird.

Ein Beispiel für eine Settings-Datei:
Code:
return {
	RELOAD = get_global_time(),
}
ACHTUNG!: DIE DATEI IST KEINE QUEST UND MUSS NICHT IN DIE LOCALE_LIST EINGETRAGEN WERDEN!

Alles weitere, was ihr nun in diesen Table schreibt, werdet ihr später in der Quest auslesen können.

Wenn die Datei erstellt ist, öffnet ihr die questsettings.lua (die Datei, die in der questlib.lua per dofile geladen wird) und tragt eure neue Settings-Datei im QUESTS-Table ein:
Code:
QUESTS = {
	BIO =			{name = "Bio",					path = get_locale_base_path() .. "/quest/Bio/bio_settings.lua",				__SETTING_TABLE = nil},
}
Der Key (in meinem Fall "BIO") ist nur für den leichteren Zugriff.
  • name: einfacher Name für die Quest. Er wird in der reload_settings-Quest angezeigt
  • path: Pfad zur Settings-Datei
  • __SETTING_TABLE: Immer einfach auf nil setzen, kann auch weggelassen werden.


Verbinden einer Settings-Datei mit einer Quest:
Um die eben erstellte Settings-Datei mit einer Quest zu verbinden machen wir uns eine Funktion innerhalb der Quest, um den Settings-Table zu bekommen. Ich nenne diese Funktion immer getSettings(), aber auch hier ist der Name natürlich euch überlassen.
Diese Funktion muss folgenden Inhalt haben:
[code]function getSettings()
return _G.QUEST_SETTINGS.GET(_G.QUEST_SETTINGS.QUESTS.BIO )
end

"BIO" muss hier am Ende immer der Key sein, den ihr vorher in der questsettings.lua definiert habt.
ACHTUNG!: ES IST MÖGLICH, DASS VON DER FUNKTION nil RETURNED WIRD!

Wenn die Funktion nun in der Quest angelegt wurde, kann über diese Funktion immer der Settings-Table geholt werden.


Kleines Beispiel:
myquest_settings.lua:
Code:
return {
	RELOAD = get_global_time(),
	
	START_YANG = 500,
	WELCOME_MSG = function()
		return string.format("Wir begrüßen %s auf ServerMT2", pc.get_name())
	end,
}
myquest.lua:
Code:
quest myquest begin
	state start begin
		when login begin
			local settings myquest.getSettings()
			
			pc.change_gold(settings.START_YANG)
			notice_all(settings.WELCOME_MSG())
			
			set_state("__COMPLETE__")
		end
		
		function getSettings()
			return _G.QUEST_SETTINGS.GET(_G.QUEST_SETTINGS.QUESTS.MY_QUEST)
		end
	end
	
	state __COMPLETE__
	end
end

Downloads im Überblick:

Special Thanks:
[Only registered and activated users can see links. Click Here To Register...]
02/16/2016 20:12 Yiv#2
Ist sehr nützlich und bei uns ja bereits in Betrieb. :)

Releast ja doch sinnvollen Kram :P

MfG
02/16/2016 20:14 Aze /..#3
Geiler shit
02/16/2016 20:30 .K0rí#4
Krass alter echt cool sensi wirklich wow wuhuu!

Bist ja fast so cool wie der Yiv
02/16/2016 20:32 DasSchwarzeT#5
wo bleibt mein special thanks du undankbarer hamburger
02/16/2016 20:45 .Ryuzaki™#6
Geiler Kram, thx haste
02/16/2016 21:17 INF|Anon-X#7
Läuft bei dir ^^ Collision sguut ?

greetz

Anon-X
02/17/2016 00:03 .Achi'#8
Und Morgen nennt er sich Yivmastah12000. :o
Aufjedenfall etwas nützliches, danke dir. :p
02/18/2016 07:57 Noa_#9
Super Release. =)

Auf die Idee muss man erstmal kommen Datensätze zu importieren.^^
jedoch ersetzt dein System nicht wirklich die /reload q funktion, man sollte es nur benutzen wenn die Quest auch komplett fertig ist.
02/18/2016 16:03 Yiv#10
Quote:
Originally Posted by Noa_ View Post
Super Release. =)

Auf die Idee muss man erstmal kommen Datensätze zu importieren.^^
jedoch ersetzt dein System nicht wirklich die /reload q funktion, man sollte es nur benutzen wenn die Quest auch komplett fertig ist.
Naja, es geht darum, Einstellungsmöglichkeiten neu zu laden, ohne "reload q" zu nutzen, den Titel nicht falsch verstehen :D Grundsätzlich hast du aber recht, aber das steht ja auch nirgends :)

MfG
02/18/2016 22:31 Rofelmau#11
Hast mal versucht das ganze in eine setting datei zu packen? kann man doch bestimmt ne tabelle die zuweisung zu den quesyts machen, dann müsste man wenigstens nicht zu jeder quest ne neue datei anlegen.

Ist ganz cool aber wie ja auch schon gesagt ist es ja "nur" nutzbar für eigentlich konstante variablen die ich dann ändern möchte, drop chancen für quest drops,
aber trotzdem gutes release.
02/19/2016 08:13 rollback#12
Quote:
Originally Posted by Rofelmau View Post
Hast mal versucht das ganze in eine setting datei zu packen? kann man doch bestimmt ne tabelle die zuweisung zu den quesyts machen, dann müsste man wenigstens nicht zu jeder quest ne neue datei anlegen.

Ist ganz cool aber wie ja auch schon gesagt ist es ja "nur" nutzbar für eigentlich konstante variablen die ich dann ändern möchte, drop chancen für quest drops,
aber trotzdem gutes release.
Zu 1.
Ist natürlich auch ohne Probleme möglich, kann man mit der Information in meinem Release auch ohne weiteres umsetzen, allerdings würde dadurch meiner Meinung nach die Übersicht verloren gehen.

Zu 2.
Man kann auch variable Werte hinterlegen, also Abhängigkeiten zum Spielerlevel etc.
Man muss nur drauf kommen wie ;) vielleicht mache ich dazu später noch ein Beispiel
02/20/2016 18:47 ThunderGoTT#13
Vielen Dank für deinen release,

Derzeit sehe ich nur gute, nützliche Sachen von dir :)

Ich persönlich finde, das sogar unerfahrene Quester sowas einbauen & auch nutzen können^^.
Das ganze zu verstehen ist ziemlich simple.

Vielen Dank

LG: Thunder
02/20/2016 21:28 MQTT.#14
Super praktisch, wird definitiv einen Nutzen finden.
07/11/2017 17:52 MaLLaH95#15
brauche die Links