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); }
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); }
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); }
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); }
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; }