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.
201 lines
6.6 KiB
Plaintext
201 lines
6.6 KiB
Plaintext
//
|
|
// Wrapper Functions for the Archmage Class and Feats
|
|
//
|
|
|
|
//
|
|
// Notes: Normal use is to include prc_alterations.
|
|
// If this file if to be included elsewhere add the following lines
|
|
// to the target file:
|
|
// #include "prcsp_reputation"
|
|
// #include "prcsp_archmaginc"
|
|
//
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Constants */
|
|
//////////////////////////////////////////////////
|
|
|
|
/// @todo Change these to TLK reads
|
|
|
|
const string MASTERY_OF_ELEMENTS_TAG = "archmage_mastery_elements";
|
|
const string MASTERY_OF_ELEMENTS_NAME_TAG = "archmage_mastery_elements_name";
|
|
const string MASTERY_OF_SHAPE_TAG = "archmage_mastery_shaping";
|
|
const string MASTERY_OF_SHAPE_ON = "Shaping spells to protect allies.";
|
|
const string MASTERY_OF_SHAPE_OFF = "Spell shaping is disabled, allies may be effected.";
|
|
const string MASTERY_OF_ELEMENTS_ACID = "Elemental spell damage set to acid.";
|
|
const string MASTERY_OF_ELEMENTS_COLD = "Elemental spell damage set to cold.";
|
|
const string MASTERY_OF_ELEMENTS_ELECTRICAL = "Elemental spell damage set to electrical.";
|
|
const string MASTERY_OF_ELEMENTS_FIRE = "Elemental spell damage set to fire.";
|
|
const string MASTERY_OF_ELEMENTS_SONIC = "Elemental spell damage set to sonic.";
|
|
const string MASTERY_OF_ELEMENTS_OFF = "Elemental spell damage returned to normal.";
|
|
|
|
const int FEAT_INACTIVE = 0;
|
|
const int FEAT_ACTIVE = 1;
|
|
|
|
const int MASTERY_OF_SHAPE_EFFECT = 460;
|
|
const int MASTERY_OF_ELEMENTS_EFFECT_ACID = 448;
|
|
const int MASTERY_OF_ELEMENTS_EFFECT_ELECTRICAL = 463;
|
|
const int MASTERY_OF_ELEMENTS_EFFECT_OFF = 460;
|
|
|
|
const int SPELL_MASTERY_ELEMENTS_NORMAL = 2000;
|
|
const int SPELL_MASTERY_ELEMENTS_ACID = 2003;
|
|
const int SPELL_MASTERY_ELEMENTS_COLD = 2002;
|
|
const int SPELL_MASTERY_ELEMENTS_ELECTRICITY = 2004;
|
|
const int SPELL_MASTERY_ELEMENTS_FIRE = 2001;
|
|
const int SPELL_MASTERY_ELEMENTS_SONIC = 2005;
|
|
|
|
const int TIME_1_ROUND = 1;
|
|
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Function prototypes */
|
|
//////////////////////////////////////////////////
|
|
|
|
/**
|
|
* Determines if Master of Shapes is active and applies in regards to the
|
|
* given target.
|
|
*
|
|
* @param oCaster A creature casting an area-affecting spell
|
|
* @param oTarget A creature that is in the affected area
|
|
* @return TRUE if the creature should be exempt from the spell due to
|
|
* Mastery of Shapes. FALSE otherwise
|
|
*/
|
|
int CheckMasteryOfShapes(object oCaster, object oTarget);
|
|
|
|
void SetFeatVisualEffects(object oCaster, int nEffect, string sMessage);
|
|
|
|
void ToggleMasteryOfShapes(object oCaster);
|
|
|
|
void SetMasteryOfElements();
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Includes */
|
|
//////////////////////////////////////////////////
|
|
|
|
//#include "lookup_2da_spell"
|
|
#include "prcsp_reputation"
|
|
//#include "prc_inc_spells"
|
|
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Function definitions */
|
|
//////////////////////////////////////////////////
|
|
|
|
int CheckMasteryOfShapes(object oCaster, object oTarget)
|
|
{
|
|
int bRetVal = FALSE;
|
|
|
|
// This variable should not be set without the feat being available.
|
|
// If someone wants to cheat, let them.
|
|
if (GetLocalInt(oCaster, MASTERY_OF_SHAPE_TAG) == FEAT_ACTIVE && !GetIsReactionTypeHostile(oTarget, oCaster))
|
|
{
|
|
bRetVal = TRUE;
|
|
}
|
|
|
|
return bRetVal;
|
|
}
|
|
|
|
int ExtraordinarySpellAim(object oCaster, object oTarget)
|
|
{
|
|
int bRetVal = FALSE;
|
|
|
|
// This variable should not be set without the feat being available.
|
|
// If someone wants to cheat, let them.
|
|
if(GetHasFeat(FEAT_EXTRAORDINARY_SPELL_AIM, oCaster)
|
|
&& !GetLocalInt(oCaster, "ExtraordinarySpellAim")
|
|
&& GetIsFriend(oTarget, oCaster))
|
|
{
|
|
// Only once per spell
|
|
SetLocalInt(oCaster, "ExtraordinarySpellAim", TRUE);
|
|
DelayCommand(1.0, DeleteLocalInt(oCaster, "ExtraordinarySpellAim"));
|
|
if(GetIsSkillSuccessful(oCaster, SKILL_SPELLCRAFT, 25 + PRCGetSpellLevel(oCaster, PRCGetSpellId())))
|
|
bRetVal = TRUE;
|
|
}
|
|
|
|
return bRetVal;
|
|
}
|
|
|
|
//
|
|
// Help with Visual Effects when setting feats
|
|
//
|
|
void SetFeatVisualEffects(object oCaster, int nEffect, string sMessage)
|
|
{
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(nEffect),
|
|
oCaster, RoundsToSeconds(TIME_1_ROUND));
|
|
|
|
FloatingTextStringOnCreature(sMessage, OBJECT_SELF, FALSE);
|
|
}
|
|
|
|
//
|
|
// Enable/Disable Mastery of Shapes
|
|
//
|
|
void ToggleMasteryOfShapes(object oCaster)
|
|
{
|
|
if (GetLocalInt(OBJECT_SELF, MASTERY_OF_SHAPE_TAG) == FEAT_INACTIVE) {
|
|
SetLocalInt(OBJECT_SELF, MASTERY_OF_SHAPE_TAG, FEAT_ACTIVE);
|
|
SetFeatVisualEffects(oCaster, MASTERY_OF_SHAPE_EFFECT, MASTERY_OF_SHAPE_ON);
|
|
}
|
|
else {
|
|
SetLocalInt(OBJECT_SELF, MASTERY_OF_SHAPE_TAG, FEAT_INACTIVE);
|
|
SetFeatVisualEffects(oCaster, MASTERY_OF_SHAPE_EFFECT, MASTERY_OF_SHAPE_OFF);
|
|
}
|
|
}
|
|
|
|
//
|
|
// This function sets the Mastery of Elements feat to a specific element
|
|
//
|
|
void SetMasteryOfElements()
|
|
{
|
|
string msg = MASTERY_OF_ELEMENTS_OFF;
|
|
string sElem = "";
|
|
int nEffect = MASTERY_OF_ELEMENTS_EFFECT_OFF;
|
|
int dmgType = FEAT_INACTIVE;
|
|
|
|
switch (PRCGetSpellId()) {
|
|
case SPELL_MASTERY_ELEMENTS_ACID:
|
|
nEffect = MASTERY_OF_ELEMENTS_EFFECT_ACID;
|
|
dmgType = DAMAGE_TYPE_ACID;
|
|
msg = MASTERY_OF_ELEMENTS_ACID;
|
|
sElem = "Acid";
|
|
break;
|
|
|
|
case SPELL_MASTERY_ELEMENTS_COLD:
|
|
nEffect = VFX_IMP_AC_BONUS;
|
|
dmgType = DAMAGE_TYPE_COLD;
|
|
msg = MASTERY_OF_ELEMENTS_COLD;
|
|
sElem = "Cold";
|
|
break;
|
|
|
|
case SPELL_MASTERY_ELEMENTS_ELECTRICITY:
|
|
nEffect = MASTERY_OF_ELEMENTS_EFFECT_ELECTRICAL;
|
|
dmgType = DAMAGE_TYPE_ELECTRICAL;
|
|
msg = MASTERY_OF_ELEMENTS_ELECTRICAL;
|
|
sElem = "Electricity";
|
|
break;
|
|
|
|
case SPELL_MASTERY_ELEMENTS_FIRE:
|
|
nEffect = VFX_IMP_ELEMENTAL_PROTECTION;
|
|
dmgType = DAMAGE_TYPE_FIRE;
|
|
msg = MASTERY_OF_ELEMENTS_FIRE;
|
|
sElem = "Fire";
|
|
break;
|
|
|
|
case SPELL_MASTERY_ELEMENTS_SONIC:
|
|
nEffect = VFX_FNF_SOUND_BURST;
|
|
dmgType = DAMAGE_TYPE_SONIC;
|
|
msg = MASTERY_OF_ELEMENTS_SONIC;
|
|
sElem = "Sonic";
|
|
break;
|
|
|
|
default:
|
|
// Use the default initialized variables
|
|
break;
|
|
}
|
|
|
|
SetLocalInt(OBJECT_SELF, MASTERY_OF_ELEMENTS_TAG, dmgType);
|
|
SetLocalString(OBJECT_SELF, MASTERY_OF_ELEMENTS_NAME_TAG, sElem);
|
|
SetFeatVisualEffects(PRCGetSpellTargetObject(), nEffect, msg);
|
|
}
|
|
|
|
// Test main
|
|
//void main(){}
|