blob: f590fab9d9796d74824c9e542a738f765ac08cce [file] [log] [blame]
// MorgenGrauen MUDlib
//
// shells/feline.c -- Feline Shell
//
// $Id: feline.c 8487 2013-05-21 19:15:52Z Zesstra $
#pragma strong_types,save_types
inherit "/std/player/base";
#include <attributes.h>
#include <combat.h>
#include <health.h>
#include <new_skills.h>
#include <properties.h>
#include <language.h>
#include <wizlevels.h>
#include <defuel.h>
void create()
{
if (!clonep() || object_name(this_object()) == __FILE__[0..<3]) {
set_next_reset(-1);
return;
}
int i,g;
mixed h;
base::create();
// Startraum/Kapelle setzen
SetDefaultHome("/d/dschungel/paracelsus/room/fkapelle");
SetDefaultPrayRoom("/d/dschungel/paracelsus/room/fkapelle");
// Besondere rassenspezifische Properties (bei denen es nichts macht, wenn
// sie nach jedem Einloggen neu gesetzt werden):
SetProp(P_ATTRIBUTES_OFFSETS, // Summe 4 statt 6 wg. SA_SPEED
([
A_STR : 1,
A_INT : 2,
A_DEX : 2,
A_CON : -1
]) );
SetProp(P_AVERAGE_SIZE,200);
SetProp(P_AVERAGE_WEIGHT,85000);
SetProp(P_BODY,15);
SetProp(P_SKILL_ATTRIBUTE_OFFSETS,([SA_SPEED:120]));
SetProp(P_MATERIAL_KNOWLEDGE,
([
MATGROUP_WOOD : 60,
MATGROUP_JEWEL : 100,
MATGROUP_EATABLE : 30
]) );
SetProp(P_MAGIC_RESISTANCE_OFFSET,
([
MT_ANGRIFF : 200,
MT_ILLUSION : -500,
MT_VERWANDLUNG : 500,
MT_PSYCHO : 1000
]) );
SetProp(P_RESISTANCE_STRENGTHS,
([
DT_WATER : -0.1,
DT_ACID : 0.1,
DT_COLD : 0.1
]) );
// Lebenspunkte werden langsamer als normal regeneriert
SetProp(P_HP_DELAY,HEAL_DELAY+1);
// Magiepunkte werden schneller als normal regeneriert
SetProp(P_SP_DELAY,HEAL_DELAY-1);
// Gift wirkt etwas langsamer als normal
SetProp(P_POISON_DELAY,POISON_DELAY+1);
// Getraenke werden etwas schneller als normal abgebaut
SetProp(P_DRINK_DELAY,DRINK_DELAY-1);
// Essen wird etwas schneller als normal abgebaut ...
SetProp(P_FOOD_DELAY,FOOD_DELAY-1);
SetProp(P_MAX_FOOD,140);
// Es gibt einige Sachen, die sollen nur beim ersten Einloggen gesetzt werden.
// Andere muessen nachtraeglich - aber nur einmal - gemacht werden, weil sich
// etwas geaendert hat.
switch( QueryProp(P_SHELL_VERSION) )
{
case 0 :
g=QueryProp(P_GENDER);
if ( !(i=QueryProp(P_SIZE)) || (i<(g==FEMALE?165:170))
|| (i>(g==FEMALE?225:230)) )
{
SetProp(P_SIZE, (g==FEMALE?195:200)
+ random(16) - random(16) + random(16) - random(16) );
}
if( !(i=QueryProp(P_WEIGHT)) || (i<(g==FEMALE?70000:77000))
|| (i>(g==FEMALE?88000:95000)) || (i==75000) )
{
SetProp(P_WEIGHT, (g==FEMALE?70000:77000)
+ random(4501) + random(4501) + random(4501) + random(4501) );
}
SetProp(P_MATERIAL,([
MAT_MISC_LIVING : 90,
MAT_PELT : 8,
MAT_HORN : 2
]) );
if ( !IS_SEER(this_object()) )
{
SetProp(P_MSGIN,"schleicht herein");
SetProp(P_MSGOUT,"schleicht");
SetProp(P_MMSGIN,"erscheint mit einem grellen Blitz");
SetProp(P_MMSGOUT,"verschwindet mit einem grellen Blitz");
SetProp(P_HANDS,({" mit scharfen Krallen",40, ({DT_RIP}) }));
}
else
{
if ( !pointerp(h=QueryProp(P_HANDS)) || (sizeof(h)<1) )
h = ({" mit scharfen Krallen",40, ({DT_RIP}) });
else
h = ({h[0],40, ({DT_RIP}) });
SetProp(P_HANDS, h);
}
if ( !pointerp(h=QueryProp(P_CHANNELS)) )
SetProp(P_CHANNELS,({"katzenkrieger"}));
else if ( member(h,"katzenkrieger")==-1 )
SetProp(P_CHANNELS, h + ({"katzenkrieger"}) );
Set(P_SIZE,SAVE,F_MODE_AS);
Set(P_MATERIAL,SAVE,F_MODE_AS);
Set(P_WEIGHT,SAVE,F_MODE_AS);
default :
SetProp(P_SHELL_VERSION,1);
}
SetProp(P_DEFUEL_LIMIT_FOOD,70);
SetProp(P_DEFUEL_LIMIT_DRINK,40);
SetProp(P_DEFUEL_TIME_FOOD,400);
SetProp(P_DEFUEL_TIME_DRINK,300);
SetProp(P_DEFUEL_AMOUNT_FOOD,0.55);
SetProp(P_DEFUEL_AMOUNT_DRINK,0.4);
}
// Diese Rasse kann derzeit gewaehlt werden:
int QueryAllowSelect() { return 1; }
// Rassenbezeichnung
string _query_race()
{
return "Feline";
}
string _query_real_race()
{
return "Feline";
}
// Die Rassenbeschreibung, die man beim ersten Einloggen abrufen kann.
string _query_racedescr()
{
return break_string(
"Felinen sind aufrecht gehende Katzenwesen.\n"+
"Ihre Heimat ist der Dschungel. Kaum jemand duerfte sich dort "+
"besser zurechtfinden als sie. Bedingt durch diese Umgebung "+
"haben sie im Laufe der Zeit eine Vorliebe fuer elegante Hoelzer "+
"und funkelnde Edelsteine entwickelt. Sie sind zwar nicht so "+
"'raffgierig' wie Zwerge, aber dennoch sollte man besser nicht "+
"versuchen, einem Felinen einen Edelstein wegzunehmen. Sie "+
"benutzen die Edelsteine sehr gerne, um sich damit zu schmuecken. "+
"Felinen betreiben sogar einen regelrechten Koerperkult, "+
"insbesondere wenn es darum geht, das Fell oder die Krallen zu "+
"faerben. Edelsteine kommen da als Accessoires gerade recht.\n"+
"Auch im Kampf gegen einen Felinen sollte man sehr vorsichtig "+
"sein, da Felinen ihre geringe Ausdauer durch eine hohe "+
"Geschwindigkeit sowie Geschick und Intelligenz wettmachen. "+
"Auch die Spitzen Krallen sind da nicht zu verachten und so "+
"mancher Gegner musste schon als Ersatz fuer einen Kratzbaum "+
"herhalten.",78,0,1);
}
// Geschlechtsabhaengiges Rassenbezeichnungs-Array
string *_query_racestring()
{
if (QueryProp(P_GENDER)==2)
return ({"Felinin","Felinin","Felinin","Felinin"});
return ({"Feline","Felinen","Felinen","Felinen"});
}
// Regeneration der Lebenspunkte ist von der Umgebung abhaengig
// Im Wald und Dschungel geht es schneller, in der Wueste und im
// Polargebiet dagegen langsamer.
int _query_hp_delay()
{
int re;
string fn;
re = Query(P_HP_DELAY);
if (environment() && !(environment()->QueryProp(P_INDOORS)) &&
fn=object_name(environment()))
{
if (fn[0..12]=="/d/dschungel/" || fn[0..7]=="/d/wald/")
re--;
else if (fn[0..9]=="/d/wueste/" || fn[0..8]=="/d/polar/")
re++;
}
return re;
}
// Regeneration der Magiepunkte ist von der Umgebung abhaengig
// Im Wald und Dschungel geht es schneller, in der Wueste und im
// Polargebiet dagegen langsamer.
int _query_sp_delay()
{
int re;
string fn;
re = Query(P_SP_DELAY);
if (environment() && !(environment()->QueryProp(P_INDOORS)) &&
fn=object_name(environment()))
{
if (fn[0..12]=="/d/dschungel/" || fn[0..7]=="/d/wald/")
re--;
else if (fn[0..9]=="/d/wueste/" || fn[0..8]=="/d/polar/")
re++;
}
return re;
}
string _query_default_guild(){
return "katzenkrieger";
}
mixed RaceDefault(string arg)
{
if (!arg)
return 0;
switch(arg)
{
case P_HANDS :
return ({" mit scharfen Krallen",40, ({DT_RIP}) });
case P_BODY :
return 15;
}
return base::RaceDefault(arg);
}