Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

4858 lines
194 KiB
Plaintext

*** nw_c2_default3.nss Mon Aug 04 20:20:41 2008 ***not a prc script***
--- nw_c2_default3.nss Mon Aug 04 20:18:13 2008
***************
*** 1,27 ****
//::///////////////////////////////////////////////
//:: Default: End of Combat Round
//:: NW_C2_DEFAULT3
! //:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Calls the end of combat script every round
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Oct 16, 2001
//:://////////////////////////////////////////////
#include "NW_I0_GENERIC"
void main()
{
if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL))
{
DetermineSpecialBehavior();
}
else if(!GetSpawnInCondition(NW_FLAG_SET_WARNINGS))
{
DetermineCombatRound();
}
if(GetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(1003));
--- 1,51 ----
//::///////////////////////////////////////////////
//:: Default: End of Combat Round
//:: NW_C2_DEFAULT3
! //:: Copyright (c) 2008 Bioware Corp.
//:://////////////////////////////////////////////
/*
Calls the end of combat script every round
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Oct 16, 2001
//:://////////////////////////////////////////////
+ //:://////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified On: Feb 16th, 2008
+ //:: Added Support for Mounted Combat Feat Support
+ //:://////////////////////////////////////////////
#include "NW_I0_GENERIC"
+
void main()
{
+
+ if (!GetLocalInt(GetModule(),"X3_NO_MOUNTED_COMBAT_FEAT"))
+ { // set variables on target for mounted combat
+ DeleteLocalInt(OBJECT_SELF,"bX3_LAST_ATTACK_PHYSICAL");
+ DeleteLocalInt(OBJECT_SELF,"nX3_HP_BEFORE");
+ DeleteLocalInt(OBJECT_SELF,"bX3_ALREADY_MOUNTED_COMBAT");
+ if (GetHasFeat(FEAT_MOUNTED_COMBAT,OBJECT_SELF))
+ { // check for AC increase
+ int nRoll=d20()+GetSkillRank(SKILL_RIDE);
+ nRoll=nRoll-10;
+ if (nRoll>4)
+ { // ac increase
+ nRoll=nRoll/5;
+ ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectACIncrease(nRoll),OBJECT_SELF,8.5);
+ } // ac increase
+ } // check for AC increase
+ } // set variables on target for mounted combat
+
if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL))
{
DetermineSpecialBehavior();
}
else if(!GetSpawnInCondition(NW_FLAG_SET_WARNINGS))
{
DetermineCombatRound();
}
if(GetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(1003));
*** nw_c2_default5.nss Mon Aug 04 20:20:41 2008 ***not a prc script***
--- nw_c2_default5.nss Mon Aug 04 20:18:14 2008
***************
*** 3,29 ****
--- 3,40 ----
//:: NW_C2_DEFAULT5
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
If already fighting then ignore, else determine
combat round
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Oct 16, 2001
//:://////////////////////////////////////////////
+ //:://////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified On: Jan 4th, 2008
+ //:: Added Support for Mounted Combat Feat Support
+ //:://////////////////////////////////////////////
#include "nw_i0_generic"
void main()
{
+ if (!GetLocalInt(GetModule(),"X3_NO_MOUNTED_COMBAT_FEAT"))
+ { // set variables on target for mounted combat
+ SetLocalInt(OBJECT_SELF,"bX3_LAST_ATTACK_PHYSICAL",TRUE);
+ SetLocalInt(OBJECT_SELF,"nX3_HP_BEFORE",GetCurrentHitPoints(OBJECT_SELF));
+ } // set variables on target for mounted combat
+
if(GetFleeToExit()) {
// Run away!
ActivateFleeToExit();
} else if (GetSpawnInCondition(NW_FLAG_SET_WARNINGS)) {
// We give an attacker one warning before we attack
// This is not fully implemented yet
SetSpawnInCondition(NW_FLAG_SET_WARNINGS, FALSE);
//Put a check in to see if this attacker was the last attacker
//Possibly change the GetNPCWarning function to make the check
} else {
***************
*** 47,58 ****
//Shout that I was attacked
SpeakString("NW_I_WAS_ATTACKED", TALKVOLUME_SILENT_TALK);
}
}
if(GetSpawnInCondition(NW_FLAG_ATTACK_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_ATTACKED));
}
! }
--- 58,69 ----
//Shout that I was attacked
SpeakString("NW_I_WAS_ATTACKED", TALKVOLUME_SILENT_TALK);
}
}
if(GetSpawnInCondition(NW_FLAG_ATTACK_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_ATTACKED));
}
! }
*** nw_c2_default6.nss Mon Aug 04 20:20:41 2008 ***not a prc script***
--- nw_c2_default6.nss Mon Aug 04 20:18:14 2008
***************
*** 2,34 ****
//:: NW_C2_DEFAULT6
//:: Default OnDamaged handler
/*
If already fighting then ignore, else determine
combat round
*/
//:://////////////////////////////////////////////////
//:: Copyright (c) 2002 Floodgate Entertainment
//:: Created By: Naomi Novik
//:: Created On: 12/22/2002
//:://////////////////////////////////////////////////
#include "nw_i0_generic"
void main()
{
if(GetFleeToExit()) {
// We're supposed to run away, do nothing
} else if (GetSpawnInCondition(NW_FLAG_SET_WARNINGS)) {
// don't do anything?
} else {
- object oDamager = GetLastDamager();
if (!GetIsObjectValid(oDamager)) {
// don't do anything, we don't have a valid damager
} else if (!GetIsFighting(OBJECT_SELF)) {
// If we're not fighting, determine combat round
if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) {
DetermineSpecialBehavior(oDamager);
} else {
if(!GetObjectSeen(oDamager)
&& GetArea(OBJECT_SELF) == GetArea(oDamager)) {
// We don't see our attacker, go find them
ActionMoveToLocation(GetLocation(oDamager), TRUE);
--- 2,66 ----
//:: NW_C2_DEFAULT6
//:: Default OnDamaged handler
/*
If already fighting then ignore, else determine
combat round
*/
//:://////////////////////////////////////////////////
//:: Copyright (c) 2002 Floodgate Entertainment
//:: Created By: Naomi Novik
//:: Created On: 12/22/2002
//:://////////////////////////////////////////////////
+ //:://////////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified On: Jan 17th, 2008
+ //:: Added Support for Mounted Combat Feat Support
+ //:://////////////////////////////////////////////////
#include "nw_i0_generic"
+ #include "x3_inc_horse"
void main()
{
+ object oDamager = GetLastDamager();
+ object oMe=OBJECT_SELF;
+ int nHPBefore;
+ if (!GetLocalInt(GetModule(),"X3_NO_MOUNTED_COMBAT_FEAT"))
+ if (GetHasFeat(FEAT_MOUNTED_COMBAT)&&HorseGetIsMounted(OBJECT_SELF))
+ { // see if can negate some damage
+ if (GetLocalInt(OBJECT_SELF,"bX3_LAST_ATTACK_PHYSICAL"))
+ { // last attack was physical
+ nHPBefore=GetLocalInt(OBJECT_SELF,"nX3_HP_BEFORE");
+ if (!GetLocalInt(OBJECT_SELF,"bX3_ALREADY_MOUNTED_COMBAT"))
+ { // haven't already had a chance to use this for the round
+ SetLocalInt(OBJECT_SELF,"bX3_ALREADY_MOUNTED_COMBAT",TRUE);
+ int nAttackRoll=GetBaseAttackBonus(oDamager)+d20();
+ int nRideCheck=GetSkillRank(SKILL_RIDE,OBJECT_SELF)+d20();
+ if (nRideCheck>=nAttackRoll&&!GetIsDead(OBJECT_SELF))
+ { // averted attack
+ if (GetIsPC(oDamager)) SendMessageToPC(oDamager,GetName(OBJECT_SELF)+GetStringByStrRef(111991));
+ //if (GetIsPC(OBJECT_SELF)) SendMessageToPCByStrRef(OBJECT_SELF,111992");
+ if (GetCurrentHitPoints(OBJECT_SELF)<nHPBefore)
+ { // heal
+ effect eHeal=EffectHeal(nHPBefore-GetCurrentHitPoints(OBJECT_SELF));
+ AssignCommand(GetModule(),ApplyEffectToObject(DURATION_TYPE_INSTANT,eHeal,oMe));
+ } // heal
+ } // averted attack
+ } // haven't already had a chance to use this for the round
+ } // last attack was physical
+ } // see if can negate some damage
if(GetFleeToExit()) {
// We're supposed to run away, do nothing
} else if (GetSpawnInCondition(NW_FLAG_SET_WARNINGS)) {
// don't do anything?
} else {
if (!GetIsObjectValid(oDamager)) {
// don't do anything, we don't have a valid damager
} else if (!GetIsFighting(OBJECT_SELF)) {
// If we're not fighting, determine combat round
if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) {
DetermineSpecialBehavior(oDamager);
} else {
if(!GetObjectSeen(oDamager)
&& GetArea(OBJECT_SELF) == GetArea(oDamager)) {
// We don't see our attacker, go find them
ActionMoveToLocation(GetLocation(oDamager), TRUE);
***************
*** 64,75 ****
// Switch targets
DetermineCombatRound(oDamager);
}
}
}
// Send the user-defined event signal
if(GetSpawnInCondition(NW_FLAG_DAMAGED_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_DAMAGED));
}
! }
--- 96,107 ----
// Switch targets
DetermineCombatRound(oDamager);
}
}
}
// Send the user-defined event signal
if(GetSpawnInCondition(NW_FLAG_DAMAGED_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_DAMAGED));
}
! }
*** nw_c2_default7.nss Mon Aug 04 20:20:41 2008 ***prc script modified***
--- nw_c2_default7.nss Mon Aug 04 20:18:14 2008
***************
*** 3,33 ****
--- 3,42 ----
/*
Default OnDeath event handler for NPCs.
Adjusts killer's alignment if appropriate and
alerts allies to our death.
*/
//:://////////////////////////////////////////////////
//:: Copyright (c) 2002 Floodgate Entertainment
//:: Created By: Naomi Novik
//:: Created On: 12/22/2002
//:://////////////////////////////////////////////////
+ //:://////////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified On: April 1st, 2008
+ //:: Added Support for Dying Wile Mounted
+ //:://///////////////////////////////////////////////
#include "x2_inc_compon"
#include "x0_i0_spawncond"
+ #include "x3_inc_horse"
void main()
{
int nClass = GetLevelByClass(CLASS_TYPE_COMMONER);
int nAlign = GetAlignmentGoodEvil(OBJECT_SELF);
object oKiller = GetLastKiller();
+
+ if (GetLocalInt(GetModule(),"X3_ENABLE_MOUNT_DB")&&GetIsObjectValid(GetMaster(OBJECT_SELF))) SetLocalInt(GetMaster(OBJECT_SELF),"bX3_STORE_MOUNT_INFO",TRUE);
+
// If we're a good/neutral commoner,
// adjust the killer's alignment evil
if(nClass > 0 && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL))
{
AdjustAlignment(oKiller, ALIGNMENT_EVIL, 5);
}
// Call to allies to let them know we're dead
SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK);
*** nw_c2_defaultb.nss Mon Aug 04 20:22:29 2008 ***not a prc script***
--- nw_c2_defaultb.nss Mon Aug 04 20:18:14 2008
***************
*** 10,42 ****
--- 10,53 ----
GZ 2003-Oct-02 : - New AoE Behavior AI. Will use
Dispel Magic against AOES
- Flying Creatures will ignore
Grease
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Dec 6, 2001
//:: Last Modified On: 2003-Oct-13
//:://////////////////////////////////////////////
+ //:://////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified On: Jan 4th, 2008
+ //:: Added Support for Mounted Combat Feat Support
+ //:://////////////////////////////////////////////
#include "nw_i0_generic"
#include "x2_i0_spells"
+
void main()
{
object oCaster = GetLastSpellCaster();
if(GetLastSpellHarmful())
{
SetCommandable(TRUE);
+
+ if (!GetLocalInt(GetModule(),"X3_NO_MOUNTED_COMBAT_FEAT"))
+ { // set variables on target for mounted combat
+ DeleteLocalInt(OBJECT_SELF,"bX3_LAST_ATTACK_PHYSICAL");
+ } // set variables on target for mounted combat
// ------------------------------------------------------------------
// If I was hurt by someone in my own faction
// Then clear any hostile feelings I have against them
// After all, we're all just trying to do our job here
// if we singe some eyebrow hair, oh well.
// ------------------------------------------------------------------
if (GetFactionEqual(oCaster, OBJECT_SELF) == TRUE)
{
ClearPersonalReputation(oCaster, OBJECT_SELF);
ClearAllActions(TRUE);
*** nw_c2_herbivore.nss Mon Aug 04 20:30:46 2008 ***not a prc script***
--- nw_c2_herbivore.nss Mon Aug 04 20:18:14 2008
***************
*** 1,29 ****
--- 1,38 ----
//::///////////////////////////////////////////////
//:: Default: On Spawn In
//:: NW_C2_HERBIVORE
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Determines the course of action to be taken
after having just been spawned in for Herbivores
+
+ 2007-12-31: Deva Winblood
+ Modified to look for X3_HORSE_OWNER_TAG and if
+ it is defined look for an NPC with that tag
+ nearby or in the module (checks near first).
+ It will make that NPC this horse's master.
+
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Dec 21, 2001
//:://////////////////////////////////////////////
#include "NW_I0_GENERIC"
#include "NW_O2_CONINCLUDE"
void main()
{
+ string sTag;
+ object oNPC;
// OPTIONAL BEHAVIORS (Comment In or Out to Activate ) ****************************************************************************
//SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION);
//SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION);
// This causes the creature to say a special greeting in their conversation file
// upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired
// greeting in order to designate it. As the creature is actually saying this to
// himself, don't attach any player responses to the greeting.
//SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET);
// This will set the listening pattern on the NPC to attack when allies call
//SetSpawnInCondition(NW_FLAG_STEALTH);
// If the NPC has stealth and they are a rogue go into stealth mode
***************
*** 63,82 ****
On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined
events user 1000 - 1010
*/
//SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001
//SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002
//SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005
//SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006
//SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008
//SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003
//SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004
//SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007
!
// DEFAULT GENERIC BEHAVIOR (DO NOT TOUCH) *****************************************************************************************
SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to.
WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0)
// 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them
// 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after
// combat.
GenerateNPCTreasure(); //* Use this to create a small amount of treasure on the creature
}
--- 72,111 ----
On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined
events user 1000 - 1010
*/
//SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001
//SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002
//SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005
//SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006
//SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008
//SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003
//SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004
//SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007
! sTag=GetLocalString(OBJECT_SELF,"X3_HORSE_OWNER_TAG");
! if (GetStringLength(sTag)>0)
! { // look for master
! oNPC=GetNearestObjectByTag(sTag);
! if (GetIsObjectValid(oNPC)&&GetObjectType(oNPC)==OBJECT_TYPE_CREATURE)
! { // master found
! AddHenchman(oNPC);
! } // master found
! else
! { // look in module
! oNPC=GetObjectByTag(sTag);
! if (GetIsObjectValid(oNPC)&&GetObjectType(oNPC)==OBJECT_TYPE_CREATURE)
! { // master found
! AddHenchman(oNPC);
! } // master found
! else
! { // master does not exist - remove X3_HORSE_OWNER_TAG
! DeleteLocalString(OBJECT_SELF,"X3_HORSE_OWNER_TAG");
! } // master does not exist - remove X3_HORSE_OWNER_TAG
! } // look in module
! } // look for master
// DEFAULT GENERIC BEHAVIOR (DO NOT TOUCH) *****************************************************************************************
SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to.
WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0)
// 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them
// 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after
// combat.
GenerateNPCTreasure(); //* Use this to create a small amount of treasure on the creature
}
*** nw_ch_ac3.nss Mon Aug 04 20:20:41 2008 ***not a prc script***
--- nw_ch_ac3.nss Mon Aug 04 20:18:14 2008
***************
*** 2,27 ****
--- 2,39 ----
//:: Associate: End of Combat End
//:: NW_CH_AC3
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Calls the end of combat script every round
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Oct 16, 2001
//:://////////////////////////////////////////////
+ //:://////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified On: Jan 4th, 2008
+ //:: Added Support for Mounted Combat Feat Support
+ //:://////////////////////////////////////////////
#include "X0_INC_HENAI"
#include "X2_inc_spellhook"
+
void main()
{
+ if (!GetLocalInt(GetModule(),"X3_NO_MOUNTED_COMBAT_FEAT"))
+ { // set variables on target for mounted combat
+ DeleteLocalInt(OBJECT_SELF,"bX3_LAST_ATTACK_PHYSICAL");
+ DeleteLocalInt(OBJECT_SELF,"nX3_HP_BEFORE");
+ DeleteLocalInt(OBJECT_SELF,"bX3_ALREADY_MOUNTED_COMBAT");
+ } // set variables on target for mounted combat
if(!GetSpawnInCondition(NW_FLAG_SET_WARNINGS))
{
HenchmenCombatRound(OBJECT_INVALID);
}
if(GetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(1003));
}
*** nw_ch_ac5.nss Mon Aug 04 20:20:41 2008 ***not a prc script***
--- nw_ch_ac5.nss Mon Aug 04 20:18:14 2008
***************
*** 3,29 ****
--- 3,40 ----
//:: NW_CH_AC5
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
If already fighting then ignore, else determine
combat round
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Oct 16, 2001
//:://////////////////////////////////////////////
+ //:://////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified On: Jan 4th, 2008
+ //:: Added Support for Mounted Combat Feat Support
+ //:://////////////////////////////////////////////
#include "X0_INC_HENAI"
void main()
{
+ if (!GetLocalInt(GetModule(),"X3_NO_MOUNTED_COMBAT_FEAT"))
+ { // set variables on target for mounted combat
+ SetLocalInt(OBJECT_SELF,"bX3_LAST_ATTACK_PHYSICAL",TRUE);
+ SetLocalInt(OBJECT_SELF,"nX3_HP_BEFORE",GetCurrentHitPoints(OBJECT_SELF));
+ } // set variables on target for mounted combat
+
SpeakString("NW_I_WAS_ATTACKED", TALKVOLUME_SILENT_TALK);
if(!GetAssociateState(NW_ASC_IS_BUSY))
{
SetCommandable(TRUE);
if(!GetAssociateState(NW_ASC_MODE_STAND_GROUND))
{
if(!GetIsObjectValid(GetAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget()))
{
if(GetIsObjectValid(GetLastAttacker()))
{
if(GetAssociateState(NW_ASC_MODE_DEFEND_MASTER))
*** nw_ch_ac6.nss Mon Aug 04 20:20:41 2008 ***not a prc script***
--- nw_ch_ac6.nss Mon Aug 04 20:18:14 2008
***************
*** 3,34 ****
--- 3,67 ----
//:: NW_CH_AC6
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
If already fighting then ignore, else determine
combat round
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Nov 19, 2001
//:://////////////////////////////////////////////
+ //:://////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified On: Jan 17th, 2008
+ //:: Added Support for Mounted Combat Feat Support
+ //:://////////////////////////////////////////////
#include "X0_INC_HENAI"
+ #include "x3_inc_horse"
// Determine whether to switch to new attacker
int SwitchTargets(object oCurTarget, object oNewEnemy);
void main()
{
object oAttacker = GetLastDamager();
object oTarget = GetAttackTarget();
+ object oDamager = oAttacker;
+ object oMe=OBJECT_SELF;
+ int nHPBefore;
+ if (!GetLocalInt(GetModule(),"X3_NO_MOUNTED_COMBAT_FEAT"))
+ if (GetHasFeat(FEAT_MOUNTED_COMBAT)&&HorseGetIsMounted(OBJECT_SELF))
+ { // see if can negate some damage
+ if (GetLocalInt(OBJECT_SELF,"bX3_LAST_ATTACK_PHYSICAL"))
+ { // last attack was physical
+ nHPBefore=GetLocalInt(OBJECT_SELF,"nX3_HP_BEFORE");
+ if (!GetLocalInt(OBJECT_SELF,"bX3_ALREADY_MOUNTED_COMBAT"))
+ { // haven't already had a chance to use this for the round
+ SetLocalInt(OBJECT_SELF,"bX3_ALREADY_MOUNTED_COMBAT",TRUE);
+ int nAttackRoll=GetBaseAttackBonus(oDamager)+d20();
+ int nRideCheck=GetSkillRank(SKILL_RIDE,OBJECT_SELF)+d20();
+ if (nRideCheck>=nAttackRoll&&!GetIsDead(OBJECT_SELF))
+ { // averted attack
+ if (GetIsPC(oDamager)) SendMessageToPC(oDamager,GetName(OBJECT_SELF)+GetStringByStrRef(111991));
+ //if (GetIsPC(OBJECT_SELF)) SendMessageToPCByStrRef(OBJECT_SELF,111992);
+ if (GetCurrentHitPoints(OBJECT_SELF)<nHPBefore)
+ { // heal
+ effect eHeal=EffectHeal(nHPBefore-GetCurrentHitPoints(OBJECT_SELF));
+ AssignCommand(GetModule(),ApplyEffectToObject(DURATION_TYPE_INSTANT,eHeal,oMe));
+ } // heal
+ } // averted attack
+ } // haven't already had a chance to use this for the round
+ } // last attack was physical
+ } // see if can negate some damage
// UNINTERRUPTIBLE ACTIONS
if(GetAssociateState(NW_ASC_IS_BUSY)
|| GetAssociateState(NW_ASC_MODE_STAND_GROUND)
|| GetCurrentAction() == ACTION_FOLLOW) {
// We're busy, don't do anything
}
// DEFEND MASTER
// Priority is to protect our master
else if(GetAssociateState(NW_ASC_MODE_DEFEND_MASTER)) {
*** nw_ch_ac7.nss Mon Aug 04 20:20:41 2008 ***not a prc script***
--- nw_ch_ac7.nss Mon Aug 04 20:18:14 2008
***************
*** 1,34 ****
//::///////////////////////////////////////////////
//:: Henchman Death Script
//::
//:: NW_CH_AC7.nss
//::
! //:: Copyright (c) 2001-2003 Bioware Corp.
//:://////////////////////////////////////////////
//:: Official Campaign Henchmen Respawn
//:://////////////////////////////////////////////
//::
//:: Modified by: Brent, April 3 2002
//:: Removed delay in respawning
//:: the henchman - caused bugs
//:
//:: Georg, Oct 8 2003
//:: Rewrote teleport to temple routine
//:: because it was broken by
//:: some delicate timing issues in XP2
//:://////////////////////////////////////////////
#include "nw_i0_generic"
#include "nw_i0_plot"
!
// -----------------------------------------------------------------------------
// Georg, 2003-10-08
// Rewrote that jump part to get rid of the DelayCommand Code that was prone to
// timing problems. If want to see a really back hack, this function is just that.
// -----------------------------------------------------------------------------
void WrapJump(string sTarget)
{
if (GetIsDead(OBJECT_SELF))
{
// * Resurrect and heal again, just in case
--- 1,39 ----
//::///////////////////////////////////////////////
//:: Henchman Death Script
//::
//:: NW_CH_AC7.nss
//::
! //:: Copyright (c) 2001-2008 Bioware Corp.
//:://////////////////////////////////////////////
//:: Official Campaign Henchmen Respawn
//:://////////////////////////////////////////////
//::
//:: Modified by: Brent, April 3 2002
//:: Removed delay in respawning
//:: the henchman - caused bugs
//:
//:: Georg, Oct 8 2003
//:: Rewrote teleport to temple routine
//:: because it was broken by
//:: some delicate timing issues in XP2
//:://////////////////////////////////////////////
+ //:://////////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified On: April 9th, 2008
+ //:: Added Support for Dying Wile Mounted
+ //:://///////////////////////////////////////////////
#include "nw_i0_generic"
#include "nw_i0_plot"
! #include "x3_inc_horse"
// -----------------------------------------------------------------------------
// Georg, 2003-10-08
// Rewrote that jump part to get rid of the DelayCommand Code that was prone to
// timing problems. If want to see a really back hack, this function is just that.
// -----------------------------------------------------------------------------
void WrapJump(string sTarget)
{
if (GetIsDead(OBJECT_SELF))
{
// * Resurrect and heal again, just in case
***************
*** 51,81 ****
--- 56,94 ----
// * Jump to Target
JumpToObject(GetObjectByTag(sTarget), FALSE);
// * Unset busy state
ActionDoCommand(SetAssociateState(NW_ASC_IS_BUSY, FALSE));
// * Make self vulnerable
SetPlotFlag(OBJECT_SELF, FALSE);
// * Set destroyable flag to leave corpse
DelayCommand(6.0f, SetIsDestroyable(TRUE, TRUE, TRUE));
+
+ // * if mounted make sure dismounted
+ if (HorseGetIsMounted(OBJECT_SELF))
+ { // dismount
+ DelayCommand(3.0,AssignCommand(OBJECT_SELF,HorseDismountWrapper()));
+ } // dismount
+
}
// -----------------------------------------------------------------------------
// Georg, 2003-10-08
// Changed to run the bad recursive function above.
// -----------------------------------------------------------------------------
void BringBack()
{
object oSelf = OBJECT_SELF;
+
SetLocalObject(oSelf,"NW_L_FORMERMASTER", GetMaster());
RemoveEffects(oSelf);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectResurrection(), OBJECT_SELF);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectHeal(GetMaxHitPoints(OBJECT_SELF)), OBJECT_SELF);
object oWay = GetObjectByTag("NW_DEATH_TEMPLE");
if (GetIsObjectValid(oWay) == TRUE)
{
// * if in Source stone area, respawn at opening to area
if (GetTag(GetArea(oSelf)) == "M4Q1D2")
***************
*** 85,108 ****
--- 98,127 ----
else
{
DelayCommand(1.0, WrapJump(GetTag(oWay)));
}
}
else
{
WriteTimestampedLogEntry("UT: No place to go");
}
}
+
+
void main()
{
+ SetLocalString(OBJECT_SELF,"sX3_DEATH_SCRIPT","nw_ch_ac7");
+ if (HorseHandleDeath()) return;
+ DeleteLocalString(OBJECT_SELF,"sX3_DEATH_SCRIPT");
+
// * This is used by the advanced henchmen
// * Let Brent know if it interferes with animal
// * companions et cetera
if (GetIsObjectValid(GetMaster()) == TRUE)
{
object oMe = OBJECT_SELF;
if (GetAssociateType(oMe) == ASSOCIATE_TYPE_HENCHMAN
// * this is to prevent 'double hits' from stopping
// * the henchmen from moving to the temple of tyr
// * I.e., henchmen dies 'twice', once after leaving your party
|| GetLocalInt(oMe, "NW_L_HEN_I_DIED") == TRUE)
*** nw_ch_ac9.nss Mon Aug 04 20:20:41 2008 ***not a prc script***
--- nw_ch_ac9.nss Mon Aug 04 20:18:14 2008
***************
*** 1,25 ****
--- 1,36 ----
//::///////////////////////////////////////////////
//:: Associate: On Spawn In
//:: NW_CH_AC9
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
+ /*
+
+ 2007-12-31: Deva Winblood
+ Modified to look for X3_HORSE_OWNER_TAG and if
+ it is defined look for an NPC with that tag
+ nearby or in the module (checks near first).
+ It will make that NPC this horse's master.
+
+ */
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Nov 19, 2001
//:://////////////////////////////////////////////
#include "X0_INC_HENAI"
void main()
{
+ string sTag;
+ object oNPC;
SetAssociateListenPatterns();//Sets up the special henchmen listening patterns
bkSetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to.
SetAssociateState(NW_ASC_POWER_CASTING);
SetAssociateState(NW_ASC_HEAL_AT_50);
SetAssociateState(NW_ASC_RETRY_OPEN_LOCKS);
SetAssociateState(NW_ASC_DISARM_TRAPS);
SetAssociateState(NW_ASC_MODE_DEFEND_MASTER, FALSE);
SetAssociateState(NW_ASC_USE_RANGED_WEAPON, FALSE); //User ranged weapons by default if true.
SetAssociateState(NW_ASC_DISTANCE_2_METERS);
***************
*** 29,51 ****
int nType = GetAssociateType(OBJECT_SELF);
switch (nType)
{
case ASSOCIATE_TYPE_ANIMALCOMPANION:
case ASSOCIATE_TYPE_DOMINATED:
case ASSOCIATE_TYPE_FAMILIAR:
case ASSOCIATE_TYPE_SUMMONED:
SetAssociateState(NW_ASC_DISTANCE_4_METERS);
break;
}
!
/* if (GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, GetMaster()) == OBJECT_SELF ||
GetAssociate(ASSOCIATE_TYPE_DOMINATED, GetMaster()) == OBJECT_SELF ||
GetAssociate(ASSOCIATE_TYPE_FAMILIAR, GetMaster()) == OBJECT_SELF ||
GetAssociate(ASSOCIATE_TYPE_SUMMONED, GetMaster()) == OBJECT_SELF)
{
SetAssociateState(NW_ASC_DISTANCE_4_METERS);
}
*/
// * Feb 2003: Set official campaign henchmen to have no inventory
SetLocalInt(OBJECT_SELF, "X0_L_NOTALLOWEDTOHAVEINVENTORY", 10) ;
--- 40,82 ----
int nType = GetAssociateType(OBJECT_SELF);
switch (nType)
{
case ASSOCIATE_TYPE_ANIMALCOMPANION:
case ASSOCIATE_TYPE_DOMINATED:
case ASSOCIATE_TYPE_FAMILIAR:
case ASSOCIATE_TYPE_SUMMONED:
SetAssociateState(NW_ASC_DISTANCE_4_METERS);
break;
}
! sTag=GetLocalString(OBJECT_SELF,"X3_HORSE_OWNER_TAG");
! if (GetStringLength(sTag)>0)
! { // look for master
! oNPC=GetNearestObjectByTag(sTag);
! if (GetIsObjectValid(oNPC)&&GetObjectType(oNPC)==OBJECT_TYPE_CREATURE)
! { // master found
! AddHenchman(oNPC);
! } // master found
! else
! { // look in module
! oNPC=GetObjectByTag(sTag);
! if (GetIsObjectValid(oNPC)&&GetObjectType(oNPC)==OBJECT_TYPE_CREATURE)
! { // master found
! AddHenchman(oNPC);
! } // master found
! else
! { // master does not exist - remove X3_HORSE_OWNER_TAG
! DeleteLocalString(OBJECT_SELF,"X3_HORSE_OWNER_TAG");
! } // master does not exist - remove X3_HORSE_OWNER_TAG
! } // look in module
! } // look for master
/* if (GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, GetMaster()) == OBJECT_SELF ||
GetAssociate(ASSOCIATE_TYPE_DOMINATED, GetMaster()) == OBJECT_SELF ||
GetAssociate(ASSOCIATE_TYPE_FAMILIAR, GetMaster()) == OBJECT_SELF ||
GetAssociate(ASSOCIATE_TYPE_SUMMONED, GetMaster()) == OBJECT_SELF)
{
SetAssociateState(NW_ASC_DISTANCE_4_METERS);
}
*/
// * Feb 2003: Set official campaign henchmen to have no inventory
SetLocalInt(OBJECT_SELF, "X0_L_NOTALLOWEDTOHAVEINVENTORY", 10) ;
*** nw_ch_acb.nss Mon Aug 04 20:20:41 2008 ***not a prc script***
--- nw_ch_acb.nss Mon Aug 04 20:18:14 2008
***************
*** 3,34 ****
--- 3,44 ----
//:: NW_CH_ACB
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
This determines if the spell just cast at the
target is harmful or not.
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Dec 6, 2001
//:://////////////////////////////////////////////
+ //:://////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified On: Jan 4th, 2008
+ //:: Added Support for Mounted Combat Feat Support
+ //:://////////////////////////////////////////////
#include "X0_INC_HENAI"
#include "x2_i0_spells"
void main()
{
object oCaster = GetLastSpellCaster();
if(GetLastSpellHarmful())
{
SetCommandable(TRUE);
+
+ if (!GetLocalInt(GetModule(),"X3_NO_MOUNTED_COMBAT_FEAT"))
+ { // set variables on target for mounted combat
+ DeleteLocalInt(OBJECT_SELF,"bX3_LAST_ATTACK_PHYSICAL");
+ } // set variables on target for mounted combat
// * GZ Oct 3, 2003
// * Really, the engine should handle this, but hey, this world is not perfect...
// * If I was hurt by my master or the creature hurting me has
// * the same master
// * Then clear any hostile feelings I have against them
// * After all, we're all just trying to do our job here
// * if we singe some eyebrow hair, oh well.
object oMyMaster = GetMaster(OBJECT_SELF);
if ((oMyMaster != OBJECT_INVALID) && (oMyMaster == oCaster || (oMyMaster == GetMaster(oCaster))) )
{
*** nw_g0_tranpconly.nss Mon Aug 04 20:31:05 2008 ***not a prc script***
--- nw_g0_tranpconly.nss Mon Aug 04 20:18:14 2008
***************
*** 1,35 ****
////////////////////////////////////////////////////////////
// OnClick/OnAreaTransitionClick - No monsters!!!
! // NW_G0_Transition.nss
// Copyright (c) 2001 Bioware Corp.
////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////
- void main()
- {
- object oClicker = GetClickingObject();
- // * Only PC's or associates of pc's can do this
- if (GetIsPC(oClicker) || GetIsPC(GetMaster(oClicker)) == TRUE)
- {
object oTarget = GetTransitionTarget(OBJECT_SELF);
SetAreaTransitionBMP(AREA_TRANSITION_RANDOM);
AssignCommand(oClicker,JumpToObject(oTarget));
! }
! /* else
! This turned out to be unnecessary since GetIsPC returns true
! if a player controlled, which includes familiars.
! // * This is an NPC attempting to cross the transition
! // * Clear all actions on it (to prevent system
! // * resource eating by a creature trying to cross
! // * an area transition that it can't
! {
! AssignCommand(oClicker, ClearAllActions());
! }
! */
}
--- 1,102 ----
////////////////////////////////////////////////////////////
// OnClick/OnAreaTransitionClick - No monsters!!!
! // NW_G0_TranPCOnly.nss
// Copyright (c) 2001 Bioware Corp.
////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified On: April 12th, 2008
+ //:: Added Support for Keeping mounts out of no mount areas
+ //::////////////////////////////////////////////////////////
+ #include "x3_inc_horse"
+ #include "x0_inc_henai"
+ void main()
+ {
+ int bOk=FALSE;
+ object oClicker=GetClickingObject();
+ if (GetIsPC(oClicker)||GetIsPC(GetMaster(oClicker))||GetIsPC(GetMaster(GetMaster(oClicker)))) bOk=TRUE;
+ if (!bOk) return; // abort for non associates
+ // This code runs as it has already determined this is an associate or the associate of an associate
object oTarget = GetTransitionTarget(OBJECT_SELF);
+ location lPreJump = HORSE_SupportGetMountLocation(oClicker,oClicker,0.0); // location before jump
+ int bAnim=GetLocalInt(OBJECT_SELF,"bDismountFast"); // community requested fast dismount for transitions if variable is not set (use X3_G0_TranPCOnly for animated)
+ int nN=1;
+ object oOb;
+ object oAreaHere=GetArea(oClicker);
+ object oAreaTarget=GetArea(oTarget);
+ object oHitch;
+ int bDelayedJump=FALSE;
+ int bNoMounts=FALSE;
+ float fX3_MOUNT_MULTIPLE=GetLocalFloat(GetArea(oClicker),"fX3_MOUNT_MULTIPLE");
+ float fX3_DISMOUNT_MULTIPLE=GetLocalFloat(GetArea(oClicker),"fX3_DISMOUNT_MULTIPLE");
+ if (GetLocalFloat(oClicker,"fX3_MOUNT_MULTIPLE")>fX3_MOUNT_MULTIPLE) fX3_MOUNT_MULTIPLE=GetLocalFloat(oClicker,"fX3_MOUNT_MULTIPLE");
+ if (fX3_MOUNT_MULTIPLE<=0.0) fX3_MOUNT_MULTIPLE=1.0;
+ if (GetLocalFloat(oClicker,"fX3_DISMOUNT_MULTIPLE")>0.0) fX3_DISMOUNT_MULTIPLE=GetLocalFloat(oClicker,"fX3_DISMOUNT_MULTIPLE");
+ if (fX3_DISMOUNT_MULTIPLE>0.0) fX3_MOUNT_MULTIPLE=fX3_DISMOUNT_MULTIPLE; // use dismount multiple instead of mount multiple
+ float fDelay=0.1*fX3_MOUNT_MULTIPLE;
+ //SendMessageToPC(oClicker,"nw_g0_transition");
+ if (!GetLocalInt(oAreaTarget,"X3_MOUNT_OK_EXCEPTION"))
+ { // check for global restrictions
+ if (GetLocalInt(GetModule(),"X3_MOUNTS_EXTERNAL_ONLY")&&GetIsAreaInterior(oAreaTarget)) bNoMounts=TRUE;
+ else if (GetLocalInt(GetModule(),"X3_MOUNTS_NO_UNDERGROUND")&&!GetIsAreaAboveGround(oAreaTarget)) bNoMounts=TRUE;
+ } // check for global restrictions
+ if (GetLocalInt(oAreaTarget,"X3_NO_MOUNTING")||GetLocalInt(oAreaTarget,"X3_NO_HORSES")||bNoMounts)
+ { // make sure all transitioning are not mounted
+ //SendMessageToPC(oClicker,"nw_g0_transition:No Mounting");
+ if (HorseGetIsMounted(oClicker))
+ { // dismount clicker
+ bDelayedJump=TRUE;
+ AssignCommand(oClicker,HORSE_SupportDismountWrapper(bAnim,TRUE));
+ fDelay=fDelay+0.2*fX3_MOUNT_MULTIPLE;
+ } // dismount clicker
+ oOb=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oClicker,nN);
+ while(GetIsObjectValid(oOb))
+ { // check each associate to see if mounted
+ if (HorseGetIsMounted(oOb))
+ { // dismount associate
+ bDelayedJump=TRUE;
+ DelayCommand(fDelay,AssignCommand(oOb,HORSE_SupportDismountWrapper(bAnim,TRUE)));
+ fDelay=fDelay+0.2*fX3_MOUNT_MULTIPLE;
+ } // dismount associate
+ nN++;
+ oOb=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oClicker,nN);
+ } // check each associate to see if mounted
+ if (fDelay>0.1) SendMessageToPCByStrRef(oClicker,111989);
+ if (bDelayedJump)
+ { // some of the party has/have been mounted, so delay the time to hitch
+ fDelay=fDelay+2.0*fX3_MOUNT_MULTIPLE; // non-animated dismount lasts 1.0+1.0=2.0 by default, so wait at least that!
+ if (bAnim) fDelay=fDelay+2.8*fX3_MOUNT_MULTIPLE; // animated dismount lasts (X3_ACTION_DELAY+HORSE_DISMOUNT_DURATION+1.0)*fX3_MOUNT_MULTIPLE=4.8 by default, so wait at least that!
+ } // some of the party has/have been mounted, so delay the time to hitch
+ } // make sure all transitioning are not mounted
+ if (GetLocalInt(oAreaTarget,"X3_NO_HORSES")||bNoMounts)
+ { // make sure no horses/mounts follow the clicker to this area
+ //SendMessageToPC(oClicker,"nw_g0_transition:No Horses");
+ bDelayedJump=TRUE;
+ oHitch=GetNearestObjectByTag("X3_HITCHING_POST",oClicker);
+ DelayCommand(fDelay,HorseHitchHorses(oHitch,oClicker,lPreJump));
+ if (bAnim) fDelay=fDelay+1.8*fX3_MOUNT_MULTIPLE;
+ //fDelay=fDelay+0.5*fX3_MOUNT_MULTIPLE; // delays jump to transition, makes you stay longer before jump
+ } // make sure no horses/mounts follow the clicker to this area
+ //SendMessageToPC(oClicker,"nw_g0_transition:Jump fDelay="+FloatToString(fDelay));
SetAreaTransitionBMP(AREA_TRANSITION_RANDOM);
+ //if (GetArea(oTarget)!=GetArea(oClicker)) DelayCommand(fDelay,AssignCommand(oClicker,ForceJump(oClicker,oTarget,5.0)));
+ //else { DelayCommand(fDelay,AssignCommand(oClicker,ForceJump(oClicker,oTarget,5.0))); }
+ if (bDelayedJump)
+ { // delayed jump
+ DelayCommand(fDelay,AssignCommand(oClicker,ClearAllActions()));
+ //DelayCommand(fDelay+0.05*fX3_MOUNT_MULTIPLE,AssignCommand(oClicker,ActionWait(X3_ACTION_DELAY/2*fX3_MOUNT_MULTIPLE)));
+ DelayCommand(fDelay+0.1*fX3_MOUNT_MULTIPLE,AssignCommand(oClicker,JumpToObject(oTarget)));
+ } // delayed jump
+ else
+ { // quick jump
AssignCommand(oClicker,JumpToObject(oTarget));
! } // quick jump
! DelayCommand(fDelay+4.0*fX3_MOUNT_MULTIPLE,HorseMoveAssociates(oClicker));
}
*** nw_g0_transition.nss Mon Aug 04 20:31:08 2008 ***not a prc script***
--- nw_g0_transition.nss Mon Aug 04 20:18:14 2008
***************
*** 4,24 ****
--- 4,105 ----
// Copyright (c) 2001 Bioware Corp.
////////////////////////////////////////////////////////////
// Created By: Sydney Tang
// Created On: 2001-10-26
// Description: This is the default script that is called
// if no OnClick script is specified for an
// Area Transition Trigger or
// if no OnAreaTransitionClick script is
// specified for a Door that has a LinkedTo
// Destination Type other than None.
////////////////////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified On: Apr 12th, 2008
+ //:: Added Support for Keeping mounts out of no mount areas
+ //::////////////////////////////////////////////////////////
+
+
+ #include "x3_inc_horse"
+ #include "x0_inc_henai"
+
void main()
{
object oClicker=GetClickingObject();
object oTarget=GetTransitionTarget(OBJECT_SELF);
+ location lPreJump=HORSE_SupportGetMountLocation(oClicker,oClicker,0.0); // location before jump
+ int bAnim=GetLocalInt(OBJECT_SELF,"bDismountFast"); // community requested fast dismount for transitions if variable is not set (use X3_G0_Transition for animated)
+ int nN=1;
+ object oOb;
+ object oAreaHere=GetArea(oClicker);
+ object oAreaTarget=GetArea(oTarget);
+ object oHitch;
+ int bDelayedJump=FALSE;
+ int bNoMounts=FALSE;
+ float fX3_MOUNT_MULTIPLE=GetLocalFloat(GetArea(oClicker),"fX3_MOUNT_MULTIPLE");
+ float fX3_DISMOUNT_MULTIPLE=GetLocalFloat(GetArea(oClicker),"fX3_DISMOUNT_MULTIPLE");
+ if (GetLocalFloat(oClicker,"fX3_MOUNT_MULTIPLE")>fX3_MOUNT_MULTIPLE) fX3_MOUNT_MULTIPLE=GetLocalFloat(oClicker,"fX3_MOUNT_MULTIPLE");
+ if (fX3_MOUNT_MULTIPLE<=0.0) fX3_MOUNT_MULTIPLE=1.0;
+ if (GetLocalFloat(oClicker,"fX3_DISMOUNT_MULTIPLE")>0.0) fX3_DISMOUNT_MULTIPLE=GetLocalFloat(oClicker,"fX3_DISMOUNT_MULTIPLE");
+ if (fX3_DISMOUNT_MULTIPLE>0.0) fX3_MOUNT_MULTIPLE=fX3_DISMOUNT_MULTIPLE; // use dismount multiple instead of mount multiple
+ float fDelay=0.1*fX3_MOUNT_MULTIPLE;
+ //SendMessageToPC(oClicker,"nw_g0_transition");
+ if (!GetLocalInt(oAreaTarget,"X3_MOUNT_OK_EXCEPTION"))
+ { // check for global restrictions
+ if (GetLocalInt(GetModule(),"X3_MOUNTS_EXTERNAL_ONLY")&&GetIsAreaInterior(oAreaTarget)) bNoMounts=TRUE;
+ else if (GetLocalInt(GetModule(),"X3_MOUNTS_NO_UNDERGROUND")&&!GetIsAreaAboveGround(oAreaTarget)) bNoMounts=TRUE;
+ } // check for global restrictions
+ if (GetLocalInt(oAreaTarget,"X3_NO_MOUNTING")||GetLocalInt(oAreaTarget,"X3_NO_HORSES")||bNoMounts)
+ { // make sure all transitioning are not mounted
+ //SendMessageToPC(oClicker,"nw_g0_transition:No Mounting");
+ if (HorseGetIsMounted(oClicker))
+ { // dismount clicker
+ bDelayedJump=TRUE;
+ AssignCommand(oClicker,HORSE_SupportDismountWrapper(bAnim,TRUE));
+ fDelay=fDelay+0.2*fX3_MOUNT_MULTIPLE;
+ } // dismount clicker
+ oOb=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oClicker,nN);
+ while(GetIsObjectValid(oOb))
+ { // check each associate to see if mounted
+ if (HorseGetIsMounted(oOb))
+ { // dismount associate
+ bDelayedJump=TRUE;
+ DelayCommand(fDelay,AssignCommand(oOb,HORSE_SupportDismountWrapper(bAnim,TRUE)));
+ fDelay=fDelay+0.2*fX3_MOUNT_MULTIPLE;
+ } // dismount associate
+ nN++;
+ oOb=GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oClicker,nN);
+ } // check each associate to see if mounted
+ if (fDelay>0.1) SendMessageToPCByStrRef(oClicker,111989);
+ if (bDelayedJump)
+ { // some of the party has/have been mounted, so delay the time to hitch
+ fDelay=fDelay+2.0*fX3_MOUNT_MULTIPLE; // non-animated dismount lasts 1.0+1.0=2.0 by default, so wait at least that!
+ if (bAnim) fDelay=fDelay+2.8*fX3_MOUNT_MULTIPLE; // animated dismount lasts (X3_ACTION_DELAY+HORSE_DISMOUNT_DURATION+1.0)*fX3_MOUNT_MULTIPLE=4.8 by default, so wait at least that!
+ } // some of the party has/have been mounted, so delay the time to hitch
+ } // make sure all transitioning are not mounted
+ if (GetLocalInt(oAreaTarget,"X3_NO_HORSES")||bNoMounts)
+ { // make sure no horses/mounts follow the clicker to this area
+ //SendMessageToPC(oClicker,"nw_g0_transition:No Horses");
+ bDelayedJump=TRUE;
+ oHitch=GetNearestObjectByTag("X3_HITCHING_POST",oClicker);
+ DelayCommand(fDelay,HorseHitchHorses(oHitch,oClicker,lPreJump));
+ if (bAnim) fDelay=fDelay+1.8*fX3_MOUNT_MULTIPLE;
+ //fDelay=fDelay+0.5*fX3_MOUNT_MULTIPLE; // delays jump to transition, makes you stay longer before jump
+ } // make sure no horses/mounts follow the clicker to this area
+ //SendMessageToPC(oClicker,"nw_g0_transition:Jump fDelay="+FloatToString(fDelay));
SetAreaTransitionBMP(AREA_TRANSITION_RANDOM);
+ //if (GetArea(oTarget)!=GetArea(oClicker)) DelayCommand(fDelay,AssignCommand(oClicker,ForceJump(oClicker,oTarget,5.0)));
+ //else { DelayCommand(fDelay,AssignCommand(oClicker,ForceJump(oClicker,oTarget,5.0))); }
+ if (bDelayedJump)
+ { // delayed jump
+ DelayCommand(fDelay,AssignCommand(oClicker,ClearAllActions()));
+ //DelayCommand(fDelay+0.05*fX3_MOUNT_MULTIPLE,AssignCommand(oClicker,ActionWait(X3_ACTION_DELAY/2*fX3_MOUNT_MULTIPLE)));
+ DelayCommand(fDelay+0.1*fX3_MOUNT_MULTIPLE,AssignCommand(oClicker,JumpToObject(oTarget)));
+ } // delayed jump
+ else
+ { // quick jump
AssignCommand(oClicker,JumpToObject(oTarget));
+ } // quick jump
+ DelayCommand(fDelay+4.0*fX3_MOUNT_MULTIPLE,HorseMoveAssociates(oClicker));
}
*** nw_o0_death.nss Mon Aug 04 20:20:41 2008 ***not a prc script***
--- nw_o0_death.nss Mon Aug 04 20:18:14 2008
***************
*** 1,26 ****
//::///////////////////////////////////////////////
//:: Death Script
//:: NW_O0_DEATH.NSS
! //:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
This script handles the default behavior
that occurs when a player dies.
BK: October 8 2002: Overriden for Expansion
*/
//:://////////////////////////////////////////////
//:: Created By: Brent Knowles
//:: Created On: November 6, 2001
//:://////////////////////////////////////////////
/*
void ClearAllFactionMembers(object oMember, object oPlayer)
{
// AssignCommand(oMember, SpeakString("here"));
AdjustReputation(oPlayer, oMember, 100);
SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
object oClear = GetFirstFactionMember(oMember, FALSE);
while (GetIsObjectValid(oClear) == TRUE)
{
ClearPersonalReputation(oPlayer, oClear);
oClear = GetNextFactionMember(oMember, FALSE);
--- 1,33 ----
//::///////////////////////////////////////////////
//:: Death Script
//:: NW_O0_DEATH.NSS
! //:: Copyright (c) 2008 Bioware Corp.
//:://////////////////////////////////////////////
/*
This script handles the default behavior
that occurs when a player dies.
BK: October 8 2002: Overriden for Expansion
+
+ Deva Winblood: April 21th, 2008: Modified to
+ handle dismounts when PC dies while mounted.
+
*/
//:://////////////////////////////////////////////
//:: Created By: Brent Knowles
//:: Created On: November 6, 2001
//:://////////////////////////////////////////////
+
+ #include "x3_inc_horse"
+
/*
void ClearAllFactionMembers(object oMember, object oPlayer)
{
// AssignCommand(oMember, SpeakString("here"));
AdjustReputation(oPlayer, oMember, 100);
SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
object oClear = GetFirstFactionMember(oMember, FALSE);
while (GetIsObjectValid(oClear) == TRUE)
{
ClearPersonalReputation(oPlayer, oClear);
oClear = GetNextFactionMember(oMember, FALSE);
***************
*** 52,77 ****
{
//Remove effect if it is negative.
RemoveEffect(oPlayer, eBad);
}
eBad = GetNextEffect(oPlayer);
}
//Fire cast spell at event for the specified target
SignalEvent(oPlayer, EventSpellCastAt(OBJECT_SELF, SPELL_RESTORATION, FALSE));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oPlayer);
}
void main()
{
-
object oPlayer = GetLastPlayerDied();
// * increment global tracking number of times that I died
SetLocalInt(oPlayer, "NW_L_PLAYER_DIED", GetLocalInt(oPlayer, "NW_L_PLAYER_DIED") + 1);
// * BK: Automation Control. Autopcs ignore death
if (GetLocalInt(oPlayer, "NW_L_AUTOMATION") == 10)
{
Raise(oPlayer);
DelayCommand(1.0, ExecuteScript("crawl", OBJECT_SELF));
return; // Raise and return
}
--- 59,182 ----
{
//Remove effect if it is negative.
RemoveEffect(oPlayer, eBad);
}
eBad = GetNextEffect(oPlayer);
}
//Fire cast spell at event for the specified target
SignalEvent(oPlayer, EventSpellCastAt(OBJECT_SELF, SPELL_RESTORATION, FALSE));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oPlayer);
}
+
+ ///////////////////////////////////////////////////////////////[ MAIN ]/////////
void main()
{
object oPlayer = GetLastPlayerDied();
+ object oHorse;
+ object oInventory;
+ string sID;
+ int nC;
+ string sT;
+ string sR;
+ int nCH;
+ int nST;
+ object oItem;
+ effect eEffect;
+ string sDB="X3SADDLEBAG"+GetTag(GetModule());
+ if (GetStringLength(GetLocalString(GetModule(),"X3_SADDLEBAG_DATABASE"))>0) sDB=GetLocalString(GetModule(),"X3_SADDLEBAG_DATABASE");
+ if (HorseGetIsMounted(oPlayer))
+ { // Dismount and then die
+ //SetCommandable(FALSE,oPlayer);
+ //ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPlayer);
+ DelayCommand(0.3,HORSE_SupportResetUnmountedAppearance(oPlayer));
+ DelayCommand(3.0,HORSE_SupportCleanVariables(oPlayer));
+ DelayCommand(1.0,HORSE_SupportRemoveACBonus(oPlayer));
+ DelayCommand(1.0,HORSE_SupportRemoveHPBonus(oPlayer));
+ DelayCommand(1.1,HORSE_SupportRemoveMountedSkillDecreases(oPlayer));
+ DelayCommand(1.1,HORSE_SupportAdjustMountedArcheryPenalty(oPlayer));
+ DelayCommand(1.2,HORSE_SupportOriginalSpeed(oPlayer));
+ if (!GetLocalInt(GetModule(),"X3_HORSE_NO_CORPSES"))
+ { // okay to create lootable horse corpses
+ sR=GetSkinString(oPlayer,"sX3_HorseResRef");
+ sT=GetSkinString(oPlayer,"sX3_HorseMountTag");
+ nCH=GetSkinInt(oPlayer,"nX3_HorseAppearance");
+ nST=GetSkinInt(oPlayer,"nX3_HorseTail");
+ nC=GetLocalInt(oPlayer,"nX3_HorsePortrait");
+ if (GetStringLength(sR)>0&&GetStringLeft(sR,GetStringLength(HORSE_PALADIN_PREFIX))!=HORSE_PALADIN_PREFIX)
+ { // create horse
+ oHorse=HorseCreateHorse(sR,GetLocation(oPlayer),oPlayer,sT,nCH,nST);
+ SetLootable(oHorse,TRUE);
+ SetPortraitId(oHorse,nC);
+ SetLocalInt(oHorse,"bDie",TRUE);
+ AssignCommand(oHorse,SetIsDestroyable(FALSE,TRUE,TRUE));
+ } // create horse
+ } // okay to create lootable horse corpses
+ oInventory=GetLocalObject(oPlayer,"oX3_Saddlebags");
+ sID=GetLocalString(oPlayer,"sDB_Inv");
+ if (GetIsObjectValid(oInventory))
+ { // drop horse saddlebags
+ if (!GetIsObjectValid(oHorse))
+ { // no horse created
+ HORSE_SupportTransferInventory(oInventory,OBJECT_INVALID,GetLocation(oPlayer),TRUE);
+ } // no horse created
+ else
+ { // transfer to horse
+ HORSE_SupportTransferInventory(oInventory,oHorse,GetLocation(oHorse),TRUE);
+ //DelayCommand(2.0,PurgeSkinObject(oHorse));
+ //DelayCommand(3.0,KillTheHorse(oHorse));
+ //DelayCommand(1.8,PurgeSkinObject(oHorse));
+ } // transfer to horse
+ } // drop horse saddlebags
+ else if (GetStringLength(sID)>0)
+ { // database based inventory
+ nC=GetCampaignInt(sDB,"nCO_"+sID);
+ while(nC>0)
+ { // restore inventory
+ sR=GetCampaignString(sDB,"sR"+sID+IntToString(nC));
+ sT=GetCampaignString(sDB,"sT"+sID+IntToString(nC));
+ nST=GetCampaignInt(sDB,"nS"+sID+IntToString(nC));
+ nCH=GetCampaignInt(sDB,"nC"+sID+IntToString(nC));
+ DeleteCampaignVariable(sDB,"sR"+sID+IntToString(nC));
+ DeleteCampaignVariable(sDB,"sT"+sID+IntToString(nC));
+ DeleteCampaignVariable(sDB,"nS"+sID+IntToString(nC));
+ DeleteCampaignVariable(sDB,"nC"+sID+IntToString(nC));
+ if (!GetIsObjectValid(oHorse))
+ { // no lootable corpse
+ oItem=CreateObject(OBJECT_TYPE_ITEM,sR,GetLocation(oPlayer),FALSE,sT);
+ } // no lootable corpse
+ else
+ { // lootable corpse
+ oItem=CreateItemOnObject(sR,oHorse,nST,sT);
+ } // lootable corpse
+ if (GetItemStackSize(oItem)!=nST) SetItemStackSize(oItem,nST);
+ if (nCH>0) SetItemCharges(oItem,nCH);
+ nC--;
+ } // restore inventory
+ DeleteCampaignVariable(sDB,"nCO_"+sID);
+ //DelayCommand(2.0,PurgeSkinObject(oHorse));
+ if (GetIsObjectValid(oHorse)&&GetLocalInt(oHorse,"bDie")) DelayCommand(3.0,KillTheHorse(oHorse));
+ //DelayCommand(2.5,PurgeSkinObject(oHorse));
+ } // database based inventory
+ else if (GetIsObjectValid(oHorse))
+ { // no inventory
+ //DelayCommand(1.0,PurgeSkinObject(oHorse));
+ DelayCommand(2.0,KillTheHorse(oHorse));
+ //DelayCommand(1.8,PurgeSkinObject(oHorse));
+ } // no inventory
+ //eEffect=EffectDeath();
+ //DelayCommand(1.6,ApplyEffectToObject(DURATION_TYPE_INSTANT,eEffect,oPlayer));
+ //DelayCommand(1.7,SetCommandable(TRUE,oPlayer));
+ //return;
+ } // Dismount and then die
+
// * increment global tracking number of times that I died
SetLocalInt(oPlayer, "NW_L_PLAYER_DIED", GetLocalInt(oPlayer, "NW_L_PLAYER_DIED") + 1);
// * BK: Automation Control. Autopcs ignore death
if (GetLocalInt(oPlayer, "NW_L_AUTOMATION") == 10)
{
Raise(oPlayer);
DelayCommand(1.0, ExecuteScript("crawl", OBJECT_SELF));
return; // Raise and return
}
***************
*** 117,127 ****
--- 222,234 ----
{ SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 80, oPlayer);
}
if (GetStandardFactionReputation(STANDARD_FACTION_DEFENDER, oPlayer) <= 10)
{ SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 80, oPlayer);
}
DelayCommand(2.5, PopUpGUIPanel(oPlayer,GUI_PANEL_PLAYER_DEATH));
}
+ ///////////////////////////////////////////////////////////////[ MAIN ]/////////
+
*** nw_s0_bladebara.nss Mon Aug 04 20:22:29 2008 *** modified PRC script ***
--- nw_s0_bladebara.nss Mon Aug 04 20:18:14 2008
***************
*** 44,67 ****
if (nMetaMagic == METAMAGIC_MAXIMIZE)
{
nDamage = nLevel * 6;//Damage is at max
}
else if (nMetaMagic == METAMAGIC_EMPOWER)
{
nDamage = nDamage + (nDamage/2);
}
//Make SR Check
if (!MyResistSpell(GetAreaOfEffectCreator(), oTarget) )
{
! if(MySavingThrow(SAVING_THROW_REFLEX, oTarget, GetSpellSaveDC()))
! {
! nDamage = nDamage/2;
! }
//Set damage effect
eDam = EffectDamage(nDamage, DAMAGE_TYPE_SLASHING);
//Apply damage and VFX
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
}
}
}
--- 44,66 ----
if (nMetaMagic == METAMAGIC_MAXIMIZE)
{
nDamage = nLevel * 6;//Damage is at max
}
else if (nMetaMagic == METAMAGIC_EMPOWER)
{
nDamage = nDamage + (nDamage/2);
}
//Make SR Check
if (!MyResistSpell(GetAreaOfEffectCreator(), oTarget) )
{
! //Adjust damage according to Reflex Save, Evasion or Improved Evasion
! nDamage = GetReflexAdjustedDamage(nDamage, oTarget, GetSpellSaveDC());
!
//Set damage effect
eDam = EffectDamage(nDamage, DAMAGE_TYPE_SLASHING);
//Apply damage and VFX
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
}
}
}
*** nw_s0_bladebarc.nss Mon Aug 04 20:22:29 2008 *** modified prc script ***
--- nw_s0_bladebarc.nss Mon Aug 04 20:18:14 2008
***************
*** 62,87 ****
//Roll Damage
int nDamage = d6(nLevel);
//Enter Metamagic conditions
if(nMetaMagic == METAMAGIC_MAXIMIZE)
{
nDamage = nLevel * 6;//Damage is at max
}
else if (nMetaMagic == METAMAGIC_EMPOWER)
{
nDamage = nDamage + (nDamage/2);
}
! if(MySavingThrow(SAVING_THROW_REFLEX, oTarget, GetSpellSaveDC()))
! {
! nDamage = nDamage/2;
! }
//Set damage effect
eDam = EffectDamage(nDamage, DAMAGE_TYPE_SLASHING);
//Apply damage and VFX
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
}
}
oTarget = GetNextInPersistentObject(OBJECT_SELF,OBJECT_TYPE_CREATURE | OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_DOOR);
}
}
--- 62,87 ----
//Roll Damage
int nDamage = d6(nLevel);
//Enter Metamagic conditions
if(nMetaMagic == METAMAGIC_MAXIMIZE)
{
nDamage = nLevel * 6;//Damage is at max
}
else if (nMetaMagic == METAMAGIC_EMPOWER)
{
nDamage = nDamage + (nDamage/2);
}
!
! //Adjust damage according to Reflex Save, Evasion or Improved Evasion
! nDamage = GetReflexAdjustedDamage(nDamage, oTarget, GetSpellSaveDC());
!
//Set damage effect
eDam = EffectDamage(nDamage, DAMAGE_TYPE_SLASHING);
//Apply damage and VFX
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
}
}
oTarget = GetNextInPersistentObject(OBJECT_SELF,OBJECT_TYPE_CREATURE | OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_DOOR);
}
}
*** nw_s0_evardsa.nss Mon Aug 04 20:22:29 2008 ***PRC script implements differently***
--- nw_s0_evardsa.nss Mon Aug 04 20:18:14 2008
***************
*** 111,148 ****
nOppossedGrappleCheckModifiers = nOppossedGrappleCheckModifiers + 8;
}
for (nHits = nTentaclesPerTarget; nHits > 0; nHits--)
{
// Grapple Check.
nTentacleGrappleCheck = d20() + nCasterLevel + 8; // Str(4) + Large Tentacle(4)
nOpposedGrappleCheck = d20() + nOppossedGrappleCheckModifiers;
if(nTentacleGrappleCheck >= nOpposedGrappleCheck)
{
! nDieDam = d6();
//Enter Metamagic conditions
if (nMetaMagic == METAMAGIC_MAXIMIZE)
{
! nDieDam = 6;//Damage is at max
! }
! nDamage = nDamage + nDieDam + 4;
! }
}
if (nMetaMagic == METAMAGIC_EMPOWER)
{
! nDamage = nDamage + (nDamage/2); //Damage/Healing is +50%
}
- if(nDamage > 0)
- {
fDelay = GetRandomDelay(1.0, 2.2);
! eDam = EffectDamage(nDamage, DAMAGE_TYPE_BLUDGEONING, DAMAGE_POWER_PLUS_TWO);
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
if(!MySavingThrow(SAVING_THROW_FORT, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_NONE, OBJECT_SELF, fDelay))
{
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(1)));
}
}
}
}
}
--- 111,150 ----
nOppossedGrappleCheckModifiers = nOppossedGrappleCheckModifiers + 8;
}
for (nHits = nTentaclesPerTarget; nHits > 0; nHits--)
{
// Grapple Check.
nTentacleGrappleCheck = d20() + nCasterLevel + 8; // Str(4) + Large Tentacle(4)
nOpposedGrappleCheck = d20() + nOppossedGrappleCheckModifiers;
if(nTentacleGrappleCheck >= nOpposedGrappleCheck)
{
! nDieDam = d6() + 4;
//Enter Metamagic conditions
if (nMetaMagic == METAMAGIC_MAXIMIZE)
{
! nDieDam = 10;//Damage is at max 6+4=10
}
+
if (nMetaMagic == METAMAGIC_EMPOWER)
{
! nDieDam = nDieDam + (nDieDam/2); //Damage/Healing is +50%
}
+ nDamage = nDamage + nDieDam;
fDelay = GetRandomDelay(1.0, 2.2);
! eDam = EffectDamage(nDieDam, DAMAGE_TYPE_BLUDGEONING, DAMAGE_POWER_PLUS_TWO);
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
+ }
+ }
+
+ if(nDamage > 0)
+ {
if(!MySavingThrow(SAVING_THROW_FORT, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_NONE, OBJECT_SELF, fDelay))
{
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(1)));
}
}
}
}
}
*** nw_s0_evardsc.nss Mon Aug 04 20:22:29 2008 ***PRC script implements differently***
--- nw_s0_evardsc.nss Mon Aug 04 20:18:14 2008
***************
*** 115,156 ****
nOppossedGrappleCheckModifiers = nOppossedGrappleCheckModifiers + 8;
}
for (nHits = nTentaclesPerTarget; nHits > 0; nHits--)
{
// Grapple Check.
nTentacleGrappleCheck = d20() + nCasterLevel + 8; // Str(4) + Large Tentacle(4)
nOpposedGrappleCheck = d20() + nOppossedGrappleCheckModifiers;
if(nTentacleGrappleCheck >= nOpposedGrappleCheck)
{
! nDieDam = d6();
//Enter Metamagic conditions
if (nMetaMagic == METAMAGIC_MAXIMIZE)
{
! nDieDam = 6;//Damage is at max
! }
! nDamage = nDamage + nDieDam + 4;
! }
}
if (nMetaMagic == METAMAGIC_EMPOWER)
{
! nDamage = nDamage + (nDamage/2); //Damage/Healing is +50%
}
}
}
if(nDamage > 0)
{
- eDam = EffectDamage(nDamage, DAMAGE_TYPE_BLUDGEONING, DAMAGE_POWER_PLUS_TWO);
- fDelay = GetRandomDelay(0.75, 1.5);
- DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
if(!MySavingThrow(SAVING_THROW_FORT, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_NONE, OBJECT_SELF, fDelay))
{
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(1)));
}
}
oTarget = GetNextInPersistentObject();
}
}
}
--- 115,158 ----
nOppossedGrappleCheckModifiers = nOppossedGrappleCheckModifiers + 8;
}
for (nHits = nTentaclesPerTarget; nHits > 0; nHits--)
{
// Grapple Check.
nTentacleGrappleCheck = d20() + nCasterLevel + 8; // Str(4) + Large Tentacle(4)
nOpposedGrappleCheck = d20() + nOppossedGrappleCheckModifiers;
if(nTentacleGrappleCheck >= nOpposedGrappleCheck)
{
! nDieDam = d6() + 4;
//Enter Metamagic conditions
if (nMetaMagic == METAMAGIC_MAXIMIZE)
{
! nDieDam = 10;//Damage is at max 6+4=10
}
+
if (nMetaMagic == METAMAGIC_EMPOWER)
{
! nDieDam = nDieDam + (nDieDam/2); //Damage/Healing is +50%
! }
! nDamage = nDamage + nDieDam;
!
! eDam = EffectDamage(nDieDam, DAMAGE_TYPE_BLUDGEONING, DAMAGE_POWER_PLUS_TWO);
! fDelay = GetRandomDelay(0.75, 1.5);
! DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
! }
}
}
}
if(nDamage > 0)
{
if(!MySavingThrow(SAVING_THROW_FORT, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_NONE, OBJECT_SELF, fDelay))
{
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(1)));
}
}
oTarget = GetNextInPersistentObject();
}
}
}
*** nw_s0_healcirc.nss Mon Aug 04 20:20:42 2008 *** PRC script modified ***
--- NW_S0_HealCirc.nss Mon Aug 04 20:18:14 2008
***************
*** 37,59 ****
{
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
return;
}
// End of Spell Cast Hook
//Declare major variables
object oTarget;
int nCasterLvl = GetCasterLevel(OBJECT_SELF);
! int nDamagen, nModify, nHurt, nHP;
int nMetaMagic = GetMetaMagicFeat();
effect eKill;
effect eHeal;
effect eVis = EffectVisualEffect(VFX_IMP_SUNSTRIKE);
effect eVis2 = EffectVisualEffect(VFX_IMP_HEALING_M);
effect eImpact = EffectVisualEffect(VFX_FNF_LOS_HOLY_20);
float fDelay;
//Limit caster level
if (nCasterLvl > 20)
{
nCasterLvl = 20;
--- 37,59 ----
{
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
return;
}
// End of Spell Cast Hook
//Declare major variables
object oTarget;
int nCasterLvl = GetCasterLevel(OBJECT_SELF);
! int nDamagen, nModify, nHP;
int nMetaMagic = GetMetaMagicFeat();
effect eKill;
effect eHeal;
effect eVis = EffectVisualEffect(VFX_IMP_SUNSTRIKE);
effect eVis2 = EffectVisualEffect(VFX_IMP_HEALING_M);
effect eImpact = EffectVisualEffect(VFX_FNF_LOS_HOLY_20);
float fDelay;
//Limit caster level
if (nCasterLvl > 20)
{
nCasterLvl = 20;
***************
*** 72,126 ****
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HEALING_CIRCLE));
//Make SR check
if (!MyResistSpell(OBJECT_SELF, oTarget, fDelay))
{
nModify = d8() + nCasterLvl;
//Make metamagic check
if (nMetaMagic == METAMAGIC_MAXIMIZE)
{
nModify = 8 + nCasterLvl;
}
//Make Fort save
if (MySavingThrow(SAVING_THROW_FORT, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_NONE, OBJECT_SELF, fDelay))
{
nModify /= 2;
}
! //Calculate damage
! nHurt = nModify;
//Set damage effect
! eKill = EffectDamage(nHurt, DAMAGE_TYPE_POSITIVE);
//Apply damage effect and VFX impact
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eKill, oTarget));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
}
}
}
else
{
// * May 2003: Heal Neutrals as well
if(!GetIsReactionTypeHostile(oTarget) || GetFactionEqual(oTarget))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HEALING_CIRCLE, FALSE));
! nHP = d8();
//Enter Metamagic conditions
if (nMetaMagic == METAMAGIC_MAXIMIZE)
{
! nHP =8;//Damage is at max
}
if (nMetaMagic == METAMAGIC_EMPOWER)
{
nHP = nHP + (nHP/2); //Damage/Healing is +50%
}
//Set healing effect
- nHP = nHP + nCasterLvl;
eHeal = EffectHeal(nHP);
//Apply heal effect and VFX impact
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget));
}
}
//Get next target in the shape
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetSpellTargetLocation());
}
}
--- 72,129 ----
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HEALING_CIRCLE));
//Make SR check
if (!MyResistSpell(OBJECT_SELF, oTarget, fDelay))
{
nModify = d8() + nCasterLvl;
//Make metamagic check
if (nMetaMagic == METAMAGIC_MAXIMIZE)
{
nModify = 8 + nCasterLvl;
}
+ if (nMetaMagic == METAMAGIC_EMPOWER)
+ {
+ nModify = nModify + (nModify/2); //Damage/Healing is +50%
+ }
+
//Make Fort save
if (MySavingThrow(SAVING_THROW_FORT, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_NONE, OBJECT_SELF, fDelay))
{
nModify /= 2;
}
!
//Set damage effect
! eKill = EffectDamage(nModify, DAMAGE_TYPE_POSITIVE);
//Apply damage effect and VFX impact
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eKill, oTarget));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
}
}
}
else
{
// * May 2003: Heal Neutrals as well
if(!GetIsReactionTypeHostile(oTarget) || GetFactionEqual(oTarget))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HEALING_CIRCLE, FALSE));
! nHP = d8() + nCasterLvl;
//Enter Metamagic conditions
if (nMetaMagic == METAMAGIC_MAXIMIZE)
{
! nHP = 8 + nCasterLvl;//Damage is at max
}
if (nMetaMagic == METAMAGIC_EMPOWER)
{
nHP = nHP + (nHP/2); //Damage/Healing is +50%
}
//Set healing effect
eHeal = EffectHeal(nHP);
//Apply heal effect and VFX impact
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget));
}
}
//Get next target in the shape
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetSpellTargetLocation());
}
}
*** nw_s0_naturebal.nss Mon Aug 04 20:22:29 2008 *** prc script modified***
--- nw_s0_naturebal.nss Mon Aug 04 20:18:14 2008
***************
*** 38,72 ****
// End of Spell Cast Hook
//Declare major variables
effect eHeal;
effect eVis = EffectVisualEffect(VFX_IMP_HEALING_L);
effect eSR;
effect eVis2 = EffectVisualEffect(VFX_IMP_BREACH);
effect eNature = EffectVisualEffect(VFX_FNF_NATURES_BALANCE);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
! int nRand;
int nCasterLevel = GetCasterLevel(OBJECT_SELF);
//Determine spell duration as an integer for later conversion to Rounds, Turns or Hours.
int nDuration = nCasterLevel/3;
int nMetaMagic = GetMetaMagicFeat();
float fDelay;
//Set off fire and forget visual
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eNature, GetLocation(OBJECT_SELF));
//Declare the spell shape, size and the location. Capture the first target object in the shape.
if (nMetaMagic == METAMAGIC_EXTEND)
{
nDuration = nDuration *2; //Duration is +100%
}
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF), FALSE);
//Cycle through the targets within the spell shape until an invalid object is captured.
while(GetIsObjectValid(oTarget))
{
fDelay = GetRandomDelay();
//Check to see how the caster feels about the targeted object
if(GetIsFriend(oTarget))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_NATURES_BALANCE, FALSE));
nRand = d8(3) + nCasterLevel;
--- 38,79 ----
// End of Spell Cast Hook
//Declare major variables
effect eHeal;
effect eVis = EffectVisualEffect(VFX_IMP_HEALING_L);
effect eSR;
effect eVis2 = EffectVisualEffect(VFX_IMP_BREACH);
effect eNature = EffectVisualEffect(VFX_FNF_NATURES_BALANCE);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
! int nRand, nNumDice;
int nCasterLevel = GetCasterLevel(OBJECT_SELF);
//Determine spell duration as an integer for later conversion to Rounds, Turns or Hours.
int nDuration = nCasterLevel/3;
int nMetaMagic = GetMetaMagicFeat();
float fDelay;
//Set off fire and forget visual
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eNature, GetLocation(OBJECT_SELF));
//Declare the spell shape, size and the location. Capture the first target object in the shape.
if (nMetaMagic == METAMAGIC_EXTEND)
{
nDuration = nDuration *2; //Duration is +100%
}
+
+ nNumDice = nCasterLevel / 5;
+ if(nNumDice == 0)
+ {
+ nNumDice = 1;
+ }
+
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF), FALSE);
//Cycle through the targets within the spell shape until an invalid object is captured.
while(GetIsObjectValid(oTarget))
{
fDelay = GetRandomDelay();
//Check to see how the caster feels about the targeted object
if(GetIsFriend(oTarget))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_NATURES_BALANCE, FALSE));
nRand = d8(3) + nCasterLevel;
***************
*** 86,117 ****
}
else
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_NATURES_BALANCE));
if(!GetIsReactionTypeFriendly(oTarget))
{
//Check for saving throw
if (!MySavingThrow(SAVING_THROW_WILL, oTarget, GetSpellSaveDC()))
{
! nCasterLevel /= 5;
! if(nCasterLevel == 0)
! {
! nCasterLevel = 1;
! }
! nRand = d4(nCasterLevel);
//Enter Metamagic conditions
if (nMetaMagic == METAMAGIC_MAXIMIZE)
{
! nRand = 4 * nCasterLevel;//Damage is at max
}
else if (nMetaMagic == METAMAGIC_EMPOWER)
{
nRand = nRand + (nRand/2); //Damage/Healing is +50%
}
eSR = EffectSpellResistanceDecrease(nRand);
effect eLink = EffectLinkEffects(eSR, eDur);
//Apply reduce SR effects
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget));
}
--- 93,119 ----
}
else
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_NATURES_BALANCE));
if(!GetIsReactionTypeFriendly(oTarget))
{
//Check for saving throw
if (!MySavingThrow(SAVING_THROW_WILL, oTarget, GetSpellSaveDC()))
{
! nRand = d4(nNumDice);
//Enter Metamagic conditions
if (nMetaMagic == METAMAGIC_MAXIMIZE)
{
! nRand = 4 * nNumDice;//Damage is at max
}
else if (nMetaMagic == METAMAGIC_EMPOWER)
{
nRand = nRand + (nRand/2); //Damage/Healing is +50%
}
eSR = EffectSpellResistanceDecrease(nRand);
effect eLink = EffectLinkEffects(eSR, eDur);
//Apply reduce SR effects
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget));
}
*** nw_s0_negburst.nss Mon Aug 04 20:20:43 2008 ***prc script modified***
--- NW_S0_NegBurst.nss Mon Aug 04 20:18:14 2008
***************
*** 33,89 ****
return;
}
// End of Spell Cast Hook
//Declare major variables
object oCaster = OBJECT_SELF;
int nCasterLvl = GetCasterLevel(oCaster);
int nMetaMagic = GetMetaMagicFeat();
int nDamage;
float fDelay;
effect eExplode = EffectVisualEffect(VFX_FNF_LOS_EVIL_20); //Replace with Negative Pulse
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
effect eVisHeal = EffectVisualEffect(VFX_IMP_HEALING_M);
effect eDam, eHeal;
int nStr = nCasterLvl / 4;
if (nStr == 0)
{
nStr = 1;
}
effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, nStr);
effect eStr_Low = EffectAbilityDecrease(ABILITY_STRENGTH, nStr);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
effect eGood = EffectLinkEffects(eStr, eDur);
effect eBad = EffectLinkEffects(eStr_Low, eDur2);
//Get the spell target location as opposed to the spell target.
location lTarget = GetSpellTargetLocation();
//Apply the explosion at the location captured above.
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
//Declare the spell shape, size and the location. Capture the first target object in the shape.
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget);
//Cycle through the targets within the spell shape until an invalid object is captured.
while (GetIsObjectValid(oTarget))
{
if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
{
//Roll damage for each target
! nDamage = d8() + nCasterLvl;
//Resolve metamagic
if (nMetaMagic == METAMAGIC_MAXIMIZE)
{
! nDamage = 8 + nCasterLvl;
}
else if (nMetaMagic == METAMAGIC_EMPOWER)
{
nDamage = nDamage + (nDamage / 2);
}
if(MySavingThrow(SAVING_THROW_WILL, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_NEGATIVE, OBJECT_SELF, fDelay))
{
nDamage /= 2;
}
//Get the distance between the explosion and the target to calculate delay
fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
--- 33,97 ----
return;
}
// End of Spell Cast Hook
//Declare major variables
object oCaster = OBJECT_SELF;
int nCasterLvl = GetCasterLevel(oCaster);
int nMetaMagic = GetMetaMagicFeat();
int nDamage;
+ int nAdditionalLevelDamage;
float fDelay;
effect eExplode = EffectVisualEffect(VFX_FNF_LOS_EVIL_20); //Replace with Negative Pulse
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
effect eVisHeal = EffectVisualEffect(VFX_IMP_HEALING_M);
effect eDam, eHeal;
int nStr = nCasterLvl / 4;
if (nStr == 0)
{
nStr = 1;
}
+
+ nAdditionalLevelDamage = nCasterLvl;
+ if ( nAdditionalLevelDamage > 20 )
+ {
+ nAdditionalLevelDamage = 20;
+ }
+
effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, nStr);
effect eStr_Low = EffectAbilityDecrease(ABILITY_STRENGTH, nStr);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
effect eGood = EffectLinkEffects(eStr, eDur);
effect eBad = EffectLinkEffects(eStr_Low, eDur2);
//Get the spell target location as opposed to the spell target.
location lTarget = GetSpellTargetLocation();
//Apply the explosion at the location captured above.
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
//Declare the spell shape, size and the location. Capture the first target object in the shape.
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget);
//Cycle through the targets within the spell shape until an invalid object is captured.
while (GetIsObjectValid(oTarget))
{
if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
{
//Roll damage for each target
! nDamage = d8() + nAdditionalLevelDamage;
//Resolve metamagic
if (nMetaMagic == METAMAGIC_MAXIMIZE)
{
! nDamage = 8 + nAdditionalLevelDamage;
}
else if (nMetaMagic == METAMAGIC_EMPOWER)
{
nDamage = nDamage + (nDamage / 2);
}
if(MySavingThrow(SAVING_THROW_WILL, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_NEGATIVE, OBJECT_SELF, fDelay))
{
nDamage /= 2;
}
//Get the distance between the explosion and the target to calculate delay
fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
*** nw_s1_gazefear.nss Mon Aug 04 20:20:44 2008 *** not in PRC***
--- nw_s1_gazefear.nss Mon Aug 04 20:18:14 2008
***************
*** 30,59 ****
effect eGaze = EffectFrightened();
effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
effect eVisDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
effect eLink = EffectLinkEffects(eGaze, eVisDur);
eLink = EffectLinkEffects(eLink, eDur);
//Get first target in spell area
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
while(GetIsObjectValid(oTarget))
{
- nDuration = GetScaledDuration(nDuration , oTarget);
if(GetIsEnemy(oTarget) && oTarget != OBJECT_SELF)
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_GAZE_FEAR));
//Determine effect delay
float fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
if(!MySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR, OBJECT_SELF, fDelay))
{
//Apply the VFX impact and effects
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
! DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
}
}
//Get next target in spell area
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
}
}
--- 30,58 ----
effect eGaze = EffectFrightened();
effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
effect eVisDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
effect eLink = EffectLinkEffects(eGaze, eVisDur);
eLink = EffectLinkEffects(eLink, eDur);
//Get first target in spell area
oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
while(GetIsObjectValid(oTarget))
{
if(GetIsEnemy(oTarget) && oTarget != OBJECT_SELF)
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_GAZE_FEAR));
//Determine effect delay
float fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
if(!MySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR, OBJECT_SELF, fDelay))
{
//Apply the VFX impact and effects
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
! DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(GetScaledDuration(nDuration , oTarget))));
}
}
//Get next target in spell area
oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
}
}
*** nw_s1_howlfear.nss Mon Aug 04 20:20:44 2008 *** not in prc ***
--- nw_s1_howlfear.nss Mon Aug 04 20:18:14 2008
***************
*** 33,60 ****
int nHD = GetHitDice(OBJECT_SELF);
int nDC = 10 + (nHD/4);
int nDuration = 1 + (nHD/4);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, OBJECT_SELF);
//Get first target in spell area
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
while(GetIsObjectValid(oTarget))
{
if(GetIsEnemy(oTarget) && oTarget != OBJECT_SELF)
{
fDelay = GetDistanceToObject(oTarget)/10;
- nDuration = GetScaledDuration(nDuration , oTarget);
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_HOWL_FEAR));
//Make a saving throw check
if(!/*Will Save*/ MySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR))
{
//Apply the VFX impact and effects
! DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
}
}
//Get next target in spell area
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
}
}
--- 33,59 ----
int nHD = GetHitDice(OBJECT_SELF);
int nDC = 10 + (nHD/4);
int nDuration = 1 + (nHD/4);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, OBJECT_SELF);
//Get first target in spell area
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
while(GetIsObjectValid(oTarget))
{
if(GetIsEnemy(oTarget) && oTarget != OBJECT_SELF)
{
fDelay = GetDistanceToObject(oTarget)/10;
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_HOWL_FEAR));
//Make a saving throw check
if(!/*Will Save*/ MySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR))
{
//Apply the VFX impact and effects
! DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(GetScaledDuration(nDuration , oTarget))));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
}
}
//Get next target in spell area
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
}
}
*** nw_s2_elemshape.nss Mon Aug 04 20:22:29 2008 ***prc script modified***
--- nw_s2_elemshape.nss Mon Aug 04 20:18:14 2008
***************
*** 2,36 ****
--- 2,60 ----
//:: Elemental Shape
//:: NW_S2_ElemShape
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Allows the Druid to change into elemental forms.
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Jan 22, 2002
//:://////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified Date: January 15th-16th, 2008
+ //:://////////////////////////////////////////////
+ /*
+ Modified to insure no shapeshifting spells are castable upon
+ mounted targets. This prevents problems that can occur due
+ to dismounting after shape shifting, or other issues that can
+ occur due to preserved appearances getting out of synch.
+
+ This can additional check can be disabled by setting the variable
+ X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object. If this
+ variable is set then this script will function as it did prior to
+ this modification.
+
+ */
#include "x2_inc_itemprop"
+ #include "x3_inc_horse"
void main()
{
//Declare major variables
int nSpell = GetSpellId();
object oTarget = GetSpellTargetObject();
effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
effect ePoly;
int nPoly;
int nDuration = GetLevelByClass(CLASS_TYPE_DRUID); //GetCasterLevel(OBJECT_SELF);
int bElder = FALSE;
+ if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+ { // check to see if abort due to being mounted
+ if (HorseGetIsMounted(oTarget))
+ { // abort
+ if (GetIsPC(oTarget)) FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+ return;
+ } // abort
+ } // check to see if abort due to being mounted
if(GetLevelByClass(CLASS_TYPE_DRUID) >= 20)
{
bElder = TRUE;
}
//Determine Polymorph subradial type
if(bElder == FALSE)
{
if(nSpell == 397)
{
nPoly = POLYMORPH_TYPE_HUGE_FIRE_ELEMENTAL;
}
*** nw_s2_wildshape.nss Mon Aug 04 20:22:29 2008 *** prc script modified***
--- nw_s2_wildshape.nss Mon Aug 04 20:18:14 2008
***************
*** 7,41 ****
--- 7,65 ----
Allows the Druid to change into animal forms.
Updated: Sept 30 2003, Georg Z.
* Made Armor merge with druid to make forms
more useful.
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Jan 22, 2002
//:://////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified Date: January 15th-16th, 2008
+ //:://////////////////////////////////////////////
+ /*
+ Modified to insure no shapeshifting spells are castable upon
+ mounted targets. This prevents problems that can occur due
+ to dismounting after shape shifting, or other issues that can
+ occur due to preserved appearances getting out of synch.
+
+ This can additional check can be disabled by setting the variable
+ X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object. If this
+ variable is set then this script will function as it did prior to
+ this modification.
+
+ */
#include "x2_inc_itemprop"
+ #include "x3_inc_horse"
void main()
{
//Declare major variables
int nSpell = GetSpellId();
object oTarget = GetSpellTargetObject();
effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
effect ePoly;
int nPoly;
int nMetaMagic = GetMetaMagicFeat();
int nDuration = GetLevelByClass(CLASS_TYPE_DRUID);
+ if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+ { // check to see if abort due to being mounted
+ if (HorseGetIsMounted(oTarget))
+ { // abort
+ if (GetIsPC(oTarget)) FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+ return;
+ } // abort
+ } // check to see if abort due to being mounted
//Enter Metamagic conditions
if (nMetaMagic == METAMAGIC_EXTEND)
{
nDuration = nDuration *2; //Duration is +100%
}
//Determine Polymorph subradial type
if(nSpell == 401)
{
nPoly = POLYMORPH_TYPE_BROWN_BEAR;
if (nDuration >= 12)
*** nw_t1_negavgc.nss Mon Aug 04 20:20:44 2008 *** not in prc***
--- nw_t1_negavgc.nss Mon Aug 04 20:18:14 2008
***************
*** 15,34 ****
--- 15,45 ----
#include "NW_I0_SPELLS"
void main()
{
//Declare major variables
object oTarget = GetEnteringObject();
effect eNeg = EffectAbilityDecrease(ABILITY_STRENGTH, 1);
effect eDam = EffectDamage(d6(3), DAMAGE_TYPE_NEGATIVE);
eNeg = SupernaturalEffect(eNeg);
effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);
+ // Undead are healed by Negative Energy.
+ if ( GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD )
+ {
+ effect eHeal = EffectHeal(d6(3));
+ effect eVisHeal = EffectVisualEffect(VFX_IMP_HEALING_M);
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget);
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisHeal, oTarget);
+ }
+ else
+ {
//Make a saving throw check
if(!MySavingThrow(SAVING_THROW_FORT,oTarget, 15, SAVING_THROW_TYPE_TRAP))
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eNeg, oTarget);
}
//Apply the VFX impact and effects
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
+ }
}
*** nw_t1_negdeadc.nss Mon Aug 04 20:20:44 2008 *** not in prc ***
--- nw_t1_negdeadc.nss Mon Aug 04 20:18:14 2008
***************
*** 14,33 ****
--- 14,44 ----
#include "NW_I0_SPELLS"
void main()
{
//Declare major variables
object oTarget = GetEnteringObject();
effect eNeg = EffectNegativeLevel(1);
effect eDam = EffectDamage(d6(8), DAMAGE_TYPE_NEGATIVE);
eNeg = SupernaturalEffect(eNeg);
effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);
+ // Undead are healed by Negative Energy.
+ if ( GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD )
+ {
+ effect eHeal = EffectHeal(d6(8));
+ effect eVisHeal = EffectVisualEffect(VFX_IMP_HEALING_M);
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget);
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisHeal, oTarget);
+ }
+ else
+ {
//Make a saving throw check
if(!MySavingThrow(SAVING_THROW_FORT, oTarget, 21, SAVING_THROW_TYPE_TRAP))
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eNeg, oTarget);
}
//Apply the VFX impact and effects
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
+ }
}
*** nw_t1_negminc.nss Mon Aug 04 20:20:44 2008 *** not in prc ***
--- nw_t1_negminc.nss Mon Aug 04 20:18:14 2008
***************
*** 15,34 ****
--- 15,45 ----
#include "NW_I0_SPELLS"
void main()
{
//Declare major variables
object oTarget = GetEnteringObject();
effect eNeg = EffectAbilityDecrease(ABILITY_STRENGTH, 1);
effect eDam = EffectDamage(d6(2), DAMAGE_TYPE_NEGATIVE);
eNeg = SupernaturalEffect(eNeg);
effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);
+ // Undead are healed by Negative Energy.
+ if ( GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD )
+ {
+ effect eHeal = EffectHeal(d6(2));
+ effect eVisHeal = EffectVisualEffect(VFX_IMP_HEALING_M);
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget);
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisHeal, oTarget);
+ }
+ else
+ {
//Make a saving throw check
if(!MySavingThrow(SAVING_THROW_FORT, oTarget, 12, SAVING_THROW_TYPE_TRAP))
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eNeg, oTarget);
}
//Apply the VFX impact and effects
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
+ }
}
*** nw_t1_negstrc.nss Mon Aug 04 20:20:44 2008 *** not in prc ***
--- nw_t1_negstrc.nss Mon Aug 04 20:18:14 2008
***************
*** 15,34 ****
--- 15,45 ----
#include "NW_I0_SPELLS"
void main()
{
//Declare major variables
object oTarget = GetEnteringObject();
effect eNeg = EffectAbilityDecrease(ABILITY_STRENGTH, 2);
effect eDam = EffectDamage(d6(5), DAMAGE_TYPE_NEGATIVE);
eNeg = SupernaturalEffect(eNeg);
effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);
+ // Undead are healed by Negative Energy.
+ if ( GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD )
+ {
+ effect eHeal = EffectHeal(d6(5));
+ effect eVisHeal = EffectVisualEffect(VFX_IMP_HEALING_M);
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget);
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisHeal, oTarget);
+ }
+ else
+ {
//Make a saving throw check
if(!MySavingThrow(SAVING_THROW_FORT, oTarget, 18, SAVING_THROW_TYPE_TRAP))
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eNeg, oTarget);
}
//Apply the VFX impact and effects
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
+ }
}
*** nwscript.nss Mon Aug 04 20:22:29 2008
--- nwscript.nss Mon Aug 04 20:18:13 2008
***************
*** 30,51 ****
--- 30,53 ----
int ATTITUDE_NEUTRAL = 0;
int ATTITUDE_AGGRESSIVE = 1;
int ATTITUDE_DEFENSIVE = 2;
int ATTITUDE_SPECIAL = 3;
int TALKVOLUME_TALK = 0;
int TALKVOLUME_WHISPER = 1;
int TALKVOLUME_SHOUT = 2;
int TALKVOLUME_SILENT_TALK = 3;
int TALKVOLUME_SILENT_SHOUT = 4;
+ int TALKVOLUME_PARTY = 5;
+ int TALKVOLUME_TELL = 6;
int INVENTORY_SLOT_HEAD = 0;
int INVENTORY_SLOT_CHEST = 1;
int INVENTORY_SLOT_BOOTS = 2;
int INVENTORY_SLOT_ARMS = 3;
int INVENTORY_SLOT_RIGHTHAND = 4;
int INVENTORY_SLOT_LEFTHAND = 5;
int INVENTORY_SLOT_CLOAK = 6;
int INVENTORY_SLOT_LEFTRING = 7;
int INVENTORY_SLOT_RIGHTRING = 8;
int INVENTORY_SLOT_NECK = 9;
***************
*** 649,670 ****
--- 651,676 ----
int ITEM_PROPERTY_MONSTER_DAMAGE = 77 ;
int ITEM_PROPERTY_IMMUNITY_SPELLS_BY_LEVEL = 78 ;
int ITEM_PROPERTY_SPECIAL_WALK = 79;
int ITEM_PROPERTY_HEALERS_KIT = 80;
int ITEM_PROPERTY_WEIGHT_INCREASE = 81;
int ITEM_PROPERTY_ONHITCASTSPELL = 82;
int ITEM_PROPERTY_VISUALEFFECT = 83;
int ITEM_PROPERTY_ARCANE_SPELL_FAILURE = 84;
+ int ITEM_PROPERTY_MATERIAL = 85;
+ int ITEM_PROPERTY_QUALITY = 86;
+ int ITEM_PROPERTY_ADDITIONAL = 87;
+
int BASE_ITEM_SHORTSWORD = 0;
int BASE_ITEM_LONGSWORD = 1;
int BASE_ITEM_BATTLEAXE = 2;
int BASE_ITEM_BASTARDSWORD = 3;
int BASE_ITEM_LIGHTFLAIL = 4;
int BASE_ITEM_WARHAMMER = 5;
int BASE_ITEM_HEAVYCROSSBOW = 6;
int BASE_ITEM_LIGHTCROSSBOW = 7;
int BASE_ITEM_LONGBOW = 8;
int BASE_ITEM_LIGHTMACE = 9;
***************
*** 1087,1130 ****
--- 1093,1163 ----
int VFX_EYES_RED_FLAME_DWARF_MALE = 362;
int VFX_EYES_RED_FLAME_DWARF_FEMALE = 363;
int VFX_EYES_RED_FLAME_ELF_MALE = 364;
int VFX_EYES_RED_FLAME_ELF_FEMALE = 365;
int VFX_EYES_RED_FLAME_GNOME_MALE = 366;
int VFX_EYES_RED_FLAME_GNOME_FEMALE = 367;
int VFX_EYES_RED_FLAME_HALFLING_MALE = 368;
int VFX_EYES_RED_FLAME_HALFLING_FEMALE = 369;
int VFX_EYES_RED_FLAME_HALFORC_MALE = 370;
int VFX_EYES_RED_FLAME_HALFORC_FEMALE = 371;
int VFX_EYES_RED_FLAME_TROGLODYTE = 372;
+ int VFX_EYES_YEL_HUMAN_MALE = 373;
+ int VFX_EYES_YEL_HUMAN_FEMALE = 374;
+ int VFX_EYES_YEL_DWARF_MALE = 375;
+ int VFX_EYES_YEL_DWARF_FEMALE = 376;
+ int VFX_EYES_YEL_ELF_MALE = 377;
+ int VFX_EYES_YEL_ELF_FEMALE = 378;
+ int VFX_EYES_YEL_GNOME_MALE = 379;
+ int VFX_EYES_YEL_GNOME_FEMALE = 380;
+ int VFX_EYES_YEL_HALFLING_MALE = 381;
+ int VFX_EYES_YEL_HALFLING_FEMALE = 382;
+ int VFX_EYES_YEL_HALFORC_MALE = 383;
+ int VFX_EYES_YEL_HALFORC_FEMALE = 384;
+ int VFX_EYES_YEL_TROGLODYTE = 385;
+ int VFX_EYES_ORG_HUMAN_MALE = 386;
+ int VFX_EYES_ORG_HUMAN_FEMALE = 387;
+ int VFX_EYES_ORG_DWARF_MALE = 388;
+ int VFX_EYES_ORG_DWARF_FEMALE = 389;
+ int VFX_EYES_ORG_ELF_MALE = 390;
+ int VFX_EYES_ORG_ELF_FEMALE = 391;
+ int VFX_EYES_ORG_GNOME_MALE = 392;
+ int VFX_EYES_ORG_GNOME_FEMALE = 393;
+ int VFX_EYES_ORG_HALFLING_MALE = 394;
+ int VFX_EYES_ORG_HALFLING_FEMALE = 395;
+ int VFX_EYES_ORG_HALFORC_MALE = 396;
+ int VFX_EYES_ORG_HALFORC_FEMALE = 397;
+ int VFX_EYES_ORG_TROGLODYTE = 398;
int VFX_DUR_IOUNSTONE = 403;
int VFX_IMP_TORNADO = 407;
int VFX_DUR_GLOW_LIGHT_BLUE = 408;
int VFX_DUR_GLOW_PURPLE = 409;
int VFX_DUR_GLOW_BLUE = 410;
int VFX_DUR_GLOW_RED = 411;
int VFX_DUR_GLOW_LIGHT_RED = 412;
int VFX_DUR_GLOW_YELLOW = 413;
int VFX_DUR_GLOW_LIGHT_YELLOW = 414;
int VFX_DUR_GLOW_GREEN = 415;
int VFX_DUR_GLOW_LIGHT_GREEN = 416;
int VFX_DUR_GLOW_ORANGE = 417;
int VFX_DUR_GLOW_LIGHT_ORANGE = 418;
int VFX_DUR_GLOW_BROWN = 419;
int VFX_DUR_GLOW_LIGHT_BROWN = 420;
int VFX_DUR_GLOW_GREY = 421;
int VFX_DUR_GLOW_WHITE = 422;
int VFX_DUR_GLOW_LIGHT_PURPLE = 423;
int VFX_DUR_GHOST_TRANSPARENT = 424;
int VFX_DUR_GHOST_SMOKE = 425;
int VFX_DUR_GLYPH_OF_WARDING = 445;
int VFX_FNF_SOUND_BURST_SILENT = 446;
+ int VFX_BEAM_DISINTEGRATE = 447;
int VFX_FNF_ELECTRIC_EXPLOSION = 459;
int VFX_IMP_DUST_EXPLOSION = 460;
int VFX_IMP_PULSE_HOLY_SILENT = 461;
int VFX_DUR_DEATH_ARMOR = 463;
int VFX_DUR_ICESKIN = 465;
int VFX_FNF_SWINGING_BLADE = 473;
int VFX_DUR_INFERNO = 474;
int VFX_FNF_DEMON_HAND = 475;
int VFX_DUR_STONEHOLD = 476;
int VFX_FNF_MYSTICAL_EXPLOSION = 477;
int VFX_DUR_GHOSTLY_VISAGE_NO_SOUND = 478;
***************
*** 1211,1234 ****
int VFX_EYES_GREEN_DWARF_MALE = 569;
int VFX_EYES_GREEN_DWARF_FEMALE = 570;
int VFX_EYES_GREEN_ELF_MALE = 571;
int VFX_EYES_GREEN_ELF_FEMALE = 572;
int VFX_EYES_GREEN_GNOME_MALE = 573;
int VFX_EYES_GREEN_GNOME_FEMALE = 574;
int VFX_EYES_GREEN_HALFLING_MALE = 575;
int VFX_EYES_GREEN_HALFLING_FEMALE = 576;
int VFX_EYES_GREEN_HALFORC_MALE = 577;
int VFX_EYES_GREEN_HALFORC_FEMALE = 578;
int VFX_EYES_GREEN_TROGLODYTE = 579;
!
!
//VFX_Persistent.2da
int AOE_PER_FOGACID = 0;
int AOE_PER_FOGFIRE = 1;
int AOE_PER_FOGSTINK = 2;
int AOE_PER_FOGKILL = 3;
int AOE_PER_FOGMIND = 4;
int AOE_PER_WALLFIRE = 5;
int AOE_PER_WALLWIND = 6;
int AOE_PER_WALLBLADE = 7;
int AOE_PER_WEB = 8;
--- 1244,1324 ----
int VFX_EYES_GREEN_DWARF_MALE = 569;
int VFX_EYES_GREEN_DWARF_FEMALE = 570;
int VFX_EYES_GREEN_ELF_MALE = 571;
int VFX_EYES_GREEN_ELF_FEMALE = 572;
int VFX_EYES_GREEN_GNOME_MALE = 573;
int VFX_EYES_GREEN_GNOME_FEMALE = 574;
int VFX_EYES_GREEN_HALFLING_MALE = 575;
int VFX_EYES_GREEN_HALFLING_FEMALE = 576;
int VFX_EYES_GREEN_HALFORC_MALE = 577;
int VFX_EYES_GREEN_HALFORC_FEMALE = 578;
int VFX_EYES_GREEN_TROGLODYTE = 579;
! int VFX_EYES_PUR_HUMAN_MALE = 580;
! int VFX_EYES_PUR_HUMAN_FEMALE = 581;
! int VFX_EYES_PUR_DWARF_MALE = 582;
! int VFX_EYES_PUR_DWARF_FEMALE = 583;
! int VFX_EYES_PUR_ELF_MALE = 584;
! int VFX_EYES_PUR_ELF_FEMALE = 585;
! int VFX_EYES_PUR_GNOME_MALE = 586;
! int VFX_EYES_PUR_GNOME_FEMALE = 587;
! int VFX_EYES_PUR_HALFLING_MALE = 588;
! int VFX_EYES_PUR_HALFLING_FEMALE = 589;
! int VFX_EYES_PUR_HALFORC_MALE = 590;
! int VFX_EYES_PUR_HALFORC_FEMALE = 591;
! int VFX_EYES_PUR_TROGLODYTE = 592;
! int VFX_EYES_CYN_HUMAN_MALE = 593;
! int VFX_EYES_CYN_HUMAN_FEMALE = 594;
! int VFX_EYES_CYN_DWARF_MALE = 595;
! int VFX_EYES_CYN_DWARF_FEMALE = 596;
! int VFX_EYES_CYN_ELF_MALE = 597;
! int VFX_EYES_CYN_ELF_FEMALE = 598;
! int VFX_EYES_CYN_GNOME_MALE = 599;
! int VFX_EYES_CYN_GNOME_FEMALE = 600;
! int VFX_EYES_CYN_HALFLING_MALE = 601;
! int VFX_EYES_CYN_HALFLING_FEMALE = 602;
! int VFX_EYES_CYN_HALFORC_MALE = 603;
! int VFX_EYES_CYN_HALFORC_FEMALE = 604;
! int VFX_EYES_CYN_TROGLODYTE = 605;
! int VFX_EYES_WHT_HUMAN_MALE = 606;
! int VFX_EYES_WHT_HUMAN_FEMALE = 607;
! int VFX_EYES_WHT_DWARF_MALE = 608;
! int VFX_EYES_WHT_DWARF_FEMALE = 609;
! int VFX_EYES_WHT_ELF_MALE = 610;
! int VFX_EYES_WHT_ELF_FEMALE = 611;
! int VFX_EYES_WHT_GNOME_MALE = 612;
! int VFX_EYES_WHT_GNOME_FEMALE = 613;
! int VFX_EYES_WHT_HALFLING_MALE = 614;
! int VFX_EYES_WHT_HALFLING_FEMALE = 615;
! int VFX_EYES_WHT_HALFORC_MALE = 616;
! int VFX_EYES_WHT_HALFORC_FEMALE = 617;
! int VFX_EYES_WHT_TROGLODYTE = 618;
! int VFX_IMP_PDK_GENERIC_PULSE = 623;
! int VFX_IMP_PDK_GENERIC_HEAD_HIT = 624;
! int VFX_IMP_PDK_RALLYING_CRY = 625;
! int VFX_IMP_PDK_HEROIC_SHIELD = 626;
! int VFX_IMP_PDK_INSPIRE_COURAGE = 627;
! int VFX_DUR_PDK_FEAR = 628;
! int VFX_IMP_PDK_WRATH = 629;
! int VFX_IMP_PDK_OATH = 630;
! int VFX_IMP_PDK_FINAL_STAND = 631;
! int VFX_DUR_ARROW_IN_STERNUM = 632;
! int VFX_DUR_ARROW_IN_CHEST_LEFT = 633;
! int VFX_DUR_ARROW_IN_CHEST_RIGHT = 634;
! int VFX_DUR_ARROW_IN_BACK = 635;
! int VFX_DUR_ARROW_IN_TEMPLES = 636;
! int VFX_DUR_ARROW_IN_FACE = 637;
! int VFX_DUR_ARROW_IN_HEAD = 638;
! int VFX_DUR_QUILL_IN_CHEST = 639;
! int VFX_IMP_STARBURST_GREEN = 644;
! int VFX_IMP_STARBURST_RED = 645;
! int VFX_IMP_NIGHTMARE_HEAD_HIT = 670;
//VFX_Persistent.2da
int AOE_PER_FOGACID = 0;
int AOE_PER_FOGFIRE = 1;
int AOE_PER_FOGSTINK = 2;
int AOE_PER_FOGKILL = 3;
int AOE_PER_FOGMIND = 4;
int AOE_PER_WALLFIRE = 5;
int AOE_PER_WALLWIND = 6;
int AOE_PER_WALLBLADE = 7;
int AOE_PER_WEB = 8;
***************
*** 1862,1883 ****
--- 1952,1981 ----
int SPELL_CRAFT_ADD_ITEM_PROPERTY = 654;
int SPELL_CRAFT_POISON_WEAPON_OR_AMMO = 655;
int SPELL_CRAFT_CRAFT_WEAPON_SKILL = 656;
int SPELL_CRAFT_CRAFT_ARMOR_SKILL = 657;
int SPELLABILITY_DRAGON_BREATH_NEGATIVE = 698;
int SPELLABILITY_SEAHAG_EVILEYE = 803;
int SPELLABILITY_AURA_HORRIFICAPPEARANCE = 804;
int SPELLABILITY_TROGLODYTE_STENCH = 805;
+ int SPELL_HORSE_MENU = 812;
+ int SPELL_HORSE_MOUNT = 813;
+ int SPELL_HORSE_DISMOUNT = 814;
+ int SPELL_HORSE_PARTY_MOUNT = 815;
+ int SPELL_HORSE_PARTY_DISMOUNT = 816;
+ int SPELL_HORSE_ASSIGN_MOUNT = 817;
+ int SPELL_PALADIN_SUMMON_MOUNT = 818;
+
// these constants must match those in poison.2da
int POISON_NIGHTSHADE = 0;
int POISON_SMALL_CENTIPEDE_POISON = 1;
int POISON_BLADE_BANE = 2;
int POISON_GREENBLOOD_OIL = 3;
int POISON_BLOODROOT = 4;
int POISON_PURPLE_WORM_POISON = 5;
int POISON_LARGE_SCORPION_VENOM = 6;
int POISON_WYVERN_POISON = 7;
int POISON_BLUE_WHINNIS = 8;
int POISON_GIANT_WASP_POISON = 9;
***************
*** 2000,2021 ****
--- 2098,2120 ----
int CLASS_TYPE_WEAPON_MASTER = 33;
int CLASS_TYPE_PALEMASTER = 34;
int CLASS_TYPE_PALE_MASTER = 34;
int CLASS_TYPE_SHIFTER = 35;
int CLASS_TYPE_DWARVENDEFENDER = 36;
int CLASS_TYPE_DWARVEN_DEFENDER = 36;
int CLASS_TYPE_DRAGONDISCIPLE = 37;
int CLASS_TYPE_DRAGON_DISCIPLE = 37;
int CLASS_TYPE_OOZE = 38;
int CLASS_TYPE_EYE_OF_GRUUMSH = 39;
int CLASS_TYPE_SHOU_DISCIPLE = 40;
+ int CLASS_TYPE_PURPLE_DRAGON_KNIGHT = 41;
int CLASS_TYPE_INVALID = 255;
// These are for the LevelUpHenchman command.
int PACKAGE_BARBARIAN = 0;
int PACKAGE_BARD = 1;
int PACKAGE_CLERIC = 2;
int PACKAGE_DRUID = 3;
int PACKAGE_FIGHTER = 4;
int PACKAGE_MONK = 5;
int PACKAGE_PALADIN = 6;
***************
*** 2173,2194 ****
--- 2272,2294 ----
int SKILL_SPELLCRAFT = 16;
int SKILL_SPOT = 17;
int SKILL_TAUNT = 18;
int SKILL_USE_MAGIC_DEVICE = 19;
int SKILL_APPRAISE = 20;
int SKILL_TUMBLE = 21;
int SKILL_CRAFT_TRAP = 22;
int SKILL_BLUFF = 23;
int SKILL_INTIMIDATE = 24;
int SKILL_CRAFT_ARMOR = 25;
int SKILL_CRAFT_WEAPON = 26;
+ int SKILL_RIDE = 27;
int SKILL_ALL_SKILLS = 255;
int SUBSKILL_FLAGTRAP = 100;
int SUBSKILL_RECOVERTRAP = 101;
int SUBSKILL_EXAMINETRAP = 102;
int FEAT_ALERTNESS = 0;
int FEAT_AMBIDEXTERITY = 1;
int FEAT_ARMOR_PROFICIENCY_HEAVY = 2;
int FEAT_ARMOR_PROFICIENCY_LIGHT = 3;
***************
*** 3190,3211 ****
--- 3290,3346 ----
int FEAT_EPIC_SHIFTER_INFINITE_WILDSHAPE_1 = 1062;
int FEAT_EPIC_SHIFTER_INFINITE_WILDSHAPE_2 = 1063;
int FEAT_EPIC_SHIFTER_INFINITE_WILDSHAPE_3 = 1064;
int FEAT_EPIC_SHIFTER_INFINITE_WILDSHAPE_4 = 1065;
int FEAT_EPIC_SHIFTER_INFINITE_HUMANOID_SHAPE = 1066;
int FEAT_EPIC_BARBARIAN_DAMAGE_REDUCTION = 1067;
int FEAT_EPIC_DRUID_INFINITE_WILDSHAPE = 1068;
int FEAT_EPIC_DRUID_INFINITE_ELEMENTAL_SHAPE = 1069;
int FEAT_PRESTIGE_POISON_SAVE_EPIC = 1070;
int FEAT_EPIC_SUPERIOR_WEAPON_FOCUS = 1071;
+ int FEAT_WEAPON_FOCUS_TRIDENT = 1072;
+ int FEAT_WEAPON_SPECIALIZATION_TRIDENT = 1073;
+ int FEAT_IMPROVED_CRITICAL_TRIDENT = 1074;
+ int FEAT_EPIC_DEVASTATING_CRITICAL_TRIDENT = 1075;
+ int FEAT_EPIC_WEAPON_FOCUS_TRIDENT = 1076;
+ int FEAT_EPIC_WEAPON_SPECIALIZATION_TRIDENT = 1077;
+ int FEAT_EPIC_OVERWHELMING_CRITICAL_TRIDENT = 1078;
+ int FEAT_WEAPON_OF_CHOICE_TRIDENT = 1079;
+ int FEAT_PDK_RALLY = 1080;
+ int FEAT_PDK_SHIELD = 1081;
+ int FEAT_PDK_FEAR = 1082;
+ int FEAT_PDK_WRATH = 1083;
+ int FEAT_PDK_STAND = 1084;
+ int FEAT_PDK_INSPIRE_1 = 1085;
+ int FEAT_PDK_INSPIRE_2 = 1086;
+ int FEAT_MOUNTED_COMBAT = 1087;
+ int FEAT_MOUNTED_ARCHERY = 1088;
+ int FEAT_HORSE_MENU = 1089;
+ int FEAT_HORSE_MOUNT = 1090;
+ int FEAT_HORSE_DISMOUNT = 1091;
+ int FEAT_HORSE_PARTY_MOUNT = 1092;
+ int FEAT_HORSE_PARTY_DISMOUNT = 1093;
+ int FEAT_HORSE_ASSIGN_MOUNT = 1094;
+ int FEAT_PALADIN_SUMMON_MOUNT = 1095;
+ int FEAT_PLAYER_TOOL_01 = 1106;
+ int FEAT_PLAYER_TOOL_02 = 1107;
+ int FEAT_PLAYER_TOOL_03 = 1108;
+ int FEAT_PLAYER_TOOL_04 = 1109;
+ int FEAT_PLAYER_TOOL_05 = 1110;
+ int FEAT_PLAYER_TOOL_06 = 1111;
+ int FEAT_PLAYER_TOOL_07 = 1112;
+ int FEAT_PLAYER_TOOL_08 = 1113;
+ int FEAT_PLAYER_TOOL_09 = 1114;
+ int FEAT_PLAYER_TOOL_10 = 1115;
+
// Special Attack Defines
int SPECIAL_ATTACK_INVALID = 0;
int SPECIAL_ATTACK_CALLED_SHOT_LEG = 1;
int SPECIAL_ATTACK_CALLED_SHOT_ARM = 2;
int SPECIAL_ATTACK_SAP = 3;
int SPECIAL_ATTACK_DISARM = 4;
int SPECIAL_ATTACK_IMPROVED_DISARM = 5;
int SPECIAL_ATTACK_KNOCKDOWN = 6;
int SPECIAL_ATTACK_IMPROVED_KNOCKDOWN = 7;
int SPECIAL_ATTACK_STUNNING_FIST = 8;
int SPECIAL_ATTACK_FLURRY_OF_BLOWS = 9;
***************
*** 3256,3277 ****
--- 3391,3424 ----
int ANIMATION_LOOPING_SPASM = 20;
int ANIMATION_LOOPING_CUSTOM1 = 21;
int ANIMATION_LOOPING_CUSTOM2 = 22;
int ANIMATION_LOOPING_CUSTOM3 = 23;
int ANIMATION_LOOPING_CUSTOM4 = 24;
int ANIMATION_LOOPING_CUSTOM5 = 25;
int ANIMATION_LOOPING_CUSTOM6 = 26;
int ANIMATION_LOOPING_CUSTOM7 = 27;
int ANIMATION_LOOPING_CUSTOM8 = 28;
int ANIMATION_LOOPING_CUSTOM9 = 29;
int ANIMATION_LOOPING_CUSTOM10 = 30;
+ int ANIMATION_LOOPING_CUSTOM11 = 31;
+ int ANIMATION_LOOPING_CUSTOM12 = 32;
+ int ANIMATION_LOOPING_CUSTOM13 = 33;
+ int ANIMATION_LOOPING_CUSTOM14 = 34;
+ int ANIMATION_LOOPING_CUSTOM15 = 35;
+ int ANIMATION_LOOPING_CUSTOM16 = 36;
+ int ANIMATION_LOOPING_CUSTOM17 = 37;
+ int ANIMATION_LOOPING_CUSTOM18 = 38;
+ int ANIMATION_LOOPING_CUSTOM19 = 39;
+ int ANIMATION_LOOPING_CUSTOM20 = 40;
+ int ANIMATION_MOUNT1 = 41;
+ int ANIMATION_DISMOUNT1 = 42;
// Fire and forget animation constants.
int ANIMATION_FIREFORGET_HEAD_TURN_LEFT = 100;
int ANIMATION_FIREFORGET_HEAD_TURN_RIGHT = 101;
int ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD = 102;
int ANIMATION_FIREFORGET_PAUSE_BORED = 103;
int ANIMATION_FIREFORGET_SALUTE = 104;
int ANIMATION_FIREFORGET_BOW = 105;
int ANIMATION_FIREFORGET_STEAL = 106;
int ANIMATION_FIREFORGET_GREETING = 107;
int ANIMATION_FIREFORGET_TAUNT = 108;
***************
*** 4261,4282 ****
--- 4408,4431 ----
int IP_CONST_ABILITY_STR = 0;
int IP_CONST_ABILITY_DEX = 1;
int IP_CONST_ABILITY_CON = 2;
int IP_CONST_ABILITY_INT = 3;
int IP_CONST_ABILITY_WIS = 4;
int IP_CONST_ABILITY_CHA = 5;
int IP_CONST_ACMODIFIERTYPE_DODGE = 0;
int IP_CONST_ACMODIFIERTYPE_NATURAL = 1;
int IP_CONST_ACMODIFIERTYPE_ARMOR = 2;
int IP_CONST_ACMODIFIERTYPE_SHIELD = 3;
int IP_CONST_ACMODIFIERTYPE_DEFLECTION = 4;
+ int IP_CONST_ADDITIONAL_UNKNOWN = 0;
+ int IP_CONST_ADDITIONAL_CURSED = 1;
int IP_CONST_ALIGNMENTGROUP_ALL = 0;
int IP_CONST_ALIGNMENTGROUP_NEUTRAL = 1;
int IP_CONST_ALIGNMENTGROUP_LAWFUL = 2;
int IP_CONST_ALIGNMENTGROUP_CHAOTIC = 3;
int IP_CONST_ALIGNMENTGROUP_GOOD = 4;
int IP_CONST_ALIGNMENTGROUP_EVIL = 5;
int IP_CONST_ALIGNMENT_LG = 0;
int IP_CONST_ALIGNMENT_LN = 1;
int IP_CONST_ALIGNMENT_LE = 2;
int IP_CONST_ALIGNMENT_NG = 3;
int IP_CONST_ALIGNMENT_TN = 4;
***************
*** 4413,4434 ****
--- 4562,4593 ----
int IP_CONST_FEAT_WHIRLWIND = 29;
int IP_CONST_FEAT_RAPID_SHOT = 30;
int IP_CONST_FEAT_HIDE_IN_PLAIN_SIGHT = 31;
int IP_CONST_FEAT_SNEAK_ATTACK_1D6 = 32;
int IP_CONST_FEAT_SNEAK_ATTACK_2D6 = 33;
int IP_CONST_FEAT_SNEAK_ATTACK_3D6 = 34;
int IP_CONST_FEAT_SHIELD_PROFICIENCY = 35;
int IP_CONST_FEAT_USE_POISON = 36;
int IP_CONST_FEAT_DISARM_WHIP = 37;
int IP_CONST_FEAT_WEAPON_PROF_CREATURE = 38;
int IP_CONST_FEAT_SNEAK_ATTACK_5D6 = 39;
+ int IP_CONST_FEAT_PLAYER_TOOL_01 = 53;
+ int IP_CONST_FEAT_PLAYER_TOOL_02 = 54;
+ int IP_CONST_FEAT_PLAYER_TOOL_03 = 55;
+ int IP_CONST_FEAT_PLAYER_TOOL_04 = 56;
+ int IP_CONST_FEAT_PLAYER_TOOL_05 = 57;
+ int IP_CONST_FEAT_PLAYER_TOOL_06 = 58;
+ int IP_CONST_FEAT_PLAYER_TOOL_07 = 59;
+ int IP_CONST_FEAT_PLAYER_TOOL_08 = 60;
+ int IP_CONST_FEAT_PLAYER_TOOL_09 = 61;
+ int IP_CONST_FEAT_PLAYER_TOOL_10 = 62;
int IP_CONST_IMMUNITYMISC_BACKSTAB = 0;
int IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN = 1;
int IP_CONST_IMMUNITYMISC_MINDSPELLS = 2;
int IP_CONST_IMMUNITYMISC_POISON = 3;
int IP_CONST_IMMUNITYMISC_DISEASE = 4;
int IP_CONST_IMMUNITYMISC_FEAR = 5;
int IP_CONST_IMMUNITYMISC_KNOCKDOWN = 6;
int IP_CONST_IMMUNITYMISC_PARALYSIS = 7;
int IP_CONST_IMMUNITYMISC_CRITICAL_HITS = 8;
int IP_CONST_IMMUNITYMISC_DEATH_MAGIC = 9;
int IP_CONST_LIGHTBRIGHTNESS_DIM = 1;
***************
*** 4684,4705 ****
--- 4843,4880 ----
int IP_CONST_ONHIT_CASTSPELL_DEAFENING_CLNG = 137;
int IP_CONST_ONHIT_CASTSPELL_KNOCKDOWN = 138;
int IP_CONST_ONHIT_CASTSPELL_FREEZE = 139;
int IP_CONST_ONHIT_CASTSPELL_COMBUST = 140;
int IP_CONST_POISON_1D2_STRDAMAGE = 0;
int IP_CONST_POISON_1D2_DEXDAMAGE = 1;
int IP_CONST_POISON_1D2_CONDAMAGE = 2;
int IP_CONST_POISON_1D2_INTDAMAGE = 3;
int IP_CONST_POISON_1D2_WISDAMAGE = 4;
int IP_CONST_POISON_1D2_CHADAMAGE = 5;
+ int IP_CONST_QUALITY_UNKOWN = 0;
+ int IP_CONST_QUALITY_DESTROYED = 1;
+ int IP_CONST_QUALITY_RUINED = 2;
+ int IP_CONST_QUALITY_VERY_POOR = 3;
+ int IP_CONST_QUALITY_POOR = 4;
+ int IP_CONST_QUALITY_BELOW_AVERAGE = 5;
+ int IP_CONST_QUALITY_AVERAGE = 6;
+ int IP_CONST_QUALITY_ABOVE_AVERAGE = 7;
+ int IP_CONST_QUALITY_GOOD = 8;
+ int IP_CONST_QUALITY_VERY_GOOD = 9;
+ int IP_CONST_QUALITY_EXCELLENT = 10;
+ int IP_CONST_QUALITY_MASTERWORK = 11;
+ int IP_CONST_QUALITY_GOD_LIKE = 12;
+ int IP_CONST_QUALITY_RAW = 13;
+ int IP_CONST_QUALITY_CUT = 14;
+ int IP_CONST_QUALITY_POLISHED = 15;
int IP_CONST_CONTAINERWEIGHTRED_20_PERCENT = 1;
int IP_CONST_CONTAINERWEIGHTRED_40_PERCENT = 2;
int IP_CONST_CONTAINERWEIGHTRED_60_PERCENT = 3;
int IP_CONST_CONTAINERWEIGHTRED_80_PERCENT = 4;
int IP_CONST_CONTAINERWEIGHTRED_100_PERCENT = 5;
int IP_CONST_DAMAGERESIST_5 = 1;
int IP_CONST_DAMAGERESIST_10 = 2;
int IP_CONST_DAMAGERESIST_15 = 3;
int IP_CONST_DAMAGERESIST_20 = 4;
int IP_CONST_DAMAGERESIST_25 = 5;
int IP_CONST_DAMAGERESIST_30 = 6;
***************
*** 5507,5528 ****
--- 5682,5704 ----
int FOOTSTEP_TYPE_BEETLE = 6;
int FOOTSTEP_TYPE_SPIDER = 7;
int FOOTSTEP_TYPE_SKELETON = 8;
int FOOTSTEP_TYPE_LEATHER_WING = 9;
int FOOTSTEP_TYPE_FEATHER_WING = 10;
//int FOOTSTEP_TYPE_LIZARD = 11; // Was not ever used/fully implemented.
int FOOTSTEP_TYPE_NONE = 12;
int FOOTSTEP_TYPE_SEAGULL = 13;
int FOOTSTEP_TYPE_SHARK = 14;
int FOOTSTEP_TYPE_WATER_NORMAL = 15;
int FOOTSTEP_TYPE_WATER_LARGE = 16;
+ int FOOTSTEP_TYPE_HORSE = 17;
int FOOTSTEP_TYPE_DEFAULT = 65535;
// these constants must match those in the WingModel.2da
int CREATURE_WING_TYPE_NONE = 0;
int CREATURE_WING_TYPE_DEMON = 1;
int CREATURE_WING_TYPE_ANGEL = 2;
int CREATURE_WING_TYPE_BAT = 3;
int CREATURE_WING_TYPE_DRAGON = 4;
int CREATURE_WING_TYPE_BUTTERFLY = 5;
int CREATURE_WING_TYPE_BIRD = 6;
***************
*** 5550,5571 ****
--- 5726,5752 ----
int CREATURE_PART_RIGHT_SHOULDER = 14;
int CREATURE_PART_LEFT_SHOULDER = 15;
int CREATURE_PART_RIGHT_HAND = 16;
int CREATURE_PART_LEFT_HAND = 17;
int CREATURE_PART_HEAD = 20;
int CREATURE_MODEL_TYPE_NONE = 0;
int CREATURE_MODEL_TYPE_SKIN = 1;
int CREATURE_MODEL_TYPE_TATTOO = 2;
int CREATURE_MODEL_TYPE_UNDEAD = 255;
+ int COLOR_CHANNEL_SKIN = 0;
+ int COLOR_CHANNEL_HAIR = 1;
+ int COLOR_CHANNEL_TATTOO_1 = 2;
+ int COLOR_CHANNEL_TATTOO_2 = 3;
+
// The following resrefs must match those in the tileset's set file.
string TILESET_RESREF_BEHOLDER_CAVES = "tib01";
string TILESET_RESREF_CASTLE_INTERIOR = "tic01";
string TILESET_RESREF_CITY_EXTERIOR = "tcn01";
string TILESET_RESREF_CITY_INTERIOR = "tin01";
string TILESET_RESREF_CRYPT = "tdc01";
string TILESET_RESREF_DESERT = "ttd01";
string TILESET_RESREF_DROW_INTERIOR = "tid01";
string TILESET_RESREF_DUNGEON = "tde01";
string TILESET_RESREF_FOREST = "ttf01";
string TILESET_RESREF_FROZEN_WASTES = "tti01";
***************
*** 5984,6007 ****
string GetStringLeft(string sString, int nCount);
// Insert sString into sDestination at nPosition
// * Return value on error: ""
string InsertString(string sDestination, string sString, int nPosition);
// Get nCount characters from sString, starting at nStart
// * Return value on error: ""
string GetSubString(string sString, int nStart, int nCount);
// Find the position of sSubstring inside sString
// * Return value on error: -1
! int FindSubString(string sString, string sSubString);
// math operations
// Maths operation: absolute value of fValue
float fabs(float fValue);
// Maths operation: cosine of fValue
float cos(float fValue);
// Maths operation: sine of fValue
float sin(float fValue);
--- 6165,6189 ----
string GetStringLeft(string sString, int nCount);
// Insert sString into sDestination at nPosition
// * Return value on error: ""
string InsertString(string sDestination, string sString, int nPosition);
// Get nCount characters from sString, starting at nStart
// * Return value on error: ""
string GetSubString(string sString, int nStart, int nCount);
// Find the position of sSubstring inside sString
+ // - nStart: The character position to start searching at (from the left end of the string).
// * Return value on error: -1
! int FindSubString(string sString, string sSubString, int nStart=0);
// math operations
// Maths operation: absolute value of fValue
float fabs(float fValue);
// Maths operation: cosine of fValue
float cos(float fValue);
// Maths operation: sine of fValue
float sin(float fValue);
***************
*** 6713,6736 ****
// good/evil alignment values in the direction which is towards neutrality.
// e.g. If oSubject has a law/chaos value of 10 (i.e. chaotic) and a
// good/evil value of 80 (i.e. good) then if nShift is 15, the
// law/chaos value will become (10+15)=25 and the good/evil value will
// become (80-25)=55
// Furthermore, the shift will at most take the alignment value to 50 and
// not beyond.
// e.g. If oSubject has a law/chaos value of 40 and a good/evil value of 70,
// then if nShift is 15, the law/chaos value will become 50 and the
// good/evil value will become 55
// - nShift: this is the desired shift in alignment
// * No return value
! void AdjustAlignment(object oSubject, int nAlignment, int nShift);
// Do nothing for fSeconds seconds.
void ActionWait(float fSeconds);
// Set the transition bitmap of a player; this should only be called in area
// transition scripts. This action should be run by the person "clicking" the
// area transition via AssignCommand.
// - nPredefinedAreaTransition:
// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_*
// -> To use a custom, user-defined area transition bitmap, use
// AREA_TRANSITION_USER_DEFINED and specify the filename in the second
--- 6895,6921 ----
// good/evil alignment values in the direction which is towards neutrality.
// e.g. If oSubject has a law/chaos value of 10 (i.e. chaotic) and a
// good/evil value of 80 (i.e. good) then if nShift is 15, the
// law/chaos value will become (10+15)=25 and the good/evil value will
// become (80-25)=55
// Furthermore, the shift will at most take the alignment value to 50 and
// not beyond.
// e.g. If oSubject has a law/chaos value of 40 and a good/evil value of 70,
// then if nShift is 15, the law/chaos value will become 50 and the
// good/evil value will become 55
// - nShift: this is the desired shift in alignment
+ // - bAllPartyMembers: when TRUE the alignment shift of oSubject also has a
+ // diminished affect all members of oSubject's party (if oSubject is a Player).
+ // When FALSE the shift only affects oSubject.
// * No return value
! void AdjustAlignment(object oSubject, int nAlignment, int nShift, int bAllPartyMembers=TRUE);
// Do nothing for fSeconds seconds.
void ActionWait(float fSeconds);
// Set the transition bitmap of a player; this should only be called in area
// transition scripts. This action should be run by the person "clicking" the
// area transition via AssignCommand.
// - nPredefinedAreaTransition:
// -> To use a predefined area transition bitmap, use one of AREA_TRANSITION_*
// -> To use a custom, user-defined area transition bitmap, use
// AREA_TRANSITION_USER_DEFINED and specify the filename in the second
***************
*** 10474,10485 ****
// Change the portrait of oTarget to use the Portrait ResRef specified.
// - oTarget: the object for which you are changing the portrait.
// - sPortraitResRef: The ResRef of the new portrait to use.
// The ResRef should not include any trailing size letter ( e.g. po_el_f_09_ ).
// Note: Not all portrait ResRefs are suitable for use with all object types.
// Setting the portrait ResRef will also cause the portrait Id
// to be set to PORTRAIT_INVALID.
void SetPortraitResRef(object oTarget, string sPortraitResRef);
// Set oPlaceable's useable object status.
// Note: Only works on non-static placeables.
! void SetUseableFlag(object oPlaceable, int nUseableFlag);
--- 10659,10776 ----
// Change the portrait of oTarget to use the Portrait ResRef specified.
// - oTarget: the object for which you are changing the portrait.
// - sPortraitResRef: The ResRef of the new portrait to use.
// The ResRef should not include any trailing size letter ( e.g. po_el_f_09_ ).
// Note: Not all portrait ResRefs are suitable for use with all object types.
// Setting the portrait ResRef will also cause the portrait Id
// to be set to PORTRAIT_INVALID.
void SetPortraitResRef(object oTarget, string sPortraitResRef);
// Set oPlaceable's useable object status.
// Note: Only works on non-static placeables.
! void SetUseableFlag(object oPlaceable, int nUseableFlag);
!
! // Get the description of oObject.
! // - oObject: the object from which you are obtaining the description.
! // Can be a creature, item, placeable, door, trigger or module object.
! // - bOriginalDescription: if set to true any new description specified via a SetDescription scripting command
! // is ignored and the original object's description is returned instead.
! // - bIdentified: If oObject is an item, setting this to TRUE will return the identified description,
! // setting this to FALSE will return the unidentified description. This flag has no
! // effect on objects other than items.
! string GetDescription(object oObject, int bOriginalDescription=FALSE, int bIdentifiedDescription=TRUE);
!
! // Set the description of oObject.
! // - oObject: the object for which you are changing the description
! // Can be a creature, placeable, item, door, or trigger.
! // - sNewDescription: the new description that the object will use.
! // - bIdentified: If oObject is an item, setting this to TRUE will set the identified description,
! // setting this to FALSE will set the unidentified description. This flag has no
! // effect on objects other than items.
! // Note: Setting an object's description to "" will make the object
! // revert to using the description it originally had before any
! // SetDescription() calls were made on the object.
! void SetDescription(object oObject, string sNewDescription="", int bIdentifiedDescription=TRUE);
!
! // Get the PC that sent the last player chat(text) message.
! // Should only be called from a module's OnPlayerChat event script.
! // * Returns OBJECT_INVALID on error.
! // Note: Private tells do not trigger a OnPlayerChat event.
! object GetPCChatSpeaker();
!
! // Get the last player chat(text) message that was sent.
! // Should only be called from a module's OnPlayerChat event script.
! // * Returns empty string "" on error.
! // Note: Private tells do not trigger a OnPlayerChat event.
! string GetPCChatMessage();
!
! // Get the volume of the last player chat(text) message that was sent.
! // Returns one of the following TALKVOLUME_* constants based on the volume setting
! // that the player used to send the chat message.
! // TALKVOLUME_TALK
! // TALKVOLUME_WHISPER
! // TALKVOLUME_SHOUT
! // TALKVOLUME_SILENT_SHOUT (used for DM chat channel)
! // TALKVOLUME_PARTY
! // Should only be called from a module's OnPlayerChat event script.
! // * Returns -1 on error.
! // Note: Private tells do not trigger a OnPlayerChat event.
! int GetPCChatVolume();
!
! // Set the last player chat(text) message before it gets sent to other players.
! // - sNewChatMessage: The new chat text to be sent onto other players.
! // Setting the player chat message to an empty string "",
! // will cause the chat message to be discarded
! // (i.e. it will not be sent to other players).
! // Note: The new chat message gets sent after the OnPlayerChat script exits.
! void SetPCChatMessage(string sNewChatMessage="");
!
! // Set the last player chat(text) volume before it gets sent to other players.
! // - nTalkVolume: The new volume of the chat text to be sent onto other players.
! // TALKVOLUME_TALK
! // TALKVOLUME_WHISPER
! // TALKVOLUME_SHOUT
! // TALKVOLUME_SILENT_SHOUT (used for DM chat channel)
! // TALKVOLUME_PARTY
! // TALKVOLUME_TELL (sends the chat message privately back to the original speaker)
! // Note: The new chat message gets sent after the OnPlayerChat script exits.
! void SetPCChatVolume(int nTalkVolume=TALKVOLUME_TALK);
!
! // Get the Color of oObject from the color channel specified.
! // - oObject: the object from which you are obtaining the color.
! // Can be a creature that has color information (i.e. the playable races).
! // - nColorChannel: The color channel that you want to get the color value of.
! // COLOR_CHANNEL_SKIN
! // COLOR_CHANNEL_HAIR
! // COLOR_CHANNEL_TATTOO_1
! // COLOR_CHANNEL_TATTOO_2
! // * Returns -1 on error.
! int GetColor(object oObject, int nColorChannel);
!
! // Set the color channel of oObject to the color specified.
! // - oObject: the object for which you are changing the color.
! // Can be a creature that has color information (i.e. the playable races).
! // - nColorChannel: The color channel that you want to set the color value of.
! // COLOR_CHANNEL_SKIN
! // COLOR_CHANNEL_HAIR
! // COLOR_CHANNEL_TATTOO_1
! // COLOR_CHANNEL_TATTOO_2
! // - nColorValue: The color you want to set (0-175).
! void SetColor(object oObject, int nColorChannel, int nColorValue);
!
! // Returns Item property Material. You need to specify the Material Type.
! // - nMasterialType: The Material Type should be a positive integer between 0 and 77 (see iprp_matcost.2da).
! // Note: The Material Type property will only affect the cost of the item if you modify the cost in the iprp_matcost.2da.
! itemproperty ItemPropertyMaterial(int nMaterialType);
!
! // Returns Item property Quality. You need to specify the Quality.
! // - nQuality: The Quality of the item property to create (see iprp_qualcost.2da).
! // IP_CONST_QUALITY_*
! // Note: The quality property will only affect the cost of the item if you modify the cost in the iprp_qualcost.2da.
! itemproperty ItemPropertyQuality(int nQuality);
!
! // Returns a generic Additional Item property. You need to specify the Additional property.
! // - nProperty: The item property to create (see iprp_addcost.2da).
! // IP_CONST_ADDITIONAL_*
! // Note: The additional property only affects the cost of the item if you modify the cost in the iprp_addcost.2da.
! itemproperty ItemPropertyAdditional(int nAdditionalProperty);
!
*** x0_ch_hen_combat.nss Mon Aug 04 20:20:45 2008 ***not in prc***
--- x0_ch_hen_combat.nss Mon Aug 04 20:18:14 2008
***************
*** 2,27 ****
--- 2,39 ----
//:: Associate: End of Combat End
//:: NW_CH_AC3
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Calls the end of combat script every round
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Oct 16, 2001
//:://////////////////////////////////////////////
+ //:://////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified On: Jan 16th, 2008
+ //:: Added Support for Mounted Combat Feat Support
+ //:://////////////////////////////////////////////
#include "x0_inc_henai"
void main()
{
+ if (!GetLocalInt(GetModule(),"X3_NO_MOUNTED_COMBAT_FEAT"))
+ { // set variables on target for mounted combat
+ DeleteLocalInt(OBJECT_SELF,"bX3_LAST_ATTACK_PHYSICAL");
+ DeleteLocalInt(OBJECT_SELF,"nX3_HP_BEFORE");
+ DeleteLocalInt(OBJECT_SELF,"bX3_ALREADY_MOUNTED_COMBAT");
+ } // set variables on target for mounted combat
+
if(!GetSpawnInCondition(NW_FLAG_SET_WARNINGS))
{
HenchmenCombatRound(OBJECT_INVALID);
}
if(GetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(1003));
}
*** x0_ch_hen_death.nss Mon Aug 04 20:20:45 2008 ***not in prc***
--- x0_ch_hen_death.nss Mon Aug 04 20:18:14 2008
***************
*** 3,29 ****
--- 3,42 ----
//:: Copyright (c) 2002 Floodgate Entertainment
//:://////////////////////////////////////////////////
/*
OnDeath handler for henchmen ONLY. Causes them to respawn at
(in order of preference) the respawn point of their master
or their own starting location.
*/
//:://////////////////////////////////////////////////
//:: Created By: Naomi Novik
//:: Created On: 10/09/2002
//:://////////////////////////////////////////////////
+ //:://////////////////////////////////////////////////
+ //:: Modified By: Bob Minors
+ //:: Modified On: Jan 12th, 2008
+ //:: Added Support for Dying While Mounted
+ //:: Modified By: Deva Winblood
+ //:: Modified On: April 17th, 2008
+ //:: Fixes for henchmen mounts being lost
+ //:://///////////////////////////////////////////////
#include "x0_i0_henchman"
+ #include "x3_inc_horse"
void main()
{
+ SetLocalString(OBJECT_SELF,"sX3_DEATH_SCRIPT","x0_ch_hen_death");
+ if (HorseHandleDeath()) return;
+ DeleteLocalString(OBJECT_SELF,"sX3_DEATH_SCRIPT");
+
// Handle a bunch of stuff to keep us from running around,
// dying again, etc.
PreRespawnSetup();
// Call for healing
DelayCommand(0.5, VoiceHealMe(TRUE));
// Get our last master
object oPC = GetLastMaster();
object oSelf = OBJECT_SELF;
*** x0_i0_spells.nss Mon Aug 04 20:22:29 2008 *** modified prc script ***
--- x0_i0_spells.nss Mon Aug 04 20:18:14 2008
***************
*** 678,700 ****
*/
int nEnemies = 0;
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lTarget, TRUE, OBJECT_TYPE_CREATURE);
//Cycle through the targets within the spell shape until an invalid object is captured.
while (GetIsObjectValid(oTarget) )
{
// * caster cannot be harmed by this spell
if (spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF) && (oTarget != OBJECT_SELF))
{
// GZ: You can only fire missiles on visible targets
! if (GetObjectSeen(oTarget,OBJECT_SELF))
{
nEnemies++;
}
}
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lTarget, TRUE, OBJECT_TYPE_CREATURE);
}
if (nEnemies == 0) return; // * Exit if no enemies to hit
int nExtraMissiles = nMissiles / nEnemies;
// April 2003
--- 678,703 ----
*/
int nEnemies = 0;
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lTarget, TRUE, OBJECT_TYPE_CREATURE);
//Cycle through the targets within the spell shape until an invalid object is captured.
while (GetIsObjectValid(oTarget) )
{
// * caster cannot be harmed by this spell
if (spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF) && (oTarget != OBJECT_SELF))
{
// GZ: You can only fire missiles on visible targets
! // If the firing object is a placeable (such as a projectile trap),
! // we skip the line of sight check as placeables can't "see" things.
! if ( ( GetObjectType(OBJECT_SELF) == OBJECT_TYPE_PLACEABLE ) ||
! GetObjectSeen(oTarget,OBJECT_SELF))
{
nEnemies++;
}
}
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lTarget, TRUE, OBJECT_TYPE_CREATURE);
}
if (nEnemies == 0) return; // * Exit if no enemies to hit
int nExtraMissiles = nMissiles / nEnemies;
// April 2003
***************
*** 711,733 ****
if (nExtraMissiles >0)
nRemainder = nMissiles % nEnemies;
if (nEnemies > nMissiles)
nEnemies = nMissiles;
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lTarget, TRUE, OBJECT_TYPE_CREATURE);
//Cycle through the targets within the spell shape until an invalid object is captured.
while (GetIsObjectValid(oTarget) && nCnt <= nEnemies)
{
// * caster cannot be harmed by this spell
! if (spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF) && (oTarget != OBJECT_SELF) && (GetObjectSeen(oTarget,OBJECT_SELF)))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nSpell));
// * recalculate appropriate distances
fDist = GetDistanceBetween(OBJECT_SELF, oTarget);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
// Firebrand.
// It means that once the target has taken damage this round from the
// spell it won't take subsequent damage
--- 714,739 ----
if (nExtraMissiles >0)
nRemainder = nMissiles % nEnemies;
if (nEnemies > nMissiles)
nEnemies = nMissiles;
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lTarget, TRUE, OBJECT_TYPE_CREATURE);
//Cycle through the targets within the spell shape until an invalid object is captured.
while (GetIsObjectValid(oTarget) && nCnt <= nEnemies)
{
// * caster cannot be harmed by this spell
! if (spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF) &&
! (oTarget != OBJECT_SELF) &&
! (( GetObjectType(OBJECT_SELF) == OBJECT_TYPE_PLACEABLE ) ||
! (GetObjectSeen(oTarget,OBJECT_SELF))))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nSpell));
// * recalculate appropriate distances
fDist = GetDistanceBetween(OBJECT_SELF, oTarget);
fDelay = fDist/(3.0 * log(fDist) + 2.0);
// Firebrand.
// It means that once the target has taken damage this round from the
// spell it won't take subsequent damage
***************
*** 926,989 ****
--- 932,1009 ----
int CanCreatureBeDestroyed(object oTarget)
{
if (GetPlotFlag(oTarget) == FALSE && GetImmortal(oTarget) == FALSE)
{
return TRUE;
}
return FALSE;
}
//*GZ: 2003-07-23. honor critical and weapon spec
+ // Updated: 02/14/2008 CraigW - Added support for Epic Weapon Specialization.
// nCrit -
int ArcaneArcherDamageDoneByBow(int bCrit = FALSE, object oUser = OBJECT_SELF)
{
object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND);
int nDamage;
int bSpec = FALSE;
+ int bEpicSpecialization = FALSE;
if (GetIsObjectValid(oItem) == TRUE)
{
if (GetBaseItemType(oItem) == BASE_ITEM_LONGBOW )
{
nDamage = d8();
if (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_LONGBOW,oUser))
{
bSpec = TRUE;
}
+ if (GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_LONGBOW,oUser))
+ {
+ bEpicSpecialization = TRUE;
+ }
}
else
if (GetBaseItemType(oItem) == BASE_ITEM_SHORTBOW)
{
nDamage = d6();
if (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_SHORTBOW,oUser))
{
bSpec = TRUE;
}
+ if (GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_SHORTBOW,oUser))
+ {
+ bEpicSpecialization = TRUE;
+ }
}
else
return 0;
}
else
{
return 0;
}
// add strength bonus
int nStrength = GetAbilityModifier(ABILITY_STRENGTH,oUser);
nDamage += nStrength;
if (bSpec == TRUE)
{
nDamage +=2;
+ }
+ if ( bEpicSpecialization == TRUE )
+ {
+ nDamage +=4;
}
if (bCrit == TRUE)
{
nDamage *=3;
}
return nDamage;
}
//*GZ: 2003-07-23. Properly calculated enhancement bonus
int ArcaneArcherCalculateBonus()
*** x0_inc_henai.nss Mon Aug 04 20:22:29 2008 **not in prc***
--- x0_inc_henai.nss Mon Aug 04 20:18:14 2008
***************
*** 26,47 ****
--- 26,50 ----
-=-=-=-=-=-=-
MODIFICATIONS
-=-=-=-=-=-=-
// * BK Feb 6 2003
// * Put a check in so that when a henchmen who cannot disarm a trap
// * sees a trap they do not repeat their voiceover forever
+ // * Deva Winblood Feb 22nd, 2008
+ // * Made the Open Inventory Radial work with horses with Saddlebags
+
*/
//:://////////////////////////////////////////////
//:: Created By:
//:: Created On:
//:://////////////////////////////////////////////
// #include "nw_i0_generic" //...and through this also x0_inc_generic
#include "x0_i0_henchman"
***************
*** 670,693 ****
}
else
if (GetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING") == 0)
{
// SpeakString("Was in casting mode. Switching to NO cast mode");
SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10);
VoiceCanDo();
}
break;
}
case ASSOCIATE_COMMAND_INVENTORY:
// feb 18. You are now allowed to access inventory during combat.
! if (nBanInventory == TRUE)
{
SpeakStringByStrRef(9066);
}
else
{
// * cannot modify disabled equipment
if (GetLocalInt(OBJECT_SELF, "X2_JUST_A_DISABLEEQUIP") == FALSE)
{
OpenInventory(OBJECT_SELF, oShouter);
}
else
--- 673,700 ----
}
else
if (GetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING") == 0)
{
// SpeakString("Was in casting mode. Switching to NO cast mode");
SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10);
VoiceCanDo();
}
break;
}
case ASSOCIATE_COMMAND_INVENTORY:
+ if (GetLocalInt(OBJECT_SELF,"bX3_HAS_SADDLEBAGS")&&GetLocalInt(GetModule(),"X3_HORSE_ENABLE_SADDLEBAGS")&&GetMaster(OBJECT_SELF)==oShouter)
+ { // open horse saddlebags
+ OpenInventory(OBJECT_SELF, oShouter);
+ } // open horse saddlebags
// feb 18. You are now allowed to access inventory during combat.
! else if (nBanInventory == TRUE)
{
SpeakStringByStrRef(9066);
}
else
{
// * cannot modify disabled equipment
if (GetLocalInt(OBJECT_SELF, "X2_JUST_A_DISABLEEQUIP") == FALSE)
{
OpenInventory(OBJECT_SELF, oShouter);
}
else
*** x0_s0_gustwind.nss Mon Aug 04 20:20:59 2008 *** prc script modified ***
--- x0_s0_gustwind.nss Mon Aug 04 20:18:14 2008
***************
*** 34,55 ****
--- 34,56 ----
if (!X2PreSpellCastCode())
{
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
return;
}
// End of Spell Cast Hook
//Declare major variables
+ string sAOETag;
object oCaster = OBJECT_SELF;
int nCasterLvl = GetCasterLevel(oCaster);
int nMetaMagic = GetMetaMagicFeat();
int nDamage;
float fDelay;
effect eExplode = EffectVisualEffect(VFX_FNF_LOS_NORMAL_20);
effect eVis = EffectVisualEffect(VFX_IMP_PULSE_WIND);
// effect eDam;
//Get the spell target location as opposed to the spell target.
location lTarget = GetSpellTargetLocation();
***************
*** 58,81 ****
--- 59,93 ----
//Declare the spell shape, size and the location. Capture the first target object in the shape.
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_AREA_OF_EFFECT);
//Cycle through the targets within the spell shape until an invalid object is captured.
while (GetIsObjectValid(oTarget))
{
if (GetObjectType(oTarget) == OBJECT_TYPE_AREA_OF_EFFECT)
{
+ // Gust of wind should only destroy "cloud/fog like" area of effect spells.
+ sAOETag = GetTag(oTarget);
+ if ( sAOETag == "VFX_PER_FOGACID" ||
+ sAOETag == "VFX_PER_FOGKILL" ||
+ sAOETag == "VFX_PER_FOGBEWILDERMENT" ||
+ sAOETag == "VFX_PER_FOGSTINK" ||
+ sAOETag == "VFX_PER_FOGFIRE" ||
+ sAOETag == "VFX_PER_FOGMIND" ||
+ sAOETag == "VFX_PER_CREEPING_DOOM")
+ {
DestroyObject(oTarget);
}
+ }
else
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
{
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId()));
//Get the distance between the explosion and the target to calculate delay
fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
// * unlocked doors will reverse their open state
if (GetObjectType(oTarget) == OBJECT_TYPE_DOOR)
*** x0_s0_udetfoe.nss Mon Aug 04 20:21:01 2008 *** modified prc script***
--- x0_s0_udetfoe.nss Mon Aug 04 20:18:14 2008
***************
*** 19,41 ****
#include "x2_inc_spellhook"
void GrantProtection(object oTarget)
{
effect eVis = EffectVisualEffect(VFX_IMP_HOLY_AID);
effect eNeg = EffectDamageImmunityIncrease(DAMAGE_TYPE_NEGATIVE, 100);
effect eLevel = EffectImmunity(IMMUNITY_TYPE_NEGATIVE_LEVEL);
effect eAbil = EffectImmunity(IMMUNITY_TYPE_ABILITY_DECREASE);
effect ePoison = EffectImmunity(IMMUNITY_TYPE_POISON);
effect eDisease = EffectImmunity(IMMUNITY_TYPE_DISEASE);
! effect eAC = EffectACIncrease(4);
int nDuration = GetCasterLevel(OBJECT_SELF);
int nMetaMagic = GetMetaMagicFeat();
//Enter Metamagic conditions
if (nMetaMagic == METAMAGIC_EXTEND)
{
nDuration = nDuration *2; //Duration is +100%
}
//Link Effects
--- 19,41 ----
#include "x2_inc_spellhook"
void GrantProtection(object oTarget)
{
effect eVis = EffectVisualEffect(VFX_IMP_HOLY_AID);
effect eNeg = EffectDamageImmunityIncrease(DAMAGE_TYPE_NEGATIVE, 100);
effect eLevel = EffectImmunity(IMMUNITY_TYPE_NEGATIVE_LEVEL);
effect eAbil = EffectImmunity(IMMUNITY_TYPE_ABILITY_DECREASE);
effect ePoison = EffectImmunity(IMMUNITY_TYPE_POISON);
effect eDisease = EffectImmunity(IMMUNITY_TYPE_DISEASE);
! effect eAC = EffectACIncrease(4,AC_DEFLECTION_BONUS);
int nDuration = GetCasterLevel(OBJECT_SELF);
int nMetaMagic = GetMetaMagicFeat();
//Enter Metamagic conditions
if (nMetaMagic == METAMAGIC_EXTEND)
{
nDuration = nDuration *2; //Duration is +100%
}
//Link Effects
*** x0_s2_harpsmile.nss Mon Aug 04 20:21:02 2008 *** not in prc***
--- x0_s2_harpsmile.nss Mon Aug 04 20:18:14 2008
***************
*** 16,38 ****
// Epic Level progession
//:://////////////////////////////////////////////
#include "nw_i0_spells"
void main()
{
//Declare major variables
object oTarget = GetSpellTargetObject();
int nDuration = 5;
int nAmount = 2;
// epic level progression
! int nLevel = GetLevelByClass(CLASS_TYPE_DIVINECHAMPION,oTarget) ;
int nLevelB = (nLevel / 3)-1;
if (nLevelB <0)
{
nLevelB =0;
}
nAmount += (nLevelB*2); // +2 to saves every 3 levels past 3
effect eSaving = EffectSavingThrowIncrease(SAVING_THROW_ALL, nAmount, SAVING_THROW_TYPE_ALL);
effect eDur = EffectVisualEffect(VFX_DUR_PROTECTION_ELEMENTS);
effect eVis = EffectVisualEffect(VFX_IMP_ELEMENTAL_PROTECTION);
--- 16,38 ----
// Epic Level progession
//:://////////////////////////////////////////////
#include "nw_i0_spells"
void main()
{
//Declare major variables
object oTarget = GetSpellTargetObject();
int nDuration = 5;
int nAmount = 2;
// epic level progression
! int nLevel = GetLevelByClass(CLASS_TYPE_HARPER,oTarget) ;
int nLevelB = (nLevel / 3)-1;
if (nLevelB <0)
{
nLevelB =0;
}
nAmount += (nLevelB*2); // +2 to saves every 3 levels past 3
effect eSaving = EffectSavingThrowIncrease(SAVING_THROW_ALL, nAmount, SAVING_THROW_TYPE_ALL);
effect eDur = EffectVisualEffect(VFX_DUR_PROTECTION_ELEMENTS);
effect eVis = EffectVisualEffect(VFX_IMP_ELEMENTAL_PROTECTION);
*** x1_s1_eyebray.nss Mon Aug 04 20:22:29 2008 *** not in prc***
--- x1_s1_eyebray.nss Mon Aug 04 20:18:14 2008
***************
*** 22,46 ****
int nLevel = GetHitDice(OBJECT_SELF);
int nCount = nLevel /5;
if (nCount == 0)
{
nCount =1;
}
int nDamage;
switch (nSpell)
{
! case 710: nDamage = d4(nCount) + (nLevel /2);
! case 711: nDamage = d6(2) + (nCount*2);
! case 712: nDamage = d6(nCount) + (nCount);
}
return nDamage;
}
#include "NW_I0_SPELLS"
void main()
{
//Declare major variables
object oTarget = GetSpellTargetObject();
int nHD = GetHitDice(OBJECT_SELF);
--- 22,52 ----
int nLevel = GetHitDice(OBJECT_SELF);
int nCount = nLevel /5;
if (nCount == 0)
{
nCount =1;
}
int nDamage;
switch (nSpell)
{
! case 710:
! nDamage = d4(nCount) + (nLevel /2);
! break;
! case 711:
! nDamage = d6(2) + (nCount*2);
! break;
! case 712:
! nDamage = d6(nCount) + (nCount);
! break;
}
return nDamage;
}
#include "NW_I0_SPELLS"
void main()
{
//Declare major variables
object oTarget = GetSpellTargetObject();
int nHD = GetHitDice(OBJECT_SELF);
*** x2_ch_summon_sld.nss Mon Aug 04 20:21:09 2008 *** not in prc***
--- x2_ch_summon_sld.nss Mon Aug 04 20:18:14 2008
***************
*** 15,41 ****
//:://////////////////////////////////////////////
//:: Created By: Georg Zoeller
//:: Created On: 2003-07-24
//:://////////////////////////////////////////////
#include "X0_INC_HENAI"
#include "X2_INC_SUMMSCALE"
void DoScaleESL(object oSelf)
{
! if (GetStringLowerCase(GetTag(OBJECT_SELF))== "x2_s_eshadlord")
{
SSMScaleEpicShadowLord(oSelf);
}
! else if (GetStringLowerCase(GetTag(OBJECT_SELF))== "x2_s_vrock")
{
SSMScaleEpicFiendishServant(oSelf);
}
}
void main()
{
//Sets up the special henchmen listening patterns
SetAssociateListenPatterns();
// Set additional henchman listening patterns
bkSetListeningPatterns();
--- 15,49 ----
//:://////////////////////////////////////////////
//:: Created By: Georg Zoeller
//:: Created On: 2003-07-24
//:://////////////////////////////////////////////
#include "X0_INC_HENAI"
#include "X2_INC_SUMMSCALE"
void DoScaleESL(object oSelf)
{
! if (GetStringLowerCase(GetTag(oSelf))== "x2_s_eshadlord")
{
SSMScaleEpicShadowLord(oSelf);
+
+ // Epic Shadow Lord is incorporeal and gets a concealment bonus.
+ effect eConceal = EffectConcealment(50, MISS_CHANCE_TYPE_NORMAL);
+ eConceal = ExtraordinaryEffect(eConceal);
+ effect eGhost = EffectCutsceneGhost();
+ eGhost = ExtraordinaryEffect(eGhost);
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT, eConceal, oSelf);
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, oSelf);
}
! else if (GetStringLowerCase(GetTag(oSelf))== "x2_s_vrock")
{
SSMScaleEpicFiendishServant(oSelf);
}
}
void main()
{
//Sets up the special henchmen listening patterns
SetAssociateListenPatterns();
// Set additional henchman listening patterns
bkSetListeningPatterns();
*** x2_def_spawn.nss Mon Aug 04 20:21:22 2008 *** not in prc ***
--- x2_def_spawn.nss Mon Aug 04 20:18:14 2008
***************
*** 9,51 ****
--- 9,82 ----
2003-07-28: Georg Zoeller:
If you set a ninteger on the creature named
"X2_USERDEFINED_ONSPAWN_EVENTS"
The creature will fire a pre and a post-spawn
event on itself, depending on the value of that
variable
1 - Fire Userdefined Event 1510 (pre spawn)
2 - Fire Userdefined Event 1511 (post spawn)
3 - Fire both events
+ 2007-12-31: Deva Winblood
+ Modified to look for X3_HORSE_OWNER_TAG and if
+ it is defined look for an NPC with that tag
+ nearby or in the module (checks near first).
+ It will make that NPC this horse's master.
+
*/
//:://////////////////////////////////////////////
//:: Created By: Keith Warner, Georg Zoeller
//:: Created On: June 11/03
//:://////////////////////////////////////////////
const int EVENT_USER_DEFINED_PRESPAWN = 1510;
const int EVENT_USER_DEFINED_POSTSPAWN = 1511;
#include "x2_inc_switches"
void main()
{
+ string sTag;
+ object oNPC;
// User defined OnSpawn event requested?
int nSpecEvent = GetLocalInt(OBJECT_SELF,"X2_USERDEFINED_ONSPAWN_EVENTS");
+
// Pre Spawn Event requested
if (nSpecEvent == 1 || nSpecEvent == 3 )
{
SignalEvent(OBJECT_SELF,EventUserDefined(EVENT_USER_DEFINED_PRESPAWN ));
}
+
+ sTag=GetLocalString(OBJECT_SELF,"X3_HORSE_OWNER_TAG");
+ if (GetStringLength(sTag)>0)
+ { // look for master
+ oNPC=GetNearestObjectByTag(sTag);
+ if (GetIsObjectValid(oNPC)&&GetObjectType(oNPC)==OBJECT_TYPE_CREATURE)
+ { // master found
+ AddHenchman(oNPC);
+ } // master found
+ else
+ { // look in module
+ oNPC=GetObjectByTag(sTag);
+ if (GetIsObjectValid(oNPC)&&GetObjectType(oNPC)==OBJECT_TYPE_CREATURE)
+ { // master found
+ AddHenchman(oNPC);
+ } // master found
+ else
+ { // master does not exist - remove X3_HORSE_OWNER_TAG
+ DeleteLocalString(OBJECT_SELF,"X3_HORSE_OWNER_TAG");
+ } // master does not exist - remove X3_HORSE_OWNER_TAG
+ } // look in module
+ } // look for master
/* Fix for the new golems to reduce their number of attacks */
int nNumber = GetLocalInt(OBJECT_SELF,CREATURE_VAR_NUMBER_OF_ATTACKS);
if (nNumber >0 )
{
SetBaseAttackBonus(nNumber);
}
// Execute default OnSpawn script.
ExecuteScript("nw_c2_default9", OBJECT_SELF);
*** x2_hen_death.nss Mon Aug 04 20:22:29 2008 *** not in prc***
--- x2_hen_death.nss Mon Aug 04 20:18:14 2008
***************
*** 1,15 ****
//::///////////////////////////////////////////////
//:: Henchman Death Script
//::
! //:: NW_CH_AC7.nss
//::
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
//:: <description>
//:://////////////////////////////////////////////
//::
//:: Created By:
//:: Modified by: Brent, April 3 2002
//:: Removed delay in respawning
//:: the henchman - caused bugs
//:: Modified November 14 2002
--- 1,15 ----
//::///////////////////////////////////////////////
//:: Henchman Death Script
//::
! //:: X2_HEN_DEATH.nss
//::
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
//:: <description>
//:://////////////////////////////////////////////
//::
//:: Created By:
//:: Modified by: Brent, April 3 2002
//:: Removed delay in respawning
//:: the henchman - caused bugs
//:: Modified November 14 2002
***************
*** 25,58 ****
Removes all negative effects of a temporary nature
and all permanent effects of a supernatural nature
from the character. Does not remove the effects
relating to Mind-Affecting spells or movement alteration.
Heals target for 5d8 + 1 point per caster level.
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Jan 7, 2002
//:://////////////////////////////////////////////
//:: VFX Pass By: Preston W, On: June 20, 2001
#include "nw_i0_generic"
#include "nw_i0_plot"
#include "x0_i0_henchman"
!
void main()
{
! // * This is used by the advanced henchmen
! // * Let Brent know if it interferes with animal
! // * companions et cetera
!
!
if (GetAssociateType(OBJECT_SELF) == ASSOCIATE_TYPE_HENCHMAN)
{
SetLocalInt(OBJECT_SELF, "X2_L_IJUSTDIED", 10);
SetKilled(GetMaster());
SetDidDie();
object oHench = OBJECT_SELF;
// * Take them out of stealth mode too (Nov 1 - BK)
SetActionMode(oHench, ACTION_MODE_STEALTH, FALSE);
// * Remove invisibility type effects off of henchmen (Nov 7 - BK)
RemoveSpellEffects(SPELL_INVISIBILITY, oHench, oHench);
--- 25,58 ----
Removes all negative effects of a temporary nature
and all permanent effects of a supernatural nature
from the character. Does not remove the effects
relating to Mind-Affecting spells or movement alteration.
Heals target for 5d8 + 1 point per caster level.
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Jan 7, 2002
//:://////////////////////////////////////////////
//:: VFX Pass By: Preston W, On: June 20, 2001
+ //:: Modifications To Support Horses By: Deva Winblood, On: April 17th, 2008
+
#include "nw_i0_generic"
#include "nw_i0_plot"
#include "x0_i0_henchman"
! #include "x3_inc_horse"
void main()
{
! SetLocalString(OBJECT_SELF,"sX3_DEATH_SCRIPT","x2_hen_death");
! if (HorseHandleDeath()) return;
! DeleteLocalString(OBJECT_SELF,"sX3_DEATH_SCRIPT");
if (GetAssociateType(OBJECT_SELF) == ASSOCIATE_TYPE_HENCHMAN)
{
SetLocalInt(OBJECT_SELF, "X2_L_IJUSTDIED", 10);
SetKilled(GetMaster());
SetDidDie();
object oHench = OBJECT_SELF;
// * Take them out of stealth mode too (Nov 1 - BK)
SetActionMode(oHench, ACTION_MODE_STEALTH, FALSE);
// * Remove invisibility type effects off of henchmen (Nov 7 - BK)
RemoveSpellEffects(SPELL_INVISIBILITY, oHench, oHench);
*** x2_i0_spells.nss Mon Aug 04 20:22:30 2008 *** modified prc script***
--- x2_i0_spells.nss Mon Aug 04 20:18:15 2008
***************
*** 196,218 ****
(nItem == BASE_ITEM_HEAVYFLAIL) ||
(nItem == BASE_ITEM_LIGHTFLAIL) ||
(nItem == BASE_ITEM_LIGHTHAMMER) ||
(nItem == BASE_ITEM_LIGHTMACE) ||
(nItem == BASE_ITEM_MORNINGSTAR) ||
(nItem == BASE_ITEM_QUARTERSTAFF) ||
(nItem == BASE_ITEM_RAPIER) ||
(nItem == BASE_ITEM_SHORTSPEAR) ||
(nItem == BASE_ITEM_SHORTSWORD) ||
(nItem == BASE_ITEM_WARHAMMER) ||
(nItem == BASE_ITEM_WHIP) ||
! (nItem == BASE_ITEM_DWARVENWARAXE))
{
return TRUE;
}
return FALSE;
}
//------------------------------------------------------------------------------
// AN, 2003
// Returns TRUE if oItem has any item property that classifies it as magical item
//------------------------------------------------------------------------------
int GetIsMagicalItem(object oItem)
--- 196,220 ----
(nItem == BASE_ITEM_HEAVYFLAIL) ||
(nItem == BASE_ITEM_LIGHTFLAIL) ||
(nItem == BASE_ITEM_LIGHTHAMMER) ||
(nItem == BASE_ITEM_LIGHTMACE) ||
(nItem == BASE_ITEM_MORNINGSTAR) ||
(nItem == BASE_ITEM_QUARTERSTAFF) ||
(nItem == BASE_ITEM_RAPIER) ||
(nItem == BASE_ITEM_SHORTSPEAR) ||
(nItem == BASE_ITEM_SHORTSWORD) ||
(nItem == BASE_ITEM_WARHAMMER) ||
(nItem == BASE_ITEM_WHIP) ||
! (nItem == BASE_ITEM_DWARVENWARAXE) ||
! (nItem == BASE_ITEM_MAGICSTAFF) ||
! (nItem == BASE_ITEM_TRIDENT) )
{
return TRUE;
}
return FALSE;
}
//------------------------------------------------------------------------------
// AN, 2003
// Returns TRUE if oItem has any item property that classifies it as magical item
//------------------------------------------------------------------------------
int GetIsMagicalItem(object oItem)
*** x2_inc_spellhook.nss Mon Aug 04 20:21:25 2008 ** modified prc script***
--- x2_inc_spellhook.nss Mon Aug 04 20:18:15 2008
***************
*** 10,34 ****
--- 10,50 ----
If you want to implement material components
into spells or add restrictions to certain
spells, this is the place to do it.
*/
//:://////////////////////////////////////////////
//:: Created By: Georg Zoeller
//:: Created On: 2003-06-04
//:: Updated On: 2003-10-25
//:://////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified Date: January 15th-16th, 2008
+ //:://////////////////////////////////////////////
+ /*
+ Modified to insure no shapeshifting spells are castable upon
+ mounted targets. This prevents problems that can occur due
+ to dismounting after shape shifting, or other issues that can
+ occur due to preserved appearances getting out of synch.
+
+ This can additional check can be disabled by setting the variable
+ X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object. If this
+ variable is set then this script will function as it did prior to
+ this modification.
+
+ */
//#include "x2_inc_itemprop" - Inherited from x2_inc_craft
#include "x2_inc_craft"
+ #include "x3_inc_horse"
const int X2_EVENT_CONCENTRATION_BROKEN = 12400;
// Use Magic Device Check.
// Returns TRUE if the Spell is allowed to be cast, either because the
// character is allowed to cast it or he has won the required UMD check
// Only active on spell scroll
int X2UseMagicDeviceCheck();
***************
*** 228,260 ****
--- 244,307 ----
{
SignalEvent(OBJECT_SELF,EventUserDefined(X2_EVENT_CONCENTRATION_BROKEN));
}
else if (X2GetBreakConcentrationCondition(oMaster))
{
SignalEvent(OBJECT_SELF,EventUserDefined(X2_EVENT_CONCENTRATION_BROKEN));
}
}
}
}
+
+ //------------------------------------------------------------------------------
+ // This function will return TRUE if the spell that is cast is a shape shifting
+ // spell.
+ //------------------------------------------------------------------------------
+ int X3ShapeShiftSpell(object oTarget)
+ { // PURPOSE: Return TRUE if a shape shifting spell was cast at oTarget
+ int nSpellID=GetSpellId();
+ string sUp=GetStringUpperCase(Get2DAString("x3restrict","SHAPESHIFT", nSpellID));
+ if (sUp=="YES") return TRUE;
+ return FALSE;
+ } // X3ShapeShiftSpell()
+
+
//------------------------------------------------------------------------------
// if FALSE is returned by this function, the spell will not be cast
// the order in which the functions are called here DOES MATTER, changing it
// WILL break the crafting subsystems
//------------------------------------------------------------------------------
int X2PreSpellCastCode()
{
object oTarget = GetSpellTargetObject();
int nContinue;
//---------------------------------------------------------------------------
+ // This small addition will check to see if the target is mounted and the
+ // spell is therefor one that should not be permitted.
+ //---------------------------------------------------------------------------
+ if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+ { // do check for abort due to being mounted check
+ if (HorseGetIsMounted(oTarget)&&X3ShapeShiftSpell(oTarget))
+ { // shape shifting not allowed while mounted
+ if(GetIsPC(oTarget))
+ {
+ FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+ }
+ return FALSE;
+ } // shape shifting not allowed while mounted
+ } // do check for abort due to being mounted check
+
+
+ //---------------------------------------------------------------------------
// This stuff is only interesting for player characters we assume that use
// magic device always works and NPCs don't use the crafting feats or
// sequencers anyway. Thus, any NON PC spellcaster always exits this script
// with TRUE (unless they are DM possessed or in the Wild Magic Area in
// Chapter 2 of Hordes of the Underdark.
//---------------------------------------------------------------------------
if (!GetIsPC(OBJECT_SELF))
{
if( !GetIsDMPossessed(OBJECT_SELF) && !GetLocalInt(GetArea(OBJECT_SELF), "X2_L_WILD_MAGIC"))
{
return TRUE;
*** x2_mod_def_equ.nss Mon Aug 04 20:21:29 2008 *** not in prc ***
--- x2_mod_def_equ.nss Mon Aug 04 20:18:15 2008
***************
*** 2,25 ****
--- 2,32 ----
//:: Example XP2 OnItemEquipped
//:: x2_mod_def_equ
//:: (c) 2003 Bioware Corp.
//:://////////////////////////////////////////////
/*
Put into: OnEquip Event
*/
//:://////////////////////////////////////////////
//:: Created By: Georg Zoeller
//:: Created On: 2003-07-16
//:://////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified On: April 15th, 2008
+ //:: Added Support for Mounted Archery Feat penalties
+ //:://////////////////////////////////////////////
+
#include "x2_inc_switches"
#include "x2_inc_intweapon"
+ #include "x3_inc_horse"
+
void main()
{
object oItem = GetPCItemLastEquipped();
object oPC = GetPCItemLastEquippedBy();
// -------------------------------------------------------------------------
// Intelligent Weapon System
// -------------------------------------------------------------------------
if (IPGetIsIntelligentWeapon(oItem))
{
IWSetIntelligentWeaponEquipped(oPC,oItem);
***************
*** 37,58 ****
--- 44,73 ----
if (GetLocalInt(oPC,"X2_L_ENSERRIC_ASKED_Q3")==1)
{
ExecuteScript ("x2_ens_dodrain",oPC);
}
else
{
IWPlayRandomEquipComment(oPC,oItem);
}
}
}
+ // -------------------------------------------------------------------------
+ // Mounted benefits control
+ // -------------------------------------------------------------------------
+ if (GetWeaponRanged(oItem))
+ {
+ SetLocalInt(oPC,"bX3_M_ARCHERY",TRUE);
+ HORSE_SupportAdjustMountedArcheryPenalty(oPC);
+ }
// -------------------------------------------------------------------------
// Generic Item Script Execution Code
// If MODULE_SWITCH_EXECUTE_TAGBASED_SCRIPTS is set to TRUE on the module,
// it will execute a script that has the same name as the item's tag
// inside this script you can manage scripts for all events by checking against
// GetUserDefinedItemEventNumber(). See x2_it_example.nss
// -------------------------------------------------------------------------
if (GetModuleSwitchValue(MODULE_SWITCH_ENABLE_TAGBASED_SCRIPTS) == TRUE)
{
SetUserDefinedItemEventNumber(X2_ITEM_EVENT_EQUIP);
*** x2_mod_def_rest.nss Mon Aug 04 20:21:29 2008 *** not in prc***
--- x2_mod_def_rest.nss Mon Aug 04 20:18:15 2008
***************
*** 1,28 ****
--- 1,67 ----
//::///////////////////////////////////////////////
//:: Name: x2_onrest
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
The generic wandering monster system
*/
//:://////////////////////////////////////////////
//:: Created By: Georg Zoeller
//:: Created On: June 9/03
//:://////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified Date: January 28th, 2008
+ //:://////////////////////////////////////////////
#include "x2_inc_restsys"
#include "x2_inc_switches"
+ #include "x3_inc_horse"
+
void main()
{
object oPC = GetLastPCRested();
+ object oMount;
+
+ if (!GetLocalInt(GetModule(),"X3_MOUNT_NO_REST_DISMOUNT"))
+ { // make sure not mounted
+ /* Deva, Jan 17, 2008
+ Do not allow a mounted PC to rest
+ */
+ if (HorseGetIsMounted(oPC))
+ { // cannot mount
+ if (GetLocalInt(oPC,"X3_REST_CANCEL_MESSAGE_SENT"))
+ { // cancel message already played
+ DeleteLocalInt(oPC,"X3_REST_CANCEL_MESSAGE_SENT");
+ } // cancel message already played
+ else
+ { // play cancel message
+ FloatingTextStrRefOnCreature(112006,oPC,FALSE);
+ SetLocalInt(oPC,"X3_REST_CANCEL_MESSAGE_SENT",TRUE); // sentinel
+ // value to prevent message played a 2nd time on canceled rest
+ } // play cancel message
+ AssignCommand(oPC,ClearAllActions(TRUE));
+ return;
+ } // cannot mount
+ } // make sure not mounted
+
+ if (!GetLocalInt(GetModule(),"X3_MOUNT_NO_REST_DESPAWN"))
+ { // if there is a paladin mount despawn it
+ oMount=HorseGetPaladinMount(oPC);
+ if (!GetIsObjectValid(oMount)) oMount=GetLocalObject(oPC,"oX3PaladinMount");
+ if (GetIsObjectValid(oMount))
+ { // paladin mount exists
+ if (oMount==oPC||!GetIsObjectValid(GetMaster(oMount))) AssignCommand(oPC,HorseUnsummonPaladinMount());
+ else { AssignCommand(GetMaster(oMount),HorseUnsummonPaladinMount()); }
+ } // paladin mount exists
+ } // if there is a paladin mount despawn it
if (GetModuleSwitchValue(MODULE_SWITCH_USE_XP2_RESTSYSTEM) == TRUE)
{
/* Georg, August 11, 2003
Added this code to allow the designer to specify a variable on the module
Instead of using a OnAreaEnter script. Nice new toolset feature!
Basically, the first time a player rests, the area is scanned for the
encounter table string and will set it up.
*/
object oArea = GetArea (oPC);
*** x2_mod_def_unequ.nss Mon Aug 04 20:21:29 2008 *** not in prc ***
--- x2_mod_def_unequ.nss Mon Aug 04 20:18:15 2008
***************
*** 2,40 ****
--- 2,56 ----
//:: Example XP2 OnItemEquipped
//:: x2_mod_def_unequ
//:: (c) 2003 Bioware Corp.
//:://////////////////////////////////////////////
/*
Put into: OnUnEquip Event
*/
//:://////////////////////////////////////////////
//:: Created By: Georg Zoeller
//:: Created On: 2003-07-16
//:://////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified On: April 15th, 2008
+ //:: Added Support for Mounted Archery Feat penalties
+ //:://////////////////////////////////////////////
+
#include "x2_inc_switches"
#include "x2_inc_intweapon"
+ #include "x3_inc_horse"
+
void main()
{
object oItem = GetPCItemLastUnequipped();
object oPC = GetPCItemLastUnequippedBy();
// -------------------------------------------------------------------------
// Intelligent Weapon System
// -------------------------------------------------------------------------
if (IPGetIsIntelligentWeapon(oItem))
{
IWSetIntelligentWeaponEquipped(oPC,OBJECT_INVALID);
IWPlayRandomUnequipComment(oPC,oItem);
}
// -------------------------------------------------------------------------
+ // Mounted benefits control
+ // -------------------------------------------------------------------------
+ if (GetWeaponRanged(oItem))
+ {
+ DeleteLocalInt(oPC,"bX3_M_ARCHERY");
+ HORSE_SupportAdjustMountedArcheryPenalty(oPC);
+ }
+
+ // -------------------------------------------------------------------------
// Generic Item Script Execution Code
// If MODULE_SWITCH_EXECUTE_TAGBASED_SCRIPTS is set to TRUE on the module,
// it will execute a script that has the same name as the item's tag
// inside this script you can manage scripts for all events by checking against
// GetUserDefinedItemEventNumber(). See x2_it_example.nss
// -------------------------------------------------------------------------
if (GetModuleSwitchValue(MODULE_SWITCH_ENABLE_TAGBASED_SCRIPTS) == TRUE)
{
SetUserDefinedItemEventNumber(X2_ITEM_EVENT_UNEQUIP);
int nRet = ExecuteScriptAndReturnInt(GetUserDefinedItemEventScriptName(oItem),OBJECT_SELF);
if (nRet == X2_EXECUTE_SCRIPT_END)
*** x2_s2_cursesong.nss Mon Aug 04 20:22:30 2008 *** modified prc script ***
--- x2_s2_cursesong.nss Mon Aug 04 20:18:15 2008
***************
*** 245,267 ****
else if(nPerform >= 21 && nLevel >= 14)
{
nAttack = 2;
nDamage = 3;
nWill = 1;
nFort = 1;
nReflex = 1;
nHP = 16;
nAC = 3;
nSkill = 2;
}
! else if(nPerform >= 18 && nLevel >= 12)
{
nAttack = 2;
nDamage = 2;
nWill = 1;
nFort = 1;
nReflex = 1;
nHP = 8;
nAC = 2;
nSkill = 2;
}
else if(nPerform >= 15 && nLevel >= 8)
--- 245,267 ----
else if(nPerform >= 21 && nLevel >= 14)
{
nAttack = 2;
nDamage = 3;
nWill = 1;
nFort = 1;
nReflex = 1;
nHP = 16;
nAC = 3;
nSkill = 2;
}
! else if(nPerform >= 18 && nLevel >= 11)
{
nAttack = 2;
nDamage = 2;
nWill = 1;
nFort = 1;
nReflex = 1;
nHP = 8;
nAC = 2;
nSkill = 2;
}
else if(nPerform >= 15 && nLevel >= 8)
***************
*** 371,393 ****
if(!GetHasFeatEffect(871, oTarget)&& !GetHasSpellEffect(GetSpellId(),oTarget))
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur2, OBJECT_SELF, RoundsToSeconds(nDuration));
}
float fDelay;
while(GetIsObjectValid(oTarget))
{
if(spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF))
{
// * GZ Oct 2003: If we are deaf, we do not have negative effects from curse song
! if (!GetHasEffect(EFFECT_TYPE_DEAF,oTarget))
{
if(!GetHasFeatEffect(871, oTarget)&& !GetHasSpellEffect(GetSpellId(),oTarget))
{
if (nHP > 0)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_SONIC), oTarget);
DelayCommand(0.01, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHP, oTarget));
}
if (!GetIsDead(oTarget))
{
--- 371,393 ----
if(!GetHasFeatEffect(871, oTarget)&& !GetHasSpellEffect(GetSpellId(),oTarget))
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur2, OBJECT_SELF, RoundsToSeconds(nDuration));
}
float fDelay;
while(GetIsObjectValid(oTarget))
{
if(spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF))
{
// * GZ Oct 2003: If we are deaf, we do not have negative effects from curse song
! if (!GetHasEffect(EFFECT_TYPE_SILENCE,oTarget) && !GetHasEffect(EFFECT_TYPE_DEAF,oTarget))
{
if(!GetHasFeatEffect(871, oTarget)&& !GetHasSpellEffect(GetSpellId(),oTarget))
{
if (nHP > 0)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_SONIC), oTarget);
DelayCommand(0.01, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHP, oTarget));
}
if (!GetIsDead(oTarget))
{
*** x2_s2_dyearmor.nss Mon Aug 04 20:22:30 2008 *** not in prc ***
--- x2_s2_dyearmor.nss Mon Aug 04 20:18:15 2008
***************
*** 128,150 ****
// GZ@2006/03/26: Added new color palette support. Note: Will only work
// if craig updates the in engine functions as well.
int nColor = 0;
// See if we find a valid int between 0 and 127 in the last three letters
// of the tag, use it as color
int nTest = StringToInt(GetStringRight(GetTag(oItem),3));
! if (nTest > 0 && nTest < DYE_MAX_COLOR_INDEX )
{
nColor = nTest;
}
else //otherwise, use last two letters, as per legacy HotU
{
nColor = StringToInt(GetStringRight(GetTag(oItem),2));
}
// move the item into the IP work container
--- 128,150 ----
// GZ@2006/03/26: Added new color palette support. Note: Will only work
// if craig updates the in engine functions as well.
int nColor = 0;
// See if we find a valid int between 0 and 127 in the last three letters
// of the tag, use it as color
int nTest = StringToInt(GetStringRight(GetTag(oItem),3));
! if (nTest > 0 && nTest <= DYE_MAX_COLOR_INDEX )
{
nColor = nTest;
}
else //otherwise, use last two letters, as per legacy HotU
{
nColor = StringToInt(GetStringRight(GetTag(oItem),2));
}
// move the item into the IP work container
*** x2_s2_gwildshp.nss Mon Aug 04 20:22:30 2008 ***not in prc***
--- x2_s2_gwildshp.nss Mon Aug 04 20:18:15 2008
***************
*** 8,45 ****
--- 8,70 ----
forms, gaining special abilities
Credits must be given to mr_bumpkin from the NWN
community who had the idea of merging item properties
from weapon and armor to the creatures new forms.
*/
//:://////////////////////////////////////////////
//:: Created By: Georg Zoeller
//:: Created On: 2003-07-02
//:://////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified Date: January 26th, 2008
+ //:://////////////////////////////////////////////
+ /*
+ Modified to insure no shapeshifting spells are castable upon
+ mounted targets. This prevents problems that can occur due
+ to dismounting after shape shifting, or other issues that can
+ occur due to preserved appearances getting out of synch.
+
+ This can additional check can be disabled by setting the variable
+ X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object. If this
+ variable is set then this script will function as it did prior to
+ this modification.
+
+ */
#include "x2_inc_itemprop"
#include "x2_inc_shifter"
+ #include "x3_inc_horse"
void main()
{
//--------------------------------------------------------------------------
// Declare major variables
//--------------------------------------------------------------------------
int nSpell = GetSpellId();
object oTarget = GetSpellTargetObject();
effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
int nShifter = GetLevelByClass(CLASS_TYPE_SHIFTER);
effect ePoly;
int nPoly;
+
+ if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+ { // check to see if abort due to being mounted
+ if (HorseGetIsMounted(oTarget))
+ { // abort
+ if (GetIsPC(oTarget)) FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+ return;
+ } // abort
+ } // check to see if abort due to being mounted
// Feb 13, 2004, Jon: Added scripting to take care of case where it's an NPC
// using one of the feats. It will randomly pick one of the shapes associated
// with the feat.
switch(nSpell)
{
// Greater Wildshape I
case 646: nSpell = Random(5)+658; break;
// Greater Wildshape II
case 675: switch(Random(3))
{
*** x2_s2_wildshape.nss Mon Aug 04 20:21:33 2008 *** modified prc script ***
--- x2_s2_wildshape.nss Mon Aug 04 20:18:15 2008
***************
*** 3,33 ****
--- 3,59 ----
//:: NW_S2_WildShape
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Allows the Druid to change into a Red Dragon.
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Jan 22, 2002
//:://////////////////////////////////////////////
//:: Last Updated By: Andrew Nobbs May 20, 2003
+ //:://////////////////////////////////////////////
+ //:: Modified By: Deva Winblood
+ //:: Modified Date: January 15th-16th, 2008
+ //:://////////////////////////////////////////////
+ /*
+ Modified to insure no shapeshifting spells are castable upon
+ mounted targets. This prevents problems that can occur due
+ to dismounting after shape shifting, or other issues that can
+ occur due to preserved appearances getting out of synch.
+
+ This can additional check can be disabled by setting the variable
+ X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object. If this
+ variable is set then this script will function as it did prior to
+ this modification.
+
+ */
+
+ #include "x3_inc_horse"
void main()
{
//Declare major variables
object oTarget = GetSpellTargetObject();
effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
effect ePoly;
int nMetaMagic = GetMetaMagicFeat();
int nDuration = GetLevelByClass(CLASS_TYPE_DRUID);
+ if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+ { // check to see if abort due to being mounted
+ if (HorseGetIsMounted(oTarget))
+ { // abort
+ if (GetIsPC(oTarget)) FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+ return;
+ } // abort
+ } // check to see if abort due to being mounted
//Enter Metamagic conditions
if (nMetaMagic == METAMAGIC_EXTEND)
{
nDuration = nDuration *2; //Duration is +100%
}
ePoly = EffectPolymorph(POLYMORPH_TYPE_RED_DRAGON);
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_WILD_SHAPE, FALSE));
//Apply the VFX impact and effects