| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- <?php
- /**
- * File for the team creation action.
- *
- * Implements an action function to be called from the {@see Controller}.
- *
- * @author Iñigo Valentin <i@inigovalentin.com>
- * @license https://www.gnu.org/licenses/gpl-3.0.en.html GNU General Public License V3
- * @package SWDB
- */
- /**
- * Executes the optimization action.
- *
- * Reads the POST parameters looking for the following KEYS:
- * player: The player ID.
- * unit: The unit ID.
- * tuning: {@todo Documentproperly}.
- * options: JSON with rune sets.
- *
- * @return int|string a JSON with the runes on success, negative integers on error. 0 if no errors
- * ocurred, but no results were found.
- * @category Action
- */
- function action(){
- // Increase max execution time.
- set_time_limit(60);
- $runes = [];
- $response = null;
- $player = filter_input(INPUT_POST, 'player');
- if ($player == null){
- return -1;
- }
- $unit_id = filter_input(INPUT_POST, 'unit');
- if ($unit_id == null){
- return -2;
- }
- $unit = new Unit($unit_id, true, $player);
- $base_stats = $unit->get_base_stats();
- $building_stats = $unit->get_base_stats();
- $artifact_stats = $unit->get_base_stats();
- $tuning = filter_input(INPUT_POST, 'tuning');
- if ($tuning == null){
- return -1;
- }
- $options = json_decode(filter_input(INPUT_POST, 'options'), true);
- if ($options == null){
- return -2;
- }
- foreach ($options as $option){
- $set = [
- "runes" => [],
- "stats" => [
- "atk" => $base_stats["atk"] + $building_stats["atk"] + $artifact_stats["atk"],
- "def" => $base_stats["def"] + $building_stats["def"] + $artifact_stats["def"],
- "hp" => $base_stats["hp"] + $building_stats["hp"] + $artifact_stats["hp"],
- "spd" => $base_stats["spd"] + $building_stats["spd"] + $artifact_stats["spd"],
- "crr" => $base_stats["crr"] + $building_stats["crr"] + $artifact_stats["crr"],
- "crd" => $base_stats["crd"] + $building_stats["crd"] + $artifact_stats["crd"],
- "acc" => $base_stats["acc"] + $building_stats["acc"] + $artifact_stats["acc"],
- "res" => $base_stats["res"] + $building_stats["res"] + $artifact_stats["res"],
- "ehp" => 0,
- "dmg" => 0
- ]
- ];
- foreach ($option["runes"] as $rune_option){
- $rune = new Rune($rune_option["ID"]);
- $r = [
- "id" => $rune_option["ID"],
- "html" => HTML::rune_table($rune)
- ];
- // Calculate stat increment
- // TODO: Main stat at level!
- $stat_ids = [
- $rune->get_main_stat()->get_stat(),
- ($rune->get_innate_stat() != null ? $rune->get_innate_stat()->get_stat() : null),
- (sizeof($rune->get_substats() > 0 ? $rune->get_substats()[0]->get_stat() : null)),
- (sizeof($rune->get_substats() > 1 ? $rune->get_substats()[1]->get_stat() : null)),
- (sizeof($rune->get_substats() > 2 ? $rune->get_substats()[2]->get_stat() : null)),
- (sizeof($rune->get_substats() > 3 ? $rune->get_substats()[3]->get_stat() : null))
- ];
- $main_value = $rune->get_main_stat()->get_value();
- switch ($tuning){
- case 1: // All +12
- if ($rune->get_level() < 12){
- $main_value = $rune->get_main_stat_at_level(12);
- }
- break;
- case 2: // Even +15, Odd + 12
- if ($rune->get_level() < 15 && $rune->get_slot() % 2 == 0){
- $main_value = $rune->get_main_stat_at_level(15);
- }
- elseif ($rune->get_level() < 12 && $rune->get_slot() % 2 != 0){
- $main_value = $rune->get_main_stat_at_level(12);
- }
- break;
- case 3: // All +15
- if ($rune->get_level() < 15){
- $main_value = $rune->get_main_stat_at_level(15);
- }
- break;
- }
- $stat_values = [
- $main_value,
- ($stat_ids[1] != null ? $rune->get_innate_stat()->get_value() : 0),
- ($stat_ids[2] != null ? $rune->get_substats()[0]->get_value() : 0),
- ($stat_ids[3] != null ? $rune->get_substats()[1]->get_value() : 0),
- ($stat_ids[4] != null ? $rune->get_substats()[2]->get_value() : 0),
- ($stat_ids[5] != null ? $rune->get_substats()[3]->get_value() : 0)
- ];
- for ($i = 0; $i < 6; $i ++){
- switch ($stat_ids[$i]){
- case RUNE_STAT_ID::ATK:
- $set["stats"]["atk"] += $stat_values[$i];
- break;
- case RUNE_STAT_ID::ATK_P:
- $set["stats"]["atk"] += ceil($base_stats()["atk"] * $stat_values[$i] / 100);
- break;
- case RUNE_STAT_ID::DEF:
- $set["stats"]["def"] += $stat_values[$i];
- break;
- case RUNE_STAT_ID::DEF_P:
- $set["stats"]["def"] += ceil($base_stats["def"] * $stat_values[$i] / 100);
- break;
- case RUNE_STAT_ID::HP:
- $set["stats"]["hp"] += $stat_values[$i];
- break;
- case RUNE_STAT_ID::HP_P:
- $set["stats"]["hp"] += ceil($base_stats["hp"] * $stat_values[$i] / 100);
- break;
- case RUNE_STAT_ID::SPD:
- $set["stats"]["spd"] += $stat_values[$i];
- break;
- case RUNE_STAT_ID::CRR:
- $set["stats"]["crr"] += $stat_values[$i];
- break;
- case RUNE_STAT_ID::CRD:
- $set["stats"]["crd"] += $stat_values[$i];
- break;
- case RUNE_STAT_ID::ACC:
- $set["stats"]["acc"] += $stat_values[$i];
- break;
- case RUNE_STAT_ID::RES:
- $set["stats"]["res"] += $stat_values[$i];
- break;
- }
- }
- // Calculate EHP and DMG
- $set["stats"]["ehp"] = ceil(((($set["stats"]["def"] * 3.5) + 1140) * $set["stats"]["hp"]) / 1000);
- $atk = $set["stats"]["atk"];
- $crr = $set["stats"]["crr"];
- if ($crr > 100){
- $crr = 100;
- }
- $crd = $set["stats"]["crd"];
- $edmg = ceil(($atk * (100 - $crr) / 100) + (($atk + ($atk * $crd / 100)) * $crr / 100));
- $set["stats"]["dmg"] = $edmg;
- // Add to the array
- array_push($set["runes"], $r);
- }
- array_push($runes, $set);
- }
- // Send back the response
- $response = json_encode($runes);
- if ($response == null){
- return 0;
- }
- else{
- return $response;
- }
- }
|