using GTANetworkAPI; using reallife_gamemode.Server.Entities; using reallife_gamemode.Server.Models; using System; using System.Collections.Generic; namespace reallife_gamemode.Server.Managers { public class VehicleManager { private static readonly List _enabledMods = new List() { "models", "polamggtr", "impaler3", "monster4", "monster5", "slamvan6", "issi6", "cerberus2", "cerberus3", "deathbike2", "dominator6", "deathbike3", "impaler4", "slamvan4", "slamvan5", "brutus", "brutus2", "brutus3", "deathbike", "dominator4", "dominator5", "bruiser", "bruiser2", "bruiser3", "rcbandito", "italigto", "cerberus", "impaler2", "monster3", "tulip", "scarab", "scarab2", "scarab3", "issi4", "issi5", "clique", "deveste", "vamos", "imperator", "imperator2", "imperator3", "toros", "deviant", "schlagen", "impaler", "zr380", "zr3802", "zr3803", "flashgt", "gb200", "dominator3" }; private static Dictionary _serverVehicles = new Dictionary(); public static void AddVehicle(ServerVehicle serverVehicle, Vehicle vehicle) { if(_serverVehicles.ContainsKey(serverVehicle.Id)) { return; } if (_serverVehicles.ContainsValue(vehicle.Handle)) { return; } _serverVehicles[serverVehicle.Id] = vehicle.Handle; } internal static void DeleteVehicle(Vehicle veh) { ServerVehicle sVeh; if ((sVeh = GetServerVehicleFromVehicle(veh)) != null) { _serverVehicles.Remove(sVeh.Id); } veh.Delete(); } public static Vehicle GetVehicleFromHandle(NetHandle handle) { return NAPI.Pools.GetAllVehicles().Find(v => v.Handle == handle); } public static Vehicle GetVehicleFromId(int id) { return NAPI.Pools.GetAllVehicles().Find(v => v.Handle.Value == id); } public static Vehicle GetVehicleFromServerVehicle(ServerVehicle serverVehicle) { if(!_serverVehicles.ContainsKey(serverVehicle.Id)) { return null; } return GetVehicleFromHandle(_serverVehicles[serverVehicle.Id]); } public static ServerVehicle GetServerVehicleFromVehicle(Vehicle veh) { using (var dbContext = new DatabaseContext()) { foreach(KeyValuePair pair in _serverVehicles) { if (pair.Value == veh.Handle) { return dbContext.ServerVehicles.Find(pair.Key); } } } return null; } public static bool IsValidHash(uint hash) { foreach(VehicleHash vh in Enum.GetValues(typeof(VehicleHash))) { if ((uint)vh == hash) return true; } foreach(string mod in _enabledMods) { if (NAPI.Util.GetHashKey(mod) == hash) return true; } return false; } } }