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.
118 lines
4.6 KiB
Plaintext
118 lines
4.6 KiB
Plaintext
/*:://////////////////////////////////////////////
|
||
//:: Spell Name Dimension Door
|
||
//:: Spell FileName PHS_S_DimenDoor
|
||
//:://////////////////////////////////////////////
|
||
//:: In Game Spell desctiption
|
||
//:://////////////////////////////////////////////
|
||
Conjuration (Teleportation)
|
||
Level: Brd 4, Sor/Wiz 4, Travel 4
|
||
Components: V
|
||
Casting Time: 1 standard action
|
||
Range: Long (40M)
|
||
Target: You and allied willing creatures
|
||
Duration: Instantaneous
|
||
Saving Throw: None and Will negates (object)
|
||
Spell Resistance: No and Yes (object)
|
||
|
||
You instantly transfer yourself from your current location to any other spot
|
||
within range. You always arrive at exactly the spot desired-whether by simply
|
||
visualizing the area or by stating direction. After using this spell, you
|
||
can’t take any other actions until your next turn. You may also bring one
|
||
additional willing Medium or smaller creature or its equivalent per three
|
||
caster levels. A Large creature counts as two Medium creatures, a Huge
|
||
creature counts as two Large creatures, and so forth. All creatures to be
|
||
transported must be within 5M of the caster, and doing nothing to be
|
||
considered people to teleport.
|
||
//:://////////////////////////////////////////////
|
||
//:: Spell Effects Applied / Notes
|
||
//:://////////////////////////////////////////////
|
||
Like teleport, but this is simpler - it is just a JumpToLocation to the
|
||
place.
|
||
|
||
Note: Teleport can be disabled if the creature is in a "No teleport" box,
|
||
or attempts to jump into one, or the area is a "no teleport" area.
|
||
|
||
Could do with a door visual like BG2
|
||
|
||
The caster is always moved. Then, each creature within 5M (nearest to futhest)
|
||
and making sure the size is right, gets moved too at the same time. Visuals
|
||
are applied for each one, and JumpToLocation is used.
|
||
|
||
They must not be in combat, however.
|
||
//:://////////////////////////////////////////////
|
||
//:: Created By: Jasperre
|
||
//::////////////////////////////////////////////*/
|
||
|
||
#include "PHS_INC_SPELLS"
|
||
|
||
void main()
|
||
{
|
||
// Spell Hook Check.
|
||
if(!PHS_SpellHookCheck(PHS_SPELL_DIMENSION_DOOR)) return;
|
||
|
||
// Declare major variables
|
||
object oCaster = OBJECT_SELF;
|
||
location lTarget = GetSpellTargetLocation();
|
||
location lCaster = GetLocation(oCaster);
|
||
int nCasterLevel = PHS_GetCasterLevel();
|
||
object oParty;
|
||
int nPartySize, nCnt, nTotalSizesGot;
|
||
|
||
// 1 medium other creature per 3 caster levels
|
||
int nTotalSizesLimit = PHS_LimitInteger(nCasterLevel/3);
|
||
|
||
// Duration is 1 round
|
||
float fDuration = RoundsToSeconds(1);
|
||
|
||
// Declare effects
|
||
effect eDissappear = EffectVisualEffect(PHS_VFX_IMP_DIMENSION_DOOR_DISS);
|
||
effect eAppear = EffectVisualEffect(PHS_VFX_IMP_DIMENSION_DOOR_APPR);
|
||
|
||
// Duration effect for stopping the caster do anything else
|
||
effect eDur = EffectCutsceneImmobilize();
|
||
|
||
// Make sure we can teleport
|
||
if(!PHS_CannotTeleport(oCaster, lTarget))
|
||
{
|
||
// Jump to the target location with visual effects
|
||
PHS_ApplyLocationVFX(lCaster, eDissappear);
|
||
PHS_ApplyLocationVFX(lTarget, eAppear);
|
||
|
||
// Jump
|
||
DelayCommand(1.0, JumpToLocation(lTarget));
|
||
|
||
// Get party members
|
||
nCnt = 1;
|
||
oParty = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oCaster, nCnt);
|
||
while(GetIsObjectValid(oParty) &&
|
||
GetDistanceToObject(oParty) < 5.0 &&
|
||
nTotalSizesGot < nTotalSizesLimit)
|
||
{
|
||
// - Faction equal check
|
||
// - Make sure the creature is not doing anything
|
||
// - Not got the dimension stopping effects
|
||
if(GetFactionEqual(oParty) &&
|
||
GetCurrentAction(oParty) == ACTION_INVALID &&
|
||
!PHS_GetDimensionalAnchor(oParty) &&
|
||
GetCommandable(oParty))
|
||
{
|
||
// Check size
|
||
nPartySize = PHS_GetSizeModifier(oParty);
|
||
|
||
// Makes sure we can currently teleport the creature
|
||
if(nPartySize + nTotalSizesGot < nTotalSizesLimit)
|
||
{
|
||
AssignCommand(oParty, JumpToLocation(lTarget));
|
||
// Add amount to what we jumped with us
|
||
nTotalSizesGot += nPartySize;
|
||
}
|
||
}
|
||
nCnt++;
|
||
oParty = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oCaster, nCnt);
|
||
}
|
||
// Caster cannot move for 1 round now.
|
||
DelayCommand(1.5, SendMessageToPC(oCaster, "You cannot perform any more actions for 1 round due to the casting of Dimension Door"));
|
||
DelayCommand(2.0, PHS_ApplyDuration(oCaster, eDur, fDuration));
|
||
}
|
||
}
|