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.
127 lines
4.6 KiB
Plaintext
127 lines
4.6 KiB
Plaintext
/*
|
|
----------------
|
|
Retrieve
|
|
|
|
psi_pow_retrieve
|
|
----------------
|
|
|
|
27/3/05 by Stratovarius
|
|
*/ /** @file
|
|
|
|
Retrieve
|
|
|
|
Psychoportation (Teleportation)
|
|
Level: Psion/wilder 6
|
|
Manifesting Time: 1 standard action
|
|
Range: Medium (100 ft. + 10 ft./ level)
|
|
Target: One object you can hold or carry in one hand, weighing up to 10 lb./level
|
|
Duration: Instantaneous
|
|
Saving Throw: Will negates; see text
|
|
Power Resistance: No
|
|
Power Points: 11
|
|
Metapsionics: None
|
|
|
|
You automatically teleport an item you can see within range directly to your
|
|
hand. If the object is in the possession of an opponent, it comes to your
|
|
hand if your opponent fails a Will save. *
|
|
|
|
Augment: For every additional power point you spend, the weight limit of the
|
|
target increases by 10 pounds.
|
|
|
|
|
|
Implementation notes:
|
|
WARNING: The method used for moving the object involves creating a copy and
|
|
destroying the original. This may break some modules.
|
|
* The power will only take a weapon from the main hand if targeted at a
|
|
creature, and only if that creature is set to be disarmable.
|
|
*/
|
|
|
|
#include "psi_inc_psifunc"
|
|
#include "psi_inc_pwresist"
|
|
#include "psi_spellhook"
|
|
#include "prc_inc_spells"
|
|
#include "prc_inc_teleport"
|
|
|
|
void main()
|
|
{
|
|
/*
|
|
Spellcast Hook Code
|
|
Added 2004-11-02 by Stratovarius
|
|
If you want to make changes to all powers,
|
|
check psi_spellhook to find out more
|
|
|
|
*/
|
|
|
|
if (!PsiPrePowerCastCode())
|
|
{
|
|
// If code within the PrePowerCastHook (i.e. UMD) reports FALSE, do not run this spell
|
|
return;
|
|
}
|
|
|
|
// End of Spell Cast Hook
|
|
|
|
object oManifester = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
struct manifestation manif =
|
|
EvaluateManifestation(oManifester, oTarget,
|
|
PowerAugmentationProfile(PRC_NO_GENERIC_AUGMENTS,
|
|
1, PRC_UNLIMITED_AUGMENTATION
|
|
),
|
|
METAPSIONIC_NONE
|
|
);
|
|
|
|
if(manif.bCanManifest)
|
|
{
|
|
int nDC = GetManifesterDC(oManifester);
|
|
int nMaxWeight = 100 * (manif.nManifesterLevel + manif.nTimesAugOptUsed_1); // Weight is tenths of a pound
|
|
|
|
// Make sure the target can be teleported
|
|
if(GetCanTeleport(oTarget, GetLocation(oTarget), TRUE))
|
|
{
|
|
// If target is an item
|
|
if(GetObjectType(oTarget) == OBJECT_TYPE_ITEM)
|
|
{
|
|
// And light enough
|
|
if(GetWeight(oTarget) <= nMaxWeight)
|
|
{
|
|
// Copy it
|
|
CopyItem(oTarget, oManifester, FALSE);
|
|
MyDestroyObject(oTarget); // Make sure the item does get destroyed
|
|
}
|
|
else
|
|
FloatingTextStrRefOnCreature(16824062, oManifester, FALSE); // "This item is too heavy for you to pick up"
|
|
}// end if - Target is an item
|
|
else if(GetObjectType(oTarget) == OBJECT_TYPE_CREATURE)
|
|
{
|
|
// Check disarmability
|
|
if(GetIsCreatureDisarmable(oTarget) && !GetPRCSwitch(PRC_PNP_DISARM))
|
|
{
|
|
// Let the AI know
|
|
PRCSignalSpellEvent(oTarget, TRUE, manif.nSpellID, oManifester);
|
|
|
|
// Save - Will negates
|
|
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_NONE))
|
|
{
|
|
// Target the creature's mainhand weapon
|
|
oTarget = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
|
|
|
|
// Check that there was anything in the slot
|
|
if(GetIsObjectValid(oTarget))
|
|
{
|
|
// Make sure it's light enough
|
|
if(GetWeight(oTarget) <= nMaxWeight)
|
|
{
|
|
// Copy it and destroy the original
|
|
CopyItem(oTarget, oManifester, FALSE);
|
|
MyDestroyObject(oTarget); // Make sure the item does get destroyed
|
|
}
|
|
else
|
|
FloatingTextStrRefOnCreature(16824062, oManifester, FALSE); // "This item is too heavy for you to pick up"
|
|
}// end if - There is a weapon to yoink
|
|
}// end if - Save
|
|
}// end if - Target is disarmable
|
|
}// end else - Target is a creature
|
|
}// end if - Teleportability check
|
|
}// end if - Successfull manifestation
|
|
}
|