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.
108 lines
3.6 KiB
Plaintext
108 lines
3.6 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Spell Name Refuge - On Activated
|
|
//:: Spell FileName PHS_S_RefugeA
|
|
//:://////////////////////////////////////////////
|
|
//:: Spell Effects Applied / Notes
|
|
//:://////////////////////////////////////////////
|
|
Can be cast on any item.
|
|
|
|
Once the item has the spell, it has the caster's name set on it. Only PCs
|
|
can cast this spell.
|
|
|
|
Once used, the item power set (permamently) on the thing that is, it will
|
|
transport the PC to the caster, or, Vice Versa.
|
|
|
|
Cannot be dispelled, for easyness sakes, and needs a material component.
|
|
|
|
It was also "to the casters Abode", but heck, that'd be so much more complicated
|
|
and unfun.
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jasperre
|
|
//::////////////////////////////////////////////*/
|
|
|
|
#include "PHS_INC_SPELLS"
|
|
|
|
// Get the PC of sName - noting sName must be GetPCPlayerName(oCaster) + GetName(oCaster)
|
|
object GetPCOfName(string sName);
|
|
|
|
void main()
|
|
{
|
|
//Declare major variables
|
|
object oPerson = OBJECT_SELF;
|
|
object oItem = GetSpellCastItem();
|
|
// Get the caster of the spell
|
|
object oCaster = GetPCOfName(GetLocalString(oItem, "PHS_REFUGE_CASTER_NAME"));
|
|
// Get the boolean value
|
|
// If TRUE, the caster is teleported to the target, so
|
|
// it defaults to FALSE, which means the person using it (the target) is
|
|
// teleported to the caster.
|
|
// * It is kinda a "Move the caster to the target?" question for the name reference.
|
|
int bMoveCaster = GetLocalInt(oItem, "PHS_SPELL_REFUGE_MOVE_CASTER");
|
|
|
|
// Make sure they are a valid caster - else wasted spell
|
|
if(!GetIsObjectValid(oCaster) || oCaster == oPerson)
|
|
{
|
|
// Failed
|
|
FloatingTextStringOnCreature("*Refuge attempt failed, no caster of Refuge found*", oPerson, FALSE);
|
|
// Make sure always to destroy the item
|
|
PHS_CompletelyDestroyObject(oItem);
|
|
return;
|
|
}
|
|
|
|
// Check faction alignment
|
|
if(!GetFactionEqual(oCaster, oPerson))
|
|
{
|
|
// Failed
|
|
FloatingTextStringOnCreature("*Refuge attempt failed, caster of Refuge not in party*", oPerson, FALSE);
|
|
// Make sure always to destroy the item
|
|
PHS_CompletelyDestroyObject(oItem);
|
|
return;
|
|
}
|
|
|
|
// Get locations
|
|
location lPerson = GetLocation(oPerson);
|
|
location lCaster = GetLocation(oCaster);
|
|
|
|
// Must be on the same plane - no going from maze or to prismatic plane :-)
|
|
if(PHS_CheckIfSamePlane(lPerson, lCaster))
|
|
{
|
|
// Failed
|
|
FloatingTextStringOnCreature("*Refuge attempt failed, caster of Refuge not on the same plane*", oPerson, FALSE);
|
|
// Make sure always to destroy the item
|
|
PHS_CompletelyDestroyObject(oItem);
|
|
return;
|
|
}
|
|
|
|
// If not, we work the magic
|
|
if(bMoveCaster == TRUE)
|
|
{
|
|
// oCaster to oPerson
|
|
AssignCommand(oCaster, PHS_ForceMovementToLocation(PHS_GetRandomLocation(lPerson, 6), VFX_FNF_TELEPORT_OUT, VFX_FNF_TELEPORT_IN));
|
|
}
|
|
else
|
|
{
|
|
// oPerson to oCaster
|
|
AssignCommand(oPerson, PHS_ForceMovementToLocation(PHS_GetRandomLocation(lCaster, 6), VFX_FNF_TELEPORT_OUT, VFX_FNF_TELEPORT_IN));
|
|
}
|
|
|
|
// Make sure always to destroy the item
|
|
PHS_CompletelyDestroyObject(oItem);
|
|
}
|
|
|
|
// Get the PC of sName - nothing sName must be GetPCPlayerName(oCaster) + GetName(oCaster)
|
|
object GetPCOfName(string sName)
|
|
{
|
|
object oPC = GetFirstPC();
|
|
while(GetIsObjectValid(oPC))
|
|
{
|
|
// Check name
|
|
if(GetPCPlayerName(oPC) + GetName(oPC) == sName)
|
|
{
|
|
return oPC;
|
|
}
|
|
// Get next PC
|
|
oPC = GetNextPC();
|
|
}
|
|
return OBJECT_INVALID;
|
|
}
|