Пример #1
0
 /**
  *
  * @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;
 }
Пример #2
0
 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;
     }
 }