forked from github/server
"Wirkungsdauer von Wasserelementar anzeigen" curseinfos fuer schiffe u.a. repariert.
This commit is contained in:
parent
c61249cea4
commit
a80d69ceb5
|
@ -256,8 +256,7 @@ print_curses(FILE * F, const faction * viewer, const void * obj, typ_t typ)
|
|||
} else {
|
||||
sprintf(buf, "an unknown curse lies on the region. (%s)", itoa36(c->no));
|
||||
}
|
||||
}
|
||||
if (dh==1) {
|
||||
} else {
|
||||
if (!header) {
|
||||
header = 1;
|
||||
fputs("EFFECTS\n", F);
|
||||
|
|
|
@ -36,19 +36,23 @@
|
|||
static int
|
||||
cinfo_building(const struct locale * lang, const void * obj, typ_t typ, curse *c, int self)
|
||||
{
|
||||
message * msg;
|
||||
message * msg;
|
||||
|
||||
unused(typ);
|
||||
assert(typ == TYP_BUILDING);
|
||||
unused(typ);
|
||||
assert(typ == TYP_BUILDING);
|
||||
|
||||
if (self != 0){ /* owner or inside */
|
||||
msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no);
|
||||
} else { /* outside */
|
||||
msg = msg_message(mkname("curseinfo", "buildingunknown"), "id", c->no);
|
||||
}
|
||||
nr_render(msg, lang, buf, sizeof(buf), NULL);
|
||||
msg_release(msg);
|
||||
return 1;
|
||||
if (self != 0){ /* owner or inside */
|
||||
msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no);
|
||||
} else { /* outside */
|
||||
msg = msg_message(mkname("curseinfo", "buildingunknown"), "id", c->no);
|
||||
}
|
||||
if (msg) {
|
||||
nr_render(msg, lang, buf, sizeof(buf), NULL);
|
||||
msg_release(msg);
|
||||
return 1;
|
||||
}
|
||||
log_warning(("There is no curseinfo for %s.\n", c->type->cname));
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* CurseInfo mit Spezialabfragen */
|
||||
|
@ -58,69 +62,69 @@ static int
|
|||
cinfo_magicrunes(const struct locale* lang, const void * obj, typ_t typ, curse *c, int self)
|
||||
{
|
||||
message * msg = NULL;
|
||||
if (typ == TYP_BUILDING){
|
||||
building * b;
|
||||
b = (building*)obj;
|
||||
if (self != 0) {
|
||||
if (typ == TYP_BUILDING){
|
||||
building * b;
|
||||
b = (building*)obj;
|
||||
if (self != 0) {
|
||||
msg = msg_message(mkname("curseinfo", "magicrunes_building"), "building id", b, c->no);
|
||||
}
|
||||
} else if (typ == TYP_SHIP) {
|
||||
ship *sh;
|
||||
sh = (ship*)obj;
|
||||
if (self != 0){
|
||||
}
|
||||
} else if (typ == TYP_SHIP) {
|
||||
ship *sh;
|
||||
sh = (ship*)obj;
|
||||
if (self != 0){
|
||||
msg = msg_message(mkname("curseinfo", "magicrunes_ship"), "ship id", sh, c->no);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (msg!=NULL) {
|
||||
nr_render(msg, lang, buf, sizeof(buf), NULL);
|
||||
msg_release(msg);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
static struct curse_type ct_magicrunes = { "magicrunes",
|
||||
CURSETYP_NORM, 0, M_SUMEFFECT,
|
||||
"Dieser Zauber verstärkt die natürliche Widerstandskraft gegen eine "
|
||||
"Verzauberung.",
|
||||
cinfo_magicrunes
|
||||
CURSETYP_NORM, 0, M_SUMEFFECT,
|
||||
"Dieser Zauber verstärkt die natürliche Widerstandskraft gegen eine "
|
||||
"Verzauberung.",
|
||||
cinfo_magicrunes
|
||||
};
|
||||
|
||||
/* Heimstein-Zauber */
|
||||
static struct curse_type ct_magicwalls = { "magicwalls",
|
||||
CURSETYP_NORM, 0, NO_MERGE,
|
||||
"Die Macht dieses Zaubers ist fast greifbar und tief in die Mauern "
|
||||
"gebunden. Starke elementarmagische Kräfte sind zu spüren. "
|
||||
"Vieleicht wurde gar ein Erdelementar in diese Mauern gebannt. "
|
||||
"Ausser ebenso starkter Antimagie wird nichts je diese Mauern "
|
||||
"gefährden können.",
|
||||
cinfo_building
|
||||
CURSETYP_NORM, 0, NO_MERGE,
|
||||
"Die Macht dieses Zaubers ist fast greifbar und tief in die Mauern "
|
||||
"gebunden. Starke elementarmagische Kräfte sind zu spüren. "
|
||||
"Vieleicht wurde gar ein Erdelementar in diese Mauern gebannt. "
|
||||
"Ausser ebenso starkter Antimagie wird nichts je diese Mauern "
|
||||
"gefährden können.",
|
||||
cinfo_building
|
||||
};
|
||||
|
||||
/* Feste Mauer - Präkampfzauber, wirkt nur 1 Runde */
|
||||
static struct curse_type ct_strongwall = { "strongwall",
|
||||
CURSETYP_NORM, 0, NO_MERGE,
|
||||
"",
|
||||
NULL
|
||||
CURSETYP_NORM, 0, NO_MERGE,
|
||||
"",
|
||||
NULL
|
||||
};
|
||||
|
||||
/* Ewige Mauern-Zauber */
|
||||
static struct curse_type ct_nocostbuilding = { "nocostbuilding",
|
||||
CURSETYP_NORM, 0, NO_MERGE,
|
||||
"Die Macht dieses Zaubers ist fast greifbar und tief in die Mauern "
|
||||
"gebunden. Unbeeindruck vom Zahn der Zeit wird dieses Gebäude wohl "
|
||||
"auf Ewig stehen.",
|
||||
cinfo_building
|
||||
CURSETYP_NORM, 0, NO_MERGE,
|
||||
"Die Macht dieses Zaubers ist fast greifbar und tief in die Mauern "
|
||||
"gebunden. Unbeeindruck vom Zahn der Zeit wird dieses Gebäude wohl "
|
||||
"auf Ewig stehen.",
|
||||
cinfo_building
|
||||
};
|
||||
|
||||
|
||||
void
|
||||
register_buildingcurse(void)
|
||||
{
|
||||
register_function((pf_generic)cinfo_magicrunes, "curseinfo::magicrunes");
|
||||
register_function((pf_generic)cinfo_magicrunes, "curseinfo::magicrunes");
|
||||
|
||||
ct_register(&ct_magicwalls);
|
||||
ct_register(&ct_strongwall);
|
||||
ct_register(&ct_magicrunes);
|
||||
ct_register(&ct_nocostbuilding);
|
||||
ct_register(&ct_magicwalls);
|
||||
ct_register(&ct_strongwall);
|
||||
ct_register(&ct_magicrunes);
|
||||
ct_register(&ct_nocostbuilding);
|
||||
}
|
||||
|
|
|
@ -35,83 +35,85 @@
|
|||
int
|
||||
cinfo_ship(const struct locale * lang, const void * obj, typ_t typ, curse *c, int self)
|
||||
{
|
||||
message * msg;
|
||||
message * msg;
|
||||
|
||||
unused(typ);
|
||||
unused(obj);
|
||||
assert(typ == TYP_SHIP);
|
||||
unused(typ);
|
||||
unused(obj);
|
||||
assert(typ == TYP_SHIP);
|
||||
|
||||
if (self != 0){ /* owner or inside */
|
||||
msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no);
|
||||
} else {
|
||||
msg = msg_message(mkname("curseinfo", "shipunknown"), "id", c->no);
|
||||
}
|
||||
nr_render(msg, lang, buf, sizeof(buf), NULL);
|
||||
msg_release(msg);
|
||||
return 1;
|
||||
if (self != 0){ /* owner or inside */
|
||||
msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no);
|
||||
} else {
|
||||
msg = msg_message(mkname("curseinfo", "shipunknown"), "id", c->no);
|
||||
}
|
||||
if (msg) {
|
||||
nr_render(msg, lang, buf, sizeof(buf), NULL);
|
||||
msg_release(msg);
|
||||
return 1;
|
||||
}
|
||||
log_warning(("There is no curseinfo for %s.\n", c->type->cname));
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* CurseInfo mit Spezialabfragen */
|
||||
|
||||
/* C_SHIP_NODRIFT */
|
||||
static int
|
||||
cinfo_shipnodrift(const struct locale * lang, void * obj, typ_t typ, curse *c, int self)
|
||||
cinfo_shipnodrift(const struct locale * lang, const void * obj, typ_t typ, curse *c, int self)
|
||||
{
|
||||
ship * sh;
|
||||
unused(typ);
|
||||
ship * sh;
|
||||
unused(typ);
|
||||
|
||||
assert(typ == TYP_SHIP);
|
||||
sh = (ship*)obj;
|
||||
assert(typ == TYP_SHIP);
|
||||
sh = (ship*)obj;
|
||||
|
||||
if (self != 0){
|
||||
sprintf(buf, "%s ist mit guten Wind gesegnet", sh->name);
|
||||
if (c->duration <= 2){
|
||||
scat(", doch der Zauber beginnt sich bereits aufzulösen");
|
||||
}
|
||||
scat(".");
|
||||
} else {
|
||||
sprintf(buf, "Ein silberner Schimmer umgibt das Schiff.");
|
||||
}
|
||||
scat(" (");
|
||||
scat(itoa36(c->no));
|
||||
scat(")");
|
||||
return 1;
|
||||
if (self != 0){
|
||||
sprintf(buf, "%s ist mit guten Wind gesegnet", sh->name);
|
||||
if (c->duration <= 2){
|
||||
scat(", doch der Zauber beginnt sich bereits aufzulösen");
|
||||
}
|
||||
scat(".");
|
||||
} else {
|
||||
sprintf(buf, "Ein silberner Schimmer umgibt das Schiff.");
|
||||
}
|
||||
scat(" (");
|
||||
scat(itoa36(c->no));
|
||||
scat(")");
|
||||
return 1;
|
||||
}
|
||||
|
||||
static struct curse_type ct_stormwind = { "stormwind",
|
||||
CURSETYP_NORM, 0, NO_MERGE,
|
||||
"",
|
||||
NULL
|
||||
CURSETYP_NORM, 0, NO_MERGE,
|
||||
"", cinfo_ship
|
||||
};
|
||||
static struct curse_type ct_flyingship = { "flyingship",
|
||||
CURSETYP_NORM, 0, NO_MERGE,
|
||||
"",
|
||||
NULL
|
||||
CURSETYP_NORM, 0, NO_MERGE,
|
||||
"", cinfo_ship
|
||||
};
|
||||
static struct curse_type ct_nodrift = { "nodrift",
|
||||
CURSETYP_NORM, 0, ( M_DURATION | M_VIGOUR ),
|
||||
"Der Zauber auf diesem Schiff ist aus den elementaren Magien der Luft "
|
||||
"und des Wassers gebunden. Der dem Wasser verbundene Teil des Zaubers "
|
||||
"läßt es leichter durch die Wellen gleiten und der der Luft verbundene "
|
||||
"Teil scheint es vor widrigen Winden zu schützen.",
|
||||
CURSETYP_NORM, 0, ( M_DURATION | M_VIGOUR ),
|
||||
"Der Zauber auf diesem Schiff ist aus den elementaren Magien der Luft "
|
||||
"und des Wassers gebunden. Der dem Wasser verbundene Teil des Zaubers "
|
||||
"läßt es leichter durch die Wellen gleiten und der der Luft verbundene "
|
||||
"Teil scheint es vor widrigen Winden zu schützen.",
|
||||
cinfo_shipnodrift
|
||||
};
|
||||
static struct curse_type ct_shipdisorientation = { "shipdisorientation",
|
||||
CURSETYP_NORM, 0, NO_MERGE,
|
||||
"Dieses Schiff hat sich verfahren."
|
||||
CURSETYP_NORM, 0, NO_MERGE,
|
||||
"Dieses Schiff hat sich verfahren.", cinfo_ship
|
||||
};
|
||||
static struct curse_type ct_shipspeedup = { "shipspeedup",
|
||||
CURSETYP_NORM, 0, 0,
|
||||
NULL
|
||||
CURSETYP_NORM, 0, 0,
|
||||
NULL, cinfo_ship
|
||||
};
|
||||
|
||||
void
|
||||
register_shipcurse(void)
|
||||
{
|
||||
ct_register(&ct_stormwind);
|
||||
ct_register(&ct_flyingship);
|
||||
ct_register(&ct_nodrift);
|
||||
ct_register(&ct_shipdisorientation);
|
||||
ct_register(&ct_shipspeedup);
|
||||
ct_register(&ct_stormwind);
|
||||
ct_register(&ct_flyingship);
|
||||
ct_register(&ct_nodrift);
|
||||
ct_register(&ct_shipdisorientation);
|
||||
ct_register(&ct_shipspeedup);
|
||||
}
|
||||
|
||||
|
|
|
@ -40,41 +40,42 @@
|
|||
int
|
||||
cinfo_unit(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
|
||||
{
|
||||
struct message * msg;
|
||||
struct message * msg;
|
||||
|
||||
unused(typ);
|
||||
unused(self);
|
||||
unused(obj);
|
||||
unused(typ);
|
||||
unused(self);
|
||||
unused(obj);
|
||||
|
||||
assert(typ == TYP_UNIT);
|
||||
assert(typ == TYP_UNIT);
|
||||
|
||||
msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no);
|
||||
if (msg==NULL) {
|
||||
msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no);
|
||||
if (msg) {
|
||||
nr_render(msg, lang, buf, sizeof(buf), NULL);
|
||||
msg_release(msg);
|
||||
return 1;
|
||||
}
|
||||
log_warning(("There is no curseinfo for %s.\n", c->type->cname));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
cinfo_unit_onlyowner(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
|
||||
{
|
||||
message * msg;
|
||||
struct unit *u;
|
||||
message * msg;
|
||||
struct unit *u;
|
||||
|
||||
unused(typ);
|
||||
unused(typ);
|
||||
|
||||
assert(typ == TYP_UNIT);
|
||||
u = (struct unit *)obj;
|
||||
assert(typ == TYP_UNIT);
|
||||
u = (struct unit *)obj;
|
||||
|
||||
if (self != 0){
|
||||
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;
|
||||
if (self != 0){
|
||||
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;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
|
@ -85,38 +86,38 @@ cinfo_unit_onlyowner(const struct locale * lang, const void * obj, typ_t typ, st
|
|||
static int
|
||||
cinfo_auraboost(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
|
||||
{
|
||||
struct unit *u;
|
||||
unused(typ);
|
||||
assert(typ == TYP_UNIT);
|
||||
u = (struct unit *)obj;
|
||||
struct unit *u;
|
||||
unused(typ);
|
||||
assert(typ == TYP_UNIT);
|
||||
u = (struct unit *)obj;
|
||||
|
||||
if (self != 0){
|
||||
if (curse_geteffect(c) > 100){
|
||||
sprintf(buf, "%s fühlt sich von starken magischen Energien "
|
||||
"durchströ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;
|
||||
if (self != 0){
|
||||
if (curse_geteffect(c) > 100){
|
||||
sprintf(buf, "%s fühlt sich von starken magischen Energien "
|
||||
"durchströ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;
|
||||
}
|
||||
static struct curse_type ct_auraboost = {
|
||||
"auraboost",
|
||||
CURSETYP_NORM, CURSE_SPREADMODULO, (NO_MERGE),
|
||||
"Dieser Zauber greift irgendwie in die Verbindung zwischen Magier "
|
||||
"und Magischer Essenz ein. Mit positiver Ausrichtung kann er wohl "
|
||||
"wie ein Fokus für Aura wirken, jedoch genauso für das Gegenteil "
|
||||
"benutzt werden.",
|
||||
cinfo_auraboost
|
||||
"auraboost",
|
||||
CURSETYP_NORM, CURSE_SPREADMODULO, (NO_MERGE),
|
||||
"Dieser Zauber greift irgendwie in die Verbindung zwischen Magier "
|
||||
"und Magischer Essenz ein. Mit positiver Ausrichtung kann er wohl "
|
||||
"wie ein Fokus für Aura wirken, jedoch genauso für das Gegenteil "
|
||||
"benutzt werden.",
|
||||
cinfo_auraboost
|
||||
};
|
||||
/* Magic Boost - Gabe des Chaos */
|
||||
static struct curse_type ct_magicboost = {
|
||||
"magicboost",
|
||||
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
|
||||
"",
|
||||
NULL
|
||||
"magicboost",
|
||||
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
|
||||
"",
|
||||
NULL
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
|
@ -126,25 +127,25 @@ static struct curse_type ct_magicboost = {
|
|||
static int
|
||||
cinfo_slave(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
|
||||
{
|
||||
unit *u;
|
||||
unused(typ);
|
||||
unit *u;
|
||||
unused(typ);
|
||||
|
||||
assert(typ == TYP_UNIT);
|
||||
u = (unit *)obj;
|
||||
assert(typ == TYP_UNIT);
|
||||
u = (unit *)obj;
|
||||
|
||||
if (self != 0){
|
||||
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;
|
||||
if (self != 0){
|
||||
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;
|
||||
}
|
||||
static struct curse_type ct_slavery = { "slavery",
|
||||
CURSETYP_NORM, 0, NO_MERGE,
|
||||
"Dieser mächtige Bann scheint die Einheit ihres freien Willens "
|
||||
"zu berauben. Solange der Zauber wirkt, wird sie nur den Befehlen "
|
||||
"ihres neuen Herrn gehorchen.",
|
||||
cinfo_slave
|
||||
CURSETYP_NORM, 0, NO_MERGE,
|
||||
"Dieser mächtige Bann scheint die Einheit ihres freien Willens "
|
||||
"zu berauben. Solange der Zauber wirkt, wird sie nur den Befehlen "
|
||||
"ihres neuen Herrn gehorchen.",
|
||||
cinfo_slave
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
|
@ -178,10 +179,10 @@ cinfo_calm(const struct locale * lang, const void * obj, typ_t typ, struct curse
|
|||
return 0;
|
||||
}
|
||||
static struct curse_type ct_calmmonster = { "calmmonster",
|
||||
CURSETYP_NORM, CURSE_SPREADNEVER, NO_MERGE,
|
||||
"Dieser Beeinflussungszauber scheint die Einheit einem ganz "
|
||||
"bestimmten Volk wohlgesonnen zu machen.",
|
||||
cinfo_calm
|
||||
CURSETYP_NORM, CURSE_SPREADNEVER, NO_MERGE,
|
||||
"Dieser Beeinflussungszauber scheint die Einheit einem ganz "
|
||||
"bestimmten Volk wohlgesonnen zu machen.",
|
||||
cinfo_calm
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
|
@ -191,29 +192,29 @@ static struct curse_type ct_calmmonster = { "calmmonster",
|
|||
static int
|
||||
cinfo_speed(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
|
||||
{
|
||||
unit *u;
|
||||
curse_unit * cu;
|
||||
unused(typ);
|
||||
unit *u;
|
||||
curse_unit * cu;
|
||||
unused(typ);
|
||||
|
||||
assert(typ == TYP_UNIT);
|
||||
u = (unit *)obj;
|
||||
cu = (curse_unit *)c->data.v;
|
||||
assert(typ == TYP_UNIT);
|
||||
u = (unit *)obj;
|
||||
cu = (curse_unit *)c->data.v;
|
||||
|
||||
if (self != 0){
|
||||
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;
|
||||
if (self != 0){
|
||||
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;
|
||||
}
|
||||
static struct curse_type ct_speed = {
|
||||
"speed",
|
||||
CURSETYP_UNIT, CURSE_SPREADNEVER, M_MEN,
|
||||
"Diese Einheit bewegt sich doppelt so schnell.",
|
||||
cinfo_speed
|
||||
"speed",
|
||||
CURSETYP_UNIT, CURSE_SPREADNEVER, M_MEN,
|
||||
"Diese Einheit bewegt sich doppelt so schnell.",
|
||||
cinfo_speed
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
|
@ -223,27 +224,27 @@ static struct curse_type ct_speed = {
|
|||
static int
|
||||
cinfo_orc(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
|
||||
{
|
||||
unit *u;
|
||||
message * msg;
|
||||
unused(typ);
|
||||
unit *u;
|
||||
message * msg;
|
||||
unused(typ);
|
||||
|
||||
assert(typ == TYP_UNIT);
|
||||
u = (unit *)obj;
|
||||
assert(typ == TYP_UNIT);
|
||||
u = (unit *)obj;
|
||||
|
||||
if (self != 0){
|
||||
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;
|
||||
if (self != 0){
|
||||
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;
|
||||
}
|
||||
static struct curse_type ct_orcish = {
|
||||
"orcish",
|
||||
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
|
||||
"Dieser Zauber scheint die Einheit zu 'orkisieren'. Wie bei Orks "
|
||||
"ist eine deutliche Neigung zur Fortpflanzung zu beobachten.",
|
||||
cinfo_orc
|
||||
"orcish",
|
||||
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
|
||||
"Dieser Zauber scheint die Einheit zu 'orkisieren'. Wie bei Orks "
|
||||
"ist eine deutliche Neigung zur Fortpflanzung zu beobachten.",
|
||||
cinfo_orc
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
|
@ -253,28 +254,28 @@ static struct curse_type ct_orcish = {
|
|||
static int
|
||||
cinfo_kaelteschutz(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
|
||||
{
|
||||
unit *u;
|
||||
curse_unit * cu;
|
||||
unused(typ);
|
||||
unit *u;
|
||||
curse_unit * cu;
|
||||
unused(typ);
|
||||
|
||||
assert(typ == TYP_UNIT);
|
||||
u = (unit *)obj;
|
||||
cu = (curse_unit *)c->data.v;
|
||||
assert(typ == TYP_UNIT);
|
||||
u = (unit *)obj;
|
||||
cu = (curse_unit *)c->data.v;
|
||||
|
||||
if (self != 0){
|
||||
sprintf(buf, "%d Person%s von %s %s sich vor Kälte geschützt. (%s)",
|
||||
cu->cursedmen, (cu->cursedmen == 1)? "":"en", u->name,
|
||||
(cu->cursedmen == 1)? "fühlt":"fühlen",
|
||||
curseid(c));
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
if (self != 0){
|
||||
sprintf(buf, "%d Person%s von %s %s sich vor Kälte geschützt. (%s)",
|
||||
cu->cursedmen, (cu->cursedmen == 1)? "":"en", u->name,
|
||||
(cu->cursedmen == 1)? "fühlt":"fühlen",
|
||||
curseid(c));
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
static struct curse_type ct_insectfur = {
|
||||
"insectfur",
|
||||
CURSETYP_UNIT, CURSE_SPREADMODULO, ( M_MEN | M_DURATION ),
|
||||
"Dieser Zauber schützt vor den Auswirkungen der Kälte.",
|
||||
cinfo_kaelteschutz
|
||||
"insectfur",
|
||||
CURSETYP_UNIT, CURSE_SPREADMODULO, ( M_MEN | M_DURATION ),
|
||||
"Dieser Zauber schützt vor den Auswirkungen der Kälte.",
|
||||
cinfo_kaelteschutz
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
|
@ -284,60 +285,60 @@ static struct curse_type ct_insectfur = {
|
|||
static int
|
||||
cinfo_sparkle(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
|
||||
{
|
||||
const char * effects[] = {
|
||||
NULL, /* end grau*/
|
||||
"%s ist im Traum eine Fee erschienen.",
|
||||
"%s wird von bösen Alpträ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ät in die Nacht hinein.",
|
||||
"%s findet eine kleine Flö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ührt %s mit seinem Horn und verschwindet kurz darauf im Unterholz.",
|
||||
"Vogelzwitschern begleitet %s auf all seinen Wegen.",
|
||||
"Leuchtende Blumen erblühen rund um das Lager von %s.",
|
||||
NULL, /* end gwyrrd */
|
||||
"Über %s zieht eine Gruppe Geier ihre Kreise.",
|
||||
"Der Kopf von %s hat sich in einen grinsenden Totenschä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önheit.",
|
||||
"Fäulnisgeruch dringt %s aus allen Körperöffnungen.",
|
||||
NULL, /* end draig */
|
||||
};
|
||||
int m, begin=0, end=0;
|
||||
unit *u;
|
||||
unused(typ);
|
||||
const char * effects[] = {
|
||||
NULL, /* end grau*/
|
||||
"%s ist im Traum eine Fee erschienen.",
|
||||
"%s wird von bösen Alpträ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ät in die Nacht hinein.",
|
||||
"%s findet eine kleine Flö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ührt %s mit seinem Horn und verschwindet kurz darauf im Unterholz.",
|
||||
"Vogelzwitschern begleitet %s auf all seinen Wegen.",
|
||||
"Leuchtende Blumen erblühen rund um das Lager von %s.",
|
||||
NULL, /* end gwyrrd */
|
||||
"Über %s zieht eine Gruppe Geier ihre Kreise.",
|
||||
"Der Kopf von %s hat sich in einen grinsenden Totenschä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önheit.",
|
||||
"Fäulnisgeruch dringt %s aus allen Körperöffnungen.",
|
||||
NULL, /* end draig */
|
||||
};
|
||||
int m, begin=0, end=0;
|
||||
unit *u;
|
||||
unused(typ);
|
||||
|
||||
assert(typ == TYP_UNIT);
|
||||
u = (unit *)obj;
|
||||
assert(typ == TYP_UNIT);
|
||||
u = (unit *)obj;
|
||||
|
||||
if(!c->magician || !c->magician->faction) return 0;
|
||||
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;
|
||||
}
|
||||
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 + curse_geteffect(c) % (end-begin)], u->name);
|
||||
scat(" (");
|
||||
scat(itoa36(c->no));
|
||||
scat(")");
|
||||
while (effects[end]!=NULL) ++end;
|
||||
if (end==begin) return 0;
|
||||
else sprintf(buf, effects[begin + curse_geteffect(c) % (end-begin)], u->name);
|
||||
scat(" (");
|
||||
scat(itoa36(c->no));
|
||||
scat(")");
|
||||
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
static struct curse_type ct_sparkle = { "sparkle",
|
||||
CURSETYP_UNIT, CURSE_SPREADMODULO, ( M_MEN | M_DURATION ),
|
||||
"Dieser Zauber ist einer der ersten, den junge Magier in der Schule lernen.",
|
||||
cinfo_sparkle
|
||||
CURSETYP_UNIT, CURSE_SPREADMODULO, ( M_MEN | M_DURATION ),
|
||||
"Dieser Zauber ist einer der ersten, den junge Magier in der Schule lernen.",
|
||||
cinfo_sparkle
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
|
@ -347,24 +348,24 @@ static struct curse_type ct_sparkle = { "sparkle",
|
|||
static int
|
||||
cinfo_strength(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
|
||||
{
|
||||
unused(c);
|
||||
unused(typ);
|
||||
unused(c);
|
||||
unused(typ);
|
||||
|
||||
assert(typ == TYP_UNIT);
|
||||
unused(obj);
|
||||
assert(typ == TYP_UNIT);
|
||||
unused(obj);
|
||||
|
||||
if (self != 0){
|
||||
sprintf(buf, "Die Leute strotzen nur so vor Kraft. (%s)",
|
||||
curseid(c));
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
if (self != 0){
|
||||
sprintf(buf, "Die Leute strotzen nur so vor Kraft. (%s)",
|
||||
curseid(c));
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
static struct curse_type ct_strength = { "strength",
|
||||
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
|
||||
"Dieser Zauber vermehrt die Stärke der verzauberten Personen um ein "
|
||||
"vielfaches.",
|
||||
cinfo_strength
|
||||
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
|
||||
"Dieser Zauber vermehrt die Stärke der verzauberten Personen um ein "
|
||||
"vielfaches.",
|
||||
cinfo_strength
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
|
@ -374,23 +375,23 @@ static struct curse_type ct_strength = { "strength",
|
|||
static int
|
||||
cinfo_allskills(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
|
||||
{
|
||||
unused(obj);
|
||||
unused(typ);
|
||||
unused(c);
|
||||
unused(obj);
|
||||
unused(typ);
|
||||
unused(c);
|
||||
|
||||
assert(typ == TYP_UNIT);
|
||||
assert(typ == TYP_UNIT);
|
||||
|
||||
if (self != 0){
|
||||
sprintf(buf, "Wird von einem Alp geritten. (%s)", curseid(c));
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
if (self != 0){
|
||||
sprintf(buf, "Wird von einem Alp geritten. (%s)", curseid(c));
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
static struct curse_type ct_worse = {
|
||||
"worse",
|
||||
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
|
||||
"",
|
||||
cinfo_allskills
|
||||
"worse",
|
||||
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
|
||||
"",
|
||||
cinfo_allskills
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
|
@ -401,61 +402,61 @@ static struct curse_type ct_worse = {
|
|||
static int
|
||||
cinfo_itemcloak(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
|
||||
{
|
||||
unit *u;
|
||||
unused(typ);
|
||||
unit *u;
|
||||
unused(typ);
|
||||
|
||||
assert(typ == TYP_UNIT);
|
||||
u = (unit *)obj;
|
||||
assert(typ == TYP_UNIT);
|
||||
u = (unit *)obj;
|
||||
|
||||
if (self != 0) {
|
||||
sprintf(buf, "Die Ausrüstung von %s scheint unsichtbar. (%s)",
|
||||
u->name, curseid(c));
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
if (self != 0) {
|
||||
sprintf(buf, "Die Ausrüstung von %s scheint unsichtbar. (%s)",
|
||||
u->name, curseid(c));
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
static struct curse_type ct_itemcloak = {
|
||||
"itemcloak",
|
||||
CURSETYP_UNIT, CURSE_SPREADNEVER, M_DURATION,
|
||||
"Dieser Zauber macht die Ausrüstung unsichtbar.",
|
||||
cinfo_itemcloak
|
||||
"itemcloak",
|
||||
CURSETYP_UNIT, CURSE_SPREADNEVER, M_DURATION,
|
||||
"Dieser Zauber macht die Ausrüstung unsichtbar.",
|
||||
cinfo_itemcloak
|
||||
};
|
||||
/* ------------------------------------------------------------- */
|
||||
|
||||
static int
|
||||
cinfo_fumble(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
|
||||
{
|
||||
unit * u = (unit*)obj;
|
||||
unused(typ);
|
||||
unit * u = (unit*)obj;
|
||||
unused(typ);
|
||||
|
||||
assert(typ == TYP_UNIT);
|
||||
assert(typ == TYP_UNIT);
|
||||
|
||||
if (self != 0){
|
||||
sprintf(buf, "%s kann sich kaum konzentrieren. (%s)",
|
||||
u->name, curseid(c));
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
if (self != 0){
|
||||
sprintf(buf, "%s kann sich kaum konzentrieren. (%s)",
|
||||
u->name, curseid(c));
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
static struct curse_type ct_fumble = {
|
||||
"fumble",
|
||||
CURSETYP_NORM, CURSE_SPREADNEVER, NO_MERGE,
|
||||
"Eine Wolke negativer Energie umgibt die Einheit.",
|
||||
cinfo_fumble
|
||||
"fumble",
|
||||
CURSETYP_NORM, CURSE_SPREADNEVER, NO_MERGE,
|
||||
"Eine Wolke negativer Energie umgibt die Einheit.",
|
||||
cinfo_fumble
|
||||
};
|
||||
/* ------------------------------------------------------------- */
|
||||
|
||||
|
||||
static struct curse_type ct_oldrace = { "oldrace",
|
||||
CURSETYP_NORM, CURSE_SPREADALWAYS, NO_MERGE,
|
||||
"",
|
||||
NULL
|
||||
CURSETYP_NORM, CURSE_SPREADALWAYS, NO_MERGE,
|
||||
"",
|
||||
NULL
|
||||
};
|
||||
static struct curse_type ct_magicresistance = { "magicresistance",
|
||||
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
|
||||
"Dieser Zauber verstärkt die natürliche Widerstandskraft gegen eine "
|
||||
"Verzauberung.",
|
||||
NULL
|
||||
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
|
||||
"Dieser Zauber verstärkt die natürliche Widerstandskraft gegen eine "
|
||||
"Verzauberung.",
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
|
@ -467,80 +468,80 @@ static struct curse_type ct_magicresistance = { "magicresistance",
|
|||
static int
|
||||
read_skill(FILE * F, curse * c)
|
||||
{
|
||||
int skill;
|
||||
if (global.data_version<CURSETYPE_VERSION) {
|
||||
int men;
|
||||
fscanf(F, "%d %d", &skill, &men);
|
||||
} else {
|
||||
fscanf(F, "%d", &skill);
|
||||
}
|
||||
c->data.i = skill;
|
||||
return 0;
|
||||
int skill;
|
||||
if (global.data_version<CURSETYPE_VERSION) {
|
||||
int men;
|
||||
fscanf(F, "%d %d", &skill, &men);
|
||||
} else {
|
||||
fscanf(F, "%d", &skill);
|
||||
}
|
||||
c->data.i = skill;
|
||||
return 0;
|
||||
}
|
||||
static int
|
||||
write_skill(FILE * F, const curse * c)
|
||||
{
|
||||
fprintf(F, "%d ", c->data.i);
|
||||
return 0;
|
||||
fprintf(F, "%d ", c->data.i);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
cinfo_skill(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
|
||||
{
|
||||
unit *u = (unit *)obj;
|
||||
int sk = c->data.i;
|
||||
unit *u = (unit *)obj;
|
||||
int sk = c->data.i;
|
||||
|
||||
unused(typ);
|
||||
unused(typ);
|
||||
|
||||
if (self != 0){
|
||||
sprintf(buf, "%s ist in %s ungewöhnlich ungeschickt. (%s)", u->name,
|
||||
skillname((skill_t)sk, u->faction->locale), curseid(c));
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
if (self != 0){
|
||||
sprintf(buf, "%s ist in %s ungewöhnlich ungeschickt. (%s)", u->name,
|
||||
skillname((skill_t)sk, u->faction->locale), curseid(c));
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
static struct curse_type ct_skillmod = {
|
||||
"skillmod",
|
||||
CURSETYP_NORM, CURSE_SPREADMODULO, M_MEN,
|
||||
"",
|
||||
cinfo_skill,
|
||||
NULL,
|
||||
read_skill, write_skill
|
||||
"skillmod",
|
||||
CURSETYP_NORM, CURSE_SPREADMODULO, M_MEN,
|
||||
"",
|
||||
cinfo_skill,
|
||||
NULL,
|
||||
read_skill, write_skill
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
void
|
||||
register_unitcurse(void)
|
||||
{
|
||||
register_function((pf_generic)cinfo_unit_onlyowner, "curseinfo::unit_onlyowner");
|
||||
register_function((pf_generic)cinfo_auraboost, "curseinfo::auraboost");
|
||||
register_function((pf_generic)cinfo_slave, "curseinfo::slave");
|
||||
register_function((pf_generic)cinfo_calm, "curseinfo::calm");
|
||||
register_function((pf_generic)cinfo_speed, "curseinfo::speed");
|
||||
register_function((pf_generic)cinfo_orc, "curseinfo::orc");
|
||||
register_function((pf_generic)cinfo_kaelteschutz, "curseinfo::kaelteschutz");
|
||||
register_function((pf_generic)cinfo_sparkle, "curseinfo::sparkle");
|
||||
register_function((pf_generic)cinfo_strength, "curseinfo::strength");
|
||||
register_function((pf_generic)cinfo_allskills, "curseinfo::allskills");
|
||||
register_function((pf_generic)cinfo_skill, "curseinfo::skill");
|
||||
register_function((pf_generic)cinfo_itemcloak, "curseinfo::itemcloak");
|
||||
register_function((pf_generic)cinfo_fumble, "curseinfo::fumble");
|
||||
register_function((pf_generic)cinfo_unit_onlyowner, "curseinfo::unit_onlyowner");
|
||||
register_function((pf_generic)cinfo_auraboost, "curseinfo::auraboost");
|
||||
register_function((pf_generic)cinfo_slave, "curseinfo::slave");
|
||||
register_function((pf_generic)cinfo_calm, "curseinfo::calm");
|
||||
register_function((pf_generic)cinfo_speed, "curseinfo::speed");
|
||||
register_function((pf_generic)cinfo_orc, "curseinfo::orc");
|
||||
register_function((pf_generic)cinfo_kaelteschutz, "curseinfo::kaelteschutz");
|
||||
register_function((pf_generic)cinfo_sparkle, "curseinfo::sparkle");
|
||||
register_function((pf_generic)cinfo_strength, "curseinfo::strength");
|
||||
register_function((pf_generic)cinfo_allskills, "curseinfo::allskills");
|
||||
register_function((pf_generic)cinfo_skill, "curseinfo::skill");
|
||||
register_function((pf_generic)cinfo_itemcloak, "curseinfo::itemcloak");
|
||||
register_function((pf_generic)cinfo_fumble, "curseinfo::fumble");
|
||||
|
||||
ct_register(&ct_auraboost);
|
||||
ct_register(&ct_magicboost);
|
||||
ct_register(&ct_slavery);
|
||||
ct_register(&ct_calmmonster);
|
||||
ct_register(&ct_speed);
|
||||
ct_register(&ct_orcish);
|
||||
ct_register(&ct_insectfur);
|
||||
ct_register(&ct_sparkle);
|
||||
ct_register(&ct_strength);
|
||||
ct_register(&ct_worse);
|
||||
ct_register(&ct_skillmod);
|
||||
ct_register(&ct_itemcloak);
|
||||
ct_register(&ct_fumble);
|
||||
ct_register(&ct_oldrace);
|
||||
ct_register(&ct_magicresistance);
|
||||
ct_register(&ct_auraboost);
|
||||
ct_register(&ct_magicboost);
|
||||
ct_register(&ct_slavery);
|
||||
ct_register(&ct_calmmonster);
|
||||
ct_register(&ct_speed);
|
||||
ct_register(&ct_orcish);
|
||||
ct_register(&ct_insectfur);
|
||||
ct_register(&ct_sparkle);
|
||||
ct_register(&ct_strength);
|
||||
ct_register(&ct_worse);
|
||||
ct_register(&ct_skillmod);
|
||||
ct_register(&ct_itemcloak);
|
||||
ct_register(&ct_fumble);
|
||||
ct_register(&ct_oldrace);
|
||||
ct_register(&ct_magicresistance);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue