//::////////////////////////////////////////////// //:: Change Shape use //:: prc_chngshp_lern //::////////////////////////////////////////////// /** @file Targets some creature to have it be stored as a known template and attempts to shift into it. @author Shane Hennessy @date Modified - 2006.10.08 - rewritten by Ornedan - modified by Fox */ //::////////////////////////////////////////////// //::////////////////////////////////////////////// #include "prc_inc_shifting" void main() { object oPC = OBJECT_SELF; object oTarget = PRCGetSpellTargetObject(); int nSpellID = GetSpellId(); int nShiftType; switch(nSpellID) { case SPELL_IRDA_CHANGE_SHAPE_LEARN: case SPELL_FEYRI_CHANGE_SHAPE_LEARN: case SPELL_RAKSHASA_CHANGE_SHAPE_LEARN: nShiftType = SHIFTER_TYPE_HUMANOIDSHAPE; break; case SPELL_ALTER_SELF_LEARN: nShiftType = SHIFTER_TYPE_ALTER_SELF; break; case SPELL_DISGUISE_SELF_LEARN: case SPELL_CHANGLING_CHANGE_SHAPE_LEARN: case SPELL_QUICK_CHANGE_SHAPE_LEARN: nShiftType = SHIFTER_TYPE_DISGUISE_SELF; break; } // Store the PC's current appearance as true appearance /// @note This may be a bad idea, we have no way of knowing if the current appearance really is the "true appearance" - Ornedan StoreCurrentAppearanceAsTrueAppearance(oPC, TRUE); // See if the creature is shiftable to. If so, store it as a template and shift if(GetCanShiftIntoCreature(oPC, nShiftType, oTarget)) { StoreShiftingTemplate(oPC, nShiftType, oTarget); // Start shifting. If this fails immediately, refund the shifting use if(!ShiftIntoCreature(oPC, nShiftType, oTarget)) { // In case of shifting failure, refund the shifting use if(nSpellID == SPELL_IRDA_CHANGE_SHAPE_LEARN) IncrementRemainingFeatUses(oPC, FEAT_IRDA_CHANGE_SHAPE); } } // Couldn't shift, refund the feat use else if(nSpellID == SPELL_IRDA_CHANGE_SHAPE_LEARN) IncrementRemainingFeatUses(oPC, FEAT_IRDA_CHANGE_SHAPE); }