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.
		
			
				
	
	
		
			4858 lines
		
	
	
		
			194 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			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
 |