public override bool CheckBeginCast(GameLiving selectedTarget) { if (!(Caster is GamePlayer)) { return(false); } /* * [Ganrod]Nidel: Like 1.90 EU off servers * -Need Main Turret under our controle before casting. * -Select automatically Main controlled Turret if player don't have target or Turret target. * -Cast only on our turrets. */ if (Caster.ControlledBrain == null || Caster.ControlledBrain.Body == null) { MessageToCaster(LanguageMgr.GetTranslation((Caster as GamePlayer).Client, "PetPBAOE.CheckBeginCast.NoPet"), eChatType.CT_System); return(false); } TurretPet target = selectedTarget as TurretPet; if (target == null || !Caster.IsControlledNPC(target)) { target = Caster.ControlledBrain.Body as TurretPet; } return(base.CheckBeginCast(target)); }
public override void Notify(DOLEvent e, object sender, System.EventArgs args) { base.Notify(e, sender, args); if (AggressionState != eAggressionState.Passive) { if (e == GameLivingEvent.CastFinished || e == GameLivingEvent.AttackFinished) { TurretPet pet = sender as TurretPet; if (pet == null || pet != Body || !(pet.Brain is TurretMainPetTankBrain)) { return; } if (e == GameLivingEvent.CastFinished) { if (Body.TargetObject != null) { // Force to stop spell casting if (Body.IsCasting) { Body.StopCurrentSpellcast(); } if (Body.SpellTimer != null && Body.SpellTimer.IsAlive) { Body.SpellTimer.Stop(); } Body.StartAttack(Body.TargetObject); } return; } if (e == GameLivingEvent.AttackFinished) { Body.StopAttack(); AttackMostWanted(); } } } }
public override void DamageTarget(AttackData ad, bool showEffectAnimation) { if (ad.Damage > 0 && ad.Target is GameNPC) { if (!(Caster is GamePlayer)) { return; } if (((GameNPC)ad.Target).Brain is IOldAggressiveBrain aggroBrain) { TurretPet turret = null; if (Caster.TargetObject == null || !Caster.IsControlledNPC(Caster.TargetObject as TurretPet)) { if (Caster.ControlledBrain?.Body != null) { turret = Caster.ControlledBrain.Body as TurretPet; } } else if (Caster.IsControlledNPC(Caster.TargetObject as TurretPet)) { turret = Caster.TargetObject as TurretPet; } if (turret != null) { // pet will take aggro AttackData turretAd = ad; turretAd.Attacker = turret; ad.Target.OnAttackedByEnemy(turretAd); aggroBrain.AddToAggroList(turret, (ad.Damage + ad.CriticalDamage) * 3); } aggroBrain.AddToAggroList(Caster, ad.Damage); } } base.DamageTarget(ad, showEffectAnimation); }