From 60ff2bc1953f116c6bcbf24c04a5c755fc3df30d Mon Sep 17 00:00:00 2001 From: hydrant Date: Sat, 22 Dec 2018 15:02:05 +0100 Subject: [PATCH] Finished carshops --- Client/Business/cardealer.js | 9 +++++ Client/vehiclesync/vehiclesync.js | 1 + Server/Business/CarDealerBusinessBase.cs | 3 +- Server/Business/VapidCarDealerBusiness.cs | 4 ++- Server/Entities/ServerVehicle.cs | 8 ++++- Server/Managers/BusinessManager.cs | 43 +++++++++++++++++++++++ Server/Managers/SaveManager.cs | 2 +- Server/Util/VehicleSync.cs | 2 +- 8 files changed, 67 insertions(+), 5 deletions(-) diff --git a/Client/Business/cardealer.js b/Client/Business/cardealer.js index ea146173..179e67e9 100644 --- a/Client/Business/cardealer.js +++ b/Client/Business/cardealer.js @@ -41,6 +41,15 @@ mp.events.add('ShopVehicle_OpenMenu', (businessName, price) => { cancelItem.HighlightedBackColor = new Color(229, 57, 53); shopMenu.AddItem(cancelItem); + shopMenu.ItemSelect.on((item, index) => { + if (item === cancelItem) { + shopMenu.Close(); + } else if (item === saveItem) { + mp.events.callRemote("VehShop_BuyVehicle"); + shopMenu.Close(); + } + }); + shopMenu.MenuClose.on(() => { mp.gui.chat.show(true); mp.players.local.taskLeaveVehicle(veh.handle, 0); diff --git a/Client/vehiclesync/vehiclesync.js b/Client/vehiclesync/vehiclesync.js index 08d50d56..a9a27c69 100644 --- a/Client/vehiclesync/vehiclesync.js +++ b/Client/vehiclesync/vehiclesync.js @@ -223,6 +223,7 @@ mp.events.add("VehStream_PlayerExitVehicle", (entity) => { }); mp.events.add("VehStream_PlayerEnterVehicleAttempt", (entity, seat) => { + entity = mp.vehicles.atRemoteId(entity); if (entity === undefined || entity === null || !entity.isAVehicle()) return; setTimeout(() => { var Status = []; diff --git a/Server/Business/CarDealerBusinessBase.cs b/Server/Business/CarDealerBusinessBase.cs index daf49477..82d0a461 100644 --- a/Server/Business/CarDealerBusinessBase.cs +++ b/Server/Business/CarDealerBusinessBase.cs @@ -7,6 +7,7 @@ namespace reallife_gamemode.Server.Business { public abstract class CarDealerBusinessBase : BusinessBase { - internal abstract Vector3 CarSpawnPositon { get; } + public abstract Vector3 CarSpawnPositon { get; } + public abstract float CarSpawnHeading { get; } } } diff --git a/Server/Business/VapidCarDealerBusiness.cs b/Server/Business/VapidCarDealerBusiness.cs index 3590780a..26666017 100644 --- a/Server/Business/VapidCarDealerBusiness.cs +++ b/Server/Business/VapidCarDealerBusiness.cs @@ -13,7 +13,9 @@ namespace reallife_gamemode.Server.Business public override Vector3 Position => new Vector3(-177, -1156, 23); - internal override Vector3 CarSpawnPositon => new Vector3(-177, -1156, 23); + public override Vector3 CarSpawnPositon => new Vector3(-222, -1162, 22.5); + + public override float CarSpawnHeading => 356.6f; public override void Load() { diff --git a/Server/Entities/ServerVehicle.cs b/Server/Entities/ServerVehicle.cs index 1b908172..94b4e3c7 100644 --- a/Server/Entities/ServerVehicle.cs +++ b/Server/Entities/ServerVehicle.cs @@ -35,7 +35,13 @@ namespace reallife_gamemode.Server.Entities public Vehicle Spawn(Vehicle currentVeh = null) { if (currentVeh != null) VehicleManager.DeleteVehicle(currentVeh); - Vehicle veh = NAPI.Vehicle.CreateVehicle(this.Model, this.Position, this.Heading, this.PrimaryColor, this.SecondaryColor, this.NumberPlate, locked: this.Locked, engine: false); + Vector3 position = this.Position; + uint model = (uint)this.Model; + float heading = this.Heading; + int c1 = this.PrimaryColor; + int c2 = this.SecondaryColor; + string np = this.NumberPlate; + Vehicle veh = NAPI.Vehicle.CreateVehicle(Model, position, heading, c1, c2, "", 255, false, false); VehicleStreaming.SetEngineState(veh, false); VehicleStreaming.SetLockStatus(veh, this.Locked); VehicleManager.AddVehicle(this, veh); diff --git a/Server/Managers/BusinessManager.cs b/Server/Managers/BusinessManager.cs index 105a9b82..6f54ce2e 100644 --- a/Server/Managers/BusinessManager.cs +++ b/Server/Managers/BusinessManager.cs @@ -1,4 +1,5 @@ using GTANetworkAPI; +using reallife_gamemode.Model; using reallife_gamemode.Server.Business; using reallife_gamemode.Server.Entities; using reallife_gamemode.Server.Extensions; @@ -118,5 +119,47 @@ namespace reallife_gamemode.Server.Managers ShopVehicle shopVehicle = (ShopVehicle)sVeh; player.TriggerEvent("ShopVehicle_OpenMenu", GetBusiness(shopVehicle.BusinessId).Name, shopVehicle.Price); } + + [RemoteEvent("VehShop_BuyVehicle")] + public void CarDealerBusiness_BuyVehicle(Client player) + { + ServerVehicle sVeh = player.Vehicle?.GetServerVehicle(); + if (sVeh == null) return; + if (!(sVeh is ShopVehicle)) return; + ShopVehicle shopVehicle = (ShopVehicle)sVeh; + int price = shopVehicle.Price; + CarDealerBusinessBase business = (CarDealerBusinessBase)GetBusiness(shopVehicle.BusinessId); + TransactionResult result = BankManager.TransferMoney(player.GetUser(), business, price, "Auto gekauft"); + if(result == TransactionResult.SENDER_NOT_ENOUGH_MONEY) + { + player.SendNotification("~r~Du hast nicht genug Geld: " + price.ToMoneyString()); + return; + } + + Vector3 spawnPos = business.CarSpawnPositon; + + UserVehicle newVeh = new UserVehicle + { + Heading = business.CarSpawnHeading, + PositionX = spawnPos.X, + PositionY = spawnPos.Y, + PositionZ = spawnPos.Z, + Locked = false, + UserId = player.GetUser().Id, + Model = shopVehicle.Model, + PrimaryColor = 111, + SecondaryColor = 111, + Active = true, + NumberPlate = "" + }; + + using(var dbContext = new DatabaseContext()) + { + dbContext.UserVehicles.Add(newVeh); + dbContext.SaveChanges(); + } + + newVeh.Spawn(); + } } } diff --git a/Server/Managers/SaveManager.cs b/Server/Managers/SaveManager.cs index 82a8536e..7ef4f169 100644 --- a/Server/Managers/SaveManager.cs +++ b/Server/Managers/SaveManager.cs @@ -10,7 +10,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; -namespace reallife_gamemode.Server.Events +namespace reallife_gamemode.Server.Managers { public class SaveManager : Script { diff --git a/Server/Util/VehicleSync.cs b/Server/Util/VehicleSync.cs index dfa431fb..d25c2b0d 100644 --- a/Server/Util/VehicleSync.cs +++ b/Server/Util/VehicleSync.cs @@ -371,7 +371,7 @@ namespace reallife_gamemode.Server.Util data = new VehicleSyncData(); UpdateVehicleSyncData(veh, data); - NAPI.ClientEvent.TriggerClientEvent(player, "VehStream_PlayerEnterVehicleAttempt", veh, seat); + NAPI.ClientEvent.TriggerClientEvent(player, "VehStream_PlayerEnterVehicleAttempt", veh.Handle.Value, seat); } [ServerEvent(Event.PlayerExitVehicleAttempt)]