Finalize Surgery
This commit is contained in:
@@ -32,21 +32,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
[RemoteEvent("creatorSave")]
|
||||
public void CreatorSave(Player player, bool gender, string parentData, string featureData, string appearanceData, string hairAndColorData)
|
||||
{
|
||||
|
||||
var charExists = false;
|
||||
var genderSwap = false;
|
||||
|
||||
var cUser = player.GetUser();
|
||||
|
||||
if (cUser.CharacterId != null)
|
||||
{
|
||||
charExists = true;
|
||||
if(cUser.Character.Gender != gender)
|
||||
{
|
||||
genderSwap = true;
|
||||
}
|
||||
}
|
||||
|
||||
var jParentData = JObject.Parse(parentData);
|
||||
var jFeatureData = JArray.Parse(featureData);
|
||||
var jAppearanceData = JArray.Parse(appearanceData);
|
||||
@@ -79,27 +64,27 @@ namespace ReallifeGamemode.Server.Managers
|
||||
float neckWidth = jFeatureData.Value<float>(19);
|
||||
|
||||
byte blemishes = jAppearanceData[0].Value<byte>("Value");
|
||||
float blemishesOpacity = jAppearanceData[0].Value<byte>("Opacity");
|
||||
float blemishesOpacity = jAppearanceData[0].Value<float>("Opacity");
|
||||
byte facialHair = jAppearanceData[1].Value<byte>("Value");
|
||||
float facialHairOpacity = jAppearanceData[1].Value<byte>("Opacity");
|
||||
float facialHairOpacity = jAppearanceData[1].Value<float>("Opacity");
|
||||
byte eyebrows = jAppearanceData[2].Value<byte>("Value");
|
||||
float eyebrowsOpacity = jAppearanceData[2].Value<byte>("Opacity");
|
||||
float eyebrowsOpacity = jAppearanceData[2].Value<float>("Opacity");
|
||||
byte ageing = jAppearanceData[3].Value<byte>("Value");
|
||||
float ageingOpacity = jAppearanceData[3].Value<byte>("Opacity");
|
||||
float ageingOpacity = jAppearanceData[3].Value<float>("Opacity");
|
||||
byte makeup = jAppearanceData[4].Value<byte>("Value");
|
||||
float makeupOpacity = jAppearanceData[4].Value<byte>("Opacity");
|
||||
float makeupOpacity = jAppearanceData[4].Value<float>("Opacity");
|
||||
byte blush = jAppearanceData[5].Value<byte>("Value");
|
||||
float blushOpacity = jAppearanceData[5].Value<byte>("Opacity");
|
||||
float blushOpacity = jAppearanceData[5].Value<float>("Opacity");
|
||||
byte complexion = jAppearanceData[6].Value<byte>("Value");
|
||||
float complexionOpacity = jAppearanceData[6].Value<byte>("Opacity");
|
||||
float complexionOpacity = jAppearanceData[6].Value<float>("Opacity");
|
||||
byte sunDamage = jAppearanceData[7].Value<byte>("Value");
|
||||
float sunDamageOpacity = jAppearanceData[7].Value<byte>("Opacity");
|
||||
float sunDamageOpacity = jAppearanceData[7].Value<float>("Opacity");
|
||||
byte lipstick = jAppearanceData[8].Value<byte>("Value");
|
||||
float lipstickOpacity = jAppearanceData[8].Value<byte>("Opacity");
|
||||
float lipstickOpacity = jAppearanceData[8].Value<float>("Opacity");
|
||||
byte freckles = jAppearanceData[9].Value<byte>("Value");
|
||||
float frecklesOpacity = jAppearanceData[9].Value<byte>("Opacity");
|
||||
float frecklesOpacity = jAppearanceData[9].Value<float>("Opacity");
|
||||
byte chestHair = jAppearanceData[10].Value<byte>("Value");
|
||||
float chestHairOpacity = jAppearanceData[10].Value<byte>("Opacity");
|
||||
float chestHairOpacity = jAppearanceData[10].Value<float>("Opacity");
|
||||
|
||||
byte hair = jHairAndColorData.Value<byte>(0);
|
||||
byte hairColor = jHairAndColorData.Value<byte>(1);
|
||||
@@ -111,8 +96,26 @@ namespace ReallifeGamemode.Server.Managers
|
||||
byte lipstickColor = jHairAndColorData.Value<byte>(7);
|
||||
byte chestHairColor = jHairAndColorData.Value<byte>(8);
|
||||
|
||||
var charExists = false;
|
||||
var genderSwap = false;
|
||||
|
||||
using (var saveCharacter = new DatabaseContext())
|
||||
{
|
||||
|
||||
var userId = player.GetUser(saveCharacter).Id;
|
||||
var user = saveCharacter.Users.SingleOrDefault(u => u.Id == userId);
|
||||
|
||||
var oldChar = saveCharacter.Characters.FirstOrDefault(c => c.UserId == user.Id);
|
||||
|
||||
if (user.CharacterId != null)
|
||||
{
|
||||
charExists = true;
|
||||
if (oldChar.Gender != gender)
|
||||
{
|
||||
genderSwap = true;
|
||||
}
|
||||
}
|
||||
|
||||
var character = new Database.Entities.Character
|
||||
{
|
||||
UserId = player.GetUser().Id,
|
||||
@@ -181,20 +184,15 @@ namespace ReallifeGamemode.Server.Managers
|
||||
saveCharacter.Characters.Add(character);
|
||||
saveCharacter.SaveChanges();
|
||||
|
||||
var userId = player.GetUser().Id;
|
||||
var user = saveCharacter.Users.SingleOrDefault(u => u.Id == userId);
|
||||
|
||||
|
||||
user.CharacterId = character.Id;
|
||||
|
||||
if (genderSwap)
|
||||
{
|
||||
var charClothes = saveCharacter.CharacterClothes.Where(c => c.UserId == user.Id);
|
||||
|
||||
foreach(var cloth in charClothes)
|
||||
{
|
||||
saveCharacter.Remove(cloth);
|
||||
saveCharacter.SaveChanges();
|
||||
}
|
||||
var charClothes = saveCharacter.CharacterClothes.Where(c => c.UserId == user.Id);
|
||||
saveCharacter.RemoveRange(charClothes);
|
||||
saveCharacter.SaveChanges();
|
||||
}
|
||||
|
||||
for (var x = 1; x <= 11; x++)
|
||||
@@ -280,12 +278,12 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (charExists)
|
||||
{
|
||||
user.BankAccount.Balance -= 15000;
|
||||
if(user.FreeSurgery == true) user.FreeSurgery = false;
|
||||
}
|
||||
saveCharacter.Remove(oldChar);
|
||||
}
|
||||
saveCharacter.SaveChanges();
|
||||
}
|
||||
//HeadOverlay makeupHo = new HeadOverlay()
|
||||
@@ -304,14 +302,15 @@ namespace ReallifeGamemode.Server.Managers
|
||||
//};
|
||||
//player.SetHeadOverlay(4, makeupHo);
|
||||
//player.SetHeadOverlay(5, blushHo);
|
||||
player.SafeTeleport(Main.DEFAULT_SPAWN_POSITION, Main.DEFAULT_SPAWN_HEADING, true);
|
||||
player.TriggerEvent("draw", player.Name, player.Handle.Value);
|
||||
player.Dimension = 0;
|
||||
|
||||
if (charExists)
|
||||
{
|
||||
ApplyCharacter(player);
|
||||
UpdateCharacterCloth.LoadCharacterDefaults(player);
|
||||
{
|
||||
LeaveSurgery(player);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.SafeTeleport(Main.DEFAULT_SPAWN_POSITION, Main.DEFAULT_SPAWN_HEADING, true);
|
||||
player.TriggerEvent("draw", player.Name, player.Handle.Value);
|
||||
player.Dimension = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
foreach (Door door in dbContext.Doors)
|
||||
{
|
||||
_doorColShapes[door.Id] = NAPI.ColShape.CreateSphereColShape(door.Position, 30f);
|
||||
_doorColShapes[door.Id] = NAPI.ColShape.CreateSphereColShape(door.Position, door.AlwaysOpen ? 200f : 30f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -63,7 +63,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
|
||||
player.SendNotification(notStr, true);
|
||||
|
||||
NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", d.Model, d.X, d.Y, d.Z, (d.Locked ? 1 : 0), 0.0f, 0.0f, 0.0f));
|
||||
NAPI.Pools.GetAllPlayers().ForEach(p => UpdateDoorState(p, d));
|
||||
}
|
||||
}
|
||||
dbContext.SaveChanges();
|
||||
@@ -80,9 +80,14 @@ namespace ReallifeGamemode.Server.Managers
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
Door door = dbContext.Doors.Where(d => d.Id == doorId).First();
|
||||
player.TriggerEvent("changeDoorState", door.Model, door.X, door.Y, door.Z, (door.Locked ? 1 : 0), 0.0f, 0.0f, 0.0f);
|
||||
UpdateDoorState(player, door);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void UpdateDoorState(Player player, Door door)
|
||||
{
|
||||
player.TriggerEvent("changeDoorState", door.Model, door.X, door.Y, door.Z, (door.Locked || door.AlwaysOpen ? 1 : 0), 0.0f, 0.0f, door.AlwaysOpen ? 1.0f : 0.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
@@ -603,16 +603,16 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
if (amount > 0 && amount <= 10000)
|
||||
{
|
||||
player.SendNotification($"~w~Du hast ~y~{targetname} ~w~ein Ticket in Höhe von ~b~{amount}$ ~w~gestellt. Grund: ~g~{reason}~w~.");
|
||||
target.SendNotification($"~b~{player.GetUser().FactionRank.RankName} | {playername} ~w~hat dir ein Ticket in Höhe von ~y~{amount}$ ~w~gestellt.", true);
|
||||
target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Strafticket im Interaktionsmenü annehmen.", true);
|
||||
player.SendNotification($"~w~Du hast ~y~{targetname} ~w~ein Ticket in Höhe von ~b~${amount} ~w~ausgestellt. Grund: ~g~{reason}~w~.");
|
||||
target.SendNotification($"~b~{player.GetUser().FactionRank.RankName} {playername} ~w~hat dir ein Ticket in Höhe von ~y~${amount} ~w~ausgestellt.", true);
|
||||
target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Das Ticket kann im Interaktionsmenü angenommen werden.", true);
|
||||
target.SetData("ticket_boolean", true);
|
||||
target.SetData<int>("ticket_amount", amount);
|
||||
target.SetData<Player>("ticket_player", player);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.SendNotification("~r~Du kannst nur zwischen 1$ und 10000$ angeben!");
|
||||
player.SendNotification("~r~Du kannst nur zwischen $1 und $10.000 angeben!");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -668,8 +668,8 @@ namespace ReallifeGamemode.Server.Managers
|
||||
targetUser.Points += amount;
|
||||
|
||||
player.SendNotification($"~w~Du hast ~y~{targetname} ~b~{amount} ~w~Strafpunkte gegeben. Grund: ~g~{reason}~w~.");
|
||||
target.SendNotification($"~b~{player.GetUser().FactionRank.RankName} | {playername} ~w~hat dir ~y~{amount} ~w~Strafpunkte gegeben.", true);
|
||||
ChatService.HQMessage(targetname + " hat von " + playername + " " + amount + " Strafpunkt(e) erhalten. Gesamt: " + targetUser.Points);
|
||||
target.SendNotification($"~b~{player.GetUser().FactionRank.RankName} {playername} ~w~hat dir ~y~{amount} ~w~Strafpunkte gegeben (Grund: ~r~{reason}~w~).", true);
|
||||
ChatService.HQMessage(targetname + " hat von " + playername + " " + amount + " Strafpunkt(e) erhalten (Grund: " + reason + "). Gesamt: " + targetUser.Points);
|
||||
|
||||
if (targetUser.Points < 0)
|
||||
{
|
||||
@@ -677,9 +677,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
else if (targetUser.Points >= 12)
|
||||
{
|
||||
target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Du hast nun ~r~12/12 ~x~Strafpunkten.", true);
|
||||
target.SendNotification($"~w~Dir wird ~r~Auto- ~w~und ~r~Motorradführerschein ~w~entzogen.", true); //FlashNotif
|
||||
|
||||
target.SendNotification($"~x~Du hast nun ~r~12/12 ~x~Strafpunkte. ~w~Dir wurde dein ~r~Auto- und dein Motorradführerschein ~w~entzogen.", true);
|
||||
ChatService.HQMessage(targetname + " besitzt nun keinen Führerschein mehr.");
|
||||
|
||||
targetUser.Points = 0;
|
||||
@@ -688,7 +686,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
else
|
||||
{
|
||||
target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Du hast nun ~y~{targetUser.Points}/12 ~x~Strafpunkten.", true);
|
||||
target.SendNotification($"~x~Du hast nun ~y~{targetUser.Points}/12 ~x~Strafpunkt(e).", true);
|
||||
}
|
||||
|
||||
dbContext.SaveChanges();
|
||||
@@ -755,7 +753,16 @@ namespace ReallifeGamemode.Server.Managers
|
||||
public void InteractionMenu_Pay(Player player, string jsonNameOrId, string stringAmount)
|
||||
{
|
||||
string nameOrId = (string)JsonConvert.DeserializeObject(jsonNameOrId);
|
||||
int amount = Int32.Parse(stringAmount);
|
||||
int amount;
|
||||
try
|
||||
{
|
||||
amount = Int32.Parse(stringAmount);
|
||||
}
|
||||
catch
|
||||
{
|
||||
player.SendNotification("~r~" + stringAmount + " ist kein gültiger Betrag.");
|
||||
return;
|
||||
}
|
||||
Player target = PlayerService.GetPlayerByNameOrId(nameOrId);
|
||||
|
||||
List<Player> nearbyPlayers = NAPI.Player.GetPlayersInRadiusOfPlayer(3, player);
|
||||
@@ -771,7 +778,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
else if (!nearbyPlayers.Contains(target))
|
||||
{
|
||||
player.SendNotification("~r~Dieser Spieler befindet sich nicht in deiner nähe!");
|
||||
player.SendNotification("~r~Dieser Spieler befindet sich nicht in deiner Nähe!");
|
||||
}
|
||||
else if (player.GetUser().Handmoney < amount)
|
||||
{
|
||||
|
||||
@@ -531,8 +531,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
if (usableItemObj.Use(fItem))
|
||||
{
|
||||
List<InventoryItem> items = backpackItems[player];
|
||||
player.SetSharedData("backpackItems", JsonConvert.SerializeObject(items.ToArray()));
|
||||
SetBackpackItems(player);
|
||||
player.TriggerEvent("aproveUse", 1, iItem.Name);
|
||||
}
|
||||
}
|
||||
@@ -590,6 +589,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
break;
|
||||
}
|
||||
context.SaveChanges();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
@@ -204,7 +204,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
|
||||
if (job != null && job.GetUsersInJob().Contains(player))
|
||||
{
|
||||
if(job.CheckVehicle(player, veh) && seat == 0)
|
||||
if (job.CheckVehicle(player, veh) && seat == 0)
|
||||
{
|
||||
if (!playerTimersJobVehicleRespawn.ContainsKey(player))
|
||||
return;
|
||||
@@ -212,7 +212,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
playerTimersJobVehicleRespawn[player].Stop();
|
||||
playerTimersJobVehicleRespawn.Remove(player);
|
||||
}
|
||||
else
|
||||
else if (job != GetJob<RefuseCollectorJob>())
|
||||
{
|
||||
player.StopAnimation();
|
||||
player.WarpOutOfVehicle();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Server.Shop.Clothing;
|
||||
@@ -32,6 +32,11 @@ namespace ReallifeGamemode.Server.Managers
|
||||
|
||||
public static List<AmmunationPoint> AmmunationPoints = new List<AmmunationPoint>();
|
||||
|
||||
public static List<RentcarPoint> rentcarPoints = new List<RentcarPoint>();
|
||||
|
||||
public static Vector3 eventportPosition;
|
||||
public static bool eventportActive = false;
|
||||
|
||||
public static void LoadPositionManager()
|
||||
{
|
||||
#region DutyPoints
|
||||
@@ -148,7 +153,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
};
|
||||
ElevatorPoint FibElevatorPointGarage = new ElevatorPoint()
|
||||
{
|
||||
Position = new Vector3(124.2521, -741.3329, 33.13322), //FBI ganz ganz unten
|
||||
Position = new Vector3(125.172, -739.3329, 33.13322), //FBI ganz ganz unten
|
||||
FactionId = 3,
|
||||
Stage = "Garage"
|
||||
};
|
||||
@@ -304,8 +309,47 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
|
||||
#endregion Shops
|
||||
|
||||
#region RentCar
|
||||
|
||||
RentcarPoint rentCarNoobSpawn = new RentcarPoint()
|
||||
{
|
||||
Position = Rentcar.noobSpawnBlipPosition
|
||||
};
|
||||
RentcarPoint rentCarStadthalle = new RentcarPoint()
|
||||
{
|
||||
Position = Rentcar.stadthalleBlipPosition
|
||||
};
|
||||
RentcarPoint rentCarKnast = new RentcarPoint()
|
||||
{
|
||||
Position = Rentcar.knastBlipPosition
|
||||
};
|
||||
RentcarPoint rentCarPaleto = new RentcarPoint()
|
||||
{
|
||||
Position = Rentcar.paletoBlipPosition
|
||||
};
|
||||
RentcarPoint rentCarLamesa = new RentcarPoint()
|
||||
{
|
||||
Position = Rentcar.lamesaBlipPosition
|
||||
};
|
||||
|
||||
rentcarPoints.Add(rentCarNoobSpawn);
|
||||
rentcarPoints.Add(rentCarLamesa);
|
||||
rentcarPoints.Add(rentCarStadthalle);
|
||||
rentcarPoints.Add(rentCarKnast);
|
||||
rentcarPoints.Add(rentCarPaleto);
|
||||
|
||||
foreach (RentcarPoint point in rentcarPoints)
|
||||
{
|
||||
NAPI.Marker.CreateMarker(1, new Vector3(point.Position.X, point.Position.Y, point.Position.Z - 2), new Vector3(point.Position.X, point.Position.Y, point.Position.Z + 1),
|
||||
new Vector3(0, 0, 0), 1.5f, new Color(255, 255, 255, 50), false, 0);
|
||||
NAPI.TextLabel.CreateTextLabel("~y~Fahrzeugverleih\n~w~Drücke ~b~E~w~ um ein Fahrzeug zu mieten", point.Position, 7, 1, 0, new Color(255, 255, 255), false, 0);
|
||||
|
||||
NAPI.Blip.CreateBlip(88, new Vector3(point.Position.X, point.Position.Y, point.Position.Z), (float)0.7, 59, "Fahrzeugvermietung", 255, 200, true, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion RentCar
|
||||
[RemoteEvent("sendClientToStage")]
|
||||
public void ElevatorSendToStage(Player player, string level)
|
||||
{
|
||||
@@ -436,3 +480,9 @@ public class AmmunationPoint
|
||||
public Vector3 Position { get; set; }
|
||||
public Ammunation Ammunation { get; set; }
|
||||
}
|
||||
|
||||
public class RentcarPoint
|
||||
{
|
||||
public Vector3 Position { get; set; }
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using GTANetworkAPI;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
@@ -35,7 +36,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
colShape.OnEntityEnterColShape += (cs, c) =>
|
||||
{
|
||||
using var dbContext = new DatabaseContext();
|
||||
if (c.IsInVehicle && c.VehicleSeat == 0)
|
||||
if (c.IsInVehicle && c.VehicleSeat == 0 && IsPlayerAllowedToTuneVehicle(c, c.Vehicle, dbContext))
|
||||
{
|
||||
c.TriggerEvent("showTuningInfo");
|
||||
}
|
||||
@@ -43,12 +44,42 @@ namespace ReallifeGamemode.Server.Managers
|
||||
|
||||
colShape.OnEntityExitColShape += (cs, c) =>
|
||||
{
|
||||
c.TriggerEvent("hideTuningInfo", true);
|
||||
if(c.IsInVehicle)
|
||||
{
|
||||
c.TriggerEvent("hideTuningInfo", true);
|
||||
}
|
||||
};
|
||||
|
||||
tuningGarages.Add(colShape);
|
||||
}
|
||||
|
||||
private static bool IsPlayerAllowedToTuneVehicle(Player c, Vehicle vehicle, DatabaseContext dbContext)
|
||||
{
|
||||
User user = c.GetUser();
|
||||
if(user == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
ServerVehicle serverVehicle = vehicle.GetServerVehicle(dbContext);
|
||||
if(serverVehicle == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(serverVehicle is UserVehicle userVehicle && userVehicle.UserId == user.Id)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if(serverVehicle is FactionVehicle factionVehicle && factionVehicle.GetOwners().Contains(user.FactionId ?? 0))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void ApplyTuningToServerVehicle(ServerVehicle sVeh)
|
||||
{
|
||||
Vehicle veh = VehicleManager.GetVehicleFromServerVehicle(sVeh);
|
||||
@@ -81,7 +112,33 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
if (!player.IsInVehicle) return;
|
||||
|
||||
player.TriggerEvent("showTuningMenu");
|
||||
player.TriggerEvent("showTuningMenu", false, GetVehicleBasePrice(player.Vehicle));
|
||||
}
|
||||
|
||||
private int GetVehicleBasePrice(Vehicle vehicle)
|
||||
{
|
||||
if(vehicle == null)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
ServerVehicle serverVehicle = vehicle.GetServerVehicle();
|
||||
if(serverVehicle == null)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(serverVehicle is UserVehicle userVehicle)
|
||||
{
|
||||
return userVehicle.Price ?? 0;
|
||||
}
|
||||
|
||||
if(serverVehicle is FactionVehicle factionVehicle)
|
||||
{
|
||||
return factionVehicle.BuyPrice;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
[RemoteEvent("repairVehicle")]
|
||||
|
||||
@@ -5,7 +5,9 @@ using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Server.Log;
|
||||
using ReallifeGamemode.Server.Services;
|
||||
using ReallifeGamemode.Server.Util;
|
||||
using ReallifeGamemode.Services;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -770,11 +772,13 @@ namespace ReallifeGamemode.Server.Managers
|
||||
"fibd2",//mod
|
||||
"fibj",//mod
|
||||
"fibn3",//mod
|
||||
"fibr"//mod
|
||||
|
||||
"fibr",//mod
|
||||
"vicechee", //mod
|
||||
"sheriffcoqm", //mod
|
||||
"polcoquette", //mod
|
||||
};
|
||||
|
||||
private static readonly Dictionary<int, NetHandle> _serverVehicles = new Dictionary<int, NetHandle>();
|
||||
private static readonly Dictionary<int, ushort> _serverVehicles = new Dictionary<int, ushort>();
|
||||
|
||||
private static readonly Dictionary<NetHandle, Vector3> lastPositions = new Dictionary<NetHandle, Vector3>();
|
||||
private static DateTime lastSave = DateTime.UtcNow;
|
||||
@@ -855,17 +859,23 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
if (_serverVehicles.ContainsKey(serverVehicle.Id))
|
||||
{
|
||||
logger.LogCritical("Server Vehicle {Id} already has a spawned vehicle", serverVehicle.Id);
|
||||
_serverVehicles[serverVehicle.Id].Entity<Vehicle>().Delete();
|
||||
var spawnedHandle = _serverVehicles.Where(s => s.Key == serverVehicle.Id).First().Value;
|
||||
logger.LogCritical("Server Vehicle {Id} already has a spawned vehicle with handle {spawnedHandle}", serverVehicle.Id, spawnedHandle);
|
||||
new NetHandle(_serverVehicles[serverVehicle.Id], EntityType.Vehicle).Entity<Vehicle>().Delete();
|
||||
}
|
||||
|
||||
if (_serverVehicles.ContainsValue(vehicle.Handle))
|
||||
if (_serverVehicles.ContainsValue(vehicle.Handle.Value))
|
||||
{
|
||||
logger.LogCritical("Vehicle handle {Handle} already belongs");
|
||||
var dbId = _serverVehicles.Where(v => v.Value == vehicle.Handle.Value).First().Key;
|
||||
var dbIdHandle = vehicle.Handle.Value;
|
||||
logger.LogCritical("Vehicle handle {handle} already belongs to server vehicle {dbIdHandle}", dbIdHandle, dbId);
|
||||
return;
|
||||
}
|
||||
|
||||
_serverVehicles[serverVehicle.Id] = vehicle.Handle;
|
||||
var id = serverVehicle.Id;
|
||||
var handle = vehicle.Handle.Value;
|
||||
logger.LogInformation("Mapping server vehicle id {id} to vehicle {handle}", id, handle);
|
||||
_serverVehicles[serverVehicle.Id] = vehicle.Handle.Value;
|
||||
}
|
||||
|
||||
internal static void DeleteVehicle(Vehicle veh)
|
||||
@@ -873,15 +883,18 @@ namespace ReallifeGamemode.Server.Managers
|
||||
ServerVehicle sVeh;
|
||||
if ((sVeh = GetServerVehicleFromVehicle(veh)) != null)
|
||||
{
|
||||
var id = sVeh.Id;
|
||||
var handle = veh.Handle.Value;
|
||||
logger.LogInformation("Deleting server vehicle {id} mapping to spawned veh {handle}", id, handle);
|
||||
_serverVehicles.Remove(sVeh.Id);
|
||||
}
|
||||
|
||||
veh?.Delete();
|
||||
}
|
||||
|
||||
public static Vehicle GetVehicleFromHandle(NetHandle handle)
|
||||
public static Vehicle GetVehicleFromHandle(ushort handle)
|
||||
{
|
||||
return NAPI.Pools.GetAllVehicles().Find(v => v.Handle == handle);
|
||||
return NAPI.Pools.GetAllVehicles().Find(v => v.Handle.Value == handle);
|
||||
}
|
||||
|
||||
public static Vehicle GetVehicleFromId(int id)
|
||||
@@ -917,9 +930,9 @@ namespace ReallifeGamemode.Server.Managers
|
||||
|
||||
dbContext = dbContext ?? new DatabaseContext();
|
||||
|
||||
foreach (KeyValuePair<int, NetHandle> pair in _serverVehicles)
|
||||
foreach (KeyValuePair<int, ushort> pair in _serverVehicles)
|
||||
{
|
||||
if (pair.Value == veh.Handle)
|
||||
if (pair.Value == veh.Handle.Value)
|
||||
{
|
||||
return dbContext.ServerVehicles.Find(pair.Key);
|
||||
}
|
||||
@@ -946,6 +959,17 @@ namespace ReallifeGamemode.Server.Managers
|
||||
[ServerEvent(Event.VehicleDeath)]
|
||||
public static void VehicleManagerVehicleDeath(Vehicle vehicle)
|
||||
{
|
||||
/*
|
||||
String rentCarOwner = Rentcar.mapPlayerRentcarBill.FirstOrDefault(x => x.Value.Item1 == vehicle).Key;
|
||||
|
||||
ChatService.Broadcast("a:" + "");
|
||||
if (rentCarOwner != null)
|
||||
{
|
||||
Player target = PlayerService.GetPlayerByNameOrId(rentCarOwner);
|
||||
Rentcar.cancelRent(target);
|
||||
}
|
||||
*/
|
||||
|
||||
ServerVehicle serverVehicle = GetServerVehicleFromVehicle(vehicle);
|
||||
|
||||
if (serverVehicle == null)
|
||||
|
||||
Reference in New Issue
Block a user