[Add] faction_modPlayerRaw and the misn bindings for it.

This commit is contained in:
Allanis 2013-08-29 15:30:55 +01:00
parent 01b3f2f77b
commit b387cf0da7
4 changed files with 68 additions and 36 deletions

View File

@ -148,10 +148,10 @@ function land()
-- Modify the faction standing.
if player.getFaction("Merchant") < 70 then
player.modFaction("Merchant", misn_faction)
player.modFactionRaw("Merchant", misn_faction)
end
if player.getFaction("Independent") < 30 then
player.modFaction("Independent", misn_faction/2)
player.modFactionRaw("Independent", misn_faction/2)
end
if player.getFaction("Empire") < 10 then
player.modFaction("Empire", misn_faction/3)

View File

@ -85,7 +85,11 @@ void faction_modPlayer(int f, int mod) {
int i;
Faction* faction, *ally, *enemy;
if(faction_isFaction(f)) {
if(!faction_isFaction(f)) {
WARN("%d is an invalid faction.", f);
return;
}
faction = &faction_stack[f];
/* Faction in question gets direct increment. */
@ -107,11 +111,21 @@ void faction_modPlayer(int f, int mod) {
enemy->player -= MIN(1, RNG(0, (mod*3)/4));
faction_sanitizePlayer(enemy);
}
}
} else {
/* Modifies a players standing with a faction without affecting others. */
void faction_modPlayerRaw(int f, int mod) {
Faction* faction;
if(!faction_isFaction(f)) {
WARN("%d is an invalid faction.", f);
return;
}
faction = &faction_stack[f];
faction->player += mod;
faction_sanitizePlayer(faction);
}
/* Get the player's standing with a faction. */

View File

@ -10,6 +10,7 @@ char* faction_longname(int f);
/* Player stuff. */
void faction_modPlayer(int f, int mod);
void faction_modPlayerRaw(int f, int mod);
int faction_getPlayer(int f);
char* faction_getStanding(int mod);
glColour* faction_getColour(int f);

View File

@ -105,6 +105,7 @@ static int player_rmCargo(lua_State* L);
static int player_pay(lua_State* L);
static int player_msg(lua_State* L);
static int player_modFaction(lua_State* L);
static int player_modFactionRaw(lua_State* L);
static int player_getFaction(lua_State* L);
static int player_getRating(lua_State* L);
static const luaL_reg player_methods[] = {
@ -116,6 +117,7 @@ static const luaL_reg player_methods[] = {
{ "pay", player_pay },
{ "msg", player_msg },
{ "modFaction", player_modFaction },
{ "modFactionRaw", player_modFactionRaw },
{ "getFaction", player_getFaction },
{ "getRating", player_getRating },
{ 0, 0 }
@ -687,6 +689,21 @@ static int player_modFaction(lua_State* L) {
return 0;
}
static int player_modFactionRaw(lua_State* L) {
LLUA_MIN_ARGS(2);
int f, mod;
if(lua_isstring(L, 1)) f = faction_get(lua_tostring(L,1));
else LLUA_INVALID_PARAMETER();
if(lua_isnumber(L,2)) mod = (int) lua_tonumber(L,2);
else LLUA_INVALID_PARAMETER();
faction_modPlayerRaw(f, mod);
return 0;
}
static int player_getFaction(lua_State* L) {
LLUA_MIN_ARGS(1);
int f;