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.
		
			
				
	
	
		
			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;
 | |
| }
 |