// Only process if the Mega Buster has not yet been unlocked if ($_SESSION['GAME']['values']['battle_rewards']['dr-light']['player_points'] <= 0) { // Increase this player's score by 10,000 points $temp_bonus_points = 10000; $_SESSION['GAME']['counters']['battle_points'] += $temp_bonus_points; $_SESSION['GAME']['values']['battle_rewards']['dr-light']['player_points'] += $temp_bonus_points; // Unlock the Copy Shot for use in battle early rpg_game::unlock_ability($mmrpg_index['players']['dr-light'], false, array('ability_token' => 'copy-shot'), true); // Reset and return to the main menu header('Location: prototype.php'); exit; } } // If the UNLOCK BUBBLE BOMB password was created if (!empty($temp_flags['drlight_password_abilitygetbubblebombsaway'])) { if (!rpg_game::ability_unlocked('dr-light', false, 'bubble-bomb')) { // Unlock Bubble Bomb as an equippable ability rpg_game::unlock_ability($mmrpg_index['players']['dr-light'], false, array('ability_token' => 'bubble-bomb'), true); header('Location: prototype.php'); exit; } } // If the UNLOCK SHADOW BLADE password was created if (!empty($temp_flags['drlight_password_abilitygetcutterofdarkness'])) { if (!rpg_game::ability_unlocked('dr-light', false, 'shadow-blade')) { // Unlock Shadow Blade as an equippable ability rpg_game::unlock_ability($mmrpg_index['players']['dr-light'], false, array('ability_token' => 'shadow-blade'), true); header('Location: prototype.php'); exit; } }
public static function generate_double($this_prototype_data, $this_robot_tokens, $this_field_tokens, $this_start_level = 1, $this_unlock_robots = true, $this_unlock_abilities = true) { // Pull in global variables for this function global $mmrpg_index, $db, $this_omega_factors_one, $this_omega_factors_two, $this_omega_factors_three, $this_omega_factors_four, $this_omega_factors_five, $this_omega_factors_six, $this_omega_factors_seven, $this_omega_factors_eight, $this_omega_factors_nine; // Collect the robot index for calculation purposes $this_robot_index = rpg_robot::get_index(); $this_field_index = rpg_field::get_index(); // Define the array to hold this omega battle and populate with base varaibles $this_robot_token = $this_robot_tokens[0]; $this_robot_token2 = $this_robot_tokens[1]; $temp_option_battle = array(); $temp_option_battle2 = array(); $temp_option_robot = is_array($this_robot_tokens[0]) ? $this_robot_tokens[0] : array('robot_token' => $this_robot_tokens[0]); $temp_option_robot2 = is_array($this_robot_tokens[1]) ? $this_robot_tokens[1] : array('robot_token' => $this_robot_tokens[1]); $temp_option_field = rpg_field::parse_index_info($this_field_index[$this_field_tokens[0]]); $temp_option_field2 = rpg_field::parse_index_info($this_field_index[$this_field_tokens[1]]); $temp_battle_omega = array(); $temp_battle_omega['flags']['double_battle'] = true; $temp_battle_omega['values']['double_battle_masters'] = $this_robot_tokens; $temp_option_battle['battle_size'] = '1x2'; $temp_option_battle['battle_name'] = 'Chapter Four Fusion Battle'; $temp_option_battle['battle_token'] = $this_prototype_data['phase_battle_token'] . '-' . str_replace('-man', '', $this_robot_tokens[0]) . '-' . str_replace('-man', '', $this_robot_tokens[1]); $temp_option_battle['battle_phase'] = $this_prototype_data['battle_phase']; $temp_option_battle['battle_field_info']['field_token'] = $temp_option_field['field_token']; $temp_option_battle['battle_field_info']['field_name'] = preg_replace('/^([-_a-z0-9\\s]+)\\s+([-_a-z0-9]+)$/i', '$1', $temp_option_field['field_name']) . ' ' . preg_replace('/^([-_a-z0-9\\s]+)\\s+([-_a-z0-9]+)$/i', '$2', $temp_option_field2['field_name']); $temp_option_battle['battle_field_info']['field_type'] = !empty($temp_option_field['field_type']) ? $temp_option_field['field_type'] : ''; $temp_option_battle['battle_field_info']['field_type2'] = !empty($temp_option_field2['field_type']) ? $temp_option_field2['field_type'] : ''; $temp_option_battle['battle_field_info']['field_music'] = $temp_option_field2['field_token']; $temp_option_battle['battle_field_info']['field_foreground'] = $temp_option_field2['field_foreground']; $temp_option_battle['battle_field_info']['field_foreground_attachments'] = $temp_option_field2['field_foreground_attachments']; $temp_option_battle['battle_field_info']['field_background'] = $temp_option_field['field_background']; $temp_option_battle['battle_field_info']['field_background_attachments'] = $temp_option_field['field_background_attachments']; $temp_option_multipliers = array(); $temp_option_field_list = array($temp_option_field, $temp_option_field2); foreach ($temp_option_field_list as $temp_field) { if (!empty($temp_field['field_multipliers'])) { foreach ($temp_field['field_multipliers'] as $temp_type => $temp_multiplier) { if (!isset($temp_option_multipliers[$temp_type])) { $temp_option_multipliers[$temp_type] = $temp_multiplier; } else { $temp_option_multipliers[$temp_type] = $temp_option_multipliers[$temp_type] * $temp_multiplier; } } } } $temp_option_battle['battle_field_info']['field_multipliers'] = $temp_option_multipliers; $temp_option_battle['battle_target_player']['player_id'] = MMRPG_SETTINGS_TARGET_PLAYERID; $temp_option_battle['battle_target_player']['player_token'] = 'player'; $temp_option_battle['battle_target_player']['player_robots'] = array(); //array_merge($temp_option_battle['battle_target_player']['player_robots'], $temp_option_battle2['battle_target_player']['player_robots']); $temp_option_battle['battle_target_player']['player_robots'][0] = array('robot_id' => MMRPG_SETTINGS_TARGET_PLAYERID + 1, 'robot_token' => $this_robot_token); $temp_option_battle['battle_target_player']['player_robots'][1] = array('robot_id' => MMRPG_SETTINGS_TARGET_PLAYERID + 2, 'robot_token' => $this_robot_token2); //shuffle($temp_option_battle['battle_target_player']['player_robots']); $temp_option_battle['battle_complete'] = false; $temp_option_completed = rpg_prototype::battle_complete($this_prototype_data['this_player_token'], $temp_option_battle['battle_token']); if ($temp_option_completed) { $temp_option_battle['battle_complete'] = $temp_option_completed; } $temp_target_count = 4; $temp_ability_count = 4; $temp_battle_count = 0; if (!empty($temp_option_battle['battle_complete']['battle_count'])) { $temp_battle_count = $temp_option_battle['battle_complete']['battle_count']; $temp_target_count += $temp_battle_count; $temp_ability_count += $temp_battle_count; } if ($temp_target_count > 6) { $temp_target_count = 6; } if ($temp_ability_count > 8) { $temp_ability_count = 8; } // Create the quick flag to check if battle is complete $temp_battle_complete = !empty($temp_option_battle['battle_complete']) ? true : false; // Check to see if this robot master has been unlocked already $temp_master_unlocked = rpg_game::robot_unlocked('', $this_robot_token) ? true : false; $temp_master_unlocked2 = rpg_game::robot_unlocked('', $this_robot_token2) ? true : false; // Create a quick flah to check if the prototype is complete $temp_prototype_complete = !empty($this_prototype_data['prototype_complete']) ? true : false; // Define the fusion star token in case we need to test for it $temp_field_star_token = preg_replace('/^([-_a-z0-9\\s]+)-([-_a-z0-9]+)$/i', '$1', $temp_option_field['field_token']) . '-' . preg_replace('/^([-_a-z0-9\\s]+)-([-_a-z0-9]+)$/i', '$2', $temp_option_field2['field_token']); $temp_field_star_present = $this_prototype_data['prototype_complete'] && empty($_SESSION['GAME']['values']['battle_stars'][$temp_field_star_token]) ? true : false; // Define both the starforce and darkness battles to false $temp_darkness_battle = false; $temp_starforce_battle = false; // If the prototype is complete, this can be a starforce battle if ($temp_prototype_complete && $temp_field_star_present) { $temp_starforce_battle = true; } // If the prototype and battle are complete plus robot unlocked, this can be a darkness battle if ($temp_prototype_complete && $temp_battle_complete && $temp_master_unlocked && $temp_master_unlocked2) { // Only make this a darkness battle on a random chance and only if there isn't a star present if (!$temp_field_star_present && mt_rand(0, 3) == 0) { $temp_darkness_battle = true; $temp_starforce_battle = false; } } // If a fusion star is preent on the field, fill the empty spots with like-typed robots if ($temp_starforce_battle) { $temp_option_battle['battle_target_player']['player_switch'] = 2; $temp_robot_tokens = array(); $temp_robot_tokens[] = $temp_option_battle['battle_target_player']['player_robots'][0]['robot_token']; $temp_robot_tokens[] = $temp_option_battle['battle_target_player']['player_robots'][1]['robot_token']; // Collect factors based on player if ($this_prototype_data['this_player_token'] == 'dr-light') { $temp_factors_list = array($this_omega_factors_one, array_merge($this_omega_factors_two, $this_omega_factors_three, $this_omega_factors_four, $this_omega_factors_five, $this_omega_factors_six, $this_omega_factors_seven, $this_omega_factors_eight, $this_omega_factors_nine)); } elseif ($this_prototype_data['this_player_token'] == 'dr-wily') { $temp_factors_list = array($this_omega_factors_two, array_merge($this_omega_factors_three, $this_omega_factors_four, $this_omega_factors_five, $this_omega_factors_six, $this_omega_factors_seven, $this_omega_factors_eight, $this_omega_factors_nine, $this_omega_factors_one)); } elseif ($this_prototype_data['this_player_token'] == 'dr-cossack') { $temp_factors_list = array($this_omega_factors_three, array_merge($this_omega_factors_four, $this_omega_factors_five, $this_omega_factors_six, $this_omega_factors_seven, $this_omega_factors_eight, $this_omega_factors_nine, $this_omega_factors_one, $this_omega_factors_two)); } // Shuffle the bonus robots section of the list shuffle($temp_factors_list[1]); //$debug_backup = 'initial:count = '.count($temp_option_battle['battle_target_player']['player_robots']).' // '; // Loop through and add the robots $temp_counter = 0; foreach ($temp_factors_list as $this_list) { shuffle($this_list); foreach ($this_list as $this_factor) { if (empty($this_factor['robot'])) { continue; } $bonus_robot_index = $this_robot_index[$this_factor['robot']]; if (!isset($bonus_robot_index['robot_core'])) { $bonus_robot_index['robot_core'] = ''; } if ($bonus_robot_index['robot_core'] == $temp_option_field['field_type'] || $bonus_robot_index['robot_core'] == $temp_option_field2['field_type']) { if (!in_array($bonus_robot_index['robot_token'], $temp_robot_tokens)) { $bonus_robot_info = array(); $bonus_robot_info['flags']['hide_from_mission_select'] = true; $bonus_robot_info['robot_token'] = $bonus_robot_index['robot_token']; $bonus_robot_info['robot_class'] = $bonus_robot_index['robot_class']; $temp_option_battle['battle_target_player']['player_robots'][] = $bonus_robot_info; $temp_robot_tokens[] = $bonus_robot_info['robot_token']; } } } } //$debug_backup .= 'before:count = '.count($temp_option_battle['battle_target_player']['player_robots']).' // '; $temp_slice_limit = 4; //2 + $temp_option_battle['battle_complete']['battle_count']; //if ($temp_slice_limit >= (MMRPG_SETTINGS_BATTLEROBOTS_PERSIDE_MAX / 2)){ $temp_slice_limit = (MMRPG_SETTINGS_BATTLEROBOTS_PERSIDE_MAX / 2); } //elseif ($temp_slice_limit >= MMRPG_SETTINGS_BATTLEROBOTS_PERSIDE_MAX){ $temp_slice_limit = 8; } $temp_option_battle['battle_target_player']['player_robots'] = array_slice($temp_option_battle['battle_target_player']['player_robots'], 0, $temp_slice_limit); shuffle($temp_option_battle['battle_target_player']['player_robots']); //$debug_backup .= 'after:count = '.count($temp_option_battle['battle_target_player']['player_robots']).' // '; } // Define the omega variables for level, points, turns, and random encounter rate $omega_robot_level_max = $this_start_level + 3; $omega_robot_level = $this_start_level + (!empty($this_prototype_data['battles_complete']) ? ($this_prototype_data['battles_complete'] - 10) * 1 : 0); if ($omega_robot_level >= $omega_robot_level_max) { $omega_robot_level = $omega_robot_level_max; } $omega_random_encounter = false; // Define the battle rewards based on above data $temp_battle_omega['battle_rewards_robots'] = array(); $temp_battle_omega['battle_rewards_abilities'] = array(); if (!$temp_master_unlocked) { $temp_battle_omega['battle_rewards_robots'][] = array('token' => $this_robot_token); } if (!empty($temp_option_robot['robot_rewards']['abilities'])) { foreach ($temp_option_robot['robot_rewards']['abilities'] as $key => $info) { if ($info['token'] == 'buster-shot' || $info['level'] > $omega_robot_level) { continue; } if (!rpg_game::ability_unlocked('', '', $info['token'])) { $temp_battle_omega['battle_rewards_abilities'][] = $info; } } } if (!$temp_master_unlocked2) { $temp_battle_omega['battle_rewards_robots'][] = array('token' => $this_robot_token2); } if (!empty($temp_option_robot2['robot_rewards']['abilities'])) { foreach ($temp_option_robot2['robot_rewards']['abilities'] as $key => $info) { if ($info['token'] == 'buster-shot' || $info['level'] > $omega_robot_level) { continue; } if (!rpg_game::ability_unlocked('', '', $info['token'])) { $temp_battle_omega['battle_rewards_abilities'][] = $info; } } } // Fill the empty spots with minor enemy robots if (true) { $temp_option_battle['battle_target_player']['player_switch'] = 2.0; $bonus_robot_count = $temp_target_count; $temp_mook_options = array(); $temp_mook_letters = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'); $temp_mook_counts = array(); if (!isset($temp_option_field['field_mechas'])) { $temp_option_field['field_mechas'] = array(); } if (!isset($temp_option_field2['field_mechas'])) { $temp_option_field2['field_mechas'] = array(); } for ($key = 0; $key < count($temp_option_field['field_mechas']); $key++) { if (!empty($temp_option_field['field_mechas'][$key])) { $temp_mook_options[] = $temp_option_field['field_mechas'][$key]; } if (!empty($temp_option_field2['field_mechas'][$key])) { $temp_mook_options[] = $temp_option_field2['field_mechas'][$key]; } } $temp_mook_weights = array(); $temp_mook_maxchance = count($temp_mook_options) * 30; foreach ($temp_mook_options as $key => $token) { $temp_mook_weights[] = $temp_mook_maxchance - $key * 15; } $temp_mook_options = array_slice($temp_mook_options, 0, $temp_battle_count + 1); $temp_battle_omega['battle_field_info']['field_mechas'] = $temp_mook_options; if ($temp_darkness_battle) { $temp_battle_omega['battle_field_info']['field_mechas'] = array('dark-frag'); } $mt_rand = mt_rand(1, 4); // Allow mets to randomly show up in other battles at a low rate if (!empty($temp_battle_omega['battle_complete']) && !in_array('met', $temp_mook_options)) { $temp_mook_options[] = 'met'; $temp_mook_weights[] = 5; } // Loop through the allowed bonus robot count placing random mooks $temp_base_robot_count = count($temp_option_battle['battle_target_player']['player_robots']); for ($i = 0; $i < MMRPG_SETTINGS_BATTLEROBOTS_PERSIDE_MAX; $i++) { $temp_count_target_robots = count($temp_option_battle['battle_target_player']['player_robots']); if ($temp_count_target_robots >= $bonus_robot_count) { break; } elseif ($temp_count_target_robots >= MMRPG_SETTINGS_BATTLEROBOTS_PERSIDE_MAX) { break; } if ($temp_darkness_battle) { $temp_mook_token = 'dark-frag'; } else { $temp_mook_token = rpg_functions::weighted_chance($temp_mook_options, $temp_mook_weights); } $temp_mook_info = rpg_robot::parse_index_info($this_robot_index[$temp_mook_token]); $temp_mook_id = MMRPG_SETTINGS_TARGET_PLAYERID + $temp_count_target_robots; $bonus_robot_info = array('robot_token' => $temp_mook_token, 'robot_id' => $temp_mook_id, 'robot_level' => 1); $bonus_robot_info['robot_abilities'] = $temp_mook_info['robot_abilities']; $bonus_robot_info['robot_class'] = !empty($temp_mook_info['robot_class']) ? $temp_mook_info['robot_class'] : 'master'; $bonus_robot_info['robot_name'] = $temp_mook_info['robot_name']; $temp_mook_name_token = str_replace(' ', '-', strtolower($bonus_robot_info['robot_name'])); $bonus_robot_info['robot_name_token'] = $temp_mook_name_token; if (!isset($temp_mook_counts[$temp_mook_name_token])) { $temp_mook_counts[$temp_mook_name_token] = 0; } else { $temp_mook_counts[$temp_mook_name_token]++; } $temp_option_battle['battle_target_player']['player_robots'][] = $bonus_robot_info; $temp_robot_tokens[] = $bonus_robot_info['robot_token']; } // Remove the "A" from any mooks that are one of their kind foreach ($temp_option_battle['battle_target_player']['player_robots'] as $key => $info) { if (!isset($info['robot_class']) || $info['robot_class'] != 'mecha') { continue; } elseif (!isset($temp_mook_counts[$info['robot_token']]) || $temp_mook_counts[$info['robot_token']] == 0) { $temp_option_battle['battle_target_player']['player_robots'][$key]['robot_name'] = str_replace(' A', '', $info['robot_name']); } } // Loop through the target player robots to make final changes foreach ($temp_option_battle['battle_target_player']['player_robots'] as $key => $info) { // Collect an index of this robot $index = rpg_robot::parse_index_info($this_robot_index[$info['robot_token']]); // Default the stat reward boost to zero to prevent early difficulities $temp_stat_reward_boost = 0; // Update the robot ID to prevent collisions $info['robot_id'] = MMRPG_SETTINGS_TARGET_PLAYERID + $key + 1; // Append the appropriate letters to all the robot name tokens $info['robot_class'] = !empty($info['robot_class']) ? $info['robot_class'] : 'master'; // Check to see if this is a support mecha and process changes accordingly if ($info['robot_class'] == 'mecha') { /* // Update this mecha's name with a letter if necessary $temp_name_token = isset($info['robot_name_token']) ? $info['robot_name_token'] : $info['robot_token']; if ($temp_mook_counts[$temp_name_token] > 0){ if (!isset($temp_mook_counts[$temp_name_token])){ $temp_mook_counts[$temp_name_token] = 0; } else { $temp_mook_counts[$temp_name_token]++; } $info['robot_name'] .= ' '.$temp_mook_letters[$temp_mook_counts[$temp_name_token]]; } */ // If this is a starforce battle, boost the mechas stats appropriately if ($temp_starforce_battle) { $temp_stat_reward_boost = 0.5; } elseif ($temp_darkness_battle) { $temp_stat_reward_boost = 1.0; } } else { // If this is s starforce battle, the robot master should be boosted in an alt colour if ($temp_starforce_battle) { // Update the robot name, adding a delta symbol at the end $info['robot_name'] = $index['robot_name'] . ' Δ'; $info['robot_number'] = $index['robot_number'] . 'Δ'; // Update the robot image for this battle to be the alt version $info['robot_image'] = $info['robot_token'] . '_alt2'; // This robot should also have more stats than usual, so let's give 'em some $temp_stat_reward_boost = 1.0; } elseif ($temp_darkness_battle) { // Update the robot name, adding a lower-case sigma symbol at the end $info['robot_name'] = $index['robot_name'] . ' Σ'; $info['robot_number'] = $index['robot_number'] . 'Σ'; // Update the robot image for this battle to be the alt version $info['robot_image'] = $info['robot_token'] . '_alt9'; // Update the robot's core type to empty $info['robot_core'] = 'empty'; $info['robot_core2'] = ''; // Update the robot's weaknesses/resistances/etc. $info['robot_weaknesses'] = array(); $info['robot_resistances'] = array(); $info['robot_affinities'] = array(); $info['robot_immunities'] = array(); //array('copy', 'crystal', 'cutter', 'earth', 'electric', 'explode', 'flame', 'freeze', 'impact', 'laser', 'missile', 'nature', 'shadow', 'shield', 'space', 'swift', 'time', 'water', 'wind'); // Remove all quotes so this robot doesn't speak $info['robot_quotes'] = array(); // This robot should also have more stats than usual, so let's give 'em more $temp_stat_reward_boost = 2.0; } // If the defined robot image does not actually exist, replace with placeholder base sprite if (isset($info['robot_image']) && !file_exists(MMRPG_CONFIG_ROOTDIR . 'images/sprites/robots/' . $info['robot_image'] . '/')) { $info['robot_image'] = $info['robot_token']; } } // If there is a reward booster in place, generate values if ($temp_stat_reward_boost > 0) { // This robot should also have more stats than usual, so let's give 'em some more $temp_robot_rewards = array(); //$temp_stat_total = $index['robot_energy'] + $index['robot_attack'] + $index['robot_defense'] + $index['robot_speed']; //$temp_robot_rewards['robot_energy'] = ceil(($index['robot_energy'] / $temp_stat_total) * MMRPG_SETTINGS_BATTLEROBOTS_TARGET_STATBOOST * $temp_stat_reward_boost); $temp_stat_total = $index['robot_attack'] + $index['robot_defense'] + $index['robot_speed']; $temp_robot_rewards['robot_attack'] = ceil($index['robot_attack'] / $temp_stat_total * MMRPG_SETTINGS_BATTLEROBOTS_TARGET_STATBOOST * $temp_stat_reward_boost); $temp_robot_rewards['robot_defense'] = ceil($index['robot_defense'] / $temp_stat_total * MMRPG_SETTINGS_BATTLEROBOTS_TARGET_STATBOOST * $temp_stat_reward_boost); $temp_robot_rewards['robot_speed'] = ceil($index['robot_speed'] / $temp_stat_total * MMRPG_SETTINGS_BATTLEROBOTS_TARGET_STATBOOST * $temp_stat_reward_boost); $info['values']['robot_rewards'] = $temp_robot_rewards; } // Update the player robots array with recent changes $temp_option_battle['battle_target_player']['player_robots'][$key] = $info; } } // Reassign robot IDs to prevent errors foreach ($temp_option_battle['battle_target_player']['player_robots'] as $key => $info) { $temp_option_battle['battle_target_player']['player_robots'][$key]['robot_id'] = MMRPG_SETTINGS_TARGET_PLAYERID + $key + 1; } $temp_option_battle['battle_rewards_robots'] = array(); $temp_option_battle['battle_rewards_abilities'] = array(); $temp_battle_flags = !empty($temp_battle_omega['flags']) ? $temp_battle_omega['flags'] : array(); $temp_battle_values = !empty($temp_battle_omega['values']) ? $temp_battle_omega['values'] : array(); $temp_battle_counters = !empty($temp_battle_omega['counters']) ? $temp_battle_omega['counters'] : array(); $temp_battle_omega = $temp_option_battle; $temp_battle_omega['flags'] = $temp_battle_flags; $temp_battle_omega['values'] = $temp_battle_values; $temp_battle_omega['counters'] = $temp_battle_counters; // Skip the empty battle button or a different phase if (empty($temp_battle_omega['battle_token']) || $temp_battle_omega['battle_token'] == 'battle' || $temp_battle_omega['battle_phase'] != $this_prototype_data['battle_phase']) { return false; } // Collect the battle token and create an omega clone from the index base $temp_battle_token = $temp_battle_omega['battle_token']; // If the battle was already complete, collect its details and modify the mission $temp_complete_level = 0; $temp_complete_count = 0; if (!empty($temp_battle_omega['battle_complete'])) { if (!empty($temp_battle_omega['battle_complete']['battle_min_level'])) { $temp_complete_level = $temp_battle_omega['battle_complete']['battle_min_level']; } else { $temp_complete_level = $omega_robot_level; } if (!empty($temp_battle_omega['battle_complete']['battle_count'])) { $temp_complete_count = $temp_battle_omega['battle_complete']['battle_count']; } else { $temp_complete_count = 1; } $omega_robot_level = $temp_complete_level + $temp_complete_count - 1; $omega_robot_level = $omega_robot_level >= 100 ? 100 : $omega_robot_level; } // If this is a starforce battle, we should double the level max if ($temp_starforce_battle) { $omega_robot_level_max = $omega_robot_level_max * 2; $omega_robot_level = $omega_robot_level * 2; } elseif ($temp_darkness_battle) { $omega_robot_level_max = $omega_robot_level_max * 3; $omega_robot_level = $omega_robot_level * 3; } // Define the battle difficulty level (0 - 8) based on level and completed count $temp_battle_difficulty = ceil(8 * ($omega_robot_level / 100)); $temp_battle_difficulty += $temp_complete_count; if ($temp_battle_difficulty >= 10) { $temp_battle_difficulty = 10; } $temp_battle_omega['battle_difficulty'] = $temp_battle_difficulty; // Update the robot level for this battle $temp_battle_omega['battle_level'] = $omega_robot_level; // Start all the point-based battle vars at zero $temp_battle_omega['battle_points'] = 0; $temp_battle_omega['battle_zenny'] = 0; $temp_battle_omega['battle_turns_limit'] = 0; $temp_battle_omega['battle_robots_limit'] = 0; // Loop through the target robots again update with omega values foreach ($temp_battle_omega['battle_target_player']['player_robots'] as $key2 => $robot) { // Update the robot level and battle points plus turns if (!isset($this_robot_index[$robot['robot_token']])) { continue; } $temp_core_backup = !empty($robot['robot_core']) ? $robot['robot_core'] : ''; $index = rpg_robot::parse_index_info($this_robot_index[$robot['robot_token']]); $robot = array_merge($index, $robot); if (!empty($temp_core_backup)) { $robot['robot_core'] = $temp_core_backup; } if (!isset($robot['robot_item'])) { $robot['robot_item'] = ''; } $temp_opposite_type = $robot['robot_core'] != $temp_option_field['field_type'] ? $temp_option_field['field_type'] : $temp_option_field2['field_type']; // Increment allowable robots, points, and turns based on who's in the battle if ($robot['robot_class'] == 'mecha') { if (mt_rand(0, 6) == 0) { $robot['robot_item'] = 'item-shard-' . $temp_opposite_type; } $robot['robot_level'] = mt_rand(ceil($omega_robot_level / 2), $omega_robot_level); $temp_battle_omega['battle_target_player']['player_robots'][$key2]['robot_item'] = $robot['robot_item']; $temp_battle_omega['battle_target_player']['player_robots'][$key2]['robot_level'] = $robot['robot_level']; $temp_battle_omega['battle_target_player']['player_robots'][$key2]['robot_abilities'] = rpg_prototype::generate_abilities($robot, $omega_robot_level, ceil($temp_ability_count / 2), $robot['robot_item']); } elseif ($robot['robot_class'] == 'master') { if (mt_rand(0, 3) == 0) { $robot['robot_item'] = 'item-core-' . $temp_opposite_type; } $robot['robot_level'] = $omega_robot_level; $temp_battle_omega['battle_target_player']['player_robots'][$key2]['robot_item'] = $robot['robot_item']; $temp_battle_omega['battle_target_player']['player_robots'][$key2]['robot_level'] = $robot['robot_level']; $temp_battle_omega['battle_target_player']['player_robots'][$key2]['robot_abilities'] = rpg_prototype::generate_abilities($robot, $omega_robot_level, $temp_ability_count, $robot['robot_item']); } elseif ($robot['robot_class'] == 'boss') { $robot['robot_level'] = mt_rand($omega_robot_level, ceil($omega_robot_level * 2)); $temp_battle_omega['battle_target_player']['player_robots'][$key2]['robot_level'] = $robot['robot_level']; //$temp_battle_omega['battle_target_player']['player_robots'][$key2]['robot_abilities'] = rpg_prototype::generate_abilities($robot, $omega_robot_level, floor($temp_ability_count * 2), $robot['robot_item']); } // Increment the battle's turn limit based on the class of target robot if ($robot['robot_class'] == 'master') { $temp_battle_omega['battle_turns_limit'] += MMRPG_SETTINGS_BATTLETURNS_PERROBOT; } elseif ($robot['robot_class'] == 'mecha') { $temp_battle_omega['battle_turns_limit'] += MMRPG_SETTINGS_BATTLETURNS_PERMECHA; } elseif ($robot['robot_class'] == 'boss') { $temp_battle_omega['battle_turns_limit'] += MMRPG_SETTINGS_BATTLETURNS_PERBOSS; } // Increment the battle's point reward based on the class of target robot if ($robot['robot_class'] == 'master') { $temp_battle_omega['battle_points'] += $robot['robot_level'] * MMRPG_SETTINGS_BATTLEPOINTS_PERROBOT; } elseif ($robot['robot_class'] == 'mecha') { $temp_battle_omega['battle_points'] += $robot['robot_level'] * MMRPG_SETTINGS_BATTLEPOINTS_PERMECHA; } elseif ($robot['robot_class'] == 'boss') { $temp_battle_omega['battle_points'] += $robot['robot_level'] * MMRPG_SETTINGS_BATTLEPOINTS_PERBOSS; } // Increment the battle's zenny reward based on the class of target robot if ($robot['robot_class'] == 'master') { $temp_battle_omega['battle_zenny'] += $robot['robot_level'] * MMRPG_SETTINGS_BATTLEZENNY_PERROBOT; } elseif ($robot['robot_class'] == 'mecha') { $temp_battle_omega['battle_zenny'] += $robot['robot_level'] * MMRPG_SETTINGS_BATTLEZENNY_PERMECHA; } elseif ($robot['robot_class'] == 'boss') { $temp_battle_omega['battle_zenny'] += $robot['robot_level'] * MMRPG_SETTINGS_BATTLEZENNY_PERBOSS; } // Increment the battle's robot limit based on the class of target robot if ($robot['robot_class'] == 'master') { $temp_battle_omega['battle_robots_limit'] += MMRPG_SETTINGS_BATTLEROBOTS_PERROBOT; } elseif ($robot['robot_class'] == 'mecha') { $temp_battle_omega['battle_robots_limit'] += MMRPG_SETTINGS_BATTLEROBOTS_PERMECHA; } elseif ($robot['robot_class'] == 'boss') { $temp_battle_omega['battle_robots_limit'] += MMRPG_SETTINGS_BATTLEROBOTS_PERBOSS; } } // Increase expected turns if a starforce or darkness battle if ($temp_starforce_battle) { $temp_battle_omega['battle_turns_limit'] += round($temp_battle_omega['battle_turns_limit'] * 0.25); } elseif ($temp_darkness_battle) { $temp_battle_omega['battle_turns_limit'] += round($temp_battle_omega['battle_turns_limit'] * 0.5); } // Fix any zero or invalid battle values if ($temp_battle_omega['battle_points'] < 1) { $temp_battle_omega['battle_points'] = 1; } else { $temp_battle_omega['battle_points'] = ceil($temp_battle_omega['battle_points']); } if ($temp_battle_omega['battle_turns_limit'] < 1) { $temp_battle_omega['battle_turns_limit'] = 1; } else { $temp_battle_omega['battle_turns_limit'] = ceil($temp_battle_omega['battle_turns_limit']); } if ($temp_battle_omega['battle_robots_limit'] < 1) { $temp_battle_omega['battle_robots_limit'] = 1; } else { $temp_battle_omega['battle_robots_limit'] = ceil($temp_battle_omega['battle_robots_limit']); } // Recollect the option robots $temp_option_robot = $this_robot_index[$temp_option_robot['robot_token']]; $temp_option_robot2 = $this_robot_index[$temp_option_robot2['robot_token']]; // Reverse the order of the robots in battle $temp_battle_omega['battle_target_player']['player_robots'] = array_reverse($temp_battle_omega['battle_target_player']['player_robots']); $temp_first_robot = array_shift($temp_battle_omega['battle_target_player']['player_robots']); shuffle($temp_battle_omega['battle_target_player']['player_robots']); array_unshift($temp_battle_omega['battle_target_player']['player_robots'], $temp_first_robot); // Empty the robot rewards array if not allowed if (!$this_unlock_robots) { $temp_battle_omega['battle_rewards_robots'] = array(); } // Empty the ability rewards array if not allowed if (!$this_unlock_abilities) { $temp_battle_omega['battle_rewards_abilities'] = array(); } // Define the number of abilities and robots left to unlock and start at zero $this_unlock_robots_count = count($temp_battle_omega['battle_rewards_robots']); $this_unlock_abilities_count = count($temp_battle_omega['battle_rewards_abilities']); // Loop through the omega battle robot rewards and update the robot levels there too if (!empty($temp_battle_omega['battle_rewards_robots'])) { foreach ($temp_battle_omega['battle_rewards_robots'] as $key2 => $robot) { // Update the robot level and battle points plus turns $temp_battle_omega['battle_rewards_robots'][$key2]['level'] = $omega_robot_level; // Remove if this robot is already unlocked if (rpg_game::robot_unlocked(false, $robot['token'])) { $this_unlock_robots_count -= 1; } } } // Loop through the omega battle ability rewards and update the ability levels there too if (!empty($temp_battle_omega['battle_rewards_abilities'])) { foreach ($temp_battle_omega['battle_rewards_abilities'] as $key2 => $ability) { // Remove if this ability is already unlocked if (rpg_game::ability_unlocked($this_prototype_data['this_player_token'], false, $ability['token'])) { $this_unlock_abilities_count -= 1; } } } // Check to see if we should be adding a field star to this battle if ($temp_starforce_battle) { // Generate the necessary field star variables and add them to the battle data $temp_field_star = array(); $temp_field_star['star_name'] = $temp_battle_omega['battle_field_info']['field_name']; $temp_field_star['star_token'] = $temp_field_star_token; $temp_field_star['star_kind'] = 'fusion'; $temp_field_star['star_type'] = !empty($temp_battle_omega['battle_field_info']['field_type']) ? $temp_battle_omega['battle_field_info']['field_type'] : 'none'; $temp_field_star['star_type2'] = !empty($temp_battle_omega['battle_field_info']['field_type2']) ? $temp_battle_omega['battle_field_info']['field_type2'] : 'none'; $temp_field_star['star_field'] = $temp_option_field['field_token']; $temp_field_star['star_field2'] = $temp_option_field2['field_token']; $temp_field_star['star_player'] = $this_prototype_data['this_player_token']; $temp_field_star['star_date'] = time(); $temp_battle_omega['values']['field_star'] = $temp_field_star; $temp_battle_omega['battle_target_player']['player_starforce'] = array(); if ($temp_field_star['star_type'] == $temp_field_star['star_type2']) { $temp_battle_omega['battle_target_player']['player_starforce'][$temp_field_star['star_type']] = 2; } else { $temp_battle_omega['battle_target_player']['player_starforce'][$temp_field_star['star_type']] = 1; $temp_battle_omega['battle_target_player']['player_starforce'][$temp_field_star['star_type2']] = 1; } } // Check to see if we should be adding darkness to this battle if ($temp_darkness_battle) { // Generate the necessary dark tower variables and add them to the battle data $temp_battle_omega['flags']['dark_tower'] = true; } // Update the battle description based on what we've calculated $temp_description_target_robots = $temp_option_robot['robot_name'] . ' and ' . $temp_option_robot2['robot_name']; if (!empty($this_unlock_abilities_count)) { $temp_battle_omega['battle_description'] = 'Defeat ' . $temp_description_target_robots . ' and download their special weapons!'; $temp_battle_omega['battle_description2'] = 'Once we\'ve acquired them, we may be able to equip the abilities to other robots...'; } elseif (!empty($this_unlock_robots_count)) { $temp_battle_omega['battle_description'] = 'Defeat ' . $temp_description_target_robots . ' and download their robot data!'; $temp_battle_omega['battle_description2'] = 'If we use only Neutral type abilities on the targets we may be able to save them...'; } elseif ($temp_starforce_battle) { $temp_battle_omega['battle_description'] = 'Defeat the starforce boosted ' . $temp_description_target_robots . ' and collect their Fusion Star! '; $temp_battle_omega['battle_description2'] = 'The ' . ucfirst($temp_option_field['field_type']) . ' type energy appears to have attracted more robots to the field...'; } elseif ($temp_darkness_battle) { $temp_battle_omega['battle_description'] = 'Defeat the darkness boosted ' . $temp_description_target_robots . ' and destroy their Dark Tower! '; $temp_battle_omega['battle_description2'] = 'The negative energy appears to have attracted an army of dark elements to the field...'; } else { $temp_battle_omega['battle_description'] = 'Defeat ' . $temp_description_target_robots . '!'; } // If this battle has been completed already, decrease the points //if ($temp_battle_omega['battle_complete']){ $temp_battle_omega['battle_points'] = ceil($temp_battle_omega['battle_points'] * 0.10); } // Add some random item drops to the starter battle $temp_battle_omega['battle_rewards_items'] = array(); // Return the generated battle data return $temp_battle_omega; }
echo '<div style="padding: 20px 10px; background-color: rgba(' . implode(', ', $temp_player_colours[$temp_player_token]) . ', 0.1);">'; echo '<strong>' . $temp_player_token . ' phase-' . $temp_phase_loop . '</strong><br /><br />'; } if (!empty($temp_player_info['player_robots'])) { foreach ($temp_player_info['player_robots'] as $temp_robot_token => $temp_robot_info) { // Collect the original play and prepare the transfer abilities to them $temp_robot_info['original_player'] = !empty($temp_battle_settings[$temp_player_token]['player_robots'][$temp_robot_token]['original_player']) ? $temp_battle_settings[$temp_player_token]['player_robots'][$temp_robot_token]['original_player'] : $temp_player_token; if (EDIT_ROBOT_UPDATES_DEBUG) { echo '-- ' . $temp_robot_token . ' (' . $temp_robot_info['robot_level'] . ') (' . $temp_robot_info['original_player'] . ') (' . $temp_phase_loop . ')<br /><br />'; } if (!empty($temp_robot_info['robot_abilities'])) { foreach ($temp_robot_info['robot_abilities'] as $temp_ability_token => $temp_ability_info) { if (EDIT_ROBOT_UPDATES_DEBUG) { echo '---- ' . $temp_ability_token; } if (rpg_game::ability_unlocked($temp_robot_info['original_player'], false, $temp_ability_token)) { if (EDIT_ROBOT_UPDATES_DEBUG) { echo ' (unlocked!)'; } } else { if (EDIT_ROBOT_UPDATES_DEBUG) { echo ' (not unlocked!)'; } $temp_original_player_info = array('player_token' => $temp_robot_info['original_player']); rpg_game::unlock_ability($temp_original_player_info, false, $temp_ability_info); if (EDIT_ROBOT_UPDATES_DEBUG) { echo ' (but unlocked now!)'; } } if (EDIT_ROBOT_UPDATES_DEBUG) { echo '<br />';
$ability_counter = 0; if (!empty($ability_list_array)) { foreach ($ability_list_array as $token => $price) { $ability_info = $mmrpg_database_abilities[$token]; $ability_info_token = $token; $ability_info_price = $price; $ability_info_name = $ability_info['ability_name']; $ability_info_type = !empty($ability_info['ability_type']) ? $ability_info['ability_type'] : 'none'; if ($ability_info_type != 'none' && !empty($ability_info['ability_type2'])) { $ability_info_type .= '_' . $ability_info['ability_type2']; } elseif ($ability_info_type == 'none' && !empty($ability_info['ability_type2'])) { $ability_info_type = $ability_info['ability_type2']; } $ability_info_quantity = 0; $ability_info_unlocked = array(); if (rpg_game::ability_unlocked('', '', $token)) { $ability_info_quantity = 3; $ability_info_unlocked = array('dr-light', 'dr-wily', 'dr-cossack'); $ability_info_price = 0; } if (empty($ability_info['ability_flag_complete'])) { //$ability_info_name = '<del>'.$ability_info_name.'</del> '; $ability_info_quantity = -1; $ability_info_unlocked = array('coming-soon'); $ability_info_name = preg_replace('/[a-z0-9]/i', '?', $ability_info_name); $ability_info_price = 0; } $global_item_quantities[$ability_info_token] = $ability_info_quantity; $global_item_prices['buy'][$ability_info_token] = $ability_info_price; $temp_info_tooltip = !empty($ability_info['ability_flag_complete']) ? rpg_ability::print_editor_title_markup($robot_info, $ability_info) : 'Coming Soon! <br /> <span style="font-size:80%;">This ability is still in development and cannot be purchased yet. <br /> Apologies for the inconveinece, and please check back later!</span>'; $temp_info_tooltip = htmlentities($temp_info_tooltip, ENT_QUOTES, 'UTF-8', true);
$player_ability_rewards = $_SESSION[$session_token]['values']['battle_abilities']; } elseif (!empty($player_rewards['player_abilities'])) { $player_ability_rewards = array('buster-shot' => array('ability_token' => 'buster-shot')); } // Create a fake player and robot to pass the info check $player_info = $mmrpg_index['players']['player']; //rpg_player::get_index_info('player'); //array('player_token' => 'player', 'player_name' => 'Player'); $robot_info = rpg_robot::get_index_info('robot'); //array('robot_token' => 'robot', 'robot_name' => 'Robot'); // Sort the ability rewards based on ability number and such uasort($player_ability_rewards, array('rpg_functions', 'abilities_sort_for_editor')); $robot_ability_rewards = array(); // Collect the ability reward options to be used on all selects $ability_rewards_options = $global_allow_editing ? rpg_ability::print_editor_options_list_markup($player_ability_rewards, $robot_ability_rewards, $player_info, $robot_info) : ''; foreach ($mmrpg_database_abilities as $ability_token => $ability_info) { if (!rpg_game::ability_unlocked('', '', $ability_token)) { continue; } //if ($key_counter > 0 && $key_counter % 5 == 0){ echo '</tr><tr>'; } //echo '<td>'; $temp_select_markup = rpg_ability::print_editor_select_markup($ability_rewards_options, $player_info, $robot_info, $ability_info, $key_counter); //echo $ability_token.'<br />'; echo $temp_select_markup . ' '; //echo '</td>'; $key_counter++; } } //echo '</tr></table>'; echo '</div>'; if ($global_allow_editing) { ?>
public function trigger_disabled($target_robot, $this_ability, $trigger_options = array()) { // Pull in the global variable global $mmrpg_index; // Import global variables $db = cms_database::get_database(); $this_battle = rpg_battle::get_battle(); $this_field = rpg_field::get_field(); // Generate default trigger options if not set if (!isset($trigger_options['item_multiplier'])) { $trigger_options['item_multiplier'] = 1.0; } // If the battle has already ended, return false if (!empty($this_battle->flags['battle_complete_message_created'])) { return false; } // Create references to save time 'cause I'm tired // (rather than replace all target references to this references) $this_battle =& $this_battle; $this_player =& $this->player; // the player of the robot being disabled $this_robot =& $this; // the robot being disabled $target_player =& $target_robot->player; // the player of the other robot $target_robot =& $target_robot; // the other robot that isn't this one // If the target player is the same as the current or the target is dead if ($this_player->player_id == $target_player->player_id) { // Collect the actual target player from the battle values if (!empty($this_battle->values['players'])) { foreach ($this_battle->values['players'] as $id => $info) { if ($this_player->player_id != $id) { unset($target_player); $target_player = new rpg_player($info); } } } // Collect the actual target robot from the battle values if (!empty($target_player->values['robots_active'])) { foreach ($target_player->values['robots_active'] as $key => $info) { if ($info['robot_position'] == 'active') { $target_robot->robot_load($info); } } } } // Update the target player's session $this_player->update_session(); // Create the robot disabled event $disabled_text = in_array($this_robot->robot_token, array('dark-frag', 'dark-spire', 'dark-tower')) || $this_robot->robot_core == 'empty' ? 'destroyed' : 'disabled'; $event_header = ($this_player->player_token != 'player' ? $this_player->player_name . ''s ' : '') . $this_robot->robot_name; $event_body = ($this_player->player_token != 'player' ? $this_player->print_name() . ''s ' : 'The target ') . ' ' . $this_robot->print_name() . ' was ' . $disabled_text . '!<br />'; //'.($this_robot->robot_position == 'bench' ? ' and removed from battle' : '').' if (isset($this_robot->robot_quotes['battle_defeat'])) { $this_find = array('{target_player}', '{target_robot}', '{this_player}', '{this_robot}'); $this_replace = array($target_player->player_name, $target_robot->robot_name, $this_player->player_name, $this_robot->robot_name); $event_body .= $this_robot->print_quote('battle_defeat', $this_find, $this_replace); } if ($target_robot->robot_status != 'disabled') { $target_robot->robot_frame = 'base'; } $this_robot->robot_frame = 'defeat'; $target_robot->update_session(); $this_robot->update_session(); $this_battle->events_create($this_robot, $target_robot, $event_header, $event_body, array('console_show_target' => false, 'canvas_show_disabled_bench' => $this_robot->robot_id . '_' . $this_robot->robot_token)); /* * EFFORT VALUES / STAT BOOST BONUSES */ // Define the event options array $event_options = array(); $event_options['this_ability_results']['total_actions'] = 0; // Calculate the bonus boosts from defeating the target robot (if NOT player battle) if ($target_player->player_side == 'left' && $this_player->player_id == MMRPG_SETTINGS_TARGET_PLAYERID && $target_robot->robot_status != 'disabled') { // Boost this robot's attack if a boost is in order if (empty($target_robot->flags['robot_stat_max_attack'])) { $this_attack_boost = $this_robot->robot_base_attack / 100; //ceil($this_robot->robot_base_attack / 100); if ($this_robot->robot_class == 'mecha') { $this_attack_boost = $this_attack_boost / 2; } if ($target_player->player_side == 'left' && $target_robot->robot_class == 'mecha') { $this_attack_boost = $this_attack_boost * 2; } if ($target_robot->robot_attack + $this_attack_boost > MMRPG_SETTINGS_STATS_MAX) { $this_attack_overboost = (MMRPG_SETTINGS_STATS_MAX - $target_robot->robot_attack) * -1; $this_attack_boost = $this_attack_boost - $this_attack_overboost; } $this_attack_boost = round($this_attack_boost); } else { $this_attack_boost = 0; } // Boost this robot's defense if a boost is in order if (empty($target_robot->flags['robot_stat_max_defense'])) { $this_defense_boost = $this_robot->robot_base_defense / 100; //ceil($this_robot->robot_base_defense / 100); if ($this_robot->robot_class == 'mecha') { $this_defense_boost = $this_defense_boost / 2; } if ($target_player->player_side == 'left' && $target_robot->robot_class == 'mecha') { $this_defense_boost = $this_defense_boost * 2; } if ($target_robot->robot_defense + $this_defense_boost > MMRPG_SETTINGS_STATS_MAX) { $this_defense_overboost = (MMRPG_SETTINGS_STATS_MAX - $target_robot->robot_defense) * -1; $this_defense_boost = $this_defense_boost - $this_defense_overboost; } $this_defense_boost = round($this_defense_boost); } else { $this_defense_boost = 0; } // Boost this robot's speed if a boost is in order if (empty($target_robot->flags['robot_stat_max_speed'])) { $this_speed_boost = $this_robot->robot_base_speed / 100; //ceil($this_robot->robot_base_speed / 100); if ($this_robot->robot_class == 'mecha') { $this_speed_boost = $this_speed_boost / 2; } if ($target_player->player_side == 'left' && $target_robot->robot_class == 'mecha') { $this_speed_boost = $this_speed_boost * 2; } if ($target_robot->robot_speed + $this_speed_boost > MMRPG_SETTINGS_STATS_MAX) { $this_speed_overboost = (MMRPG_SETTINGS_STATS_MAX - $target_robot->robot_speed) * -1; $this_speed_boost = $this_speed_boost - $this_speed_overboost; } $this_speed_boost = round($this_speed_boost); } else { $this_speed_boost = 0; } // If the target robot is holding a Growth Module, double the stat bonuses if ($target_robot->robot_item == 'growth-module') { if (!$this_attack_boost) { $this_attack_boost = $this_attack_boost * 2; } if (!$this_defense_boost) { $this_defense_boost = $this_defense_boost * 2; } if (!$this_speed_boost) { $this_speed_boost = $this_speed_boost * 2; } } // Define the temporary boost actions counter $temp_boost_actions = 1; // Increase reward if there are any pending stat boosts and clear session if ($target_player->player_side == 'left' && ($target_robot->robot_level == 100 && $target_robot->robot_class == 'master') && $target_robot->robot_base_attack < MMRPG_SETTINGS_STATS_MAX) { if (!empty($_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_attack_pending'])) { $this_attack_boost += $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_attack_pending']; $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_attack_pending'] = 0; } } // Increase reward if there are any pending stat boosts and clear session if ($target_player->player_side == 'left' && ($target_robot->robot_level == 100 && $target_robot->robot_class == 'master') && $target_robot->robot_base_defense < MMRPG_SETTINGS_STATS_MAX) { if (!empty($_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_defense_pending'])) { $this_defense_boost += $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_defense_pending']; $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_defense_pending'] = 0; } } // Increase reward if there are any pending stat boosts and clear session if ($target_player->player_side == 'left' && ($target_robot->robot_level == 100 && $target_robot->robot_class == 'master') && $target_robot->robot_base_speed < MMRPG_SETTINGS_STATS_MAX) { if (!empty($_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_speed_pending'])) { $this_speed_boost += $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_speed_pending']; $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_speed_pending'] = 0; } } // If the attack boost was not empty, process it if ($this_attack_boost > 0) { // If the robot is under level 100, stat boosts are pending if ($target_player->player_side == 'left' && $target_robot->robot_level < 100 && $target_robot->robot_class == 'master') { // Update the session variables with the pending stat boost if (empty($_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_attack_pending'])) { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_attack_pending'] = 0; } $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_attack_pending'] += $this_attack_boost; } elseif ($target_player->player_side == 'left' && ($target_robot->robot_level == 100 && $target_robot->robot_class == 'master' || $target_robot->robot_class == 'mecha') && $target_robot->robot_base_attack < MMRPG_SETTINGS_STATS_MAX) { // Define the base attack boost based on robot base stats $temp_attack_boost = ceil($this_attack_boost); // If this action would boost the robot over their stat limits if ($temp_attack_boost + $target_robot->robot_attack > MMRPG_SETTINGS_STATS_MAX) { $temp_attack_boost = MMRPG_SETTINGS_STATS_MAX - $target_robot->robot_attack; } // Increment this robot's attack by the calculated amount and display an event $target_robot->robot_attack = ceil($target_robot->robot_attack + $temp_attack_boost); $target_robot->robot_base_attack = ceil($target_robot->robot_base_attack + $temp_attack_boost); $event_options = array(); $event_options['this_ability_results']['trigger_kind'] = 'recovery'; $event_options['this_ability_results']['recovery_kind'] = 'attack'; $event_options['this_ability_results']['recovery_type'] = ''; $event_options['this_ability_results']['flag_affinity'] = true; $event_options['this_ability_results']['flag_critical'] = true; $event_options['this_ability_results']['this_amount'] = $temp_attack_boost; $event_options['this_ability_results']['this_result'] = 'success'; $event_options['this_ability_results']['total_actions'] = $temp_boost_actions++; $event_options['this_ability_user'] = $this->robot_id . '_' . $this->robot_token; $event_options['this_ability_target'] = $target_robot->robot_id . '_' . $target_robot->robot_token; $event_options['console_show_target'] = false; $event_body = $target_robot->print_name() . ' downloads weapons data from the target robot! '; $event_body .= '<br />'; $event_body .= $target_robot->print_name() . ''s attack grew by <span class="recovery_amount">' . $temp_attack_boost . '</span>! '; $target_robot->robot_frame = 'shoot'; $target_robot->update_session(); $target_player->update_session(); $this_battle->events_create($target_robot, $this_robot, $event_header, $event_body, $event_options); // Update the session variables with the rewarded stat boost if not mecha if ($target_robot->robot_class == 'master') { if (empty($_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_attack'])) { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_attack'] = 0; } $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_attack'] = ceil($_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_attack']); $temp_attack_session_boost = round($this_attack_boost); if ($temp_attack_session_boost < 1) { $temp_attack_session_boost = 1; } $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_attack'] += $temp_attack_session_boost; } } } // If the defense boost was not empty, process it if ($this_defense_boost > 0) { // If the robot is under level 100, stat boosts are pending if ($target_player->player_side == 'left' && $target_robot->robot_level < 100 && $target_robot->robot_class == 'master') { // Update the session variables with the pending stat boost if (empty($_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_defense_pending'])) { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_defense_pending'] = 0; } $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_defense_pending'] += $this_defense_boost; } elseif ($target_player->player_side == 'left' && ($target_robot->robot_level == 100 && $target_robot->robot_class == 'master' || $target_robot->robot_class == 'mecha') && $target_robot->robot_base_defense < MMRPG_SETTINGS_STATS_MAX) { // Define the base defense boost based on robot base stats $temp_defense_boost = ceil($this_defense_boost); // If this action would boost the robot over their stat limits if ($temp_defense_boost + $target_robot->robot_defense > MMRPG_SETTINGS_STATS_MAX) { $temp_defense_boost = MMRPG_SETTINGS_STATS_MAX - $target_robot->robot_defense; } // Increment this robot's defense by the calculated amount and display an event $target_robot->robot_defense = ceil($target_robot->robot_defense + $temp_defense_boost); $target_robot->robot_base_defense = ceil($target_robot->robot_base_defense + $temp_defense_boost); $event_options = array(); $event_options['this_ability_results']['trigger_kind'] = 'recovery'; $event_options['this_ability_results']['recovery_kind'] = 'defense'; $event_options['this_ability_results']['recovery_type'] = ''; $event_options['this_ability_results']['flag_affinity'] = true; $event_options['this_ability_results']['flag_critical'] = true; $event_options['this_ability_results']['this_amount'] = $temp_defense_boost; $event_options['this_ability_results']['this_result'] = 'success'; $event_options['this_ability_results']['total_actions'] = $temp_boost_actions++; $event_options['this_ability_user'] = $this->robot_id . '_' . $this->robot_token; $event_options['this_ability_target'] = $target_robot->robot_id . '_' . $target_robot->robot_token; $event_options['console_show_target'] = false; $event_body = $target_robot->print_name() . ' downloads shield data from the target robot! '; $event_body .= '<br />'; $event_body .= $target_robot->print_name() . ''s defense grew by <span class="recovery_amount">' . $temp_defense_boost . '</span>! '; $target_robot->robot_frame = 'defend'; $target_robot->update_session(); $target_player->update_session(); $this_battle->events_create($target_robot, $this_robot, $event_header, $event_body, $event_options); // Update the session variables with the rewarded stat boost if not mecha if ($target_robot->robot_class == 'master') { if (empty($_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_defense'])) { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_defense'] = 0; } $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_defense'] = ceil($_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_defense']); $temp_defense_session_boost = round($this_defense_boost); if ($temp_defense_session_boost < 1) { $temp_defense_session_boost = 1; } $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_defense'] += $temp_defense_session_boost; } } } // If the speed boost was not empty, process it if ($this_speed_boost > 0) { // If the robot is under level 100, stat boosts are pending if ($target_player->player_side == 'left' && $target_robot->robot_level < 100 && $target_robot->robot_class == 'master') { // Update the session variables with the pending stat boost if (empty($_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_speed_pending'])) { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_speed_pending'] = 0; } $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_speed_pending'] += $this_speed_boost; } elseif ($target_player->player_side == 'left' && ($target_robot->robot_level == 100 && $target_robot->robot_class == 'master' || $target_robot->robot_class == 'mecha') && $target_robot->robot_base_speed < MMRPG_SETTINGS_STATS_MAX) { // Define the base speed boost based on robot base stats $temp_speed_boost = ceil($this_speed_boost); // If this action would boost the robot over their stat limits if ($temp_speed_boost + $target_robot->robot_speed > MMRPG_SETTINGS_STATS_MAX) { $temp_speed_boost = MMRPG_SETTINGS_STATS_MAX - $target_robot->robot_speed; } // Increment this robot's speed by the calculated amount and display an event $target_robot->robot_speed = ceil($target_robot->robot_speed + $temp_speed_boost); $target_robot->robot_base_speed = ceil($target_robot->robot_base_speed + $temp_speed_boost); $event_options = array(); $event_options['this_ability_results']['trigger_kind'] = 'recovery'; $event_options['this_ability_results']['recovery_kind'] = 'speed'; $event_options['this_ability_results']['recovery_type'] = ''; $event_options['this_ability_results']['flag_affinity'] = true; $event_options['this_ability_results']['flag_critical'] = true; $event_options['this_ability_results']['this_amount'] = $temp_speed_boost; $event_options['this_ability_results']['this_result'] = 'success'; $event_options['this_ability_results']['total_actions'] = $temp_boost_actions++; $event_options['this_ability_user'] = $this->robot_id . '_' . $this->robot_token; $event_options['this_ability_target'] = $target_robot->robot_id . '_' . $target_robot->robot_token; $event_options['console_show_target'] = false; $event_body = $target_robot->print_name() . ' downloads mobility data from the target robot! '; $event_body .= '<br />'; $event_body .= $target_robot->print_name() . ''s speed grew by <span class="recovery_amount">' . $temp_speed_boost . '</span>! '; $target_robot->robot_frame = 'slide'; $target_robot->update_session(); $target_player->update_session(); $this_battle->events_create($target_robot, $this_robot, $event_header, $event_body, $event_options); // Update the session variables with the rewarded stat boost if not mecha if ($target_robot->robot_class == 'master') { if (empty($_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_speed'])) { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_speed'] = 0; } $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_speed'] = ceil($_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_speed']); $temp_speed_session_boost = round($this_speed_boost); if ($temp_speed_session_boost < 1) { $temp_speed_session_boost = 1; } $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$target_robot->robot_token]['robot_speed'] += $temp_speed_session_boost; } } } // Update the target robot frame $target_robot->robot_frame = 'base'; $target_robot->update_session(); } // Ensure player and robot variables are updated $target_robot->update_session(); $target_player->update_session(); $this_robot->update_session(); $this_player->update_session(); /* // DEBUG $this_battle->events_create(false, false, 'DEBUG', 'we made it past the stat boosts... <br />'. '$this_robot->robot_token='.$this_robot->robot_token.'; $target_robot->robot_token='.$target_robot->robot_token.';<br />'. '$target_player->player_token='.$target_player->player_token.'; $target_player->player_side='.$target_player->player_side.';<br />' ); */ /* * ITEM REWARDS / EXPERIENCE POINTS / LEVEL UP * Reward the player and robots with items and experience if not in demo mode */ if ($target_player->player_side == 'left' && $this_player->player_id == MMRPG_SETTINGS_TARGET_PLAYERID && rpg_game::is_user()) { // -- EXPERIENCE POINTS / LEVEL UP -- // // Filter out robots who were active in this battle in at least some way $temp_robots_active = $target_player->values['robots_active']; usort($temp_robots_active, array('rpg_functions', 'robot_sort_by_active')); // Define the boost multiplier and start out at zero $temp_boost_multiplier = 0; // DEBUG //$event_body = preg_replace('/\s+/', ' ', $this_robot->robot_token.' : $this_robot->counters = <pre>'.print_r($this_robot->counters, true).'</pre>'); //$this_battle->events_create(false, false, 'DEBUG', $event_body); // If the target has had any damage flags triggered, update the multiplier //if ($this_robot->flags['triggered_immunity']){ $temp_boost_multiplier += 0; } //if (!empty($this_robot->flags['triggered_resistance'])){ $temp_boost_multiplier -= $this_robot->counters['triggered_resistance'] * 0.10; } //if (!empty($this_robot->flags['triggered_affinity'])){ $temp_boost_multiplier -= $this_robot->counters['triggered_affinity'] * 0.10; } //if (!empty($this_robot->flags['triggered_weakness'])){ $temp_boost_multiplier += $this_robot->counters['triggered_weakness'] * 0.10; } //if (!empty($this_robot->flags['triggered_critical'])){ $temp_boost_multiplier += $this_robot->counters['triggered_critical'] * 0.10; } // If we're in DEMO mode, give a 100% experience boost //if (rpg_game::is_demo()){ $temp_boost_multiplier += 1; } // Ensure the multiplier has not gone below 100% if ($temp_boost_multiplier < -0.99) { $temp_boost_multiplier = -0.99; } elseif ($temp_boost_multiplier > 0.99) { $temp_boost_multiplier = 0.99; } // Define the boost text to match the multiplier $temp_boost_text = ''; if ($temp_boost_multiplier < 0) { $temp_boost_text = 'a lowered '; } elseif ($temp_boost_multiplier > 0) { $temp_boost_text = 'a boosted '; } /* $event_body = preg_replace('/\s+/', ' ', $this_robot->robot_token.'<pre>'.print_r($this_robot->flags, true).'</pre>'); //$this_battle->events_create(false, false, 'DEBUG', $event_body); $event_body = preg_replace('/\s+/', ' ', $target_robot->robot_token.'<pre>'.print_r($target_robot->flags, true).'</pre>'); //$this_battle->events_create(false, false, 'DEBUG', $event_body); */ // Define the base experience for the target robot $temp_experience = $this_robot->robot_base_energy + $this_robot->robot_base_attack + $this_robot->robot_base_defense + $this_robot->robot_base_speed; // DEBUG //$event_body = preg_replace('/\s+/', ' ', $this_robot->robot_token.' : $temp_boost_multiplier = '.$temp_boost_multiplier.'; $temp_experience = '.$temp_experience.'; '); //$this_battle->events_create(false, false, 'DEBUG_'.__LINE__, $event_body); // Apply any boost multipliers to the experience earned if ($temp_boost_multiplier > 0 || $temp_boost_multiplier < 0) { $temp_experience += $temp_experience * $temp_boost_multiplier; } if ($temp_experience <= 0) { $temp_experience = 1; } $temp_experience = round($temp_experience); $temp_target_experience = array('level' => $this_robot->robot_level, 'experience' => $temp_experience); // DEBUG //$event_body = preg_replace('/\s+/', ' ', $this_robot->robot_token.' : $temp_target_experience = <pre>'.print_r($temp_target_experience, true).'</pre>'); //$this_battle->events_create(false, false, 'DEBUG', $event_body); // Define the robot experience level and start at zero $target_robot_experience = 0; // Sort the active robots based on active or not /* function mmrpg_sort_temp_active_robots($info1, $info2){ if ($info1['robot_position'] == 'active'){ return -1; } else { return 1; } } usort($temp_robots_active, 'mmrpg_sort_temp_active_robots'); */ // If the target was defeated with overkill, add it to the battle var if (!empty($this_robot->counters['defeat_overkill'])) { $overkill_bonus = $this_robot->counters['defeat_overkill']; //$overkill_bonus = $overkill_bonus - ceil($overkill_bonus * 0.90); //$overkill_divider = $target_robot->robot_level >= 100 ? 0.01 : (100 - $target_robot->robot_level) / 100; //$overkill_bonus = floor($overkill_bonus * $overkill_divider); //$this_battle->events_create(false, false, 'DEBUG', '<pre>'.preg_replace('/\s+/', ' ', print_r(array('$this_battle->battle_overkill' => $this_battle->battle_overkill, '$this_battle->battle_rewards_zenny' => $this_battle->battle_rewards_zenny), true)).'</pre>', $event_options); //$this_battle->events_create(false, false, 'DEBUG', '<pre>'.preg_replace('/\s+/', ' ', print_r(array('$overkill_bonus' => $overkill_bonus), true)).'</pre>', $event_options); //$this_battle->events_create(false, false, 'DEBUG', '<pre>'.preg_replace('/\s+/', ' ', print_r(array('$this_robot->robot_base_total' => $this_robot->robot_base_total, '$target_robot->robot_base_total' => $target_robot->robot_base_total), true)).'</pre>', $event_options); //if ($target_robot->robot_base_total > $this_robot->robot_base_total){ $overkill_bonus = floor($overkill_bonus * ($this_robot->robot_base_total / $target_robot->robot_base_total)); } //elseif ($target_robot->robot_base_total < $this_robot->robot_base_total){ $overkill_bonus = floor($overkill_bonus * ($target_robot->robot_base_total / $this_robot->robot_base_total)); } //$this_battle->events_create(false, false, 'DEBUG', '<pre>'.preg_replace('/\s+/', ' ', print_r(array('$overkill_bonus' => $overkill_bonus), true)).'</pre>', $event_options); $this_battle->battle_overkill += $this_robot->counters['defeat_overkill']; if (empty($this_battle->flags['starter_battle'])) { $this_battle->battle_rewards_zenny += $overkill_bonus; } $this_battle->update_session(); //$this_battle->events_create(false, false, 'DEBUG', '<pre>'.preg_replace('/\s+/', ' ', print_r(array('$this_battle->battle_overkill' => $this_battle->battle_overkill, '$this_battle->battle_rewards_zenny' => $this_battle->battle_rewards_zenny), true)).'</pre>', $event_options); } // Increment each of this player's robots $temp_robots_active_num = count($temp_robots_active); $temp_robots_active_num2 = $temp_robots_active_num; // This will be decremented for each non-experience gaining level 100 robots $temp_robots_active = array_reverse($temp_robots_active, true); usort($temp_robots_active, array('rpg_functions', 'robot_sort_by_active')); $temp_robot_active_position = false; foreach ($temp_robots_active as $temp_id => $temp_info) { $temp_robot = $target_robot->robot_id == $temp_info['robot_id'] ? $target_robot : new rpg_robot($target_player, $temp_info); if ($temp_robot->robot_level >= 100 || $temp_robot->robot_class != 'master') { $temp_robots_active_num2--; } if ($temp_robot->robot_position == 'active') { $temp_robot_active_position = $temp_robots_active[$temp_id]; unset($temp_robots_active[$temp_id]); } } $temp_unshift = array_unshift($temp_robots_active, $temp_robot_active_position); foreach ($temp_robots_active as $temp_id => $temp_info) { // Collect or define the robot points and robot rewards variables $temp_robot = $target_robot->robot_id == $temp_info['robot_id'] ? $target_robot : new rpg_robot($target_player, $temp_info); //if ($temp_robot->robot_class == 'mecha'){ continue; } $temp_robot_token = $temp_info['robot_token']; if ($temp_robot_token == 'robot') { continue; } $temp_robot_experience = rpg_game::robot_experience($target_player->player_token, $temp_info['robot_token']); $temp_robot_rewards = !empty($temp_info['robot_rewards']) ? $temp_info['robot_rewards'] : array(); if (empty($temp_robots_active_num2)) { break; } // Continue if over already at level 100 //if ($temp_robot->robot_level >= 100){ continue; } // Reset the robot experience points to zero $target_robot_experience = 0; // Continue with experience mods only if under level 100 if ($temp_robot->robot_level < 100 && $temp_robot->robot_class == 'master') { // Give a proportionate amount of experience based on this and the target robot's levels if ($temp_robot->robot_level == $temp_target_experience['level']) { $temp_experience_boost = $temp_target_experience['experience']; } elseif ($temp_robot->robot_level < $temp_target_experience['level']) { $temp_experience_boost = $temp_target_experience['experience'] + round(($temp_target_experience['level'] - $temp_robot->robot_level) / 100 * $temp_target_experience['experience']); //$temp_experience_boost = $temp_target_experience['experience'] + ((($temp_target_experience['level']) / $temp_robot->robot_level) * $temp_target_experience['experience']); } elseif ($temp_robot->robot_level > $temp_target_experience['level']) { $temp_experience_boost = $temp_target_experience['experience'] - round(($temp_robot->robot_level - $temp_target_experience['level']) / 100 * $temp_target_experience['experience']); //$temp_experience_boost = $temp_target_experience['experience'] - ((($temp_robot->robot_level - $temp_target_experience['level']) / 100) * $temp_target_experience['experience']); } // DEBUG //$event_body = 'START EXPERIENCE | '; //$event_body .= preg_replace('/\s+/', ' ', $this_robot->robot_token.' : $temp_experience_boost = '.$temp_experience_boost.'; $target_robot_experience = '.$target_robot_experience.'; '); //$this_battle->events_create(false, false, 'DEBUG', $event_body); //$temp_experience_boost = ceil($temp_experience_boost / 10); $temp_experience_boost = ceil($temp_experience_boost / $temp_robots_active_num); //$temp_experience_boost = ceil($temp_experience_boost / ($temp_robots_active_num * 2)); //$temp_experience_boost = ceil($temp_experience_boost / ($temp_robots_active_num2 * 2)); //$temp_experience_boost = ceil(($temp_experience_boost / $temp_robots_active_num2) * 1.00); if ($temp_experience_boost > MMRPG_SETTINGS_STATS_MAX) { $temp_experience_boost = MMRPG_SETTINGS_STATS_MAX; } $target_robot_experience += $temp_experience_boost; // DEBUG //$event_body = 'ACTIVE ROBOT DIVISION | '; //$event_body .= preg_replace('/\s+/', ' ', $this_robot->robot_token.' : $temp_experience_boost = '.$temp_experience_boost.'; $target_robot_experience = '.$target_robot_experience.'; $temp_robots_active_num = '.$temp_robots_active_num.'; $temp_robots_active_num2 = '.$temp_robots_active_num2.'; '); //$this_battle->events_create(false, false, 'DEBUG', $event_body); // If this robot has been traded, give it an additional experience boost $temp_experience_boost = 0; $temp_robot_boost_text = $temp_boost_text; $temp_player_boosted = false; if ($temp_robot->player_token != $temp_robot->robot_original_player) { $temp_player_boosted = true; $temp_robot_boost_text = 'a player boosted '; $temp_experience_bak = $target_robot_experience; $target_robot_experience = $target_robot_experience * 2; $temp_experience_boost = $target_robot_experience - $temp_experience_bak; // DEBUG //$event_body = 'PLAYER BOOSTED | '; //$event_body .= preg_replace('/\s+/', ' ', $this_robot->robot_token.' : $temp_experience_boost = '.$temp_experience_boost.'; $target_robot_experience = '.$target_robot_experience.'; $temp_robot->player_token('.$temp_robot->player_token.') != $temp_robot->robot_original_player('.$temp_robot->robot_original_player.'); '); //$this_battle->events_create(false, false, 'DEBUG', $event_body); } // If the target robot is holding a Growth Module, double the experience bonus if ($temp_robot->robot_item == 'growth-module') { $temp_robot_boost_text = $temp_player_boosted ? 'a player and module boosted ' : 'a module boosted '; $temp_experience_bak = $target_robot_experience; $target_robot_experience = $target_robot_experience * 2; $temp_experience_boost = $target_robot_experience - $temp_experience_bak; // DEBUG //$event_body = 'MODULE BOOSTED | '; //$event_body .= preg_replace('/\s+/', ' ', $this_robot->robot_token.' : $temp_experience_boost = '.$temp_experience_boost.'; $target_robot_experience = '.$target_robot_experience.'; $temp_robot->robot_item = '.$temp_robot->robot_item.'; '); //$this_battle->events_create(false, false, 'DEBUG', $event_body); } // If there are field multipliers in place, apply them now $temp_experience_boost = 0; if (isset($this->field->field_multipliers['experience'])) { //$temp_robot_boost_text = '(and '.$target_robot_experience.' multiplied by '.number_format($this->field->field_multipliers['experience'], 1).') '; $temp_experience_bak = $target_robot_experience; $target_robot_experience = ceil($target_robot_experience * $this->field->field_multipliers['experience']); $temp_experience_boost = $target_robot_experience - $temp_experience_bak; } // DEBUG //$event_body = 'FIELD MULTIPLIERS | '; //$event_body .= preg_replace('/\s+/', ' ', $this_robot->robot_token.' : $temp_experience_boost = '.$temp_experience_boost.'; $target_robot_experience = '.$target_robot_experience.'; '); //$this_battle->events_create(false, false, 'DEBUG', $event_body); /* // If this robot has any overkill, add that to the temp experience modifier $temp_experience_boost = 0; if (!empty($this_robot->counters['defeat_overkill'])){ if (empty($temp_robot_boost_text)){ $temp_robot_boost_text = 'an overkill boosted '; } else { $temp_robot_boost_text = 'a player and overkill boosted '; } $temp_experience_bak = $target_robot_experience; $target_robot_experience += ceil($this_robot->counters['defeat_overkill'] / $temp_robots_active_num2); $temp_experience_boost = $target_robot_experience - $temp_experience_bak; //$this_battle->battle_overkill += $this_robot->counters['defeat_overkill']; //$this_battle->update_session(); //$temp_robot_boost_text .= 'umm '.$this_battle->battle_overkill; } */ // DEBUG //$event_body = 'OVERKILL BONUS | '; //$event_body .= preg_replace('/\s+/', ' ', $this_robot->robot_token.' : $temp_experience_boost = '.$temp_experience_boost.'; $target_robot_experience = '.$target_robot_experience.'; '); //$this_battle->events_create(false, false, 'DEBUG', $event_body); /* // If the target robot's core type has been boosted by starforce if (!empty($temp_robot->robot_core) && !empty($_SESSION['GAME']['values']['star_force'][$temp_robot->robot_core])){ if (empty($temp_robot_boost_text)){ $temp_robot_boost_text = 'a starforce boosted '; } elseif ($temp_robot_boost_text == 'an overkill boosted '){ $temp_robot_boost_text = 'an overkill and starforce boosted '; } elseif ($temp_robot_boost_text == 'a player boosted '){ $temp_robot_boost_text = 'a player and starforce boosted '; } else { $temp_robot_boost_text = 'a player, overkill, and starforce boosted '; } $temp_starforce = $_SESSION['GAME']['values']['star_force'][$temp_robot->robot_core]; $temp_experience_bak = $target_robot_experience; $target_robot_experience += ceil($target_robot_experience * ($temp_starforce / 10)); $temp_experience_boost = $target_robot_experience - $temp_experience_bak; } */ // DEBUG //$event_body = 'STARFORCE BONUS | '; //$event_body .= preg_replace('/\s+/', ' ', $temp_robot->robot_token.' : '.$temp_robot->robot_core.' : $temp_experience_boost = '.$temp_experience_boost.'; $target_robot_experience = '.$target_robot_experience.'; '); //$this_battle->events_create(false, false, 'DEBUG', $event_body); // If the experience is greater then the max, level it off at the max (sorry guys!) if ($target_robot_experience > MMRPG_SETTINGS_STATS_MAX) { $target_robot_experience = MMRPG_SETTINGS_STATS_MAX; } if ($target_robot_experience < MMRPG_SETTINGS_STATS_MIN) { $target_robot_experience = MMRPG_SETTINGS_STATS_MIN; } // Collect the robot's current experience and level for reference later $temp_start_experience = rpg_game::robot_experience($target_player->player_token, $temp_robot_token); $temp_start_level = rpg_game::robot_level($target_player->player_token, $temp_robot_token); // Increment this robots's points total with the battle points if (!isset($_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot_token]['robot_level'])) { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot_token]['robot_level'] = 1; } if (!isset($_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot_token]['robot_experience'])) { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot_token]['robot_experience'] = 0; } $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot_token]['robot_experience'] += $target_robot_experience; // Define the new experience for this robot $temp_required_experience = rpg_prototype::calculate_experience_required($temp_robot->robot_level); $temp_new_experience = rpg_game::robot_experience($target_player->player_token, $temp_info['robot_token']); // If the new experience is over the required, level up the robot $level_boost = 0; if ($temp_new_experience > $temp_required_experience) { //$level_boost = floor($temp_new_experience / $temp_required_experience); while ($temp_new_experience > $temp_required_experience) { $level_boost += 1; $temp_new_experience -= $temp_required_experience; $temp_required_experience = rpg_prototype::calculate_experience_required($temp_robot->robot_level + $level_boost); } $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot_token]['robot_level'] += $level_boost; $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot_token]['robot_experience'] = $temp_new_experience; //$level_boost * $temp_required_experience; if ($_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot_token]['robot_level'] > 100) { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot_token]['robot_level'] = 100; } $temp_new_experience = rpg_game::robot_experience($target_player->player_token, $temp_info['robot_token']); } // Define the new level for this robot $temp_new_level = rpg_game::robot_level($target_player->player_token, $temp_robot_token); } else { // Collect the robot's current experience and level for reference later $temp_start_experience = rpg_game::robot_experience($target_player->player_token, $temp_robot_token); $temp_start_level = rpg_game::robot_level($target_player->player_token, $temp_robot_token); // Define the new experience for this robot $temp_new_experience = $temp_start_experience; $temp_new_level = $temp_start_level; } // Define the event options $event_options = array(); $event_options['this_ability_results']['trigger_kind'] = 'recovery'; $event_options['this_ability_results']['recovery_kind'] = 'experience'; $event_options['this_ability_results']['recovery_type'] = ''; $event_options['this_ability_results']['this_amount'] = $target_robot_experience; $event_options['this_ability_results']['this_result'] = 'success'; $event_options['this_ability_results']['flag_affinity'] = true; $event_options['this_ability_results']['total_actions'] = 1; $event_options['this_ability_user'] = $this->robot_id . '_' . $this->robot_token; $event_options['this_ability_target'] = $temp_robot->robot_id . '_' . $temp_robot->robot_token; // Update player/robot frames and points for the victory $temp_robot->robot_frame = 'victory'; $temp_robot->robot_level = $temp_new_level; $temp_robot->robot_experience = $temp_new_experience; $target_player->set_frame('victory'); $temp_robot->update_session(); // Only display the event if the player is under level 100 if ($temp_robot->robot_level < 100 && $temp_robot->robot_class == 'master') { // Display the win message for this robot with battle points $temp_robot->robot_frame = 'taunt'; $temp_robot->robot_level = $temp_new_level; if ($temp_start_level != $temp_new_level) { $temp_robot->robot_experience = rpg_prototype::calculate_experience_required($temp_robot->robot_level); } $target_player->set_frame('victory'); $event_header = $temp_robot->robot_name . ''s Rewards'; $event_multiplier_text = $temp_robot_boost_text; $event_body = $temp_robot->print_name() . ' collects ' . $event_multiplier_text . '<span class="recovery_amount ability_type ability_type_cutter">' . $target_robot_experience . '</span> experience points! '; $event_body .= '<br />'; if (isset($temp_robot->robot_quotes['battle_victory'])) { $this_find = array('{target_player}', '{target_robot}', '{this_player}', '{this_robot}'); $this_replace = array($this_player->player_name, $this_robot->robot_name, $target_player->player_name, $temp_robot->robot_name); $event_body .= $temp_robot->print_quote('battle_victory', $this_find, $this_replace); } //$event_options = array(); $event_options['console_show_target'] = false; $event_options['this_header_float'] = $event_options['this_body_float'] = $target_player->player_side; $temp_robot->update_session(); $this_battle->events_create($temp_robot, $this_robot, $event_header, $event_body, $event_options); if ($temp_start_level != $temp_new_level) { $temp_robot->robot_experience = $temp_new_experience; } if ($temp_robot->robot_core == 'copy') { $temp_robot->robot_image = $temp_robot->robot_base_image; $temp_robot->robot_image_overlay = array(); } $temp_robot->update_session(); $target_player->update_session(); } // Floor the robot's experience with or without the event $target_player->set_frame('victory'); $temp_robot->robot_frame = 'base'; if ($temp_start_level != $temp_new_level) { $temp_robot->robot_experience = 0; } $temp_robot->update_session(); // If the level has been boosted, display the stat increases if ($temp_start_level != $temp_new_level) { // Define the event options $event_options = array(); $event_options['this_ability_results']['trigger_kind'] = 'recovery'; $event_options['this_ability_results']['recovery_kind'] = 'level'; $event_options['this_ability_results']['recovery_type'] = ''; $event_options['this_ability_results']['flag_affinity'] = true; $event_options['this_ability_results']['flag_critical'] = true; $event_options['this_ability_results']['this_amount'] = $temp_new_level - $temp_start_level; $event_options['this_ability_results']['this_result'] = 'success'; $event_options['this_ability_results']['total_actions'] = 2; $event_options['this_ability_user'] = $this->robot_id . '_' . $this->robot_token; $event_options['this_ability_target'] = $temp_robot->robot_id . '_' . $temp_robot->robot_token; // Display the win message for this robot with battle points $temp_robot->robot_frame = 'taunt'; $temp_robot->robot_level = $temp_new_level; if ($temp_start_level != $temp_new_level) { $temp_robot->robot_experience = rpg_prototype::calculate_experience_required($temp_robot->robot_level); } else { $temp_robot->robot_experience = $temp_new_experience; } $target_player->set_frame('victory'); $event_header = $temp_robot->robot_name . ''s Rewards'; //$event_body = $temp_robot->print_name().' grew to <span class="recovery_amount'.($temp_new_level >= 100 ? ' ability_type ability_type_electric' : '').'">Level '.$temp_new_level.'</span>!<br /> '; $event_body = $temp_robot->print_name() . ' grew to <span class="recovery_amount ability_type ability_type_level">Level ' . $temp_new_level . ($temp_new_level >= 100 ? ' ★' : '') . '</span>!<br /> '; $event_body .= $temp_robot->robot_name . ''s energy, weapons, shields, and mobility were upgraded!'; //$event_options = array(); $event_options['console_show_target'] = false; $event_options['this_header_float'] = $event_options['this_body_float'] = $target_player->player_side; $temp_robot->update_session(); $this_battle->events_create($temp_robot, $this_robot, $event_header, $event_body, $event_options); $temp_robot->robot_experience = 0; $temp_robot->update_session(); // Collect the base robot template from the index for calculations $temp_index_robot = rpg_robot::get_index_info($temp_robot->robot_token); // Define the event options $event_options['this_ability_results']['trigger_kind'] = 'recovery'; $event_options['this_ability_results']['recovery_type'] = ''; $event_options['this_ability_results']['this_amount'] = $this_defense_boost; $event_options['this_ability_results']['this_result'] = 'success'; $event_options['this_ability_results']['total_actions'] = 0; $event_options['this_ability_user'] = $this->robot_id . '_' . $this->robot_token; $event_options['this_ability_target'] = $temp_robot->robot_id . '_' . $temp_robot->robot_token; // Update the robot rewards array with any recent info $temp_robot_rewards = rpg_game::robot_rewards($target_player->player_token, $temp_robot->robot_token); //$this_battle->events_create(false, false, 'DEBUG', '<pre>'.preg_replace('/\s+/', ' ', print_r($temp_robot_rewards, true)).'</pre>', $event_options); // Define the base energy boost based on robot base stats $temp_energy_boost = ceil($level_boost * (0.05 * $temp_index_robot['robot_energy'])); // If this robot has reached level 100, the max level, create the flag in their session if ($temp_new_level >= 100) { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot->robot_token]['flags']['reached_max_level'] = true; } // Check if there are eny pending energy stat boosts for level up if (!empty($temp_robot_rewards['robot_energy_pending'])) { $temp_robot_rewards['robot_energy_pending'] = round($temp_robot_rewards['robot_energy_pending']); $temp_energy_boost += $temp_robot_rewards['robot_energy_pending']; if (!empty($temp_robot_rewards['robot_energy'])) { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot->robot_token]['robot_energy'] += $temp_robot_rewards['robot_energy_pending']; } else { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot->robot_token]['robot_energy'] = $temp_robot_rewards['robot_energy_pending']; } $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot->robot_token]['robot_energy_pending'] = 0; } // Increment this robot's energy by the calculated amount and display an event $temp_robot->robot_energy += $temp_energy_boost; $temp_base_energy_boost = ceil($level_boost * (0.05 * $temp_index_robot['robot_energy'])); $temp_robot->robot_base_energy += $temp_base_energy_boost; $event_options['this_ability_results']['recovery_kind'] = 'energy'; $event_options['this_ability_results']['this_amount'] = $temp_energy_boost; $event_options['this_ability_results']['total_actions']++; $event_body = $temp_robot->print_name() . ''s health improved! '; $event_body .= '<br />'; $event_body .= $temp_robot->print_name() . ''s energy grew by <span class="recovery_amount">' . $temp_energy_boost . '</span>! '; $temp_robot->robot_frame = 'summon'; $temp_robot->update_session(); $target_player->update_session(); $this_battle->events_create($temp_robot, $this_robot, $event_header, $event_body, $event_options); // Define the base attack boost based on robot base stats $temp_attack_boost = ceil($level_boost * (0.05 * $temp_index_robot['robot_attack'])); // Check if there are eny pending attack stat boosts for level up if (!empty($temp_robot_rewards['robot_attack_pending'])) { $temp_robot_rewards['robot_attack_pending'] = round($temp_robot_rewards['robot_attack_pending']); $temp_attack_boost += $temp_robot_rewards['robot_attack_pending']; if (!empty($temp_robot_rewards['robot_attack'])) { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot->robot_token]['robot_attack'] += $temp_robot_rewards['robot_attack_pending']; } else { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot->robot_token]['robot_attack'] = $temp_robot_rewards['robot_attack_pending']; } $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot->robot_token]['robot_attack_pending'] = 0; } // Increment this robot's attack by the calculated amount and display an event $temp_robot->robot_attack += $temp_attack_boost; $temp_base_attack_boost = ceil($level_boost * (0.05 * $temp_index_robot['robot_attack'])); $temp_robot->robot_base_attack += $temp_base_attack_boost; $event_options['this_ability_results']['recovery_kind'] = 'attack'; $event_options['this_ability_results']['this_amount'] = $temp_attack_boost; $event_options['this_ability_results']['total_actions']++; $event_body = $temp_robot->print_name() . ''s weapons improved! '; $event_body .= '<br />'; $event_body .= $temp_robot->print_name() . ''s attack grew by <span class="recovery_amount">' . $temp_attack_boost . '</span>! '; $temp_robot->robot_frame = 'shoot'; $temp_robot->update_session(); $target_player->update_session(); $this_battle->events_create($temp_robot, $this_robot, $event_header, $event_body, $event_options); // Define the base defense boost based on robot base stats $temp_defense_boost = ceil($level_boost * (0.05 * $temp_index_robot['robot_defense'])); // Check if there are eny pending defense stat boosts for level up if (!empty($temp_robot_rewards['robot_defense_pending'])) { $temp_robot_rewards['robot_defense_pending'] = round($temp_robot_rewards['robot_defense_pending']); $temp_defense_boost += $temp_robot_rewards['robot_defense_pending']; if (!empty($temp_robot_rewards['robot_defense'])) { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot->robot_token]['robot_defense'] += $temp_robot_rewards['robot_defense_pending']; } else { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot->robot_token]['robot_defense'] = $temp_robot_rewards['robot_defense_pending']; } $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot->robot_token]['robot_defense_pending'] = 0; } // Increment this robot's defense by the calculated amount and display an event $temp_robot->robot_defense += $temp_defense_boost; $temp_base_defense_boost = ceil($level_boost * (0.05 * $temp_index_robot['robot_defense'])); $temp_robot->robot_base_defense += $temp_base_defense_boost; $event_options['this_ability_results']['recovery_kind'] = 'defense'; $event_options['this_ability_results']['this_amount'] = $temp_defense_boost; $event_options['this_ability_results']['total_actions']++; $event_body = $temp_robot->print_name() . ''s shields improved! '; $event_body .= '<br />'; $event_body .= $temp_robot->print_name() . ''s defense grew by <span class="recovery_amount">' . $temp_defense_boost . '</span>! '; $temp_robot->robot_frame = 'defend'; $temp_robot->update_session(); $target_player->update_session(); $this_battle->events_create($temp_robot, $this_robot, $event_header, $event_body, $event_options); // Define the base speed boost based on robot base stats $temp_speed_boost = ceil($level_boost * (0.05 * $temp_index_robot['robot_speed'])); // Check if there are eny pending speed stat boosts for level up if (!empty($temp_robot_rewards['robot_speed_pending'])) { $temp_robot_rewards['robot_speed_pending'] = round($temp_robot_rewards['robot_speed_pending']); $temp_speed_boost += $temp_robot_rewards['robot_speed_pending']; if (!empty($temp_robot_rewards['robot_speed'])) { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot->robot_token]['robot_speed'] += $temp_robot_rewards['robot_speed_pending']; } else { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot->robot_token]['robot_speed'] = $temp_robot_rewards['robot_speed_pending']; } $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_robots'][$temp_robot_token]['robot_speed_pending'] = 0; } // Increment this robot's speed by the calculated amount and display an event $temp_robot->robot_speed += $temp_speed_boost; $event_options['this_ability_results']['recovery_kind'] = 'speed'; $event_options['this_ability_results']['this_amount'] = $temp_speed_boost; $event_options['this_ability_results']['total_actions']++; $temp_base_speed_boost = ceil($level_boost * (0.05 * $temp_index_robot['robot_speed'])); $temp_robot->robot_base_speed += $temp_base_speed_boost; $event_body = $temp_robot->print_name() . ''s mobility improved! '; $event_body .= '<br />'; $event_body .= $temp_robot->print_name() . ''s speed grew by <span class="recovery_amount">' . $temp_speed_boost . '</span>! '; $temp_robot->robot_frame = 'slide'; $temp_robot->update_session(); $target_player->update_session(); $this_battle->events_create($temp_robot, $this_robot, $event_header, $event_body, $event_options); // Update the robot frame $temp_robot->robot_frame = 'base'; $temp_robot->update_session(); } // Update the experience level for real this time $temp_robot->robot_experience = $temp_new_experience; $temp_robot->update_session(); // Collect the robot info array $temp_robot_info = $temp_robot->export_array(); // Collect the indexed robot rewards for new abilities $index_robot_rewards = $temp_robot_info['robot_rewards']; //$event_body = preg_replace('/\s+/', ' ', '<pre>'.print_r($index_robot_rewards, true).'</pre>'); //$this_battle->events_create(false, false, 'DEBUG', $event_body); // Loop through the ability rewards for this robot if set if ($temp_robot->robot_class != 'mecha' && ($temp_start_level == 100 || $temp_start_level != $temp_new_level && !empty($index_robot_rewards['abilities']))) { $temp_abilities_index = $db->get_array_list("SELECT * FROM mmrpg_index_abilities WHERE ability_flag_complete = 1;", 'ability_token'); foreach ($index_robot_rewards['abilities'] as $ability_reward_key => $ability_reward_info) { // If the ability does not exist or is otherwise incomplete, continue if (!isset($temp_abilities_index[$ability_reward_info['token']])) { continue; } // If this ability is already unlocked, continue if (rpg_game::ability_unlocked($target_player->player_token, $temp_robot_token, $ability_reward_info['token'])) { continue; } // If we're in DEMO mode, continue if (rpg_game::is_demo()) { continue; } // Check if the required level has been met by this robot if ($temp_new_level >= $ability_reward_info['level']) { // Create the temporary ability object for event creation $temp_ability_info = array('ability_id' => MMRPG_SETTINGS_BATTLEABILITIES_PERROBOT_MAX + $ability_reward_key, 'ability_token' => $ability_reward_info['token']); $temp_ability = new rpg_ability($target_player, $temp_robot, $temp_ability_info); // Collect or define the ability variables $temp_ability_token = $ability_reward_info['token']; // Display the robot reward message markup $event_header = $temp_ability->ability_name . ' Unlocked'; $event_body = '<span class="robot_name">' . $temp_info['robot_name'] . '</span> unlocked new ability data!<br />'; $event_body .= $temp_ability->print_name() . ' can now be used in battle!'; $event_options = array(); $event_options['console_show_target'] = false; $event_options['this_header_float'] = $target_player->player_side; $event_options['this_body_float'] = $target_player->player_side; $event_options['this_ability'] = $temp_ability; $event_options['this_ability_image'] = 'icon'; $event_options['console_show_this_player'] = false; $event_options['console_show_this_robot'] = false; $event_options['console_show_this_ability'] = true; $event_options['canvas_show_this_ability'] = false; $temp_robot->robot_frame = $ability_reward_key % 2 == 2 ? 'taunt' : 'victory'; $temp_robot->update_session(); $temp_ability->ability_frame = 'base'; $temp_ability->update_session(); $this_battle->events_create($temp_robot, false, $event_header, $event_body, $event_options); $temp_robot->robot_frame = 'base'; $temp_robot->update_session(); // Automatically unlock this ability for use in battle $this_reward = rpg_ability::get_index_info($temp_ability_token); //array('ability_token' => $temp_ability_token); $temp_player_info = $target_player->export_array(); $show_event = !rpg_game::ability_unlocked('', '', $temp_ability_token) ? true : false; rpg_game::unlock_ability($temp_player_info, $temp_robot_info, $this_reward, $show_event); if ($temp_robot_info['robot_original_player'] == $temp_player_info['player_token']) { rpg_game::unlock_ability($temp_player_info, false, $this_reward); } else { rpg_game::unlock_ability(array('player_token' => $temp_robot_info['robot_original_player']), false, $this_reward); } //$_SESSION['GAME']['values']['battle_rewards'][$target_player_token]['player_robots'][$temp_robot_token]['robot_abilities'][$temp_ability_token] = $this_reward; } } } } // -- ITEM REWARDS -- // // Define the temp player rewards array $target_player_rewards = array(); // Define the chance multiplier and start at one $temp_chance_multiplier = $trigger_options['item_multiplier']; // Increase the item chance multiplier if one is set for the stage if (isset($this_battle->field->field_multipliers['items'])) { $temp_chance_multiplier = $temp_chance_multiplier * $this_battle->field->field_multipliers['items']; } // Define the available item drops for this battle $target_player_rewards['items'] = $this_battle->get_item_rewards(); // Increase the multipliers if starter battle if (!empty($this_battle->flags['starter_battle'])) { $temp_chance_multiplier = 4; } else { // If the target holds a Fortune Module, increase the chance of dropps $temp_fortune_module = false; if ($target_robot->robot_item == 'fortune-module') { $temp_fortune_module = true; } // If this robot was a MECHA class, it may drop SMALL SCREWS if ($this_robot->robot_class == 'mecha') { $target_player_rewards['items'][] = array('chance' => 100, 'token' => 'small-screw', 'quantity' => mt_rand(1, $temp_fortune_module ? 9 : 6)); // If this robot was an empty core, it drops other items too if (!empty($this_robot->robot_core) && $this_robot->robot_core == 'empty') { $target_player_rewards['items'][] = array('chance' => 100, 'token' => 'super-pellet'); } } // If this robot was a MASTER class, it may drop LARGE SCREWS if ($this_robot->robot_class == 'master') { $target_player_rewards['items'][] = array('chance' => 100, 'token' => 'large-screw', 'quantity' => mt_rand(1, $temp_fortune_module ? 6 : 3)); // If this robot was an empty core, it drops other items too if (!empty($this_robot->robot_core) && $this_robot->robot_core == 'empty') { $target_player_rewards['items'][] = array('chance' => 100, 'token' => 'super-capsule'); } } // If this robot was a BOSS class, it may drop EXTRA LIFE if ($this_robot->robot_class == 'boss') { $target_player_rewards['items'][] = array('chance' => 100, 'token' => 'extra-life', 'quantity' => mt_rand(1, $temp_fortune_module ? 3 : 1)); } // If this robot was holding an ITEM, it should also drop that at a high rate if (!empty($this_robot->robot_item)) { $target_player_rewards['items'][] = array('chance' => 100, 'token' => $this_robot->robot_item); } } // Precount the item values for later use $temp_value_total = 0; $temp_count_total = 0; foreach ($target_player_rewards['items'] as $item_reward_key => $item_reward_info) { $temp_value_total += $item_reward_info['chance']; $temp_count_total += 1; } //$this_battle->events_create(false, false, 'DEBUG', '$temp_count_total = '.$temp_count_total.';<br /> $temp_value_total = '.$temp_value_total.'; '); // If this robot was a MECHA class and destroyed by WEAKNESS, it may drop a SHARD if ($this_robot->robot_class == 'mecha' && !empty($this_robot->flags['triggered_weakness'])) { $temp_shard_type = !empty($this->robot_core) ? $this->robot_core : 'none'; $target_player_rewards['items'] = array(); $target_player_rewards['items'][] = array('chance' => 100, 'token' => $temp_shard_type . '-shard'); } elseif (in_array($this_robot->robot_class, array('master', 'boss')) && !empty($this_robot->flags['triggered_weakness'])) { $temp_core_type = !empty($this->robot_core) ? $this->robot_core : 'none'; $target_player_rewards['items'] = array(); $target_player_rewards['items'][] = array('chance' => 100, 'token' => $temp_core_type . '-core'); } // Recount the item values for later use $temp_value_total = 0; $temp_count_total = 0; foreach ($target_player_rewards['items'] as $item_reward_key => $item_reward_info) { $temp_value_total += $item_reward_info['chance']; $temp_count_total += 1; } // Adjust item values for easier to understand percentages foreach ($target_player_rewards['items'] as $item_reward_key => $item_reward_info) { $target_player_rewards['items'][$item_reward_key]['chance'] = ceil($item_reward_info['chance'] / $temp_value_total * 100); } // Shuffle the rewards so it doesn't look to formulaic shuffle($target_player_rewards['items']); // DEBUG //$temp_string = ''; //foreach ($target_player_rewards['items'] AS $info){ $temp_string .= $info['token'].' = '.$info['chance'].'%, '; } //$this_battle->events_create(false, false, 'DEBUG', '$target_player_rewards[\'items\'] = '.count($target_player_rewards['items']).'<br /> '.$temp_string); // Define a function for dealing with item drops if (!function_exists('temp_player_rewards_items')) { function temp_player_rewards_items($this_battle, $target_player, $target_robot, $this_robot, $item_reward_key, $item_reward_info, $item_drop_count = 1) { global $mmrpg_index; // Create the temporary ability object for event creation $temp_info = array('ability_id' => MMRPG_SETTINGS_BATTLEABILITIES_PERROBOT_MAX + $item_reward_key + 300, 'ability_token' => $item_reward_info['ability_token']); $temp_ability = new rpg_ability($target_player, $target_robot, $item_reward_info); $temp_ability->ability_name = $item_reward_info['ability_name']; $temp_ability->ability_image = $item_reward_info['ability_token']; $temp_ability->update_session(); // Collect or define the ability variables $temp_item_token = $item_reward_info['ability_token']; $temp_item_name = $item_reward_info['ability_name']; $temp_item_colour = !empty($item_reward_info['ability_type']) ? $item_reward_info['ability_type'] : 'none'; if (!empty($item_reward_info['ability_type2'])) { $temp_item_colour .= '_' . $item_reward_info['ability_type2']; } $temp_type_name = !empty($item_reward_info['ability_type']) ? ucfirst($item_reward_info['ability_type']) : 'Neutral'; $allow_over_max = false; $temp_is_shard = preg_match('/-shard$/i', $temp_item_token) ? true : false; $temp_is_core = preg_match('/-core$/i', $temp_item_token) ? true : false; // Define the max quantity limit for this particular item if ($temp_is_shard) { $temp_item_quantity_max = MMRPG_SETTINGS_SHARDS_MAXQUANTITY; $allow_over_max = true; } elseif ($temp_is_core) { $temp_item_quantity_max = MMRPG_SETTINGS_CORES_MAXQUANTITY; } else { $temp_item_quantity_max = MMRPG_SETTINGS_ITEMS_MAXQUANTITY; } // Create the session variable for this item if it does not exist and collect its value if (empty($_SESSION['GAME']['values']['battle_items'][$temp_item_token])) { $_SESSION['GAME']['values']['battle_items'][$temp_item_token] = 0; } $temp_item_quantity = $_SESSION['GAME']['values']['battle_items'][$temp_item_token]; // If this item is already at the quantity limit, skip it entirely if ($temp_item_quantity >= $temp_item_quantity_max) { //$this_battle->events_create(false, false, 'DEBUG', 'max count for '.$temp_item_token.' of '.$temp_item_quantity_max.' has been reached ('.($allow_over_max ? 'allow' : 'disallow').')'); $_SESSION['GAME']['values']['battle_items'][$temp_item_token] = $temp_item_quantity_max; $temp_item_quantity = $temp_item_quantity_max; if (!$allow_over_max) { return true; } } // Define the new item quantity after increment $temp_item_quantity_new = $temp_item_quantity + $item_drop_count; $shards_remaining = false; // If this is a shard piece if ($temp_is_shard) { // Define the number of shards remaining for a new core $temp_item_quantity_max = MMRPG_SETTINGS_SHARDS_MAXQUANTITY; $shards_remaining = $temp_item_quantity_max - $temp_item_quantity_new; // If this player has collected enough shards to create a new core if ($shards_remaining == 0) { $temp_body_addon = 'The other ' . $temp_type_name . ' Shards from the inventory started glowing…'; } else { $temp_body_addon = 'Collect ' . $shards_remaining . ' more shard' . ($shards_remaining > 1 ? 's' : '') . ' to create a new ' . $temp_type_name . ' Core!'; } } elseif (preg_match('/-core$/i', $temp_item_token)) { // Define the robot core drop text for displau $temp_body_addon = $target_player->print_name() . ' added the new core to the inventory.'; } else { // Define the normal item drop text for display $temp_body_addon = $target_player->print_name() . ' added the dropped item' . ($item_drop_count > 1 ? 's' : '') . ' to the inventory.'; } // Display the robot reward message markup $event_header = $temp_item_name . ' Item Drop'; $event_body = rpg_functions::get_random_positive_word(); $event_body .= ' The disabled ' . $this_robot->print_name() . ' dropped '; if ($item_drop_count == 1) { $event_body .= (preg_match('/^(a|e|i|o|u)/i', $temp_item_name) ? 'an' : 'a') . ' <span class="ability_name ability_type ability_type_' . $temp_item_colour . '">' . $temp_item_name . '</span>!<br />'; } else { $event_body .= 'x' . $item_drop_count . ' <span class="ability_name ability_type ability_type_' . $temp_item_colour . '">' . ($temp_item_name == 'Extra Life' ? 'Extra Lives' : $temp_item_name . 's') . '</span>!<br />'; } $event_body .= $temp_body_addon; $event_options = array(); $event_options['console_show_target'] = false; $event_options['this_header_float'] = $target_player->player_side; $event_options['this_body_float'] = $target_player->player_side; $event_options['this_ability'] = $temp_ability; $event_options['this_ability_image'] = 'icon'; $event_options['event_flag_victory'] = true; $event_options['console_show_this_player'] = false; $event_options['console_show_this_robot'] = false; $event_options['console_show_this_ability'] = true; $event_options['canvas_show_this_ability'] = true; $target_player->set_frame($item_reward_key % 3 == 0 ? 'victory' : 'taunt'); $target_robot->robot_frame = $item_reward_key % 2 == 0 ? 'taunt' : 'base'; $target_robot->update_session(); $temp_ability->ability_frame = 'base'; $temp_ability->ability_frame_offset = array('x' => 220, 'y' => 0, 'z' => 10); $temp_ability->update_session(); $this_battle->events_create($target_robot, $target_robot, $event_header, $event_body, $event_options); // Create and/or increment the session variable for this item increasing its quantity if (empty($_SESSION['GAME']['values']['battle_items'][$temp_item_token])) { $_SESSION['GAME']['values']['battle_items'][$temp_item_token] = 0; } if ($temp_item_quantity < $temp_item_quantity_max) { $_SESSION['GAME']['values']['battle_items'][$temp_item_token] += $item_drop_count; } // If this was a shard, and it was the LAST shard if ($shards_remaining !== false && $shards_remaining < 1) { // Define the new core token and increment value in session $temp_core_token = str_replace('shard', 'core', $temp_item_token); $temp_core_name = str_replace('Shard', 'Core', $temp_item_name); $item_core_info = array('ability_token' => $temp_core_token, 'ability_name' => $temp_core_name, 'ability_type' => $item_reward_info['ability_type']); // Create the temporary ability object for event creation $temp_info['ability_id'] += 1; $temp_info['ability_token'] = $temp_core_token; $temp_core = new rpg_ability($target_player, $target_robot, $temp_info); $temp_core->ability_name = $item_core_info['ability_name']; $temp_core->ability_image = $item_core_info['ability_token']; $temp_core->update_session(); // Collect or define the ability variables //$temp_core_token = $item_core_info['ability_token']; //$temp_core_name = $item_core_info['ability_name']; $temp_type_name = !empty($temp_core->ability_type) ? ucfirst($temp_core->ability_type) : 'Neutral'; $temp_core_colour = !empty($temp_core->ability_type) ? $temp_core->ability_type : 'none'; // Define the max quantity limit for this particular item $temp_core_quantity_max = MMRPG_SETTINGS_ITEMS_MAXQUANTITY; // Create the session variable for this item if it does not exist and collect its value if (empty($_SESSION['GAME']['values']['battle_items'][$temp_core_token])) { $_SESSION['GAME']['values']['battle_items'][$temp_core_token] = 0; } $temp_core_quantity = $_SESSION['GAME']['values']['battle_items'][$temp_core_token]; // If this item is already at the quantity limit, skip it entirely if ($temp_core_quantity >= $temp_core_quantity_max) { //$this_battle->events_create(false, false, 'DEBUG', 'max count for '.$temp_core_token.' of '.$temp_core_quantity_max.' has been reached'); $_SESSION['GAME']['values']['battle_items'][$temp_core_token] = $temp_core_quantity_max; $temp_core_quantity = $temp_core_quantity_max; return true; } // Display the robot reward message markup $event_header = $temp_core_name . ' Item Fusion'; $event_body = rpg_functions::get_random_positive_word() . ' The glowing shards fused to create a new ' . $temp_core->print_name() . '!<br />'; $event_body .= $target_player->print_name() . ' added the new core to the inventory.'; $event_options = array(); $event_options['console_show_target'] = false; $event_options['this_header_float'] = $target_player->player_side; $event_options['this_body_float'] = $target_player->player_side; $event_options['this_ability'] = $temp_core; $event_options['this_ability_image'] = 'icon'; $event_options['event_flag_victory'] = true; $event_options['console_show_this_player'] = false; $event_options['console_show_this_robot'] = false; $event_options['console_show_this_ability'] = true; $event_options['canvas_show_this_ability'] = true; $target_player->set_frame($item_reward_key + 1 % 3 == 0 ? 'taunt' : 'victory'); $target_robot->robot_frame = $item_reward_key % 2 == 0 ? 'base' : 'taunt'; $target_robot->update_session(); $temp_core->ability_frame = 'base'; $temp_core->ability_frame_offset = array('x' => 220, 'y' => 0, 'z' => 10); $temp_core->update_session(); $this_battle->events_create($target_robot, $target_robot, $event_header, $event_body, $event_options); // Create and/or increment the session variable for this item increasing its quantity if (empty($_SESSION['GAME']['values']['battle_items'][$temp_core_token])) { $_SESSION['GAME']['values']['battle_items'][$temp_core_token] = 0; } if ($temp_core_quantity < $temp_core_quantity_max) { $_SESSION['GAME']['values']['battle_items'][$temp_core_token] += 1; } // Set the old shard counter back to zero now that they've fused $_SESSION['GAME']['values']['battle_items'][$temp_item_token] = 0; $temp_item_quantity = 0; } // Return true on success return true; } } // Loop through the ability rewards for this robot if set and NOT demo mode if (rpg_game::is_user() && !empty($target_player_rewards['items']) && $this->player->player_id == MMRPG_SETTINGS_TARGET_PLAYERID) { $temp_items_index = $db->get_array_list("SELECT * FROM mmrpg_index_abilities WHERE ability_flag_complete = 1;", 'ability_token'); // Define the default success rate and multiply by the modifier $temp_success_value = $this_robot->robot_class == 'master' ? 50 : 25; $temp_success_value = ceil($temp_success_value * $temp_chance_multiplier); // Empty cores always have item drops if (!empty($this_robot->robot_core) && $this_robot->robot_core == 'empty') { $temp_success_value = 100; } // If the target holds a Fortune Module, increase the chance of dropps if ($target_robot->robot_item == 'fortune-module') { $temp_success_value = $temp_success_value * 2; } // Fix success values over 100 if ($temp_success_value > 100) { $temp_success_value = 100; } // Define the failure based on success rate $temp_failure_value = 100 - $temp_success_value; // Define the dropping result based on rates $temp_dropping_result = $temp_success_value == 100 ? 'success' : rpg_functions::weighted_chance(array('success', 'failure'), array($temp_success_value, $temp_failure_value)); //$this_battle->events_create(false, false, 'DEBUG', '..and the result of the drop ('.$temp_success_value.' / '.$temp_failure_value.') is '.$temp_dropping_result); if ($temp_dropping_result == 'success') { $temp_value_total = 0; $temp_count_total = 0; foreach ($target_player_rewards['items'] as $item_reward_key => $item_reward_info) { $temp_value_total += $item_reward_info['chance']; $temp_count_total += 1; } $temp_item_counts = array(); $temp_item_tokens = array(); $temp_item_weights = array(); if ($temp_value_total > 0) { foreach ($target_player_rewards['items'] as $item_reward_key => $item_reward_info) { $temp_item_tokens[] = $item_reward_info['token']; $temp_item_weights[] = ceil($item_reward_info['chance'] / $temp_value_total * 100); $temp_item_counts[$item_reward_info['token']] = isset($item_reward_info['quantity']) ? $item_reward_info['quantity'] : 1; } } $temp_random_item = rpg_functions::weighted_chance($temp_item_tokens, $temp_item_weights); $item_index_info = rpg_ability::parse_index_info($temp_items_index[$temp_random_item]); $item_drop_count = $temp_item_counts[$temp_random_item]; temp_player_rewards_items($this_battle, $target_player, $target_robot, $this, $item_reward_key, $item_index_info, $item_drop_count); } } } // DEBUG //$this_battle->events_create(false, false, 'DEBUG', 'we made it past the experience boosts'); // If the player has replacement robots and the knocked-out one was active if ($this_player->counters['robots_active'] > 0) { // Try to find at least one active POSITION robot before requiring a switch $has_active_positon_robot = false; foreach ($this_player->values['robots_active'] as $key => $robot) { //if ($robot['robot_position'] == 'active'){ $has_active_positon_robot = true; } } // If the player does NOT have an active position robot, trigger a switch if (!$has_active_positon_robot) { // If the target player is not on autopilot, require input if ($this_player->player_autopilot == false) { // Empty the action queue to allow the player switch time $this_battle->actions = array(); } elseif ($this_player->player_autopilot == true) { // && $this_player->player_next_action != 'switch' // Empty the action queue to allow the player switch time $this_battle->actions = array(); // Remove any previous switch actions for this player $backup_switch_actions = $this_battle->actions_extract(array('this_player_id' => $this_player->player_id, 'this_action' => 'switch')); //$this_battle->events_create(false, false, 'DEBUG DEBUG', 'This is a test from inside the dead trigger ['.count($backup_switch_actions).'].'); // If there were any previous switches removed if (!empty($backup_switch_actions)) { // If the target robot was faster, it should attack first if ($this_robot->robot_speed > $target_robot->robot_speed) { // Prepend an ability action for this robot $this_battle->actions_prepend($this_player, $this_robot, $target_player, $target_robot, 'ability', ''); } else { // Prepend an ability action for this robot $this_battle->actions_append($this_player, $this_robot, $target_player, $target_robot, 'ability', ''); } } // Prepend a switch action for the target robot $this_battle->actions_prepend($this_player, $this_robot, $target_player, $target_robot, 'switch', ''); } } } else { // Trigger a battle complete action $this_battle->trigger_complete($target_player, $target_robot, $this_player, $this_robot); } // Either way, set the hidden flag on the robot //if (($this_robot->robot_status == 'disabled' || $this_robot->robot_energy < 1) && $this_robot->robot_position == 'bench'){ if ($this_robot->robot_status == 'disabled' || $this_robot->robot_energy < 1) { //$this_robot->robot_status == 'disabled'; $this_robot->flags['apply_disabled_state'] = true; if ($this_robot->robot_position == 'bench') { $this_robot->flags['hidden'] = true; } $this_robot->update_session(); } // -- ROBOT UNLOCKING STUFF!!! -- // // Check if this target winner was a HUMAN player and update the robot database counter for defeats if ($target_player->player_side == 'left') { // Add this robot to the global robot database array if (!isset($_SESSION['GAME']['values']['robot_database'][$this->robot_token])) { $_SESSION['GAME']['values']['robot_database'][$this->robot_token] = array('robot_token' => $this->robot_token); } if (!isset($_SESSION['GAME']['values']['robot_database'][$this->robot_token]['robot_defeated'])) { $_SESSION['GAME']['values']['robot_database'][$this->robot_token]['robot_defeated'] = 0; } $_SESSION['GAME']['values']['robot_database'][$this->robot_token]['robot_defeated']++; } // Check if this battle has any robot rewards to unlock and the winner was a HUMAN player $temp_robot_rewards = $this_battle->get_robot_rewards(); if ($target_player->player_side == 'left' && !empty($temp_robot_rewards)) { // DEBUG //$this_battle->events_create(false, false, 'DEBUG_'.__LINE__, $this->robot_token.' | trigger_disabled | battle_rewards_robots = '.count($temp_robot_rewards).''); foreach ($temp_robot_rewards as $temp_reward_key => $temp_reward_info) { // DEBUG //$this_battle->events_create(false, false, 'DEBUG_'.__LINE__, $this->robot_token.' | trigger_disabled | checking '.$this->robot_token.' == '.preg_replace('/\s+/', ' ', print_r($temp_reward_info, true)).'...'); // Check if this robot was part of the rewards for this battle if (!rpg_game::robot_unlocked(false, $temp_reward_info['token']) && $this->robot_token == $temp_reward_info['token']) { // DEBUG //$this_battle->events_create(false, false, 'DEBUG_'.__LINE__, $this->robot_token.' | trigger_disabled | '.$this->robot_token.' == '.$temp_reward_info['token'].' is a match!'); // Check if this robot has been attacked with any elemental moves if (!empty($this->history['triggered_damage_types'])) { // Loop through all the damage types and check if they're not empty foreach ($this->history['triggered_damage_types'] as $key => $types) { if (!empty($types)) { // DEBUG //$this_battle->events_create(false, false, 'DEBUG_'.__LINE__, $this->robot_token.' | trigger_disabled | '.$this->robot_token.' was attacked with a '.implode(', ', $types).' type ability!<br />Removing from the battle rewards!'); // Generate the robot removed event showing the destruction /* $event_header = $this->robot_name.''s Data Destroyed'; $event_body = $this->print_name().''s battle data was damaged beyond repair!<br />'; $event_body .= $this->print_name().' could not be unlocked for use in battle…'; $event_options = array(); $event_options['console_show_target'] = false; $event_options['this_header_float'] = $this_player->player_side; $event_options['this_body_float'] = $this_player->player_side; $event_options['console_show_this_player'] = false; $event_options['console_show_this_robot'] = true; $this_robot->robot_frame = 'defeat'; $this_robot->update_session(); $this_battle->events_create($this, false, $event_header, $event_body, $event_options); */ // Remove this robot from the battle rewards array unset($temp_robot_rewards[$temp_reward_key]); // Break, we know all we need to break; } } } // If this robot is somehow still a reward, print a message showing a good job if (!empty($temp_robot_rewards[$temp_reward_key])) { // Collect this reward's information $robot_reward_info = $temp_robot_rewards[$temp_reward_key]; // Collect or define the robot points and robot rewards variables //$this_robot_token = $robot_reward_info['token']; $this_robot_level = !empty($robot_reward_info['level']) ? $robot_reward_info['level'] : 1; $this_robot_experience = !empty($robot_reward_info['experience']) ? $robot_reward_info['experience'] : 0; $this_robot_rewards = !empty($robot_info['robot_rewards']) ? $robot_info['robot_rewards'] : array(); // Create the temp new robot for the player //$temp_index_robot = rpg_robot::get_index_info($this_robot_token); $temp_index_robot['robot_id'] = MMRPG_SETTINGS_TARGET_PLAYERID * 2; $temp_index_robot['robot_level'] = $this_robot_level; $temp_index_robot['robot_experience'] = $this_robot_experience; $temp_unlocked_robot = new rpg_robot($target_player, $temp_index_robot); // Automatically unlock this robot for use in battle //$temp_unlocked_player = $mmrpg_index['players'][$target_player->player_token]; rpg_game::unlock_robot($temp_unlocked_player, $temp_index_robot, true, true); // Display the robot reward message markup //$event_header = $temp_unlocked_robot->robot_name.' Unlocked'; $event_body = rpg_functions::get_random_positive_word() . ' ' . $target_player->print_name() . ' unlocked new robot data!<br />'; $event_body .= $temp_unlocked_robot->print_name() . ' can now be used in battle!'; $event_options = array(); $event_options['console_show_target'] = false; $event_options['this_header_float'] = $target_player->player_side; $event_options['this_body_float'] = $target_player->player_side; $event_options['this_robot_image'] = 'mug'; $temp_unlocked_robot->robot_frame = 'base'; $temp_unlocked_robot->update_session(); $this_battle->events_create($temp_unlocked_robot, false, $event_header, $event_body, $event_options); } // Update the battle with robot reward changes $temp_robot_rewards = array_values($temp_robot_rewards); $this_battle->set_robot_rewards($temp_robot_rewards); } } } // Return true on success return true; }
/** * Trigger the battle complete action and end the current mission * @param rpg_player this_player * @param rpg_robot this_robot * @param rpg_player target_player * @param rpg_robot target_robot */ public function trigger_complete(rpg_player $this_player, rpg_robot $this_robot, rpg_player $target_player, rpg_robot $target_robot) { // Collect references to global objects $db = cms_database::get_database(); $this_battle = self::get_battle(); $this_field = rpg_field::get_field(); // Default the return variable to false $this_return = false; //$this_battle->events_create(false, false, 'DEBUG', 'Battle complete trigger triggered!'); // Return false if anything is missing if (empty($this_player) || empty($this_robot)) { return false; } if (empty($target_player) || empty($target_robot)) { return false; } // Return true if the battle status is already complete if ($this_battle->battle_status == 'complete') { return true; } // Update the battle status to complete $this_battle->set_info('battle_status', 'complete'); if ($this_battle->battle_result == 'pending') { $this_battle->set_info('battle_result', $target_player->player_side == 'right' ? 'victory' : 'defeat'); $event_options = array(); if ($this_battle->battle_result == 'victory') { $event_options['event_flag_victory'] = true; } elseif ($this_battle->battle_result == 'defeat') { $event_options['event_flag_defeat'] = true; } $this_battle->events_create(false, false, '', '', $event_options); } // -- CALCULATE REWARDS -- // // Define variables for the human's rewards in this scenario $temp_human_token = $target_player->player_side == 'left' ? $target_player->player_token : $this_player->player_token; $temp_human_info = $target_player->player_side == 'left' ? $target_player->export_array() : $this_player->export_array(); $temp_human_rewards = array(); $temp_human_rewards['battle_points'] = 0; $temp_human_rewards['battle_zenny'] = 0; $temp_human_rewards['battle_complete'] = isset($_SESSION['GAME']['values']['battle_complete'][$temp_human_token][$this_battle->battle_token]['battle_count']) ? $_SESSION['GAME']['values']['battle_complete'][$temp_human_token][$this_battle->battle_token]['battle_count'] : 0; $temp_human_rewards['battle_failure'] = isset($_SESSION['GAME']['values']['battle_failure'][$temp_human_token][$this_battle->battle_token]['battle_count']) ? $_SESSION['GAME']['values']['battle_failure'][$temp_human_token][$this_battle->battle_token]['battle_count'] : 0; $temp_human_rewards['checkpoint'] = 'start: '; // Calculate the base point and zenny rewards for this battle $temp_reward_points_base = !empty($this_battle->battle_rewards_points) ? $this_battle->battle_rewards_points : 0; $temp_reward_zenny_base = !empty($this_battle->battle_rewards_zenny) ? $this_battle->battle_rewards_zenny : 0; // Default the bonus to zero and calulate based on turns $temp_turn_bonus = 0; if ($this_battle->counters['battle_turn'] < $this_battle->battle_turns_limit) { $temp_turn_bonus = round(($this_battle->battle_turns_limit - $this_battle->counters['battle_turn']) * 10); } elseif ($this_battle->counters['battle_turn'] > $this_battle->battle_turns_limit) { $temp_turn_bonus = round(($this_battle->counters['battle_turn'] - $this_battle->battle_turns_limit) * 10) * -1; } // Default the bonus to zero and calulate based on turns $temp_robot_bonus = 0; if ($temp_human_info['counters']['robots_masters_total'] < $this_battle->battle_robots_limit) { $temp_robot_bonus = round(($this_battle->battle_robots_limit - $temp_human_info['counters']['robots_masters_total']) * 10); } elseif ($temp_human_info['counters']['robots_masters_total'] > $this_battle->battle_robots_limit) { $temp_robot_bonus = $temp_robot_bonus = round(($temp_human_info['counters']['robots_masters_total'] - $this_battle->battle_robots_limit) * 10) * -1; } // Calculate the bonus points and zenny for the turns $temp_turn_bonus_points = (int) ($temp_reward_points_base * ($temp_turn_bonus / 100)); $temp_turn_bonus_zenny = (int) ($temp_reward_zenny_base * ($temp_turn_bonus / 100)); // Calculate the bonus points and zenny for the turns $temp_robot_bonus_points = (int) ($temp_reward_points_base * ($temp_robot_bonus / 100)); $temp_robot_bonus_zenny = (int) ($temp_reward_zenny_base * ($temp_robot_bonus / 100)); // Calculate the final reward points based on above if ($this_battle->battle_result == 'victory') { $temp_reward_points_final = $temp_reward_points_base + $temp_turn_bonus_points + $temp_robot_bonus_points; $temp_reward_zenny_final = $temp_reward_zenny_base + $temp_turn_bonus_zenny + $temp_robot_bonus_zenny; if ($temp_reward_points_final < 0) { $temp_reward_points_final = 0; } if ($temp_reward_zenny_final < 0) { $temp_reward_zenny_final = 0; } } else { $temp_reward_points_final = 0; $temp_reward_zenny_final = 0; } // Define the number of stars to show for this mission $temp_rating_stars = 0; if ($this_battle->battle_result == 'victory') { $temp_rating_stars += 1; if ($temp_turn_bonus >= 0) { $temp_rating_stars += 1; } if ($temp_robot_bonus >= 0) { $temp_rating_stars += 1; } if (empty($temp_human_info['counters']['robots_disabled'])) { $temp_rating_stars += 1; } if (empty($temp_human_info['counters']['items_used_this_battle'])) { $temp_rating_stars += 1; } } // Generate the markup for this stars $temp_rating_stars_markup = ''; for ($i = 1; $i <= 5; $i++) { $temp_rating_stars_markup .= $i <= $temp_rating_stars ? '★' : '☆'; } // (HUMAN) TARGET DEFEATED // Check if the target was the human character if ($target_player->player_side == 'left') { // Increment the main game's points total with the battle points $_SESSION['GAME']['counters']['battle_points'] += $temp_reward_points_final; $_SESSION['GAME']['counters']['battle_zenny'] += $temp_reward_zenny_final; // Increment this player's points total with the battle points if (!isset($_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_points'])) { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_points'] = 0; } if (!isset($_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_zenny'])) { $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_zenny'] = 0; } $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_points'] += $temp_reward_points_final; $_SESSION['GAME']['values']['battle_rewards'][$target_player->player_token]['player_zenny'] += $temp_reward_zenny_final; // Update the global variable with the points reward $temp_human_rewards['battle_points'] = $temp_reward_points_final; $temp_human_rewards['battle_zenny'] = $temp_reward_zenny_final; // Update the GAME session variable with the failed battle token $save_records = $this_battle->has_flag('save_records') ? $this_battle->get_flag('save_records') : true; if ($save_records) { $bak_session_array = isset($_SESSION['GAME']['values']['battle_failure'][$target_player->player_token][$this_battle->battle_token]) ? $_SESSION['GAME']['values']['battle_failure'][$target_player->player_token][$this_battle->battle_token] : array(); $new_session_array = array('battle_token' => $this_battle->battle_token, 'battle_count' => 0, 'battle_level' => 0); if (!empty($bak_session_array['battle_count'])) { $new_session_array['battle_count'] = $bak_session_array['battle_count']; } if (!empty($bak_session_array['battle_level'])) { $new_session_array['battle_level'] = $bak_session_array['battle_level']; } $new_session_array['battle_level'] = $this_battle->battle_level; $new_session_array['battle_count']++; $_SESSION['GAME']['values']['battle_failure'][$target_player->player_token][$this_battle->battle_token] = $new_session_array; $temp_human_rewards['battle_failure'] = $_SESSION['GAME']['values']['battle_failure'][$target_player->player_token][$this_battle->battle_token]['battle_count']; } } // NON-INVISIBLE PLAYER DEFEATED // Display the defeat message for the target character if not default/hidden if ($target_player->player_token != 'player') { // (HUMAN) TARGET DEFEATED BY (INVISIBLE/COMPUTER) // If this was a player battle and the human user lost against the ghost target (this/computer/victory | target/human/defeat) if ($this_player->player_id == MMRPG_SETTINGS_TARGET_PLAYERID && $target_player->player_side == 'left' && $this_robot->robot_class != 'mecha') { // Calculate how many points the other player is rewarded for winning $target_player_robots = $target_player->values['robots_disabled']; $target_player_robots_count = count($target_player_robots); $other_player_points = 0; $other_player_turns = $target_player_robots_count * MMRPG_SETTINGS_BATTLETURNS_PERROBOT; foreach ($target_player_robots as $disabled_robotinfo) { $other_player_points += $disabled_robotinfo['robot_level'] * MMRPG_SETTINGS_BATTLEPOINTS_PERROBOT * MMRPG_SETTINGS_BATTLEPOINTS_PLAYERBATTLE_MULTIPLIER; } // Create the victory event for the target player $this_robot->robot_frame = 'victory'; $this_robot->update_session(); $event_header = $this_robot->robot_name . ' Undefeated'; $event_body = ''; $event_body .= $this_robot->print_name() . ' could not be defeated! '; $event_body .= '<br />'; $event_options = array(); $event_options['console_show_this_robot'] = true; $event_options['console_show_target'] = false; $event_options['event_flag_defeat'] = true; $event_options['this_header_float'] = $event_options['this_body_float'] = $this_robot->player->player_side; if ($this_robot->robot_token != 'robot' && isset($this_robot->robot_quotes['battle_victory'])) { $this_find = array('{target_player}', '{target_robot}', '{this_player}', '{this_robot}'); $this_replace = array($target_player->player_name, $target_robot->robot_name, $this_player->player_name, $this_robot->robot_name); $event_body .= $this_robot->print_quote('battle_victory', $this_find, $this_replace); } $this_battle->events_create($this_robot, $target_robot, $event_header, $event_body, $event_options); } $target_player->set_frame('defeat'); $target_robot->update_session(); $event_header = $target_player->player_name . ' Defeated'; $event_body = $target_player->print_name() . ' was defeated' . ($target_player->player_side == 'left' ? '…' : '!') . ' '; $event_body .= '<br />'; $event_options = array(); $event_options['console_show_this_player'] = true; $event_options['console_show_target'] = false; $event_options['event_flag_defeat'] = true; $event_options['this_header_float'] = $event_options['this_body_float'] = $target_player->player_side; if ($target_player->player_token != 'player' && isset($target_player->player_quotes['battle_defeat'])) { $this_find = array('{target_player}', '{target_robot}', '{this_player}', '{this_robot}'); $this_replace = array($this_player->player_name, $this_robot->robot_name, $target_player->player_name, $target_robot->robot_name); $this_quote_text = str_replace($this_find, $this_replace, $target_player->player_quotes['battle_defeat']); $event_body .= $target_player->print_quote('battle_defeat', $this_find, $this_replace); } $this_battle->events_create($target_robot, $this_robot, $event_header, $event_body, $event_options); // (HUMAN) TARGET DEFEATED BY (GHOST/COMPUTER) // If this was a player battle and the human user lost against the ghost target (this/computer/victory | target/human/defeat) if ($this_player->player_id != MMRPG_SETTINGS_TARGET_PLAYERID && $target_player->player_side == 'left') { // Calculate how many points the other player is rewarded for winning $target_player_robots = $target_player->values['robots_disabled']; $target_player_robots_count = count($target_player_robots); $other_player_points = 0; $other_player_turns = $target_player_robots_count * MMRPG_SETTINGS_BATTLETURNS_PERROBOT; foreach ($target_player_robots as $disabled_robotinfo) { $other_player_points += $disabled_robotinfo['robot_level'] * MMRPG_SETTINGS_BATTLEPOINTS_PERROBOT * MMRPG_SETTINGS_BATTLEPOINTS_PLAYERBATTLE_MULTIPLIER; } // Create the victory event for the target player $this_player->set_frame('victory'); $target_robot->update_session(); $event_header = $this_player->player_name . ' Victorious'; $event_body = $this_player->print_name() . ' was victorious! '; $event_body .= $this_player->print_name() . ' could not be defeated!'; $event_body .= '<br />'; $event_options = array(); $event_options['console_show_this_player'] = true; $event_options['console_show_target'] = false; $event_options['event_flag_defeat'] = true; $event_options['this_header_float'] = $event_options['this_body_float'] = $this_player->player_side; if ($this_player->player_token != 'player' && isset($this_player->player_quotes['battle_victory'])) { $this_find = array('{target_player}', '{target_robot}', '{this_player}', '{this_robot}'); $this_replace = array($target_player->player_name, $target_robot->robot_name, $this_player->player_name, $this_robot->robot_name); $event_body .= $this_player->print_quote('battle_victory', $this_find, $this_replace); } $this_battle->events_create($this_robot, $target_robot, $event_header, $event_body, $event_options); } } // (HUMAN) TARGET DEFEATED BY (COMPUTER) // Check if the target was the human character (and they LOST) if ($target_player->player_side == 'left') { // Collect the robot info array $temp_player_info = $target_player->export_array(); // Collect or define the player points and player rewards variables $temp_player_token = $temp_player_info['player_token']; $temp_player_points = rpg_game::player_points($temp_player_info['player_token']); $temp_player_rewards = rpg_game::player_rewards($temp_player_info['player_token']); //!empty($temp_player_info['player_rewards']) ? $temp_player_info['player_rewards'] : array(); // -- ABILITY REWARDS for HUMAN PLAYER -- // // Loop through the ability rewards for this robot if set if (!empty($temp_player_rewards['abilities']) && rpg_game::is_user()) { $temp_abilities_index = $db->get_array_list("SELECT * FROM mmrpg_index_abilities WHERE ability_flag_complete = 1;", 'ability_token'); foreach ($temp_player_rewards['abilities'] as $ability_reward_key => $ability_reward_info) { // If this ability is already unlocked, continue if (rpg_game::ability_unlocked($target_player->player_token, false, $ability_reward_info['token'])) { continue; } // Check if the required level has been met by this robot if ($temp_player_points >= $ability_reward_info['points'] && rpg_game::is_user()) { // Collect the ability info from the index $ability_info = array('ability_id' => MMRPG_SETTINGS_BATTLEABILITIES_PERROBOT_MAX + $ability_reward_key, 'ability_token' => $ability_reward_info['token']); // Create the temporary ability object for event creation $temp_ability = new rpg_ability($target_player, $target_robot, $ability_info); // Collect or define the ability variables $temp_ability_token = $ability_info['ability_token']; // Display the robot reward message markup $event_header = $temp_ability->ability_name . ' Unlocked'; $event_body = rpg_functions::get_random_positive_word() . ' <span class="player_name">' . $temp_player_info['player_name'] . '</span> unlocked new ability data!<br />'; $event_body .= '<span class="ability_name">' . $temp_ability->ability_name . '</span> can now be used in battle!'; $event_options = array(); $event_options['console_show_target'] = false; $event_options['this_header_float'] = $target_player->player_side; $event_options['this_body_float'] = $target_player->player_side; $event_options['this_ability'] = $temp_ability; $event_options['this_ability_image'] = 'icon'; $event_options['event_flag_victory'] = true; $event_options['console_show_this_player'] = false; $event_options['console_show_this_robot'] = false; $event_options['console_show_this_ability'] = true; $event_options['canvas_show_this_ability'] = false; $target_player->set_frame($ability_reward_key % 2 == 0 ? 'victory' : 'taunt'); $temp_ability->ability_frame = 'base'; $temp_ability->update_session(); $this_battle->events_create($target_robot, $target_robot, $event_header, $event_body, $event_options); // Automatically unlock this ability for use in battle $this_reward = array('ability_token' => $temp_ability_token); $show_event = !rpg_game::ability_unlocked('', '', $temp_ability_token) ? true : false; rpg_game::unlock_ability($temp_player_info, false, $this_reward, $show_event); } } } } // (COMPUTER) TARGET DEFEATED BY (HUMAN) // Check if this player was the human player (and they WON) if ($this_player->player_side == 'left') { // Increment the main game's points total with the battle points $_SESSION['GAME']['counters']['battle_points'] += $temp_reward_points_final; $_SESSION['GAME']['counters']['battle_zenny'] += $temp_reward_zenny_final; // Reference the number of points this player gets $this_player_points = $temp_reward_points_final; $this_player_zenny = $temp_reward_zenny_final; // Increment this player's points total with the battle points $player_token = $this_player->player_token; $player_info = $this_player->export_array(); if (!isset($_SESSION['GAME']['values']['battle_rewards'][$player_token]['player_points'])) { $_SESSION['GAME']['values']['battle_rewards'][$player_token]['player_points'] = 0; } $_SESSION['GAME']['values']['battle_rewards'][$player_token]['player_points'] += $this_player_points; if (!isset($_SESSION['GAME']['values']['battle_rewards'][$player_token]['player_zenny'])) { $_SESSION['GAME']['values']['battle_rewards'][$player_token]['player_zenny'] = 0; } $_SESSION['GAME']['values']['battle_rewards'][$player_token]['player_zenny'] += $this_player_zenny; // Update the global variable with the points reward $temp_human_rewards['battle_points'] = $this_player_points; $temp_human_rewards['battle_zenny'] = $this_player_zenny; // Display the win message for this player with battle points $this_robot->robot_frame = 'victory'; $this_player->set_frame('victory'); $this_robot->update_session(); $event_header = $this_player->player_name . ' Victorious'; $event_body = $this_player->print_name() . ' was victorious! '; $event_body .= 'The ' . ($target_player->counters['robots_disabled'] > 1 ? 'targets were' : 'target was') . ' defeated!'; $event_body .= '<br />'; $event_options = array(); $event_options['console_show_this_player'] = true; $event_options['console_show_target'] = false; $event_options['event_flag_victory'] = true; $event_options['this_header_float'] = $event_options['this_body_float'] = $this_player->player_side; if ($this_player->player_token != 'player' && isset($this_player->player_quotes['battle_victory'])) { $this_find = array('{target_player}', '{target_robot}', '{this_player}', '{this_robot}'); $this_replace = array($target_player->player_name, $target_robot->robot_name, $this_player->player_name, $this_robot->robot_name); $event_body .= $this_player->print_quote('battle_victory', $this_find, $this_replace); } $this_battle->events_create($this_robot, $target_robot, $event_header, $event_body, $event_options); /* * PLAYER REWARDS */ // Check if the the player was a human character if ($this_player->player_side == 'left') { // Collect the robot info array $temp_player_info = $this_player->export_array(); // Collect or define the player points and player rewards variables $temp_player_token = $temp_player_info['player_token']; $temp_player_points = rpg_game::player_points($temp_player_info['player_token']); $temp_player_rewards = !empty($temp_player_info['player_rewards']) ? $temp_player_info['player_rewards'] : array(); // -- ABILITY REWARDS for HUMAN PLAYER -- // // Loop through the ability rewards for this player if set if (!empty($temp_player_rewards['abilities']) && rpg_game::is_user()) { $temp_abilities_index = $db->get_array_list("SELECT * FROM mmrpg_index_abilities WHERE ability_flag_complete = 1;", 'ability_token'); foreach ($temp_player_rewards['abilities'] as $ability_reward_key => $ability_reward_info) { // If this ability is already unlocked, continue if (rpg_game::ability_unlocked($this_player->player_token, false, $ability_reward_info['token'])) { continue; } // Check if the required level has been met by this robot if ($temp_player_points >= $ability_reward_info['points']) { // Collect the ability info from the index $ability_info = rpg_ability::parse_index_info($temp_abilities_index[$ability_reward_info['token']]); // Create the temporary ability object for event creation $temp_ability = new rpg_ability($this_player, $this_robot, $ability_info); // Collect or define the ability variables $temp_ability_token = $ability_info['ability_token']; // Display the robot reward message markup $event_header = $ability_info['ability_name'] . ' Unlocked'; $event_body = rpg_functions::get_random_positive_word() . ' <span class="player_name">' . $temp_player_info['player_name'] . '</span> unlocked new ability data!<br />'; $event_body .= '<span class="ability_name">' . $ability_info['ability_name'] . '</span> can now be used in battle!'; $event_options = array(); $event_options['console_show_target'] = false; $event_options['this_header_float'] = $this_player->player_side; $event_options['this_body_float'] = $this_player->player_side; $event_options['this_ability'] = $temp_ability; $event_options['this_ability_image'] = 'icon'; $event_options['event_flag_victory'] = true; $event_options['console_show_this_player'] = false; $event_options['console_show_this_robot'] = false; $event_options['console_show_this_ability'] = true; $event_options['canvas_show_this_ability'] = false; $this_player->set_frame($ability_reward_key % 2 == 0 ? 'victory' : 'taunt'); $this_robot->robot_frame = $ability_reward_key % 2 == 0 ? 'taunt' : 'base'; $this_robot->update_session(); $temp_ability->ability_frame = 'base'; $temp_ability->update_session(); $this_battle->events_create($this_robot, $this_robot, $event_header, $event_body, $event_options); // Automatically unlock this ability for use in battle $this_reward = array('ability_token' => $temp_ability_token); $show_event = !rpg_game::ability_unlocked('', '', $temp_ability_token) ? true : false; rpg_game::unlock_ability($temp_player_info, false, $this_reward, $show_event); } } } } } /* * BATTLE REWARDS */ // Collect or define the player variables $this_player_token = $this_player->player_token; $this_player_info = $this_player->export_array(); // Collect or define the target player variables $target_player_token = $target_player->player_token; $target_player_info = $target_player->export_array(); // Check if this player was the human player if ($this_player->player_side == 'left') { // Update the GAME session variable with the completed battle token $save_records = $this_battle->has_flag('save_records') ? $this_battle->get_flag('save_records') : true; if ($save_records) { // Back up the current session array for this battle complete counter $bak_session_array = isset($_SESSION['GAME']['values']['battle_complete'][$this_player->player_token][$this_battle->battle_token]) ? $_SESSION['GAME']['values']['battle_complete'][$this_player->player_token][$this_battle->battle_token] : array(); // Create the new session array from scratch to ensure all values exist $new_session_array = array('battle_token' => $this_battle->battle_token, 'battle_count' => 0, 'battle_min_level' => 0, 'battle_max_level' => 0, 'battle_min_turns' => 0, 'battle_max_turns' => 0, 'battle_min_points' => 0, 'battle_max_points' => 0, 'battle_min_robots' => 0, 'battle_max_robots' => 0); // Recollect applicable battle values from the backup session array if (!empty($bak_session_array['battle_count'])) { $new_session_array['battle_count'] = $bak_session_array['battle_count']; } if (!empty($bak_session_array['battle_level'])) { $new_session_array['battle_min_level'] = $bak_session_array['battle_level']; } // LEGACY if (!empty($bak_session_array['battle_min_level'])) { $new_session_array['battle_min_level'] = $bak_session_array['battle_min_level']; } if (!empty($bak_session_array['battle_max_level'])) { $new_session_array['battle_max_level'] = $bak_session_array['battle_max_level']; } if (!empty($bak_session_array['battle_min_turns'])) { $new_session_array['battle_min_turns'] = $bak_session_array['battle_min_turns']; } if (!empty($bak_session_array['battle_max_turns'])) { $new_session_array['battle_max_turns'] = $bak_session_array['battle_max_turns']; } if (!empty($bak_session_array['battle_min_points'])) { $new_session_array['battle_min_points'] = $bak_session_array['battle_min_points']; } if (!empty($bak_session_array['battle_max_points'])) { $new_session_array['battle_max_points'] = $bak_session_array['battle_max_points']; } if (!empty($bak_session_array['battle_min_robots'])) { $new_session_array['battle_min_robots'] = $bak_session_array['battle_min_robots']; } if (!empty($bak_session_array['battle_max_robots'])) { $new_session_array['battle_max_robots'] = $bak_session_array['battle_max_robots']; } // Update and/or increment the appropriate battle variables in the new array if ($new_session_array['battle_max_level'] == 0 || $this_battle->battle_level > $new_session_array['battle_max_level']) { $new_session_array['battle_max_level'] = $this_battle->battle_level; } if ($new_session_array['battle_min_level'] == 0 || $this_battle->battle_level < $new_session_array['battle_min_level']) { $new_session_array['battle_min_level'] = $this_battle->battle_level; } if ($new_session_array['battle_max_turns'] == 0 || $this_battle->counters['battle_turn'] > $new_session_array['battle_max_turns']) { $new_session_array['battle_max_turns'] = $this_battle->counters['battle_turn']; } if ($new_session_array['battle_min_turns'] == 0 || $this_battle->counters['battle_turn'] < $new_session_array['battle_min_turns']) { $new_session_array['battle_min_turns'] = $this_battle->counters['battle_turn']; } if ($new_session_array['battle_max_points'] == 0 || $temp_human_rewards['battle_points'] > $new_session_array['battle_max_points']) { $new_session_array['battle_max_points'] = $temp_human_rewards['battle_points']; } if ($new_session_array['battle_min_points'] == 0 || $temp_human_rewards['battle_points'] < $new_session_array['battle_min_points']) { $new_session_array['battle_min_points'] = $temp_human_rewards['battle_points']; } if ($new_session_array['battle_max_robots'] == 0 || $this_player->counters['robots_total'] > $new_session_array['battle_max_robots']) { $new_session_array['battle_max_robots'] = $this_player->counters['robots_total']; } if ($new_session_array['battle_min_robots'] == 0 || $this_player->counters['robots_total'] < $new_session_array['battle_min_robots']) { $new_session_array['battle_min_robots'] = $this_player->counters['robots_total']; } $new_session_array['battle_count']++; // Update the session variable for this player with the updated battle values $_SESSION['GAME']['values']['battle_complete'][$this_player->player_token][$this_battle->battle_token] = $new_session_array; $temp_human_rewards['battle_complete'] = $_SESSION['GAME']['values']['battle_complete'][$this_player->player_token][$this_battle->battle_token]['battle_count']; } // Refresh the player info array $this_player_info = $this_player->export_array(); // ROBOT REWARDS // Loop through any robot rewards for this battle $this_robot_rewards = $this_battle->get_robot_rewards(); if (!empty($this_robot_rewards) && rpg_game::is_user()) { foreach ($this_robot_rewards as $robot_reward_key => $robot_reward_info) { // If this robot has already been unlocked by anyone, continue if (rpg_game::robot_unlocked(false, $robot_reward_info['token'])) { continue; } // Collect the robot info from the index $robot_info = rpg_robot::get_index_info($robot_reward_info['token']); // Search this player's base robots for the robot ID $robot_info['robot_id'] = 0; foreach ($this_player->player_base_robots as $base_robot) { if ($robot_info['robot_token'] == $base_robot['robot_token']) { $robot_info['robot_id'] = $base_robot['robot_id']; break; } } // Create the temporary robot object for event creation $temp_robot = new rpg_robot($this_player, $robot_info); // Collect or define the robot points and robot rewards variables $this_robot_token = $robot_reward_info['token']; $this_robot_level = !empty($robot_reward_info['level']) ? $robot_reward_info['level'] : 1; $this_robot_experience = !empty($robot_reward_info['experience']) ? $robot_reward_info['experience'] : 0; $this_robot_rewards = !empty($robot_info['robot_rewards']) ? $robot_info['robot_rewards'] : array(); // Automatically unlock this robot for use in battle $this_reward = $robot_info; $this_reward['robot_level'] = $this_robot_level; $this_reward['robot_experience'] = $this_robot_experience; rpg_game::unlock_robot($this_player_info, $this_reward, true, true); } } // ABILITY REWARDS // Loop through any ability rewards for this battle $this_ability_rewards = $this_battle->get_ability_rewards(); if (!empty($this_ability_rewards) && rpg_game::is_user()) { $temp_abilities_index = $db->get_array_list("SELECT * FROM mmrpg_index_abilities WHERE ability_flag_complete = 1;", 'ability_token'); foreach ($this_ability_rewards as $ability_reward_key => $ability_reward_info) { // Collect the ability info from the index $ability_info = rpg_ability::parse_index_info($temp_abilities_index[$ability_reward_info['token']]); // Create the temporary robot object for event creation $temp_ability = new rpg_ability($this_player, $this_robot, $ability_info); // Collect or define the robot points and robot rewards variables $this_ability_token = $ability_info['ability_token']; // Now loop through all active robots on this side of the field foreach ($this_player_info['values']['robots_active'] as $temp_key => $temp_info) { // If this robot is a mecha, skip it! if (!empty($temp_info['robot_class']) && $temp_info['robot_class'] == 'mecha') { continue; } // Equip this ability to the robot is there was a match found if (rpg_robot::has_ability_compatibility($temp_info['robot_token'], $ability_info['ability_token'])) { if (!isset($_SESSION['GAME']['values']['battle_settings'][$this_player_info['player_token']]['player_robots'][$temp_info['robot_token']]['robot_abilities'])) { $_SESSION['GAME']['values']['battle_settings'][$this_player_info['player_token']]['player_robots'][$temp_info['robot_token']]['robot_abilities'] = array(); } if (count($_SESSION['GAME']['values']['battle_settings'][$this_player_info['player_token']]['player_robots'][$temp_info['robot_token']]['robot_abilities']) < 8) { $_SESSION['GAME']['values']['battle_settings'][$this_player_info['player_token']]['player_robots'][$temp_info['robot_token']]['robot_abilities'][$ability_info['ability_token']] = array('ability_token' => $ability_info['ability_token']); } } } // If this ability has already been unlocked by the player, continue if (rpg_game::ability_unlocked($this_player_token, false, $ability_reward_info['token'])) { continue; } // Automatically unlock this ability for use in battle $this_reward = array('ability_token' => $this_ability_token); $show_event = !rpg_game::ability_unlocked('', '', $this_ability_token) ? true : false; rpg_game::unlock_ability($this_player_info, false, $this_reward, $show_event); // Display the robot reward message markup $event_header = $ability_info['ability_name'] . ' Unlocked'; $event_body = rpg_functions::get_random_positive_word() . ' <span class="player_name">' . $this_player_info['player_name'] . '</span> unlocked new ability data!<br />'; $event_body .= '<span class="ability_name">' . $ability_info['ability_name'] . '</span> can now be used in battle!'; $event_options = array(); $event_options['console_show_target'] = false; $event_options['this_header_float'] = $this_player->player_side; $event_options['this_body_float'] = $this_player->player_side; $event_options['this_ability'] = $temp_ability; $event_options['this_ability_image'] = 'icon'; $event_options['console_show_this_player'] = false; $event_options['console_show_this_robot'] = false; $event_options['console_show_this_ability'] = true; $event_options['canvas_show_this_ability'] = false; $this_player->set_frame('victory'); $temp_ability->ability_frame = 'base'; $temp_ability->update_session(); $this_battle->events_create($this_robot, false, $event_header, $event_body, $event_options); } } } // end of BATTLE REWARDS // Check if there is a field star for this stage to collect if ($this_battle->battle_result == 'victory' && !empty($this_battle->values['field_star'])) { // Collect the field star data for this battle $temp_field_star = $this_battle->values['field_star']; // Print out the event for collecting the new field star $temp_name_markup = '<span class="field_name field_type field_type_' . (!empty($temp_field_star['star_type']) ? $temp_field_star['star_type'] : 'none') . (!empty($temp_field_star['star_type2']) ? '_' . $temp_field_star['star_type2'] : '') . '">' . $temp_field_star['star_name'] . ' Star</span>'; $temp_event_header = $this_player->player_name . ''s ' . ucfirst($temp_field_star['star_kind']) . ' Star'; $temp_event_body = $this_player->print_name() . ' collected the ' . $temp_name_markup . '!<br />'; $temp_event_body .= 'The new ' . ucfirst($temp_field_star['star_kind']) . ' Star amplifies your Starforce!'; $temp_event_options = array(); $temp_event_options['console_show_this_player'] = false; $temp_event_options['console_show_target_player'] = false; $temp_event_options['console_show_this_robot'] = false; $temp_event_options['console_show_target_robot'] = false; $temp_event_options['console_show_this_ability'] = false; $temp_event_options['console_show_this'] = true; $temp_event_options['console_show_this_star'] = true; $temp_event_options['this_header_float'] = $temp_event_options['this_body_float'] = $this_player->player_side; $temp_event_options['this_star'] = $temp_field_star; $temp_event_options['this_ability'] = false; $this_battle->events_create(false, false, $temp_event_header, $temp_event_body, $temp_event_options); // Update the session with this field star data $_SESSION['GAME']['values']['battle_stars'][$temp_field_star['star_token']] = $temp_field_star; // DEBUG DEBUG //$this_battle->events_create($this_robot, $target_robot, 'DEBUG FIELD STAR', 'You got a field star! The field star names '.implode(' | ', $temp_field_star)); } // If this robot's image has been changed, reveert it back to what it was if ($this_robot->robot_core == 'copy') { if (isset($this_robot->robot_image_overlay['copy_type1'])) { unset($this_robot->robot_image_overlay['copy_type1']); } if (isset($this_robot->robot_image_overlay['copy_type2'])) { unset($this_robot->robot_image_overlay['copy_type2']); } $this_robot->update_session(); } // If the target robot's image has been changed, reveert it back to what it was if ($target_robot->robot_core == 'copy') { if (isset($target_robot->robot_image_overlay['copy_type1'])) { unset($target_robot->robot_image_overlay['copy_type1']); } if (isset($target_robot->robot_image_overlay['copy_type2'])) { unset($target_robot->robot_image_overlay['copy_type2']); } $target_robot->update_session(); } // Define the first event body markup, regardless of player type $first_event_header = $this_battle->battle_name . ($this_battle->battle_result == 'victory' ? ' Complete' : ' Failure') . ' <span class="pipe">|</span> ' . $this_battle->battle_field->field_name; if ($this_battle->battle_result == 'victory') { $first_event_body = 'Mission complete! <span class="pipe">|</span> ' . ($temp_human_rewards['battle_complete'] > 1 ? rpg_functions::get_random_positive_word() . ' That's ' . $temp_human_rewards['battle_complete'] . ' times now! ' : '') . rpg_functions::get_random_victory_quote(); } elseif ($this_battle->battle_result == 'defeat') { $first_event_body = 'Mission failure. <span class="pipe">|</span> ' . ($temp_human_rewards['battle_failure'] > 1 ? 'That's ' . $temp_human_rewards['battle_failure'] . ' times now… ' : '') . rpg_functions::get_random_defeat_quote(); } $first_event_body .= ' <span class="pipe">|</span> ' . $temp_rating_stars_markup . '<br />'; // Print out the table and markup for the battle $first_event_body .= '<table class="full">'; $first_event_body .= '<colgroup><col width="30%" /><col width="15%" /><col width="15%" /><col width="20%" /><col width="20%" /></colgroup>'; $first_event_body .= '<tbody>'; $first_event_body .= '<tr>'; $first_event_body .= '<td class="left">Base Values</td>'; $first_event_body .= '<td class="center"></td>'; $first_event_body .= '<td class="center"></td>'; $first_event_body .= '<td class="right">' . ($temp_reward_points_base == 1 ? '1 Point' : number_format($temp_reward_points_base, 0, '.', ',') . ' Points') . '</td>'; $first_event_body .= '<td class="right">' . ($temp_reward_zenny_base == 1 ? '1 Zenny' : number_format($temp_reward_zenny_base, 0, '.', ',') . ' Zenny') . '</td>'; $first_event_body .= '</tr> '; // Only grant bonuses if there was a victory if ($this_battle->battle_result == 'victory') { // Print out the label and target vs actual turn stats $first_event_body .= '<tr>'; $first_event_body .= '<td class="left">Target Turns</td>'; $first_event_body .= '<td class="center">' . $this_battle->counters['battle_turn'] . ' / ' . $this_battle->battle_turns_limit . '</td>'; // Print the markup for the bonus/penalty percent if ($temp_turn_bonus > 0) { $first_event_body .= '<td class="center positive">+' . $temp_turn_bonus . '%</td>'; } elseif ($temp_turn_bonus < 0) { $first_event_body .= '<td class="center negative">' . $temp_turn_bonus . '%</td>'; } else { $first_event_body .= '<td class="center">+0%</td>'; } // Print out any mods to the points $markup = $temp_turn_bonus_points == 1 ? '1 Point' : number_format($temp_turn_bonus_points, 0, '.', ',') . ' Points'; if ($temp_turn_bonus_points > 0) { $first_event_body .= '<td class="right positive">+' . $markup . '</td>'; } elseif ($temp_turn_bonus_points < 0) { $first_event_body .= '<td class="right negative">' . $markup . '</td>'; } else { $first_event_body .= '<td class="right">-</td>'; } // Print out any mods to the zenny $markup = $temp_turn_bonus_zenny == 1 ? '1 Zenny' : number_format($temp_turn_bonus_zenny, 0, '.', ',') . ' Zenny'; if ($temp_turn_bonus_zenny > 0) { $first_event_body .= '<td class="right positive">+' . $markup . '</td>'; } elseif ($temp_turn_bonus_zenny < 0) { $first_event_body .= '<td class="right negative">' . $markup . '</td>'; } else { $first_event_body .= '<td class="right">-</td>'; } $first_event_body .= '</tr>'; // Print out the label and target vs actual robot stats $first_event_body .= '<tr>'; $first_event_body .= '<td class="left">Target Robots</td>'; $first_event_body .= '<td class="center">' . $this_player_info['counters']['robots_masters_total'] . ' / ' . $this_battle->battle_robots_limit . '</td>'; // Print the markup for the bonus/penalty percent if ($temp_robot_bonus > 0) { $first_event_body .= '<td class="center positive">+' . $temp_robot_bonus . '%</td>'; } elseif ($temp_robot_bonus < 0) { $first_event_body .= '<td class="center negative">' . $temp_robot_bonus . '%</td>'; } else { $first_event_body .= '<td class="center">+0%</td>'; } // Print out any mods to the points $markup = $temp_robot_bonus_points == 1 ? '1 Point' : number_format($temp_robot_bonus_points, 0, '.', ',') . ' Points'; if ($temp_robot_bonus_points > 0) { $first_event_body .= '<td class="right positive">+' . $markup . '</td>'; } elseif ($temp_robot_bonus_points < 0) { $first_event_body .= '<td class="right negative">' . $markup . '</td>'; } else { $first_event_body .= '<td class="right">-</td>'; } // Print out any mods to the zenny $markup = $temp_robot_bonus_zenny == 1 ? '1 Zenny' : number_format($temp_robot_bonus_zenny, 0, '.', ',') . ' Zenny'; if ($temp_robot_bonus_zenny > 0) { $first_event_body .= '<td class="right positive">+' . $markup . '</td>'; } elseif ($temp_robot_bonus_zenny < 0) { $first_event_body .= '<td class="right negative">' . $markup . '</td>'; } else { $first_event_body .= '<td class="right">-</td>'; } $first_event_body .= '</tr>'; } elseif ($this_battle->battle_result == 'defeat') { // Print out the label and target vs actual turn stats $first_event_body .= '<tr>'; $first_event_body .= '<td class="left">Target Turns</td>'; $first_event_body .= '<td class="center">' . $this_battle->counters['battle_turn'] . ' / ' . $this_battle->battle_turns_limit . '</td>'; // Print the markup for the empty fields $first_event_body .= '<td class="center">-</td>'; $first_event_body .= '<td class="right">-</td>'; $first_event_body .= '<td class="right">-</td>'; $first_event_body .= '</tr>'; // Print out the label and target vs actual robot stats $first_event_body .= '<tr>'; $first_event_body .= '<td class="left">Target Robots</td>'; $first_event_body .= '<td class="center">' . $this_player_info['counters']['robots_masters_total'] . ' / ' . $this_battle->battle_robots_limit . '</td>'; // Print the markup for the empty fields $first_event_body .= '<td class="center">-</td>'; $first_event_body .= '<td class="right">-</td>'; $first_event_body .= '<td class="right">-</td>'; $first_event_body .= '</tr>'; } // Print out the final rewards for this battle $first_event_body .= '<tr>'; $first_event_body .= '<td class="left"><strong>Final Rewards</strong></td>'; $first_event_body .= '<td class="center"></td>'; $first_event_body .= '<td class="center"></td>'; $first_event_body .= '<td class="right"><strong>' . ($temp_reward_points_final != 1 ? number_format($temp_reward_points_final, 0, '.', ',') . ' Points' : '1 Point') . '</strong></td>'; $first_event_body .= '<td class="right"><strong>' . ($temp_reward_zenny_final != 1 ? number_format($temp_reward_zenny_final, 0, '.', ',') . ' Zenny' : '1 Zenny') . '</strong></td>'; $first_event_body .= '</tr>'; // Finalize the table body for the results $first_event_body .= '</tbody>'; $first_event_body .= '</table>'; // Print the battle complete message $event_options = array(); $event_options['this_header_float'] = 'center'; $event_options['this_body_float'] = 'center'; $event_options['this_event_class'] = false; $event_options['console_show_this'] = false; $event_options['console_show_target'] = false; $event_options['console_container_classes'] = 'field_type field_type_event field_type_' . ($this_battle->battle_result == 'victory' ? 'nature' : 'flame'); $this_battle->events_create($target_robot, $this_robot, $first_event_header, $first_event_body, $event_options); // Add the flag to prevent any further messages from appearing $this_battle->set_flag('battle_complete_message_created', true); // Return the result for this battle function return $this_return; }
// If the UNLOCK RHYTHM password was created if (!empty($temp_flags['drcossack_password_robotgetrhythmandblues'])) { if (!rpg_game::robot_unlocked(false, 'rhythm')) { // Unlock Roll as a playable character $unlock_player_info = $mmrpg_index['players']['dr-cossack']; $unlock_robot_info = rpg_robot::get_index_info('rhythm'); $unlock_robot_info['robot_level'] = 1; $unlock_robot_info['robot_experience'] = rpg_prototype::calculate_experience(1) - 1; rpg_game::unlock_robot($unlock_player_info, $unlock_robot_info, true); header('Location: prototype.php'); exit; } } // If the UNLOCK BUBBLE BOMB password was created if (!empty($temp_flags['drcossack_password_abilitygetbubblebombsaway'])) { if (!rpg_game::ability_unlocked('dr-cossack', false, 'bubble-bomb')) { // Unlock Bubble Bomb as an equippable ability rpg_game::unlock_ability($mmrpg_index['players']['dr-cossack'], false, array('ability_token' => 'bubble-bomb'), true); header('Location: prototype.php'); exit; } } // If the UNLOCK SHADOW BLADE password was created if (!empty($temp_flags['drcossack_password_abilitygetcutterofdarkness'])) { if (!rpg_game::ability_unlocked('dr-cossack', false, 'shadow-blade')) { // Unlock Bubble Bomb as an equippable ability rpg_game::unlock_ability($mmrpg_index['players']['dr-cossack'], false, array('ability_token' => 'shadow-blade'), true); header('Location: prototype.php'); exit; } }
} elseif ($token == 'youspinmerightround') { $ability_token = 'top-spin'; } elseif ($token == 'snakeinthegrass') { $ability_token = 'search-snake'; } elseif ($token == 'electricalcommunication') { $ability_token = 'spark-shock'; } elseif ($token == 'cutterofdarkness') { $ability_token = 'shadow-blade'; } elseif ($token == 'bubblebombsaway') { $ability_token = 'bubble-bomb'; } // If the ability token was not empty, let's unlock it if (!empty($ability_token) && !isset($_SESSION['GAME']['flags']['events']['password-item_' . $player_token . '_' . $password_token])) { //die('<pre>$ability_token = '.print_r($ability_token, true).'</pre>'); // Only unlock the ability if it's not already unlocked if (!rpg_game::ability_unlocked($player_token, false, $ability_token)) { //die('<pre>rpg_game::ability_unlocked('.$player_token.', false, '.$ability_token.')</pre>'); // Collect info about this ability $ability_info = rpg_ability::get_index_info($ability_token); // Unlock it as an equippable ability rpg_game::unlock_ability($player_info, false, $ability_info, true); //exit('ability unlocked'); } // Now that we finished parsing the password, let's remove it $_SESSION['GAME']['flags']['events']['password-ability_' . $password_token] = true; unset($_SESSION['GAME']['values']['battle_passwords'][$player_token][$password_token]); //exit('we unlocked the ability, apparently'); // Redirect back to the prototype menu and exit header('Location: prototype.php'); exit; } else {