public void StartWaypoint(long Tick) { //Log.Info("Waypoints", "Starting Waypoint"); State = AiState.MOVING; _unit.MvtInterface.Move(new Point3D(CurrentWaypoint.X, CurrentWaypoint.Y, CurrentWaypoint.Z)); if (!Started) { // TODO : Messages,Emotes, etc if (CurrentWaypoint.TextOnStart != "") { _unit.Say(CurrentWaypoint.TextOnStart, ChatLogFilters.CHATLOGFILTERS_MONSTER_SAY); } } Started = true; Ended = false; }
public virtual void Fight() { // Here we are processng aggro every 0.25 s if (WorldMgr.WorldSettingsMgr.GetGenericSetting(11) == 1) { ProcessAggro(); } // Check for pet leashing. if (_pet != null) { long tick = TCPManager.GetTimeStampMS(); if (tick > _nextDistanceCheckTime) { _nextDistanceCheckTime = tick + 250; if (_pet.Owner != null && !_pet.WorldPosition.IsWithinRadiusFeet(_pet.Owner.WorldPosition, 250)) { _pet.Owner.SendClientMessage("Your pet is too far away from you, and has been dismissed.", ChatLogFilters.CHATLOGFILTERS_ABILITY_ERROR); _pet.Dismiss(null, null); return; } Player playerTarget = Combat.CurrentTarget as Player; if (playerTarget != null && (playerTarget.StealthLevel > 0) && !_pet.WorldPosition.IsWithinRadiusFeet(playerTarget.WorldPosition, 30)) { _pet.AiInterface.ProcessCombatEnd(); AI.Debugger?.SendClientMessage("[MR]: Lost track of stealthed player " + playerTarget.Name + ", ending combat."); return; } } } if (Combat != null && Combat.CurrentTarget != null && (Combat.CurrentTarget.IsDead || Combat.CurrentTarget.PendingDisposal || Combat.CurrentTarget.IsDisposed)) { AI.Debugger?.SendClientMessage("[MR]: Current target is dead or disposed, reacquiring..."); Aggros.Remove(Combat.CurrentTarget.Oid); Combat.SetTarget(null, TargetTypes.TARGETTYPES_TARGET_ENEMY); if (_pet != null) { if (_pet.AIMode != (byte)PetCommand.Passive && !_pet.IsHeeling) { AI.Debugger?.SendClientMessage("[MR]: Pet seeking attackable unit..."); Combat.SetTarget(_pet.AiInterface.GetAttackableUnit(), TargetTypes.TARGETTYPES_TARGET_ENEMY); } } else { Unit nextTarget = GetNextTarget(); Combat.SetTarget(nextTarget, TargetTypes.TARGETTYPES_TARGET_ENEMY); if (nextTarget != null && _unit.IsKeepLord) { _unit.Say("Die " + nextTarget.Name + "!"); } } if (Combat.CurrentTarget != null) { StartCombat(Combat.CurrentTarget); } else { AI.Debugger?.SendClientMessage("[MR]: Failed to acquire a new target. Disengaging."); AI.ProcessCombatEnd(); return; } } if (_unit != null && !_unit.IsDisabled || _unit != null && !_unit.IsStaggered) { Combat.TryAttack(); TryUseAbilities(); } foreach (Player player in _unit.PlayersInRange.ToList()) { if (player != null && player.DebugMode) { player.SendClientMessage("[MR]: Unit: " + _unit.Name + " (OID: " + _unit.Oid + ") Current Hate: " + GetAggro(player.Oid).Hatred); } } }