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.
266 lines
11 KiB
Plaintext
266 lines
11 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Command Spiders
|
|
//:: dj_s2_comspider.nss
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
Specifics: As a special dispensation from Lolth,
|
|
Selvetarm can grant his judicators the ability to
|
|
command spiders. When a drow judicator reaches 2nd
|
|
level, he gains the ability to compel spiders in
|
|
the same way that an evil cleric can rebuke or
|
|
command undead. The drow judicator can attempt to
|
|
command spiders a number of times per day equal to
|
|
3 + his Charisma modifier. He is treated as a cleric
|
|
of a level equal to his drow judicator level for the
|
|
purposes of turning checks and damage.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Modified:
|
|
//:: 20040101 by Cole Kleinschmit: for use as Command Spiders.
|
|
//:: 22021020 by Jaysyn: Fixed to actually work on all spiders.
|
|
|
|
#include "prc_class_const"
|
|
#include "prc_alterations"
|
|
|
|
int CheckTargetName(object oTarget, string sName);
|
|
|
|
int GetIsSpider(object oCreature, int nAppearance);
|
|
|
|
int CanCommand(int nClassLevel, int nTargetHD)
|
|
{
|
|
int nSlots = GetLocalInt(OBJECT_SELF, "wb_clr_comm_slots");
|
|
int nNew = nSlots+nTargetHD;
|
|
//FloatingTextStringOnCreature("The variable is " + IntToString(nSlots), OBJECT_SELF);
|
|
if(nClassLevel >= nNew)
|
|
{
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void AddCommand(int nTargetHD)
|
|
{
|
|
int nSlots = GetLocalInt(OBJECT_SELF, "wb_clr_comm_slots");
|
|
SetLocalInt(OBJECT_SELF, "wb_clr_comm_slots", nSlots + nTargetHD);
|
|
}
|
|
|
|
void SubCommand(int nTargetHD)
|
|
{
|
|
int nSlots = GetLocalInt(OBJECT_SELF, "wb_clr_comm_slots");
|
|
SetLocalInt(OBJECT_SELF, "wb_clr_comm_slots", nSlots - nTargetHD);
|
|
}
|
|
|
|
void RebukeSpider(int nTurnLevel, int nTurnHD, int nVermin, int nClassLevel)
|
|
{
|
|
//Gets all creatures in a 20m radius around the caster and rebukes them or not. If the creatures
|
|
//HD are 1/2 or less of the nClassLevel then the creature is commanded (dominated).
|
|
int nCnt = 1;
|
|
int nHD, nRacial, nHDCount, bValid, nDamage;
|
|
nHDCount = 0;
|
|
effect eVis = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE);
|
|
effect eVisTurn = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DOMINATED);
|
|
effect eDamage;
|
|
effect eTurned = EffectCutsceneParalyze();
|
|
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
|
effect eLink = EffectLinkEffects(eVisTurn, eTurned);
|
|
eLink = EffectLinkEffects(eLink, eDur);
|
|
|
|
effect eDeath = SupernaturalEffect(EffectCutsceneDominated());
|
|
effect eDomin = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE);
|
|
effect eDeathLink = EffectLinkEffects(eDeath, eDomin);
|
|
|
|
effect eImpactVis = EffectVisualEffect(VFX_FNF_LOS_EVIL_30);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpactVis, GetLocation(OBJECT_SELF));
|
|
|
|
//Get nearest enemy within 20m (60ft)
|
|
//Why are you using GetNearest instead of GetFirstObjectInShape
|
|
// Because ability description says "gets closest first" :P
|
|
object oTarget = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC , OBJECT_SELF, nCnt);
|
|
|
|
int nTargetAppearance = GetAppearanceType(oTarget);
|
|
|
|
while(GetIsObjectValid(oTarget) && nHDCount < nTurnHD && GetDistanceToObject(oTarget) <= 20.0)
|
|
{
|
|
if(!GetIsFriend(oTarget))
|
|
{
|
|
nHD = GetHitDice(oTarget) + GetTurnResistanceHD(oTarget);
|
|
|
|
if(nHD <= nTurnLevel && nHD <= (nTurnHD - nHDCount))
|
|
{
|
|
//:: Check for correct turning target.
|
|
if(GetIsSpider(oTarget, nTargetAppearance))
|
|
{
|
|
bValid = TRUE;
|
|
//debug
|
|
SpeakString("Spider Found");
|
|
}
|
|
|
|
//Apply results of the turn
|
|
if( bValid == TRUE)
|
|
{
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
|
//if(IntToFloat(nClassLevel)/2.0 >= IntToFloat(nHD))
|
|
//{
|
|
|
|
if((nClassLevel/2) >= nHD && CanCommand(nClassLevel, nHD))
|
|
{
|
|
//Fire cast spell at event for the specified target
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_COMMAND_SPIDERS));
|
|
//Destroy the target
|
|
DelayCommand(0.1f, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDeathLink, oTarget, RoundsToSeconds(nClassLevel + 5)));
|
|
//AssignCommand(oTarget, ClearAllActions());
|
|
//SetIsTemporaryFriend(oTarget, OBJECT_SELF, TRUE, RoundsToSeconds(nClassLevel + 5));
|
|
AddCommand(nHD);
|
|
DelayCommand(RoundsToSeconds(nClassLevel + 5), SubCommand(nHD));
|
|
//debug
|
|
SpeakString("Commanding Spider");
|
|
}
|
|
else
|
|
{
|
|
//Turn the target
|
|
//Fire cast spell at event for the specified target
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_COMMAND_SPIDERS));
|
|
//AssignCommand(oTarget, ActionMoveAwayFromObject(OBJECT_SELF, TRUE));
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nClassLevel + 5));
|
|
//debug
|
|
SpeakString("Rebuking Spider");
|
|
}
|
|
nHDCount = nHDCount + nHD;
|
|
}
|
|
}
|
|
bValid = FALSE;
|
|
}
|
|
nCnt++;
|
|
oTarget = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC, OBJECT_SELF, nCnt);
|
|
}
|
|
}
|
|
|
|
void main()
|
|
{
|
|
int nClericLevel = GetLevelByClass(CLASS_TYPE_JUDICATOR);
|
|
int nTotalLevel = nClericLevel;
|
|
|
|
int nTurnLevel = nClericLevel;
|
|
int nClassLevel = nClericLevel;
|
|
|
|
//Flags for bonus turning types
|
|
int nVermin = GetHasFeat(FEAT_DOMAIN_POWER_SPIDER);
|
|
|
|
//Make a turning check roll
|
|
int nChrMod = GetAbilityModifier(ABILITY_CHARISMA);
|
|
int nTurnCheck = d20() + nChrMod; //The roll to apply to the max HD of spiders that can be commanded --> nTurnLevel
|
|
int nTurnHD = d6(2) + nChrMod + nClassLevel; //The number of HD of spiders that can be commanded.
|
|
|
|
//Determine the maximum HD of the spiders that can be commanded.
|
|
if(nTurnCheck <= 0)
|
|
{
|
|
nTurnLevel -= 4;
|
|
}
|
|
else if(nTurnCheck >= 1 && nTurnCheck <= 3)
|
|
{
|
|
nTurnLevel -= 3;
|
|
}
|
|
else if(nTurnCheck >= 4 && nTurnCheck <= 6)
|
|
{
|
|
nTurnLevel -= 2;
|
|
}
|
|
else if(nTurnCheck >= 7 && nTurnCheck <= 9)
|
|
{
|
|
nTurnLevel -= 1;
|
|
}
|
|
else if(nTurnCheck >= 10 && nTurnCheck <= 12)
|
|
{
|
|
//Stays the same
|
|
}
|
|
else if(nTurnCheck >= 13 && nTurnCheck <= 15)
|
|
{
|
|
nTurnLevel += 1;
|
|
}
|
|
else if(nTurnCheck >= 16 && nTurnCheck <= 18)
|
|
{
|
|
nTurnLevel += 2;
|
|
}
|
|
else if(nTurnCheck >= 19 && nTurnCheck <= 21)
|
|
{
|
|
nTurnLevel += 3;
|
|
}
|
|
else if(nTurnCheck >= 22)
|
|
{
|
|
nTurnLevel += 4;
|
|
}
|
|
|
|
RebukeSpider(nTurnLevel, nTurnHD, nVermin, nClassLevel);
|
|
|
|
}
|
|
|
|
int CheckTargetName(object oTarget, string sName)
|
|
{
|
|
return FindSubString(GetStringLowerCase(GetName(oTarget)), sName) > -1;
|
|
}
|
|
|
|
int GetIsSpider(object oTarget, int nAppearance)
|
|
{
|
|
|
|
return (nAppearance == APPEARANCE_TYPE_SPIDER_WRAITH
|
|
|| nAppearance == APPEARANCE_TYPE_SPIDER_DIRE
|
|
|| nAppearance == APPEARANCE_TYPE_SPIDER_GIANT
|
|
|| nAppearance == APPEARANCE_TYPE_SPIDER_SWORD
|
|
|| nAppearance == APPEARANCE_TYPE_SPIDER_PHASE
|
|
|| nAppearance == 15045 //:: Spider - Small
|
|
|| nAppearance == 463 //:: Maggris
|
|
//:: CEP Appearances
|
|
|| nAppearance == 1168 //:: Spider: Bloodback [cep]
|
|
|| nAppearance == 1248 //:: Spider: Redback [cep]
|
|
|| nAppearance == 1256 //:: Spider: Wraith B [cep]
|
|
|| nAppearance == 1284 //:: Spider: Ice [cep]
|
|
|| nAppearance == 1311 //:: Spiderling [cep]
|
|
|| nAppearance == 1312 //:: Spiderling: Giant [cep]
|
|
|| nAppearance == 1313 //:: Spiderling: Dire [cep]
|
|
|| nAppearance == 1314 //:: Spiderling: Sword [cep]
|
|
|| nAppearance == 1315 //:: Spiderling: Phase [cep]
|
|
|| nAppearance == 1894 //:: Spider: Giant - Tiny [cep]
|
|
|| nAppearance == 1895 //:: Spider: Giant - Small [cep]
|
|
|| nAppearance == 1896 //:: Spider: Giant - Medium [cep]
|
|
|| nAppearance == 1897 //:: Spider: Giant - Large [cep]
|
|
|| nAppearance == 1898 //:: Spider: Giant - Gargantuan [cep]
|
|
|| nAppearance == 1900 //:: Spider: Dire - Tiny [cep]
|
|
|| nAppearance == 1901 //:: Spider: Dire - Small [cep]
|
|
|| nAppearance == 1902 //:: Spider: Dire - Medium [cep]
|
|
|| nAppearance == 1903 //:: Spider: Dire - Large [cep]
|
|
|| nAppearance == 1904 //:: Spider: Dire - Gargantuan [cep]
|
|
|| nAppearance == 1906 //:: Spider: Phase - Tiny [cep]
|
|
|| nAppearance == 1907 //:: Spider: Phase - Small [cep]
|
|
|| nAppearance == 1908 //:: Spider: Phase - Medium [cep]
|
|
|| nAppearance == 1909 //:: Spider: Phase - Large [cep]
|
|
|| nAppearance == 1910 //:: Spider: Phase - Gargantuan [cep]
|
|
|| nAppearance == 1912 //:: Spider: Sword - Tiny [cep]
|
|
|| nAppearance == 1913 //:: Spider: Sword - Small [cep]
|
|
|| nAppearance == 1914 //:: Spider: Sword - Medium [cep]
|
|
|| nAppearance == 1915 //:: Spider: Sword - Large [cep]
|
|
|| nAppearance == 1916 //:: Spider: Sword - Gargantuan [cep]
|
|
|| nAppearance == 1918 //:: Spider: Wraith - Tiny [cep]
|
|
|| nAppearance == 1919 //:: Spider: Wraith - Small [cep]
|
|
|| nAppearance == 1920 //:: Spider: Wraith - Medium [cep]
|
|
|| nAppearance == 1921 //:: Spider: Wraith - Large [cep]
|
|
|| nAppearance == 1922 //:: Spider: Wraith - Gargantuan [cep]
|
|
|| nAppearance == 2515 //:: Spider: Small [cep]
|
|
|| nAppearance == 2996 //:: Spider: Giant: Infensa 1 [cep]
|
|
|| nAppearance == 2997 //:: Spider: Giant: Infensa 2 [cep]
|
|
|| nAppearance == 2998 //:: Spider: Giant: Infensa 3 [cep]
|
|
|| nAppearance == 2999 //:: Spider: Giant: Infensa 4 [cep]
|
|
|| nAppearance == 3000 //:: Spider: Giant: Infensa 5 [cep]
|
|
|| nAppearance == 3997 //:: Spider: Tyrant [cep]
|
|
|| nAppearance == 3998 //:: Spider: Gold Queen [cep]
|
|
|| nAppearance == 6276 //:: Spider: Purgatory* [cep]
|
|
|| nAppearance == 6277 //:: Spider: MindEater* [cep]
|
|
|| nAppearance == 6278 //:: Spider: Night* [cep]
|
|
|| nAppearance == 6279 //:: Spider: Spinner* [cep]
|
|
|| nAppearance == 6280 //:: Spider: Zebra* [cep]
|
|
|| nAppearance == 6281 //:: Spider: Ooze* [cep]
|
|
|| nAppearance == 6282 //:: Spider: Weirdo* [cep]
|
|
|| nAppearance == 6283 //:: Spider: Maze [cep]
|
|
|| nAppearance == 6295 //:: Spider: Bone [cep]
|
|
|| nAppearance == 6304 //:: Spider: Ravener [cep]
|
|
|| (CheckTargetName(oTarget, "spider") && (GetRacialType(oTarget) == RACIAL_TYPE_VERMIN)));
|
|
|
|
} |