public override LogParseResult Parse() { LinkedList <LogParseResultEntry> result = new LinkedList <LogParseResultEntry>(); BlissHiveLogContainer blissHiveLogContainer = (BlissHiveLogContainer)this.container; foreach (BlissHiveLogObject logObject in blissHiveLogContainer.logObjectContainer.logObjects) { for (int i = 0; i < logObject.inventories.Count - 1; i++) { BlissHiveLogInventory inv = logObject.inventories.ElementAt(i); BlissHiveLogInventory nextInv = logObject.inventories.ElementAt(i + 1); LinkedList <BlissHiveLogActivityItem> changedItems = BlissHiveLogInventory.GetItemDifference(inv, nextInv); changedItems = BlissHiveLogInventory.AddObject(logObject, changedItems); BlissHiveObjectActivityLogParseResultEntry change = new BlissHiveObjectActivityLogParseResultEntry(nextInv.originalLogEntry); change.changedItems = changedItems; result.AddLast(change); } } this.onParseProgressListeners = null; return(new LogParseResult(result)); }
/// <summary> /// Get the count for a certain item type in the current inventory. /// </summary> /// <param name="itemType"></param> /// <returns>The amount.</returns> public int GetObjectTypeCount(BlissHiveLogItemType itemType) { if (this.inventories.Count > 0) { BlissHiveLogInventory inv = this.inventories.Last.Value; int count = 0; foreach (BlissHiveLogItem item in inv.items) { if (item.itemType == itemType) { count++; } } return(count); } else { return(0); } }
public override LogParseResult Parse() { LinkedList <LogParseResultEntry> result = new LinkedList <LogParseResultEntry>(); int count = 0; BlissHiveLogContainer blissHiveLogContainer = (BlissHiveLogContainer)this.container; // proc_updateObjectInventory(56849, // '[[["glock17_EP1","ItemToolbox","ItemHatchet","LeeEnfield"],[1,1,1,1]],[["ItemPainkiller","ItemSodaCoke","ItemEpinephrine","20Rnd_762x51_DMR","15Rnd_9x19_M9SD","15Rnd_9x19_M9","FoodCanFrankBeans","17Rnd_9x19_glock17","SmokeShellGreen","ItemBandage","ItemMorphine","ItemJerrycanEmpty","ItemJerrycan","PartEngine"],[3,3,1,2,1,1,1,2,1,1,1,2,1,1]],[[],[]]] foreach (BlissHiveLogEntry entry in container.logs) { if (entry.functionName == "proc_updateObjectInventory") { BlissHiveLogObject logObject = GetObjectByUpdateID(entry.parameters[0]); String[] split = entry.parameters[1].Split(new String[1] { "],[" }, StringSplitOptions.None); BlissHiveLogInventory inventory = new BlissHiveLogInventory(entry); for (int i = 0; i < split.Length; i += 2) { String[] items = split[i].Replace("\"", "") .Replace("[", "") .Replace("]", "") .Split(','); String[] quantities = split[i + 1].Replace("\"", "") .Replace("[", "") .Replace("]", "") .Split(','); for (int j = 0; j < items.Length; j++) { if (items[j] == "") { continue; } BlissHiveLogItem logItem = new BlissHiveLogItem(items[j], BlissHiveLogItem.Location.Inventory); logItem.quantity = Int32.Parse(quantities[j]); // Weapons if (i == 0) { logItem.itemType = BlissHiveLogItemType.Weapon; } // Items else if (i == 2) { logItem.itemType = BlissHiveLogItemType.Item; } // Backpacks else if (i == 4) { logItem.itemType = BlissHiveLogItemType.Backpack; } inventory.items.AddLast(logItem); } } if (inventory.items.Count > 0) { logObject.inventories.AddLast(inventory); } } this.onParseProgressListeners(count, this.container.logs.Length); count++; } this.onParseProgressListeners = null; return(new LogParseResult(result)); }
public override LogParseResult Parse() { LinkedList <LogParseResultEntry> result = new LinkedList <LogParseResultEntry>(); int count = 0; /* * 0 = ID * 1 = Position [???,[x, y, z?]] * 2 = Inventory [[<tool>, <sidearm>, <mainWeapon>], [<sidearm>, <item>]] * 3 = Backpack [<backpackName>, [[<weapon>], [qty]], [[<item1>, <item2>], [<item1Qty>, [item2Qty]]] * 4 = Medical [false,false,false,true,false,false,true,11714.7,["aimpoint"],[0,0],0,[159.803,247.991]] ?? * [Probably broken bones, fever, etc here ,<blood>, rest unknown * 5 = lastAte, 0 || 1 * 6 = lastDrank, 0 || 1 * 7 = survivalTime * 8 = model Seems to be 'any' all the time, but perhaps 'hero' and 'bandit' are values as well * 9 = humanity * 10 = zombiekills * 11 = headshots * 12 = murders * 13 = banditkills * 14 = state ["M16A2","ainvpknlmstpslaywrfldnon_medic",100] * [<equiped weapon?>, <gibberish>, <???>] **/ BlissHiveLogContainer blissHiveLogContainer = (BlissHiveLogContainer)this.container; LinkedList <String> functionList = new LinkedList <String>(); foreach (BlissHiveLogEntry entry in container.logs) { if (!functionList.Contains(entry.functionName)) { functionList.AddLast(entry.functionName); } if (entry.functionName == "proc_updateSurvivor") { BlissHiveLogInventory inventory = new BlissHiveLogInventory(entry); String inventoryParam = entry.parameters[2]; // No point parsing empty inventories if (inventoryParam != "[]") { String[] invTypes = inventoryParam.Split(new String[1] { "],[" }, StringSplitOptions.None); String[] invWeapons = invTypes[0] .Replace("[[", "") .Replace("\"", "") .Split(','); String[] invItems = invTypes[1] .Replace("]]", "") .Replace("\"", "") .Replace("[", "") .Replace("]", "") .Split(','); foreach (String weapon in invWeapons) { inventory.items.AddLast(new BlissHiveLogItem(weapon, BlissHiveLogItem.Location.Inventory)); } foreach (String item in invItems) { int number = 0; // Sometimes, the item is a number (ammo for previous ammo clip). // We don't want those as an item. if (!Int32.TryParse(item, out number)) { inventory.items.AddLast(new BlissHiveLogItem(item, BlissHiveLogItem.Location.Inventory)); } } } String backpackParam = entry.parameters[3]; // No point parsing empty inventories Boolean addedWeapon = false, addedItem = false; if (backpackParam != "[]") { String[] backpackTypes = backpackParam .Split(new String[1] { "],[" }, StringSplitOptions.None); String[] temp = backpackTypes[0] .Split(new String[1] { ",[[" }, StringSplitOptions.None); String backpackName = temp[0] .Replace("[", "") .Replace("\"", ""); String[] backpackWeapons = new String[0]; String[] backpackQuantities = new String[0]; String[] backpackItems = new String[0]; String[] backpackItemQuantities = new String[0]; // If there's weapons in the backpack if (temp.Length > 1) { backpackWeapons = temp[1] .Replace("\"", "") .Split(','); backpackQuantities = backpackTypes[1] .Replace("]", "") .Split(','); } // If there's items in the backpack if (backpackTypes.Length > 2) { backpackItems = backpackTypes[2] .Replace("[", "") .Replace("\"", "") .Split(','); backpackItemQuantities = backpackTypes[3] .Replace("]]]", "") .Split(','); } inventory.items.AddLast( new BlissHiveLogItem(backpackName, BlissHiveLogItem.Location.Backpack)); int itemCount = 0; foreach (String backpackWeapon in backpackWeapons) { if (backpackWeapon == "") { continue; } inventory.items.AddLast( new BlissHiveLogItem( backpackWeapon, BlissHiveLogItem.Location.Backpack, Int32.Parse(backpackQuantities[itemCount]) ) ); addedWeapon = true; itemCount++; } itemCount = 0; foreach (String backpackItem in backpackItems) { if (backpackItem == "") { continue; } inventory.items.AddLast( new BlissHiveLogItem( backpackItem, BlissHiveLogItem.Location.Backpack, Int32.Parse(backpackItemQuantities[itemCount]) ) ); addedItem = true; itemCount++; } } // If both the inventory and the backpack has changed // if (inventoryParam != "[]" && backpackParam != "[]") { // } if (inventoryParam != "[]" || backpackParam != "[]" && (addedItem || addedWeapon)) { foreach (BlissHiveLogSurvivor survivor in blissHiveLogContainer.survivorContainer.survivors) { if (survivor.survivorUpdateID == entry.parameters[0]) { // Groups the items for easier readability inventory.GroupItems(); survivor.inventories.AddLast(inventory); } } result.AddLast(new BlissHiveSurvivorInventoryLogParseResultEntry(entry)); } } else if (entry.functionName == "proc_killSurvivor") { } this.onParseProgressListeners(count, this.container.logs.Length); count++; } foreach (String function in functionList) { Console.WriteLine(function); } this.onParseProgressListeners = null; return(new LogParseResult(result)); }