zesstra | 7c14de0 | 2016-06-26 22:04:45 +0200 | [diff] [blame] | 1 | Allgemein: |
| 2 | ---------- |
| 3 | |
| 4 | ExplorationPoints (FP) koennen von beliebigen Objekten vergeben werden. |
| 5 | Es stehen sechs verschiedene FP-Typen zur Auswahl (definiert in |
| 6 | /secure/exploration.h): |
| 7 | - EP_DETAIL: Diese FP werden fuer Details und SpecialDetails vergeben. Dies |
| 8 | ist die wohl am meisten genutzte Moeglichkeit. |
| 9 | - EP_RDET: Wie EP_DETAIL, aber speziell fuer ReadDetails. |
| 10 | - EP_EXIT: Diese FP gelten fuer Ausgaenge. Man kann sie benutzen, wenn der |
| 11 | Spieler einen FP fuer das Betreten eines bestimmten Gebietes bekommen |
| 12 | soll. |
| 13 | - EP_CMD: Fuer Kommandos, die einen FP wert sind. Der FP wird nur bei |
| 14 | erfolgreich ausgefuehrtem Kommando vergeben. Das gilt nur bei |
| 15 | AddCmd()-Kommandos! |
| 16 | - EP_INFO: Ein FP fuer Infos eines NPCs. |
| 17 | - EP_PUB: Ein FP fuer das Verzehren eines bestimmten Getraenks oder einer |
| 18 | bestimmten Speise in einer Kneipe. Vergeben wird nur nach erfolgreichem |
| 19 | Verzehr, und nur, wenn Zahler und Empfaenger die gleiche Person sind. |
| 20 | Man kann also keine FP spendieren. |
| 21 | - EP_MISC: Dies ist ein Sonderfall. Wenn ein FP vergeben werden soll, der |
| 22 | sich nicht in die obigen Kategorien einordnen laesst, oder es |
| 23 | noch Besonderheiten zu beruecksichtigen gibt, sollte man diesen Typ |
| 24 | waehlen. |
| 25 | |
| 26 | Die Vergabe der FP erfolgt, wenn er erst einmal eingetragen ist, vollkommen |
| 27 | automatisch. |
| 28 | Ausnahme: EP_MISC. Hier muss das Objekt, das den FP vergibt, "von Hand" |
| 29 | GiveExplorationPoint() aufrufen. |
| 30 | |
| 31 | Die Vergabe richtet sich nach bestimmten Schluesselwoertern, die beim |
| 32 | Eintragen der FP festgelegt werden. Diese Schluessel sollten sein bei |
| 33 | - EP_DETAIL: Der Name des Details. Man sollte daran denken, alle Schluessel |
| 34 | fuer ein Detail anzugeben! |
| 35 | - EP_RDET: dito. |
| 36 | - EP_EXIT: Die Richtung, in die der Ausgang fuehrt. |
| 37 | - EP_CMD: Das Verb/die Verben. |
| 38 | - EP_INFO: Die entsprechende Frage. |
| 39 | - EP_PUB: Die IDs des Menueeintrags. |
| 40 | - EP_MISC: Ein beliebiger Schluessel. |
| 41 | |
| 42 | Ein Objekt kann nur einen FP vergeben, und nicht mehrere (auch nicht mehrere |
| 43 | von verschiedenen Typen). |
| 44 | |
| 45 | Im Spieler dienen zwei Properties zur Verwaltung: |
| 46 | - P_EP enthaelt einen Bitstring, in dem die schon gefundenen FP vermerkt sind. |
| 47 | - P_EP_NUM enthaelt die Anzahl der schon gefundenen FP. Allerdings ist diese |
| 48 | Zahl mit einer gewissen Ungenauigkeit behaftet, um es dem Spieler nicht zu |
| 49 | leicht zu machen, FP-Stellen zu entdecken. |
| 50 | |
| 51 | Funktionen: |
| 52 | ----------- |
| 53 | |
| 54 | Zur Manipulation stehen in /secure/explorationmaster.c folgende Funktionen |
| 55 | zur Verfuegung: |
| 56 | |
| 57 | FUNKTION: |
| 58 | int AddEPObject(object ob, mixed keys, int type); |
| 59 | |
| 60 | PARAMETER: |
| 61 | ob |
| 62 | Das Objekt, das den FP vergeben soll. |
| 63 | |
| 64 | keys |
| 65 | String oder Array von Strings mit den Schluesselwoertern. |
| 66 | |
| 67 | type |
| 68 | Einer der oben erwaehnten Typen. |
| 69 | |
| 70 | BESCHREIBUNG: |
| 71 | Falls ob ein gueltiges Objekt ist, wird ihm ein FP zum Schluessel keys |
| 72 | vom Typ type zugeordnet. Sollte fuer ob schon ein FP definiert gewesen |
| 73 | sein, so wird dieser ueberschrieben. |
| 74 | |
| 75 | Gueltige Objekte sind prinzipiell alle ausser Spielern sowie Raeume, die |
| 76 | von einem virtual_compiler erzeugt wurden. |
| 77 | |
| 78 | RUECKGABEWERT: |
| 79 | <0, falls ein Fehler aufgetreten ist, ansonsten wird die Anzahl der momentan |
| 80 | erreichbaren FP zurueckgegeben. |
| 81 | |
| 82 | SIEHE AUCH: |
| 83 | RemoveEPObject(), ChangeEPObject(), ShowEPObjects(), QueryEPObject(), |
| 84 | /secure/ARCH/eprooms |
| 85 | |
| 86 | ------------------------------ |
| 87 | |
| 88 | FUNKTION: |
| 89 | int RemoveEPObject(object ob); |
| 90 | |
| 91 | PARAMETER: |
| 92 | ob |
| 93 | Das zu entfernende Objekt. |
| 94 | |
| 95 | BESCHREIBUNG: |
| 96 | Entfernt ein Objekt aus der Liste der FP-Spender. |
| 97 | |
| 98 | RUECKGABEWERT: |
| 99 | <0, falls ein Fehler aufgetreten ist, ansonsten die Zahl der verbliebenen |
| 100 | FP. |
| 101 | |
| 102 | BEMERKUNGEN: |
| 103 | Spielern, die diesen FP schon erhalten haben, wird dieser nicht aberkannt. |
| 104 | Der freigewordene Platz wird bei einem der naechsten AddEPObject()-Aufrufe |
| 105 | wiederverwendet. Spieler, die den FP am "alten" Ort gefunden haben, |
| 106 | bekommen ihn am "neuen" Ort jedoch nicht noch einmal zuerkannt. |
| 107 | |
| 108 | SIEHE AUCH: |
| 109 | AddEPObject(), ChangeEPObject(), ShowEPObjects(), QueryEPObject(), |
| 110 | /secure/ARCH/eprooms |
| 111 | |
| 112 | ------------------------------ |
| 113 | |
| 114 | FUNKTION: |
| 115 | int ChangeEPObject(object ob, int what, mixed new); |
| 116 | |
| 117 | PARAMETER: |
| 118 | ob |
| 119 | Das zu aendernde Objekt. |
| 120 | |
| 121 | what |
| 122 | Die zu aendernde Eigenschaft. |
| 123 | |
| 124 | new |
| 125 | Der neue Wert. |
| 126 | |
| 127 | BESCHREIBUNG: |
| 128 | Aendert eine Eigenschaft des Objektes ob (soweit dieses schon eingetragen |
| 129 | ist). Die neue Eigenschaft new haengt von der geforderten Aenderung what ab: |
| 130 | what = CHANGE_OB => new ist das neue Objekt. |
| 131 | what = CHANGE_KEY => new ist ein String oder Array von Strings mit den |
| 132 | neuen Schluesseln. |
| 133 | what = CHANGE_TYPE => new enthaelt den neuen Typ |
| 134 | |
| 135 | Der Vorteil von CHANGE_OB gegenueber RemoveEPObject - AddEPObject ist der, |
| 136 | dass die Nummer des FP sich hierbei garantiert nicht aendert. |
| 137 | |
| 138 | RUECKGABEWERT: |
| 139 | <0, wenn ein Fehler auftrat, sonst 1. |
| 140 | |
| 141 | SIEHE AUCH: |
| 142 | AddEPObject(), RemoveEPObject(), ShowEPObjects(), QueryEPObject(), |
| 143 | /secure/ARCH/eprooms |
| 144 | |
| 145 | ------------------------------ |
| 146 | |
| 147 | FUNKTION: |
| 148 | mixed QueryEPObject(object ob); |
| 149 | |
| 150 | PARAMETER: |
| 151 | ob |
| 152 | Das Objekt, dessen Informationen gewuenscht sind. |
| 153 | |
| 154 | BESCHREIBUNG: |
| 155 | Falls das Objekt in der FP-Liste existiert, werden seine Werte als Array |
| 156 | zurueckgegeben. |
| 157 | |
| 158 | RUECKGABEWERT: |
| 159 | Falls ein Fehler auftritt, wird eine Zahl <0 zurueckgegeben. |
| 160 | Ansonsten wird ein Array mit den Objektinformationen zurueckgegeben. Das |
| 161 | Array hat folgenden Aufbau: ({ string *keys, int Nummer, int Typ }). |
| 162 | |
| 163 | SIEHE AUCH: |
| 164 | AddEPObject(), RemoveEPObject(), ChangeEPObject(), ShowEPObjects(), |
| 165 | /secure/ARCH/eprooms |
| 166 | |
| 167 | ------------------------------ |
| 168 | |
| 169 | FUNKTION: |
| 170 | void ShowEPObjects(); |
| 171 | |
| 172 | PARAMETER: |
| 173 | keine |
| 174 | |
| 175 | BESCHREIBUNG: |
| 176 | Die Liste der vorhandenen Objekte wird in lesbarer Form nach |
| 177 | /secure/ARCH/eprooms geschrieben und kann dort eingesehen werden. |
| 178 | |
| 179 | RUECKGABEWERT: |
| 180 | keiner |
| 181 | |
| 182 | BEMERKUNGEN: |
| 183 | Hier ist noch ein wenig Arbeit noetig... Magier < IS_LORD sollten |
| 184 | zumindest ihre eigenen FP abfragen koennen, Regionsmagier auch die |
| 185 | ihrere Region. |
| 186 | |
| 187 | SIEHE AUCH: |
| 188 | AddEPObject(), RemoveEPObject(), ChangeEPObject(), QueryEPObject(), |
| 189 | /secure/ARCH/eprooms |
| 190 | |
| 191 | ------------------------------ |
| 192 | |
| 193 | FUNKTION: |
| 194 | mixed QueryExplore(int type); |
| 195 | |
| 196 | PARAMETER: |
| 197 | type |
| 198 | Typ des gewuenschten FP. |
| 199 | |
| 200 | BESCHREIBUNG: |
| 201 | Diese Funktion wird von den Standardobjekten aufgerufen, wenn sie |
| 202 | FP-Informationen einholen (im create()). |
| 203 | |
| 204 | Man braucht sich in eigenen Objekten nicht um diese Funktion zu |
| 205 | kuemmern (auch nicht bei EP_MISC-FPs). |
| 206 | |
| 207 | RUECKGABEWERT: |
| 208 | Ein Array von Strings, wenn fuer das aufrufende Objekt FP zum Typ type |
| 209 | vorhanden sind (die Strings entsprechen den Schluesseln), |
| 210 | 0, wenn fuer das Objekt kein FP definiert ist oder nicht der richtige |
| 211 | Typ verlang wurde. |
| 212 | |
| 213 | SIEHE AUCH: |
| 214 | GiveExplorationPoint(), QueryMaxEP(), QueryExplorationPoints() |
| 215 | |
| 216 | ------------------------------ |
| 217 | |
| 218 | FUNKTION: |
| 219 | int QueryMaxEP(); |
| 220 | |
| 221 | PARAMETER: |
| 222 | keine |
| 223 | |
| 224 | BESCHREIBUNG: |
| 225 | Liefert die maximal erreichbare FP-Zahl. |
| 226 | |
| 227 | RUECKGABEWERT: |
| 228 | Die Zahl der maximal erreichbaren FP. |
| 229 | |
| 230 | SIEHE AUCH: |
| 231 | GiveExplorationPoint(), QueryExplorationPoints() |
| 232 | |
| 233 | ------------------------------ |
| 234 | |
| 235 | FUNKTION: |
| 236 | void GiveExplorationPoint(string key); |
| 237 | |
| 238 | PARAMETER: |
| 239 | key |
| 240 | Schluessel, der die Vergabe ausloeste. |
| 241 | |
| 242 | BESCHREIBUNG: |
| 243 | Es wird versucht, einen FP des aufrufenden Objekts an this_interactive() zu |
| 244 | vergeben. Die Vergabe wird anhand von key entschieden. |
| 245 | |
| 246 | RUECKGABEWERT: |
| 247 | keiner |
| 248 | |
| 249 | BEMERKUNGEN: |
| 250 | Bei den meisten FP-Typen wird die Vergabe automatisch durchgefuehrt. |
| 251 | Nur bei EP_MISC-FPs muss man diese Funktion von Hand aufrufen. Als |
| 252 | key ist dabei der der Schluessel zu waehlen, der beim Eintragen des FP |
| 253 | verwendet wurde. |
| 254 | |
| 255 | SIEHE AUCH: |
| 256 | QueryExplore(), QueryExplorationPoints() |
| 257 | |
| 258 | ------------------------------ |
| 259 | |
| 260 | FUNKTION: |
| 261 | int QueryExplorationPoints(object pl) |
| 262 | |
| 263 | PARAMETER: |
| 264 | pl |
| 265 | Ein Spieler |
| 266 | |
| 267 | BESCHREIBUNG: |
| 268 | Die Zahl der vom Spieler pl schon gefundenen FP wird ermittelt. |
| 269 | |
| 270 | RUECKGABEWERT: |
| 271 | Zahl der schon gefundenen FP. |
| 272 | |
| 273 | BEMERKUNGEN: |
| 274 | Im Spieler sind zwei Properties definiert: P_EP enthaelt einen Bitstring |
| 275 | mit den schon gefundenen FP, P_EP_NUM enthaelt die ungefaehre Anzahl der |
| 276 | Traenke. QueryExplorationPoints() ermittelt aus P_EP die genaue Anzahl. |
| 277 | |
| 278 | SIEHE AUCH: |
| 279 | GiveExplorationPoint() |
| 280 | |
| 281 | ------------------------------ |
| 282 | |
| 283 | Tools: |
| 284 | ------ |
| 285 | |
| 286 | Man kann die FP zwar auch mit dem MGtool eintragen, dummerweise werden aber |
| 287 | xcall- und xeval-Aufrufe geloggt, und man koennte aus diesem Log eine FP-Liste |
| 288 | erstellen... |
| 289 | ~wargon/obj/explorer stellt zumindest fuer die Manipulationsbefehle Kommandos |
| 290 | zur Verfuegung, die diesen Umstand umgehen. |
| 291 | Die Langbeschreibung sollte die Befehle wohl genuegend erklaeren... ;) |
| 292 | |
| 293 | Letzte Aenderung: 06 Mar 1997 Wargon |