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.
84 lines
3.0 KiB
Plaintext
84 lines
3.0 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Psionic include: Psicraft Skill
|
|
//:: psi_inc_psicraft
|
|
//::///////////////////////////////////////////////
|
|
/** @file
|
|
Defines various functions and other stuff that
|
|
do something related to the Psicraft skill
|
|
|
|
Functions below are called by the manifester as
|
|
he makes a power.
|
|
|
|
@author Stratovarius
|
|
@date Created - 2008.9.17
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:://////////////////////////////////////////////
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Constants */
|
|
//////////////////////////////////////////////////
|
|
|
|
// Constants are provided via psi_inc_core
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Function prototypes */
|
|
//////////////////////////////////////////////////
|
|
|
|
/**
|
|
* Returns the power that the manifester just used
|
|
* @param oManifester The power manifester
|
|
* @param nPowerId Power to check
|
|
*
|
|
* @return nothing, uses SendMessageToPC to give results
|
|
*/
|
|
void IdentifyPower(object oManifester, int nPowerId);
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Includes */
|
|
//////////////////////////////////////////////////
|
|
|
|
// Always access via psi_inc_psifunc.
|
|
|
|
//#include "psi_inc_core"
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Internal functions */
|
|
//////////////////////////////////////////////////
|
|
|
|
void _DoPsicraftCheck(object oManifester, object oCheck, int nPowerLevel, int nPowerId)
|
|
{
|
|
// NPCs wouldn't benefit from being told the name of the maneuver
|
|
if (!GetIsPC(oCheck)) return;
|
|
|
|
// Roll the check
|
|
if(GetIsSkillSuccessful(oCheck, SKILL_PSICRAFT, 10 + nPowerLevel))
|
|
{ // get the name of the manifester and power
|
|
FloatingTextStringOnCreature(GetName(oManifester) + " manifests " + GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nPowerId))), oCheck, FALSE);
|
|
}
|
|
else // Skill check failed
|
|
{
|
|
FloatingTextStringOnCreature(GetName(oManifester) + " manifests unknown power", oCheck, FALSE);
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Function definitions */
|
|
//////////////////////////////////////////////////
|
|
|
|
void IdentifyPower(object oManifester, int nPowerId)
|
|
{
|
|
int nPowerLevel = GetPowerLevel(oManifester);
|
|
|
|
// The area to check for martial lore users
|
|
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, GetLocation(oManifester), TRUE, OBJECT_TYPE_CREATURE);
|
|
//Cycle through the targets within the spell shape until an invalid object is captured.
|
|
while (GetIsObjectValid(oTarget) && oTarget != oManifester)
|
|
{
|
|
// If the target has points in the skill
|
|
if (GetSkillRank(SKILL_PSICRAFT, oTarget) > 0) _DoPsicraftCheck(oManifester, oTarget, nPowerLevel, nPowerId);
|
|
|
|
//Select the next target within the area.
|
|
oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, GetLocation(oManifester), TRUE, OBJECT_TYPE_CREATURE);
|
|
}
|
|
} |