using System; using System.Collections.Generic; using System.Linq; using GTANetworkAPI; using Newtonsoft.Json; using ReallifeGamemode.Database.Entities.Saves; using ReallifeGamemode.Database.Models; namespace ReallifeGamemode.Server.Managers { public class PedManager : Script { private List pedDatas = new List(); public static List serverPeds = new List(); private static Dictionary> dataDict = new Dictionary>(); private void GetPedsFromDatabase() { using (var dbContext = new DatabaseContext()) { serverPeds = dbContext.Peds.Where(x => x.HashModel != null).ToList(); } } private List FindDataThroughPlayer(Player player) { if (!dataDict.ContainsKey(player)) return null; return dataDict[player]; } [ServerEvent(Event.PlayerConnected)] public void LoadServerPedForPlayer(Player player) { if (serverPeds.Count == 0) GetPedsFromDatabase(); List vector3s = new List(); List headings = new List(); List hashes = new List(); List dimensions = new List(); pedDatas = new List(); foreach (var s in serverPeds) { if (!s.Active) continue; Vector3 vector3 = new Vector3(s.PositionX, s.PositionY, s.PositionZ); pedDatas.Add(new PedData(player, (DataType)s.Type, vector3, s.Heading, s.HashModel)); vector3s.Add(vector3); headings.Add(s.Heading); hashes.Add(s.HashModel); dimensions.Add(s.Dimension); } dataDict[player] = pedDatas; Console.WriteLine($"[DEBUG] DATA ADDED - PED Data registered :{dataDict.Count}"); player.TriggerEvent("SERVER:CreateStaticPeds", JsonConvert.SerializeObject(vector3s.ToArray()), JsonConvert.SerializeObject(headings.ToArray()), JsonConvert.SerializeObject(hashes.ToArray()), JsonConvert.SerializeObject(dimensions.ToArray())); } [ServerEvent(Event.PlayerDisconnected)] public void RemovePlayerPedDataOnDc(Player player, DisconnectionType type, string reason) { List data = FindDataThroughPlayer(player); if (data == null) return; dataDict.Remove(player); Console.WriteLine($"[DEBUG] DATA REMOVED - PED Data left :{dataDict.Count}"); } } public enum DataType : int { WeponDealPed, DepartmentPed, PrisonPed, } public class PedData { private DataType type; public Player player; public Vector3 vector3; public float heading; public string HashModel; public PedData(Player player, DataType type, Vector3 vector3, float heading, string HashModel) { this.player = player; this.type = type; this.vector3 = vector3; this.heading = heading; this.HashModel = HashModel; } public DataType getType() { return type; } } }