//:://///////////////////////////////////////////// //:: 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 //::////////////////////////////////////////////// #include "x2_inc_itemprop" void main() { //Declare major variables int nSpell = GetSpellId(); object oTarget = GetSpellTargetObject(); effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH); effect ePoly; int nPoly; int nMetaMagic = GetMetaMagicFeat(); int nDuration = GetLevelByClass(CLASS_TYPE_DRUID); //Enter Metamagic conditions if (nMetaMagic == METAMAGIC_EXTEND) { nDuration = nDuration *2; //Duration is +100% } // Extra stuff using those rings Vic put in string ring_equipped_hand = GetTag(GetItemInSlot(INVENTORY_SLOT_LEFTRING)); // checks that the ring which has been detected is one of the druid rings, if it is not the below checks will be skipped if(TestStringAgainstPattern("fr_wilds_**",ring_equipped_hand)) { if(ring_equipped_hand == "fr_wilds_wolf") { nPoly = POLYMORPH_TYPE_WOLF; } else if(ring_equipped_hand == "fr_wilds_badger") { nPoly = POLYMORPH_TYPE_BADGER; } else if(ring_equipped_hand == "fr_wilds_boar") { nPoly = POLYMORPH_TYPE_BOAR; } else if(ring_equipped_hand == "fr_wilds_brbear") { nPoly = POLYMORPH_TYPE_BROWN_BEAR; } else if(ring_equipped_hand == "fr_wilds_chicken") { nPoly = POLYMORPH_TYPE_CHICKEN; } else if(ring_equipped_hand == "fr_wilds_cow") { nPoly = POLYMORPH_TYPE_COW; } else if(ring_equipped_hand == "fr_not_in_use") { nPoly = POLYMORPH_TYPE_PENGUIN; } } else // end of extra stuff, we don't have a ring so it's "else" into the normal script //Determine Polymorph subradial type if(nSpell == 401) { nPoly = POLYMORPH_TYPE_BROWN_BEAR; if (nDuration >= 12) { nPoly = POLYMORPH_TYPE_DIRE_BROWN_BEAR; } } else if (nSpell == 402) { nPoly = POLYMORPH_TYPE_PANTHER; if (nDuration >= 12) { nPoly = POLYMORPH_TYPE_DIRE_PANTHER; } } else if (nSpell == 403) { nPoly = POLYMORPH_TYPE_WOLF; if (nDuration >= 12) { nPoly = POLYMORPH_TYPE_DIRE_WOLF; } } else if (nSpell == 404) { nPoly = POLYMORPH_TYPE_BOAR; if (nDuration >= 12) { nPoly = POLYMORPH_TYPE_DIRE_BOAR; } } else if (nSpell == 405) { 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_SMALLSHIELD) { oShield = OBJECT_INVALID; } } //Apply the VFX impact and effects 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); } }