MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | Der Scoremaster |
| 2 | =============== |
| 3 | |
| 4 | BESCHREIBUNG |
| 5 | |
| 6 | Funktion: Verwaltung der Erstkill-Stufenpunkte, die fuer das Toeten von |
| 7 | NPCs vergeben werden. Fuer alle NPCs, die mehr als 200000 XP |
| 8 | (SCORE_LOW_MARK) geben, wird ein Stufenpunkt vergeben. Ab 600000 XP |
| 9 | (SCORE_HIGH_MARK) sind es 2 Stufenpunkte. Ueber diese Werte hinausgehende |
| 10 | Punkte muessen beantragt und manuell ueber den Scoremaster eingetragen |
| 11 | werden. |
| 12 | |
| 13 | Jeder NPC, der mindestens einen Stufenpunkt gibt, wird automatisch in |
| 14 | eine Liste temporaerer EKs eingetragen, die vom EK-Maintainer einzeln |
| 15 | bestaetigt werden muessen. Dieses Verfahren ist erforderlich, weil der |
| 16 | bis vor einiger Zeit eingesetzte Mechanismus, EKs automatisch einzutragen, |
| 17 | dazu gefuehrt hat, dass eigentlich nicht als EK vorgesehene oder erlaubte, |
| 18 | aber auch laengst wieder abgehaengte oder gar nie angeschlossene NPCs |
| 19 | eingetragen waren. Da aus dem Scoremaster auch die von Brumni in der |
| 20 | Fraternitas ausgegebenen EK-Tips abgefragt werden, ist das natuerlich fatal |
| 21 | fuer Spieler, wenn sie Tips bekommen, die sie nicht erreichen koennen. |
| 22 | |
| 23 | Die Liste der Erstkills ist ein Mapping, das als Keys eine fortlaufende |
| 24 | Nummer enthaelt, zu der jeweils die Daten des NPCs zugeordnet sind. Diese |
| 25 | Nummer dient vor allem auch zur Indizierung des Bitstrings im Spieler, |
| 26 | in dem die Erstkills gespeichert werden. |
| 27 | |
| 28 | Diese Datei dokumentiert die Funktionalitaet des Scoremasters fuer die |
| 29 | Benutzung durch EM und EK-Maintainer, jedoch nicht die vollstaendige |
| 30 | interne Arbeitsweise und Verwaltung der Daten. |
| 31 | |
| 32 | Inhaltsverzeichnis dieser Dokumentation |
| 33 | 1) Neueintragung von EKs |
| 34 | 2) Verwaltung der unbestaetigten EKs |
| 35 | 3) Aenderungen an bestehenden EKs |
| 36 | 4) Spielerbezogene Daten verwalten |
| 37 | 5) Daten von NPCs abfragen |
| 38 | 6) Permanentes Loeschen von EKs |
| 39 | 7) Verwaltung der EK-Tips von Brumni |
| 40 | 8) Sonstige Funktionen (nur von NPCs gerufen) |
| 41 | |
| 42 | |
| 43 | RUECKGABEWERTE: |
| 44 | |
| 45 | SCORE_INVALID_ARG -1 |
| 46 | SCORE_NO_PERMISSION -2 |
| 47 | |
| 48 | |
| 49 | FUNKTIONEN |
| 50 | |
| 51 | 1) Neueintragung von EKs |
| 52 | |
| 53 | NewNPC(string key, int score) |
| 54 | AddNPC(string key, int score) [veraltet, leitet an NewNPC weiter] |
| 55 | Neuen NPC eintragen, key ist hierbei der Pfad, score die Punktzahl |
| 56 | Die ID des EKs wird automatisch ausgewaehlt, indem der naechste |
| 57 | freie Platz im Mapping belegt wird. |
| 58 | |
| 59 | |
| 60 | 2) Verwaltung der unbestaetigten EKs |
| 61 | |
| 62 | ConfirmScore(mixed key) |
| 63 | unbestaetigten EK mit der Nummer oder dem Pfad "key" genehmigen |
| 64 | => EK in den Spielern setzen und Statistik hochzaehlen, |
| 65 | => EK aus der Liste der unbestaetigten EKs in die Liste der aktiven |
| 66 | uebertragen, |
| 67 | |
| 68 | RejectScore(mixed key) |
| 69 | unbestaetigten EK mit der Nummer oder dem Pfad "key" ablehnen |
| 70 | => Eintrag aus der Liste der unbestaetigten EKs loeschen |
| 71 | => Bit-Nr. in die Liste der freien Nummern eintragen |
| 72 | |
| 73 | DumpUnconfirmedScores() |
| 74 | unbestaetigte NPCs an den abfragenden Magier ausgeben |
| 75 | |
| 76 | |
| 77 | 3) Aenderungen an bestehenden EKs |
| 78 | |
| 79 | SetScore(mixed key, int score) |
| 80 | Punktzahl fuer bereits eingetragenen NPC aendern, key ist der Pfad |
| 81 | oder die NPC-Nummer, score die neue Punktzahl |
| 82 | |
| 83 | RemoveScore(mixed key) |
| 84 | Setzt die Punktzahl auf 0. Solche EKs koennen spaeter durch Angabe |
| 85 | einer neuen Punktzahl reaktiviert werden. |
| 86 | Alternativ kann fuer diese Funktion auch SetScore(mixed key, 0) |
| 87 | verwendet werden. |
| 88 | key kann hierbei der Pfad oder die NPC-Nummer sein |
| 89 | |
| 90 | MoveScore(mixed oldkey, string newpath) |
| 91 | Verlegt einen EK |
| 92 | oldkey ist der aktuelle Pfad oder die Nummer |
| 93 | newpath ist der neue Pfad |
| 94 | |
| 95 | |
| 96 | 4) Spielerbezogene Daten verwalten |
| 97 | |
| 98 | HasKill(mixed pl, mixed npc) |
| 99 | fragt ab, ob der Spieler "pl" den Kill "npc" hat |
| 100 | pl kann hierbei der Spielername oder das Spielerobjekt sein, |
| 101 | npc der Pfad oder dessen Nummer |
| 102 | |
| 103 | SetScoreBit(string pl, int bit) |
| 104 | Mit dieser Funktion wird dem Spieler "pl" der EK mit der Nummer |
| 105 | "bit" gutgeschrieben. |
| 106 | |
| 107 | ClearScoreBit(string pl, int bit) |
| 108 | Mit dieser Funktion wird dem Spieler "pl" der EK mit der Nummer |
| 109 | "bit" permanent ausgetragen. |
| 110 | |
| 111 | QueryKillPoints(mixed pl) |
| 112 | liefert die Anzahl der Stufenpunkte zurueck, die dem Spieler pl |
| 113 | durch die aktiven EKs gutgeschrieben wurden |
| 114 | |
| 115 | getFreeEKsForPlayer(object player) |
| 116 | liefert alle EKs, die aktiv sind, und die der Spieler noch nicht |
| 117 | hat, in einem Mapping entsprechend der Liste "npcs" zurueck. |
| 118 | |
| 119 | QueryAllKills(string pl) |
| 120 | liefert alle Kills des Spielers als Bitstring zurueck, auch solche, |
| 121 | die momentan ausgetragen/deaktiviert sind |
| 122 | pl ist hierbei der Spielername als String |
| 123 | |
| 124 | QueryKills(string pl) |
| 125 | liefert die aktiven Kills des Spielers als Bitstring zurueck |
| 126 | pl ist hierbei der Spielername als String |
| 127 | |
| 128 | |
| 129 | 5) Daten von NPCs abfragen |
| 130 | |
| 131 | QueryNPCbyNumber(int num) |
| 132 | liefert die Daten des NPCs mit der Nummer "num" als Array zurueck |
| 133 | |
| 134 | QueryNPCbyObject(object o) |
| 135 | liefert die Daten des NPCs mit dem Objekt "o" als Array zurueck |
| 136 | |
| 137 | |
| 138 | 6) Permanentes Loeschen von EKs |
| 139 | |
| 140 | MarkEKForLiquidation(mixed key) |
| 141 | entfernt einen EK endgueltig und unwiderruflich und gibt die Nr. |
| 142 | wieder frei. |
| 143 | Technisch wird der EK erstmal in eine Liste eingetragen. Im Reset |
| 144 | iteriert der Master ueber alle Spieler-Savefiles und loescht den EK |
| 145 | aus allen Spielern. Nach Abschluss wird der Eintrag in "npcs" |
| 146 | geloescht und seine Nr. in die Liste freier Nummern eingetragen. |
| 147 | |
| 148 | UnmarkEKForLiquidation(mixed key) |
| 149 | Entfernt die Loeschmarkierung von einem EK |
| 150 | => Dies geht nur, solange nach einem MarkEKForLiquidation() noch kein |
| 151 | reset() gelaufen ist! |
| 152 | |
| 153 | QueryLiquidationMarks() |
| 154 | Fragt die fuer Loeschung vorgesehenen EKs ab. |
| 155 | |
| 156 | RestoreEK(string key, int bit, int score) |
| 157 | restauriert die Daten eines frueher geloeschten, in den Spielern noch |
| 158 | enthaltenen EKs. Moeglich nur dann, wenn der EK frueher mal geloescht |
| 159 | wurde, aber in den Bitstrings in den Spielern noch eingetragen ist. |
| 160 | Es werden Pfad, Nr. und Punkte benoetigt. |
| 161 | Fuer nach dem Umbau des Scoremasters geloeschte EKs nicht mehr |
| 162 | moeglich, weil diese permanent aus den Bitstrings ausgetragen wird. |
| 163 | |
| 164 | |
| 165 | 7) Verwaltung der EK-Tips von Brumni |
| 166 | |
| 167 | addTip(mixed key,string tip) |
| 168 | Traegt fuer den NPC mit der Nummer oder dem Pfad "key" einen EK-Tip- |
| 169 | Text fuer Brumni ein. |
| 170 | |
| 171 | changeTip(mixed key,string tip) |
| 172 | Aendert den durch Brumni auszugebenden EK-Tip fuer den NPC mit der |
| 173 | Nummer oder dem Pfad "key". Der neue Tip wird dabei als 2. Parameter |
| 174 | "tip" uebergeben. |
| 175 | |
| 176 | removeTip(mixed key) |
| 177 | Loescht den durch Brumni auszugebenden EK-Tip-Spruch. Der Tip als |
| 178 | solcher bleibt bestehen - anschliessend wird wieder der Standard- |
| 179 | Spruch ausgegeben. |
| 180 | |
| 181 | getTip(mixed key) |
| 182 | Gibt den Tip-Spruch fuer den NPC mit der Nummer oder dem Pfad |
| 183 | "key" zurueck, oder den Standard-Spruch. Liefert fuer nicht |
| 184 | eingetragenen "key" den Leerstring zurueck. |
| 185 | |
| 186 | QueryTipObjects(mixed player) |
| 187 | Gibt die Objektnamen der EK-Tips des jeweiligen Spielers zurueck. |
| 188 | |
| 189 | allTipsForPlayer(object player) |
| 190 | Gibt den Gesamtstring aller Tips des Spielers "player" zurueck. |
| 191 | |
| 192 | playerMayGetTip(object player) |
| 193 | Fragt ab, ob der Spieler "player" einen Tip bekommen kann. |
| 194 | |
| 195 | giveTipForPlayer(object player) |
| 196 | Waehlt einen zufaelligen EK aus, den der Spieler noch nicht hat, und |
| 197 | traegt diesen im Master in die Liste ein, die mit allTipsForPlayer() |
| 198 | abgefragt werden kann. |
| 199 | |
| 200 | |
| 201 | 8) Sonstige Funktionen (nur von NPCs gerufen) |
| 202 | |
| 203 | GiveKill(object pl, int bit) |
| 204 | schreibt dem Spieler "pl" den EK mit der Nummer "bit" gut. |
| 205 | Diese Funktion wird ausschliesslich aus NPCs heraus gerufen. |
| 206 | |
| 207 | QueryNPC(int score) |
| 208 | Wird vom getoeteten NPC gerufen, um zu ermitteln, ob dieser einen |
| 209 | Erstkill gibt. Wenn der EK noch nicht existiert, wird dieser im |
| 210 | Master zunaechst in der Liste der unbestaetigten EKs eingetragen |
| 211 | Direkte Abfrage dieser Funktion von aussen z.B. durch Magier nicht |
| 212 | moeglich, weil nicht sinnvoll. |
| 213 | |