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