generated from Jaysyn/ModuleTemplate
83 lines
3.8 KiB
Plaintext
83 lines
3.8 KiB
Plaintext
#include "prc_x2_itemprop"
|
|
#include "prc_inc_racial"
|
|
|
|
void DoShapechange(object oPC, int newShape);
|
|
|
|
//Script whipped up by El to allow druids to use their wild shape feat
|
|
//to transform into more creatures than the basic, hum-drum five that
|
|
//Bioware gave us
|
|
|
|
void DoShapechange(object oPC, int nPoly)
|
|
{
|
|
effect ePoly = SupernaturalEffect( EffectPolymorph(nPoly) ); //Edited to be a Supernatural effect so a druid can keep the shape through resting
|
|
|
|
//====================================COPIED FROM NW_S2_WILDSHAPE=======================//
|
|
//Fire cast spell at event for the specified target
|
|
SignalEvent(OBJECT_SELF, 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
|
|
ePoly = ExtraordinaryEffect( ePoly );
|
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF);
|
|
int apfx = MyPRCGetRacialType(OBJECT_SELF);
|
|
|
|
switch(apfx)
|
|
{
|
|
case 0: case 1: case 2: case 3: case 4: case 5:
|
|
case 6: ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_KNOCK), OBJECT_SELF );
|
|
SpeakString("Become another person . . .", TALKVOLUME_WHISPER); break;
|
|
case 8: case 9: case 17: ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_POLYMORPH), OBJECT_SELF); break;
|
|
case 7: case 19: case 20: case 23:
|
|
case 24: ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD), OBJECT_SELF); break;
|
|
default: ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_EVIL), OBJECT_SELF); break;
|
|
}
|
|
|
|
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);
|
|
}
|
|
//============================END OF COPY=====================================//
|
|
}//DoShapechange
|