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