data = json_decode(file_get_contents($file), true) ; } //////////////////////////////////////////////////////////////////////////// public function calculate_defense_reduction ($units_count) { $result = 1; foreach ($this->data['SpecialAbility'] as $special_bility) { if ($special_bility['identifier'] != 'DefenseReduction') continue; foreach ($special_bility['unitAmountModifierValueMap'] as $threshold => $value) { if ($units_count >= $threshold) { if ($result === 0) { $result = $value['value']; } else { $result = min($result, $value['value']); } } } } return $result; } //////////////////////////////////////////////////////////////////////////// public function get_building ($building) { $result = null; foreach ($this->data['Building'] as $key => $value) { if (is_string($building)) { if (!empty($value['identifier']) and (str_replace('"', '', $value['identifier']) == $building)) { $value['identifier'] = str_replace('"', '', $value['identifier']); $result = $value; break; } } } return $result; } //////////////////////////////////////////////////////////////////////////// public function get_corps_locale_name ($corps, $locale) { $result = ''; switch ($corps) { case 'infantry': if ($locale == 'en') $result = 'Infantry'; if ($locale == 'ru') $result = 'Пехота'; break; case 'cavalry': if ($locale == 'en') $result = 'Cavalry'; if ($locale == 'ru') $result = 'Кавалерия'; break; case 'artillery': if ($locale == 'en') $result = 'Artillery'; if ($locale == 'ru') $result = 'Артиллерия'; break; } return $result; } //////////////////////////////////////////////////////////////////////////// public function get_modifier ($modifier) { $result = null; foreach ($this->data['Modifier'] as $key => $value) { if (is_numeric($modifier)) { if (!empty($value['primaryKey']) and ($value['primaryKey'] == $modifier)) { $result = $value; break; } } } return $result; } //////////////////////////////////////////////////////////////////////////// public function get_party_locale_name ($party, $locale) { $result = ''; switch ($party) { case 'attackers': if ($locale == 'en') $result = 'Attackers'; if ($locale == 'ru') $result = 'Атакующие'; break; case 'defenders': if ($locale == 'en') $result = 'Defenders'; if ($locale == 'ru') $result = 'Защитники'; break; } return $result; } //////////////////////////////////////////////////////////////////////////// public function get_special_abililty ($special_ability_identifier) { $result = null; foreach ($this->data['SpecialAbility'] as $key => $value) { if (!empty($value['identifier']) and ($value['identifier'] == $special_ability_identifier)) { $result = $value; break; } } return $result; } //////////////////////////////////////////////////////////////////////////// public function get_unit ($unit) { $result = null; foreach ($this->data['Unit'] as $value) { if (is_numeric($unit)) { if (!empty($value['primaryKey']) and ($value['primaryKey'] == $unit)) { $result = $value; break; } } if (is_string($unit)) { if (strlen($unit) < 4) $unit = $this->get_unit_full_name($unit, 'en'); $name = $this->get_unit_normalized_name($value['identifier']); if (!empty($name) and ($name == $unit)) { $result = $value; $result['identifier'] = $name; break; } } } return $result; } //////////////////////////////////////////////////////////////////////////// public function get_unit_total_cost ($name, $copper_ratio = 3) { $result = 0; $unit = $this->get_unit($name); foreach ($unit['buildResourceDictionary'] as $resource => $value) { $resource = $this->get_resource($resource); if ($resource['identifier'] === 'Copper') { $value = $value * $copper_ratio; } $result = $result + $value; } return $result; } //////////////////////////////////////////////////////////////////////////// public function get_unit_build_duration ($name) { $unit = $this->get_unit($name); return $unit['buildDuration']; } //////////////////////////////////////////////////////////////////////////// public function get_unit_battle_value ($unit, $corps, $action) { $result = null; if (strlen($unit) < 4) $unit = $this->get_unit_full_name($unit, 'en'); foreach ($this->data['Unit'] as $value) { $name = $this->get_unit_normalized_name($value['identifier']); if (!empty($name) and ($name == $unit)) { $result = $value['battleValueDictionary'][ucfirst($corps)][$action]; break; } } return $result; } //////////////////////////////////////////////////////////////////////////// public function get_unit_normalized_name ($name) { $name = str_replace('"', '', $name); $result = $name[0]; for ($i = 1; $i < strlen($name); $i++) { if (preg_match('#[A-Z]#', $name[$i]) and $name[$i - 1] <> ' ') { $result .= ' '; } $result .= $name[$i]; } if ($result == 'Swordman') $result = 'Swordsman'; if ($result == 'Lancer') $result = 'Lancer Horseman'; if ($result == 'Scorpion Rider') $result = 'Armoured Horseman'; return $result; } //////////////////////////////////////////////////////////////////////////// public function get_unit_corps ($unit) { $result = null; if (strlen($unit) < 4) $unit = $this->get_unit_full_name($unit, 'en'); foreach ($this->data['Unit'] as $value) { $name = $this->get_unit_normalized_name($value['identifier']); if (!empty($name) and ($name == $unit)) { $result = str_replace('"', '', $value['corps']); break; } } return strtolower($result); } //////////////////////////////////////////////////////////////////////////// public function get_unit_full_name ($name, $locale) { $result = ''; switch ($name) { case 'AxR': if ($locale == 'en') $result = 'Axe Rider'; if ($locale == 'ru') $result = 'Наездник с топором'; break; case 'LHm': if ($locale == 'en') $result = 'Lancer Horseman'; if ($locale == 'ru') $result = 'Всадник с копьем '; break; case 'AHm': if ($locale == 'en') $result = 'Armoured Horseman'; if ($locale == 'ru') $result = 'Всадник в тяжелых доспехах'; break; case 'Br': if ($locale == 'en') $result = 'Berserker'; if ($locale == 'ru') $result = 'Берсеркер'; break; case 'SwM': if ($locale == 'en') $result = 'Swordsman'; if ($locale == 'ru') $result = 'Мечник'; break; case 'SpM': if ($locale == 'en') $result = 'Spearman'; if ($locale == 'ru') $result = 'Копейщик'; break; case 'NAr': if ($locale == 'en') $result = 'Nordic Archer'; if ($locale == 'ru') $result = 'Нордический лучник'; break; case 'Ar': if ($locale == 'en') $result = 'Archer'; if ($locale == 'ru') $result = 'Лучник'; break; case 'CrM': if ($locale == 'en') $result = 'Crossbowman'; if ($locale == 'ru') $result = 'Арбалетчик'; break; case 'SiT': if ($locale == 'en') $result = 'Siege Tower'; if ($locale == 'ru') $result = 'Осадная башня'; break; case 'Ba': if ($locale == 'en') $result = 'Ballista'; if ($locale == 'ru') $result = 'Баллиста'; break; case 'Tr': if ($locale == 'en') $result = 'Trebuchet'; if ($locale == 'ru') $result = 'Требушет'; break; } return $result; } //////////////////////////////////////////////////////////////////////////// public function get_unit_power_ratio ($unit_1, $unit_1_bonus, $unit_1_action, $unit_2, $unit_2_bonus) { $result = null; if ($unit_1_action == 'defense') { $unit_2_action = 'offense'; } else { $unit_2_action = 'defense'; } $unit_1 = $this->get_unit($unit_1); $unit_2 = $this->get_unit($unit_2); $unit_1_power = $this->get_unit_battle_value($unit_1['identifier'], $unit_2['corps'], $unit_1_action); $unit_2_power = $this->get_unit_battle_value($unit_2['identifier'], $unit_2['corps'], $unit_2_action); $unit_1_power = $unit_1_power * $unit_1_bonus; $unit_2_power = $unit_2_power * $unit_2_bonus; return number_format($unit_1_power / $unit_2_power, 2, '.', ' '); } //////////////////////////////////////////////////////////////////////////// public function get_resource ($resource) { $result = null; foreach ($this->data['Resource'] as $value) { if (is_numeric($resource)) { if (!empty($value['primaryKey']) and ($value['primaryKey'] == $resource)) { $value['identifier'] = str_replace('"', '', $value['identifier']); $result = $value; break; } } if (is_string($resource)) { $name = str_replace('"', '', $value['identifier']); if (!empty($name) and ($name == $resource)) { $value['identifier'] = str_replace('"', '', $value['identifier']); $result = $value; break; } } } return $result; } }