Removed Conflicting Scripts
Removed class ability scripts that interfered with the PRC's changes.
This commit is contained in:
Binary file not shown.
@@ -1 +0,0 @@
|
||||
470c8aa2ec6da2fb021692e5bf508f39
|
Binary file not shown.
@@ -13,8 +13,19 @@
|
||||
//:: Created On: May 25, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
// Modified 2004/01/30 (Brian Greinke)
|
||||
// Added disable/reenable support
|
||||
#include "prc_alterations"
|
||||
|
||||
void main()
|
||||
{
|
||||
//first, look to see if effect is already activated
|
||||
if ( GetHasSpellEffect(SPELLABILITY_AURA_FEAR, OBJECT_SELF) )
|
||||
{
|
||||
PRCRemoveSpellEffects( SPELLABILITY_AURA_FEAR, OBJECT_SELF, OBJECT_SELF );
|
||||
return;
|
||||
}
|
||||
|
||||
object oCaster = OBJECT_SELF;
|
||||
if(GetLocalInt(GetArea(OBJECT_SELF), "NOCAST")==2 && !GetIsDM(oCaster))
|
||||
{
|
||||
|
Binary file not shown.
@@ -1,86 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Barbarian Rage
|
||||
//:: NW_S1_BarbRage
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
The Str and Con of the Barbarian increases,
|
||||
Will Save are +2, AC -2.
|
||||
Greater Rage starts at level 15.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Aug 13, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "x2_i0_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE))
|
||||
{
|
||||
//Declare major variables
|
||||
int nLevel = GetLevelByClass(CLASS_TYPE_BARBARIAN);
|
||||
int nIncrease;
|
||||
int nSave;
|
||||
effect eDmg;
|
||||
effect eAtk;
|
||||
effect eHP;
|
||||
eDmg = SupernaturalEffect(eDmg);
|
||||
if (nLevel < 15)
|
||||
{
|
||||
nIncrease = 4;
|
||||
nSave = 2;
|
||||
//Added to compensate for +12 Cap
|
||||
eDmg = EffectDamageIncrease(DAMAGE_BONUS_4, DAMAGE_TYPE_BLUDGEONING);
|
||||
|
||||
eAtk = EffectAttackIncrease(2);
|
||||
eAtk = SupernaturalEffect(eAtk);
|
||||
eHP = EffectTemporaryHitpoints(nLevel * 3);
|
||||
eHP = SupernaturalEffect(eHP);
|
||||
}
|
||||
else
|
||||
{
|
||||
nIncrease = 6;
|
||||
nSave = 3;
|
||||
//Added to compensate for +12 Cap
|
||||
eDmg = EffectDamageIncrease(DAMAGE_BONUS_6, DAMAGE_TYPE_BLUDGEONING);
|
||||
eAtk = EffectAttackIncrease(4);
|
||||
eAtk = SupernaturalEffect(eAtk);
|
||||
eHP = EffectTemporaryHitpoints(nLevel * 4);
|
||||
eHP = SupernaturalEffect(eHP);
|
||||
}
|
||||
PlayVoiceChat(VOICE_CHAT_BATTLECRY1);
|
||||
//Determine the duration by getting the con modifier after being modified
|
||||
int nCon = 3 + GetAbilityModifier(ABILITY_CONSTITUTION) + nIncrease;
|
||||
effect eStr = EffectAbilityIncrease(ABILITY_CONSTITUTION, nIncrease);
|
||||
effect eCon = EffectAbilityIncrease(ABILITY_STRENGTH, nIncrease);
|
||||
effect eSave = EffectSavingThrowIncrease(SAVING_THROW_WILL, nSave);
|
||||
effect eAC = EffectACDecrease(2, AC_DODGE_BONUS);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||
|
||||
effect eLink = EffectLinkEffects(eCon, eStr);
|
||||
eLink = EffectLinkEffects(eLink, eSave);
|
||||
eLink = EffectLinkEffects(eLink, eAC);
|
||||
eLink = EffectLinkEffects(eLink, eDur);
|
||||
SignalEvent(OBJECT_SELF, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_BARBARIAN_RAGE, FALSE));
|
||||
//Make effect extraordinary
|
||||
eLink = ExtraordinaryEffect(eLink);
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_IMPROVE_ABILITY_SCORE); //Change to the Rage VFX
|
||||
|
||||
if (nCon > 0)
|
||||
{
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, OBJECT_SELF, RoundsToSeconds(nCon));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF) ;
|
||||
//This part was added by Guile to offset +12 Cap.
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAtk, OBJECT_SELF, RoundsToSeconds(nCon));
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDmg, OBJECT_SELF, RoundsToSeconds(nCon));
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, OBJECT_SELF, RoundsToSeconds(nCon));
|
||||
|
||||
// 2003-07-08, Georg: Rage Epic Feat Handling
|
||||
CheckAndApplyEpicRageFeats(nCon);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
@@ -1,425 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Bard Song
|
||||
//:: NW_S2_BardSong
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
This spells applies bonuses to all of the
|
||||
bard's allies within 30ft for a set duration of
|
||||
10 rounds.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Feb 25, 2002
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Last Updated By: Georg Zoeller Oct 1, 2003
|
||||
/*
|
||||
bugfix by Kovi 2002.07.30
|
||||
- loosing temporary hp resulted in loosing the other bonuses
|
||||
*/
|
||||
|
||||
#include "x0_i0_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
|
||||
|
||||
if (GetHasEffect(EFFECT_TYPE_SILENCE,OBJECT_SELF))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(85764,OBJECT_SELF); // not useable when silenced
|
||||
return;
|
||||
}
|
||||
string sTag = GetTag(OBJECT_SELF);
|
||||
|
||||
if (sTag == "x0_hen_dee" || sTag == "x2_hen_deekin")
|
||||
{
|
||||
// * Deekin has a chance of singing a doom song
|
||||
// * same effect, better tune
|
||||
if (Random(100) + 1 > 80)
|
||||
{
|
||||
// the Xp2 Deekin knows more than one doom song
|
||||
if (d3() ==1 && sTag == "x2_hen_deekin")
|
||||
{
|
||||
DelayCommand(0.0, PlaySound("vs_nx2deekM_050"));
|
||||
}
|
||||
else
|
||||
{
|
||||
DelayCommand(0.0, PlaySound("vs_nx0deekM_074"));
|
||||
DelayCommand(5.0, PlaySound("vs_nx0deekM_074"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Declare major variables
|
||||
int nLevel = GetLevelByClass(CLASS_TYPE_BARD);
|
||||
int nRanks = GetSkillRank(SKILL_PERFORM);
|
||||
int nChr = GetAbilityModifier(ABILITY_CHARISMA);
|
||||
int nPerform = nRanks;
|
||||
int nDuration = 10; //+ nChr;
|
||||
|
||||
effect eAttack;
|
||||
effect eDamage;
|
||||
effect eWill;
|
||||
effect eFort;
|
||||
effect eReflex;
|
||||
effect eHP;
|
||||
effect eAC;
|
||||
effect eSkill;
|
||||
|
||||
int nAttack;
|
||||
int nDamage;
|
||||
int nWill;
|
||||
int nFort;
|
||||
int nReflex;
|
||||
int nHP;
|
||||
int nAC;
|
||||
int nSkill;
|
||||
//Check to see if the caster has Lasting Impression and increase duration.
|
||||
if(GetHasFeat(870))
|
||||
{
|
||||
nDuration *= 10;
|
||||
}
|
||||
|
||||
// lingering song
|
||||
if(GetHasFeat(424)) // lingering song
|
||||
{
|
||||
nDuration += 5;
|
||||
}
|
||||
|
||||
//SpeakString("Level: " + IntToString(nLevel) + " Ranks: " + IntToString(nRanks));
|
||||
|
||||
if(nPerform >= 90 && nLevel >= 30)
|
||||
{
|
||||
nAttack = 4;
|
||||
nDamage = 6;
|
||||
nWill = 4;
|
||||
nFort = 4;
|
||||
nReflex = 4;
|
||||
nHP = 70;
|
||||
nAC = 5;
|
||||
nSkill = 20;
|
||||
}
|
||||
else if(nPerform >= 85 && nLevel >= 29)
|
||||
{
|
||||
nAttack = 4;
|
||||
nDamage = 5;
|
||||
nWill = 4;
|
||||
nFort = 4;
|
||||
nReflex = 4;
|
||||
nHP = 65;
|
||||
nAC = 5;
|
||||
nSkill = 19;
|
||||
}
|
||||
else if(nPerform >= 85 && nLevel >= 28)
|
||||
{
|
||||
nAttack = 3;
|
||||
nDamage = 5;
|
||||
nWill = 4;
|
||||
nFort = 4;
|
||||
nReflex = 4;
|
||||
nHP = 60;
|
||||
nAC = 5;
|
||||
nSkill = 18;
|
||||
}
|
||||
else if(nPerform >= 80 && nLevel >= 27)
|
||||
{
|
||||
nAttack = 3;
|
||||
nDamage = 4;
|
||||
nWill = 3;
|
||||
nFort = 3;
|
||||
nReflex = 3;
|
||||
nHP = 55;
|
||||
nAC = 5;
|
||||
nSkill = 17;
|
||||
}
|
||||
else if(nPerform >= 75 && nLevel >= 26)
|
||||
{
|
||||
nAttack = 3;
|
||||
nDamage = 3;
|
||||
nWill = 3;
|
||||
nFort = 3;
|
||||
nReflex = 3;
|
||||
nHP = 50;
|
||||
nAC = 4;
|
||||
nSkill = 16;
|
||||
}
|
||||
else if(nPerform >= 70 && nLevel >= 25)
|
||||
{
|
||||
nAttack = 3;
|
||||
nDamage = 3;
|
||||
nWill = 3;
|
||||
nFort = 3;
|
||||
nReflex = 3;
|
||||
nHP = 45;
|
||||
nAC = 4;
|
||||
nSkill = 15;
|
||||
}
|
||||
else if(nPerform >= 65 && nLevel >= 24)
|
||||
{
|
||||
nAttack = 3;
|
||||
nDamage = 3;
|
||||
nWill = 3;
|
||||
nFort = 3;
|
||||
nReflex = 3;
|
||||
nHP = 50;
|
||||
nAC = 4;
|
||||
nSkill = 14;
|
||||
}
|
||||
else if(nPerform >= 60 && nLevel >= 23)
|
||||
{
|
||||
nAttack = 2;
|
||||
nDamage = 3;
|
||||
nWill = 3;
|
||||
nFort = 3;
|
||||
nReflex = 3;
|
||||
nHP = 45;
|
||||
nAC = 4;
|
||||
nSkill = 13;
|
||||
}
|
||||
else if(nPerform >= 60 && nLevel >= 22)
|
||||
{
|
||||
nAttack = 2;
|
||||
nDamage = 3;
|
||||
nWill = 3;
|
||||
nFort = 2;
|
||||
nReflex = 2;
|
||||
nHP = 40;
|
||||
nAC = 4;
|
||||
nSkill = 12;
|
||||
}
|
||||
else if(nPerform >= 55 && nLevel >= 21)
|
||||
{
|
||||
nAttack = 2;
|
||||
nDamage = 3;
|
||||
nWill = 3;
|
||||
nFort = 2;
|
||||
nReflex = 2;
|
||||
nHP = 35;
|
||||
nAC = 4;
|
||||
nSkill = 10;
|
||||
}
|
||||
else if(nPerform >= 50 && nLevel >= 20)
|
||||
{
|
||||
nAttack = 2;
|
||||
nDamage = 3;
|
||||
nWill = 3;
|
||||
nFort = 2;
|
||||
nReflex = 2;
|
||||
nHP = 30;
|
||||
nAC = 3;
|
||||
nSkill = 9;
|
||||
}
|
||||
else if(nPerform >= 45 && nLevel >= 19)
|
||||
{
|
||||
nAttack = 2;
|
||||
nDamage = 3;
|
||||
nWill = 3;
|
||||
nFort = 2;
|
||||
nReflex = 2;
|
||||
nHP = 28;
|
||||
nAC = 3;
|
||||
nSkill = 8;
|
||||
}
|
||||
else if(nPerform >= 40 && nLevel >= 18)
|
||||
{
|
||||
nAttack = 2;
|
||||
nDamage = 3;
|
||||
nWill = 3;
|
||||
nFort = 2;
|
||||
nReflex = 2;
|
||||
nHP = 24;
|
||||
nAC = 3;
|
||||
nSkill = 6;
|
||||
}
|
||||
else if(nPerform >= 35 && nLevel >= 17)
|
||||
{
|
||||
nAttack = 2;
|
||||
nDamage = 3;
|
||||
nWill = 3;
|
||||
nFort = 2;
|
||||
nReflex = 2;
|
||||
nHP = 22;
|
||||
nAC = 3;
|
||||
nSkill = 5;
|
||||
}
|
||||
else if(nPerform >= 30 && nLevel >= 16)
|
||||
{
|
||||
nAttack = 2;
|
||||
nDamage = 3;
|
||||
nWill = 3;
|
||||
nFort = 2;
|
||||
nReflex = 2;
|
||||
nHP = 20;
|
||||
nAC = 3;
|
||||
nSkill = 4;
|
||||
}
|
||||
else if(nPerform >= 24 && nLevel >= 15)
|
||||
{
|
||||
nAttack = 2;
|
||||
nDamage = 3;
|
||||
nWill = 2;
|
||||
nFort = 2;
|
||||
nReflex = 2;
|
||||
nHP = 16;
|
||||
nAC = 3;
|
||||
nSkill = 3;
|
||||
}
|
||||
else if(nPerform >= 21 && nLevel >= 14)
|
||||
{
|
||||
nAttack = 2;
|
||||
nDamage = 3;
|
||||
nWill = 1;
|
||||
nFort = 1;
|
||||
nReflex = 1;
|
||||
nHP = 16;
|
||||
nAC = 2;
|
||||
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)
|
||||
{
|
||||
nAttack = 2;
|
||||
nDamage = 2;
|
||||
nWill = 1;
|
||||
nFort = 1;
|
||||
nReflex = 1;
|
||||
nHP = 8;
|
||||
nAC = 0;
|
||||
nSkill = 1;
|
||||
}
|
||||
else if(nPerform >= 12 && nLevel >= 6)
|
||||
{
|
||||
nAttack = 1;
|
||||
nDamage = 2;
|
||||
nWill = 1;
|
||||
nFort = 1;
|
||||
nReflex = 1;
|
||||
nHP = 0;
|
||||
nAC = 0;
|
||||
nSkill = 1;
|
||||
}
|
||||
else if(nPerform >= 9 && nLevel >= 3)
|
||||
{
|
||||
nAttack = 1;
|
||||
nDamage = 2;
|
||||
nWill = 1;
|
||||
nFort = 1;
|
||||
nReflex = 0;
|
||||
nHP = 0;
|
||||
nAC = 0;
|
||||
nSkill = 0;
|
||||
}
|
||||
else if(nPerform >= 6 && nLevel >= 2)
|
||||
{
|
||||
nAttack = 1;
|
||||
nDamage = 1;
|
||||
nWill = 1;
|
||||
nFort = 0;
|
||||
nReflex = 0;
|
||||
nHP = 0;
|
||||
nAC = 0;
|
||||
nSkill = 0;
|
||||
}
|
||||
else if(nPerform >= 3 && nLevel >= 1)
|
||||
{
|
||||
nAttack = 1;
|
||||
nDamage = 1;
|
||||
nWill = 0;
|
||||
nFort = 0;
|
||||
nReflex = 0;
|
||||
nHP = 0;
|
||||
nAC = 0;
|
||||
nSkill = 0;
|
||||
}
|
||||
effect eVis = EffectVisualEffect(VFX_DUR_BARD_SONG);
|
||||
|
||||
eAttack = EffectAttackIncrease(nAttack);
|
||||
eDamage = EffectDamageIncrease(nDamage, DAMAGE_TYPE_BLUDGEONING);
|
||||
effect eLink = EffectLinkEffects(eAttack, eDamage);
|
||||
|
||||
if(nWill > 0)
|
||||
{
|
||||
eWill = EffectSavingThrowIncrease(SAVING_THROW_WILL, nWill);
|
||||
eLink = EffectLinkEffects(eLink, eWill);
|
||||
}
|
||||
if(nFort > 0)
|
||||
{
|
||||
eFort = EffectSavingThrowIncrease(SAVING_THROW_FORT, nFort);
|
||||
eLink = EffectLinkEffects(eLink, eFort);
|
||||
}
|
||||
if(nReflex > 0)
|
||||
{
|
||||
eReflex = EffectSavingThrowIncrease(SAVING_THROW_REFLEX, nReflex);
|
||||
eLink = EffectLinkEffects(eLink, eReflex);
|
||||
}
|
||||
if(nHP > 0)
|
||||
{
|
||||
//SpeakString("HP Bonus " + IntToString(nHP));
|
||||
eHP = EffectTemporaryHitpoints(nHP);
|
||||
// eLink = EffectLinkEffects(eLink, eHP);
|
||||
}
|
||||
if(nAC > 0)
|
||||
{
|
||||
eAC = EffectACIncrease(nAC, AC_DODGE_BONUS);
|
||||
eLink = EffectLinkEffects(eLink, eAC);
|
||||
}
|
||||
if(nSkill > 0)
|
||||
{
|
||||
eSkill = EffectSkillIncrease(SKILL_ALL_SKILLS, nSkill);
|
||||
eLink = EffectLinkEffects(eLink, eSkill);
|
||||
}
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||
eLink = EffectLinkEffects(eLink, eDur);
|
||||
|
||||
effect eImpact = EffectVisualEffect(VFX_IMP_HEAD_SONIC);
|
||||
effect eFNF = EffectVisualEffect(VFX_FNF_LOS_NORMAL_30);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eFNF, GetLocation(OBJECT_SELF));
|
||||
|
||||
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
|
||||
|
||||
eHP = ExtraordinaryEffect(eHP);
|
||||
eLink = ExtraordinaryEffect(eLink);
|
||||
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(!GetHasFeatEffect(FEAT_BARD_SONGS, oTarget) && !GetHasSpellEffect(GetSpellId(),oTarget))
|
||||
{
|
||||
// * GZ Oct 2003: If we are silenced, we can not benefit from bard song
|
||||
if (!GetHasEffect(EFFECT_TYPE_SILENCE,oTarget) && !GetHasEffect(EFFECT_TYPE_DEAF,oTarget))
|
||||
{
|
||||
if(oTarget == OBJECT_SELF)
|
||||
{
|
||||
effect eLinkBard = EffectLinkEffects(eLink, eVis);
|
||||
eLinkBard = ExtraordinaryEffect(eLinkBard);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLinkBard, oTarget, RoundsToSeconds(nDuration));
|
||||
if (nHP > 0)
|
||||
{
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oTarget, RoundsToSeconds(nDuration));
|
||||
}
|
||||
}
|
||||
else if(GetIsFriend(oTarget))
|
||||
{
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration));
|
||||
if (nHP > 0)
|
||||
{
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oTarget, RoundsToSeconds(nDuration));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
@@ -10,21 +10,36 @@
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Jan 22, 2002
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Modified By: Iznoghoud - January 19 2004
|
||||
/*
|
||||
What this script changes:
|
||||
Allows druid elemental shapes to get stacking item properties carried over correctly
|
||||
just like shifters.
|
||||
See Iznoghoud's x2_s2_gwildshp script for an in-detail description.
|
||||
Added fix for a Bioware Bug: Druids now get elder wildshapes at level 20 and above,
|
||||
not just when exactly level 20.
|
||||
*/
|
||||
//:: 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"
|
||||
#include "prc_alterations"
|
||||
#include "pnp_shft_poly"
|
||||
|
||||
void elemental_shape_shift(object oPC, int nShape)
|
||||
|
||||
{
|
||||
string sResRef = Get2DACache("prc_polymorph", "ResRef", nShape);
|
||||
StoreCurrentAppearanceAsTrueAppearance(oPC, TRUE);
|
||||
ShiftIntoResRef(oPC, SHIFTER_TYPE_DRUID, sResRef, TRUE);
|
||||
}
|
||||
|
||||
#include "ws_inc_shifter"
|
||||
void main()
|
||||
{
|
||||
|
||||
if(GetLocalInt(GetArea(OBJECT_SELF), "NOCAST")==2 && !GetIsDM(OBJECT_SELF))
|
||||
{
|
||||
|
||||
@@ -34,18 +49,32 @@ if(GetLocalInt(GetArea(OBJECT_SELF), "NOCAST")==2 && !GetIsDM(OBJECT_SELF))
|
||||
}
|
||||
//Declare major variables
|
||||
int nSpell = GetSpellId();
|
||||
object oTarget = GetSpellTargetObject();
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
|
||||
effect ePoly;
|
||||
int nPoly;
|
||||
int nMetaMagic = GetMetaMagicFeat();
|
||||
int nDuration = GetCasterLevel(OBJECT_SELF);
|
||||
int nDuration = GetLevelByClass(CLASS_TYPE_DRUID)
|
||||
+ GetLevelByClass(CLASS_TYPE_ARCANE_HIEROPHANT);
|
||||
int bElder = FALSE;
|
||||
//Enter Metamagic conditions
|
||||
if (nMetaMagic == METAMAGIC_EXTEND)
|
||||
if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
|
||||
{ // check to see if abort due to being mounted
|
||||
if (PRCHorseGetIsMounted(oTarget))
|
||||
{ // abort
|
||||
if (GetIsPC(oTarget)) FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
|
||||
return;
|
||||
} // abort
|
||||
} // check to see if abort due to being mounted
|
||||
|
||||
//this command will make shore that polymorph plays nice with the shifter
|
||||
ShifterCheck(OBJECT_SELF);
|
||||
|
||||
int nShape = GetPersistantLocalInt(OBJECT_SELF, PRC_PNP_SHIFTING + IntToString(nSpell));
|
||||
if(nShape > 0)
|
||||
{
|
||||
nDuration = nDuration *2; //Duration is +100%
|
||||
elemental_shape_shift(OBJECT_SELF, nShape);
|
||||
return;
|
||||
}
|
||||
|
||||
if(GetLevelByClass(CLASS_TYPE_DRUID) >= 20)
|
||||
{
|
||||
bElder = TRUE;
|
||||
@@ -89,241 +118,246 @@ if(GetLocalInt(GetArea(OBJECT_SELF), "NOCAST")==2 && !GetIsDM(OBJECT_SELF))
|
||||
nPoly = POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL;
|
||||
}
|
||||
}
|
||||
|
||||
int bWeapon;
|
||||
int bArmor;
|
||||
int bItems;
|
||||
int bCopyGlovesToClaws = FALSE;
|
||||
|
||||
bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1;
|
||||
|
||||
if ( WS_ALWAYS_COPY_ARMOR_PROPS )
|
||||
bArmor = TRUE;
|
||||
else
|
||||
bArmor = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1;
|
||||
|
||||
if ( WS_ALWAYS_COPY_ITEM_PROPS )
|
||||
bItems = TRUE;
|
||||
else
|
||||
bItems = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1;
|
||||
|
||||
// Send message to PC about which items get merged to this form
|
||||
string sMerge;
|
||||
sMerge = "Merged: "; // <c~<7E><>>: This is a color code that makes the text behind it sort of light blue.
|
||||
if(bArmor) sMerge += "<caz<61>>Armor, Helmet, Shield";
|
||||
if(bItems) sMerge += ",</c> <ca<63>a>Rings, Amulet, Cloak, Boots, Belt, Bracers";
|
||||
if( bWeapon || WS_COPY_WEAPON_PROPS_TO_UNARMED == 1 )
|
||||
sMerge += ",</c> <c<>AA>Weapon";
|
||||
else if ( WS_COPY_WEAPON_PROPS_TO_UNARMED == 2 )
|
||||
sMerge += ",</c> <c<>AA>Gloves to unarmed attacks";
|
||||
else if (WS_COPY_WEAPON_PROPS_TO_UNARMED == 3 )
|
||||
sMerge += ",</c> <c<>AA>Weapon (if you had one equipped) or gloves to unarmed attacks";
|
||||
else
|
||||
sMerge += ",</c> <c<>AA>No weapon or gloves to unarmed attacks";
|
||||
SendMessageToPC(oTarget,sMerge + ".</c>");
|
||||
|
||||
// Store which items should transfer to this polymorph type. (For exportallchar scripts)
|
||||
SetLocalInt(oTarget, "GW_PolyID", nPoly);
|
||||
SetLocalInt(oTarget, "GW_bWeapon", bWeapon );
|
||||
SetLocalInt(oTarget, "GW_bArmor", bArmor );
|
||||
SetLocalInt(oTarget, "GW_bItems", bItems );
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Store the old objects so we can access them after the character has
|
||||
// changed into his new form
|
||||
//--------------------------------------------------------------------------
|
||||
object oWeaponOld;
|
||||
object oArmorOld;
|
||||
object oRing1Old ;
|
||||
object oRing2Old;
|
||||
object oAmuletOld;
|
||||
object oCloakOld ;
|
||||
object oBootsOld ;
|
||||
object oBeltOld ;
|
||||
object oHelmetOld;
|
||||
object oShield ;
|
||||
object oBracerOld;
|
||||
object oHideOld;
|
||||
//Assume the normal shape doesn't have a creature skin object.
|
||||
//If using a subracesystem or something else that places a skin on the normal shape
|
||||
//another condition is needed to decide whether or not to store current items.
|
||||
//One way could be to scan all effects to see whether one is a polymorph effect.
|
||||
int nPolyed = GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF));
|
||||
// If there is a creature armor see if it is a creature hide put
|
||||
// on the unpolymorphed player by scanning for a polymorph effect.
|
||||
if ( nPolyed )
|
||||
nPolyed = ( ScanForPolymorphEffect(OBJECT_SELF) != -2 );
|
||||
if(! nPolyed)
|
||||
{
|
||||
//if not polymorphed get items worn and store on player.
|
||||
oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
|
||||
oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
|
||||
oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF);
|
||||
oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF);
|
||||
oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF);
|
||||
oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF);
|
||||
oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF);
|
||||
oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF);
|
||||
oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF);
|
||||
oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF);
|
||||
oBracerOld = GetItemInSlot(INVENTORY_SLOT_ARMS,OBJECT_SELF);
|
||||
oHideOld = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldWeapon",oWeaponOld);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldArmor",oArmorOld);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldRing1",oRing1Old);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldRing2",oRing2Old);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldAmulet",oAmuletOld);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldCloak",oCloakOld);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldBoots",oBootsOld);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldBelt",oBeltOld);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldHelmet",oHelmetOld);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldBracer",oBracerOld);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldHide",oHideOld);
|
||||
if (GetIsObjectValid(oShield))
|
||||
{
|
||||
if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD &&
|
||||
GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD &&
|
||||
GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD)
|
||||
{
|
||||
oShield = OBJECT_INVALID;
|
||||
}
|
||||
}
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldShield",oShield);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
//if already polymorphed use items stored earlier.
|
||||
oWeaponOld = GetLocalObject(OBJECT_SELF,"GW_OldWeapon");
|
||||
oArmorOld = GetLocalObject(OBJECT_SELF,"GW_OldArmor");
|
||||
oRing1Old = GetLocalObject(OBJECT_SELF,"GW_OldRing1");
|
||||
oRing2Old = GetLocalObject(OBJECT_SELF,"GW_OldRing2");
|
||||
oAmuletOld = GetLocalObject(OBJECT_SELF,"GW_OldAmulet");
|
||||
oCloakOld = GetLocalObject(OBJECT_SELF,"GW_OldCloak");
|
||||
oBootsOld = GetLocalObject(OBJECT_SELF,"GW_OldBoots");
|
||||
oBeltOld = GetLocalObject(OBJECT_SELF,"GW_OldBelt");
|
||||
oHelmetOld = GetLocalObject(OBJECT_SELF,"GW_OldHelmet");
|
||||
oShield = GetLocalObject(OBJECT_SELF,"GW_OldShield");
|
||||
oBracerOld = GetLocalObject(OBJECT_SELF,"GW_OldBracer");
|
||||
oHideOld = GetLocalObject(OBJECT_SELF,"GW_OldHide");
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Here the actual polymorphing is done
|
||||
//--------------------------------------------------------------------------
|
||||
ePoly = EffectPolymorph(nPoly);
|
||||
//--------------------------------------------------------------------------
|
||||
// Iznoghoud: Link the stackable properties as permanent bonuses to the
|
||||
// Polymorph effect, instead of putting them on the creature hide. They will
|
||||
// properly disappear as soon as the polymorph is ended.
|
||||
//--------------------------------------------------------------------------
|
||||
ePoly = AddStackablePropertiesToPoly ( oTarget, ePoly, bWeapon, bItems, bArmor, oArmorOld, oRing1Old, oRing2Old, oAmuletOld, oCloakOld, oBracerOld, oBootsOld, oBeltOld, oHelmetOld, oShield, oWeaponOld, oHideOld);
|
||||
ePoly = ExtraordinaryEffect(ePoly);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePoly, OBJECT_SELF, HoursToSeconds(nDuration));
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_ELEMENTAL_SHAPE, FALSE));
|
||||
//--------------------------------------------------------------------------
|
||||
// This code handles the merging of item properties
|
||||
//--------------------------------------------------------------------------
|
||||
object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
|
||||
object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
|
||||
object oClawLeft = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L,OBJECT_SELF);
|
||||
object oClawRight = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R,OBJECT_SELF);
|
||||
object oBite = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B,OBJECT_SELF);
|
||||
//--------------------------------------------------------------------------
|
||||
// ...Weapons
|
||||
//--------------------------------------------------------------------------
|
||||
if (bWeapon)
|
||||
|
||||
int bWeapon = StringToInt(Get2DACache("polymorph","MergeW",nPoly)) == 1;
|
||||
int bArmor = StringToInt(Get2DACache("polymorph","MergeA",nPoly)) == 1;
|
||||
int bItems = StringToInt(Get2DACache("polymorph","MergeI",nPoly)) == 1;
|
||||
|
||||
|
||||
object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
|
||||
object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
|
||||
object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF);
|
||||
object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF);
|
||||
object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF);
|
||||
object oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF);
|
||||
object oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF);
|
||||
object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF);
|
||||
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF);
|
||||
if (GetIsObjectValid(oShield))
|
||||
|
||||
|
||||
|
||||
{
|
||||
//----------------------------------------------------------------------
|
||||
// GZ: 2003-10-20
|
||||
// Sorry, but I was forced to take that out, it was confusing people
|
||||
// and there were problems with updating the stats sheet.
|
||||
//----------------------------------------------------------------------
|
||||
/* if (!GetIsObjectValid(oWeaponOld))
|
||||
if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD &&
|
||||
GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD &&
|
||||
GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{
|
||||
//------------------------------------------------------------------
|
||||
// If we had no weapon equipped before, remove the old weapon
|
||||
// to allow monks to change into unarmed forms by not equipping any
|
||||
// weapon before polymorphing
|
||||
//------------------------------------------------------------------
|
||||
DestroyObject(oWeaponNew);
|
||||
|
||||
|
||||
|
||||
|
||||
oShield = OBJECT_INVALID;
|
||||
|
||||
}
|
||||
else*/
|
||||
{
|
||||
//------------------------------------------------------------------
|
||||
// Merge item properties...
|
||||
//------------------------------------------------------------------
|
||||
WildshapeCopyWeaponProperties(oTarget, oWeaponOld, oWeaponNew);
|
||||
}
|
||||
}
|
||||
else {
|
||||
switch ( WS_COPY_WEAPON_PROPS_TO_UNARMED )
|
||||
{
|
||||
case 1: // Copy over weapon properties to claws/bite
|
||||
WildshapeCopyNonStackProperties(oWeaponOld,oClawLeft, TRUE);
|
||||
WildshapeCopyNonStackProperties(oWeaponOld,oClawRight, TRUE);
|
||||
WildshapeCopyNonStackProperties(oWeaponOld,oBite, TRUE);
|
||||
break;
|
||||
case 2: // Copy over glove properties to claws/bite
|
||||
WildshapeCopyNonStackProperties(oBracerOld,oClawLeft, FALSE);
|
||||
WildshapeCopyNonStackProperties(oBracerOld,oClawRight, FALSE);
|
||||
WildshapeCopyNonStackProperties(oBracerOld,oBite, FALSE);
|
||||
bCopyGlovesToClaws = TRUE;
|
||||
break;
|
||||
case 3: // Copy over weapon properties to claws/bite if wearing a weapon, otherwise copy gloves
|
||||
if ( GetIsObjectValid(oWeaponOld) )
|
||||
{
|
||||
WildshapeCopyNonStackProperties(oWeaponOld,oClawLeft, TRUE);
|
||||
WildshapeCopyNonStackProperties(oWeaponOld,oClawRight, TRUE);
|
||||
WildshapeCopyNonStackProperties(oWeaponOld,oBite, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
WildshapeCopyNonStackProperties(oBracerOld,oClawLeft, FALSE);
|
||||
WildshapeCopyNonStackProperties(oBracerOld,oClawRight, FALSE);
|
||||
WildshapeCopyNonStackProperties(oBracerOld,oBite, FALSE);
|
||||
bCopyGlovesToClaws = TRUE;
|
||||
}
|
||||
break;
|
||||
default: // Do not copy over anything
|
||||
break;
|
||||
};
|
||||
}
|
||||
//--------------------------------------------------------------------------
|
||||
// ...Armor
|
||||
//--------------------------------------------------------------------------
|
||||
if (bArmor)
|
||||
{
|
||||
//----------------------------------------------------------------------
|
||||
// Merge item properties from armor and helmet...
|
||||
//----------------------------------------------------------------------
|
||||
WildshapeCopyNonStackProperties(oArmorOld,oArmorNew);
|
||||
WildshapeCopyNonStackProperties(oHelmetOld,oArmorNew);
|
||||
WildshapeCopyNonStackProperties(oShield,oArmorNew);
|
||||
WildshapeCopyNonStackProperties(oHideOld,oArmorNew);
|
||||
}
|
||||
//--------------------------------------------------------------------------
|
||||
// ...Magic Items
|
||||
//--------------------------------------------------------------------------
|
||||
if (bItems)
|
||||
{
|
||||
//----------------------------------------------------------------------
|
||||
// Merge item properties from from rings, amulets, cloak, boots, belt
|
||||
// Iz: And bracers, in case oBracerOld gets set to a valid object.
|
||||
//----------------------------------------------------------------------
|
||||
WildshapeCopyNonStackProperties(oRing1Old,oArmorNew);
|
||||
WildshapeCopyNonStackProperties(oRing2Old,oArmorNew);
|
||||
WildshapeCopyNonStackProperties(oAmuletOld,oArmorNew);
|
||||
WildshapeCopyNonStackProperties(oCloakOld,oArmorNew);
|
||||
WildshapeCopyNonStackProperties(oBootsOld,oArmorNew);
|
||||
WildshapeCopyNonStackProperties(oBeltOld,oArmorNew);
|
||||
// Because Bracers can have On Hit Cast Spell type properties we should
|
||||
// avoid copying the bracers twice. Otherwise the player can get that On
|
||||
// Hit effect both when hitting, and getting hit.
|
||||
if ( bCopyGlovesToClaws == FALSE )
|
||||
WildshapeCopyNonStackProperties(oBracerOld,oArmorNew);
|
||||
}
|
||||
|
||||
|
||||
//this command will make shore that polymorph plays nice with the shifter
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ShifterCheck(OBJECT_SELF);
|
||||
|
||||
|
||||
|
||||
//Apply the VFX impact and effects
|
||||
ClearAllActions(); // prevents an exploit
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePoly, OBJECT_SELF, HoursToSeconds(nDuration));
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
|
||||
object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (bWeapon)
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (bArmor)
|
||||
{
|
||||
IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew);
|
||||
IPWildShapeCopyItemProperties(oArmorOld,oArmorNew);
|
||||
|
||||
|
||||
|
||||
IPWildShapeCopyItemProperties(oShield,oArmorNew);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (bItems)
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
IPWildShapeCopyItemProperties(oRing1Old,oArmorNew);
|
||||
IPWildShapeCopyItemProperties(oRing2Old,oArmorNew);
|
||||
IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew);
|
||||
IPWildShapeCopyItemProperties(oCloakOld,oArmorNew);
|
||||
IPWildShapeCopyItemProperties(oBootsOld,oArmorNew);
|
||||
IPWildShapeCopyItemProperties(oBeltOld,oArmorNew);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
DelayCommand(1.5,ActionCastSpellOnSelf(SPELL_SHAPE_INCREASE_DAMAGE));
|
||||
}
|
||||
|
Binary file not shown.
@@ -1,31 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Wholeness of Body
|
||||
//:: NW_S2_Wholeness
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
The monk is able to heal twice his level in HP
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Aug 14, 2001
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
/*
|
||||
bugfix by Japetus
|
||||
- didn't healed the correct amount
|
||||
*/
|
||||
|
||||
void main()
|
||||
{
|
||||
//Declare major variables
|
||||
int nLevel = GetLevelByClass(CLASS_TYPE_MONK)*2;
|
||||
effect eHeal = EffectHeal(nLevel);
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_HEALING_M);
|
||||
SignalEvent(OBJECT_SELF, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_WHOLENESS_OF_BODY, FALSE));
|
||||
//Apply the VFX impact and effects
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, OBJECT_SELF);
|
||||
}
|
||||
|
||||
|
Binary file not shown.
@@ -15,20 +15,37 @@
|
||||
//:: Created By: Preston Watamaniuk
|
||||
//:: Created On: Jan 22, 2002
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Modified By: Iznoghoud - January 19 2004
|
||||
/*
|
||||
What this script changes:
|
||||
Allows druid wildshapes to get stacking item properties carried over correctly
|
||||
just like shifters.
|
||||
See Iznoghoud's x2_s2_gwildshp script for an in-detail description.
|
||||
*/
|
||||
//:: 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.
|
||||
|
||||
#include "ws_inc_shifter"
|
||||
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"
|
||||
#include "prc_alterations"
|
||||
#include "pnp_shft_poly"
|
||||
|
||||
void wild_shape_shift(object oPC, int nShape)
|
||||
{
|
||||
string sResRef = Get2DACache("prc_polymorph", "ResRef", nShape);
|
||||
StoreCurrentAppearanceAsTrueAppearance(oPC, TRUE);
|
||||
ShiftIntoResRef(oPC, SHIFTER_TYPE_DRUID, sResRef);
|
||||
}
|
||||
|
||||
void main()
|
||||
|
||||
{
|
||||
|
||||
//Override in town, no casting!
|
||||
if(GetLocalInt(GetArea(OBJECT_SELF), "NOCAST")==2 && !GetIsDM(OBJECT_SELF))
|
||||
{
|
||||
@@ -37,21 +54,41 @@ if(GetLocalInt(GetArea(OBJECT_SELF), "NOCAST")==2 && !GetIsDM(OBJECT_SELF))
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//Declare major variables
|
||||
int nSpell = GetSpellId();
|
||||
object oTarget = GetSpellTargetObject();
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
object oPC = OBJECT_SELF;
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
|
||||
effect ePoly;
|
||||
int nPoly;
|
||||
int nMetaMagic = GetMetaMagicFeat();
|
||||
int nDuration = GetLevelByClass(CLASS_TYPE_DRUID);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
int nDuration = GetLevelByClass(CLASS_TYPE_DRUID, oPC)
|
||||
+ GetLevelByClass(CLASS_TYPE_ARCANE_HIEROPHANT, oPC);
|
||||
if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
|
||||
{ // check to see if abort due to being mounted
|
||||
if (PRCHorseGetIsMounted(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)
|
||||
if ((nMetaMagic & METAMAGIC_EXTEND))
|
||||
{
|
||||
nDuration = nDuration *2; //Duration is +100%
|
||||
}
|
||||
|
||||
//this command will make shore that polymorph plays nice with the shifter
|
||||
ShifterCheck(OBJECT_SELF);
|
||||
|
||||
int nShape = GetPersistantLocalInt(oPC, PRC_PNP_SHIFTING + IntToString(nSpell));
|
||||
if(nShape > 0)
|
||||
{
|
||||
wild_shape_shift(oPC, nShape);
|
||||
return;
|
||||
}
|
||||
|
||||
//Determine Polymorph subradial type
|
||||
if(nSpell == 401)
|
||||
{
|
||||
@@ -93,255 +130,255 @@ if(GetLocalInt(GetArea(OBJECT_SELF), "NOCAST")==2 && !GetIsDM(OBJECT_SELF))
|
||||
{
|
||||
nPoly = POLYMORPH_TYPE_DIRE_BADGER;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int bWeapon;
|
||||
int bArmor;
|
||||
int bItems;
|
||||
int bCopyGlovesToClaws = FALSE;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1;
|
||||
|
||||
|
||||
if ( WS_ALWAYS_COPY_ARMOR_PROPS )
|
||||
bArmor = TRUE;
|
||||
else
|
||||
bArmor = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if ( WS_ALWAYS_COPY_ITEM_PROPS )
|
||||
bItems = TRUE;
|
||||
else
|
||||
bItems = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Send message to PC about which items get merged to this form
|
||||
string sMerge;
|
||||
sMerge = "Merged: "; // <caz<61>>: This is a color code that makes the text behind it blue.
|
||||
if(bArmor) sMerge += "<caz<61>>Armor, Helmet, Shield";
|
||||
if(bItems) sMerge += ",</c> <ca<63>a>Rings, Amulet, Cloak, Boots, Belt, Bracers";
|
||||
if( bWeapon || WS_COPY_WEAPON_PROPS_TO_UNARMED == 1 )
|
||||
sMerge += ",</c> <c<>AA>Weapon";
|
||||
else if ( WS_COPY_WEAPON_PROPS_TO_UNARMED == 2 )
|
||||
sMerge += ",</c> <c<>AA>Gloves to unarmed attacks";
|
||||
else if (WS_COPY_WEAPON_PROPS_TO_UNARMED == 3 )
|
||||
sMerge += ",</c> <c<>AA>Weapon (if you had one equipped) or gloves to unarmed attacks";
|
||||
else
|
||||
sMerge += ",</c> <c<>AA>No weapon or gloves to unarmed attacks";
|
||||
SendMessageToPC(oTarget,sMerge + ".</c>");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Store which items should transfer to this polymorph type. (For exportallchar scripts)
|
||||
SetLocalInt(oTarget, "GW_PolyID", nPoly);
|
||||
SetLocalInt(oTarget, "GW_bWeapon", bWeapon );
|
||||
SetLocalInt(oTarget, "GW_bArmor", bArmor );
|
||||
SetLocalInt(oTarget, "GW_bItems", bItems );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Store the old objects so we can access them after the character has
|
||||
// changed into his new form
|
||||
//--------------------------------------------------------------------------
|
||||
object oWeaponOld;
|
||||
object oArmorOld;
|
||||
object oRing1Old ;
|
||||
object oRing2Old;
|
||||
object oAmuletOld;
|
||||
object oCloakOld ;
|
||||
object oBootsOld ;
|
||||
object oBeltOld ;
|
||||
object oHelmetOld;
|
||||
object oShield ;
|
||||
object oBracerOld;
|
||||
object oHideOld;
|
||||
//Assume the normal shape doesn't have a creature skin object.
|
||||
//If using a subracesystem or something else that places a skin on the normal shape
|
||||
//another condition is needed to decide whether or not to store current items.
|
||||
//One way could be to scan all effects to see whether one is a polymorph effect.
|
||||
int nPolyed = GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF));
|
||||
// If there is a creature armor see if it is a creature hide put
|
||||
// on the unpolymorphed player by scanning for a polymorph effect.
|
||||
if ( nPolyed )
|
||||
nPolyed = ( ScanForPolymorphEffect(OBJECT_SELF) != -2 );
|
||||
if(! nPolyed)
|
||||
{
|
||||
//if not polymorphed get items worn and store on player.
|
||||
oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
|
||||
oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
|
||||
oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF);
|
||||
oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF);
|
||||
oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF);
|
||||
oCloakOld = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF);
|
||||
oBootsOld = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF);
|
||||
oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF);
|
||||
oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF);
|
||||
oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF);
|
||||
oBracerOld = GetItemInSlot(INVENTORY_SLOT_ARMS,OBJECT_SELF);
|
||||
oHideOld = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldWeapon",oWeaponOld);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldArmor",oArmorOld);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldRing1",oRing1Old);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldRing2",oRing2Old);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldAmulet",oAmuletOld);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldCloak",oCloakOld);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldBoots",oBootsOld);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldBelt",oBeltOld);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldHelmet",oHelmetOld);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldBracer",oBracerOld);
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldHide",oHideOld);
|
||||
if (GetIsObjectValid(oShield))
|
||||
{
|
||||
if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD &&
|
||||
GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD &&
|
||||
GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD)
|
||||
{
|
||||
oShield = OBJECT_INVALID;
|
||||
}
|
||||
}
|
||||
SetLocalObject(OBJECT_SELF,"GW_OldShield",oShield);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
//if already polymorphed use items stored earlier.
|
||||
oWeaponOld = GetLocalObject(OBJECT_SELF,"GW_OldWeapon");
|
||||
oArmorOld = GetLocalObject(OBJECT_SELF,"GW_OldArmor");
|
||||
oRing1Old = GetLocalObject(OBJECT_SELF,"GW_OldRing1");
|
||||
oRing2Old = GetLocalObject(OBJECT_SELF,"GW_OldRing2");
|
||||
oAmuletOld = GetLocalObject(OBJECT_SELF,"GW_OldAmulet");
|
||||
oCloakOld = GetLocalObject(OBJECT_SELF,"GW_OldCloak");
|
||||
oBootsOld = GetLocalObject(OBJECT_SELF,"GW_OldBoots");
|
||||
oBeltOld = GetLocalObject(OBJECT_SELF,"GW_OldBelt");
|
||||
oHelmetOld = GetLocalObject(OBJECT_SELF,"GW_OldHelmet");
|
||||
oShield = GetLocalObject(OBJECT_SELF,"GW_OldShield");
|
||||
oBracerOld = GetLocalObject(OBJECT_SELF,"GW_OldBracer");
|
||||
oHideOld = GetLocalObject(OBJECT_SELF,"GW_OldHide");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Here the actual polymorphing is done
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
ePoly = EffectPolymorph(nPoly);
|
||||
//--------------------------------------------------------------------------
|
||||
// Iznoghoud: Link the stackable properties as permanent bonuses to the
|
||||
// Polymorph effect, instead of putting them on the creature hide. They will
|
||||
// properly disappear as soon as the polymorph is ended.
|
||||
//--------------------------------------------------------------------------
|
||||
ePoly = AddStackablePropertiesToPoly ( oTarget, ePoly, bWeapon, bItems, bArmor, oArmorOld, oRing1Old, oRing2Old, oAmuletOld, oCloakOld, oBracerOld, oBootsOld, oBeltOld, oHelmetOld, oShield, oWeaponOld, oHideOld);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ePoly = ExtraordinaryEffect(ePoly);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePoly, OBJECT_SELF, HoursToSeconds(nDuration));
|
||||
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_WILD_SHAPE, FALSE));
|
||||
//--------------------------------------------------------------------------
|
||||
// This code handles the merging of item properties
|
||||
//--------------------------------------------------------------------------
|
||||
object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
|
||||
object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
|
||||
object oClawLeft = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L,OBJECT_SELF);
|
||||
object oClawRight = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R,OBJECT_SELF);
|
||||
object oBite = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B,OBJECT_SELF);
|
||||
//--------------------------------------------------------------------------
|
||||
// ...Weapons
|
||||
//--------------------------------------------------------------------------
|
||||
if (bWeapon)
|
||||
{
|
||||
//----------------------------------------------------------------------
|
||||
// GZ: 2003-10-20
|
||||
// Sorry, but I was forced to take that out, it was confusing people
|
||||
// and there were problems with updating the stats sheet.
|
||||
//----------------------------------------------------------------------
|
||||
/* if (!GetIsObjectValid(oWeaponOld))
|
||||
{
|
||||
//------------------------------------------------------------------
|
||||
// If we had no weapon equipped before, remove the old weapon
|
||||
// to allow monks to change into unarmed forms by not equipping any
|
||||
// weapon before polymorphing
|
||||
//------------------------------------------------------------------
|
||||
DestroyObject(oWeaponNew);
|
||||
}
|
||||
else*/
|
||||
{
|
||||
//------------------------------------------------------------------
|
||||
// Merge item properties...
|
||||
//------------------------------------------------------------------
|
||||
WildshapeCopyWeaponProperties(oTarget, oWeaponOld,oWeaponNew);
|
||||
}
|
||||
}
|
||||
else {
|
||||
switch ( WS_COPY_WEAPON_PROPS_TO_UNARMED )
|
||||
{
|
||||
case 1: // Copy over weapon properties to claws/bite
|
||||
WildshapeCopyNonStackProperties(oWeaponOld,oClawLeft, TRUE);
|
||||
WildshapeCopyNonStackProperties(oWeaponOld,oClawRight, TRUE);
|
||||
WildshapeCopyNonStackProperties(oWeaponOld,oBite, TRUE);
|
||||
break;
|
||||
case 2: // Copy over glove properties to claws/bite
|
||||
WildshapeCopyNonStackProperties(oBracerOld,oClawLeft, FALSE);
|
||||
WildshapeCopyNonStackProperties(oBracerOld,oClawRight, FALSE);
|
||||
WildshapeCopyNonStackProperties(oBracerOld,oBite, FALSE);
|
||||
bCopyGlovesToClaws = TRUE;
|
||||
break;
|
||||
case 3: // Copy over weapon properties to claws/bite if wearing a weapon, otherwise copy gloves
|
||||
if ( GetIsObjectValid(oWeaponOld) )
|
||||
{
|
||||
WildshapeCopyNonStackProperties(oWeaponOld,oClawLeft, TRUE);
|
||||
WildshapeCopyNonStackProperties(oWeaponOld,oClawRight, TRUE);
|
||||
WildshapeCopyNonStackProperties(oWeaponOld,oBite, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
WildshapeCopyNonStackProperties(oBracerOld,oClawLeft, FALSE);
|
||||
WildshapeCopyNonStackProperties(oBracerOld,oClawRight, FALSE);
|
||||
WildshapeCopyNonStackProperties(oBracerOld,oBite, FALSE);
|
||||
bCopyGlovesToClaws = TRUE;
|
||||
}
|
||||
break;
|
||||
default: // Do not copy over anything
|
||||
break;
|
||||
};
|
||||
}
|
||||
//--------------------------------------------------------------------------
|
||||
// ...Armor
|
||||
//--------------------------------------------------------------------------
|
||||
if (bArmor)
|
||||
{
|
||||
//----------------------------------------------------------------------
|
||||
// Merge item properties from armor and helmet...
|
||||
//----------------------------------------------------------------------
|
||||
WildshapeCopyNonStackProperties(oArmorOld,oArmorNew);
|
||||
WildshapeCopyNonStackProperties(oHelmetOld,oArmorNew);
|
||||
WildshapeCopyNonStackProperties(oShield,oArmorNew);
|
||||
WildshapeCopyNonStackProperties(oHideOld,oArmorNew);
|
||||
}
|
||||
//--------------------------------------------------------------------------
|
||||
// ...Magic Items
|
||||
//--------------------------------------------------------------------------
|
||||
if (bItems)
|
||||
{
|
||||
//----------------------------------------------------------------------
|
||||
// Merge item properties from from rings, amulets, cloak, boots, belt
|
||||
// Iz: And bracers, in case oBracerOld gets set to a valid object.
|
||||
//----------------------------------------------------------------------
|
||||
WildshapeCopyNonStackProperties(oRing1Old,oArmorNew);
|
||||
WildshapeCopyNonStackProperties(oRing2Old,oArmorNew);
|
||||
WildshapeCopyNonStackProperties(oAmuletOld,oArmorNew);
|
||||
WildshapeCopyNonStackProperties(oCloakOld,oArmorNew);
|
||||
WildshapeCopyNonStackProperties(oBootsOld,oArmorNew);
|
||||
WildshapeCopyNonStackProperties(oBeltOld,oArmorNew);
|
||||
// Because Bracers can have On Hit Cast Spell type properties we should
|
||||
// avoid copying the bracers twice. Otherwise the player can get that On
|
||||
// Hit effect both when hitting, and getting hit.
|
||||
if ( bCopyGlovesToClaws == FALSE )
|
||||
WildshapeCopyNonStackProperties(oBracerOld,oArmorNew);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
int bWeapon = StringToInt(Get2DACache("polymorph","MergeW",nPoly)) == 1;
|
||||
int bArmor = StringToInt(Get2DACache("polymorph","MergeA",nPoly)) == 1;
|
||||
int bItems = StringToInt(Get2DACache("polymorph","MergeI",nPoly)) == 1;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//============================================================================================
|
||||
/*
|
||||
|
||||
|
||||
|
||||
object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
|
||||
object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
|
||||
@@ -357,12 +394,17 @@ if(GetLocalInt(GetArea(OBJECT_SELF), "NOCAST")==2 && !GetIsDM(OBJECT_SELF))
|
||||
{
|
||||
if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD &&
|
||||
GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD &&
|
||||
GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD)
|
||||
GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD)
|
||||
{
|
||||
oShield = OBJECT_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
ClearAllActions(); // prevents an exploit
|
||||
|
||||
|
||||
if (GetEssentiaInvestedFeat(OBJECT_SELF, FEAT_AZURE_WILD_SHAPE))
|
||||
ePoly = EffectLinkEffects(ePoly, EffectDamageIncrease(IPGetDamageBonusConstantFromNumber(GetEssentiaInvestedFeat(OBJECT_SELF, FEAT_AZURE_WILD_SHAPE)), DAMAGE_TYPE_BASE_WEAPON));
|
||||
|
||||
|
||||
|
||||
@@ -393,5 +435,6 @@ if(GetLocalInt(GetArea(OBJECT_SELF), "NOCAST")==2 && !GetIsDM(OBJECT_SELF))
|
||||
IPWildShapeCopyItemProperties(oBeltOld,oArmorNew);
|
||||
}
|
||||
|
||||
DelayCommand(1.5,ActionCastSpellOnSelf(SPELL_SHAPE_INCREASE_DAMAGE));
|
||||
}
|
||||
*/
|
||||
|
||||
|
@@ -1,132 +0,0 @@
|
||||
2DA V2.0
|
||||
|
||||
SwitchName SwitchType SwitchValue
|
||||
3 PRC_PNP_TRUESEEING int 1
|
||||
4 PRC_TIMESTOP_LOCAL int 1
|
||||
5 PRC_TIMESTOP_NO_HOSTILE int 0
|
||||
6 PRC_TIMESTOP_BLANK_PC int 0
|
||||
7 PRC_PNP_ELEMENTAL_SWARM int 1
|
||||
8 PRC_PNP_TENSERS_TRANSFORMATION int 1
|
||||
9 PRC_PNP_BLACK_BLADE_OF_DISASTER int 1
|
||||
10 PRC_PNP_FIND_TRAPS int 0
|
||||
11 PRC_PNP_DARKNESS int 0
|
||||
12 PRC_PNP_DARKNESS_35ED int 0
|
||||
13 PRC_PNP_ANIMATE_DEAD int 1
|
||||
14 PRC_35ED_WORD_OF_FAITH int 0
|
||||
15 PRC_CREATE_UNDEAD_UNCONTROLLED int 1
|
||||
16 PRC_CREATE_UNDEAD_PERMANENT int 0
|
||||
17 PRC_SLEEP_NO_HD_CAP int 0
|
||||
18 PRC_USE_NEW_IMBUE_ARROW int 1
|
||||
19 PRC_ORC_WARLORD_COHORT int 1
|
||||
20 PRC_LICH_ALTER_SELF_DISABLE int 0
|
||||
21 PRC_TRUE_NECROMANCER_ALTERNATE_VISUAL int 1
|
||||
22 PRC_THRALLHERD_LEADERSHIP int 1
|
||||
23 PRC_PNP_UNIMPINGED int 1
|
||||
24 PRC_PNP_IMPENETRABILITY int 1
|
||||
25 PRC_PNP_DULLBLADES int 1
|
||||
26 PRC_PNP_CHAMPIONS_VALOR int 1
|
||||
27 PRC_STAFF_CASTER_LEVEL int 1
|
||||
28 PRC_PNP_ABILITY_DAMAGE_EFFECTS int 1
|
||||
29 PRC_PNP_REST_HEALING int 0
|
||||
30 PRC_PNP_SOMATIC_COMPOMENTS int 0
|
||||
31 PRC_PNP_SOMATIC_ITEMS int 0
|
||||
32 PRC_MULTISUMMON int 1
|
||||
33 PRC_SUMMON_ROUND_PER_LEVEL int 0
|
||||
34 PRC_PNP_FAMILIAR_FEEDING int 0
|
||||
35 PRC_PNP_HOLY_AVENGER_IPROP int 1
|
||||
36 PRC_PNP_SLINGS int 1
|
||||
37 PRC_PNP_RACIAL_SPEED int 1
|
||||
38 PRC_PNP_ARMOR_SPEED int 1
|
||||
39 PRC_REMOVE_PLAYER_SPEED int 1
|
||||
40 PRC_BREW_POTION_CASTER_LEVEL int 1
|
||||
41 PRC_SCRIBE_SCROLL_CASTER_LEVEL int 1
|
||||
42 PRC_CRAFT_WAND_CASTER_LEVEL int 1
|
||||
43 PRC_CRAFTING_BASE_ITEMS int 1
|
||||
44 PRC_XP_USE_SIMPLE_LA int 1
|
||||
45 PRC_XP_USE_SIMPLE_RACIAL_HD int 1
|
||||
46 PRC_AUTO_IDENTIFY_ON_ACQUIRE int 1
|
||||
47 PRC_AUTO_UNIDENTIFY_ON_UNACQUIRE int 0
|
||||
48 PRC_BARD_LIGHT_ARMOR_SPELLCASTING int 1
|
||||
49 PRC_PSIONIC_SLAYER_FAV_ENEMY_ABERRATION_ONLY int 1
|
||||
50 PRC_ECL_USES_XP_NOT_HD int 1
|
||||
51 PRC_PNP_ANIMAL_COMPANIONS int 1
|
||||
52 PRC_PNP_FAMILIARS int 1
|
||||
53 PRC_POWER_ATTACK int 1
|
||||
54 PRC_NEC_TERM_PERMADEATH int 0
|
||||
55 PRC_SPELL_ALIGNMENT_RESTRICT int 2
|
||||
56 PRC_ALLOW_ONLY_SHARP_WEAPONS int 0
|
||||
57 PRC_DEXBASED_WEAPON_POISONING_FAILURE_CHANCE int 1
|
||||
58 PRC_PNP_RAPID_METABOLISM int 0
|
||||
59 PRC_PNP_ELEMENTAL_DAMAGE int 1
|
||||
60 PRC_SMALL_CREATURE_FINESSE int 1
|
||||
61 PRC_CRAFT_ROD_CASTER_LEVEL int 1
|
||||
62 PRC_CRAFT_STAFF_CASTER_LEVEL int 1
|
||||
63 PRC_XP_USE_SIMPLE_RACIAL_HD_NO_FREE_XP int 1
|
||||
64 PRC_XP_INCLUDE_RACIAL_HIT_DIE_IN_LA int 0
|
||||
65 PRC_XP_USE_SETXP int 0
|
||||
66 PRC_DISABLE_COMPONENTS_SHOP int 0
|
||||
67 PRC_TRUE_NECROMANCER_ALTERNATE_VISUAL int 1
|
||||
68 PRC_DISABLE_CONVO_TEMPLATE_GAIN int 0
|
||||
69 PRC_SPELLSLAB int 1
|
||||
70 PRC_POWER_ATTACK_STACK_WITH_BW int 1
|
||||
71 PRC_DISABLE_SWITCH_CHANGING_CONVO int 1
|
||||
72 PRC_ENFORCE_RACIAL_APPEARANCE int 0
|
||||
73 PRC_APPEARNCE_CHANGE_DISABLE int 0
|
||||
74 ###BELOW_HERE_CAN_BREAK_EXISTING_PW### **** ****
|
||||
75 PRC_SUPPLY_BASED_REST int 0
|
||||
76 PRC_PNP_DEATH_ENABLE int 0
|
||||
77 PRC_DEATH_OR_BLEED int 1
|
||||
78 PRC_DEATH_DAMAGE_FROM_BLEEDING int 1
|
||||
79 PRC_DEATH_BLEED_TO_STABLE_CHANCE int 1
|
||||
80 PRC_DEATH_STABLE_TO_DISABLED_CHANCE int 1
|
||||
81 PRC_PW_TIME int 0
|
||||
82 PRC_PW_HP_TRACKING int 0
|
||||
83 PRC_PW_LOCATION_TRACKING int 0
|
||||
84 PRC_PW_MAPPIN_TRACKING int 0
|
||||
85 PRC_PW_DEATH_TRACKING int 0
|
||||
86 PRC_PW_SPELL_TRACKING int 0
|
||||
87 PRC_PW_LOGON_DELAY int 0
|
||||
88 PRC_XP_USE_PNP_XP int 1
|
||||
89 PRC_XP_MUST_BE_IN_AREA int 1
|
||||
90 PRC_XP_MAX_PHYSICAL_DISTANCE int 0
|
||||
91 PRC_XP_MAX_LEVEL_DIFF int 8
|
||||
92 PRC_EPIC_INGORE_DEFAULT int 0
|
||||
93 PRC_EPIC_XP_COSTS int 1
|
||||
94 PRC_EPIC_TAKE_TEN_RULE int 1
|
||||
95 PRC_EPIC_PRIMARY_ABILITY_MODIFIER_RULE int 1
|
||||
96 PRC_EPIC_BACKLASH_DAMAGE int 1
|
||||
97 PRC_EPIC_FOCI_ADJUST_DC int 1
|
||||
98 PRC_EPIC_GOLD_MULTIPLIER int 1
|
||||
99 PRC_EPIC_XP_FRACTION int 1
|
||||
100 PRC_EPIC_FAILURE_FRACTION_GOLD int 1
|
||||
101 PRC_EPIC_BOOK_DESTRUCTION int 0
|
||||
102 PRC_EPIC_CONVO_LEARNING_DISABLE int 0
|
||||
103 PRC_CRAFTING_TIME_SCALE int 1
|
||||
104 PRC_AFTS_EXTRA_DAMAGE int 1
|
||||
105 PRC_DRAGON_DISCIPLE_SIZE_CHANGES int 1
|
||||
106 PRC_NPC_HAS_PC_SPELLCASTING int 1
|
||||
107 PRC_ENABLE_SPELL_SHARING int 1
|
||||
108 PRC_USE_DATABASE int 1
|
||||
109 PRC_DB_PRECACHE int 0
|
||||
110 PRC_DB_SQLITE int 0
|
||||
111 PRC_DB_SQLITE_INTERVAL int 0
|
||||
112 PRC_DB_MYSQL int 0
|
||||
113 PRC_USE_LETOSCRIPT int 0
|
||||
114 PRC_LETOSCRIPT_PHEONIX_SYNTAX int 0
|
||||
115 PRC_LETOSCRIPT_FIX_ABILITIES int 0
|
||||
116 PRC_LETOSCRIPT_UNICORN_SQL int 0
|
||||
117 PRC_LETOSCRIPT_GETNEWESTBIC int 0
|
||||
118 PRC_COMBAT_DEBUG int 0
|
||||
119 PRC_DEBUG int 0
|
||||
120 PRC_35_SPELL_FOCUS int 0
|
||||
121 PRC_35_TWO_WEAPON_FIGHTING int 0
|
||||
122 PRC_PNP_DISARM int 1
|
||||
123 PRC_BONUS_COHORTS int 1
|
||||
124 PRC_XP_HENCHMAN_PARTY_COUNT_x100 int 1
|
||||
125 PRC_XP_DOMINATED_PARTY_COUNT_x100 int 1
|
||||
126 PRC_XP_ANIMALCOMPANION_PARTY_COUNT_x100 int 1
|
||||
127 PRC_XP_FAMILIAR_PARTY_COUNT_x100 int 1
|
||||
128 PRC_XP_SUMMONED_PARTY_COUNT_x100 int 1
|
||||
129 PRC_CHICKEN_INFESTED int 1
|
||||
130 PRC_PNP_SHIFTER_BONUS int 127
|
||||
131 PRC_PW_SECURITY_CD_CHECK int 0
|
Binary file not shown.
@@ -1,102 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: x1_s2_imbuearrow
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Imbue Arrow
|
||||
- creates a fireball arrow that when it explodes
|
||||
acts like a fireball.
|
||||
- Must have shortbow or longbow in hand.
|
||||
|
||||
GZ: Updated
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By:
|
||||
//:: Created On:
|
||||
//:://////////////////////////////////////////////
|
||||
#include "X0_I0_SPELLS"
|
||||
|
||||
void main()
|
||||
{
|
||||
|
||||
//Declare major variables
|
||||
object oCaster = OBJECT_SELF;
|
||||
int nCasterLvl = GetLevelByClass(CLASS_TYPE_ARCANE_ARCHER,oCaster); // * get a bonus of +10 to make this useful for arcane archer
|
||||
int nDamage;
|
||||
float fDelay;
|
||||
effect eExplode = EffectVisualEffect(VFX_FNF_FIREBALL);
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
|
||||
effect eDam;
|
||||
//Get the spell target location as opposed to the spell target.
|
||||
location lTarget = GetSpellTargetLocation();
|
||||
//Limit Caster level for the purposes of damage
|
||||
if (nCasterLvl > 16)
|
||||
{
|
||||
nCasterLvl = 16 + ((nCasterLvl-10)/2); // add some epic progression of 1d6 per 2 levels after 10
|
||||
}
|
||||
else // * preserve minimum damage of 10d6
|
||||
{
|
||||
nCasterLvl = 10;
|
||||
}
|
||||
object oTarget = GetSpellTargetObject();
|
||||
// * GZ: Add arrow damage if targeted on creature...
|
||||
if (GetIsObjectValid(oTarget ))
|
||||
{
|
||||
if (spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF))
|
||||
{
|
||||
int nTouch = TouchAttackRanged(oTarget, TRUE);
|
||||
if (nTouch > 0)
|
||||
{
|
||||
|
||||
nDamage = ArcaneArcherDamageDoneByBow(nTouch ==2);
|
||||
|
||||
int nBonus = ArcaneArcherCalculateBonus() ;
|
||||
effect ePhysical = EffectDamage(nDamage, DAMAGE_TYPE_PIERCING,IPGetDamagePowerConstantFromNumber(nBonus));
|
||||
effect eMagic = EffectDamage(nBonus, DAMAGE_TYPE_MAGICAL);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, ePhysical, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eMagic, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Apply the fireball 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.
|
||||
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
||||
//Cycle through the targets within the spell shape until an invalid object is captured.
|
||||
while (GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF) == TRUE)
|
||||
{
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId(), TRUE));
|
||||
//Get the distance between the explosion and the target to calculate delay
|
||||
fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
|
||||
if (!MyResistSpell(OBJECT_SELF, oTarget, fDelay))
|
||||
{
|
||||
//Roll damage for each target
|
||||
nDamage = d6(nCasterLvl);
|
||||
//Resolve metamagic
|
||||
//Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
||||
nDamage = GetReflexAdjustedDamage(nDamage, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_FIRE);
|
||||
//Set the damage effect
|
||||
eDam = EffectDamage(nDamage, DAMAGE_TYPE_FIRE);
|
||||
if(nDamage > 0)
|
||||
{
|
||||
// Apply effects to the currently selected target.
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
|
||||
//This visual effect is applied to the target object not the location as above. This visual effect
|
||||
//represents the flame that erupts on the target not on the ground.
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
}
|
||||
}
|
||||
//Select the next target within the spell shape.
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user