Esempio n. 1
0
            public override void DoMove()
            {
                float distanceToSpawn = WorldServiceLocator._WS_Combat.GetDistance(aiCreature.positionX, aiCreature.SpawnX, aiCreature.positionY, aiCreature.SpawnY, aiCreature.positionZ, aiCreature.SpawnZ);

                checked
                {
                    switch (aiTarget)
                    {
                    case null:
                    {
                        if (WorldServiceLocator._WS_DBCDatabase.CreatureMovement.ContainsKey(aiCreature.WaypointID))
                        {
                            try
                            {
                                CurrentWaypoint++;
                                if (!WorldServiceLocator._WS_DBCDatabase.CreatureMovement[aiCreature.WaypointID].ContainsKey(CurrentWaypoint))
                                {
                                    CurrentWaypoint = 1;
                                }
                                WS_DBCDatabase.CreatureMovePoint MovementPoint = WorldServiceLocator._WS_DBCDatabase.CreatureMovement[aiCreature.WaypointID][CurrentWaypoint];
                                aiTimer = aiCreature.MoveTo(MovementPoint.x, MovementPoint.y, MovementPoint.z) + MovementPoint.waittime;
                            }
                            catch (Exception ex)
                            {
                                WorldServiceLocator._WorldServer.Log.WriteLine(LogType.CRITICAL, "Creature [{0:X}] waypoints are damaged.", ex, aiCreature?.GUID - WorldServiceLocator._Global_Constants.GUID_UNIT);
                                aiCreature.ResetAI();
                            }

                            break;
                        }
                        WorldServiceLocator._WorldServer.Log.WriteLine(LogType.CRITICAL, "Creature [{0:X}] is missing waypoints.", aiCreature?.GUID - WorldServiceLocator._Global_Constants.GUID_UNIT);
                        aiCreature.ResetAI();
                        return;
                    }

                    default:
                        base.DoMove();
                        break;
                    }
                }
            }
Esempio n. 2
0
            public override void DoMove()
            {
                float distanceToSpawn = WorldServiceLocator._WS_Combat.GetDistance(aiCreature.positionX, aiCreature.SpawnX, aiCreature.positionY, aiCreature.SpawnY, aiCreature.positionZ, aiCreature.SpawnZ);

                checked
                {
                    if (aiTarget == null)
                    {
                        if (!WorldServiceLocator._WS_DBCDatabase.CreatureMovement.ContainsKey(aiCreature.WaypointID))
                        {
                            WorldServiceLocator._WorldServer.Log.WriteLine(LogType.CRITICAL, "Creature [{0:X}] is missing waypoints.", aiCreature.GUID - WorldServiceLocator._Global_Constants.GUID_UNIT);
                            aiCreature.ResetAI();
                            return;
                        }
                        try
                        {
                            CurrentWaypoint++;
                            if (!WorldServiceLocator._WS_DBCDatabase.CreatureMovement[aiCreature.WaypointID].ContainsKey(CurrentWaypoint))
                            {
                                CurrentWaypoint = 1;
                            }
                            WS_DBCDatabase.CreatureMovePoint MovementPoint = WorldServiceLocator._WS_DBCDatabase.CreatureMovement[aiCreature.WaypointID][CurrentWaypoint];
                            aiTimer = aiCreature.MoveTo(MovementPoint.x, MovementPoint.y, MovementPoint.z) + MovementPoint.waittime;
                        }
                        catch (Exception ex2)
                        {
                            ProjectData.SetProjectError(ex2);
                            Exception ex = ex2;
                            WorldServiceLocator._WorldServer.Log.WriteLine(LogType.CRITICAL, "Creature [{0:X}] waypoints are damaged. {1}", aiCreature.GUID - WorldServiceLocator._Global_Constants.GUID_UNIT, ex.Message);
                            aiCreature.ResetAI();
                            ProjectData.ClearProjectError();
                        }
                    }
                    else
                    {
                        base.DoMove();
                    }
                }
            }