Removed Conflicting Scripts

Removed class ability scripts that interfered with the PRC's changes.
This commit is contained in:
Jaysyn904 2022-10-10 23:54:19 -04:00
parent 79a01e29f1
commit 77dbd6822a
18 changed files with 580 additions and 623 deletions

2
.gitignore vendored
View File

@ -6,3 +6,5 @@
_module/poa.mod
*.mod
*.mod
*.hak
_haks/output/poa_dev.md5

Binary file not shown.

View File

@ -1 +0,0 @@
470c8aa2ec6da2fb021692e5bf508f39

Binary file not shown.

View File

@ -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.

Binary file not shown.

Binary file not shown.

View File

@ -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~¬þ>: This is a color code that makes the text behind it sort of light blue.
if(bArmor) sMerge += "<cazþ>Armor, Helmet, Shield";
if(bItems) sMerge += ",</c> <caþ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.

Binary file not shown.

View File

@ -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þ>: This is a color code that makes the text behind it blue.
if(bArmor) sMerge += "<cazþ>Armor, Helmet, Shield";
if(bItems) sMerge += ",</c> <caþ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));
}
*/

View File

@ -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.