/** * * @return bool Returns true if ability has been successfully used, false otherwise. */ public static function HandleAbility($Game, $Lane, $Player, $Ability, $Deactivate = false) { $AbilityMultiplier = self::GetMultiplier($Ability->GetAbility()); switch ($Ability->GetAbility()) { case Enums\EAbility::Offensive_HighDamageOneTarget: if (!$Deactivate) { $Enemy = $Lane->GetEnemy($Player->GetTarget()); if ($Enemy === null || $Enemy->IsDead()) { return false; } $Damage = $Enemy->GetMaxHp(); if ($Enemy->GetType() === Enums\EEnemyType::Boss) { $Damage *= self::GetMultiplierBoss(Enums\EAbility::Offensive_HighDamageOneTarget); } else { $Damage *= $AbilityMultiplier; } $Player->Stats->AbilityDamageDealt += $Damage; $Enemy->AbilityDamageTaken += $Damage; } break; case Enums\EAbility::Offensive_DamageAllTargets: if (!$Deactivate) { $Enemies = $Lane->GetAliveEnemies(); if (empty($Enemies)) { return false; } foreach ($Enemies as $Enemy) { $Damage = $Enemy->GetMaxHp() * $AbilityMultiplier; $Player->Stats->AbilityDamageDealt += $Damage; $Enemy->AbilityDamageTaken += $Damage; } } break; case Enums\EAbility::Item_Resurrection: if (!$Deactivate) { $NotUsed = true; $PlayersInLane = $Game->GetPlayersInLane($Lane->GetLaneId()); foreach ($PlayersInLane as $PlayerInLane) { if ($PlayerInLane->IsDead()) { $NotUsed = false; $PlayerInLane->Respawn(); } } if ($NotUsed) { return false; } } break; case Enums\EAbility::Item_KillTower: if (!$Deactivate) { $Enemy = $Lane->GetEnemy($Player->GetTarget()); if ($Enemy === null || $Enemy->IsDead()) { return false; } if ($Enemy->GetType() !== Enums\EEnemyType::Tower) { return false; } $Enemy->SetHp(1); } break; case Enums\EAbility::Item_KillMob: if (!$Deactivate) { $Enemy = $Lane->GetEnemy($Player->GetTarget()); if ($Enemy === null || $Enemy->IsDead()) { return false; } if ($Enemy->GetType() === Enums\EEnemyType::Boss) { $MaxPercentage = $AbilityMultiplier; $Percentage = $MaxPercentage + lcg_value() * abs($MaxPercentage - 0.01); # 1% - 5% $Damage = $Enemy->GetMaxHp() * $Percentage; $Player->Stats->AbilityDamageDealt += $Damage; $Enemy->AbilityDamageTaken += $Damage; } else { $Enemy->SetHp(1); } } break; case Enums\EAbility::Item_IncreaseCritPercentagePermanently: if (!$Deactivate) { $Player->GetTechTree()->IncreaseCritPercentage($AbilityMultiplier); $Lane->AddActivePlayerAbility(new ActiveAbility($Game->Time, Enums\EAbility::Support_IncreaseCritPercentage, $Player->PlayerName, $Lane->HasActivePlayerAbilityDecreaseCooldowns())); } break; case Enums\EAbility::Item_IncreaseHPPermanently: if (!$Deactivate) { $Player->GetTechTree()->IncreaseHpMultiplier($AbilityMultiplier); $Player->GetTechTree()->RecalulateUpgrades(); $Lane->AddActivePlayerAbility(new ActiveAbility($Game->Time, Enums\EAbility::Support_Heal, $Player->PlayerName, $Lane->HasActivePlayerAbilityDecreaseCooldowns())); } break; case Enums\EAbility::Item_GoldForDamage: if (!$Deactivate) { $Enemy = $Lane->GetEnemy($Player->GetTarget()); if ($Player->GetGold() === 0 || $Enemy === null || $Enemy->IsDead()) { return false; } $MaxPercentage = $AbilityMultiplier; $Percentage = $MaxPercentage + lcg_value() * abs($MaxPercentage - 0.01); # 1% - 10% $Player->DecreaseGold($Player->GetGold() * $MaxPercentage); # 10% $Damage = $Enemy->GetMaxHp() * $Percentage; $Player->Stats->AbilityDamageDealt += $Damage; $Enemy->AbilityDamageTaken += $Damage; } break; case Enums\EAbility::Item_GiveGold: if (!$Deactivate) { $Player->IncreaseGold($AbilityMultiplier * pow(10, max(0, floor(log10($Game->GetLevel())) - 1))); $Lane->AddActivePlayerAbility(new ActiveAbility($Game->Time, Enums\EAbility::Support_IncreaseGoldDropped, $Player->PlayerName, $Lane->HasActivePlayerAbilityDecreaseCooldowns())); } break; case Enums\EAbility::Item_GiveRandomItem: if (!$Deactivate) { $PlayersInLane = $Game->GetPlayersInLane($Lane->GetLaneId()); foreach ($PlayersInLane as $PlayerInLane) { if (!$PlayerInLane->IsDead()) { $PlayerInLane->AddLoot($Game->Time, AbilityItem::GetRandomAbilityItem()); } } } break; case Enums\EAbility::Item_SkipLevels: if (!$Deactivate) { $Game->WormholeCount++; } break; } return true; }
public function IncreaseEnemiesKilled($Enemy) { switch ($Enemy->GetType()) { case Enums\EEnemyType::Tower: $this->NumTowersKilled++; break; case Enums\EEnemyType::Mob: $this->NumMobsKilled++; break; case Enums\EEnemyType::Boss: foreach ($this->Players as $Player) { if ($Player->IsLootDropped()) { $Player->AddLoot($this->Time, AbilityItem::GetRandomAbilityItem()); } } $this->NumBossesKilled++; break; case Enums\EEnemyType::MiniBoss: $this->NumMiniBossesKilled++; break; case Enums\EEnemyType::TreasureMob: $this->NumTreasuresKilled++; break; } }