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.
85 lines
2.8 KiB
Plaintext
85 lines
2.8 KiB
Plaintext
/*
|
|
----------------
|
|
Fool's Strike
|
|
|
|
tob_stsn_folstrk
|
|
----------------
|
|
|
|
05/12/07 by Stratovarius
|
|
*/ /** @file
|
|
|
|
Fool's Strike
|
|
|
|
Setting Sun (Counter)
|
|
Level: Swordsage 8
|
|
Prerequisite: Three Setting Sun maneuvers
|
|
Initiation Action: 1 swift action
|
|
Range: Melee attack
|
|
Target: One creature
|
|
|
|
A creature strikes, but you turn the blow straight back at it.
|
|
|
|
Make an opposed attack roll against the targeted creature. If you succeed, he damages himself rather than you.
|
|
*/
|
|
|
|
#include "tob_inc_move"
|
|
#include "tob_movehook"
|
|
//#include "prc_alterations"
|
|
|
|
void main()
|
|
{
|
|
if (!PreManeuverCastCode())
|
|
{
|
|
// If code within the PreManeuverCastCode (i.e. UMD) reports FALSE, do not run this spell
|
|
return;
|
|
}
|
|
|
|
// End of Spell Cast Hook
|
|
|
|
object oInitiator = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
struct maneuver move = EvaluateManeuver(oInitiator, oTarget);
|
|
|
|
if(move.bCanManeuver)
|
|
{
|
|
effect eNone;
|
|
object oInitWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
|
|
object oTargetWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
|
|
int nBase = GetBaseAttackBonus(oTarget);
|
|
SetBaseAttackBonus(nBase - 1, oTarget);
|
|
if (DEBUG) DoDebug("tob_stsn_folstrk: GetBaseAttackBonus returns " + IntToString(nBase));
|
|
|
|
//Make sure they *have* a weapon
|
|
if(!GetIsObjectValid(oTargetWeap)) // Not a weapon
|
|
{
|
|
oTargetWeap = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oTarget);
|
|
if (!GetIsObjectValid(oTargetWeap))
|
|
{
|
|
oTargetWeap = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oTarget);
|
|
if (!GetIsObjectValid(oTargetWeap))
|
|
{
|
|
oTargetWeap = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oTarget); // If we're down here and they don't have a weapon, damn
|
|
}
|
|
}
|
|
}
|
|
|
|
int nInit = GetAttackBonus(oTarget, oInitiator, oInitWeap) + d20();
|
|
int nTarget = GetAttackBonus(oInitiator, oTarget, oTargetWeap) + d20();
|
|
|
|
if (nInit >= nTarget)
|
|
{
|
|
// Deal damage to himself
|
|
DelayCommand(0.0, PerformAttack(oTarget, oTarget, eNone, 0.0, 0, 0, 0, "", "", TRUE)); // Uses touch attack to make it more likely he hits
|
|
FloatingTextStringOnCreature("Fool's Strike Success", oInitiator, FALSE);
|
|
}
|
|
else
|
|
{
|
|
// Foes attacks as normal
|
|
DelayCommand(0.0, PerformAttack(oInitiator, oTarget, eNone, 0.0, 0, 0, 0, "Hit", "Miss"));
|
|
FloatingTextStringOnCreature("Fool's Strike Fail", oInitiator, FALSE);
|
|
}
|
|
|
|
DelayCommand(6.0, RestoreBaseAttackBonus(oTarget));
|
|
}
|
|
AssignCommand(oInitiator, ActionAttack(oTarget)); // Make sure they keep attacking after this.
|
|
} |