server/src/common/spells/unitcurse.c

341 lines
7.4 KiB
C
Raw Normal View History

/* vi: set ts=2:
*
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
* Henning Peters (faroul@beyond.kn-bremen.de)
* Enno Rehling (enno@eressea-pbem.de)
* Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de)
*
* This program may not be used, modified or distributed without
* prior permission by the authors of Eressea.
*/
#include <config.h>
#include "eressea.h"
2002-05-09 12:42:41 +02:00
#include "unitcurse.h"
/* kernel includes */
#include "message.h"
#include "nrmessage.h"
#include "objtypes.h"
#include "curse.h"
/* util includes */
#include <message.h>
/* libc includes */
#include <string.h>
#include <stdlib.h>
#include <assert.h>
static int
cinfo_unit(const locale * lang, void * obj, typ_t typ, curse *c, int self)
{
message * msg;
unused(typ);
unused(self);
unused(obj);
assert(typ == TYP_UNIT);
msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no);
nr_render(msg, lang, buf, sizeof(buf), NULL);
msg_release(msg);
return 1;
}
static int
cinfo_unit_onlyowner(const locale * lang, void * obj, typ_t typ, curse *c, int self)
{
message * msg;
unit *u;
unused(typ);
assert(typ == TYP_UNIT);
u = (unit *)obj;
if (self){
msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no);
nr_render(msg, lang, buf, sizeof(buf), NULL);
msg_release(msg);
return 1;
}
return 0;
}
/* CurseInfo mit Spezialabfragen */
/* C_AURA */
/* erh<72>ht/senkt regeneration und maxaura um effect% */
static int
2002-05-09 12:42:41 +02:00
cinfo_auraboost(const locale * lang, void * obj, typ_t typ, curse *c, int self)
{
unit *u;
unused(typ);
assert(typ == TYP_UNIT);
u = (unit *)obj;
if (self){
if (c->effect > 100){
sprintf(buf, "%s f<>hlt sich von starken magischen Energien "
"durchstr<EFBFBD>mt. (%s)", u->name, curseid(c));
}else{
sprintf(buf, "%s hat Schwierigkeiten seine magischen Energien "
"zu sammeln. (%s)", u->name, curseid(c));
}
return 1;
}
return 0;
}
/* C_SLAVE */
static int
2002-05-09 12:42:41 +02:00
cinfo_slave(const locale * lang, void * obj, typ_t typ, curse *c, int self)
{
unit *u;
unused(typ);
assert(typ == TYP_UNIT);
u = (unit *)obj;
if (self){
sprintf(buf, "%s wird noch %d Woche%s unter unserem Bann stehen. (%s)",
u->name, c->duration, (c->duration == 1)? "":"n", curseid(c));
return 1;
}
return 0;
}
/* C_CALM */
static int
2002-05-09 12:42:41 +02:00
cinfo_calm(const locale * lang, void * obj, typ_t typ, curse *c, int self)
{
unit *u;
const race * rc;
faction *f;
unused(typ);
assert(typ == TYP_UNIT);
u = (unit *)obj;
if (c->magician){
rc = c->magician->irace;
f = c->magician->faction;
if (self) {
sprintf(buf, "%s mag %s", u->name, factionname(f));
} else {
sprintf(buf, "%s scheint %s zu m<>gen", u->name, LOC(f->locale, rc_name(rc, 1)));
}
scat(". (");
scat(itoa36(c->no));
scat(")");
return 1;
}
return 0;
}
/* C_SPEED */
static int
2002-05-09 12:42:41 +02:00
cinfo_speed(const locale * lang, void * obj, typ_t typ, curse *c, int self)
{
unit *u;
curse_unit * cu;
unused(typ);
assert(typ == TYP_UNIT);
u = (unit *)obj;
cu = (curse_unit *)c->data;
if (self){
sprintf(buf, "%d Person%s von %s %s noch %d Woche%s beschleunigt. (%s)",
cu->cursedmen, (cu->cursedmen == 1)? "":"en", u->name,
(cu->cursedmen == 1)? "ist":"sind", c->duration,
(c->duration == 1)? "":"n",
curseid(c));
return 1;
}
return 0;
}
/* C_ORC */
static int
2002-05-09 12:42:41 +02:00
cinfo_orc(const locale * lang, void * obj, typ_t typ, curse *c, int self)
{
unit *u;
2002-05-09 13:17:31 +02:00
message * msg;
unused(typ);
assert(typ == TYP_UNIT);
u = (unit *)obj;
if (self){
2002-05-09 13:17:31 +02:00
msg = msg_message(mkname("curseinfo", c->type->cname), "unit id", u, c->no);
nr_render(msg, lang, buf, sizeof(buf), NULL);
msg_release(msg);
return 1;
}
return 0;
}
/* C_KAELTESCHUTZ */
static int
2002-05-09 12:42:41 +02:00
cinfo_kaelteschutz(const locale * lang, void * obj, typ_t typ, curse *c, int self)
{
unit *u;
curse_unit * cu;
unused(typ);
assert(typ == TYP_UNIT);
u = (unit *)obj;
cu = (curse_unit *)c->data;
if (self){
sprintf(buf, "%d Person%s von %s %s sich vor K<>lte gesch<63>tzt. (%s)",
cu->cursedmen, (cu->cursedmen == 1)? "":"en", u->name,
(cu->cursedmen == 1)? "f<EFBFBD>hlt":"f<EFBFBD>hlen",
curseid(c));
return 1;
}
return 0;
}
/* C_SPARKLE */
static int
2002-05-09 12:42:41 +02:00
cinfo_sparkle(const locale * lang, void * obj, typ_t typ, curse *c, int self)
{
const char * effects[] = {
NULL, /* end grau*/
"%s ist im Traum eine Fee erschienen.",
"%s wird von b<>sen Alptr<74>umen geplagt.",
NULL, /* end traum */
"%s wird von einem glitzernden Funkenregen umgeben.",
"Ein schimmernder Lichterkranz umgibt %s.",
NULL, /* end tybied */
"Eine Melodie erklingt, und %s tanzt bis sp<73>t in die Nacht hinein.",
"%s findet eine kleine Fl<46>te, die eine wundersame Melodie spielt.",
"Die Frauen des nahegelegenen Dorfes bewundern %s verstohlen.",
"Eine Gruppe vorbeiziehender Bergarbeiter rufen %s eindeutig Zweideutiges nach.",
NULL, /* end cerrdor */
"%s bekommt von einer Schlange einen Apfel angeboten.",
"Ein Einhorn ber<65>hrt %s mit seinem Horn und verschwindet kurz darauf im Unterholz.",
"Vogelzwitschern begleitet %s auf all seinen Wegen.",
"Leuchtende Blumen erbl<62>hen rund um das Lager von %s.",
NULL, /* end gwyrrd */
"<EFBFBD>ber %s zieht eine Gruppe Geier ihre Kreise.",
"Der Kopf von %s hat sich in einen grinsenden Totensch<63>del verwandelt.",
"Ratten folgen %s auf Schritt und Tritt.",
"Pestbeulen befallen den K<>rper von %s.",
"Eine dunkle Fee erscheint %s im Schlaf. Sie ist von schauriger Sch<63>nheit.",
"F<EFBFBD>ulnisgeruch dringt %s aus allen K<>rper<65>ffnungen.",
NULL, /* end draig */
};
int m, begin=0, end=0;
unit *u;
unused(typ);
assert(typ == TYP_UNIT);
u = (unit *)obj;
if(!c->magician || !c->magician->faction) return 0;
for(m=0;m!=c->magician->faction->magiegebiet;++m) {
while (effects[end]!=NULL) ++end;
begin = end+1;
end = begin;
}
while (effects[end]!=NULL) ++end;
if (end==begin) return 0;
else sprintf(buf, effects[begin + c->effect % (end-begin)], u->name);
scat(" (");
scat(itoa36(c->no));
scat(")");
return 1;
}
/* C_STRENGTH */
static int
2002-05-09 12:42:41 +02:00
cinfo_strength(const locale * lang, void * obj, typ_t typ, curse *c, int self)
{
unused(c);
unused(typ);
assert(typ == TYP_UNIT);
unused(obj);
if (self){
sprintf(buf, "Die Leute strotzen nur so vor Kraft. (%s)",
curseid(c));
return 1;
}
return 0;
}
/* C_ALLSKILLS */
static int
2002-05-09 12:42:41 +02:00
cinfo_allskills(const locale * lang, void * obj, typ_t typ, curse *c, int self)
{
unused(obj);
unused(typ);
unused(c);
assert(typ == TYP_UNIT);
if (self){
sprintf(buf, "Wird von einem Alp geritten. (%s)", curseid(c));
return 1;
}
return 0;
}
/* C_SKILL */
static int
2002-05-09 12:42:41 +02:00
cinfo_skill(const locale * lang, void * obj, typ_t typ, curse *c, int self)
{
unit *u = (unit *)obj;
int sk = (int)c->data;
unused(typ);
if (self){
sprintf(buf, "%s ist in %s ungew<65>hnlich ungeschickt. (%s)", u->name,
skillname((skill_t)sk, u->faction->locale), curseid(c));
return 1;
}
return 0;
}
/* C_ITEMCLOAK */
static int
2002-05-09 12:42:41 +02:00
cinfo_itemcloak(const locale * lang, void * obj, typ_t typ, curse *c, int self)
{
unit *u;
unused(typ);
assert(typ == TYP_UNIT);
u = (unit *)obj;
if (self) {
sprintf(buf, "Die Ausr<73>stung von %s scheint unsichtbar. (%s)",
u->name, curseid(c));
return 1;
}
return 0;
}
static int
2002-05-09 12:42:41 +02:00
cinfo_fumble(const locale * lang, void * obj, typ_t typ, curse *c, int self)
{
unit * u = (unit*)obj;
unused(typ);
assert(typ == TYP_UNIT);
if (self){
sprintf(buf, "%s kann sich kaum konzentrieren.i (%s)",
u->name, curseid(c));
return 1;
}
return 0;
}