//:://///////////////////////////////////////////// //:: Wild Shape //:: NW_S2_WildShape //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* Allows the Druid to change into animal forms. Updated: Sept 30 2003, Georg Z. * Made Armor merge with druid to make forms more useful. */ //::////////////////////////////////////////////// //:: Created By: Preston Watamaniuk //:: Created On: Jan 22, 2002 //::////////////////////////////////////////////// /* Combat modification: Now the druid can remap their wildshapes, which will carry over through a single reset. This is to enable the druid to wildshape even in combat The Badger shape enables them to call up the dialog to remap the other shapes */ #include "x2_inc_itemprop" #include "dmel_druidshapes" void main() { ClearAllActions(TRUE); //Declare major variables int nSpell = GetSpellId(); int nBear = GetLocalInt( OBJECT_SELF, "DMEL_DRUIDSHAPES_1" ); int nPant = GetLocalInt( OBJECT_SELF, "DMEL_DRUIDSHAPES_2" ); int nWolf = GetLocalInt( OBJECT_SELF, "DMEL_DRUIDSHAPES_3" ); int nBoar = GetLocalInt( OBJECT_SELF, "DMEL_DRUIDSHAPES_4" ); int nPoly; /* object oTarget = GetSpellTargetObject(); effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH); effect ePoly; int nPoly; int nMetaMagic = GetMetaMagicFeat();*/ int nDuration = GetLevelByClass(CLASS_TYPE_DRUID);/* //Enter Metamagic conditions if (nMetaMagic == METAMAGIC_EXTEND) { nDuration = nDuration *2; //Duration is +100% } */ //Determine Polymorph subradial type if(nSpell == 401) { if( nBear == 0 ) { nPoly = POLYMORPH_TYPE_BROWN_BEAR; if (nDuration >= 12) nPoly = POLYMORPH_TYPE_DIRE_BROWN_BEAR; } else nPoly = nBear - 1; DoShapechange(OBJECT_SELF, nPoly); } else if (nSpell == 402) { if(nPant == 0) { nPoly = POLYMORPH_TYPE_PANTHER; if (nDuration >= 12) nPoly = POLYMORPH_TYPE_DIRE_PANTHER; } else nPoly = nPant - 1; DoShapechange(OBJECT_SELF, nPoly); } else if (nSpell == 403) { if( nWolf == 0 ) { nPoly = POLYMORPH_TYPE_WOLF; if (nDuration >= 12) nPoly = POLYMORPH_TYPE_DIRE_WOLF; } else nPoly = nWolf - 1; DoShapechange(OBJECT_SELF, nPoly); } else if (nSpell == 404) { if(nBoar == 0) { nPoly = POLYMORPH_TYPE_BOAR; if (nDuration >= 12) nPoly = POLYMORPH_TYPE_DIRE_BOAR; } else nPoly = nBoar - 1; DoShapechange(OBJECT_SELF, nPoly); } //Badger shape, remap the other wildshapes else if (nSpell == 405) { IncrementRemainingFeatUses(OBJECT_SELF, FEAT_WILD_SHAPE); ActionStartConversation(OBJECT_SELF, "dmel_convdrushp", TRUE, FALSE); /* nPoly = POLYMORPH_TYPE_BADGER; if (nDuration >= 12) { nPoly = POLYMORPH_TYPE_DIRE_BADGER; }*/ } /* ePoly = EffectPolymorph(nPoly); ePoly = ExtraordinaryEffect(ePoly); //Fire cast spell at event for the specified target SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_WILD_SHAPE, FALSE)); int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1; int bArmor = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1; int bItems = StringToInt(Get2DAString("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)) { if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD && GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD && GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD) { oShield = OBJECT_INVALID; } } //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(oShield,oArmorNew); IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew); IPWildShapeCopyItemProperties(oArmorOld,oArmorNew); } if (bItems) { IPWildShapeCopyItemProperties(oRing1Old,oArmorNew); IPWildShapeCopyItemProperties(oRing2Old,oArmorNew); IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew); IPWildShapeCopyItemProperties(oCloakOld,oArmorNew); IPWildShapeCopyItemProperties(oBootsOld,oArmorNew); IPWildShapeCopyItemProperties(oBeltOld,oArmorNew); } */ }