blob: 819d279a8cbe22d708e2804ca4853552aa6ddc3f [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"+
Zaphob53f7d942022-08-03 16:33:09 +0200186 "Im Kampf gegen einen Felinen sollte man sehr vorsichtig "+
187 "sein, da Felinen ueber eine hohe Geschwindigkeit sowie Geschick "+
188 "und Intelligenz verfuegen. Auch die spitzen Krallen sind "+
189 "nicht zu verachten und so mancher Gegner musste schon als Ersatz "+
190 "fuer einen Kratzbaum herhalten.",78,0,1);
MG Mud User88f12472016-06-24 23:31:02 +0200191}
192
193// Geschlechtsabhaengiges Rassenbezeichnungs-Array
194string *_query_racestring()
195{
196 if (QueryProp(P_GENDER)==2)
197 return ({"Felinin","Felinin","Felinin","Felinin"});
198 return ({"Feline","Felinen","Felinen","Felinen"});
199}
200
201// Regeneration der Lebenspunkte ist von der Umgebung abhaengig
202// Im Wald und Dschungel geht es schneller, in der Wueste und im
203// Polargebiet dagegen langsamer.
204int _query_hp_delay()
205{
206 int re;
207 string fn;
208
209 re = Query(P_HP_DELAY);
210 if (environment() && !(environment()->QueryProp(P_INDOORS)) &&
211 fn=object_name(environment()))
212 {
213 if (fn[0..12]=="/d/dschungel/" || fn[0..7]=="/d/wald/")
214 re--;
215 else if (fn[0..9]=="/d/wueste/" || fn[0..8]=="/d/polar/")
216 re++;
217 }
218 return re;
219}
220
221// Regeneration der Magiepunkte ist von der Umgebung abhaengig
222// Im Wald und Dschungel geht es schneller, in der Wueste und im
223// Polargebiet dagegen langsamer.
224int _query_sp_delay()
225{
226 int re;
227 string fn;
228
229 re = Query(P_SP_DELAY);
230 if (environment() && !(environment()->QueryProp(P_INDOORS)) &&
231 fn=object_name(environment()))
232 {
233 if (fn[0..12]=="/d/dschungel/" || fn[0..7]=="/d/wald/")
234 re--;
235 else if (fn[0..9]=="/d/wueste/" || fn[0..8]=="/d/polar/")
236 re++;
237 }
238 return re;
239}
240
241string _query_default_guild(){
242 return "katzenkrieger";
243}
244
245mixed RaceDefault(string arg)
246{
247 if (!arg)
248 return 0;
249 switch(arg)
250 {
251 case P_HANDS :
252 return ({" mit scharfen Krallen",40, ({DT_RIP}) });
253 case P_BODY :
254 return 15;
255 }
256 return base::RaceDefault(arg);
257}