[], "stats" => [ "attack" => $unit->attack, "defense" => $unit->defense, "hp" => $unit->hp, "speed" => $unit->speed, "crit_rate" => $unit->crit_rate, "crit_damage" => $unit->crit_damage, "accuracy" => $unit->accuracy, "resistance" => $unit->resistance, "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"]["attack"] += $stat_values[$i]; break; case RUNE_STAT_ID::ATK_P: $set["stats"]["attack"] += ceil($unit->get_base_stats()["ATK"] * $stat_values[$i] / 100); break; case RUNE_STAT_ID::DEF: $set["stats"]["defense"] += $stat_values[$i]; break; case RUNE_STAT_ID::DEF_P: $set["stats"]["defense"] += ceil($unit->get_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($unit->get_base_stats()["HP"] * $stat_values[$i] / 100); break; case RUNE_STAT_ID::SPD: $set["stats"]["speed"] += $stat_values[$i]; break; case RUNE_STAT_ID::CRR: $set["stats"]["crit_rate"] += $stat_values[$i]; break; case RUNE_STAT_ID::CRD: $set["stats"]["crit_damage"] += $stat_values[$i]; break; case RUNE_STAT_ID::ACC: $set["stats"]["accuracy"] += $stat_values[$i]; break; case RUNE_STAT_ID::CRR: $set["stats"]["resistance"] += $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"]["attack"]; $crr = $set["stats"]["crit_rate"]; if ($crr > 100){ $crr = 100; } $crd = $set["stats"]["crit_damage"]; $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; } } ?>