From 418f611dcb51fb5ff25f3805ef22f94dcd754c9f Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 16 May 2009 13:43:42 +0000 Subject: [PATCH] available help statuses can be masked by XML settings --- src/common/gamecode/laws.c | 2 ++ src/common/kernel/battle.c | 4 ++++ src/common/kernel/eressea.c | 25 ++++++++++++++++++------- src/common/kernel/eressea.h | 2 ++ src/common/kernel/save.c | 1 + 5 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/common/gamecode/laws.c b/src/common/gamecode/laws.c index 0eb3271bd..f2762cc5c 100644 --- a/src/common/gamecode/laws.c +++ b/src/common/gamecode/laws.c @@ -1242,6 +1242,8 @@ ally_cmd(unit * u, struct order * ord) break; } + sf->status &= HelpMask(); + if (sf->status == 0) { /* Alle HELPs geloescht */ removelist(sfp, sf); } diff --git a/src/common/kernel/battle.c b/src/common/kernel/battle.c index 99b1ab9d0..0904410c4 100644 --- a/src/common/kernel/battle.c +++ b/src/common/kernel/battle.c @@ -12,6 +12,8 @@ * prior permission by the authors of Eressea. */ +#pragma region includes + #include #include #include "battle.h" @@ -67,6 +69,8 @@ #include #include +#pragma endregion + static FILE *bdebug; #define TACTICS_BONUS 1 /* when undefined, we have a tactics round. else this is the bonus tactics give */ diff --git a/src/common/kernel/eressea.c b/src/common/kernel/eressea.c index 9c532a3fc..6f204292c 100644 --- a/src/common/kernel/eressea.c +++ b/src/common/kernel/eressea.c @@ -132,16 +132,16 @@ MaxAge(void) { return value; } - static int ally_flag(const char * s) { - if (strcmp(s, "money")==0) return HELP_MONEY; - if (strcmp(s, "fight")==0) return HELP_FIGHT; - if (strcmp(s, "give")==0) return HELP_GIVE; - if (strcmp(s, "guard")==0) return HELP_GUARD; - if (strcmp(s, "stealth")==0) return HELP_FSTEALTH; - if (strcmp(s, "travel")==0) return HELP_TRAVEL; + int help_mask = HelpMask(); + if ((help_mask&HELP_MONEY) && strcmp(s, "money")==0) return HELP_MONEY; + if ((help_mask&HELP_FIGHT) && strcmp(s, "fight")==0) return HELP_FIGHT; + if ((help_mask&HELP_GIVE) && strcmp(s, "give")==0) return HELP_GIVE; + if ((help_mask&HELP_GUARD) && strcmp(s, "guard")==0) return HELP_GUARD; + if ((help_mask&HELP_FSTEALTH) && strcmp(s, "stealth")==0) return HELP_FSTEALTH; + if ((help_mask&HELP_TRAVEL) && strcmp(s, "travel")==0) return HELP_TRAVEL; return 0; } @@ -175,6 +175,17 @@ AllianceAuto(void) return value; } +int +HelpMask(void) +{ + static int help_mask = 0; + + if (help_mask==0) { + help_mask = get_param_int(global.parameters, "rules.help.mask", HELP_ALL); + } + return help_mask; +} + int AllianceRestricted(void) { diff --git a/src/common/kernel/eressea.h b/src/common/kernel/eressea.h index dec2d78c8..a2f5052a5 100644 --- a/src/common/kernel/eressea.h +++ b/src/common/kernel/eressea.h @@ -400,6 +400,8 @@ extern int SkillCap(skill_t sk); extern int NewbieImmunity(void); extern int AllianceAuto(void); /* flags that allied factions get automatically */ extern int AllianceRestricted(void); /* flags restricted to allied factions */ +extern int HelpMask(void); /* flags restricted to allied factions */ +extern int HelpMask(void); /* flags restricted to allied factions */ extern struct order * default_order(const struct locale * lang); extern int entertainmoney(const struct region * r); diff --git a/src/common/kernel/save.c b/src/common/kernel/save.c index 938d2d39d..9bb11e9cd 100644 --- a/src/common/kernel/save.c +++ b/src/common/kernel/save.c @@ -1096,6 +1096,7 @@ addally(const faction * f, ally ** sfp, int aid, int state) #ifndef REGIONOWNERS state &= ~HELP_TRAVEL; #endif + state &= HelpMask(); if (state==0) return sfp;