public function RecalulateUpgrades() { $Data = array('damage_per_click' => $this->GetTuningData('damage_per_click'), 'damage_multiplier_fire' => $this->GetTuningData('damage_multiplier_fire'), 'damage_multiplier_water' => $this->GetTuningData('damage_multiplier_water'), 'damage_multiplier_air' => $this->GetTuningData('damage_multiplier_air'), 'damage_multiplier_earth' => $this->GetTuningData('damage_multiplier_earth'), 'damage_multiplier_crit' => $this->GetTuningData('damage_multiplier_crit'), 'hp_multiplier' => 1, 'boss_loot_drop_percentage' => $this->GetTuningData('loot_chance'), 'damage_multiplier_dps' => 0, 'damage_per_click_multiplier' => 1); foreach ($this->GetUpgrades() as $Upgrade) { $Value = Upgrade::GetMultiplier($Upgrade->GetUpgradeId()) * $Upgrade->GetLevel(); if ($Value === 0) { continue; } switch (Upgrade::GetType($Upgrade->GetUpgradeId())) { case Enums\EUpgradeType::HitPoints: $Data['hp_multiplier'] += $Value; break; case Enums\EUpgradeType::DPS: $Data['damage_multiplier_dps'] += $Value; break; case Enums\EUpgradeType::ClickDamage: $Data['damage_per_click_multiplier'] += $Value; break; case Enums\EUpgradeType::DamageMultiplier_Fire: $Data['damage_multiplier_fire'] += $Value; break; case Enums\EUpgradeType::DamageMultiplier_Water: $Data['damage_multiplier_water'] += $Value; break; case Enums\EUpgradeType::DamageMultiplier_Air: $Data['damage_multiplier_air'] += $Value; break; case Enums\EUpgradeType::DamageMultiplier_Earth: $Data['damage_multiplier_earth'] += $Value; break; case Enums\EUpgradeType::DamageMultiplier_Crit: $Data['damage_multiplier_crit'] += $Value; break; case Enums\EUpgradeType::PurchaseAbility: # TODO: ? break; case Enums\EUpgradeType::BossLootDropPercentage: $Data['boss_loot_drop_percentage'] += $Value; break; } } $this->DamageMultiplierFire = $Data['damage_multiplier_fire']; $this->DamageMultiplierWater = $Data['damage_multiplier_water']; $this->DamageMultiplierAir = $Data['damage_multiplier_air']; $this->DamageMultiplierEarth = $Data['damage_multiplier_earth']; $this->DamageMultiplierCrit = $Data['damage_multiplier_crit']; $this->HpMultiplier = $Data['hp_multiplier']; $this->BossLootDropPercentage = $Data['boss_loot_drop_percentage']; $this->DamageMultiplierDps = $Data['damage_multiplier_dps']; $this->DamagePerClickMultiplier = $Data['damage_per_click_multiplier']; $this->DamagePerClick = $Data['damage_per_click'] * $this->GetDamagePerClickMultiplier(); $this->Dps = $this->GetBaseDps() * $this->GetDamageMultiplierDps(); $this->MaxHp = $this->GetTuningData('hp') * $this->GetHpMultiplier(); }
public function HandleUpgrade($Game, $Upgrades) { $HpUpgrade = false; foreach ($Upgrades as $UpgradeId) { $Upgrade = $this->GetTechTree()->GetUpgrade($UpgradeId); if ($Upgrade->GetCostForNextLevel() > $this->GetGold() || Upgrade::IsLevelOneUpgrade($UpgradeId) && $Upgrade->GetLevel() >= 1 || Upgrade::HasRequiredUpgrade($UpgradeId) && $this->GetTechTree()->GetUpgrade(Upgrade::GetRequiredUpgrade($UpgradeId))->GetLevel() < Upgrade::GetRequiredLevel($UpgradeId)) { continue; } $this->DecreaseGold($Upgrade->GetCostForNextLevel()); $Upgrade->IncreaseLevel(); if (Upgrade::IsElementalUpgrade($UpgradeId)) { $ElementalUpgrades = $this->GetTechTree()->GetElementalUpgrades(); $TotalLevel = 0; foreach ($ElementalUpgrades as $ElementalUpgrade) { $TotalLevel += $ElementalUpgrade->GetLevel(); } // Loop again to set the next level cost for each elemental foreach ($ElementalUpgrades as $ElementalUpgrade) { $ElementalUpgrade->SetPredictedCostForNextLevel($TotalLevel); } } else { if ($UpgradeId === Enums\EUpgrade::DPS_AutoFireCanon) { $this->getTechTree()->BaseDps = Upgrade::GetInitialValue($UpgradeId); $this->getTechTree()->Dps = $this->getTechTree()->BaseDps; } else { if (Upgrade::GetType($UpgradeId) === Enums\EUpgradeType::HitPoints) { $HpUpgrade = true; } else { if (Upgrade::GetType($UpgradeId) === Enums\EUpgradeType::PurchaseAbility) { $this->GetTechTree()->AddAbilityItem(Upgrade::GetAbility($UpgradeId)); } } } } } $this->GetTechTree()->RecalulateUpgrades(); if ($HpUpgrade && !$this->IsDead()) { $this->Hp = $this->getTechTree()->GetMaxHp(); } }