public static async void ClaimObject <T>([FromSource] Player player, string json) where T : class, IObject { var response = RpcResponse <Guid> .Parse(json); var claimerSteamId = player.Identifiers["steam"]; User claimerUser = Server.Db.Users.First(u => u.SteamId == claimerSteamId); T obj = Server.Db.Set <T>().First(c => c.Id == response.Result); Guid currentTrackerId = obj.TrackingUserId; obj.TrackingUserId = claimerUser.Id; Server.Db.Set <T>().AddOrUpdate(obj); await Server.Db.SaveChangesAsync(); if (currentTrackerId == Guid.Empty) { return; } User currentTrackerUser = Server.Db.Users.First(u => u.Id == currentTrackerId); Player currentTrackerPlayer = Server.Instance.Players.First(p => p.Identifiers["steam"] == currentTrackerUser.SteamId); currentTrackerPlayer .Event($"igi:{typeof(T).Name}:unclaim") .Attach(obj) .Trigger(); }
public static void AtmWithdraw([FromSource] Player player, string json) { var response = RpcResponse <Guid, Guid, double> .Parse(json); Server.Log($"AtmWithdraw called: {response.Result1} {response.Result2} {response.Result3}"); try { BankAtm atm = Server.Db.BankAtms.First(a => a.Id == response.Result1); BankAccountMember member = Server.Db.BankAccountMembers.First(m => m.Id == response.Result2); double amount = response.Result3; member.Account.Balance -= amount; Server.Db.BankAccountMembers.AddOrUpdate(member); Server.Db.SaveChangesAsync(); player .Event(RpcEvents.BankAtmWithdraw) .Attach(true) .Trigger(); } catch (Exception e) { Server.Log($"AtmWithdraw Failed: {e.Message}"); player .Event(RpcEvents.BankAtmWithdraw) .Attach(false) .Trigger(); } }
public static async void Load([FromSource] Player player, string json) { var response = RpcResponse <Guid> .Parse(json); User user = await User.GetOrCreate(player); if (user.Characters == null) { user.Characters = new List <Character>(); } var character = user.Characters.NotDeleted().FirstOrDefault(c => c.Id == response.Result); if (character == null) { return; } character.LastPlayed = DateTime.UtcNow; Server.Db.Characters.AddOrUpdate(character); await Server.Db.SaveChangesAsync(); player .Event(RpcEvents.CharacterLoad) .Attach(character) .Trigger(); }
public static async void Save <T>([FromSource] Player player, string json) where T : class, IVehicle // Has no ID { var response = RpcResponse <T> .Parse(json); T vehicle = response.Result; if (vehicle.Id == Guid.Empty) { vehicle.Id = Server.Db.Set <T>().FirstOrDefault(c => c.Handle == vehicle.Handle)?.Id ?? Guid.Empty; } if (vehicle.Id == Guid.Empty) { return; } T dbCar = Server.Db.Set <T>().First(c => c.Id == vehicle.Id); if (vehicle.TrackingUserId != dbCar.TrackingUserId && dbCar.TrackingUserId != Guid.Empty) { return; } Server.Db.Set <T>().AddOrUpdate(vehicle); await Server.Db.SaveChangesAsync(); }
public static async void AcceptRules([FromSource] Player player, string json) { var response = RpcResponse <DateTime> .Parse(json); var user = await User.GetOrCreate(player); user.AcceptedRules = response.Result; Server.Db.Users.AddOrUpdate(user); await Server.Db.SaveChangesAsync(); }
public static async void Save([FromSource] Player player, string json) { var response = RpcResponse <Character> .Parse(json); var newChar = response.Result; Server.Db.Styles.AddOrUpdate(newChar.Style); Server.Db.Characters.AddOrUpdate(newChar); await Server.Db.SaveChangesAsync(); }
public static void TransferObject <T>([FromSource] Player player, string json) where T : class, IObject { var response = RpcResponse <T> .Parse(json); T obj = response.Result; obj.Id = Server.Db.Set <T>().First(c => c.Handle == obj.Handle).Id; player .Event($"igi:{typeof(T).Name}:claim") .Attach(obj) .Trigger(); }
public static async void UnclaimObject <T>([FromSource] Player player, string json) where T : class, IObject { var response = RpcResponse <int> .Parse(json); T obj = Server.Db.Set <T>().First(c => c.NetId == response.Result); obj.TrackingUserId = Guid.Empty; obj.Handle = null; obj.NetId = null; Server.Db.Set <T>().AddOrUpdate(obj); await Server.Db.SaveChangesAsync(); }
public static async void Create <T>([FromSource] Player player, string json) where T : class, IVehicle { var response = RpcResponse <T> .Parse(json); T vehicle = response.Result; Server.Db.Set <T>().Add(vehicle); await Server.Db.SaveChangesAsync(); player .Event($"igi:{vehicle.VehicleType().Name}:create") .Attach(vehicle) .Trigger(); }
public static async void Create([FromSource] Player player, string json) { var response = RpcResponse <Character> .Parse(json); User user = await User.GetOrCreate(player); if (user.Characters == null) { user.Characters = new List <Character>(); } Character character = response.Result; character.Id = GuidGenerator.GenerateTimeBasedGuid(); character.Alive = true; character.Health = 10000; character.Armor = 0; character.Ssn = "123-45-6789"; character.Position = new Vector3 { X = -1038.121f, Y = -2738.279f, Z = 20.16929f }; // Airport terminal //character.Position = new Vector3 { X = 153.7846f, Y = -1032.899f, Z = 29.33798f }; // Legion Square Fleeca //character.Position = new Vector3 { X = 892.55f, Y = -182.25f, Z = 73.72f }; // Downtown Cab Co. character.LastPlayed = null; character.Created = DateTime.UtcNow; character.Style = new Style { Id = GuidGenerator.GenerateTimeBasedGuid() }; //character.Inventory = new Inventory { Id = GuidGenerator.GenerateTimeBasedGuid() }; // TODO: Convert to event handler instead of method call. foreach (ServerService service in Server.Instance.Services) { character = await service.OnCharacterCreate(character); } user.Characters.Add(character); Server.Db.Users.AddOrUpdate(user); await Server.Db.SaveChangesAsync(); player .Event(RpcEvents.CharacterCreate) .Attach(character) .Trigger(); }
private static void LoadNearbyVehicles([FromSource] Player citizen, string charJson) { var requestResponse = RpcResponse <Character> .Parse(charJson); Character character = requestResponse.Result; foreach (Vehicle vehicle in Server.Db.Vehicles.Where(v => v.Handle == null).ToArray()) { if (!(Vector3.Distance(vehicle.Position, character.Position) < VehicleLoadDistance)) { continue; } Server.Log($"Spawning vehicle to {citizen.Name} via event: 'igi:{vehicle.VehicleType().Name}:spawn'"); citizen.Event($"igi:{vehicle.VehicleType().Name}:spawn") .Attach(vehicle) .Trigger(); } }
public static async void Save <T>([FromSource] Player player, string json) where T : Vehicle // Has no ID { var response = RpcResponse <T> .Parse(json); T vehicle = response.Result; if (vehicle.Id == Guid.Empty) { vehicle.Id = Server.Db.Set <T>().FirstOrDefault(c => c.Handle == vehicle.Handle)?.Id ?? Guid.Empty; } if (vehicle.Id == Guid.Empty) { return; } T dbVeh = Server.Db.Set <T>() .Include(v => v.Extras) .Include(v => v.Wheels) .Include(v => v.Doors) .Include(v => v.Windows) .Include(v => v.Seats) .Include(v => v.Mods) .FirstOrDefault(c => c.Id == vehicle.Id); if (dbVeh == null || vehicle.TrackingUserId != dbVeh.TrackingUserId && dbVeh.TrackingUserId != Guid.Empty) { return; } Server.Db.Entry(dbVeh).CurrentValues.SetValues(vehicle); // Wheels foreach (VehicleWheel dbVehWheel in dbVeh.Wheels.ToList()) { if (vehicle.Wheels.All(m => m.Position != dbVehWheel.Position)) { Server.Db.VehicleWheels.Remove(dbVehWheel); } } foreach (VehicleWheel vehWheel in vehicle.Wheels) { var dbVehWheel = dbVeh.Wheels.SingleOrDefault(s => s.Position == vehWheel.Position); if (dbVehWheel != null) { vehWheel.Id = dbVehWheel.Id; Server.Db.Entry(dbVehWheel).CurrentValues.SetValues(vehWheel); // We have to manually set enums for some reason... Server.Db.Entry(dbVehWheel).Property("Position").CurrentValue = vehWheel.Position; } else { dbVeh.Wheels.Add(vehWheel); } } // Doors foreach (VehicleDoor dbVehDoor in dbVeh.Doors.ToList()) { if (vehicle.Doors.All(m => m.Index != dbVehDoor.Index)) { Server.Db.VehicleDoors.Remove(dbVehDoor); } } foreach (VehicleDoor vehDoor in vehicle.Doors) { var dbVehDoor = dbVeh.Doors.SingleOrDefault(s => s.Index == vehDoor.Index); if (dbVehDoor != null) { vehDoor.Id = dbVehDoor.Id; Server.Db.Entry(dbVehDoor).CurrentValues.SetValues(vehDoor); } else { dbVeh.Doors.Add(vehDoor); } } // Extras foreach (VehicleExtra dbVehExtra in dbVeh.Extras.ToList()) { if (vehicle.Extras.All(m => m.Index != dbVehExtra.Index)) { Server.Db.VehicleExtras.Remove(dbVehExtra); } } foreach (VehicleExtra vehExtra in vehicle.Extras) { var dbVehExtra = dbVeh.Extras.SingleOrDefault(s => s.Index == vehExtra.Index); if (dbVehExtra != null) { vehExtra.Id = dbVehExtra.Id; Server.Db.Entry(dbVehExtra).CurrentValues.SetValues(vehExtra); } else { dbVeh.Extras.Add(vehExtra); } } // Windows foreach (VehicleWindow dbVehWindow in dbVeh.Windows.ToList()) { if (vehicle.Windows.All(m => m.Index != dbVehWindow.Index)) { Server.Db.VehicleWindows.Remove(dbVehWindow); } } foreach (VehicleWindow vehWindow in vehicle.Windows) { var dbVehWindow = dbVeh.Windows.SingleOrDefault(s => s.Index == vehWindow.Index); if (dbVehWindow != null) { vehWindow.Id = dbVehWindow.Id; Server.Db.Entry(dbVehWindow).CurrentValues.SetValues(vehWindow); } else { dbVeh.Windows.Add(vehWindow); } } // Seats foreach (VehicleSeat dbVehSeat in dbVeh.Seats.ToList()) { if (vehicle.Seats.All(m => m.Index != dbVehSeat.Index)) { Server.Db.VehicleSeats.Remove(dbVehSeat); } } foreach (VehicleSeat vehSeat in vehicle.Seats) { var dbVehSeat = dbVeh.Seats.SingleOrDefault(s => s.Index == vehSeat.Index); if (dbVehSeat != null) { vehSeat.Id = dbVehSeat.Id; Server.Db.Entry(dbVehSeat).CurrentValues.SetValues(vehSeat); } else { dbVeh.Seats.Add(vehSeat); } } // TODO: Mods await Server.Db.SaveChangesAsync(); }