MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | #pragma strong_types,save_types |
| 2 | |
| 3 | inherit "std/player/base"; |
| 4 | |
| 5 | #include <properties.h> |
| 6 | #include <attributes.h> |
| 7 | #include <wizlevels.h> |
| 8 | #include <health.h> |
| 9 | #include <new_skills.h> |
| 10 | #include <language.h> |
| 11 | #include <combat.h> |
| 12 | #include <defines.h> |
| 13 | #include <defuel.h> |
| 14 | |
| 15 | /* |
| 16 | * Orks: |
| 17 | * Orks sind eigentlich boese und blutruenstig, was auch oft genug zum |
| 18 | * Vorschein tritt :) Wenn ein Ork zu heftig forscht, quengelt er rum |
| 19 | * und weigert sich, bis er nicht wieder ein bisschen Blut verspritzt |
| 20 | * hat, |
| 21 | */ |
| 22 | #define F_MAX 500 |
| 23 | #define F_DEG 3 |
| 24 | #define NO_EXAMINE ({ \ |
| 25 | "Du knurrst: Ich will Blut, keine Bluemchen.", \ |
| 26 | "Du grummelst: Bin ich ein Forscher, oder was?" \ |
| 27 | }) |
| 28 | |
| 29 | static int f_cnt, f_deg; |
| 30 | |
| 31 | int |
| 32 | QueryFCnt() { |
| 33 | return f_cnt; |
| 34 | } |
| 35 | |
| 36 | int |
| 37 | SetFCnt(int fc) { |
| 38 | if(fc > -1 && fc < F_MAX) |
| 39 | f_cnt = fc; |
| 40 | return f_cnt; |
| 41 | } |
| 42 | |
| 43 | int |
| 44 | QueryFDeg() { |
| 45 | return f_deg; |
| 46 | } |
| 47 | |
| 48 | void |
| 49 | create() { |
| 50 | if (!clonep() || object_name(this_object()) == __FILE__[0..<3]) { |
| 51 | set_next_reset(-1); |
| 52 | return; |
| 53 | } |
| 54 | |
| 55 | mixed res; |
| 56 | |
| 57 | base::create(); |
| 58 | |
| 59 | f_cnt=0; |
| 60 | f_deg=F_DEG; |
| 61 | |
| 62 | SetDefaultHome("/d/vland/morgoth/room/city/rathalle"); |
| 63 | SetDefaultPrayRoom("/d/vland/morgoth/room/city/c0606"); |
| 64 | SetProp(P_ATTRIBUTES_OFFSETS,([A_STR:3,A_INT:-1,A_CON:2])); |
| 65 | /* Kleine aeh grosse Muskelpakete */ |
| 66 | SetProp(P_SKILL_ATTRIBUTE_OFFSETS,([SA_DAMAGE:110])); |
| 67 | SetProp(P_AVERAGE_SIZE,195); |
| 68 | SetProp(P_AVERAGE_WEIGHT,125000); // ziemlich schwer, viele Muskeln |
| 69 | SetProp(P_MATERIAL_KNOWLEDGE,([MATGROUP_DEAD:60, |
| 70 | MATGROUP_BIO:40, |
| 71 | MATGROUP_ELEMENTAL: 20, |
| 72 | MAT_BLOOD:100])); |
| 73 | SetProp(P_CHANNELS, QueryProp(P_CHANNELS) + ({"Uruk-Hai"})); |
| 74 | SetProp(P_RESISTANCE_STRENGTHS, |
| 75 | ([ |
| 76 | DT_FIRE : -0.2, |
| 77 | DT_HOLY :0.3, |
| 78 | DT_UNHOLY : -0.2, |
| 79 | DT_ACID : 0.2 ])); |
| 80 | |
| 81 | SetProp(P_MAX_FOOD,110); |
| 82 | SetProp(P_MAX_DRINK,110); |
| 83 | SetProp(P_MAX_ALCOHOL,150); |
| 84 | SetProp(P_DEFUEL_LIMIT_FOOD,50); |
| 85 | SetProp(P_DEFUEL_LIMIT_DRINK,70); |
| 86 | SetProp(P_DEFUEL_TIME_FOOD,300); |
| 87 | SetProp(P_DEFUEL_TIME_DRINK,400); |
| 88 | SetProp(P_DEFUEL_AMOUNT_FOOD,0.4); |
| 89 | SetProp(P_DEFUEL_AMOUNT_DRINK,0.35); |
| 90 | |
| 91 | /* SP regenerieren sie nich ganz so schnell, dafuer sind sie |
| 92 | * ein bischen schneller bei Gift und Futter */ |
| 93 | SetProp(P_SP_DELAY,HEAL_DELAY+1); |
| 94 | SetProp(P_POISON_DELAY,POISON_DELAY-1); |
| 95 | SetProp(P_FOOD_DELAY,FOOD_DELAY-1); |
| 96 | |
| 97 | SetProp(P_MAGIC_RESISTANCE_OFFSET, |
| 98 | ([ MT_ANGRIFF : 500, |
| 99 | MT_ILLUSION : -250, |
| 100 | MT_BEHERRSCHUNG : -250, |
| 101 | MT_VERWANDLUNG : 500 ])); |
| 102 | |
| 103 | |
| 104 | if(!(res=QueryProp(P_HANDS)) || !pointerp(res) || (sizeof(res)<3)) |
| 105 | res=({" mit starken Haenden",35,({DT_BLUDGEON, DT_RIP}) }); |
| 106 | SetProp(P_HANDS,res); |
| 107 | /* Orks haben dicke Haut */ |
| 108 | SetProp(P_BODY,20); |
| 109 | |
| 110 | /* Groesse wird nur einmal gesetzt */ |
| 111 | if(!QueryProp(P_SIZE)){ |
| 112 | SetProp(P_SIZE,180+random(31)); |
| 113 | Set(P_SIZE,SAVE,F_MODE_AS); |
| 114 | } |
| 115 | |
| 116 | /* Dito Gewicht */ |
| 117 | if(!QueryProp(P_WEIGHT) || (QueryProp(P_WEIGHT) == 75000)){ |
| 118 | SetProp(P_WEIGHT,100000+random(25001)+random(25001)); |
| 119 | Set(P_WEIGHT,SAVE,F_MODE_AS); |
| 120 | } |
| 121 | } |
| 122 | |
| 123 | string |
| 124 | _query_race() { |
| 125 | return "Ork"; |
| 126 | } |
| 127 | |
| 128 | string |
| 129 | _query_real_race() { |
| 130 | return "Ork"; |
| 131 | } |
| 132 | |
| 133 | string |
| 134 | _query_racedescr() { |
| 135 | return break_string("Ein Ork. Die brutale Macht des Boesen. Ein " |
| 136 | "erbitterter Kaempfer, ohne Furcht vor dem Tod. So stellst Du " |
| 137 | "Dir einen Ork vor.\nDiese Orks sehen vielleicht ausserlich so " |
| 138 | "aus: Eine dicke und dunkle, lederartige Haut, die sicher " |
| 139 | "einiges an Schlaegen abhaelt. Lange Eckzaehne, die sicher boese " |
| 140 | "Wunden reissen koennen.\nDu spuerst, dass diese Orks hier ein " |
| 141 | "wenig anders sind. Ihren Drang nach dem Blut ihrer Feinde scheinen " |
| 142 | "sie recht gut unter Kontrolle zu haben, die meiste Zeit zumindest. " |
| 143 | "Sie sind in der Lage, friedlich zwischen den anderen Rassen zu " |
| 144 | "wandeln. Dennoch sind vor allem die Uruk-Hai Orks als Gegner nicht " |
| 145 | "zu unterschaetzen, sollte es doch einmal zu einem Kampf kommen.", |
| 146 | 78,0,BS_LEAVE_MY_LFS); |
| 147 | } |
| 148 | |
| 149 | int |
| 150 | QueryAllowSelect() { |
| 151 | return 1; |
| 152 | } |
| 153 | |
| 154 | string |
| 155 | *_query_racestring() { |
| 156 | if (QueryProp(P_GENDER)==FEMALE) |
| 157 | return ({"Orkin","Orkin","Orkin","Orkin"}); |
| 158 | return ({"Ork","Orkes","Ork","Ork"}); |
| 159 | } |
| 160 | |
| 161 | string |
| 162 | _query_default_guild(){ |
| 163 | return "urukhai"; |
| 164 | } |
| 165 | |
| 166 | mixed |
| 167 | RaceDefault(string arg) { |
| 168 | if (!arg) |
| 169 | return 0; |
| 170 | switch(arg) { |
| 171 | case P_HANDS : |
| 172 | return ({" mit starken Haenden",35,({DT_BLUDGEON,DT_RIP}) }); |
| 173 | case P_BODY : |
| 174 | return 25; |
| 175 | } |
| 176 | return base::RaceDefault(arg); |
| 177 | } |
| 178 | |
| 179 | protected void heart_beat() { |
| 180 | ::heart_beat(); |
| 181 | |
| 182 | if(f_cnt > 0 && !--f_deg) { |
| 183 | f_cnt--; |
| 184 | f_deg=F_DEG; |
| 185 | } |
| 186 | } |
| 187 | |
| 188 | void |
| 189 | Attack(object enemy) { |
| 190 | if(f_cnt > 0) |
| 191 | f_cnt--; |
| 192 | return ::Attack(enemy); |
| 193 | } |
| 194 | |
| 195 | varargs int |
| 196 | _examine(string str, int mode) { |
| 197 | |
| 198 | if(++f_cnt > F_MAX) { |
| 199 | tell_object(this_object(),break_string(NO_EXAMINE[random(sizeof(NO_EXAMINE))],78)); |
| 200 | return 1; |
| 201 | } |
| 202 | return ::_examine(str,mode); |
| 203 | } |