diff --git a/ReallifeGamemode.Client/drugs/hanf.ts b/ReallifeGamemode.Client/drugs/hanf.ts index fb816e44..4e3bc4de 100644 --- a/ReallifeGamemode.Client/drugs/hanf.ts +++ b/ReallifeGamemode.Client/drugs/hanf.ts @@ -333,50 +333,61 @@ export default function hanfSystem(globalData: IGlobalData) { let hanfDataIdToObjectMap: Map = new Map(); let hanfDataIdToTextLabelMap: Map = new Map(); - mp.events.add("SERVER:Hanf_UpdateHanf", (dataJsonArr: string[]) => { - var dataJson = dataJsonArr.join(''); - var data: Array = >JSON.parse(dataJson) + let currentHanfUpdateJsonData: Map = new Map(); - var newPlants = data.filter(d => currentHanfData.filter(x => x.Id === d.Id).length == 0); - var removedPlants = currentHanfData.filter(d => data.filter(x => x.Id === d.Id).length == 0); - var existingPlants = data.filter(d => currentHanfData.filter(x => x.Id === d.Id).length == 1); - - newPlants.forEach(plant => { - var model = getPlantModel(plant); - var object = mp.objects.new(getPlantModel(plant), new mp.Vector3(plant.X, plant.Y, plant.Z)); - hanfDataIdToObjectMap.set(plant.Id, object); - - var textLabel = mp.labels.new(getPlantText(plant), new mp.Vector3(plant.X, plant.Y, plant.Z + 1), { - los: true, - drawDistance: 2 - }); - hanfDataIdToTextLabelMap.set(plant.Id, textLabel); - }); - - removedPlants.forEach(plant => { - var object = hanfDataIdToObjectMap.get(plant.Id); - hanfDataIdToObjectMap.delete(plant.Id); - object.destroy(); - var textLabel = hanfDataIdToTextLabelMap.get(plant.Id); - textLabel.destroy(); - hanfDataIdToTextLabelMap.delete(plant.Id); - }); - - existingPlants.forEach(plant => { - var object = hanfDataIdToObjectMap.get(plant.Id); - var model = getPlantModel(plant); - if (model != object.model) { - object.destroy(); - var object = mp.objects.new(model, new mp.Vector3(plant.X, plant.Y, plant.Z)); - hanfDataIdToObjectMap.delete(plant.Id); - hanfDataIdToObjectMap.set(plant.Id, object); + mp.events.add("SERVER:Hanf_UpdateHanf", (currentIndex: number, totalData: number, currentData: string) => { + currentHanfUpdateJsonData.set(currentIndex, currentData); + if (currentHanfUpdateJsonData.size == totalData) { + var jsonData: string = ""; + for (var i = 0; i < totalData; i++) { + jsonData += currentHanfUpdateJsonData.get(i); } - var textLabel = hanfDataIdToTextLabelMap.get(plant.Id); - textLabel.text = getPlantText(plant); - }); + currentHanfUpdateJsonData.clear(); - currentHanfData = data; + var data: Array = >JSON.parse(jsonData) + + var newPlants = data.filter(d => currentHanfData.filter(x => x.Id === d.Id).length == 0); + var removedPlants = currentHanfData.filter(d => data.filter(x => x.Id === d.Id).length == 0); + var existingPlants = data.filter(d => currentHanfData.filter(x => x.Id === d.Id).length == 1); + + newPlants.forEach(plant => { + var model = getPlantModel(plant); + var object = mp.objects.new(getPlantModel(plant), new mp.Vector3(plant.X, plant.Y, plant.Z)); + hanfDataIdToObjectMap.set(plant.Id, object); + + var textLabel = mp.labels.new(getPlantText(plant), new mp.Vector3(plant.X, plant.Y, plant.Z + 1), { + los: true, + drawDistance: 2 + }); + hanfDataIdToTextLabelMap.set(plant.Id, textLabel); + }); + + removedPlants.forEach(plant => { + var object = hanfDataIdToObjectMap.get(plant.Id); + hanfDataIdToObjectMap.delete(plant.Id); + object.destroy(); + var textLabel = hanfDataIdToTextLabelMap.get(plant.Id); + textLabel.destroy(); + hanfDataIdToTextLabelMap.delete(plant.Id); + }); + + existingPlants.forEach(plant => { + var object = hanfDataIdToObjectMap.get(plant.Id); + var model = getPlantModel(plant); + if (model != object.model) { + object.destroy(); + var object = mp.objects.new(model, new mp.Vector3(plant.X, plant.Y, plant.Z)); + hanfDataIdToObjectMap.delete(plant.Id); + hanfDataIdToObjectMap.set(plant.Id, object); + } + + var textLabel = hanfDataIdToTextLabelMap.get(plant.Id); + textLabel.text = getPlantText(plant); + }); + + currentHanfData = data; + } }); function getPlantModel(plant: CannabisData): number { diff --git a/ReallifeGamemode.Server/Managers/HanfManager.cs b/ReallifeGamemode.Server/Managers/HanfManager.cs index 9f7e5f7a..7a22c942 100644 --- a/ReallifeGamemode.Server/Managers/HanfManager.cs +++ b/ReallifeGamemode.Server/Managers/HanfManager.cs @@ -281,21 +281,29 @@ namespace ReallifeGamemode.Server.Managers }).ToList(); _currentCannabisData = activePlants; - - NAPI.Pools.GetAllPlayers().ForEach(p => - { - UpdateHanfForPlayer(p, activePlants); - }); + UpdateHanfForPlayer(); } - public static void UpdateHanfForPlayer(Player player, List cannabisData = null) + public static void UpdateHanfForPlayer(Player player = null, List cannabisData = null) { cannabisData ??= _currentCannabisData; string jsonStr = JsonConvert.SerializeObject(cannabisData); - List parts = GetChunks(jsonStr, 500); + string[] parts = GetChunks(jsonStr, 5000).ToArray(); - player.TriggerEvent("SERVER:Hanf_UpdateHanf", parts); + int totalData = parts.Length; + + for (int i = 0; i < totalData; i++) + { + if (player != null) + { + player.TriggerEvent("SERVER:Hanf_UpdateHanf", i, totalData, parts[i]); + } + else + { + NAPI.ClientEvent.TriggerClientEventForAll("SERVER:Hanf_UpdateHanf", i, totalData, parts[i]); + } + } } public static List GetChunks(string value, int chunkSize) @@ -648,6 +656,8 @@ namespace ReallifeGamemode.Server.Managers InventoryManager.RemoveUserItem(user, cannabisUserItem, amount); dbContext.SaveChanges(); + dbContext.SaveChanges(); + logger.LogInformation("Player {0} sold {1} cannabis to the server for {2} dollars", player.Name, amount, price); player.SendNotification($"Du hast ~g~{amount} Hanfblüten~s~ für ~g~{price.ToMoneyString()}~s~ verkauft"); diff --git a/ReallifeGamemode.Server/Util/GlobalHelper.cs b/ReallifeGamemode.Server/Util/GlobalHelper.cs index 94849ec3..eabb0df6 100644 --- a/ReallifeGamemode.Server/Util/GlobalHelper.cs +++ b/ReallifeGamemode.Server/Util/GlobalHelper.cs @@ -16,7 +16,7 @@ namespace ReallifeGamemode.Server.Util { "balboistderbeste", "Hurra! Hurra! Der Balbo ist jetzt da! (balbo)" }, { "AirMake", "The fresh breeze of the stone is back. (AirMake)" }, { "raviatex", "I'll remember you all in therapy. (aviate)" }, - { "datgame__", "KOPF ENTWICKLUNG!! (hydrant)" }, + { "datgame__", "ja (hydrant)" }, { "Roachkook", "2head Entwickler ist wieder online (kookroach)" } };