MG Mud User | 3c1f5a8 | 2016-06-25 09:57:34 +0200 | [diff] [blame] | 1 | // Ich fand es ein wenig langweilig in der Gilde, also habe ich ein wenig daran |
| 2 | // gebastelt. |
| 3 | // Hate. |
| 4 | // 2002-12-06 Mandragons Projektbrett eingebaut, Humni. |
| 5 | // 2003-07-11 Bugfix |
| 6 | // 2005-08-19 Miril Arks Bienen eingebaut |
| 7 | // 2007-08-03 Zesstra, PFad fuers Vereinsbuero angepasst. |
| 8 | inherit "/std/gilden_room"; |
| 9 | |
| 10 | #include <properties.h> |
| 11 | #include <rooms.h> |
| 12 | #include <wizlevels.h> |
| 13 | #include <language.h> |
| 14 | #include <defines.h> |
| 15 | #include <moving.h> |
| 16 | #include <new_skills.h> |
| 17 | #include <events.h> |
| 18 | #include <player/fao.h> |
| 19 | |
| 20 | #define P_ANFAENGER_BIENENORT_ "anfaenger_bienenort_" |
| 21 | #define P_ANFAENGER_BIENENZIEL_ "anfaenger_bienenziel_" |
| 22 | |
| 23 | string Funktion(); // Funktion der Gilde |
| 24 | string Schmutz(); // Wohl bald ein Zaubertrank |
| 25 | |
| 26 | int _query_light() {return 20;} |
| 27 | |
| 28 | void create() { |
| 29 | ::create(); |
| 30 | |
| 31 | SetProp(P_GUILD_DEFAULT_SPELLBOOK,"ab_spells"); |
| 32 | SetProp(P_LIGHT,20); |
| 33 | SetProp(P_INDOORS,1); |
Arathorn | e591f19 | 2020-08-17 17:50:37 +0200 | [diff] [blame^] | 34 | SetProp(P_DOMAIN, "Ebene"); |
Arathorn | fefc35b | 2020-08-06 21:42:43 +0200 | [diff] [blame] | 35 | |
| 36 | SetProp(P_NAME, "Owen"); |
| 37 | SetProp(P_ARTICLE, 0); |
| 38 | |
MG Mud User | 3c1f5a8 | 2016-06-25 09:57:34 +0200 | [diff] [blame] | 39 | AddSpell("steinschlag"); |
| 40 | AddSpell("licht"); |
| 41 | AddSpell("kampfschrei"); |
| 42 | AddSpell("ausweichen"); |
| 43 | AddSpell("schaetz"); |
| 44 | AddSpell("pfeil"); |
| 45 | AddSpell("identifiziere"); |
| 46 | AddSpell("feuerball"); |
| 47 | AddSpell("schnell"); |
| 48 | AddSpell("saeurestrahl"); |
| 49 | |
| 50 | SetProp(P_GUILD_MALE_TITLES, ([ |
| 51 | 1 : "der hoffnungsvolle Anfaenger", |
| 52 | 2 : "der Landstreicher", |
| 53 | 3 : "der Streuner", |
| 54 | 4 : "der Wandergeselle", |
| 55 | 5 : "der Waldlaeufer", |
| 56 | 6 : "der Faehrtensucher", |
| 57 | 7 : "der Wegekundige", |
| 58 | 8 : "der Jaeger", |
| 59 | 9 : "der Kundschafter", |
| 60 | 10 : "der Reisende", |
| 61 | 11 : "der Abenteurer", |
| 62 | 12 : "der Weltenbummler", |
| 63 | 13 : "der Draufgaenger", |
| 64 | 14 : "der Schatzsucher", |
| 65 | 15 : "der Feuerbaendiger", |
| 66 | 16 : "der Entdecker", |
| 67 | 17 : "der Eroberer", |
| 68 | 18 : "der Held", |
| 69 | 19 : "der angehende Seher", |
| 70 | 20 : "der Seher", |
| 71 | ]) ); |
| 72 | SetProp(P_GUILD_FEMALE_TITLES, ([ |
| 73 | 1 : "die hoffnungsvolle Anfaengerin", |
| 74 | 2 : "die Landstreicherin", |
| 75 | 3 : "die Streunerin", |
| 76 | 4 : "die Wandergesellin", |
| 77 | 5 : "die Waldlaeuferin", |
| 78 | 6 : "die Faehrtensucherin", |
| 79 | 7 : "die Wegekundige", |
| 80 | 8 : "die Jaegerin", |
| 81 | 9 : "die Kundschafterin", |
| 82 | 10 : "die Reisende", |
| 83 | 11 : "die Abenteurerin", |
| 84 | 12 : "die Weltenbummlerin", |
| 85 | 13 : "die Draufgaengerin", |
| 86 | 14 : "die Schatzsucherin", |
| 87 | 15 : "die Feuerbaendigerin", |
| 88 | 16 : "die Entdeckerin", |
| 89 | 17 : "die Erobererin", |
| 90 | 18 : "die Heldin", |
| 91 | 19 : "die angehende Seherin", |
| 92 | 20 : "die Seherin", |
| 93 | ]) ); |
| 94 | |
| 95 | SetProp(P_INT_SHORT,"Die beruehmte Abenteurergilde"); |
| 96 | SetProp(P_INT_LONG, |
| 97 | "Der grosse Raum mit seiner niedrigen Decke und den grob geschnittenen\n" |
| 98 | +"Querbalken hat Platz fuer sehr viele Personen. Knarrende Dielen erzaehlen\n" |
| 99 | +"ueber Heldentaten laengst vergessener Abenteurer, beruehmter als mancher\n" |
| 100 | +"Weise unserer Zeit.\n" |
| 101 | +"Abenteurer, aber auch andere Bewohner dieser Welt kommen hierher, um\n" |
| 102 | +"sich zu informieren, ihre Erfahrungen auszutauschen oder sich in den\n" |
| 103 | +"verschiedensten Wissenschaften zu verbessern.\n" |
| 104 | +"Durch die immer offene Tuer scheint die aufgehende Sonne herein und fuellt\n" |
| 105 | +"den Raum mit ihrem goldenen Licht. Sonst gibt es hier nur noch den Ausgang\n" |
| 106 | +"im Norden, welcher auf die Hafenstrasse fuehrt und Bilder an den Waenden,\n" |
| 107 | +"mit Zeichnungen und Gemaelden vom MorgenGrauen. Eins der Bilder erlaeutert\n" |
| 108 | +"die Funktion der Gilde und eine grosse Uhr an der Wand zeigt, was die\n" |
| 109 | //+"Stunde schlaegt. In einer Ecke steht ein kleines Projektbrett.\n" |
| 110 | +"Stunde schlaegt.\n" |
| 111 | +"Nach oben fuehrt eine Treppe in das Buero des Foerdervereins Projekt\n" |
| 112 | +"MorgenGrauen e.V., das Du unbedingt besuchen solltest.\n"); |
| 113 | |
| 114 | AddDetail(({"raum", "gilde", "abenteurergilde", "haus", "gildenhaus", |
| 115 | "gildehaus"}), |
| 116 | "Du stehst mitten in der Abenteurergilde. Hier trifft man sich und kann\n" |
| 117 | +"auch seine persoenlichen Werte verbessern.\n"); |
| 118 | AddDetail(({"tuer", "ausgang"}), |
| 119 | "Der immer offenstehende Ausgang fuehrt hinaus auf die Hafenstrasse.\n" |
| 120 | +"Goldenes Licht einer ewig aufgehenden Sonne scheint herein.\n"); |
| 121 | AddSpecialDetail(({"bild", "bilder", "zeichnungen", "gemaelde", "karten", |
| 122 | "landschaftsbilder"}),"det_bild"); |
| 123 | AddDetail(({"funktion", "schild"}), #'Funktion); |
| 124 | AddDetail(({"wand", "waende"}), |
| 125 | "Aus fein saeuberlich geschlagenen Steinen sind die Waende der Gilde\n"+ |
| 126 | "zusammengesetzt. Viele interessante Bilder haengen daran.\n"); |
| 127 | AddDetail(({"stein", "steine"}), "Es sind ganz einfache Sandsteine.\n"); |
| 128 | AddDetail(({"fenster"}), |
| 129 | "Eine wundervolle Welt eroeffnet sich Dir, genannt Realitaet. Aber gibt es\n" |
| 130 | +"diese wirklich? Ist sie nicht voller Gefahren und Stress?\n"); |
| 131 | AddDetail(({"seite", "suedseite"}), |
| 132 | "Am Suedende des Raumes ist ein eigenartiges Fenster auszumachen.\n"); |
| 133 | AddDetail(({"balken", "querbalken", "holzbalken", "deckenbalken"}), |
| 134 | "Diese Balken halten das Obergeschoss des Gildenhauses, wohin nur Magier\n" |
| 135 | +"kommen und sind an manchen Stellen ganz schoen durchgebogen. Das grob ge-\n" |
| 136 | +"schnittene Holz ist teilweise von Schwertstreichen zernarbt.\n"); |
| 137 | AddDetail(({"hafen", "hafenstrasse", "strasse"}), |
| 138 | "Zur Tuer hinaus gelangt man ueber die Hafenstrasse zum Hafen von Port Vain" |
| 139 | +"\n"); |
| 140 | AddDetail(({"boden", "fussboden", "dielen"}), |
| 141 | "Die knarrenden Dielen der Gilde sind schon alt und abgeschabt. In den\n" |
| 142 | +"Ritzen zwischen ihnen ist viel Dreck von den Stiefeln der Abenteurer.\n"); |
| 143 | AddDetail(({"decke"}), |
| 144 | "Die Decke des Raumes wird von Holzbalken gehalten.\n"); |
| 145 | AddDetail(({"licht", "sonnenlicht", "sonne"}), |
| 146 | "Warmes Sonnenlicht scheint durch den Ausgang zur Strasse herein. Jedesmal\n" |
| 147 | +"wenn jemand hereinkommt wird er vom Licht umspuelt und erscheint Gott-\n" |
| 148 | +"gleich mit dieser Aura.\n"); |
| 149 | AddDetail(({"ebene"}), |
| 150 | "Du betrachtest das Bild der Ebene und denkst, welche Schaetze in dieser\n" |
| 151 | +"flachen, gruenen Landschaft verborgen sein muessen.\n"); |
| 152 | AddDetail(({"gebirge", "huegel", "berge", "berg"}), |
| 153 | "Das Bild der Huegel und Berge betrachtend, schleicht sich ein wenig Sehn-\n" |
| 154 | +"sucht nach dieser herrlichen, aber gefaehrlichen Landschaft ein.\n"); |
| 155 | AddDetail(({"perspektiven", "perspektive", "darstellung", "landschaft"}), |
| 156 | "Manche der Landschaftsbilder sind aus der Vogelperspektive oder von\n" |
| 157 | +"hohen Bergen aus oder von Zwergen gemalt worden.\n"); |
| 158 | AddDetail(({"see", "meer", "wellen"}), |
| 159 | "Die Wellen auf dem Meer glitzern wie tausend Edelsteine.\n"); |
| 160 | AddDetail(({"spritzer", "lichtspritzer"}), |
| 161 | "Wie tausend kleine Edelsteine verteilen sich diese winzigen, gluehenden\n" |
| 162 | +"Lichtspritzer ueber das wundervolle Gemaelde\n"); |
| 163 | AddDetail(({"geschoss", "obergeschoss"}), |
| 164 | "Ins obere Geschoss der Gilde kommen nur Magier, mittels eines besonderen\n" |
| 165 | +"Zauberspruchs, der die Decke durchlaessig fuer sie macht.\n"); |
| 166 | AddDetail(({"ritzen", "fugen"}), |
| 167 | "In den Fugen zwischen den Dielen befindet sich eine Menge Schmutz und\n" |
| 168 | +"Dreck von den Besuchern der Gilde.\n"); |
| 169 | AddDetail(({"fugen", "dreck", "schmutz"}), #'Schmutz); |
| 170 | AddDetail(({"holz"}), "Die Dielen und die Deckenbalken sind aus Holz.\n"); |
| 171 | AddDetail(({"kartograph", "kartographen"}), |
| 172 | "Dieselben laufen hier zwar im Moment nicht herum, aber ihre Karten sehen\n" |
| 173 | +"ziemlich verwirrend aus mit den ganzen Linien, welche diese Welt " |
| 174 | "darstellen.\n"); |
| 175 | AddDetail(({"stellen", "stelle"}), |
| 176 | "Nichts sieht aus wie das andere, und die Ecken sind da keine Ausnahmen.\n"); |
| 177 | AddDetail(({"ecken","ecke"}), |
| 178 | "In einer der Ecken, gleich neben der Treppe, steht ein kleines braunes\n" |
| 179 | +"Holzbrett, das sofort Deine Aufmerksamkeit erregt. Wozu es wohl dient?\n"); |
| 180 | AddDetail("aufmerksamkeit", |
| 181 | "Du beschliesst, Dir das Brett sofort naeher zu betrachten, um sie zu\n" |
| 182 | +"befriedigen.\n"); |
| 183 | /* |
| 184 | AddDetail(({"brett","holzbrett"}), |
| 185 | "Ein unscheinbares kleines Brett steht in der Ecke des Raumes. Wenn man\n" |
| 186 | +"bedenkt, wie viele kleine Zettel daran befestigt wurden, kann es sich\n" |
| 187 | +"nur um ein schwarzes Brett handeln. Welche Informationen hier wohl\n" |
| 188 | +"ausgetauscht werden? Du koenntest natuerlich anfangen, die Zettel zu\n" |
| 189 | +"lesen, um das herauszufinden ...\n"); |
| 190 | AddDetail("zettel", |
| 191 | "Viele verschiedene Zettel stecken an dem Brett. Rote, gelbe, blaue,\n" |
| 192 | +"jeder scheint eine andere Farbe zu haben. Auf jedem von ihnen scheint\n" |
| 193 | +"etwas geschrieben zu sein.\n"); |
| 194 | AddDetail(({"farbe","farben"}), |
| 195 | "Es sind so viele, Du wuerdest bestimmt jahrelang zaehlen.\n"); |
| 196 | AddDetail("informationen", |
| 197 | "Wenn Du die Zettel liest, findest Du bestimmt welche."); |
| 198 | */ |
| 199 | AddDetail(({"wissenschaften", "eigenschaften"}), #'Funktion); //'); |
| 200 | AddDetail(({"narben", "schwertstreich"}), |
| 201 | "Die Narben in den Holzbalken sind schon recht alt. Es ist lange her, dass\n" |
| 202 | +"hier richtig gekaempft wurde.\n"); |
| 203 | AddDetail(({"aura"}), |
| 204 | "Eine Aura von Licht umgibt jeden, der von der Strasse ins Haus kommt.\n"); |
| 205 | AddDetail(({"bewohner", "abenteurer"}), |
| 206 | "Hier, im Gildenhaus, ist jeder gern willkommen.\n"); |
| 207 | AddDetail(({"weise", "weiser", "recken"}), |
| 208 | "Die Weisen dieses Landes sind beruehmt, kommen aber nicht an die Be-\n" |
| 209 | +"ruehmtheit ihrer Vorfahren, die grossen Recken der ersten Jahre, heran.\n"); |
| 210 | AddDetail(({"realitaet"}), "Was ist schon real?\n"); |
| 211 | AddSpecialDetail("uhr","zeige_reboot"); |
| 212 | |
| 213 | |
| 214 | AddDetail(({"buero","foerderverein"}), |
| 215 | "Wichtige Informationen warten auf Dich im Buero des Foerdervereins!\n"); |
| 216 | AddDetail("informationen", "Du musst schon ins Buero gehen, wenn Du " |
| 217 | "die Informationen erhalten willst.\n"); |
| 218 | AddDetail("treppe","Die Treppe fuehrt nach Oben in das Buero des " |
| 219 | "Foerdervereins Projekt MorgenGrauen e.V.\n"); |
| 220 | AddExit("norden", "/d/ebene/room/PortVain/po_haf1"); |
| 221 | AddExit("oben","/p/verein/room/buero"); |
| 222 | |
| 223 | AddCmd("gehe|geh&\ngehtnicht",0,"Um Dich hier fortzubewegen, " |
| 224 | "solltest Du direkt das Kommando der Richtung eingeben," |
| 225 | " wie ,,norden'' oder ,,suedwesten''. Du kannst das auch " |
| 226 | "abkuerzen, durch ,,n'' oder ,,sw''."); |
| 227 | |
| 228 | AddItem("/obj/zeitungsautomat", REFRESH_REMOVE); |
| 229 | |
| 230 | AddSpecialDetail("karte","karte"); |
| 231 | AddSpecialDetail("brett","brett_fun"); |
| 232 | |
| 233 | EVENTD->RegisterEvent(EVT_LIB_ADVANCE, "handle_advance", this_object()); |
| 234 | |
| 235 | // nur auf dem Mudrechner laden (Stichwort: oeffentlich Mudlib) |
| 236 | #if MUDHOST == __HOST_NAME__ |
| 237 | AddItem("/p/service/troy/obj/buchautomat", REFRESH_REMOVE); |
| 238 | // AddItem("/p/service/mandragon/projektbrett/board", REFRESH_REMOVE); |
| 239 | // Die Biene fuer den Transport zur Wonnewichtlichtung. |
| 240 | // Ark, 19.08.05 |
| 241 | AddItem("/d/anfaenger/ark/mon/mantisbiene",REFRESH_DESTRUCT, |
| 242 | ([P_ANFAENGER_BIENENORT_:"Mensch", |
| 243 | P_ANFAENGER_BIENENZIEL_:({"/d/anfaenger/ark/rooms/wald16", |
| 244 | "zum Wald der Wonnewichte", |
| 245 | "/gilden/abenteurer"})])); |
| 246 | #endif |
| 247 | } |
| 248 | |
| 249 | string det_bild() |
| 250 | { |
| 251 | return |
| 252 | "Die Zeichnung und Gemaelde stellen MorgenGrauen aus den verschiedensten\n" |
| 253 | "Perspektiven dar. Einige davon zeigen abstrakte Darstellungen, wie sie\n" |
| 254 | "gerne von Kartographen gemacht werden, und andere zeigen wunderschoene\n" |
| 255 | "Darstellungen von Landschaften, wie dem Gebirge oder der Ebene. Besonders\n" |
| 256 | "schoen ist ein Bild der See. Tausende von Lichtspritzern verteilen sich\n" |
| 257 | "ueber die Wellen.\n" |
| 258 | "Ein kleines Schild zeigt folgendes:\n"+Funktion(); |
| 259 | } |
| 260 | |
| 261 | string brett_fun() |
| 262 | { |
| 263 | if (present("party\nbrett",this_object())) |
| 264 | return "Welches Brett meinst Du denn? Das Partybrett oder das Holzbrett?\n"; |
| 265 | return GetDetail("holzbrett"); |
| 266 | } |
| 267 | |
| 268 | int beitreten() |
| 269 | { |
| 270 | if (::beitreten()<1) |
| 271 | return 1; // Meldung vom Gildenmaster oder Gildenobjekt |
| 272 | write("Du bist jetzt ein Abenteurer.\n"); |
| 273 | adjust_title(PL); |
| 274 | return 1; |
| 275 | } |
| 276 | |
| 277 | varargs int austreten(int loss) |
| 278 | { |
| 279 | if (::austreten()<1) |
| 280 | return 1; // Meldung kommt vom Gildenmaster |
| 281 | write("Du bist nun kein Abenteurer mehr.\n"); |
| 282 | return 1; |
| 283 | } |
| 284 | |
| 285 | string Funktion() |
| 286 | { string re; |
| 287 | re = ("Moegliche Befehle sind:\n" |
| 288 | +" liste\n" |
| 289 | +" erhoehe (stufe)\n" |
| 290 | +" kosten\n" |
| 291 | +" lerne\n"); |
| 292 | if (this_player()->QueryProp(P_GUILD)!="abenteurer") |
| 293 | re += (" trete in gilde ein\n"+ |
| 294 | " trete aus gilde aus\n"); |
| 295 | return re; |
| 296 | } |
| 297 | |
| 298 | string Schmutz() |
| 299 | { |
| 300 | // hier sollte sich doch glatt ein Zaubertrank lohnen!! |
| 301 | return "In den Fugen befindet sich viel Schmutz.\n"; |
| 302 | } |
| 303 | |
| 304 | // Fuer Spielerstufenaufstiege gerufen - egal in welcher Gilde. |
| 305 | public void handle_advance(string eid, object trigob, mixed data) { |
| 306 | |
| 307 | object pl = data[E_OBJECT]; |
| 308 | if (!pl || !IsGuildMember(pl) || !interactive(pl)) |
| 309 | return; |
| 310 | |
| 311 | int lvl=pl->QueryProp(P_LEVEL); |
| 312 | // nicht fuer Level 1, da ist genug scroll... |
| 313 | if (lvl == 1) return; |
| 314 | |
| 315 | // Alle Spells raussuchen, die der Spieler lernen kann. |
| 316 | string *spells=filter(m_indices(Query(P_GUILD_SKILLS,F_VALUE)), |
| 317 | function int (string sp) |
| 318 | { |
| 319 | mapping ski = QuerySpell(sp); |
| 320 | if (!ski) return 0; // kein Spell |
| 321 | if (pl->QuerySkillAbility(sp) > 0 |
| 322 | || check_restrictions(pl, ski[SI_SKILLRESTR_LEARN])) |
| 323 | return 0; // Vorraussetzungen nicht erfuellt oder schon gelernt. |
| 324 | return 1; // offenbar ist sp lernbar. |
| 325 | } |
| 326 | ); |
| 327 | |
| 328 | int count=sizeof(spells); |
| 329 | if (!count) |
| 330 | return; |
| 331 | |
| 332 | if (count == 1) { |
| 333 | tell_object(pl, break_string("Dir faellt auf einmal auf, dass Du " |
| 334 | "versuchen koenntest, den Zauberspruch \"" + spells[0] |
| 335 | + "\" in der Abenteurergilde zu erlernen.",78)); |
| 336 | } |
| 337 | else { |
| 338 | tell_object(pl, break_string("Dir faellt auf einmal auf, dass Du " |
| 339 | "versuchen koenntest, die folgenden Zaubersprueche in der " |
| 340 | "Abenteurergilde zu erlernen:",78)); |
| 341 | tell_object(pl, CountUp(spells) + "\n"); |
| 342 | } |
| 343 | } |
| 344 | |
| 345 | // wird aus Spielerobjekt, /std/gilde.c und Gildenmaster gerufen (mindestens) |
| 346 | // aktualisiert den Gildenlevel auf den Spielerlevel und setzt den per |
| 347 | // get_new_title() aus den Gildentiteln ermittelten Gildentitel. |
| 348 | void adjust_title(object pl) { |
| 349 | int lv; |
| 350 | |
| 351 | // bei P_LEVEL < 0 ist der Spieler noch "nicht fertig". |
| 352 | // Der Titel wird anschliessend noch korrekt gesetzt. |
| 353 | if (!pl || !IsGuildMember(pl) || (lv=pl->QueryProp(P_LEVEL)) < 0) |
| 354 | return; |
| 355 | |
| 356 | pl->SetProp(P_GUILD_LEVEL,lv); |
| 357 | if (!lv) lv=1; |
| 358 | pl->SetProp(P_GUILD_TITLE, get_new_title(lv,pl)); |
| 359 | // Spielertitel nullen, damit der Gildentitel angezeigt wird. |
| 360 | if (!IS_SEER(pl) && !FAO_HAS_TITLE_GIFT(pl)) |
| 361 | pl->SetProp(P_TITLE,0); |
| 362 | } |
| 363 | |
| 364 | string karte() { |
| 365 | if (this_player() && present("karte",this_player())) return 0; |
| 366 | return GetDetail("karten"); |
| 367 | } |
| 368 | |
Arathorn | 306aa03 | 2018-08-29 22:18:28 +0200 | [diff] [blame] | 369 | public varargs void init(object origin) { |
MG Mud User | 3c1f5a8 | 2016-06-25 09:57:34 +0200 | [diff] [blame] | 370 | int res; |
| 371 | object ob; |
| 372 | |
Arathorn | 306aa03 | 2018-08-29 22:18:28 +0200 | [diff] [blame] | 373 | ::init(origin); |
MG Mud User | 3c1f5a8 | 2016-06-25 09:57:34 +0200 | [diff] [blame] | 374 | |
| 375 | // Von Ark, an alle Rassenstartpunkte |
| 376 | if (ob=present("\nentdecker_obj",this_player())) |
| 377 | ob->Check_And_Update(this_player(),"Menschen"); |
| 378 | } |
| 379 | |