//:://///////////////////////////////////////////// //:: Name mh_s2_mielikki //:: FileName mh_s2_mielikki //::////////////////////////////////////////////// /* Don verite de Mielikki */ //::////////////////////////////////////////////// //:: Created By: Age //:: Created On: 23 janvier 2004 //::////////////////////////////////////////////// #include "X0_I0_SPELLS" #include "mh_constante" void main() { //Declare major variables object oTarget = GetSpellTargetObject(); string str; if(GetRacialType(oTarget) != RACIAL_TYPE_ANIMAL) { FloatingTextStrRefOnCreature(16780237,OBJECT_SELF,TRUE); IncrementRemainingFeatUses(OBJECT_SELF,FEAT_MIELIKKI); //FloatingTextStringOnCreature("Vous devez cibler une cible animale",OBJECT_SELF,TRUE); return; } if(spellsIsTarget(oTarget,SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF )) { object oMaster = GetMaster(oTarget); if(GetIsObjectValid(oMaster)) { if( GetAssociate(ASSOCIATE_TYPE_SUMMONED, oMaster) == oTarget ) { //on revoque ici la creature avec un message effect eVis = EffectVisualEffect(VFX_IMP_UNSUMMON); SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_MIELIKKI)); //Determine correct save int nSpellDC = 15; //Make SR and will save checks if (!MySavingThrow(SAVING_THROW_WILL, oTarget, nSpellDC)) { //Apply the VFX and delay the destruction of the summoned monster so //that the script and VFX can play. ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); DestroyObject(oTarget, 0.5); } //str = GetName(oTarget) + " est une creature invoquee par " + GetName(oMaster); //FloatingTextStringOnCreature(str,OBJECT_SELF,TRUE); return ; } /* else if( GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oMaster) == oTarget ) { str = GetName(oTarget) + " est le familier de " + GetName(oMaster); FloatingTextStringOnCreature(str,OBJECT_SELF,TRUE); // indique si il s'agit d'un familier ou d'un compagnon animal, // ou eventuellement d'un compagnon } else if( GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oMaster) == oTarget ) { str = GetName(oTarget) + " est le compagnion animal de " + GetName(oMaster); FloatingTextStringOnCreature(str,OBJECT_SELF,TRUE); } else if( GetAssociate(ASSOCIATE_TYPE_DOMINATED, oMaster) == oTarget ) { str = GetName(oTarget) + " est une creature dominee par " + GetName(oMaster); FloatingTextStringOnCreature(str,OBJECT_SELF,TRUE); }*/ } else if(GetHasEffect(EFFECT_TYPE_POLYMORPH,oTarget) ) { //on annule l'effet de polymorphie effect eVis = EffectVisualEffect(VFX_IMP_UNSUMMON); SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_MIELIKKI)); //Determine correct save int nSpellDC = 15; //Make SR and will save checks if (!MySavingThrow(SAVING_THROW_WILL, oTarget, nSpellDC)) { //Apply the VFX and delay the destruction of the summoned monster so //that the script and VFX can play. ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); effect eTest = GetFirstEffect(oTarget); while(GetEffectType(eTest) != EFFECT_TYPE_POLYMORPH) { eTest = GetNextEffect(oTarget); } RemoveEffect(oTarget,eTest); } return; } //enleve tout les effets positifs effect eVisual = EffectVisualEffect(VFX_IMP_HEAD_ODD); //Fire cast spell at event for the specified target SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_MIELIKKI)); int nSpellDC = 15; //Make SR and will save checks if (!MySavingThrow(SAVING_THROW_WILL, oTarget, nSpellDC)) { effect eGood = GetFirstEffect(oTarget); //Search for negative effects while(GetIsEffectValid(eGood)) { if (GetEffectType(eGood) == EFFECT_TYPE_ABILITY_INCREASE || GetEffectType(eGood) == EFFECT_TYPE_AC_INCREASE || GetEffectType(eGood) == EFFECT_TYPE_ATTACK_INCREASE || GetEffectType(eGood) == EFFECT_TYPE_DAMAGE_INCREASE || GetEffectType(eGood) == EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE || GetEffectType(eGood) == EFFECT_TYPE_SAVING_THROW_INCREASE || GetEffectType(eGood) == EFFECT_TYPE_SPELL_RESISTANCE_INCREASE || GetEffectType(eGood) == EFFECT_TYPE_SKILL_INCREASE || GetEffectType(eGood) == EFFECT_TYPE_CONCEALMENT || GetEffectType(eGood) == EFFECT_TYPE_DAMAGE_RESISTANCE) { //Remove effect if it is negative. RemoveEffect(oTarget, eGood); } eGood = GetNextEffect(oTarget); } } ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oTarget); } else { effect eVisual = EffectVisualEffect(VFX_IMP_RESTORATION); int bValid; effect eBad = GetFirstEffect(oTarget); //Search for negative effects while(GetIsEffectValid(eBad)) { if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE || GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS || GetEffectType(eBad) == EFFECT_TYPE_DEAF || GetEffectType(eBad) == EFFECT_TYPE_PARALYZE || GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL) { //Remove effect if it is negative. RemoveEffect(oTarget, eBad); } eBad = GetNextEffect(oTarget); } //Fire cast spell at event for the specified target SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF,SPELLABILITY_MIELIKKI, FALSE)); ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oTarget); } }