Пример #1
0
        public static VoxelCoordinates FromPortalCoordinateString(string portalCoordinateStr)
        {
            VoxelCoordinates coordinates = new VoxelCoordinates();

            var match = Regex.Match(portalCoordinateStr, @"[A-Za-z0-9]{12}");

            if (!match.Success)
            {
                InvalidPortalCoordinateString(portalCoordinateStr);
            }

            try
            {
                coordinates.X = ((Convert.ToInt32(portalCoordinateStr.Substring(9, 3), 16) + 2047) & 0xFFF) - 2047;
                coordinates.Y = ((Convert.ToInt32(portalCoordinateStr.Substring(4, 2), 16) + 127) & 0xFF) - 127;
                coordinates.Z = ((Convert.ToInt32(portalCoordinateStr.Substring(6, 3), 16) + 2047) & 0xFFF) - 2047;
                coordinates.SolarSystemIndex = Convert.ToInt32(portalCoordinateStr.Substring(1, 3), 16);
            }
            catch (ArgumentException)
            {
                InvalidPortalCoordinateString(portalCoordinateStr);
            }

            return(coordinates);
        }
Пример #2
0
        public static VoxelCoordinates FromGalacticCoordinateString(string nmsHexCoordinates)
        {
            VoxelCoordinates coordinates = null;

            string[] parts = nmsHexCoordinates.Split(':');
            if (parts.Length == 5)
            {
                parts = parts.Skip(1).Take(4).ToArray();
            }
            else if (parts.Length != 4)
            {
                InvalidGalacticCoordinateString(nmsHexCoordinates);
            }

            try
            {
                coordinates = new VoxelCoordinates(
                    Convert.ToInt32(parts[0], 16) - 2047,
                    Convert.ToInt32(parts[1], 16) - 127,
                    Convert.ToInt32(parts[2], 16) - 2047,
                    Convert.ToInt32(parts[3], 16));
            }
            catch (ArgumentException)
            {
                InvalidGalacticCoordinateString(nmsHexCoordinates);
            }

            return(coordinates);
        }
Пример #3
0
        public static VoxelCoordinates FromVoxelCoordinateString(string voxelCoordinateStr)
        {
            VoxelCoordinates coordinates = null;

            var match = Regex.Match(voxelCoordinateStr, @"\(?(?<X>[+-]?\d+),(?<Y>[+-]?\d+),(?<Z>[+-]?\d+),(?<SSI>[+-]?\d+)\)?");

            if (!match.Success)
            {
                InvalidVoxelCoordinateString(voxelCoordinateStr);
            }

            try
            {
                coordinates = new VoxelCoordinates(
                    Convert.ToInt32(match.Groups["X"].Value),
                    Convert.ToInt32(match.Groups["Y"].Value),
                    Convert.ToInt32(match.Groups["Z"].Value),
                    Convert.ToInt32(match.Groups["SSI"].Value));
            }
            catch (ArgumentException)
            {
                InvalidVoxelCoordinateString(voxelCoordinateStr);
            }

            return(coordinates);
        }
Пример #4
0
        private bool RunRelocate(RelocateOptions opt)
        {
            bool positionChanged = false;

            if (opt.GalacticCoordinates != null)
            {
                SetCoordinates(VoxelCoordinates.FromGalacticCoordinateString(opt.GalacticCoordinates), opt.GalacticCoordinates);
                positionChanged = true;
            }
            else if (opt.PortalCoordinates != null)
            {
                SetCoordinates(VoxelCoordinates.FromPortalCoordinateString(opt.PortalCoordinates), opt.PortalCoordinates);
                positionChanged = true;
            }
            else if (opt.VoxelCoordinates != null)
            {
                SetCoordinates(VoxelCoordinates.FromVoxelCoordinateString(opt.VoxelCoordinates), opt.VoxelCoordinates);
                positionChanged = true;
            }

            if (opt.Galaxy.HasValue)
            {
                _gs.PlayerGalaxy = opt.Galaxy.Value;
                positionChanged  = true;
            }

            if (opt.Planet.HasValue)
            {
                _gs.PlayerPlanet = opt.Planet.Value;
                positionChanged  = true;
            }
            else if (positionChanged && !opt.SkipPlanetZero)
            {
                _gs.PlayerPlanet = 0;
            }

            if (positionChanged && !opt.SkipInShip)
            {
                _gs.PlayerState = GameSave.PlayerStates.InShip;
            }

            if (positionChanged)
            {
                Log("Player relocated. Current position: {0}. Planet Index = {1}", _gs.PlayerCoordinates, _gs.PlayerPlanet);
                return(true);
            }

            Log("Player position unchanged. Current position: {0}. Planet Index = {1}", _gs.PlayerCoordinates, _gs.PlayerPlanet);
            return(false);
        }
Пример #5
0
 private void SetCoordinates(VoxelCoordinates coordinates, string cordinatesStr)
 {
     LogVerbose("Changing player coordinates from:\n  {0}\nto:\n  {1}\n  {2}", _gs.PlayerCoordinates, cordinatesStr, coordinates);
     _gs.PlayerCoordinates = coordinates;
 }