PRC8/nwn/nwnprc/trunk/scripts/mos_summon.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

95 lines
3.4 KiB
Plaintext

/**
* Master of Shrouds: Summon Undead (1-4)
* 2004/02/15
* Brian Greinke
* edited to include epic wraith summons 2004/03/04; also removed unnecessary scripting.
* Lockindal Linantal
*/
#include "prc_inc_spells"
//#include "inc_utility"
#include "prc_inc_turning"
void SummonUndeadPseudoHB(object oCaster, object oSummon, int nChaMod, int nSpellID)
{
if(!GetIsObjectValid(oSummon))
return;
if(!GetIsInCombat(oCaster))
{
//casters level for turning
int nLevel = GetTurningClassLevel(oCaster);
int nTurningCheck = d20() + nChaMod;
int nTurningMaxHD = GetTurningCheckResult(nLevel, nTurningCheck);
int nTargetHD = GetHitDiceForTurning(oSummon, SPELL_TURN_UNDEAD, RACIAL_TYPE_UNDEAD);
if(nTurningMaxHD < nTargetHD)
{
effect eTest= GetFirstEffect(oSummon);
while(GetIsEffectValid(eTest))
{
if(GetEffectSpellId(eTest) == nSpellID)
RemoveEffect(oSummon, eTest);
eTest = GetNextEffect(oSummon);
}
//make em hostile
object oTest = GetFirstFactionMember(oCaster);
while(GetIsObjectValid(oTest))
{
SetIsTemporaryEnemy(oTest, oSummon);
oTest = GetNextFactionMember(oCaster);
}
}
else
{
AssignCommand(oSummon, ClearAllActions());
AssignCommand(oSummon, ActionForceFollowObject(oCaster, IntToFloat(Random(8)+3)));
}
}
DelayCommand(6.0, SummonUndeadPseudoHB(oCaster, oSummon, nChaMod, nSpellID));
}
void main()
{
object oCaster = OBJECT_SELF;
location lTarget = GetSpellTargetLocation();
int nClass = GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster);
int nChaMod = GetTurningCharismaMod(SPELL_TURN_UNDEAD);
float fDuration = RoundsToSeconds(nClass);
int nSpellID = GetSpellId();
int nCount;
switch(nSpellID)
{
case 3009: nCount = 1; break;
case 3010: nCount = 2; break;
case 3011: nCount = 4; break;
case 3012: nCount = 8; break;
}
string sSummon;
if (nClass > 28) sSummon = "prc_mos_39";
else if (nClass > 25) sSummon = "prc_mos_36";
else if (nClass > 22) sSummon = "prc_mos_33";
else if (nClass > 19) sSummon = "prc_mos_30";
else if (nClass > 16) sSummon = "prc_mos_27";
else if (nClass > 13) sSummon = "prc_mos_24";
else if (nClass > 10) sSummon = "prc_mos_21";
else if (nClass > 8) sSummon = "prc_mos_spectre2";
else if (nClass > 6) sSummon = "prc_mos_spectre1";
else if (nClass > 4) sSummon = "prc_mos_wraith";
else sSummon = "prc_mos_allip";
//MultisummonPreSummon(oCaster);
effect eCommand = EffectCutsceneDominated();//SupernaturalEffect(effectdominated doesnt work on mind-immune
effect eSummonB = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD);//EffectVisualEffect( VFX_FNF_LOS_EVIL_30);
int i;
for(i = 0; i < nCount; i++)
{
object oSummon = CreateObject(OBJECT_TYPE_CREATURE, sSummon, lTarget);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eSummonB, GetLocation(oSummon));
ChangeToStandardFaction(oSummon, STANDARD_FACTION_HOSTILE);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eCommand, oSummon);
DelayCommand(6.0, SummonUndeadPseudoHB(oCaster, oSummon, nChaMod, nSpellID));
DestroyObject(oSummon, fDuration);
}
}