Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
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(){}
|