u_setfaction routine

This commit is contained in:
Enno Rehling 2001-02-10 14:18:01 +00:00
parent 6450114ba7
commit 7d45756141
14 changed files with 84 additions and 85 deletions

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: economy.c,v 1.4 2001/02/10 10:40:10 enno Exp $
* $Id: economy.c,v 1.5 2001/02/10 14:17:59 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -711,7 +711,7 @@ giveunit(region * r, unit * u, unit * u2, strlist * S)
new_message(u2->faction, "give%u:unit%u:target%r:region%X:resource%i:amount",
u?&u_peasants:(cansee(u2->faction, u->region, u, 0)?u:NULL),
u2, u->region, r_unit, 1));
set_faction(u, u2->faction);
u_setfaction(u, u2->faction);
u2->faction->newbies += n;
/* "Ich gebe einer Partei eine Einheit, die den Befehl hat, effektiv

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: laws.c,v 1.9 2001/02/10 10:40:10 enno Exp $
* $Id: laws.c,v 1.10 2001/02/10 14:18:00 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -2527,7 +2527,7 @@ new_units (void)
u2 = createunitid(r, u->faction, 0, u->faction->race, alias, name);
a_add(&u2->attribs, a_new(&at_alias))->data.i = alias;
set_faction(u2, u->faction);
u_setfaction(u2, u->faction);
u2->building = u->building;
u2->ship = u->ship;

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: randenc.c,v 1.8 2001/02/10 14:07:29 corwin Exp $
* $Id: randenc.c,v 1.9 2001/02/10 14:18:00 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -519,7 +519,7 @@ chaos(region * r)
sprintf(buf, "%s scheint von einer seltsamen Krankheit befallen.",
unitname(u));
addmessage(0, u->faction, buf, MSG_EVENT, ML_IMPORTANT);
set_faction(u, findfaction(MONSTER_FACTION));
u_setfaction(u, findfaction(MONSTER_FACTION));
u->race = RC_GHOUL;
}
}

View File

@ -1542,7 +1542,7 @@ sp_undeadhero(fighter * fi, int level, int force, spell * sp)
du->race = RC_UNDEAD;
setguard(du, GUARD_NONE);
set_faction(du,mage->faction);
u_setfaction(du,mage->faction);
if (fval(mage, FL_PARTEITARNUNG))
fset(du, FL_PARTEITARNUNG);
df->alive = du->number;

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: eressea.c,v 1.11 2001/02/10 10:40:11 enno Exp $
* $Id: eressea.c,v 1.12 2001/02/10 14:18:00 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -629,59 +629,6 @@ eff_stealth (const unit * u, const region * r)
return e;
}
void
set_faction (unit * u, faction * f)
{
int cnt = u->number;
if (u->faction==f) return;
#ifndef NDEBUG
assert(u->debug_number == u->number);
#endif
if (u->faction) {
set_number(u, 0);
join_group(u, NULL);
}
if (u->prevF) u->prevF->nextF = u->nextF;
else if (u->faction) {
assert(u->faction->units==u);
u->faction->units = u->nextF;
}
if (u->nextF) u->nextF->prevF = u->prevF;
if (f!=NULL) {
u->nextF = f->units;
f->units = u;
}
else u->nextF = NULL;
if (u->nextF) u->nextF->prevF = u;
u->prevF = NULL;
u->faction = f;
if (cnt && f) set_number(u, cnt);
}
/* vorsicht Sprüche können u->number == 0 (RS_FARVISION) haben! */
void
set_number (unit * u, int count)
{
assert (count >= 0);
#ifndef NDEBUG
assert (u->debug_number == u->number);
assert (u->faction != 0 || u->number > 0);
#endif
if (u->faction && u->race != u->faction->race && !nonplayer(u)
&& u->race != RC_SPELL && u->race != RC_SPECIAL
&& !(is_cursed(u->attribs, C_SLAVE, 0))){
u->faction->num_migrants += count - u->number;
}
u->faction->num_people += count - u->number;
u->number = count;
#ifndef NDEBUG
u->debug_number = count;
#endif
}
void
scale_number (unit * u, int n)
{
@ -1577,7 +1524,7 @@ createunitid(region * r1, faction * f, int number, race_t race, int id, const ch
unit * u = calloc(1, sizeof(unit));
assert(f->alive);
set_faction(u, f);
u_setfaction(u, f);
set_string(&u->thisorder, "");
set_string(&u->lastorder, keywords[K_WORK]);
u_seteffstealth(u, -1);

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: eressea.h,v 1.14 2001/02/10 13:20:09 enno Exp $
* $Id: eressea.h,v 1.15 2001/02/10 14:18:00 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -1015,11 +1015,8 @@ char * set_string(char **s, const char *neu);
int check_option(struct faction * f, int option);
void set_number(struct unit * u, int number);
/* Anzahl Personen in einer Einheit festlegen. NUR (!) mit dieser Routine,
* sonst großes Unglück. Durch asserts an ein paar Stellen abgesichert. */
void set_faction(struct unit * u, struct faction * f);
void verify_data(void);
void stripfaction(struct faction * f);
@ -1039,7 +1036,6 @@ struct region *lastregion(struct faction * f);
#define f_koor_x(x) x-f->ursprung[0]
#define f_koor_y(y) y-f->ursprung[1]
void set_faction(struct unit * u, struct faction * f);
void inituhash(void);
void uhash(struct unit * u);
void uunhash(struct unit * u);

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: item.c,v 1.7 2001/02/10 13:20:09 enno Exp $
* $Id: item.c,v 1.8 2001/02/10 14:18:00 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -1772,7 +1772,7 @@ use_bloodpotion(struct unit *u, const struct potion_type *ptype, const char *cmd
/* bekommt nicht: */
cmistake(u, cmd, 165, MSG_EVENT);
u->race = RC_GHOUL;
set_faction(u, findfaction(MONSTER_FACTION));
u_setfaction(u, findfaction(MONSTER_FACTION));
}
return 0;
}

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: save.c,v 1.12 2001/02/10 12:50:29 corwin Exp $
* $Id: save.c,v 1.13 2001/02/10 14:18:00 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -1202,7 +1202,7 @@ readgame(boolean backup)
} else {
n = ri(F);
}
set_faction(u, findfaction(n));
u_setfaction(u, findfaction(n));
}
uhash(u);
rds(F, &u->name);
@ -1227,7 +1227,7 @@ readgame(boolean backup)
} else {
n = ri(F);
}
set_faction(u, findfaction(n));
u_setfaction(u, findfaction(n));
u->race = typus2race(oldtypus);
u->irace = typus2race(olditypus);
@ -1273,7 +1273,7 @@ readgame(boolean backup)
u->race = (race_t) ri(F);
u->irace = (race_t) ri(F);
if (global.data_version<GUARD_VERSION)
set_faction(u, findfaction(n = ri(F)));
u_setfaction(u, findfaction(n = ri(F)));
}
if (u->faction == NULL)
fprintf(stderr,"\nEinheit %s hat faction==NULL\n",unitname(u));

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: spell.c,v 1.8 2001/02/04 09:46:47 corwin Exp $
* $Id: spell.c,v 1.9 2001/02/10 14:18:00 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -3827,7 +3827,7 @@ sp_charmingsong(castorder *co)
create_curse(mage, &target->attribs, C_SLAVE, 0, force, duration, 0, 0);
/* setze Partei um und lösche langen Befehl aus Sicherheitsgründen */
set_faction(target,mage->faction);
u_setfaction(target,mage->faction);
set_string(&target->thisorder, "");
/* setze Parteitarnung, damit nicht sofort klar ist, wer dahinter
@ -4138,7 +4138,7 @@ sp_migranten(castorder *co)
addmessage(0, mage->faction, buf, MSG_MAGIC, ML_MISTAKE);
return 0;
}
set_faction(target,mage->faction);
u_setfaction(target,mage->faction);
set_string(&target->thisorder, "");
/* Erfolg melden */

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: unit.c,v 1.4 2001/02/03 13:45:32 enno Exp $
* $Id: unit.c,v 1.5 2001/02/10 14:18:00 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -127,14 +127,14 @@ destroy_unit(unit * u)
}
}
if (zombie) {
set_faction(u, findfaction(MONSTER_FACTION));
u_setfaction(u, findfaction(MONSTER_FACTION));
scale_number(u, 1);
u->race = u->irace = RC_ZOMBIE;
} else {
if (r && rterrain(r) != T_OCEAN)
rsetmoney(r, rmoney(r) + get_money(u));
dhash(u->no, u->faction);
set_faction(u, NULL);
u_setfaction(u, NULL);
if (r) leave(r, u);
uunhash(u);
if (r) choplist(&r->units, u);
@ -749,3 +749,56 @@ struct building * inside_building(const struct unit * u)
}
return NULL;
}
void
u_setfaction(unit * u, faction * f)
{
int cnt = u->number;
if (u->faction==f) return;
#ifndef NDEBUG
assert(u->debug_number == u->number);
#endif
if (u->faction) {
set_number(u, 0);
join_group(u, NULL);
}
if (u->prevF) u->prevF->nextF = u->nextF;
else if (u->faction) {
assert(u->faction->units==u);
u->faction->units = u->nextF;
}
if (u->nextF) u->nextF->prevF = u->prevF;
if (f!=NULL) {
u->nextF = f->units;
f->units = u;
}
else u->nextF = NULL;
if (u->nextF) u->nextF->prevF = u;
u->prevF = NULL;
u->faction = f;
if (cnt && f) set_number(u, cnt);
}
/* vorsicht Sprüche können u->number == 0 (RS_FARVISION) haben! */
void
set_number (unit * u, int count)
{
assert (count >= 0);
#ifndef NDEBUG
assert (u->debug_number == u->number);
assert (u->faction != 0 || u->number > 0);
#endif
if (u->faction && u->race != u->faction->race && !nonplayer(u)
&& u->race != RC_SPELL && u->race != RC_SPECIAL
&& !(is_cursed(u->attribs, C_SLAVE, 0))){
u->faction->num_migrants += count - u->number;
}
u->faction->num_people += count - u->number;
u->number = count;
#ifndef NDEBUG
u->debug_number = count;
#endif
}

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: unit.h,v 1.3 2001/02/03 13:45:33 enno Exp $
* $Id: unit.h,v 1.4 2001/02/10 14:18:00 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -183,4 +183,7 @@ extern struct building * inside_building(const struct unit * u);
/* cleanup code for this module */
extern void free_units(void);
extern struct faction * dfindhash(int i);
extern void u_setfaction(struct unit * u, struct faction * f);
/* vorsicht Sprüche können u->number == 0 (RS_FARVISION) haben! */
extern void set_number(struct unit * u, int count);
#endif

Binary file not shown.

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: korrektur.c,v 1.18 2001/02/10 13:20:09 enno Exp $
* $Id: korrektur.c,v 1.19 2001/02/10 14:18:00 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -237,7 +237,7 @@ static void
add_magrathea(void)
{
unit * tans = ufindhash(atoi36("tans"));
if (tans) set_faction(tans, findfaction(999));
if (tans) u_setfaction(tans, findfaction(999));
}
#endif
@ -880,7 +880,7 @@ give_questling(void)
add_message(&u1->faction->msgs,
new_message(u1->faction, "give%u:unit%u:target%r:region%X:resource%i:amount",
u1, u2, u1->region, r_unit, 1));
set_faction(u1, u2->faction);
u_setfaction(u1, u2->faction);
add_message(&u2->faction->msgs,
new_message(u1->faction, "give%u:unit%u:target%r:region%X:resource%i:amount",
u1, u2, u1->region, r_unit, 1));

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: trigger.c,v 1.2 2001/02/03 13:45:34 enno Exp $
* $Id: trigger.c,v 1.3 2001/02/10 14:18:01 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -523,7 +523,7 @@ do_actions(void)
faction *f;
assert(act->typ == TYP_UNIT);
f = findfaction_unique_id(act->i[0]);
set_faction((unit*)act->obj, f);
u_setfaction((unit*)act->obj, f);
break;
}
case AC_CREATEUNIT:{