2025/12/14 Update
Spellfire Channeler was missing Improved Healing at 2nd level. Added "Crafted Vial" CWI crafting baseitem type. Added Craft Scepter crafting feat. Added Magical Artisan: Craft Scepter. Adjusted Hemp Rope label in iprp_material.2da & iprp_matcost.2da Added Aroma of Death CWI crafting item and spell to support it. Added Beetle Elixir CWI crafting item and spells to support it. Added Harness of Armor CWI crafting item. Swarm Tactics was missing a heartbeat script. Added crafted descriptions for all CWI items in craft_wondrous.2da Updated fileends for updated crafting options. Scepters count as clubs for feats. Gated errant DEBUG in prc_inc_nat_hb. Added new switches for scepter crafitng. Updated PRC Options magic supplies store for new crafting bastitems.
This commit is contained in:
78
nwn/nwnprc/trunk/scripts/curdled_death_a.nss
Normal file
78
nwn/nwnprc/trunk/scripts/curdled_death_a.nss
Normal file
@@ -0,0 +1,78 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Aroma of Curdled Death: On Enter
|
||||
//:: FileName: curdled_death_a.nss
|
||||
//::///////////////////////////////////////////////
|
||||
/*
|
||||
Creates an invisible cloud that moves with the user.
|
||||
Effects based on Hit Dice:
|
||||
- 3 HD or less: dies immediately (no save)
|
||||
- 4-6 HD: Fort save DC 17 or dies
|
||||
- 7+ HD: 1d4 Con damage (Fort DC 17 half)
|
||||
*/
|
||||
//::///////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
DoDebug("Entering curdled_death_a / onEnter.");
|
||||
|
||||
// Declare major variables
|
||||
object oTarget = GetEnteringObject();
|
||||
object oCreator = GetAreaOfEffectCreator();
|
||||
int nHD = GetHitDice(oTarget);
|
||||
|
||||
// Skip if target is the creator (immune)
|
||||
if(oTarget == oCreator) return;
|
||||
|
||||
// Check if target is hostile
|
||||
if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCreator))
|
||||
{
|
||||
// Signal spell cast at target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_CLOUDKILL));
|
||||
|
||||
// Apply effects based on HD
|
||||
if(nHD <= 3)
|
||||
{
|
||||
// Instant death for 3 HD or less
|
||||
if(!GetIsImmune(oTarget, IMMUNITY_TYPE_DEATH))
|
||||
{
|
||||
DoDebug("curdled_death_a: found a target.");
|
||||
effect eDeath = EffectDeath();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget);
|
||||
}
|
||||
}
|
||||
else if(nHD >= 4 && nHD <= 6)
|
||||
{
|
||||
// Fort save or die for 4-6 HD
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, 17, SAVING_THROW_TYPE_DEATH, OBJECT_SELF))
|
||||
{
|
||||
DoDebug("curdled_death_a: found a target.");
|
||||
effect eDeath = EffectDeath();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 7+ HD: Constitution damage with save for half
|
||||
int nDam = d4();
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, 17, SAVING_THROW_TYPE_SPELL, OBJECT_SELF))
|
||||
{
|
||||
// Full damage
|
||||
DoDebug("curdled_death_a: found a target.");
|
||||
AssignCommand(oCreator, ApplyAbilityDamage(oTarget, ABILITY_CONSTITUTION, nDam, DURATION_TYPE_TEMPORARY, TRUE, -1.0f));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Half damage on successful save
|
||||
DoDebug("curdled_death_a: found a target.");
|
||||
AssignCommand(oCreator, ApplyAbilityDamage(oTarget, ABILITY_CONSTITUTION, nDam / 2, DURATION_TYPE_TEMPORARY, TRUE, -1.0f));
|
||||
}
|
||||
effect eNeg = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eNeg, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
82
nwn/nwnprc/trunk/scripts/curdled_death_c.nss
Normal file
82
nwn/nwnprc/trunk/scripts/curdled_death_c.nss
Normal file
@@ -0,0 +1,82 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Aroma of Curdled Death: Heartbeat
|
||||
//:: FileName: curdled_death_c.nss
|
||||
//::///////////////////////////////////////////////
|
||||
/*
|
||||
Applies recurring effects each round to creatures
|
||||
remaining in the cloud.
|
||||
*/
|
||||
//::///////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
DoDebug("Entering curdled_death_c / onHeartbeat.");
|
||||
|
||||
// Check if creator is still valid
|
||||
if(!GetIsObjectValid(GetAreaOfEffectCreator()))
|
||||
{
|
||||
DestroyObject(OBJECT_SELF);
|
||||
return;
|
||||
}
|
||||
|
||||
object oTarget;
|
||||
object oCreator = GetAreaOfEffectCreator();
|
||||
|
||||
// Cycle through all creatures in the AoE
|
||||
oTarget = GetFirstInPersistentObject(OBJECT_SELF, OBJECT_TYPE_CREATURE);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
// Skip the creator (immune)
|
||||
if(oTarget != oCreator &&
|
||||
spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCreator))
|
||||
{
|
||||
int nHD = GetHitDice(oTarget);
|
||||
|
||||
// Signal spell cast at target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_CLOUDKILL));
|
||||
|
||||
// Apply effects based on HD
|
||||
if(nHD <= 3)
|
||||
{
|
||||
// Already dead from OnEnter, but check anyway
|
||||
if(!GetIsImmune(oTarget, IMMUNITY_TYPE_DEATH))
|
||||
{
|
||||
effect eDeath = EffectDeath();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget);
|
||||
}
|
||||
}
|
||||
else if(nHD >= 4 && nHD <= 6)
|
||||
{
|
||||
// Fort save or die each round
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, 17, SAVING_THROW_TYPE_DEATH, OBJECT_SELF))
|
||||
{
|
||||
effect eDeath = EffectDeath();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 7+ HD: Constitution damage each round
|
||||
int nDam = d4();
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, 17, SAVING_THROW_TYPE_SPELL, OBJECT_SELF))
|
||||
{
|
||||
// Full damage
|
||||
AssignCommand(oCreator, ApplyAbilityDamage(oTarget, ABILITY_CONSTITUTION, nDam, DURATION_TYPE_TEMPORARY, TRUE, -1.0f));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Half damage on successful save
|
||||
AssignCommand(oCreator, ApplyAbilityDamage(oTarget, ABILITY_CONSTITUTION, nDam / 2, DURATION_TYPE_TEMPORARY, TRUE, -1.0f));
|
||||
}
|
||||
effect eNeg = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eNeg, oTarget);
|
||||
}
|
||||
}
|
||||
oTarget = GetNextInPersistentObject(OBJECT_SELF, OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
}
|
||||
101
nwn/nwnprc/trunk/scripts/cwi_aroma_death.nss
Normal file
101
nwn/nwnprc/trunk/scripts/cwi_aroma_death.nss
Normal file
@@ -0,0 +1,101 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Aroma of Curdled Death:
|
||||
//:: FileName: cwi_aroma_death.nss
|
||||
//::///////////////////////////////////////////////
|
||||
//::
|
||||
/*
|
||||
AROMA OF CURDLED DEATH
|
||||
Price (Item Level): 4,500 gp (9th)
|
||||
Body Slot: <20>
|
||||
Caster Level: 9th
|
||||
Aura: Moderate; (DC 19) conjuration
|
||||
Activation: Standard (manipulation)
|
||||
Weight: <20>
|
||||
|
||||
This elegant, stoppered glass bottle holds a dark,
|
||||
viscous fluid.
|
||||
|
||||
One round after you apply this elixir to
|
||||
your skin, it creates an invisible cloud of
|
||||
gas in a 10-foot radius that moves with you
|
||||
and persists for 1 minute. You are immune
|
||||
to the cloud<75>s effects, but every other
|
||||
creature in the area that has 3 Hit Dice or
|
||||
fewer immediately dies (no save). A creature that
|
||||
has 4<>6 Hit Dice must succeed on a DC 17 Fortitude
|
||||
save each round it remains in the area or die. A
|
||||
creature that has 7 Hit Dice or more takes 1d4
|
||||
points of Constitution damage (Fort DC 17 half)
|
||||
per round of exposure.
|
||||
|
||||
|
||||
Prerequisites: Craft Wondrous Item, cloudkill,
|
||||
Craft (alchemy) 4 ranks.
|
||||
|
||||
Cost to Create: 2,250 gp, 180 XP, 5 days
|
||||
|
||||
*/
|
||||
//::
|
||||
//::///////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
object oUser = GetItemActivator();
|
||||
object oItem = GetItemActivated();
|
||||
location lTarget = GetItemActivatedTargetLocation();
|
||||
object oTarget = GetItemActivatedTarget();
|
||||
|
||||
if (GetHasSpellEffect(SPELL_AROMA_OF_CURDLED_DEATH, OBJECT_SELF))
|
||||
PRCRemoveSpellEffects(SPELL_AROMA_OF_CURDLED_DEATH, OBJECT_SELF, OBJECT_SELF);
|
||||
|
||||
SendMessageToPC (oUser, "Applying elixir to skin...");
|
||||
|
||||
// Applied to skin - mobile 10ft cloud
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_AURA_GREEN_DARK);
|
||||
effect eAoE = EffectAreaOfEffect(185, "curdled_death_a", "curdled_death_c", "");
|
||||
eAoE = EffectLinkEffects(eDur, eAoE);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PULSE_NATURE), OBJECT_SELF);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAoE, OBJECT_SELF, 60.0f);
|
||||
|
||||
}
|
||||
|
||||
/* void main()
|
||||
{
|
||||
object oCaster = OBJECT_SELF;
|
||||
location lTarget = PRCGetSpellTargetLocation();
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
// Execute the elixir effect with proper spell context
|
||||
ExecuteScript("curdled_death_x", oTarget);
|
||||
} */
|
||||
/* void main()
|
||||
{
|
||||
object oUser = GetItemActivator();
|
||||
object oItem = GetItemActivated();
|
||||
location lTarget = GetItemActivatedTargetLocation();
|
||||
object oTarget = GetItemActivatedTarget();
|
||||
|
||||
// Check usage mode
|
||||
if(oTarget == oUser)
|
||||
{
|
||||
// Applied to skin - mobile 10ft cloud
|
||||
effect eAOE = EffectAreaOfEffect(185, "curdled_death_a", "curdled_death_c", "");
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAOE, oUser, RoundsToSeconds(60));
|
||||
|
||||
// Delayed activation (1 round)
|
||||
DelayCommand(6.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,
|
||||
EffectVisualEffect(VFX_IMP_PULSE_NATURE), oUser));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Opened/poured - stationary 5ft cloud
|
||||
effect eAOE = EffectAreaOfEffect(185, "curdled_death_a", "curdled_death_c", "");
|
||||
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eAOE, lTarget, RoundsToSeconds(60));
|
||||
|
||||
// Visual effect
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_GREASE), lTarget);
|
||||
}
|
||||
|
||||
} */
|
||||
62
nwn/nwnprc/trunk/scripts/cwi_elxr_beetle.nss
Normal file
62
nwn/nwnprc/trunk/scripts/cwi_elxr_beetle.nss
Normal file
@@ -0,0 +1,62 @@
|
||||
//////////////////////////////////////////////////
|
||||
// Beetle Elixir
|
||||
// cwi_elxr_beetle.nss
|
||||
//////////////////////////////////////////////////
|
||||
//::
|
||||
/*
|
||||
BEETLE ELIXIR
|
||||
Price (Item Level): 1,350 gp (5th)
|
||||
Body Slot: <20>
|
||||
Caster Level: 6th
|
||||
Aura: Moderate; (DC 18) transmutation
|
||||
Activation: Full-round (manipulation)
|
||||
Weight: <20>
|
||||
|
||||
The viscous liquid in this vial has an oily brown
|
||||
color and smells a little like wet leaves.
|
||||
|
||||
Drinking beetle elixir causes your skin to harden,
|
||||
darken, and gloss over, and short antennae to
|
||||
sprout from your forehead.
|
||||
|
||||
You gain darkvision out to 60 feet and a +2
|
||||
enhancement bonus to your existing natural armor.
|
||||
(A creature without natural armor has an effective
|
||||
natural armor bonus of +0.) These effects last for
|
||||
12 hours.
|
||||
|
||||
Prerequisites: Craft Wondrous Item, alter self,
|
||||
darkvision, Craft (alchemy) 5 ranks.
|
||||
|
||||
Cost to Create: 675 gp, 54 XP, 2 days
|
||||
*/
|
||||
//::
|
||||
//;;//////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
object oTarget = GetItemActivator();
|
||||
string sTargetName = GetName(oTarget);
|
||||
object oItem = GetItemActivated();
|
||||
string sItemName = GetName(oItem);
|
||||
|
||||
if (GetHasSpellEffect(SPELL_ELIXIR_OF_THE_BEETLE, OBJECT_SELF))
|
||||
PRCRemoveSpellEffects(SPELL_ELIXIR_OF_THE_BEETLE, OBJECT_SELF, OBJECT_SELF);
|
||||
|
||||
if(DEBUG) DoDebug("Using "+sItemName+" on "+sTargetName+".");
|
||||
|
||||
// Apply darkvision effect
|
||||
effect eDarkvision = EffectBonusFeat(FEAT_DARKVISION);
|
||||
effect eVis = EffectVisualEffect(VFX_DUR_AURA_PULSE_BLUE_BLACK);
|
||||
|
||||
// Apply natural armor bonus
|
||||
effect eArmor = EffectACIncrease(2, AC_NATURAL_BONUS);
|
||||
|
||||
// Link all effects
|
||||
effect eLink = EffectLinkEffects(eDarkvision, eArmor);
|
||||
eLink = EffectLinkEffects(eLink, eVis);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, OBJECT_SELF, HoursToSeconds(12));
|
||||
|
||||
}
|
||||
@@ -1664,6 +1664,13 @@ void main()
|
||||
// -------------------------------------------------
|
||||
bFailed = CICraftCheckCraftStaff(oItem,oPC,nSpell);
|
||||
break;
|
||||
|
||||
case BASE_ITEM_CRAFTED_SCEPTER :
|
||||
// -------------------------------------------------
|
||||
// Craft Scepter
|
||||
// -------------------------------------------------
|
||||
bFailed = CICraftCheckCraftScepter(oItem,oPC,nSpell);
|
||||
break;
|
||||
|
||||
default:
|
||||
if(GetLocalInt(oPC, "InscribeRune"))
|
||||
|
||||
@@ -16,6 +16,7 @@ int isSimple(object oItem)
|
||||
return 1;
|
||||
break;
|
||||
case BASE_ITEM_CLUB:
|
||||
case BASE_ITEM_CRAFTED_SCEPTER:
|
||||
case BASE_ITEM_DAGGER:
|
||||
case BASE_ITEM_LIGHTMACE:
|
||||
case BASE_ITEM_SICKLE:
|
||||
|
||||
@@ -177,7 +177,7 @@ void main()
|
||||
}
|
||||
}
|
||||
}
|
||||
if (GetBaseItemType(oWeap)==BASE_ITEM_CLUB)
|
||||
if (GetBaseItemType(oWeap)==BASE_ITEM_CLUB || GetBaseItemType(oWeap)==BASE_ITEM_CRAFTED_SCEPTER)
|
||||
{
|
||||
if (GetItemHasItemProperty(oWeap, ITEM_PROPERTY_KEEN) == TRUE)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user