This commit is contained in:
hydrant
2021-05-30 14:34:42 +02:00
parent de96e9e97a
commit f3162bd289
3 changed files with 70 additions and 49 deletions

View File

@@ -333,50 +333,61 @@ export default function hanfSystem(globalData: IGlobalData) {
let hanfDataIdToObjectMap: Map<number, ObjectMp> = new Map<number, ObjectMp>(); let hanfDataIdToObjectMap: Map<number, ObjectMp> = new Map<number, ObjectMp>();
let hanfDataIdToTextLabelMap: Map<number, TextLabelMp> = new Map<number, TextLabelMp>(); let hanfDataIdToTextLabelMap: Map<number, TextLabelMp> = new Map<number, TextLabelMp>();
mp.events.add("SERVER:Hanf_UpdateHanf", (dataJsonArr: string[]) => { let currentHanfUpdateJsonData: Map<number, string> = new Map<number, string>();
var dataJson = dataJsonArr.join('');
var data: Array<CannabisData> = <Array<CannabisData>>JSON.parse(dataJson)
var newPlants = data.filter(d => currentHanfData.filter(x => x.Id === d.Id).length == 0); mp.events.add("SERVER:Hanf_UpdateHanf", (currentIndex: number, totalData: number, currentData: string) => {
var removedPlants = currentHanfData.filter(d => data.filter(x => x.Id === d.Id).length == 0); currentHanfUpdateJsonData.set(currentIndex, currentData);
var existingPlants = data.filter(d => currentHanfData.filter(x => x.Id === d.Id).length == 1); if (currentHanfUpdateJsonData.size == totalData) {
var jsonData: string = "";
newPlants.forEach(plant => { for (var i = 0; i < totalData; i++) {
var model = getPlantModel(plant); jsonData += currentHanfUpdateJsonData.get(i);
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); currentHanfUpdateJsonData.clear();
textLabel.text = getPlantText(plant);
});
currentHanfData = data; var data: Array<CannabisData> = <Array<CannabisData>>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 { function getPlantModel(plant: CannabisData): number {

View File

@@ -281,21 +281,29 @@ namespace ReallifeGamemode.Server.Managers
}).ToList(); }).ToList();
_currentCannabisData = activePlants; _currentCannabisData = activePlants;
UpdateHanfForPlayer();
NAPI.Pools.GetAllPlayers().ForEach(p =>
{
UpdateHanfForPlayer(p, activePlants);
});
} }
public static void UpdateHanfForPlayer(Player player, List<CannabisData> cannabisData = null) public static void UpdateHanfForPlayer(Player player = null, List<CannabisData> cannabisData = null)
{ {
cannabisData ??= _currentCannabisData; cannabisData ??= _currentCannabisData;
string jsonStr = JsonConvert.SerializeObject(cannabisData); string jsonStr = JsonConvert.SerializeObject(cannabisData);
List<string> 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<string> GetChunks(string value, int chunkSize) public static List<string> GetChunks(string value, int chunkSize)
@@ -648,6 +656,8 @@ namespace ReallifeGamemode.Server.Managers
InventoryManager.RemoveUserItem(user, cannabisUserItem, amount); InventoryManager.RemoveUserItem(user, cannabisUserItem, amount);
dbContext.SaveChanges(); dbContext.SaveChanges();
dbContext.SaveChanges();
logger.LogInformation("Player {0} sold {1} cannabis to the server for {2} dollars", player.Name, amount, price); 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"); player.SendNotification($"Du hast ~g~{amount} Hanfblüten~s~ für ~g~{price.ToMoneyString()}~s~ verkauft");

View File

@@ -16,7 +16,7 @@ namespace ReallifeGamemode.Server.Util
{ "balboistderbeste", "Hurra! Hurra! Der Balbo ist jetzt da! (balbo)" }, { "balboistderbeste", "Hurra! Hurra! Der Balbo ist jetzt da! (balbo)" },
{ "AirMake", "The fresh breeze of the stone is back. (AirMake)" }, { "AirMake", "The fresh breeze of the stone is back. (AirMake)" },
{ "raviatex", "I'll remember you all in therapy. (aviate)" }, { "raviatex", "I'll remember you all in therapy. (aviate)" },
{ "datgame__", "KOPF ENTWICKLUNG!! (hydrant)" }, { "datgame__", "ja (hydrant)" },
{ "Roachkook", "2head Entwickler ist wieder online (kookroach)" } { "Roachkook", "2head Entwickler ist wieder online (kookroach)" }
}; };