blob: 9c8b16cfae96c7e322a6521cd10f3194c79da82f [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// shells/feline.c -- Feline Shell
4//
5// $Id: feline.c 8487 2013-05-21 19:15:52Z Zesstra $
6
7#pragma strong_types,save_types
8
9inherit "/std/player/base";
10
11#include <attributes.h>
12#include <combat.h>
13#include <health.h>
14#include <new_skills.h>
15#include <properties.h>
16#include <language.h>
17#include <wizlevels.h>
18#include <defuel.h>
19
20
21void create()
22{
23 if (!clonep() || object_name(this_object()) == __FILE__[0..<3]) {
24 set_next_reset(-1);
25 return;
26 }
27
28 int i,g;
29 mixed h;
30
31 base::create();
32
33// Startraum/Kapelle setzen
34 SetDefaultHome("/d/dschungel/paracelsus/room/fkapelle");
35 SetDefaultPrayRoom("/d/dschungel/paracelsus/room/fkapelle");
36
37// Besondere rassenspezifische Properties (bei denen es nichts macht, wenn
38// sie nach jedem Einloggen neu gesetzt werden):
39
40 SetProp(P_ATTRIBUTES_OFFSETS, // Summe 4 statt 6 wg. SA_SPEED
41 ([
42 A_STR : 1,
43 A_INT : 2,
Arathorn4a1c9002021-02-23 19:59:49 +010044 A_DEX : 2
MG Mud User88f12472016-06-24 23:31:02 +020045 ]) );
46 SetProp(P_AVERAGE_SIZE,200);
47 SetProp(P_AVERAGE_WEIGHT,85000);
48 SetProp(P_BODY,15);
49 SetProp(P_SKILL_ATTRIBUTE_OFFSETS,([SA_SPEED:120]));
50 SetProp(P_MATERIAL_KNOWLEDGE,
51 ([
52 MATGROUP_WOOD : 60,
53 MATGROUP_JEWEL : 100,
54 MATGROUP_EATABLE : 30
55 ]) );
56
57 SetProp(P_MAGIC_RESISTANCE_OFFSET,
58 ([
59 MT_ANGRIFF : 200,
60 MT_ILLUSION : -500,
61 MT_VERWANDLUNG : 500,
62 MT_PSYCHO : 1000
63 ]) );
64
65 SetProp(P_RESISTANCE_STRENGTHS,
66 ([
67 DT_WATER : -0.1,
68 DT_ACID : 0.1,
69 DT_COLD : 0.1
70 ]) );
71
72// Lebenspunkte werden langsamer als normal regeneriert
73 SetProp(P_HP_DELAY,HEAL_DELAY+1);
74
75// Magiepunkte werden schneller als normal regeneriert
76 SetProp(P_SP_DELAY,HEAL_DELAY-1);
77
78// Gift wirkt etwas langsamer als normal
79 SetProp(P_POISON_DELAY,POISON_DELAY+1);
80
81// Getraenke werden etwas schneller als normal abgebaut
82 SetProp(P_DRINK_DELAY,DRINK_DELAY-1);
83
84// Essen wird etwas schneller als normal abgebaut ...
85 SetProp(P_FOOD_DELAY,FOOD_DELAY-1);
86 SetProp(P_MAX_FOOD,140);
87
88// Es gibt einige Sachen, die sollen nur beim ersten Einloggen gesetzt werden.
89// Andere muessen nachtraeglich - aber nur einmal - gemacht werden, weil sich
90// etwas geaendert hat.
91 switch( QueryProp(P_SHELL_VERSION) )
92 {
93 case 0 :
94
95 g=QueryProp(P_GENDER);
96
97 if ( !(i=QueryProp(P_SIZE)) || (i<(g==FEMALE?165:170))
98 || (i>(g==FEMALE?225:230)) )
99 {
100 SetProp(P_SIZE, (g==FEMALE?195:200)
101 + random(16) - random(16) + random(16) - random(16) );
102 }
103
104 if( !(i=QueryProp(P_WEIGHT)) || (i<(g==FEMALE?70000:77000))
105 || (i>(g==FEMALE?88000:95000)) || (i==75000) )
106 {
107 SetProp(P_WEIGHT, (g==FEMALE?70000:77000)
108 + random(4501) + random(4501) + random(4501) + random(4501) );
109 }
110
111
112 SetProp(P_MATERIAL,([
113 MAT_MISC_LIVING : 90,
114 MAT_PELT : 8,
115 MAT_HORN : 2
116 ]) );
117
118 if ( !IS_SEER(this_object()) )
119 {
120 SetProp(P_MSGIN,"schleicht herein");
121 SetProp(P_MSGOUT,"schleicht");
122 SetProp(P_MMSGIN,"erscheint mit einem grellen Blitz");
123 SetProp(P_MMSGOUT,"verschwindet mit einem grellen Blitz");
124 SetProp(P_HANDS,({" mit scharfen Krallen",40, ({DT_RIP}) }));
125 }
126 else
127 {
128 if ( !pointerp(h=QueryProp(P_HANDS)) || (sizeof(h)<1) )
129 h = ({" mit scharfen Krallen",40, ({DT_RIP}) });
130 else
131 h = ({h[0],40, ({DT_RIP}) });
132 SetProp(P_HANDS, h);
133 }
134
135 if ( !pointerp(h=QueryProp(P_CHANNELS)) )
136 SetProp(P_CHANNELS,({"katzenkrieger"}));
137 else if ( member(h,"katzenkrieger")==-1 )
138 SetProp(P_CHANNELS, h + ({"katzenkrieger"}) );
139
140 Set(P_SIZE,SAVE,F_MODE_AS);
141 Set(P_MATERIAL,SAVE,F_MODE_AS);
142 Set(P_WEIGHT,SAVE,F_MODE_AS);
143
144 default :
145
146 SetProp(P_SHELL_VERSION,1);
147 }
148 SetProp(P_DEFUEL_LIMIT_FOOD,70);
149 SetProp(P_DEFUEL_LIMIT_DRINK,40);
150 SetProp(P_DEFUEL_TIME_FOOD,400);
151 SetProp(P_DEFUEL_TIME_DRINK,300);
152 SetProp(P_DEFUEL_AMOUNT_FOOD,0.55);
153 SetProp(P_DEFUEL_AMOUNT_DRINK,0.4);
154
155}
156
157// Diese Rasse kann derzeit gewaehlt werden:
158int QueryAllowSelect() { return 1; }
159
160// Rassenbezeichnung
161string _query_race()
162{
163 return "Feline";
164}
165
166string _query_real_race()
167{
168 return "Feline";
169}
170
171// Die Rassenbeschreibung, die man beim ersten Einloggen abrufen kann.
172string _query_racedescr()
173{
174 return break_string(
175 "Felinen sind aufrecht gehende Katzenwesen.\n"+
176 "Ihre Heimat ist der Dschungel. Kaum jemand duerfte sich dort "+
177 "besser zurechtfinden als sie. Bedingt durch diese Umgebung "+
178 "haben sie im Laufe der Zeit eine Vorliebe fuer elegante Hoelzer "+
179 "und funkelnde Edelsteine entwickelt. Sie sind zwar nicht so "+
180 "'raffgierig' wie Zwerge, aber dennoch sollte man besser nicht "+
181 "versuchen, einem Felinen einen Edelstein wegzunehmen. Sie "+
182 "benutzen die Edelsteine sehr gerne, um sich damit zu schmuecken. "+
183 "Felinen betreiben sogar einen regelrechten Koerperkult, "+
184 "insbesondere wenn es darum geht, das Fell oder die Krallen zu "+
185 "faerben. Edelsteine kommen da als Accessoires gerade recht.\n"+
186 "Auch im Kampf gegen einen Felinen sollte man sehr vorsichtig "+
187 "sein, da Felinen ihre geringe Ausdauer durch eine hohe "+
188 "Geschwindigkeit sowie Geschick und Intelligenz wettmachen. "+
189 "Auch die Spitzen Krallen sind da nicht zu verachten und so "+
190 "mancher Gegner musste schon als Ersatz fuer einen Kratzbaum "+
191 "herhalten.",78,0,1);
192}
193
194// Geschlechtsabhaengiges Rassenbezeichnungs-Array
195string *_query_racestring()
196{
197 if (QueryProp(P_GENDER)==2)
198 return ({"Felinin","Felinin","Felinin","Felinin"});
199 return ({"Feline","Felinen","Felinen","Felinen"});
200}
201
202// Regeneration der Lebenspunkte ist von der Umgebung abhaengig
203// Im Wald und Dschungel geht es schneller, in der Wueste und im
204// Polargebiet dagegen langsamer.
205int _query_hp_delay()
206{
207 int re;
208 string fn;
209
210 re = Query(P_HP_DELAY);
211 if (environment() && !(environment()->QueryProp(P_INDOORS)) &&
212 fn=object_name(environment()))
213 {
214 if (fn[0..12]=="/d/dschungel/" || fn[0..7]=="/d/wald/")
215 re--;
216 else if (fn[0..9]=="/d/wueste/" || fn[0..8]=="/d/polar/")
217 re++;
218 }
219 return re;
220}
221
222// Regeneration der Magiepunkte ist von der Umgebung abhaengig
223// Im Wald und Dschungel geht es schneller, in der Wueste und im
224// Polargebiet dagegen langsamer.
225int _query_sp_delay()
226{
227 int re;
228 string fn;
229
230 re = Query(P_SP_DELAY);
231 if (environment() && !(environment()->QueryProp(P_INDOORS)) &&
232 fn=object_name(environment()))
233 {
234 if (fn[0..12]=="/d/dschungel/" || fn[0..7]=="/d/wald/")
235 re--;
236 else if (fn[0..9]=="/d/wueste/" || fn[0..8]=="/d/polar/")
237 re++;
238 }
239 return re;
240}
241
242string _query_default_guild(){
243 return "katzenkrieger";
244}
245
246mixed RaceDefault(string arg)
247{
248 if (!arg)
249 return 0;
250 switch(arg)
251 {
252 case P_HANDS :
253 return ({" mit scharfen Krallen",40, ({DT_RIP}) });
254 case P_BODY :
255 return 15;
256 }
257 return base::RaceDefault(arg);
258}