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));
        }
Beispiel #2
0
        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();
                    }
                }
            }
        }
Beispiel #3
0
        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);
        }