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);
     }
 }
示例#3
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));
        }