blob: 95c73f607707b6de68251880de48c21fe9d51a05 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001#pragma strong_types,save_types
2
3inherit "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
29static int f_cnt, f_deg;
30
31int
32QueryFCnt() {
33 return f_cnt;
34}
35
36int
37SetFCnt(int fc) {
38 if(fc > -1 && fc < F_MAX)
39 f_cnt = fc;
40 return f_cnt;
41}
42
43int
44QueryFDeg() {
45 return f_deg;
46}
47
48void
49create() {
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
123string
124_query_race() {
125 return "Ork";
126}
127
128string
129_query_real_race() {
130 return "Ork";
131}
132
133string
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
149int
150QueryAllowSelect() {
151 return 1;
152}
153
154string
155*_query_racestring() {
156 if (QueryProp(P_GENDER)==FEMALE)
157 return ({"Orkin","Orkin","Orkin","Orkin"});
158 return ({"Ork","Orkes","Ork","Ork"});
159}
160
161string
162_query_default_guild(){
163 return "urukhai";
164}
165
166mixed
167RaceDefault(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
179protected 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
188void
189Attack(object enemy) {
190 if(f_cnt > 0)
191 f_cnt--;
192 return ::Attack(enemy);
193}
194
195varargs 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}