/// <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 { } }