2025/07/08 Afternoon update

Added WotC source for the werewolf class to Notes folder.
Eldritch Blast should be unlimited uses per day.
Avariel & Feyri should get wings after CharGen.
Added Avariel & Feyri to PRCIsFlying().
Maybe fixed Whirling Blade.
Updated Superb Dispelling TLK.
This commit is contained in:
Jaysyn904
2025-07-08 12:34:31 -04:00
parent ba20411a61
commit 358b36350a
7 changed files with 66 additions and 12 deletions

View File

@@ -45,27 +45,68 @@ Created: 7/6/07
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
/* void PerformAttack(object oDefender, object oAttacker,
effect eSpecialEffect, float eDuration = 0.0, int iAttackBonusMod = 0,
int iDamageModifier = 0, int iDamageType = 0,
string sMessageSuccess = "", string sMessageFailure = "",
int iTouchAttackType = FALSE,
object oRightHandOverride = OBJECT_INVALID, object oLeftHandOverride = OBJECT_INVALID,
int nHandednessOverride = 0, int bCombatModeFlags = 0); // motu99: changed default of nHandednessOverride to FALSE (was -1) */
#include "prc_inc_combat"
int GetIsSlashingWeapon(object oItem)
{
int iWeapType = StringToInt(Get2DACache("baseitems", "WeaponType", GetBaseItemType(oItem)));
if (iWeapType == 3 || iWeapType == 4) // slashing or slashing & piercing
return TRUE;
else
return FALSE;
}
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
vector vOrigin = GetPosition(oPC);
location lTarget = PRCGetSpellTargetLocation();
object oPC = OBJECT_SELF;
object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
int bSlashing = GetIsSlashingWeapon(oWeapon);
if(!bSlashing)
{
SendMessageToPC(oPC, "This spell requires a slashing weapon in the spellcaster's right hand.");
return;
}
int nClass = GetLastSpellCastClass();
int nStatMod = GetDCAbilityModForClass(nClass, oPC);
int nStatBonus = GetAbilityModifier(nStatMod);
vector vOrigin = GetPosition(oPC);
location lTarget = PRCGetSpellTargetLocation();
float fLength = FeetToMeters(60.0);
effect eNone;
object oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, FeetToMeters(60.0f), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, vOrigin);
SetLocalInt(oPC, "WhirlingBlade", TRUE);
object oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, fLength, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, vOrigin);
while(GetIsObjectValid(oTarget))
{
if(!GetIsReactionTypeFriendly(oTarget, oPC))
if (oTarget != oPC && GetIsReactionTypeHostile(oTarget, oPC))
{
PerformAttack(oTarget, oPC, eNone);
DelayCommand(0.0, PerformAttack(oTarget, oPC, eNone, 0.0, nStatBonus, 0, 0, "Whirling Blade: Hit!", "Whirling Blade: Miss!"));
}
oTarget = MyNextObjectInShape(SHAPE_SPELLCYLINDER, FeetToMeters(60.0f), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, vOrigin);
oTarget = MyNextObjectInShape(SHAPE_SPELLCYLINDER, fLength, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, vOrigin);
}
DelayCommand(1.0f, DeleteLocalInt(oPC, "WhirlingBlade"));
PRCSetSchool();
}