blob: c32319fb6d3dc4a70564ee49a83777f1141c9308 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001Der Scoremaster
2===============
3
4BESCHREIBUNG
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
43RUECKGABEWERTE:
44
45 SCORE_INVALID_ARG -1
46 SCORE_NO_PERMISSION -2
47
48
49FUNKTIONEN
50
511) 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
602) 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
773) 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
964) 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
1295) 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
1386) 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
1657) 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
2018) 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