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.
105 lines
4.6 KiB
Plaintext
105 lines
4.6 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Channel Dragon Claws feat for Diamond Dragon
|
|
//:: psi_diadra_claw.nss
|
|
//::///////////////////////////////////////////////
|
|
/*
|
|
Handles the Channel Dragon Claws for the Diamond Dragon prestige class.
|
|
Since it acts like a power, it uses the psionics system and constants.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Fox
|
|
//:: Created On: Nov 15, 2007
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "psi_inc_psifunc"
|
|
#include "prc_inc_natweap"
|
|
|
|
|
|
void main()
|
|
{
|
|
|
|
object oManifester = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
struct manifestation manif =
|
|
EvaluateDiaDragChannel(oManifester, OBJECT_INVALID,
|
|
PowerAugmentationProfile(2,
|
|
2, 5 //Augmentation only up to +5
|
|
),
|
|
1 //Acts as a Level 1 Power for PP cost
|
|
);
|
|
|
|
if(manif.bCanManifest)
|
|
{
|
|
// Set up some data
|
|
int nClawSize = PRCGetCreatureSize(oTarget);
|
|
int nBaseDamage;
|
|
int nEnhancement = manif.nTimesAugOptUsed_1;
|
|
effect eVis = EffectVisualEffect(VFX_IMP_PULSE_FIRE);
|
|
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
|
object oLClaw, oRClaw;
|
|
float fDuration = 60.0f * manif.nManifesterLevel;
|
|
|
|
// Determine base damage
|
|
switch(nClawSize)
|
|
{
|
|
case 1: nBaseDamage = IP_CONST_MONSTERDAMAGE_1d3; break;
|
|
case 2: nBaseDamage = IP_CONST_MONSTERDAMAGE_1d4; break;
|
|
case 3: nBaseDamage = IP_CONST_MONSTERDAMAGE_1d6; break;
|
|
case 4: nBaseDamage = IP_CONST_MONSTERDAMAGE_1d8; break;
|
|
case 5: nBaseDamage = IP_CONST_MONSTERDAMAGE_2d6; break;
|
|
case 6: nBaseDamage = IP_CONST_MONSTERDAMAGE_3d6; break;
|
|
case 7: nBaseDamage = IP_CONST_MONSTERDAMAGE_4d6; break;
|
|
|
|
/*default:{
|
|
string sErr = "psi_pow_clwbeast: ERROR: Unknown nClawSize value: " + IntToString(nClawSize);
|
|
if(DEBUG) DoDebug(sErr);
|
|
else WriteTimestampedLogEntry(sErr);
|
|
}*/
|
|
}
|
|
// Catch exceptions here
|
|
if (nClawSize < 0) nBaseDamage = IP_CONST_MONSTERDAMAGE_1d3;
|
|
else if (nClawSize > 7) nBaseDamage = IP_CONST_MONSTERDAMAGE_4d6;
|
|
|
|
// Create the creature weapon
|
|
oLClaw = GetPsionicCreatureWeapon(oTarget, "PRC_UNARMED_SP", INVENTORY_SLOT_CWEAPON_L, fDuration);
|
|
oRClaw = GetPsionicCreatureWeapon(oTarget, "PRC_UNARMED_SP", INVENTORY_SLOT_CWEAPON_R, fDuration);
|
|
|
|
// Add the base damage
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyMonsterDamage(nBaseDamage), oLClaw, fDuration);
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyMonsterDamage(nBaseDamage), oRClaw, fDuration);
|
|
|
|
//Add the enhancement
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyEnhancementBonus(nEnhancement), oLClaw, fDuration);
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyEnhancementBonus(nEnhancement), oRClaw, fDuration);
|
|
|
|
// Do VFX
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
|
DelayCommand(1.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
|
DelayCommand(2.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
|
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, oTarget, fDuration, FALSE);
|
|
|
|
//add the claws to the Natural Attack system
|
|
string sResRef;
|
|
switch(nEnhancement)
|
|
{
|
|
case 0: sResRef = "prc_diaclaw_0_"; break;
|
|
case 1: sResRef = "prc_diaclaw_1_"; break;
|
|
case 2: sResRef = "prc_diaclaw_2_"; break;
|
|
case 3: sResRef = "prc_diaclaw_3_"; break;
|
|
case 4: sResRef = "prc_diaclaw_4_"; break;
|
|
case 5: sResRef = "prc_diaclaw_5_"; break;
|
|
}
|
|
sResRef += GetAffixForSize(PRCGetCreatureSize(oTarget));
|
|
|
|
AddNaturalPrimaryWeapon(oTarget, sResRef, 2, TRUE);
|
|
//activate Clawswipe in Psi Spellhook
|
|
SetLocalInt(oManifester, "DiamondClawsOn", TRUE);
|
|
//Set up claws to expire at end of power
|
|
DelayCommand(6.0f,
|
|
NaturalPrimaryWeaponTempCheck(oManifester, oTarget, manif.nSpellID, FloatToInt(fDuration) / 6, sResRef));
|
|
//set clawswipe to turn off when power expires
|
|
DelayCommand(fDuration, DeleteLocalInt(oManifester, "DiamondClawsOn"));
|
|
|
|
|
|
}// end if - Successfull manifestation
|
|
} |