[Add] Added concept of static factions so we can't modify player

standing.
This commit is contained in:
Allanis 2014-11-16 00:32:02 +00:00
parent 023c8dff0e
commit d93e594787

View File

@ -25,6 +25,11 @@
#define CHUNK_SIZE 32 /**< Size of chunk for allocation. */ #define CHUNK_SIZE 32 /**< Size of chunk for allocation. */
#define FACTION_STATIC (1<<0) /**< Faction doesn't change standing with player. */
#define faction_setFlag(fa, f) ((fa)->flags |= (f))
#define faction_isFlag(fa, f) ((fa)->flags & (f))
/** /**
* @struct Faction. * @struct Faction.
* *
@ -47,6 +52,8 @@ typedef struct Faction_ {
double player_def; /**< Default player standing. */ double player_def; /**< Default player standing. */
double player; /**< Standing with player - from -100 to 100. */ double player; /**< Standing with player - from -100 to 100. */
unsigned int flags; /**< Flags affecting the faction. */
} Faction; } Faction;
static Faction* faction_stack = NULL; /**< Faction stack. */ static Faction* faction_stack = NULL; /**< Faction stack. */
@ -195,6 +202,10 @@ void faction_modPlayer(int f, double mod) {
faction = &faction_stack[f]; faction = &faction_stack[f];
/* Make sure it's not static. */
if(faction_isFlag(faction, FACTION_STATIC))
return;
/* Faction in question gets direct increment. */ /* Faction in question gets direct increment. */
faction->player += mod; faction->player += mod;
faction_sanitizePlayer(faction); faction_sanitizePlayer(faction);
@ -245,6 +256,10 @@ void faction_modPlayerRaw(int f, double mod) {
faction = &faction_stack[f]; faction = &faction_stack[f];
/* Make sure it's not static. */
if(faction_isFlag(faction, FACTION_STATIC))
return;
faction->player += mod; faction->player += mod;
faction_sanitizePlayer(faction); faction_sanitizePlayer(faction);
} }
@ -495,6 +510,11 @@ static int faction_parse(Faction* tmp, xmlNodePtr parent) {
tmp->logo_small = gl_newImage(buf, 0); tmp->logo_small = gl_newImage(buf, 0);
continue; continue;
} }
if(xml_isNode(node, "static")) {
faction_setFlag(tmp, FACTION_STATIC);
continue;
}
} while(xml_nextNode(node)); } while(xml_nextNode(node));
if(player == 0) WARN("Faction '%s' missing player tag", tmp->name); if(player == 0) WARN("Faction '%s' missing player tag", tmp->name);