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.
142 lines
5.2 KiB
Plaintext
142 lines
5.2 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Actions include
|
|
//:: prc_inc_actions
|
|
//::///////////////////////////////////////////////
|
|
/** @file
|
|
Defines functions related to use of actions.
|
|
|
|
@author Ornedan
|
|
@date Created - 2006.01.26
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:://////////////////////////////////////////////
|
|
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Constants */
|
|
//////////////////////////////////////////////////
|
|
|
|
/// A marker local the presence of which indicates that a creature's
|
|
/// available swift action has been used for a particular round
|
|
const string PRC_SWIFT_ACTION_MARKER = "PRC_SwiftActionUsed";
|
|
|
|
/// A marker local the presence of which indicates that a creature's
|
|
/// available move action has been used for a particular round
|
|
const string PRC_MOVE_ACTION_MARKER = "PRC_MoveActionUsed";
|
|
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Function prototypes */
|
|
//////////////////////////////////////////////////
|
|
|
|
/**
|
|
* Determines whether the given creature can use a swift action at this moment
|
|
* and if it can, marks that action as used.
|
|
* Conditions are that it has not used a swift action already in the last
|
|
* 6 seconds, and that that GetCanTakeFreeAction() returns TRUE.
|
|
* In addition, if a PC, it must be commandable by the player. This is in order
|
|
* to prevent abuse of instant action feats.
|
|
*
|
|
* @param oCreature Creature whose eligibility to use a swift action to test.
|
|
* @return TRUE if the creature can take a swift action now, FALSE otherwise.
|
|
*/
|
|
int TakeSwiftAction(object oCreature);
|
|
|
|
/**
|
|
* Determines whether the given creature can use a free action at this moment.
|
|
* Condition is that it is not affected by a condition that would prevent
|
|
* action queue processing.
|
|
* If the bTestControllability is set to true, this will also test for
|
|
* conditions that would prevent control by the player.
|
|
*
|
|
* @param oCreature Creature whose eligibility to use a free action to test.
|
|
* @param bTestControllability Whether to test for controllability affecting conditions.
|
|
* @return TRUE if the creature can take a free action now, FALSE otherwise.
|
|
*/
|
|
int GetCanTakeFreeAction(object oCreature, int bTestControllability = FALSE);
|
|
|
|
/**
|
|
* Determines whether the given creature can use a move action at this moment
|
|
* and if it can, marks that action as used.
|
|
* Conditions are that it has not used a move action already in the last
|
|
* 6 seconds
|
|
* In addition, if a PC, it must be commandable by the player. This is in order
|
|
* to prevent abuse of instant action feats.
|
|
*
|
|
* @param oCreature Creature whose eligibility to use a move action to test.
|
|
* @return TRUE if the creature can take a move action now, FALSE otherwise.
|
|
*/
|
|
int TakeMoveAction(object oCreature);
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Function definitions */
|
|
//////////////////////////////////////////////////
|
|
|
|
int TakeSwiftAction(object oCreature)
|
|
{
|
|
if(!GetLocalInt(oCreature, PRC_SWIFT_ACTION_MARKER) &&
|
|
GetCanTakeFreeAction(oCreature, GetIsPC(oCreature)) &&
|
|
GetCommandable(oCreature)
|
|
)
|
|
{
|
|
// Mark swift action used up for this round
|
|
SetLocalInt(oCreature, PRC_SWIFT_ACTION_MARKER, TRUE);
|
|
DelayCommand(6.0f, DeleteLocalInt(oCreature, PRC_SWIFT_ACTION_MARKER));
|
|
|
|
// Can use swift action
|
|
return TRUE;
|
|
}
|
|
|
|
// Can't use swift action
|
|
FloatingTextStringOnCreature("You have already used your swift action this round.", oCreature, FALSE);
|
|
return FALSE;
|
|
}
|
|
|
|
int GetCanTakeFreeAction(object oCreature, int bTestControllability = FALSE)
|
|
{
|
|
effect eTest = GetFirstEffect(oCreature);
|
|
int nEType;
|
|
while(GetIsEffectValid(eTest))
|
|
{
|
|
nEType = GetEffectType(eTest);
|
|
if(nEType == EFFECT_TYPE_CUTSCENE_PARALYZE ||
|
|
nEType == EFFECT_TYPE_DAZED ||
|
|
nEType == EFFECT_TYPE_PARALYZE ||
|
|
nEType == EFFECT_TYPE_PETRIFY ||
|
|
nEType == EFFECT_TYPE_SLEEP ||
|
|
nEType == EFFECT_TYPE_STUNNED ||
|
|
(bTestControllability &&
|
|
(nEType == EFFECT_TYPE_CHARMED ||
|
|
nEType == EFFECT_TYPE_CONFUSED ||
|
|
nEType == EFFECT_TYPE_DOMINATED ||
|
|
nEType == EFFECT_TYPE_FRIGHTENED ||
|
|
nEType == EFFECT_TYPE_TURNED
|
|
)
|
|
)
|
|
)
|
|
return FALSE;
|
|
|
|
// Get next effect
|
|
eTest = GetNextEffect(oCreature);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
int TakeMoveAction(object oCreature)
|
|
{
|
|
if(!GetLocalInt(oCreature, PRC_MOVE_ACTION_MARKER) && GetCommandable(oCreature))
|
|
{
|
|
// Mark move action used up for this round
|
|
SetLocalInt(oCreature, PRC_MOVE_ACTION_MARKER, TRUE);
|
|
DelayCommand(6.0f, DeleteLocalInt(oCreature, PRC_MOVE_ACTION_MARKER));
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSlow(), oCreature, 4.0);
|
|
|
|
// Can use move action
|
|
return TRUE;
|
|
}
|
|
|
|
// Can't use move action
|
|
FloatingTextStringOnCreature("You have already used your move action this round.", oCreature, FALSE);
|
|
return FALSE;
|
|
} |