public override void Update(long Tick)
        {
            if (!HasUnit())
            {
                return;
            }

            Unit Me     = GetUnit();
            Unit Target = GetNextTarget();

            if (Target == null)
            {
                Attacking = false;
            }

            if (HasPlayer())
            {
                if (Attacking)
                {
                    if (NextAttackTime < Tick)
                    {
                        if (!Obj.IsWithinRadius(Target, 10))
                        {
                            NextAttackTime += 200;
                        }
                        else if (!Obj.IsObjectInFront(Target, 90))
                        {
                            NextAttackTime += 200;
                        }
                        else
                        {
                            Me.Strike(Target);
                            NextAttackTime = Tick + Me.ItmInterface.GetAttackTime(EquipSlot.MAIN_DROITE) * 10;
                        }
                    }
                }
            }
            else
            {
                AttackAI(Target);
            }
        }
Example #2
0
        public override void Update(long Tick)
        {
            if (FightingStateTime != 0 && FightingStateTime < Tick)
            {
                FightingStateTime = 0;
                _Owner.EvtInterface.Notify(EventName.ON_LEAVE_COMBAT, _Owner, null);
            }

            if (!HasUnit())
            {
                return;
            }

            Unit Me     = GetUnit();
            Unit Target = GetNextTarget();

            if (HasPlayer())
            {
                if (Target == null)
                {
                    return;
                }

                if (!CanAttack(Me, Target))
                {
                    return;
                }

                if (Attacking)
                {
                    if (NextAttackTime < Tick)
                    {
                        Player Plr = _Owner.GetPlayer();
                        if (Plr.AbtInterface.IsCasting())
                        {
                            NextAttackTime += 100;
                        }
                        else
                        {
                            NextAttackTime += 100;

                            if (!Plr.IsObjectInFront(Target, 110))
                            {
                                return;
                            }

                            EquipSlot SlotToUse = EquipSlot.NONE;

                            if (Plr.ItmInterface.GetItemInSlot((ushort)EquipSlot.MAIN_DROITE) == null &&
                                Plr.ItmInterface.GetItemInSlot((ushort)EquipSlot.MAIN_GAUCHE) == null &&
                                Plr.ItmInterface.GetItemInSlot((ushort)EquipSlot.ARME_DISTANCE) == null)
                            {
                                if (Plr.GetDistance(Target) < 5)
                                {
                                    Me.Strike(Target);
                                    NextAttackTime = Tick + Me.ItmInterface.GetAttackTime(EquipSlot.MAIN_DROITE) * 10;
                                    return;
                                }
                            }

                            if (Plr.GetDistance(Target) < 5) // Melee
                            {
                                if (!Plr.ItmInterface.CanUseItem((ushort)EquipSlot.MAIN_DROITE, Tick))
                                {
                                    if (Plr.ItmInterface.CanUseItem((ushort)EquipSlot.MAIN_GAUCHE, Tick))
                                    {
                                        SlotToUse = EquipSlot.MAIN_GAUCHE;
                                    }
                                    else
                                    {
                                        SlotToUse = EquipSlot.NONE;
                                    }
                                }
                                else
                                {
                                    SlotToUse = EquipSlot.MAIN_DROITE;
                                }
                            }
                            else if (Plr.ItmInterface.CanUseItem((ushort)EquipSlot.ARME_DISTANCE, Tick) && Plr.GetDistance(Target) < 90)// Ranged
                            {
                                SlotToUse = EquipSlot.ARME_DISTANCE;
                            }

                            if (SlotToUse != EquipSlot.NONE)
                            {
                                ushort Time = Me.ItmInterface.GetAttackTime(SlotToUse);
                                Me.Strike(Target, SlotToUse);
                                NextAttackTime = Tick + Time * 5;
                                Me.ItmInterface.SetCooldown((ushort)SlotToUse, Time * 10);
                            }
                        }
                    }
                }

                DisablePvp(Tick, false);
            }
            else
            {
                AttackAI(Tick, Target);
            }
        }