예제 #1
0
        public static Vector3[] GenerateWaypoints(MapId map, Vector3 lastPos)
        {
            ITerrain terrain = TerrainMgr.GetTerrain(map);

            if (terrain != null)
            {
                return(new RandomWaypointGenerator().GenerateWaypoints(terrain, lastPos));
            }
            return(new Vector3[0]);
        }
예제 #2
0
        public void CreateRandomWaypoints()
        {
            ITerrain terrain = TerrainMgr.GetTerrain(MapId);

            if (terrain == null)
            {
                return;
            }
            AddWaypoints(
                new RandomWaypointGenerator().GenerateWaypoints(terrain, Position, RespawnRadius));
            Waypoints.Last.Value.WaitTime = (uint)Utility.Random(2000, 7000);
        }
예제 #3
0
        public void CreateRandomWaypoints()
        {
            var terrain = TerrainMgr.GetTerrain(MapId);

            if (terrain != null)
            {
                var gen = new RandomWaypointGenerator();
                var wps = gen.GenerateWaypoints(terrain, Position, RespawnRadius);
                AddWaypoints(wps);
                Waypoints.Last.Value.WaitTime = (uint)Utility.Random(2000, 7000);
            }
        }
예제 #4
0
        public static Vector3[] GenerateWaypoints(MapId map, Vector3 lastPos)
        {
            var terrain = TerrainMgr.GetTerrain(map);

            if (terrain != null)
            {
                var gen = new RandomWaypointGenerator();
                var wps = gen.GenerateWaypoints(terrain, lastPos);
                return(wps);
            }
            return(new Vector3[0]);
        }
예제 #5
0
            public override void Process(CmdTrigger <RealmServerCmdArgs> trigger)
            {
                var chr = trigger.Args.Character;

                if (chr == null)
                {
                    trigger.Reply("Character required in context.");
                    return;
                }

                if (!NPCMgr.Loaded)
                {
                    trigger.Reply("Loading NPCs...");
                    NPCMgr.LoadAllLater();
                    return;
                }

                var figurines = TerrainVisualizations.ClearVis(chr);

                var radius  = trigger.Text.NextFloat(30.0f);
                var p       = chr.Position;
                var map     = chr.Map;
                var terrain = TerrainMgr.GetTerrain(map.MapId) as SimpleTerrain;

                if (terrain == null)
                {
                    trigger.Reply("No Terrain created for Map: " + map);
                    return;
                }

                int tileX, tileY;

                PositionUtil.GetTileXYForPos(p, out tileX, out tileY);
                var tile = terrain.GetTile(tileX, tileY);

                if (tile == null || tile.NavMesh == null)
                {
                    trigger.Reply("No NavMesh present on Tile.");
                    return;
                }

                var mesh = tile.NavMesh;

                foreach (var poly in mesh.Polygons)
                {
                    Debug.Assert(poly.Indices.Length == 3);
                    var v1 = mesh.Vertices[poly.Indices[0]];
                    var v2 = mesh.Vertices[poly.Indices[1]];
                    var v3 = mesh.Vertices[poly.Indices[2]];

                    // only get polygons that are narby
                    if (p.GetDistance(ref v1) > radius &&
                        p.GetDistance(ref v2) > radius &&
                        p.GetDistance(ref v3) > radius)
                    {
                        continue;
                    }

                    var dumm1 = new NavFigurine();
                    var dumm2 = new NavFigurine();
                    var dumm3 = new NavFigurine();

                    dumm1.SetOrientationTowards(ref v2);
                    dumm1.ChannelObject = dumm2;
                    map.AddObject(dumm1, ref v1);

                    dumm2.SetOrientationTowards(ref v3);
                    dumm2.ChannelObject = dumm3;
                    map.AddObject(dumm2, ref v2);

                    dumm3.SetOrientationTowards(ref v1);
                    dumm3.ChannelObject = dumm1;
                    map.AddObject(dumm3, ref v3);

                    figurines.Add(dumm1);
                    figurines.Add(dumm2);
                    figurines.Add(dumm3);
                }

                trigger.Reply("Created {0} figurines.", figurines.Count);
            }
예제 #6
0
            public override void Process(CmdTrigger <RealmServerCmdArgs> trigger)
            {
                MapId mapId;
                int   tileX, tileY;

                if (trigger.Text.HasNext)
                {
                    mapId = trigger.Text.NextEnum(MapId.End);
                    tileX = trigger.Text.NextInt(-1);
                    tileY = trigger.Text.NextInt(-1);
                }
                else if (trigger.Args.Character == null)
                {
                    trigger.Reply("You did not specify map id and tile location.");
                    return;
                }
                else
                {
                    mapId = trigger.Args.Character.MapId;
                    PositionUtil.GetTileXYForPos(trigger.Args.Character.Position, out tileX, out tileY);
                }

                var terrain = TerrainMgr.GetTerrain(mapId);

                if (terrain == null)
                {
                    trigger.Reply("Invalid MapId.");
                    return;
                }

                if (!PositionUtil.VerifyTileCoords(tileX, tileY))
                {
                    trigger.Reply("Invalid tile coordinates.");
                    return;
                }

                trigger.Reply("Loading tile...");
                RealmServer.RealmServer.IOQueue.AddMessage(() =>
                {
                    terrain.ForceLoadTile(tileX, tileY);

                    if (terrain.IsAvailable(tileX, tileY))
                    {
                        trigger.Reply("Done. Tile ({0}, {1}) in Map {2} has been loaded.", tileX, tileY, mapId);
                    }
                    else
                    {
                        // try to extract from MPQ
                        //var adt = ADTReader.ReadADT(terrain, tileX, tileY);
                        trigger.Reply("WARNING: Tile ({0}, {1}) in Map {2} has not been exported yet...", tileX, tileY, mapId);
                        trigger.Reply("Extraction will take a while and block the IO queue, please have patience...");

                        var adt = WDT.LoadTile(mapId, tileX, tileY);
                        if (adt != null)
                        {
                            trigger.Reply("Tile ({0}, {1}) in Map {2} has been imported...", tileX, tileY, mapId);
                            trigger.Reply("Writing to file...");

                            // export to file
                            SimpleTileWriter.WriteADT(adt);

                            // try loading again
                            trigger.Reply("Loading extracted tile and generating Navigation mesh...");
                            terrain.ForceLoadTile(tileX, tileY);

                            if (terrain.IsAvailable(tileX, tileY))
                            {
                                trigger.Reply("Done. Tile ({0}, {1}) in Map {2} has been loaded successfully.", tileX, tileY, mapId);
                                return;
                            }
                        }

                        trigger.Reply("Loading FAILED: Tile ({0}, {1}) in Map {2} could not be loaded", tileX, tileY, mapId);
                    }
                });
            }