- falsches flag gesetzt

- join_allies ordentlich formatiert
This commit is contained in:
Enno Rehling 2004-05-30 02:24:53 +00:00
parent a240be83a2
commit 0145b78d88
2 changed files with 68 additions and 70 deletions

View File

@ -3290,74 +3290,72 @@ battle_report(battle * b)
static void static void
join_allies(battle * b) join_allies(battle * b)
{ {
region * r = b->region; region * r = b->region;
unit * u; unit * u;
/* Die Anzahl der Teilnehmer kann sich in dieser Routine ändern. /* Die Anzahl der Teilnehmer kann sich in dieser Routine ändern.
* Deshalb muß das Ende des Vektors vorher gemerkt werden, damit * Deshalb muß das Ende des Vektors vorher gemerkt werden, damit
* neue Parteien nicht mit betrachtet werden: * neue Parteien nicht mit betrachtet werden:
*/ */
int size = cv_size(&b->sides); int size = cv_size(&b->sides);
for (u=r->units;u;u=u->next) for (u=r->units;u;u=u->next)
/* Was ist mit Schiffen? */ /* Was ist mit Schiffen? */
if (u->status != ST_FLEE && u->status != ST_AVOID && !fval(u, UFL_LONGACTION) && u->number > 0) if (u->status != ST_FLEE && u->status != ST_AVOID && !fval(u, UFL_LONGACTION) && u->number > 0)
{ {
int si; int si;
faction * f = u->faction; faction * f = u->faction;
fighter * c = NULL; fighter * c = NULL;
for (si = 0; si != size; ++si) { for (si = 0; si != size; ++si) {
int se; int se;
side *s = b->sides.begin[si]; side *s = b->sides.begin[si];
/* Wenn alle attackierten noch FFL_NOAID haben, dann kämpfe nicht mit. */ /* Wenn alle attackierten noch FFL_NOAID haben, dann kämpfe nicht mit. */
if (fval(s->bf->faction, FFL_NOAID)) continue; if (fval(s->bf->faction, FFL_NOAID)) continue;
if (s->bf->faction!=f) { if (s->bf->faction!=f) {
/* Wenn wir attackiert haben, kommt niemand mehr hinzu: */ /* Wenn wir attackiert haben, kommt niemand mehr hinzu: */
if (s->bf->attacker) continue; if (s->bf->attacker) continue;
/* Wenn alliierte attackiert haben, helfen wir nicht mit: */ /* alliiert müssen wir schon sein, sonst ist's eh egal : */
if (s->bf->faction!=f && s->bf->attacker) continue; if (!alliedunit(u, s->bf->faction, HELP_FIGHT)) continue;
/* alliiert müssen wir schon sein, sonst ist's eh egal : */ /* wenn die partei verborgen ist, oder gar eine andere
if (!alliedunit(u, s->bf->faction, HELP_FIGHT)) continue; * vorgespiegelt wird, und er sich uns gegenüber nicht zu
/* wenn die partei verborgen ist, oder gar eine andere * erkennen gibt, helfen wir ihm nicht */
* vorgespiegelt wird, und er sich uns gegenüber nicht zu if (s->stealthfaction){
* erkennen gibt, helfen wir ihm nicht */ if(!allysfm(s, u->faction, HELP_FSTEALTH)) {
if (s->stealthfaction){ continue;
if(!allysfm(s, u->faction, HELP_FSTEALTH)) { }
continue; }
} }
} /* einen alliierten angreifen dürfen sie nicht, es sei denn, der
} * ist mit einem alliierten verfeindet, der nicht attackiert
/* einen alliierten angreifen dürfen sie nicht, es sei denn, der * hat: */
* ist mit einem alliierten verfeindet, der nicht attackiert for (se = 0; se != size; ++se) {
* hat: */ side * evil = b->sides.begin[se];
for (se = 0; se != size; ++se) { if (u->faction==evil->bf->faction) continue;
side * evil = b->sides.begin[se]; if (alliedunit(u, evil->bf->faction, HELP_FIGHT) &&
if (u->faction==evil->bf->faction) continue; !evil->bf->attacker) continue;
if (alliedunit(u, evil->bf->faction, HELP_FIGHT) && if (enemy(s, evil)) break;
!evil->bf->attacker) continue; }
if (enemy(s, evil)) break; if (se==size) continue;
} /* Wenn die Einheit belagert ist, muß auch einer der Alliierten belagert sein: */
if (se==size) continue; if (besieged(u)) {
/* Wenn die Einheit belagert ist, muß auch einer der Alliierten belagert sein: */ void ** fi;
if (besieged(u)) { boolean siege = false;
void ** fi; for (fi = s->fighters.begin; !siege && fi != s->fighters.end; ++fi) {
boolean siege = false; fighter *ally = *fi;
for (fi = s->fighters.begin; !siege && fi != s->fighters.end; ++fi) { if (besieged(ally->unit)) siege = true;
fighter *ally = *fi; }
if (besieged(ally->unit)) siege = true; if (!siege) continue;
} }
if (!siege) continue; /* keine Einwände, also soll er mitmachen: */
} if (!c) c = join_battle(b, u, false);
/* keine Einwände, also soll er mitmachen: */ if (!c) continue;
if (!c) c = join_battle(b, u, false); /* Die Feinde meiner Freunde sind meine Feinde: */
if (!c) continue; for (se = 0; se != size; ++se) {
/* Die Feinde meiner Freunde sind meine Feinde: */ side * evil = b->sides.begin[se];
for (se = 0; se != size; ++se) { if (evil->bf->faction!=u->faction && enemy(s, evil)) {
side * evil = b->sides.begin[se]; set_enemy(evil, c->side, false);
if (evil->bf->faction!=u->faction && enemy(s, evil)) { }
set_enemy(evil, c->side, false); }
} }
} }
}
}
} }
extern struct item_type * i_silver; extern struct item_type * i_silver;

View File

@ -117,8 +117,8 @@ faction_setpolicy(faction& a, faction& b, const char * flag, bool value)
for (mode=0;helpmodes[mode].name!=NULL;++mode) { for (mode=0;helpmodes[mode].name!=NULL;++mode) {
if (strcmp(flag, helpmodes[mode].name)==0) { if (strcmp(flag, helpmodes[mode].name)==0) {
if (value) set_alliance(&a, &b, get_alliance(&a, &b) | mode); if (value) set_alliance(&a, &b, get_alliance(&a, &b) | helpmodes[mode].status);
else set_alliance(&a, &b, get_alliance(&a, &b) & ~mode); else set_alliance(&a, &b, get_alliance(&a, &b) & ~helpmodes[mode].status);
break; break;
} }
} }