// Begin preprocess Code #include "nw_i0_plot" #include "i420_helcat_inc" // Find the location of self and nearest PC location lSelfLoc = GetLocation(OBJECT_SELF); object oNearestPC = GetNearestPC(); location lNearPC = GetLocation(oNearestPC); // Find the distance between self and nearest PC float fPCDistance = GetDistanceBetween(OBJECT_SELF,oNearestPC); // Begin main code void main() { // Check that its day or light is cast upon the creature if ((GetIsDay() == TRUE) || (GetHasSpellEffect(SPELL_LIGHT,OBJECT_SELF) == TRUE)) { // Re-apply Invisibility ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectInvisibility(INVISIBILITY_TYPE_IMPROVED),OBJECT_SELF); // Return Local Int IS_INVIZ to 0 SetLocalInt(OBJECT_SELF,"IS_INVIZ",1); } // Fire only if NearestPC is within 30 meters if (fPCDistance <= fIncDist) { // Check that it's night or if effected by magic darkness if ((GetIsNight() == TRUE) || (GetHasSpellEffect(SPELL_DARKNESS,OBJECT_SELF) == TRUE)) { RemoveEffect(OBJECT_SELF,EffectInvisibility(INVISIBILITY_TYPE_IMPROVED)); } } // Get the Nearest PC object oNearestPC = GetNearestPC(); // Perform a melee touch attack int iTA = TouchAttackMelee(oNearestPC,FALSE); // Get the distance between the creature and the pc float fDBetween = GetDistanceBetween(OBJECT_SELF,oNearestPC); // Check if the melee touch attack hit, if the pc is valid, and within 3 meters if ((iTA > 0) && (oNearestPC != OBJECT_INVALID) && (fDBetween <= 3.0)) { // Get the name of the grappling creature, display a message, grapple, and rake the PC string sCName = GetName(OBJECT_SELF); // Decrease the PC's movement for 1d4+4 seconds (Grappled) int id4 = d4(1)+4; float fd4 = IntToFloat(id4); ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectMovementSpeedDecrease(99),oNearestPC,fd4); AssignCommand(oNearestPC,JumpToObject(OBJECT_SELF)); PlayAnimation(ANIMATION_FIREFORGET_TAUNT,1.25,2.0); SendMessageToPC(oNearestPC,"The "+sCName+" grapples with its bite and rakes you with its claws."); // Apply Bite damage to PC int iBiteDmg = d6(2)+3; ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(iBiteDmg,DAMAGE_TYPE_PIERCING,DAMAGE_POWER_NORMAL),oNearestPC); // Rake the PC with 2d4+12 slashing int iRakeDmg = d4(2)+12; ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(iRakeDmg,DAMAGE_TYPE_SLASHING,DAMAGE_POWER_NORMAL),oNearestPC); } }