Ejemplo n.º 1
0
        public async Task<IActionResult> QueryCoords(String player = null, String tribe = null, String k = null, String min = null, String max = null, String center = null)
        {
            player = player ?? "";
            tribe = tribe ?? "";
            k = k ?? "";

            IEnumerable<String> TrimAndFilter(IEnumerable<String> e) => e.Select(n => n.Trim()).Where(n => n.Length > 0).Select(MiscExtensions.UrlEncode);

            var players = TrimAndFilter(player.Split(',')).ToList();
            var tribes = TrimAndFilter(tribe.Split(',')).ToList();
            var continents = TrimAndFilter(k.Split(',')).ToList();

            var query = new Features.VillageSearch.Query
            {
                WorldId = CurrentWorldId,
                PlayerNames = players,
                TribeNamesOrTags = tribes,
                Continents = continents
            };

            if (min != null)
            {
                var minParts = min.Split('|');
                query.MinCoord = new Coordinate
                {
                    X = int.Parse(minParts[0]),
                    Y = int.Parse(minParts[1])
                };
            }

            if (max != null)
            {
                var maxParts = max.Split('|');
                query.MaxCoord = new Coordinate
                {
                    X = int.Parse(maxParts[0]),
                    Y = int.Parse(maxParts[1])
                };
            }

            if (center != null)
            {
                var centerParts = center.Split('|');
                query.CenterCoord = new Coordinate
                {
                    X = int.Parse(centerParts[0]),
                    Y = int.Parse(centerParts[1])
                };

                query.MaxDistance = float.Parse(centerParts[2]);
            }

            var coords = await Features.VillageSearch.ListCoords(context, query);

            return Ok(new { coords });
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> GetFakeScript()
        {
            IEnumerable <String> TrimAndFilter(IEnumerable <String> e) => e.Select(s => s.Trim()).Where(s => !String.IsNullOrWhiteSpace(s)).OrderBy(s => s);

            var players    = TrimAndFilter(Request.Query["player"].ToString().Split(',')).ToList();
            var tribes     = TrimAndFilter(Request.Query["tribe"].ToString().Split(',')).ToList();
            var continents = TrimAndFilter(Request.Query["k"].ToString().Split(',')).Where(k => k.Length == 2).ToList();
            var server     = Request.Query["server"].ToString();
            var minCoord   = Request.Query["min"].ToString();
            var maxCoord   = Request.Query["max"].ToString();
            var center     = Request.Query["center"].ToString();

            players = players.Select(MiscExtensions.UrlEncode).ToList();
            tribes  = tribes.Select(MiscExtensions.UrlEncode).ToList();

            var scriptId = $"player_{string.Join('_', players)}__tribe_{string.Join('_',tribes)}__k_{string.Join('_',continents)}__server_{server}";

            scriptId += $"__min_{minCoord}__max_{maxCoord}__center_{center}";

            scriptId = Regex.Replace(scriptId, @"[^\w\d_]", "_");

            var fakeScript = await CachedFakeScripts.GetOrPopulate(scriptId, context, async (ctx) =>
            {
                var context = ctx as VaultContext;

                logger.LogInformation("Regenerating fake script for {0}", scriptId);

                var worldId = (await context.World.FirstOrDefaultAsync(w => w.Hostname == server))?.Id;
                if (worldId == null)
                {
                    return(null);
                }

                var query = new Features.VillageSearch.Query
                {
                    WorldId          = worldId.Value,
                    PlayerNames      = players,
                    TribeNamesOrTags = tribes,
                    Continents       = continents
                };

                if (!string.IsNullOrWhiteSpace(minCoord))
                {
                    var minParts   = minCoord.Split('|');
                    query.MinCoord = new Model.Coordinate {
                        X = int.Parse(minParts[0]), Y = int.Parse(minParts[1])
                    };
                }

                if (!string.IsNullOrWhiteSpace(maxCoord))
                {
                    var maxParts   = maxCoord.Split('|');
                    query.MaxCoord = new Model.Coordinate {
                        X = int.Parse(maxParts[0]), Y = int.Parse(maxParts[1])
                    };
                }

                if (!string.IsNullOrWhiteSpace(center))
                {
                    var centerParts   = center.Split('|');
                    query.CenterCoord = new Model.Coordinate {
                        X = int.Parse(centerParts[0]), Y = int.Parse(centerParts[1])
                    };
                    query.MaxDistance = float.Parse(centerParts[2]);
                }

                var coordString = await Features.VillageSearch.ListCoords(context, query);

                var baseScript = GetFileContents("fakes.js");

                var formattedScript = baseScript
                                      .Replace("{TARGET_COORDS}", coordString)
                                      .Replace("{COOKIE}", scriptId);

                return(formattedScript);
            });

            if (fakeScript == null)
            {
                return(NotFound());
            }
            else
            {
                return(Content(fakeScript, "application/javascript"));
            }
        }