| Der Scoremaster |
| =============== |
| |
| BESCHREIBUNG |
| |
| Funktion: Verwaltung der Erstkill-Stufenpunkte, die fuer das Toeten von |
| NPCs vergeben werden. Fuer alle NPCs, die mehr als 200000 XP |
| (SCORE_LOW_MARK) geben, wird ein Stufenpunkt vergeben. Ab 600000 XP |
| (SCORE_HIGH_MARK) sind es 2 Stufenpunkte. Ueber diese Werte hinausgehende |
| Punkte muessen beantragt und manuell ueber den Scoremaster eingetragen |
| werden. |
| |
| Jeder NPC, der mindestens einen Stufenpunkt gibt, wird automatisch in |
| eine Liste temporaerer EKs eingetragen, die vom EK-Maintainer einzeln |
| bestaetigt werden muessen. Dieses Verfahren ist erforderlich, weil der |
| bis vor einiger Zeit eingesetzte Mechanismus, EKs automatisch einzutragen, |
| dazu gefuehrt hat, dass eigentlich nicht als EK vorgesehene oder erlaubte, |
| aber auch laengst wieder abgehaengte oder gar nie angeschlossene NPCs |
| eingetragen waren. Da aus dem Scoremaster auch die von Brumni in der |
| Fraternitas ausgegebenen EK-Tips abgefragt werden, ist das natuerlich fatal |
| fuer Spieler, wenn sie Tips bekommen, die sie nicht erreichen koennen. |
| |
| Die Liste der Erstkills ist ein Mapping, das als Keys eine fortlaufende |
| Nummer enthaelt, zu der jeweils die Daten des NPCs zugeordnet sind. Diese |
| Nummer dient vor allem auch zur Indizierung des Bitstrings im Spieler, |
| in dem die Erstkills gespeichert werden. |
| |
| Diese Datei dokumentiert die Funktionalitaet des Scoremasters fuer die |
| Benutzung durch EM und EK-Maintainer, jedoch nicht die vollstaendige |
| interne Arbeitsweise und Verwaltung der Daten. |
| |
| Inhaltsverzeichnis dieser Dokumentation |
| 1) Neueintragung von EKs |
| 2) Verwaltung der unbestaetigten EKs |
| 3) Aenderungen an bestehenden EKs |
| 4) Spielerbezogene Daten verwalten |
| 5) Daten von NPCs abfragen |
| 6) Permanentes Loeschen von EKs |
| 7) Verwaltung der EK-Tips von Brumni |
| 8) Sonstige Funktionen (nur von NPCs gerufen) |
| |
| |
| RUECKGABEWERTE: |
| |
| SCORE_INVALID_ARG -1 |
| SCORE_NO_PERMISSION -2 |
| |
| |
| FUNKTIONEN |
| |
| 1) Neueintragung von EKs |
| |
| NewNPC(string key, int score) |
| AddNPC(string key, int score) [veraltet, leitet an NewNPC weiter] |
| Neuen NPC eintragen, key ist hierbei der Pfad, score die Punktzahl |
| Die ID des EKs wird automatisch ausgewaehlt, indem der naechste |
| freie Platz im Mapping belegt wird. |
| |
| |
| 2) Verwaltung der unbestaetigten EKs |
| |
| ConfirmScore(mixed key) |
| unbestaetigten EK mit der Nummer oder dem Pfad "key" genehmigen |
| => EK in den Spielern setzen und Statistik hochzaehlen, |
| => EK aus der Liste der unbestaetigten EKs in die Liste der aktiven |
| uebertragen, |
| |
| RejectScore(mixed key) |
| unbestaetigten EK mit der Nummer oder dem Pfad "key" ablehnen |
| => Eintrag aus der Liste der unbestaetigten EKs loeschen |
| => Bit-Nr. in die Liste der freien Nummern eintragen |
| |
| DumpUnconfirmedScores() |
| unbestaetigte NPCs an den abfragenden Magier ausgeben |
| |
| |
| 3) Aenderungen an bestehenden EKs |
| |
| SetScore(mixed key, int score) |
| Punktzahl fuer bereits eingetragenen NPC aendern, key ist der Pfad |
| oder die NPC-Nummer, score die neue Punktzahl |
| |
| RemoveScore(mixed key) |
| Setzt die Punktzahl auf 0. Solche EKs koennen spaeter durch Angabe |
| einer neuen Punktzahl reaktiviert werden. |
| Alternativ kann fuer diese Funktion auch SetScore(mixed key, 0) |
| verwendet werden. |
| key kann hierbei der Pfad oder die NPC-Nummer sein |
| |
| MoveScore(mixed oldkey, string newpath) |
| Verlegt einen EK |
| oldkey ist der aktuelle Pfad oder die Nummer |
| newpath ist der neue Pfad |
| |
| |
| 4) Spielerbezogene Daten verwalten |
| |
| HasKill(mixed pl, mixed npc) |
| fragt ab, ob der Spieler "pl" den Kill "npc" hat |
| pl kann hierbei der Spielername oder das Spielerobjekt sein, |
| npc der Pfad oder dessen Nummer |
| |
| SetScoreBit(string pl, int bit) |
| Mit dieser Funktion wird dem Spieler "pl" der EK mit der Nummer |
| "bit" gutgeschrieben. |
| |
| ClearScoreBit(string pl, int bit) |
| Mit dieser Funktion wird dem Spieler "pl" der EK mit der Nummer |
| "bit" permanent ausgetragen. |
| |
| QueryKillPoints(mixed pl) |
| liefert die Anzahl der Stufenpunkte zurueck, die dem Spieler pl |
| durch die aktiven EKs gutgeschrieben wurden |
| |
| getFreeEKsForPlayer(object player) |
| liefert alle EKs, die aktiv sind, und die der Spieler noch nicht |
| hat, in einem Mapping entsprechend der Liste "npcs" zurueck. |
| |
| QueryAllKills(string pl) |
| liefert alle Kills des Spielers als Bitstring zurueck, auch solche, |
| die momentan ausgetragen/deaktiviert sind |
| pl ist hierbei der Spielername als String |
| |
| QueryKills(string pl) |
| liefert die aktiven Kills des Spielers als Bitstring zurueck |
| pl ist hierbei der Spielername als String |
| |
| |
| 5) Daten von NPCs abfragen |
| |
| QueryNPCbyNumber(int num) |
| liefert die Daten des NPCs mit der Nummer "num" als Array zurueck |
| |
| QueryNPCbyObject(object o) |
| liefert die Daten des NPCs mit dem Objekt "o" als Array zurueck |
| |
| |
| 6) Permanentes Loeschen von EKs |
| |
| MarkEKForLiquidation(mixed key) |
| entfernt einen EK endgueltig und unwiderruflich und gibt die Nr. |
| wieder frei. |
| Technisch wird der EK erstmal in eine Liste eingetragen. Im Reset |
| iteriert der Master ueber alle Spieler-Savefiles und loescht den EK |
| aus allen Spielern. Nach Abschluss wird der Eintrag in "npcs" |
| geloescht und seine Nr. in die Liste freier Nummern eingetragen. |
| |
| UnmarkEKForLiquidation(mixed key) |
| Entfernt die Loeschmarkierung von einem EK |
| => Dies geht nur, solange nach einem MarkEKForLiquidation() noch kein |
| reset() gelaufen ist! |
| |
| QueryLiquidationMarks() |
| Fragt die fuer Loeschung vorgesehenen EKs ab. |
| |
| RestoreEK(string key, int bit, int score) |
| restauriert die Daten eines frueher geloeschten, in den Spielern noch |
| enthaltenen EKs. Moeglich nur dann, wenn der EK frueher mal geloescht |
| wurde, aber in den Bitstrings in den Spielern noch eingetragen ist. |
| Es werden Pfad, Nr. und Punkte benoetigt. |
| Fuer nach dem Umbau des Scoremasters geloeschte EKs nicht mehr |
| moeglich, weil diese permanent aus den Bitstrings ausgetragen wird. |
| |
| |
| 7) Verwaltung der EK-Tips von Brumni |
| |
| addTip(mixed key,string tip) |
| Traegt fuer den NPC mit der Nummer oder dem Pfad "key" einen EK-Tip- |
| Text fuer Brumni ein. |
| |
| changeTip(mixed key,string tip) |
| Aendert den durch Brumni auszugebenden EK-Tip fuer den NPC mit der |
| Nummer oder dem Pfad "key". Der neue Tip wird dabei als 2. Parameter |
| "tip" uebergeben. |
| |
| removeTip(mixed key) |
| Loescht den durch Brumni auszugebenden EK-Tip-Spruch. Der Tip als |
| solcher bleibt bestehen - anschliessend wird wieder der Standard- |
| Spruch ausgegeben. |
| |
| getTip(mixed key) |
| Gibt den Tip-Spruch fuer den NPC mit der Nummer oder dem Pfad |
| "key" zurueck, oder den Standard-Spruch. Liefert fuer nicht |
| eingetragenen "key" den Leerstring zurueck. |
| |
| QueryTipObjects(mixed player) |
| Gibt die Objektnamen der EK-Tips des jeweiligen Spielers zurueck. |
| |
| allTipsForPlayer(object player) |
| Gibt den Gesamtstring aller Tips des Spielers "player" zurueck. |
| |
| playerMayGetTip(object player) |
| Fragt ab, ob der Spieler "player" einen Tip bekommen kann. |
| |
| giveTipForPlayer(object player) |
| Waehlt einen zufaelligen EK aus, den der Spieler noch nicht hat, und |
| traegt diesen im Master in die Liste ein, die mit allTipsForPlayer() |
| abgefragt werden kann. |
| |
| |
| 8) Sonstige Funktionen (nur von NPCs gerufen) |
| |
| GiveKill(object pl, int bit) |
| schreibt dem Spieler "pl" den EK mit der Nummer "bit" gut. |
| Diese Funktion wird ausschliesslich aus NPCs heraus gerufen. |
| |
| QueryNPC(int score) |
| Wird vom getoeteten NPC gerufen, um zu ermitteln, ob dieser einen |
| Erstkill gibt. Wenn der EK noch nicht existiert, wird dieser im |
| Master zunaechst in der Liste der unbestaetigten EKs eingetragen |
| Direkte Abfrage dieser Funktion von aussen z.B. durch Magier nicht |
| moeglich, weil nicht sinnvoll. |
| |