static void LoadLoc(OakwoodPlayer player, object[] args) { if (args.Length == 0) { player.SendMessage("[USAGE] /loadloc <locName>"); return; } string locName = args[0].ToString(); string file = Environment.CurrentDirectory + @"\savedLocations\" + $"{locName}.txt"; if (File.Exists(file)) { string[] pos = File.ReadAllText(file).Split(';'); OakVec3 newPos = new OakVec3(float.Parse(pos[0]), float.Parse(pos[1]), float.Parse(pos[2])); OakVec3 newDir = new OakVec3(float.Parse(pos[3]), float.Parse(pos[4]), float.Parse(pos[5])); player.Position = newPos; player.Direction = newDir; player.HUD.Message($"Teleported to '{locName}'!", 0xFFFFFF); } else { player.HUD.Message($"Location '{locName}' doesn't exist!", 0xFF0000); } }
static void SaveLoc(OakwoodPlayer player, object[] args) { if (args.Length == 0) { player.SendMessage("[USAGE] /saveloc <locName>"); return; } string locName = args[0].ToString(); string file = Environment.CurrentDirectory + @"\savedLocations\" + $"{locName}.txt"; if (!Directory.Exists(Path.GetDirectoryName(file))) { Directory.CreateDirectory(Path.GetDirectoryName(file)); } OakVec3 playerPos = player.Position; OakVec3 playerDir = player.Direction; if (playerPos.x != 0 && playerPos.y != 0 && playerPos.z != 0 && playerDir.x != 0 && playerDir.z != 0) { File.WriteAllText(file, $"{playerPos.x};{playerPos.y};{playerPos.z};{playerDir.x};{playerDir.y};{playerDir.z}"); player.HUD.Message($"Location '{locName}' saved!", 0xFFFFFF); } else { player.HUD.Message("Cannot save location!", 0xFF0000); } }
static void Warp(OakwoodPlayer player, object[] args) { if (args.Length == 0) { string List = ""; foreach (string f in Directory.GetFiles(Environment.CurrentDirectory + @"\Warps")) { List += $"{Path.GetFileNameWithoutExtension(f)}, "; } player.SendMessage($"[WARPS ({Directory.GetFiles(Environment.CurrentDirectory + @"\Warps").Length})] {List}"); return; } string locName = args[0].ToString(); string file = Environment.CurrentDirectory + @"\Warps\" + $"{locName}.txt"; if (File.Exists(file)) { player.HUD.Message($"Warping you to '{locName}'...", 0xFFFFFF); string[] pos = File.ReadAllText(file).Split(';'); OakVec3 newPos = new OakVec3(float.Parse(pos[0]), float.Parse(pos[1]), float.Parse(pos[2])); OakVec3 newDir = new OakVec3(float.Parse(pos[3]), float.Parse(pos[4]), float.Parse(pos[5])); player.Position = newPos; player.Direction = newDir; } else { player.HUD.Message($"Warp '{locName}' doesn't exist!", 0xFF0000); } }
static void GetPos(OakwoodPlayer player) { OakVec3 pos = player.Position, dir = player.Direction; player.HUD.Message($"Position: ({pos.x}, {pos.y}, {pos.z})", OakColor.White); player.HUD.Message($"Direction: ({dir.x}, {dir.y}, {dir.z})", OakColor.White); }
static void Main(string[] args) { try { File.OpenText(Environment.CurrentDirectory + "\\spawn.txt"); } catch { Console.WriteLine("File doesn't exist"); Console.WriteLine("^F[^1ERROR^F]: ^CSpawn position is not set!^R"); return; } try { string[] buf = File.ReadAllText(Environment.CurrentDirectory + "\\spawn.txt").Split(';'); spawnPosition = new OakVec3(float.Parse(buf[0]), float.Parse(buf[1]), float.Parse(buf[2])); } catch { Console.WriteLine("Something f****d up"); Console.WriteLine("^F[^1ERROR^F]: ^CSpawn position is not set!^R"); return; } var iStdOut = GetStdHandle(STD_OUTPUT_HANDLE); if (!GetConsoleMode(iStdOut, out uint outConsoleMode)) { Console.WriteLine("Failed to get output console mode"); SysCon.ReadKey(); return; } outConsoleMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING | DISABLE_NEWLINE_AUTO_RETURN; if (!SetConsoleMode(iStdOut, outConsoleMode)) { Console.WriteLine($"Failed to set output console mode, error code: {GetLastError()}"); SysCon.ReadKey(); return; } OakwoodEvents.OnLog += OnLog; OakwoodEvents.OnPlayerConnect += OnPlayerConnect; OakwoodEvents.OnPlayerDisconnect += OnPlayerDisconnect; OakwoodEvents.OnPlayerDeath += OnPlayerDeath; OakwoodEvents.OnPlayerChat += OnPlayerChat; OakwoodEvents.OnPlayerKeyDown += OnPlayerKeyDown; Console.WriteLine($"^9Oakwood ^Fposition tool^R"); Console.WriteLine($"^FMade by ^ESevenisko^R"); SysCon.WriteLine(); Thread clThread = new Thread(() => Oakwood.CreateClient("ipc://oakwood-inbound", "ipc://oakwood-outbound")); clThread.Start(); }
/// <summary> /// Sets camera position /// </summary> /// <param name="position">Camera position</param> /// <param name="direction">Camera direction</param> /// <returns>True if the function is successful</returns> public bool Set(OakVec3 position, OakVec3 direction) { int ret = int.Parse(Oakwood.CallFunction("oak_camera_set", new object[] { player.ID, new float[] { position.x, position.y, position.z }, new float[] { direction.x, direction.y, direction.z } })[1].ToString()); if (ret == 0) { return(true); } return(false); }
static void Distance(OakwoodPlayer player, string pos1Name, string pos2Name) { string file1Name = Environment.CurrentDirectory + $"\\SavedPos\\{pos1Name}.txt"; string file2Name = Environment.CurrentDirectory + $"\\SavedPos\\{pos2Name}.txt"; if (!File.Exists(file1Name)) { player.HUD.Message($"Position '{pos1Name}' doesn't exist!", OakColor.Red); return; } if (!File.Exists(file2Name)) { player.HUD.Message($"Position '{pos2Name}' doesn't exist!", OakColor.Red); return; } OakVec3 p1 = new OakVec3(), p2 = new OakVec3(); string[] lines = File.ReadAllLines(file1Name); foreach (string line in lines) { if (!line.StartsWith("#")) { string[] buf = line.Split(';'); p1 = new OakVec3(float.Parse(buf[0]), float.Parse(buf[1]), float.Parse(buf[2])); break; } } lines = File.ReadAllLines(file2Name); foreach (string line in lines) { if (!line.StartsWith("#")) { string[] buf = line.Split(';'); p2 = new OakVec3(float.Parse(buf[0]), float.Parse(buf[1]), float.Parse(buf[2])); break; } } float dist = OakVec3.Distance(p1, p2); player.HUD.Message($"Distance: {dist.ToString("0.00")}", OakColor.White); }
static void WritePos(OakwoodPlayer player, string posName) { string fileName = Environment.CurrentDirectory + $"\\SavedPos\\{posName}.txt"; OakVec3 pos = player.Position, dir = player.Direction; if (File.Exists(fileName)) { player.HUD.Message($"Position '{posName}' updated!", OakColor.White); } else { player.HUD.Message($"Position '{posName}' saved!", OakColor.White); } File.WriteAllText(fileName, $"# The format is following: <posX>;<posY>;<posZ>;<dirX>;<dirY>;<dirZ>\n{pos.x};{pos.y};{pos.z};{dir.x};{dir.y};{dir.z}"); }
static void CreateWarp(OakwoodPlayer player, object[] args) { if (args.Length == 0) { player.SendMessage("[USAGE] /createwarp <locName>"); return; } string locName = args[0].ToString(); string file = Environment.CurrentDirectory + @"\Warps\" + $"{locName}.txt"; if (!Directory.Exists(Path.GetDirectoryName(file))) { Directory.CreateDirectory(Path.GetDirectoryName(file)); } if (!File.Exists(file)) { OakVec3 playerPos = player.Position; OakVec3 playerDir = player.Direction; if (playerPos.x != 0 && playerPos.y != 0 && playerPos.z != 0 && playerDir.x != 0 && playerDir.z != 0) { File.WriteAllText(file, $"{playerPos.x};{playerPos.y};{playerPos.z};{playerDir.x};{playerDir.y};{playerDir.z}"); player.HUD.Message($"Warp '{locName}' created!", 0xFFFFFF); } else { player.HUD.Message("Cannot create warp!", 0xFF0000); } } else { player.HUD.Message($"Warp '{locName}' already exists!", OakColor.Red); } }
static void SpawnCar(OakwoodPlayer player, object[] args) { if (args.Length == 0) { player.SendMessage("[USAGE] /car <carID>"); return; } int carID = int.Parse(args[0].ToString()); if (carID >= 0 && carID < OakwoodResources.VehicleModels.Length - 1) { OakVec3 plPos = player.Position; OakVec3 plDir = player.Direction; OakwoodVehicle sCar = OakwoodVehicle.Spawn(OakwoodResources.VehicleModels[carID], plPos, plDir.x / 360.0f); if (sCar != null) { player.VehicleManipulation.Put(sCar, VehicleSeat.FrontLeft); player.HUD.Message("Car successfully spawned!", 0xFFFFFF); return; } else { player.HUD.Message("Cannot spawn car!", 0xFF0000); return; } } else { player.HUD.Message("Car ID you provided is wrong!", 0xFCB603); return; } }
static void GetDir(OakwoodPlayer player, object[] args) { OakVec3 dir = player.Direction; player.HUD.Message($"Actual direction: [{dir.x * 360.0f}; {dir.y * 360.0f}; {dir.z * 360.0f}]", 0xFFFFFF); }
static void GetPos(OakwoodPlayer player, object[] args) { OakVec3 pos = player.Position; player.HUD.Message($"Actual position: [{pos.x}; {pos.y}; {pos.z}]", 0xFFFFFF); }
private static void OnPlayerKeyDown(OakwoodPlayer player, VirtualKey key) { OakVec3 pos = player.Position; switch (key) { case VirtualKey.Numpad8: // X+ { if (!(player.PlayerData as OakPlayerData).canUseKeys) { break; } OakVec3 newPos = new OakVec3(pos.x + 1.5f, pos.y, pos.z); player.Position = newPos; } break; case VirtualKey.Numpad2: // X- { if (!(player.PlayerData as OakPlayerData).canUseKeys) { break; } OakVec3 newPos = new OakVec3(pos.x - 1.5f, pos.y, pos.z); player.Position = newPos; } break; case VirtualKey.Numpad4: // Z- { if (!(player.PlayerData as OakPlayerData).canUseKeys) { break; } OakVec3 newPos = new OakVec3(pos.x, pos.y, pos.z - 1.5f); player.Position = newPos; } break; case VirtualKey.Numpad6: // Z+ { if (!(player.PlayerData as OakPlayerData).canUseKeys) { break; } OakVec3 newPos = new OakVec3(pos.x, pos.y, pos.z + 1.5f); player.Position = newPos; } break; case VirtualKey.Numpad3: // Y- { if (!(player.PlayerData as OakPlayerData).canUseKeys) { break; } OakVec3 newPos = new OakVec3(pos.x, pos.y - 1.5f, pos.z); player.Position = newPos; } break; case VirtualKey.Numpad9: // Y+ { if (!(player.PlayerData as OakPlayerData).canUseKeys) { break; } OakVec3 newPos = new OakVec3(pos.x, pos.y + 1.5f, pos.z); player.Position = newPos; } break; case VirtualKey.F5: { (player.PlayerData as OakPlayerData).canUseKeys = !(player.PlayerData as OakPlayerData).canUseKeys; string msg = (player.PlayerData as OakPlayerData).canUseKeys ? "enabled" : "disabled"; player.HUD.Message($"Key movement {msg}!", OakColor.White); } break; } }