示例#1
0
        /// <summary>
        /// Updates spawn information
        /// </summary>
        public void updateSpawn()
        {
            ulong  pDamagePerMinute = 0;
            double ptotalTime       = 0;
            double averageTime      = 0;
            ulong  totalHP          = 0;
            ulong  pDamagePerSecond;
            int    sigFig       = _form1.getSigFigures();
            uint   mobFilter    = _form1.getMobFilter();
            string filterString = mobFilter.ToString();
            int    spawnCounter = 0;
            string cardDrop     = _form1.getCardDropTime();

            if (mobFilter == 0)
            {
                if (spawnList.Count != 0)
                {
                    foreach (Spawn s in spawnList)
                    {
                        ptotalTime = ptotalTime + s.getTime();
                        totalHP    = totalHP + s.getHp();
                    }
                    averageTime  = ptotalTime / spawnList.Count;
                    filterString = "None";
                }
                else
                {
                    _plexiglass.updateLabels(filterString, "0", "0", "0", "0", "0", "0, 0");
                    return;
                }
            }
            else
            {
                if (spawnList.Count != 0)
                {
                    foreach (Spawn s in spawnList)
                    {
                        if (mobFilter == s.getMobLevel())
                        {
                            ptotalTime = ptotalTime + s.getTime();
                            totalHP    = totalHP + s.getHp();
                            spawnCounter++;
                        }
                    }
                    averageTime = ptotalTime / spawnCounter;
                    pmobLevel   = mobFilter;
                    if (mobFilter > 250)
                    {
                        infernoLevel = Math.Floor((((double)mobFilter - 100) / 150));
                    }
                    if (spawnCounter == 0)
                    {
                        _plexiglass.updateLabels(filterString, "0", "0", "0", "0", "0", "0, 0");
                        return;
                    }
                }
                else
                {
                    _plexiglass.updateLabels(filterString, "0", "0", "0", "0", "0", "0, 0");
                    return;
                }
            }

            try
            {
                if (mobFilter == 0)
                {
                    pDamagePerSecond = ((ulong)totalHP / (ulong)spawnList.Count) / ((ulong)averageTime);
                }
                else
                {
                    pDamagePerSecond = ((ulong)totalHP / (ulong)spawnCounter) / ((ulong)averageTime);
                }

                if (_form1.getUnitXPGold() == "Minute")
                {
                    pDamagePerMinute = pDamagePerSecond * 60;
                }
                else if (_form1.getUnitXPGold() == "Hour")
                {
                    pDamagePerMinute = pDamagePerSecond * 3600;
                }

                //Convert to Million
                double pDamage = pDamagePerMinute;
                pDamage = pDamage / 1000000;

                //Kills per minute
                double kPerMin = (60 / averageTime);
                //Cards
                double estCards = 0;
                if (cardDrop == "Minute")
                {
                    estCards = ((1 + (infernoLevel / 2)) * kPerMin);
                }
                else if (cardDrop == "Hour")
                {
                    estCards = ((1 + (infernoLevel / 2)) * kPerMin) * 60;
                }
                else if (cardDrop == "Day")
                {
                    estCards = (((1 + (infernoLevel / 2)) * kPerMin) * 60) * 24;
                }
                estCards = estCards * 0.002;
                if (_form1.getDoubleCards() == true)
                {
                    estCards = estCards * 2;
                }

                //Round down to whatever significant figures
                //Math.Round(pDamage, sigFig);
                averageTime = Math.Round(averageTime, sigFig);
                estCards    = Math.Round(estCards, sigFig);
                pDamage     = Math.Round(pDamage, sigFig);
                ptotalTime  = Math.Round(ptotalTime, sigFig);

                string pDamageString = pDamage.ToString() + "M";
                string totalStats    = "";
                if (mobFilter == 0)
                {
                    totalStats = spawnList.Count.ToString() + ", " + ptotalTime.ToString() + "s";
                }
                else
                {
                    totalStats = spawnCounter + ", " + ptotalTime.ToString() + "s";
                }

                //Gold and XP calculations
                //BaseXP = MobLevel*(1+(MobLevel*0.003)) XP/Kill = Round((1+%XPBonus)*BaseXP*PartyModifier*(1+(infTier*0.003))*(1+Floor(infTier*0.001,1)*0.03))*(1+%XPOrb))
                int playerLevel = _form1.getPlayerLevel();
                //Otherwise will multiply negatively
                if (playerLevel < 200)
                {
                    playerLevel = 200;
                }
                int    xpOrb       = _form1.getXpOrb();
                int    goldOrb     = _form1.getGoldOrb();
                double partyBoost  = _form1.getPartyBoost();
                int    players     = _form1.getPlayers();
                double playerBonus = 1;
                int    globalXp    = _form1.getGlobalXp();
                int    globalGold  = _form1.getGlobalGold();
                if (players == 2)
                {
                    playerBonus = 0.7;
                }
                else if (players == 3)
                {
                    playerBonus = 0.5;
                }
                else if (players == 4)
                {
                    playerBonus = 0.4;
                }
                double partyModifier = (playerBonus) * (1 + partyBoost);
                double xpOrbBonus    = Math.Pow(xpOrb, 2) * 2;
                double goldOrbBonus  = Math.Pow(goldOrb, 2) * 2;
                xpOrbBonus   = xpOrbBonus / 100;
                goldOrbBonus = goldOrbBonus / 100;
                double xpBonus   = ((double)_form1.getXpAdd() * (1 + ((double)globalXp / 100))) / 100;
                double goldBonus = ((((double)_form1.getGoldAdd()) + (0.03 * (playerLevel - 200) + 0.25)) * (1 + ((double)globalGold / 100))) / 100;

                double baseXp    = pmobLevel * (1 + (pmobLevel * 0.003));
                double xpPerKill = Math.Round((1 + xpBonus) * baseXp * partyModifier * (1 + (infernoLevel * 0.003)) * (1 + Math.Floor(infernoLevel * 0.01) * 0.03)) * (1 + xpOrbBonus);

                double baseCoin  = Math.Pow(pmobLevel, (1.3 + 0.18));
                double coinValue = Math.Round((baseCoin * (1 + goldBonus) * partyModifier) * (1 + goldOrbBonus));
                if (players == 1)
                {
                    coinValue = coinValue * 1.5;
                }

                string unitXpGold = _form1.getUnitXPGold();
                double gold       = 0;
                double xp         = 0;

                if (unitXpGold == "Minute")
                {
                    //4.13 is average number of coins for max. - (1 - triplesize%) * (1 + coincount/2) + triplesize% * 3 *  (1 + coincount/2)
                    gold = kPerMin * (coinValue * 4.13);
                    xp   = (xpPerKill * kPerMin);
                }
                else if (unitXpGold == "Hour")
                {
                    gold = (kPerMin * (coinValue * 4.13)) * 60;
                    xp   = (xpPerKill * kPerMin) * 60;
                }

                gold = gold / 1000000;
                xp   = xp / 1000000;
                gold = Math.Round(gold, sigFig);
                xp   = Math.Round(xp, sigFig);

                string goldString = gold.ToString() + "M";
                string xpString   = xp.ToString() + "M";

                _plexiglass.updateLabels(filterString, xpString, goldString, pDamageString, averageTime.ToString() + "s", estCards.ToString(), totalStats);
            }
            catch
            {
            }
        }