Esempio n. 1
0
        private static void PersistentUpdateStats()
        {
            // Total stats
            string filename = Path.Combine(FileManager.LoggingPath, String.Format("FullStats - {0}.xml", PlayerStatus.ActorClass));

            PersistentTotalStats = PersistentUpdateOne(filename);

            // World ID stats
            filename = Path.Combine(FileManager.LoggingPath, String.Format("WorldStats {1} - {0}.xml", PlayerStatus.ActorClass, cachedStaticWorldId));
            if (!worldStatsDictionary.ContainsKey(cachedStaticWorldId))
            {
                worldStatsDictionary.Add(cachedStaticWorldId, new PersistentStats());
            }
            worldStatsDictionary[cachedStaticWorldId] = PersistentUpdateOne(filename);

            // Sets LastSaved to now for the rest of the things
            TimeSpan TotalRunningTime = DateTime.Now.Subtract(ItemStatsWhenStartedBot);

            PersistentLastSaved.TotalRunningTime     = TotalRunningTime;
            PersistentLastSaved.TotalDeaths          = iTotalDeaths;
            PersistentLastSaved.TotalLeaveGames      = TotalLeaveGames;
            PersistentLastSaved.TotalJoinGames       = iTotalJoinGames;
            PersistentLastSaved.TotalProfileRecycles = TotalProfileRecycles;
            PersistentLastSaved.TotalXp  = iTotalXp;
            PersistentLastSaved.LastXp   = iLastXp;
            PersistentLastSaved.NextLvXp = iNextLvXp;

            PersistentStats.UpdateItemsDroppedStats(PersistentLastSaved.ItemsDropped, ItemsDroppedStats);
            PersistentStats.UpdateItemsPickedStats(PersistentLastSaved.ItemsPicked, ItemsPickedStats);
        }
Esempio n. 2
0
        private static PersistentStats PersistentUpdateOne(String aFilename)
        {
            PersistentStats updated = new PersistentStats();
            // Load from file
            var xml = new XmlSerializer(updated.GetType());

            if (File.Exists(aFilename))
            {
                using (var reader = new StreamReader(aFilename))
                {
                    updated = xml.Deserialize(reader) as PersistentStats;
                    if (updated.IsReset)
                    {
                        updated.Reset();
                    }
                }
            }
            else
            {
                updated.Reset();
            }

            // If we are in new session (started times don't match) we clear PersistentLastSaved,
            // because we want to add all we now have.
            // However, after reset, we don't want to do that, because we are (hopefully) curious
            // only about new stuff
            if (updated.WhenStartedSession != ItemStatsWhenStartedBot && !updated.IsReset)
            {
                PersistentLastSaved.Reset();
            }

            // Add the differences
            TimeSpan TotalRunningTime = DateTime.Now.Subtract(ItemStatsWhenStartedBot);

            updated.IsReset               = false;
            updated.WhenStartedSession    = ItemStatsWhenStartedBot;
            updated.TotalRunningTime     += TotalRunningTime - PersistentLastSaved.TotalRunningTime;
            updated.TotalDeaths          += iTotalDeaths - PersistentLastSaved.TotalDeaths;
            updated.TotalLeaveGames      += TotalLeaveGames - PersistentLastSaved.TotalLeaveGames;
            updated.TotalJoinGames       += iTotalJoinGames - PersistentLastSaved.TotalJoinGames;
            updated.TotalProfileRecycles += TotalProfileRecycles - PersistentLastSaved.TotalProfileRecycles;
            updated.TotalXp              += iTotalXp - PersistentLastSaved.TotalXp;
            updated.LastXp   += iLastXp - PersistentLastSaved.LastXp;
            updated.NextLvXp += iNextLvXp - PersistentLastSaved.NextLvXp;
            // Adds difference between now and LastSaved, and set LastSaved to now
            updated.AddItemsDroppedStats(PersistentLastSaved.ItemsDropped, ItemsDroppedStats);
            updated.AddItemsPickedStats(PersistentLastSaved.ItemsPicked, ItemsPickedStats);

            // Write the PersistentTotalStats
            using (var writer = new StreamWriter(aFilename))
            {
                xml.Serialize(writer, updated);
                writer.Flush();
            }

            return(updated);
        }
Esempio n. 3
0
    void Awake()
    {
        if (instance != null && instance != this)
        {
            Destroy(this.gameObject);
            return;
        }
        else
        {
            instance = this;
        }

        DontDestroyOnLoad(this.gameObject);
        transform.parent = null;
    }
Esempio n. 4
0
    void Start()
    {
        Application.targetFrameRate = 60;

        // Initiate fields
        playerColor = "red";

        // Get references to components
        sr   = GetComponent <SpriteRenderer>();
        anim = GetComponent <Animator>();
        bomb = 10;

        move = GetComponent <movement>();

        perStats = GameObject.Find("PersistentStats").GetComponent <PersistentStats>();

        pointsBlue = perStats.initBluePoints;
        pointsRed  = perStats.initRedPoints;
    }
Esempio n. 5
0
        internal static void LogStats(FileStream LogStream, PersistentStats aPersistentStats)
        {
            var ts = aPersistentStats;

            // Create whole new file
            using (StreamWriter LogWriter = new StreamWriter(LogStream))
            {
                LogWriter.WriteLine("===== Misc Statistics =====");
                LogWriter.WriteLine("Total tracking time: " + ((int)ts.TotalRunningTime.TotalHours).ToString() + "h " + ts.TotalRunningTime.Minutes.ToString("0.00") +
                                    "m " + ts.TotalRunningTime.Seconds.ToString() + "s");
                LogWriter.WriteLine("Total deaths: " + ts.TotalDeaths.ToString() + " [" + Math.Round(ts.TotalDeaths / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour]");
                LogWriter.WriteLine("Total games (approx): " + ts.TotalLeaveGames.ToString() + " [" + Math.Round(ts.TotalLeaveGames / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour]");
                if (ts.TotalLeaveGames == 0 && ts.TotalJoinGames > 0)
                {
                    if (ts.TotalJoinGames == 1 && ts.TotalProfileRecycles > 1)
                    {
                        LogWriter.WriteLine("(a profile manager/death handler is interfering with join/leave game events, attempting to guess total runs based on profile-loops)");
                        LogWriter.WriteLine("Total full profile cycles: " + ts.TotalProfileRecycles.ToString() + " [" + Math.Round(ts.TotalProfileRecycles / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour]");
                    }
                    else
                    {
                        LogWriter.WriteLine("(your games left value may be bugged @ 0 due to profile managers/routines etc., now showing games joined instead:)");
                        LogWriter.WriteLine("Total games joined: " + ts.TotalJoinGames.ToString() + " [" + Math.Round(ts.TotalJoinGames / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour]");
                    }
                }
                LogWriter.WriteLine("Total XP gained: " + Math.Round(ts.TotalXp / (float)1000000, 2).ToString("0.00") + " million [" + Math.Round(ts.TotalXp / ts.TotalRunningTime.TotalHours / 1000000, 2).ToString("0.00") + " million per hour]");
                LogWriter.WriteLine("");
                LogWriter.WriteLine("===== Item DROP Statistics =====");

                // Item stats
                if (ts.ItemsDropped.Total > 0)
                {
                    LogWriter.WriteLine("Items:");
                    LogWriter.WriteLine("Total items dropped: " + ts.ItemsDropped.Total.ToString() + " [" +
                                        Math.Round(ts.ItemsDropped.Total / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour]");
                    LogWriter.WriteLine("Items dropped by ilvl: ");
                    for (int itemLevel = 1; itemLevel <= 63; itemLevel++)
                    {
                        if (ts.ItemsDropped.TotalPerLevel[itemLevel] > 0)
                        {
                            LogWriter.WriteLine("- ilvl" + itemLevel.ToString() + ": " + ts.ItemsDropped.TotalPerLevel[itemLevel].ToString() + " [" +
                                                Math.Round(ts.ItemsDropped.TotalPerLevel[itemLevel] / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour] {" +
                                                Math.Round((ts.ItemsDropped.TotalPerLevel[itemLevel] / ts.ItemsDropped.Total) * 100, 2).ToString("0.00") + " %}");
                        }
                    }
                    LogWriter.WriteLine("");
                    LogWriter.WriteLine("Items dropped by quality: ");
                    for (int iThisQuality = 0; iThisQuality <= 3; iThisQuality++)
                    {
                        if (ts.ItemsDropped.TotalPerQuality[iThisQuality] > 0)
                        {
                            LogWriter.WriteLine("- " + sQualityString[iThisQuality] + ": " + ts.ItemsDropped.TotalPerQuality[iThisQuality].ToString() + " [" + Math.Round(ts.ItemsDropped.TotalPerQuality[iThisQuality] / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour] {" + Math.Round((ts.ItemsDropped.TotalPerQuality[iThisQuality] / ts.ItemsDropped.Total) * 100, 2).ToString("0.00") + " %}");
                            for (int itemLevel = 1; itemLevel <= 63; itemLevel++)
                            {
                                if (ts.ItemsDropped.TotalPerQPerL[iThisQuality, itemLevel] > 0)
                                {
                                    LogWriter.WriteLine("--- ilvl " + itemLevel.ToString() + " " + sQualityString[iThisQuality] + ": " + ts.ItemsDropped.TotalPerQPerL[iThisQuality, itemLevel].ToString() + " [" + Math.Round(ts.ItemsDropped.TotalPerQPerL[iThisQuality, itemLevel] / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour] {" + Math.Round((ts.ItemsDropped.TotalPerQPerL[iThisQuality, itemLevel] / ts.ItemsDropped.Total) * 100, 2).ToString("0.00") + " %}");
                                }
                            }
                        }

                        // Any at all this quality?
                    }

                    // For loop on quality
                    LogWriter.WriteLine("");
                }

                // End of item stats

                // Potion stats
                if (ts.ItemsDropped.TotalPotions > 0)
                {
                    LogWriter.WriteLine("Potion Drops:");
                    LogWriter.WriteLine("Total potions: " + ts.ItemsDropped.TotalPotions.ToString() + " [" + Math.Round(ts.ItemsDropped.TotalPotions / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour]");
                    for (int itemLevel = 1; itemLevel <= 63; itemLevel++)
                    {
                        if (ts.ItemsDropped.PotionsPerLevel[itemLevel] > 0)
                        {
                            LogWriter.WriteLine("- ilvl " + itemLevel.ToString() + ": " + ts.ItemsDropped.PotionsPerLevel[itemLevel].ToString() + " [" + Math.Round(ts.ItemsDropped.PotionsPerLevel[itemLevel] / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour] {" + Math.Round((ts.ItemsDropped.PotionsPerLevel[itemLevel] / ts.ItemsDropped.TotalPotions) * 100, 2).ToString("0.00") + " %}");
                        }
                    }
                    LogWriter.WriteLine("");
                }

                // End of potion stats

                // Gem stats
                if (ts.ItemsDropped.TotalGems > 0)
                {
                    LogWriter.WriteLine("Gem Drops:");
                    LogWriter.WriteLine("Total gems: " + ts.ItemsDropped.TotalGems.ToString() + " [" + Math.Round(ts.ItemsDropped.TotalGems / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour]");
                    for (int iThisGemType = 0; iThisGemType <= 3; iThisGemType++)
                    {
                        if (ts.ItemsDropped.GemsPerType[iThisGemType] > 0)
                        {
                            LogWriter.WriteLine("- " + sGemString[iThisGemType] + ": " + ts.ItemsDropped.GemsPerType[iThisGemType].ToString() + " [" + Math.Round(ts.ItemsDropped.GemsPerType[iThisGemType] / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour] {" + Math.Round((ts.ItemsDropped.GemsPerType[iThisGemType] / ts.ItemsDropped.TotalGems) * 100, 2).ToString("0.00") + " %}");
                            for (int itemLevel = 1; itemLevel <= 63; itemLevel++)
                            {
                                if (ts.ItemsDropped.GemsPerTPerL[iThisGemType, itemLevel] > 0)
                                {
                                    LogWriter.WriteLine("--- ilvl " + itemLevel.ToString() + " " + sGemString[iThisGemType] + ": " + ts.ItemsDropped.GemsPerTPerL[iThisGemType, itemLevel].ToString() + " [" + Math.Round(ts.ItemsDropped.GemsPerTPerL[iThisGemType, itemLevel] / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour] {" + Math.Round((ts.ItemsDropped.GemsPerTPerL[iThisGemType, itemLevel] / ts.ItemsDropped.TotalGems) * 100, 2).ToString("0.00") + " %}");
                                }
                            }
                        }

                        // Any at all this quality?
                    }

                    // For loop on quality
                }

                // End of gem stats

                // Key stats
                if (ts.ItemsDropped.TotalInfernalKeys > 0)
                {
                    LogWriter.WriteLine("Infernal Key Drops:");
                    LogWriter.WriteLine("Total Keys: " + ts.ItemsDropped.TotalInfernalKeys.ToString() + " [" + Math.Round(ts.ItemsDropped.TotalInfernalKeys / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour]");
                }

                // End of key stats
                LogWriter.WriteLine("");
                LogWriter.WriteLine("");
                LogWriter.WriteLine("===== Item PICKUP Statistics =====");

                // Item stats
                if (ts.ItemsPicked.Total > 0)
                {
                    LogWriter.WriteLine("Items:");
                    LogWriter.WriteLine("Total items picked up: " + ts.ItemsPicked.Total.ToString() + " [" + Math.Round(ts.ItemsPicked.Total / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour]");
                    LogWriter.WriteLine("Item picked up by ilvl: ");
                    for (int itemLevel = 1; itemLevel <= 63; itemLevel++)
                    {
                        if (ts.ItemsPicked.TotalPerLevel[itemLevel] > 0)
                        {
                            LogWriter.WriteLine("- ilvl" + itemLevel.ToString() + ": " + ts.ItemsPicked.TotalPerLevel[itemLevel].ToString() + " [" + Math.Round(ts.ItemsPicked.TotalPerLevel[itemLevel] / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour] {" + Math.Round((ts.ItemsPicked.TotalPerLevel[itemLevel] / ts.ItemsPicked.Total) * 100, 2).ToString("0.00") + " %}");
                        }
                    }
                    LogWriter.WriteLine("");
                    LogWriter.WriteLine("Items picked up by quality: ");
                    for (int iThisQuality = 0; iThisQuality <= 3; iThisQuality++)
                    {
                        if (ts.ItemsPicked.TotalPerQuality[iThisQuality] > 0)
                        {
                            LogWriter.WriteLine("- " + sQualityString[iThisQuality] + ": " + ts.ItemsPicked.TotalPerQuality[iThisQuality].ToString() + " [" + Math.Round(ts.ItemsPicked.TotalPerQuality[iThisQuality] / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour] {" + Math.Round((ts.ItemsPicked.TotalPerQuality[iThisQuality] / ts.ItemsPicked.Total) * 100, 2).ToString("0.00") + " %}");
                            for (int itemLevel = 1; itemLevel <= 63; itemLevel++)
                            {
                                if (ts.ItemsPicked.TotalPerQPerL[iThisQuality, itemLevel] > 0)
                                {
                                    LogWriter.WriteLine("--- ilvl " + itemLevel.ToString() + " " + sQualityString[iThisQuality] + ": " + ts.ItemsPicked.TotalPerQPerL[iThisQuality, itemLevel].ToString() + " [" + Math.Round(ts.ItemsPicked.TotalPerQPerL[iThisQuality, itemLevel] / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour] {" + Math.Round((ts.ItemsPicked.TotalPerQPerL[iThisQuality, itemLevel] / ts.ItemsPicked.Total) * 100, 2).ToString("0.00") + " %}");
                                }
                            }
                        }

                        // Any at all this quality?
                    }

                    // For loop on quality
                    LogWriter.WriteLine("");
                    if (totalFollowerItemsIgnored > 0)
                    {
                        LogWriter.WriteLine("  (note: " + totalFollowerItemsIgnored.ToString() + " follower items ignored for being ilvl <60 or blue)");
                    }
                }

                // End of item stats

                // Potion stats
                if (ts.ItemsPicked.TotalPotions > 0)
                {
                    LogWriter.WriteLine("Potion Pickups:");
                    LogWriter.WriteLine("Total potions: " + ts.ItemsPicked.TotalPotions.ToString() + " [" + Math.Round(ts.ItemsPicked.TotalPotions / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour]");
                    for (int itemLevel = 1; itemLevel <= 63; itemLevel++)
                    {
                        if (ts.ItemsPicked.PotionsPerLevel[itemLevel] > 0)
                        {
                            LogWriter.WriteLine("- ilvl " + itemLevel.ToString() + ": " + ts.ItemsPicked.PotionsPerLevel[itemLevel].ToString() + " [" + Math.Round(ts.ItemsPicked.PotionsPerLevel[itemLevel] / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour] {" + Math.Round((ts.ItemsPicked.PotionsPerLevel[itemLevel] / ts.ItemsPicked.TotalPotions) * 100, 2).ToString("0.00") + " %}");
                        }
                    }
                    LogWriter.WriteLine("");
                }

                // End of potion stats

                // Gem stats
                if (ts.ItemsPicked.TotalGems > 0)
                {
                    LogWriter.WriteLine("Gem Pickups:");
                    LogWriter.WriteLine("Total gems: " + ts.ItemsPicked.TotalGems.ToString() + " [" + Math.Round(ts.ItemsPicked.TotalGems / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour]");
                    for (int iThisGemType = 0; iThisGemType <= 3; iThisGemType++)
                    {
                        if (ts.ItemsPicked.GemsPerType[iThisGemType] > 0)
                        {
                            LogWriter.WriteLine("- " + sGemString[iThisGemType] + ": " + ts.ItemsPicked.GemsPerType[iThisGemType].ToString() + " [" + Math.Round(ts.ItemsPicked.GemsPerType[iThisGemType] / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour] {" + Math.Round((ts.ItemsPicked.GemsPerType[iThisGemType] / ts.ItemsPicked.TotalGems) * 100, 2).ToString("0.00") + " %}");
                            for (int itemLevel = 1; itemLevel <= 63; itemLevel++)
                            {
                                if (ts.ItemsPicked.GemsPerTPerL[iThisGemType, itemLevel] > 0)
                                {
                                    LogWriter.WriteLine("--- ilvl " + itemLevel.ToString() + " " + sGemString[iThisGemType] + ": " + ts.ItemsPicked.GemsPerTPerL[iThisGemType, itemLevel].ToString() + " [" + Math.Round(ts.ItemsPicked.GemsPerTPerL[iThisGemType, itemLevel] / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour] {" + Math.Round((ts.ItemsPicked.GemsPerTPerL[iThisGemType, itemLevel] / ts.ItemsPicked.TotalGems) * 100, 2).ToString("0.00") + " %}");
                                }
                            }
                        }

                        // Any at all this quality?
                    }

                    // For loop on quality
                }

                // End of gem stats

                // Key stats
                if (ts.ItemsPicked.TotalInfernalKeys > 0)
                {
                    LogWriter.WriteLine("Infernal Key Pickups:");
                    LogWriter.WriteLine("Total Keys: " + ts.ItemsPicked.TotalInfernalKeys.ToString() + " [" + Math.Round(ts.ItemsPicked.TotalInfernalKeys / ts.TotalRunningTime.TotalHours, 2).ToString("0.00") + " per hour]");
                }

                // End of key stats
                LogWriter.WriteLine("===== End Of Report =====");
                LogWriter.Flush();
                LogStream.Flush();
            }
        }
Esempio n. 6
0
 private void Start()
 {
     player   = GameObject.Find("Player");
     perStats = GameObject.Find("PersistentStats").GetComponent <PersistentStats>();
 }