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.
		
			
				
	
	
		
			97 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/** @file psi_pow_astseed
 | 
						|
 | 
						|
    Astral Seed
 | 
						|
 | 
						|
    Metacreativity
 | 
						|
    Level: Shaper 8
 | 
						|
    Manifesting Time: 10 minutes
 | 
						|
    Range: 0 ft.
 | 
						|
    Effect: One storage crystal
 | 
						|
    Duration: Instantaneous
 | 
						|
    Saving Throw: None
 | 
						|
    Power Resistance: No
 | 
						|
    Power Points: 15
 | 
						|
    Metapsionics: None
 | 
						|
 | 
						|
    This power weaves strands of ectoplasm into a crystal containing the seed of your living mind. You may have only one seed in
 | 
						|
    existence at any one time. Until such time as you perish, the astral seed is totally inert. Upon dying, you are transported
 | 
						|
    to the location of your astral seed, where you will spend a day regrowing a body. Respawning in this manner will cost a level.
 | 
						|
    If your astral seed is destroyed, the power will fail.
 | 
						|
 | 
						|
    @author Stratovarius
 | 
						|
    @date   Created: Apr 9, 2005
 | 
						|
    @date   Modified: Jul 3, 2006
 | 
						|
*/
 | 
						|
 | 
						|
#include "psi_inc_psifunc"
 | 
						|
#include "psi_inc_pwresist"
 | 
						|
#include "psi_spellhook"
 | 
						|
#include "prc_sp_func"
 | 
						|
 | 
						|
int DoPower(object oManifester, object oTarget, struct manifestation manif)
 | 
						|
{
 | 
						|
    // Destroy old seed, if any
 | 
						|
    object oSeed = GetLocalObject(oManifester, "PRC_AstralSeed_SeedObject");
 | 
						|
    if(GetIsObjectValid(oSeed))
 | 
						|
        MyDestroyObject(oSeed);
 | 
						|
 | 
						|
    // Retrieve Module string for Seed ResRef
 | 
						|
    string sResRef = GetLocalString(GetModule(), PRC_PSI_ASTRAL_SEED_RESREF);
 | 
						|
    // If no Module Seed ResRef value is set, use the default
 | 
						|
    if (sResRef == "")
 | 
						|
        sResRef = "x2_plc_phylact";
 | 
						|
 | 
						|
    // Create new seed
 | 
						|
    oSeed = CreateObject(OBJECT_TYPE_PLACEABLE, sResRef, PRCGetSpellTargetLocation());
 | 
						|
 | 
						|
    // If the provided ResRef fails to generate a valid item, retry with the default phylactery
 | 
						|
    if (!GetIsObjectValid(oSeed))
 | 
						|
        oSeed = CreateObject(OBJECT_TYPE_PLACEABLE, "x2_plc_phylact", PRCGetSpellTargetLocation());
 | 
						|
 | 
						|
    // Perform VFX
 | 
						|
    effect eVis = EffectVisualEffect(PSI_FNF_ASTRAL_SEED);
 | 
						|
    DelayCommand(0.5, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oSeed));
 | 
						|
    // Store a reference to the seed on the manifester
 | 
						|
    SetLocalObject(oManifester, "PRC_AstralSeed_SeedObject", oSeed);
 | 
						|
    // Add a hook to OnDeath event for the manifester
 | 
						|
    AddEventScript(oManifester, EVENT_ONPLAYERDEATH, "psi_astseed_resp", FALSE, FALSE);
 | 
						|
 | 
						|
    return TRUE;    //Held charge is used if at least 1 touch from twinned power hits
 | 
						|
}
 | 
						|
 | 
						|
void main()
 | 
						|
{
 | 
						|
    if(!PsiPrePowerCastCode()) return;
 | 
						|
    object oManifester = OBJECT_SELF;
 | 
						|
    object oTarget     = PRCGetSpellTargetObject();
 | 
						|
    struct manifestation manif;
 | 
						|
    int nEvent = GetLocalInt(oManifester, PRC_SPELL_EVENT); //use bitwise & to extract flags
 | 
						|
    if(!nEvent) //normal cast
 | 
						|
    {
 | 
						|
        manif =
 | 
						|
        EvaluateManifestation(oManifester, OBJECT_INVALID,
 | 
						|
                              PowerAugmentationProfile(),
 | 
						|
                              METAPSIONIC_NONE
 | 
						|
                              );
 | 
						|
 | 
						|
        if(manif.bCanManifest)
 | 
						|
        {
 | 
						|
            if(GetLocalInt(oManifester, PRC_SPELL_HOLD) && oManifester == oTarget)
 | 
						|
            {   //holding the charge, manifesting power on self
 | 
						|
                SetLocalSpellVariables(oManifester, 1);   //change 1 to number of charges
 | 
						|
                SetLocalManifestation(oManifester, PRC_POWER_HOLD_MANIFESTATION, manif);
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            DoPower(oManifester, oTarget, manif);
 | 
						|
        }
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        if(nEvent & PRC_SPELL_EVENT_ATTACK)
 | 
						|
        {
 | 
						|
            manif = GetLocalManifestation(oManifester, PRC_POWER_HOLD_MANIFESTATION);
 | 
						|
            if(DoPower(oManifester, oTarget, manif))
 | 
						|
                DecrementSpellCharges(oManifester);
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |