Clear out experimental .35 files
Clear out experimental .35 files
This commit is contained in:
@@ -1,153 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Complete Warrior Samurai Frightful Presence
|
||||
//:: prc_cwsm_fright
|
||||
//::///////////////////////////////////////////////
|
||||
/** @file prc_cwsm_fright
|
||||
A 20th-level Samurais bravery, honor, and
|
||||
fighting prowess have become legendary. When
|
||||
the samurai draws his blade, opponents within
|
||||
30 feet must succeed on a Will save(DC 20 + Cha
|
||||
Modifier) or become panicked for 4d6 rounds (if
|
||||
they have 4 or fewer Hit Dice) or shaken for 4d6
|
||||
rounds (if they have more than 4 Hit Dice, but
|
||||
fewer than the Samurai). Creatures with more Hit
|
||||
Dice then the Samurai are not affected.
|
||||
Any foe that successfully resists the effect
|
||||
cannot be affected again by the same samurai's
|
||||
frightful presence for 24 hours.
|
||||
|
||||
SRD on panicked:
|
||||
A panicked creature must drop anything it holds and
|
||||
flee at top speed from the source of its fear, as
|
||||
well as any other dangers it encounters, along a
|
||||
random path. It can<61>t take any other actions.
|
||||
In addition, the creature takes a <20>2 penalty on all
|
||||
saving throws, skill checks, and ability checks. If
|
||||
cornered, a panicked creature cowers and does not
|
||||
attack, typically using the total defense action in
|
||||
combat. A panicked creature can use special abilities,
|
||||
including spells, to flee; indeed, the creature must
|
||||
use such means if they are the only way to escape.
|
||||
|
||||
SRD on shaken:
|
||||
A shaken character takes a <20>2 penalty on attack rolls,
|
||||
saving throws, skill checks, and ability checks.
|
||||
|
||||
@author Ornedan
|
||||
@date Created - 2006.07.05
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
object oPC = GetItemLastEquippedBy();
|
||||
object oItem = GetItemLastEquipped();
|
||||
|
||||
// Check if the character should still have this eventhook
|
||||
if(!GetHasFeat(FEAT_CWSM_FRIGHTFUL_PRESENCE, oPC))
|
||||
{
|
||||
// Missing the feat, unhook and abort
|
||||
RemoveEventScript(oPC, EVENT_ONPLAYEREQUIPITEM, "prc_cwsm_fright", TRUE, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
// To save CPU use, don't run this for both weapons in a double-equip. Implemented as a 2 second lock between uses.
|
||||
// This doesn't make any difference to the effectiveness of the ability, since anyone that wasn't already affected
|
||||
// by the first draw will be immune for 24h anyway
|
||||
if(GetLocalInt(oPC, "PRC_CWSM_Fright_Lock"))
|
||||
return;
|
||||
|
||||
// Determine if a blade was drawn. In this case, blade = katana || short sword
|
||||
if(GetBaseItemType(oItem) == BASE_ITEM_KATANA || GetBaseItemType(oItem) == BASE_ITEM_SHORTSWORD)
|
||||
{
|
||||
// Set the lock variable and queue unlock
|
||||
SetLocalInt(oPC, "PRC_CWSM_Fright_Lock", TRUE);
|
||||
DelayCommand(6.0f, DeleteLocalInt(oPC, "PRC_CWSM_Fright_Lock"));
|
||||
|
||||
effect eShaken = ExtraordinaryEffect(EffectShaken());
|
||||
// Construct Panicked effect
|
||||
effect ePanicked = EffectLinkEffects(eShaken, EffectFrightened());
|
||||
ePanicked = EffectLinkEffects(ePanicked, EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR));
|
||||
// Make the effects extraordinary
|
||||
ePanicked = ExtraordinaryEffect(ePanicked);
|
||||
|
||||
// Radius = 30ft
|
||||
float fRadius = FeetToMeters(30.0f);
|
||||
float fDuration;
|
||||
|
||||
// DC = 20 + Samurai's Cha mod
|
||||
int nDC = 20 + GetAbilityModifier(ABILITY_CHARISMA, oPC);
|
||||
int nPCHitDice = GetHitDice(oPC);
|
||||
int nTargetHitDice;
|
||||
int bDoVFX = FALSE;
|
||||
|
||||
// The samurai's object ID for enforcing the 24h rule
|
||||
string sPCOid = ObjectToString(oPC);
|
||||
|
||||
// Loop over creatures in range
|
||||
location lTarget = GetLocation(oPC);
|
||||
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarget, TRUE);
|
||||
while (GetIsObjectValid(oTarget))
|
||||
{
|
||||
// Target validity check
|
||||
if(oTarget != oPC && // Can't affect self
|
||||
!GetLocalInt(oTarget, "PRC_CWSM_Fright_SavedVs" + sPCOid) && // Hasn't saved successfully against this samurai's Frightful Presence in the last 24h
|
||||
spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, oPC) && // Only hostiles
|
||||
nPCHitDice > (nTargetHitDice = GetHitDice(oTarget)) // Target must have less HD than the samurai
|
||||
)
|
||||
{
|
||||
// Set the marker that tells we tried to affect someone
|
||||
bDoVFX = TRUE;
|
||||
|
||||
// Let the target know something hostile happened
|
||||
SignalEvent(oTarget, EventSpellCastAt(oPC, -1, TRUE));
|
||||
|
||||
// Will save
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR, oPC) &&
|
||||
!GetIsImmune(oTarget, IMMUNITY_TYPE_FEAR, oPC) // Explicit immunity check, because of the fucking stupid BW immunity handling
|
||||
)
|
||||
{
|
||||
// Roll duration
|
||||
fDuration = RoundsToSeconds(d6(4));
|
||||
|
||||
// HD 4 or less - panicked
|
||||
if(nTargetHitDice <= 4)
|
||||
{
|
||||
// Assign commands to drop items in left & right hands
|
||||
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget)))
|
||||
AssignCommand(oTarget, ActionPutDownItem(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget)));
|
||||
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget)))
|
||||
AssignCommand(oTarget, ActionPutDownItem(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget)));
|
||||
|
||||
// Apply the effect
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePanicked, oTarget, fDuration);
|
||||
}
|
||||
// More then 4 HD, less than the samurai - shaken
|
||||
else
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eShaken, oTarget, fDuration);
|
||||
}
|
||||
// Successfull save, set marker and queue marker deletion
|
||||
else
|
||||
{
|
||||
SetLocalInt(oTarget, "PRC_CWSM_Fright_SavedVs" + sPCOid, TRUE);
|
||||
|
||||
// Add variable deletion to the target's queue. That way, if the samurai logs out, it will still get cleared
|
||||
AssignCommand(oTarget, DelayCommand(HoursToSeconds(24), DeleteLocalInt(oTarget, "PRC_CWSM_Fright_SavedVs" + sPCOid)));
|
||||
}
|
||||
}// end if - Target validity check
|
||||
|
||||
// Get next target in area
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, fRadius, lTarget, TRUE);
|
||||
}// end while - Loop over creatures in 30ft area
|
||||
|
||||
// If we tried to affect someone, do war cry VFX
|
||||
if(bDoVFX)
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT,
|
||||
EffectVisualEffect(GetGender(oPC) == GENDER_FEMALE ? VFX_FNF_HOWL_WAR_CRY_FEMALE : VFX_FNF_HOWL_WAR_CRY),
|
||||
oPC
|
||||
);
|
||||
}// end if - Equipped a "blade"
|
||||
}
|
Reference in New Issue
Block a user