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.
150 lines
6.2 KiB
Plaintext
150 lines
6.2 KiB
Plaintext
/*:://////////////////////////////////////////////
|
||
//:: Spell Name Command
|
||
//:: Spell FileName PHS_S_Command
|
||
//:://////////////////////////////////////////////
|
||
//:: In Game Spell desctiption
|
||
//:://////////////////////////////////////////////
|
||
Mind affecting, close range, 1 living creature target, 1 round duration,
|
||
will negates, SR applies.
|
||
|
||
You give the subject a single command, which it obeys to the best of its
|
||
ability at its earliest opportunity. You may select from the following options.
|
||
|
||
- Approach: On its turn, the subject moves toward you as quickly and directly
|
||
as possible for 1 round. The creature may do nothing but move during its
|
||
turn, and it provokes attacks of opportunity for this movement as normal.
|
||
|
||
- Drop: On its turn, the subject drops whatever it is holding. It can’t pick
|
||
up any dropped item until its next turn.
|
||
|
||
- Fall: On its turn, the subject falls to the ground and remains prone for 1
|
||
round. It may act normally while prone but takes any appropriate penalties.
|
||
|
||
- Flee: On its turn, the subject moves away from you as quickly as possible
|
||
for 1 round. It may do nothing but move during its turn, and it provokes
|
||
attacks of opportunity for this movement as normal.
|
||
|
||
- Halt: The subject stands in place for 1 round. It may not take any actions
|
||
but is not considered helpless.
|
||
|
||
If the subject can’t carry out your command on its next turn, the spell
|
||
automatically fails.
|
||
//:://////////////////////////////////////////////
|
||
//:: Spell Effects Applied / Notes
|
||
//:://////////////////////////////////////////////
|
||
Can set what the effect will be before the spell is cast, or use a sub-dial
|
||
menu for the spell (does it work right with SR and Globes though?)
|
||
//:://////////////////////////////////////////////
|
||
//:: Created By: Jasperre
|
||
//::////////////////////////////////////////////*/
|
||
|
||
#include "PHS_INC_SPELLS"
|
||
|
||
void main()
|
||
{
|
||
// Spell hook check.
|
||
if(!PHS_SpellHookCheck(PHS_SPELL_COMMAND)) return;
|
||
|
||
// Declare major variables
|
||
object oCaster = OBJECT_SELF;
|
||
object oTarget = GetSpellTargetObject();
|
||
int nCasterLevel = PHS_GetCasterLevel();
|
||
int nSpellSaveDC = PHS_GetSpellSaveDC();
|
||
|
||
// Duration is 1 round (6 seconds)
|
||
float fDuration = RoundsToSeconds(1);
|
||
|
||
// Declare effects
|
||
effect eVis = EffectVisualEffect(VFX_IMP_DOOM);
|
||
effect eKnockdown = EffectKnockdown();;
|
||
|
||
// Get what one we will do
|
||
int nCommandType = GetLocalInt(oCaster, "PHS_SPELL_COMMAND");
|
||
|
||
// Types (keep as integers):
|
||
// 0 - Approach
|
||
// 1 - Drop
|
||
// 2 - Fall
|
||
// 3 - Flee
|
||
// 4 - Halt
|
||
|
||
// Check PvP settings
|
||
if(!GetIsReactionTypeFriendly(oTarget))
|
||
{
|
||
// Check if they can be commanded
|
||
if(GetCommandable(oTarget))
|
||
{
|
||
// Signal event
|
||
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_COMMAND);
|
||
|
||
// Check against mind spells
|
||
if(!PHS_ImmunityCheck(oTarget, IMMUNITY_TYPE_MIND_SPELLS))
|
||
{
|
||
// Check spell resistance
|
||
if(!PHS_SpellResistanceCheck(oCaster, oTarget))
|
||
{
|
||
// Will Saving throw versus fear negates
|
||
if(!PHS_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_FEAR))
|
||
{
|
||
// Do the different things
|
||
switch(nCommandType)
|
||
{
|
||
case 0: // Approach
|
||
{
|
||
DelayCommand(fDuration, SetCommandable(TRUE, oTarget));
|
||
AssignCommand(oTarget, ClearAllActions());
|
||
AssignCommand(oTarget, ActionMoveToObject(oCaster, TRUE));
|
||
SetCommandable(FALSE, oTarget);
|
||
}
|
||
break;
|
||
case 1: // Drop
|
||
{
|
||
// Check if the items are droppable - if not, they don't drop!
|
||
object oItem1 = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget);
|
||
object oItem2 = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
|
||
if(GetDroppableFlag(oItem1) || GetDroppableFlag(oItem2))
|
||
{
|
||
// Drop it
|
||
AssignCommand(oTarget, ClearAllActions());
|
||
if(GetDroppableFlag(oItem1))
|
||
{
|
||
AssignCommand(oTarget, ActionPutDownItem(oItem1));
|
||
}
|
||
if(GetDroppableFlag(oItem1))
|
||
{
|
||
AssignCommand(oTarget, ActionPutDownItem(oItem2));
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 2: // Fall
|
||
{
|
||
// Knockdown
|
||
PHS_ApplyDuration(oTarget, eKnockdown, fDuration);
|
||
}
|
||
break;
|
||
case 3: // Flee
|
||
{
|
||
// Run away from us
|
||
DelayCommand(fDuration, SetCommandable(TRUE, oTarget));
|
||
AssignCommand(oTarget, ClearAllActions());
|
||
AssignCommand(oTarget, ActionMoveAwayFromObject(oCaster, TRUE));
|
||
SetCommandable(FALSE, oTarget);
|
||
}
|
||
break;
|
||
case 4: // Halt
|
||
{
|
||
// Just stop
|
||
DelayCommand(fDuration, SetCommandable(TRUE, oTarget));
|
||
AssignCommand(oTarget, ClearAllActions());
|
||
SetCommandable(FALSE, oTarget);
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|