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