Code cleanup and attempt at reducing ram usage

Added extra bosses to pmc enemy forcing code
This commit is contained in:
Dev 2023-08-15 12:05:31 +01:00
parent c9c472882e
commit de11386c5a
4 changed files with 40 additions and 48 deletions

View File

@ -1,6 +1,5 @@
using Common.Models.Input; using Common.Models.Input;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
@ -12,7 +11,7 @@ namespace Common.Bots;
public static class BotParser public static class BotParser
{ {
static JsonSerializerOptions serialiserOptions = new JsonSerializerOptions { }; static readonly JsonSerializerOptions serialiserOptions = new() { };
public static async Task<List<Datum>> ParseAsync(string dumpPath, string[] botTypes) public static async Task<List<Datum>> ParseAsync(string dumpPath, string[] botTypes)
{ {
@ -37,12 +36,6 @@ public static class BotParser
int dupeCount = 0; int dupeCount = 0;
var rawInputString = await ReadFileContentsAsync(file); var rawInputString = await ReadFileContentsAsync(file);
//var json = rawInputString;
//if (rawInputString.Contains("location\":1,"))
//{
// json = PruneMalformedBsgJson(rawInputString, splitFilePath.Last());
//}
List<Datum> bots = null; List<Datum> bots = null;
try try
{ {
@ -50,38 +43,50 @@ public static class BotParser
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine($"file parse fucked up: {file}"); Console.WriteLine($"File parse fucked up: {file}");
throw; throw;
} }
if (bots == null || bots.Count == 0) if (bots == null || bots.Count == 0)
{ {
Console.WriteLine($"skipping file: {splitFilePath.Last()}. no bots found, "); Console.WriteLine($"Skipping file: {splitFilePath.Last()}. no bots found, ");
return; return;
} }
Console.WriteLine($"parsing: {bots.Count} bots in file {splitFilePath.Last()}"); //Console.WriteLine($"parsing: {bots.Count} bots in file {splitFilePath.Last()}");
foreach (var bot in bots) foreach (var bot in bots)
{ {
// I have no idea
if (bot._id == "6483938c53cc9087c70eae86") if (bot._id == "6483938c53cc9087c70eae86")
{ {
Console.WriteLine("oh no"); Console.WriteLine("oh no");
} }
// We dont know how to parse this bot type, need to add it to types enum
if (!botTypes.Contains(bot.Info.Settings.Role.ToLower())) if (!botTypes.Contains(bot.Info.Settings.Role.ToLower()))
{ {
continue; continue;
} }
// Bot already exists in dictionary, skip
if (parsedBotsDict.ContainsKey(bot._id)) if (parsedBotsDict.ContainsKey(bot._id))
{ {
//var existingBot = parsedBotsDict[bot._id]; //var existingBot = parsedBotsDict[bot._id];
dupeCount++; dupeCount++;
continue; continue;
} }
if (!parsedBotsDict.ContainsKey(bot._id)) if (!parsedBotsDict.ContainsKey(bot._id))
{ {
// Null out data we don't need for generating bots to save RAM
bot.Stats = null;
bot.Encyclopedia = null;
bot.Hideout = null;
bot.ConditionCounters = null;
bot.Bonuses = null;
bot.BackendCounters = null;
bot.InsuredItems = null;
parsedBotsDict.Add(bot._id, bot); parsedBotsDict.Add(bot._id, bot);
} }
} }

View File

@ -1,14 +1,9 @@
using Common; using Common.Extensions;
using Common.Extensions;
using Common.Models; using Common.Models;
using Common.Models.Input; using Common.Models.Input;
using Common.Models.Output; using Common.Models.Output;
using Generator.Helpers; using Generator.Helpers;
using System;
using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.IO;
using System.Linq;
namespace Generator namespace Generator
{ {
@ -136,18 +131,13 @@ namespace Generator
if (!alreadyExists) if (!alreadyExists)
{ {
var bodyPartHpToAdd = new Common.Models.Output.BodyParts(); var bodyPartHpToAdd = new Common.Models.Output.BodyParts()
bodyPartHpToAdd.Head.min = bot.Health.BodyParts.Head.Health.Current; {
bodyPartHpToAdd.Head.max = bot.Health.BodyParts.Head.Health.Maximum; Head = new MinMax(bot.Health.BodyParts.Head.Health.Current, bot.Health.BodyParts.Head.Health.Maximum),
Chest = new MinMax(bot.Health.BodyParts.Chest.Health.Current, bot.Health.BodyParts.Chest.Health.Maximum),
bodyPartHpToAdd.Chest.min = bot.Health.BodyParts.Chest.Health.Current; Stomach = new MinMax(bot.Health.BodyParts.Stomach.Health.Current, bot.Health.BodyParts.Stomach.Health.Maximum),
bodyPartHpToAdd.Chest.max = bot.Health.BodyParts.Chest.Health.Maximum; LeftArm = new MinMax(bot.Health.BodyParts.LeftArm.Health.Current, bot.Health.BodyParts.LeftArm.Health.Maximum)
};
bodyPartHpToAdd.Stomach.min = bot.Health.BodyParts.Stomach.Health.Current;
bodyPartHpToAdd.Stomach.max = bot.Health.BodyParts.Stomach.Health.Maximum;
bodyPartHpToAdd.LeftArm.min = bot.Health.BodyParts.LeftArm.Health.Current;
bodyPartHpToAdd.LeftArm.max = bot.Health.BodyParts.LeftArm.Health.Maximum;
bodyPartHpToAdd.RightArm.min = bot.Health.BodyParts.RightArm.Health.Current; bodyPartHpToAdd.RightArm.min = bot.Health.BodyParts.RightArm.Health.Current;
bodyPartHpToAdd.RightArm.max = bot.Health.BodyParts.RightArm.Health.Maximum; bodyPartHpToAdd.RightArm.max = bot.Health.BodyParts.RightArm.Health.Maximum;

View File

@ -1,8 +1,7 @@
using Common.Models.Output; using Common.Models;
using Common.Models.Output;
using Common.Models.Output.Difficulty; using Common.Models.Output.Difficulty;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Collections;
namespace Generator.Helpers namespace Generator.Helpers
{ {
@ -15,12 +14,12 @@ namespace Generator.Helpers
// Read bot setting files from assets folder that match this bots type // Read bot setting files from assets folder that match this bots type
// Save into dictionary with difficulty as key // Save into dictionary with difficulty as key
var difficultySettingsJsons = new Dictionary<string, DifficultySettings>(); var difficultySettingsJsons = new Dictionary<string, DifficultySettings>();
var botType = botToUpdate.botType.ToString(); BotType botType = botToUpdate.botType;
var pathsWithBotType = difficultyFilePaths.Where(x => x.Contains($"_{botType}_", StringComparison.InvariantCultureIgnoreCase)); var pathsWithBotType = difficultyFilePaths.Where(x => x.Contains($"_{botType}_", StringComparison.InvariantCultureIgnoreCase));
foreach (var path in pathsWithBotType) foreach (var path in pathsWithBotType)
{ {
var json = File.ReadAllText(path); var difficultyJson = File.ReadAllText(path);
var serialisedDifficultySettings = JsonConvert.DeserializeObject<DifficultySettings>(json); var serialisedDifficultySettings = JsonConvert.DeserializeObject<DifficultySettings>(difficultyJson);
serialisedDifficultySettings = ApplyCustomDifficultyValues(botType, serialisedDifficultySettings); serialisedDifficultySettings = ApplyCustomDifficultyValues(botType, serialisedDifficultySettings);
@ -91,16 +90,20 @@ namespace Generator.Helpers
} }
private static DifficultySettings ApplyCustomDifficultyValues(string botType, DifficultySettings difficultySettings) private static DifficultySettings ApplyCustomDifficultyValues(BotType botType, DifficultySettings difficultySettings)
{ {
switch (botType) switch (botType)
{ {
// make all bosses fight PMCs // make all bosses fight PMCs
case "bosskilla": case BotType.bosskilla:
case "bossgluhar": case BotType.bossgluhar:
case "bosstagilla": case BotType.bosstagilla:
case "bossbully": case BotType.bossbully:
case "bosskojaniy": case BotType.bosskojaniy:
case BotType.bossboar:
case BotType.bossboarsniper:
case BotType.bossknight:
case BotType.bosszryachiy:
AddHostileToPMCSettings(difficultySettings); AddHostileToPMCSettings(difficultySettings);
break; break;
default: default:

View File

@ -1,14 +1,8 @@
using Common.Models; using Common.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json; using System.Text.Json;
using System.Threading.Tasks;
namespace Generator.Weighting namespace Generator.Weighting
{ {
public class Weightings public class Weightings
{ {
public Dictionary<string, Dictionary<string, int>> Equipment { get; set; } public Dictionary<string, Dictionary<string, int>> Equipment { get; set; }