MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | // MorgenGrauen MUDlib |
| 2 | // |
| 3 | // shells/elf.c -- Elven Shell |
| 4 | // |
| 5 | // $Id: elf.c 8928 2014-09-08 16:18:41Z Zesstra $ |
| 6 | |
| 7 | #pragma strong_types,save_types |
| 8 | |
| 9 | inherit "std/player/base"; |
| 10 | |
| 11 | #include <properties.h> |
| 12 | #include <attributes.h> |
| 13 | #include <wizlevels.h> |
| 14 | #include <health.h> |
| 15 | #include <new_skills.h> |
| 16 | #include <language.h> |
| 17 | #include <combat.h> |
| 18 | #include <defuel.h> |
| 19 | |
| 20 | |
| 21 | |
| 22 | void create() |
| 23 | { |
| 24 | if (!clonep() || object_name(this_object()) == __FILE__[0..<3]) { |
| 25 | set_next_reset(-1); |
| 26 | return; |
| 27 | } |
| 28 | |
| 29 | base::create(); |
| 30 | SetDefaultHome("/d/wald/room/es_mitte"); |
| 31 | SetDefaultPrayRoom("/d/wald/room/es_mitte"); |
| 32 | SetProp(P_AVERAGE_SIZE,195); |
| 33 | SetProp(P_AVERAGE_WEIGHT,70000); |
| 34 | SetProp(P_SKILL_ATTRIBUTE_OFFSETS,([SA_ENEMY_SAVE:110])); |
| 35 | SetProp(P_ATTRIBUTES_OFFSETS,([A_INT:3,A_DEX:2,A_CON:1])); |
| 36 | SetProp(P_MATERIAL_KNOWLEDGE,([MATGROUP_WOOD:30, |
| 37 | MATGROUP_HERBAL:30, |
| 38 | MATGROUP_LIVING:20])); |
| 39 | |
| 40 | SetProp(P_MAX_FOOD,80); |
| 41 | SetProp(P_MAX_DRINK,150); |
| 42 | SetProp(P_MAX_ALCOHOL,70); |
| 43 | |
| 44 | SetProp(P_SP_DELAY,HEAL_DELAY-1); |
| 45 | SetProp(P_FOOD_DELAY,FOOD_DELAY+1); |
| 46 | SetProp(P_DRINK_DELAY,DRINK_DELAY-2); |
| 47 | SetProp(P_ALCOHOL_DELAY,ALCOHOL_DELAY+1); |
| 48 | |
| 49 | SetProp(P_MAGIC_RESISTANCE_OFFSET, |
| 50 | ([ MT_ILLUSION : 800, |
| 51 | MT_ANGRIFF : 200, |
| 52 | MT_VERWANDLUNG : 400, |
| 53 | MT_PSYCHO : 500 ])); |
| 54 | |
| 55 | // Elfen kriegen die Ebene der Wipfellaeufer per default. (Zu diesem |
| 56 | // Zeitpunkt stehen in P_CHANNELS nur die default channel drin, wird dann |
| 57 | // ueber das Einlesen des Savefiles ggf. ueberschrieben.) |
| 58 | SetProp(P_CHANNELS, QueryProp(P_CHANNELS) + ({"wipfellaeufer"})); |
| 59 | |
| 60 | if(!IS_SEER(this_object())){ |
| 61 | SetProp(P_MSGIN,"wandelt herein"); |
| 62 | SetProp(P_MSGOUT,"wandelt"); |
| 63 | } |
| 64 | |
| 65 | /* Groesse wird nur einmal gesetzt */ |
| 66 | if(!QueryProp(P_SIZE)){ |
| 67 | SetProp(P_SIZE,185+random(21)); |
| 68 | Set(P_SIZE,SAVE,F_MODE_AS); |
| 69 | } |
| 70 | |
| 71 | /* Dito Gewicht */ |
| 72 | if(!QueryProp(P_WEIGHT) || (QueryProp(P_WEIGHT) == 75000)){ |
| 73 | SetProp(P_WEIGHT,60000+random(20001)); |
| 74 | if(QueryProp(P_GENDER)==FEMALE) |
| 75 | SetProp(P_WEIGHT,QueryProp(P_WEIGHT)-5000); |
| 76 | Set(P_WEIGHT,SAVE,F_MODE_AS); |
| 77 | } |
| 78 | SetProp(P_DEFUEL_LIMIT_FOOD,40); |
| 79 | SetProp(P_DEFUEL_LIMIT_DRINK,20); |
| 80 | SetProp(P_DEFUEL_TIME_FOOD,400); |
| 81 | SetProp(P_DEFUEL_TIME_DRINK,200); |
| 82 | SetProp(P_DEFUEL_AMOUNT_FOOD,0.4); |
| 83 | SetProp(P_DEFUEL_AMOUNT_DRINK,0.35); |
| 84 | |
| 85 | } |
| 86 | |
| 87 | string _query_race() |
| 88 | { |
| 89 | return "Elf"; |
| 90 | } |
| 91 | |
| 92 | string _query_real_race() |
| 93 | { |
| 94 | return "Elf"; |
| 95 | } |
| 96 | |
| 97 | string _query_racedescr() |
| 98 | { |
| 99 | return |
| 100 | "\ |
| 101 | Als Elfen bezeichnet man in der Regel jene hageren Hinterwaeldler, deren\n\ |
| 102 | demonstratives Naturgehabe in der Regel nur durch ihre Liebe zu kitschigen\n\ |
| 103 | Gedichten und ausschweifendem Geschlechtsleben in den Schatten gestellt wird.\n\ |
| 104 | Einen Elf kann man im allgemeinen nicht nur an aeusseren Missbildungen\n\ |
| 105 | (spitze Ohren, spindelduerre Gestalt, blonde Haare) erkennen, sondern auch\n\ |
| 106 | an seiner aufdringlichen Art, ueber jeden und alles hemmungslos ins Gruene\n\ |
| 107 | loszuphilosophieren.\n"; |
| 108 | |
| 109 | } |
| 110 | |
| 111 | int QueryAllowSelect() { return 1; } |
| 112 | |
| 113 | string *_query_racestring() |
| 114 | { |
| 115 | if (QueryProp(P_GENDER)==2) |
| 116 | return ({"Elfe","Elfe","Elfe","Elfe"}); |
| 117 | return ({"Elf","Elfen","Elf","Elf"}); |
| 118 | } |
| 119 | int _query_hp_delay(){ |
| 120 | int re; |
| 121 | re = Query(P_HP_DELAY); |
| 122 | if (environment() && environment()->QueryProp(P_INDOORS)) |
| 123 | re++; |
| 124 | else |
| 125 | re--; |
| 126 | return re; |
| 127 | } |
| 128 | int _query_sp_delay(){ |
| 129 | int re; |
| 130 | re = Query(P_SP_DELAY); |
| 131 | if (environment() && environment()->QueryProp(P_INDOORS)) |
| 132 | re++; |
| 133 | else |
| 134 | re--; |
| 135 | return re; |
| 136 | } |
| 137 | |
| 138 | string _query_default_guild(){ |
| 139 | return "wipfellaeufer"; |
| 140 | } |
| 141 | |
| 142 | static void FinalSetup() |
| 143 | { |
| 144 | if(QueryProp(P_GUILD) != "chaos") |
| 145 | SetProp(P_RESISTANCE_STRENGTHS, |
| 146 | ([ DT_MAGIC : -0.2, |
| 147 | DT_HOLY : 0.1, |
| 148 | DT_UNHOLY : 0.3 ])); |
| 149 | else |
| 150 | SetProp(P_RESISTANCE_STRENGTHS, |
| 151 | ([ DT_MAGIC : -0.2, |
| 152 | DT_UNHOLY : 0.1, |
| 153 | DT_HOLY : 0.3 ])); |
| 154 | } |