PRC8/nwn/nwnprc/trunk/include/prcsp_reputation.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

150 lines
5.0 KiB
Plaintext

#include "x2_inc_switches"
// * Generic reputation wrapper
// * definition of constants:
// * SPELL_TARGET_ALLALLIES = Will affect all allies, even those in my faction who don't like me
// * SPELL_TARGET_STANDARDHOSTILE: 90% of offensive area spells will work
// this way. They will never hurt NEUTRAL or FRIENDLY NPCs.
// They will never hurt FRIENDLY PCs
// They WILL hurt NEUTRAL PCs
// * SPELL_TARGET_SELECTIVEHOSTILE: Will only ever hurt enemies
// * Constants
// * see spellsIsTarget for a definition of these constants
const int SPELL_TARGET_ALLALLIES = 1;
const int SPELL_TARGET_STANDARDHOSTILE = 2;
const int SPELL_TARGET_SELECTIVEHOSTILE = 3;
//::///////////////////////////////////////////////
//:: spellsIsTarget
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
This is the reputation wrapper.
It performs the check to see if, based on the
constant provided
it is okay to target this target with the
spell effect.
MODIFIED APRIL 2003
- Other player's associates will now be harmed in
Standard Hostile mode
- Will ignore dead people in all target attempts
MODIFIED AUG 2003 - GZ
- Multiple henchmen support: made sure that
AoE spells cast by one henchmen do not
affect other henchmen in the party
*/
//:://////////////////////////////////////////////
//:: Created By: Brent
//:: Created On: March 6 2003
//:://////////////////////////////////////////////
// This kind of spell will affect all friendlies and anyone in my
// party, even if we are upset with each other currently.
int
HandleDispositionALLALLIES(object oTarget, object oSource)
{
return GetIsReactionTypeFriendly(oTarget,oSource)
|| GetFactionEqual(oTarget,oSource);
}
// Only harms enemies, ever.
// current list:
// call lightning, isaac missiles, firebrand, chain lightning, dirge, Nature's balance,
// Word of Faith
int
HandleDispositionSELECTIVEHOSTILE(object oTarget, object oSource)
{
return GetIsEnemy(oTarget, oSource);
}
int
HandleDispositionSTANDARDHOSTILE(object oTarget, object oSource)
{
object oMaster = GetMaster(oTarget);
// March 25 2003. In hardcore, casters will affect themselves and
// their associates.
if (GetGameDifficulty() > GAME_DIFFICULTY_NORMAL) {
if (oTarget == oSource || oMaster == oSource)
return TRUE;
}
// April 9 2003. Hurt the associates of a hostile player
if (GetIsObjectValid(oMaster)) {
// Target is an associate of an unfriendly PC or is outright hostile
if ((!GetIsReactionTypeFriendly(oMaster,oSource) && GetIsPC(oMaster))
|| GetIsReactionTypeHostile(oMaster,oSource))
return TRUE;
}
// Spiderfriend Magic means that spells never hurt neutral or allied vermin
if (GetHasFeat(FEAT_SPIDERFRIEND_MAGIC, oSource) && !GetIsReactionTypeHostile(oTarget, oSource) && GetRacialType(oTarget) == RACIAL_TYPE_VERMIN)
return FALSE;
// Assumption: In Full PvP players, even if in same party, are Neutral
// GZ: 2003-08-30: Patch to make creatures hurt each other in hardcore mode.
// Hostile creatures are always a target.
if (GetIsReactionTypeHostile(oTarget,oSource))
return TRUE;
// Handle logic for neutral targets (we know !Hostile(), see above).
if (!GetIsReactionTypeFriendly(oTarget, oSource)) {
// 'neutral' PCs are targets
if (GetIsPC(oTarget))
return TRUE;
// Local Override is just an out for end users who want
// the area effect spells to hurt 'neutrals'.
if (GetLocalInt(GetModule(), "X0_G_ALLOWSPELLSTOHURT") == 10)
return TRUE;
if (GetModuleSwitchValue(MODULE_SWITCH_ENABLE_NPC_AOE_HURT_ALLIES)
&& GetGameDifficulty() > GAME_DIFFICULTY_NORMAL)
return TRUE; // Hostile Creature and Difficulty > Normal.
// In hardcore mode any creature is hostile.
}
// Default response
return FALSE;
}
int spellsIsTarget(object oTarget, int nTargetType, object oSource)
{
// * if dead, not a valid target
if (GetIsDead(oTarget))
return FALSE;
// GZ: Creatures with the same master will never damage each other
object oTargetMaster = GetMaster(oTarget);
object oSourceMaster = GetMaster(oSource);
if (GetIsObjectValid(oTargetMaster)
&& GetIsObjectValid(oSourceMaster)
&& !GetModuleSwitchValue(MODULE_SWITCH_ENABLE_MULTI_HENCH_AOE_DAMAGE)
&& oTargetMaster == oSourceMaster
&& nTargetType != SPELL_TARGET_ALLALLIES)
{
return FALSE;
}
switch (nTargetType) {
case SPELL_TARGET_ALLALLIES:
return HandleDispositionALLALLIES(oTarget, oSource);
case SPELL_TARGET_SELECTIVEHOSTILE:
return HandleDispositionSELECTIVEHOSTILE(oTarget, oSource);
case SPELL_TARGET_STANDARDHOSTILE:
return HandleDispositionSTANDARDHOSTILE(oTarget, oSource);
}
// unhandled dispositions
return FALSE;
}