defender-factions that help the region's owner.

This commit is contained in:
Enno Rehling 2009-09-26 20:33:39 +00:00
parent ecdb0b760e
commit 319abf6c5d
3 changed files with 17 additions and 3 deletions

View File

@ -957,7 +957,19 @@ alliedunit(const unit * u, const faction * f2, int mode)
assert(u->region); /* the unit should be in a region, but it's possible that u->number==0 (TEMP units) */ assert(u->region); /* the unit should be in a region, but it's possible that u->number==0 (TEMP units) */
if (u->faction == f2) return mode; if (u->faction == f2) return mode;
if (u->faction != NULL && f2!=NULL) { if (u->faction != NULL && f2!=NULL) {
plane * pl = rplane(u->region); plane * pl;
if (mode&HELP_FIGHT) {
if ((u->flags&UFL_DEFENDER) || (u->faction->flags&FFL_DEFENDER)) {
faction * owner = region_get_owner(u->region);
/* helps the owner of the region */
if (owner==f2) {
return HELP_FIGHT;
}
}
}
pl = rplane(u->region);
automode = mode & autoalliance(pl, u->faction, f2); automode = mode & autoalliance(pl, u->faction, f2);
if (pl!=NULL && (pl->flags & PFL_NOALLIANCES)) if (pl!=NULL && (pl->flags & PFL_NOALLIANCES))

View File

@ -30,6 +30,7 @@ struct seen_region;
#define FFL_ISNEW (1<<1) #define FFL_ISNEW (1<<1)
#define FFL_RESTART (1<<2) #define FFL_RESTART (1<<2)
#define FFL_QUIT (1<<3) #define FFL_QUIT (1<<3)
#define FFL_DEFENDER (1<<10)
#define FFL_SELECT (1<<18) /* ehemals f->dh, u->dh, r->dh, etc... */ #define FFL_SELECT (1<<18) /* ehemals f->dh, u->dh, r->dh, etc... */
#define FFL_NOAID (1<<21) /* Hilfsflag Kampf */ #define FFL_NOAID (1<<21) /* Hilfsflag Kampf */
#define FFL_MARK (1<<23) /* für markierende algorithmen, die das #define FFL_MARK (1<<23) /* für markierende algorithmen, die das
@ -43,7 +44,7 @@ struct seen_region;
#define FFL_GM (1<<30) /* eine Partei mit Sonderrechten */ #define FFL_GM (1<<30) /* eine Partei mit Sonderrechten */
#define FFL_NPC (1<<31) /* eine Partei mit Monstern */ #define FFL_NPC (1<<31) /* eine Partei mit Monstern */
#define FFL_SAVEMASK (FFL_NEWID|FFL_GM|FFL_NPC|FFL_NOTIMEOUT|FFL_DBENTRY|FFL_NOTIMEOUT) #define FFL_SAVEMASK (FFL_DEFENDER|FFL_NEWID|FFL_GM|FFL_NPC|FFL_NOTIMEOUT|FFL_DBENTRY|FFL_NOTIMEOUT)
struct faction * get_monsters(void); struct faction * get_monsters(void);
#define is_monsters(f) ((f)->flags&FFL_NPC) #define is_monsters(f) ((f)->flags&FFL_NPC)

View File

@ -41,6 +41,7 @@ struct item;
#define UFL_HERO (1<<7) #define UFL_HERO (1<<7)
#define UFL_MOVED (1<<8) #define UFL_MOVED (1<<8)
#define UFL_NOTMOVING (1<<9) /* Die Einheit kann sich wg. langen Kampfes nicht bewegen */ #define UFL_NOTMOVING (1<<9) /* Die Einheit kann sich wg. langen Kampfes nicht bewegen */
#define UFL_DEFENDER (1<<10)
#define UFL_HUNGER (1<<11) /* kann im Folgemonat keinen langen Befehl außer ARBEITE ausführen */ #define UFL_HUNGER (1<<11) /* kann im Folgemonat keinen langen Befehl außer ARBEITE ausführen */
#define UFL_SIEGE (1<<12) /* speedup: belagert eine burg, siehe attribut */ #define UFL_SIEGE (1<<12) /* speedup: belagert eine burg, siehe attribut */
#define UFL_TARGET (1<<13) /* speedup: hat ein target, siehe attribut */ #define UFL_TARGET (1<<13) /* speedup: hat ein target, siehe attribut */
@ -64,7 +65,7 @@ struct item;
#define UFL_GROUP (1<<28) #define UFL_GROUP (1<<28)
/* Flags, die gespeichert werden sollen: */ /* Flags, die gespeichert werden sollen: */
#define UFL_SAVEMASK (UFL_MOVED | UFL_NOAID | UFL_OWNER | UFL_PARTEITARNUNG | UFL_LOCKED | UFL_HUNGER | UFL_TAKEALL | UFL_GUARD | UFL_STEALTH | UFL_GROUP | UFL_HERO) #define UFL_SAVEMASK (UFL_DEFENDER|UFL_MOVED|UFL_NOAID|UFL_OWNER|UFL_PARTEITARNUNG|UFL_LOCKED|UFL_HUNGER|UFL_TAKEALL|UFL_GUARD|UFL_STEALTH|UFL_GROUP|UFL_HERO)
#define UNIT_MAXSIZE 50000 #define UNIT_MAXSIZE 50000
extern int maxheroes(const struct faction * f); extern int maxheroes(const struct faction * f);