Ejemplo n.º 1
0
 public static function print_editor_options_list_markup($player_ability_rewards, $robot_ability_rewards, $player_info, $robot_info)
 {
     // Define the global variables
     global $mmrpg_index, $this_current_uri, $this_current_url, $db;
     global $allowed_edit_players, $allowed_edit_robots, $allowed_edit_abilities;
     global $allowed_edit_data_count, $allowed_edit_player_count, $allowed_edit_robot_count, $first_robot_token, $global_allow_editing;
     global $key_counter, $player_rewards, $player_robot_favourites, $player_robot_database, $temp_robot_totals, $player_options_markup, $item_options_markup;
     global $mmrpg_database_abilities;
     $session_token = rpg_game::session_token();
     if (empty($player_info)) {
         return false;
     }
     if (empty($robot_info)) {
         return false;
     }
     // Define the options markup variable
     $this_options_markup = '';
     $player_ability_options = array();
     $player_abilities_unlocked = array_keys($player_ability_rewards);
     if (!empty($mmrpg_database_abilities)) {
         $temp_category = 'special-weapons';
         foreach ($mmrpg_database_abilities as $ability_token => $ability_info) {
             if ($ability_token == 'energy-boost') {
                 $temp_category = 'support-abilities';
             }
             if (!in_array($ability_token, $player_abilities_unlocked)) {
                 continue;
             }
             $ability_info = rpg_ability::parse_index_info($ability_info);
             $option_markup = rpg_ability::print_editor_option_markup($robot_info, $ability_info);
             $player_ability_options[$temp_category][] = $option_markup;
         }
     }
     if (!empty($player_ability_options)) {
         foreach ($player_ability_options as $category_token => $ability_options) {
             $category_name = ucwords(str_replace('-', ' ', $category_token));
             $this_options_markup .= '<optgroup label="' . $category_name . '">' . implode('', $ability_options) . '</optgroup>';
         }
     }
     /*
     $robot_ability_rewards_options = array();
     foreach ($robot_ability_rewards AS $temp_ability_info){
         if (empty($temp_ability_info['ability_token']) || !isset($mmrpg_database_abilities[$temp_ability_info['ability_token']])){ continue; }
         $temp_token = $temp_ability_info['ability_token'];
         $temp_ability_info = rpg_ability::parse_index_info($mmrpg_database_abilities[$temp_token]);
         $temp_option_markup = rpg_ability::print_editor_option_markup($robot_info, $temp_ability_info);
         if (!empty($temp_option_markup)){ $robot_ability_rewards_options[] = $temp_option_markup; }
     }
     $robot_ability_rewards_options = '<optgroup label="Robot Abilities">'.implode('', $robot_ability_rewards_options).'</optgroup>';
     $this_options_markup .= $robot_ability_rewards_options;
     */
     /*
     $player_ability_weapon_options = array();
     $player_ability_support_options = array();
     foreach ($player_ability_rewards AS $temp_ability_key => $temp_ability_info){
         if (empty($temp_ability_info['ability_token']) || !isset($mmrpg_database_abilities[$temp_ability_info['ability_token']])){ continue; }
         $temp_token = $temp_ability_info['ability_token'];
         $temp_ability_info = rpg_ability::parse_index_info($mmrpg_database_abilities[$temp_token]);
         $temp_option_markup = rpg_ability::print_editor_option_markup($robot_info, $temp_ability_info);
     
         if (!empty($temp_option_markup)){
             if ($temp_category == 'weapon'){ $player_ability_weapon_options[] = $temp_option_markup; }
             elseif ($temp_category == 'support'){ $player_ability_support_options[] = $temp_option_markup; }
         }
     }
     $player_ability_weapon_options = '<optgroup label="Special Weapons">'.implode('', $player_ability_weapon_options).'</optgroup>';
     $player_ability_support_options = '<optgroup label="Support Abilities">'.implode('', $player_ability_support_options).'</optgroup>';
     $this_options_markup .= $player_ability_weapon_options;
     $this_options_markup .= $player_ability_support_options;
     */
     // Add an option at the bottom to remove the ability
     $this_options_markup .= '<optgroup label="Ability Actions">';
     $this_options_markup .= '<option value="" title="">- Remove Ability -</option>';
     $this_options_markup .= '</optgroup>';
     // Return the generated select markup
     return $this_options_markup;
 }
Ejemplo n.º 2
0
                                                    <div class="ability_container">
                                                    <?php
                                                    $robot_ability_rewards = $robot_info['robot_rewards']['abilities'];
                                                    if (
                                                        !empty($robot_ability_rewards) &&
                                                        (($robot_info['robot_class'] == 'master' && $robot_info['robot_unlocked'])
                                                        || ($robot_info['robot_class'] == 'mecha' && $robot_info['robot_summoned']))
                                                        ){
                                                        $temp_string = array();
                                                        $ability_key = 0;

                                                        //$temp_abilities_index = $db->get_array_list("SELECT * FROM mmrpg_index_abilities WHERE ability_flag_complete = 1;", 'ability_token');

                                                        foreach ($robot_ability_rewards AS $this_info){
                                                            $this_level = $this_info['level'];
                                                            $this_ability = rpg_ability::parse_index_info($mmrpg_database_abilities[$this_info['token']]);
                                                            $this_ability_token = $this_ability['ability_token'];
                                                            $this_ability_name = $this_ability['ability_name'];
                                                            $this_ability_type = !empty($this_ability['ability_type']) ? $this_ability['ability_type'] : false;
                                                            $this_ability_type2 = !empty($this_ability['ability_type2']) ? $this_ability['ability_type2'] : false;
                                                            if (!empty($this_ability_type) && !empty($mmrpg_database_types[$this_ability_type])){ $this_ability_type = $mmrpg_database_types[$this_ability_type]['type_name'].' Type'; }
                                                            else { $this_ability_type = ''; }
                                                            $this_ability_damage = !empty($this_ability['ability_damage']) ? $this_ability['ability_damage'] : 0;
                                                            $this_ability_recovery = !empty($this_ability['ability_recovery']) ? $this_ability['ability_recovery'] : 0;
                                                            $this_ability_accuracy = !empty($this_ability['ability_accuracy']) ? $this_ability['ability_accuracy'] : 0;
                                                            $this_ability_description = !empty($this_ability['ability_description']) ? $this_ability['ability_description'] : '';
                                                            //if (!empty($this_ability_type)){ $this_ability_title_plain .= ' | '.$this_ability_type; }
                                                            //if (!empty($this_ability_damage)){ $this_ability_title_plain .= ' | '.$this_ability_damage.' Damage'; }
                                                            //if (!empty($this_ability_recovery)){ $this_ability_title_plain .= ' | '.$this_ability_recovery.' Recovery'; }
                                                            //if (!empty($this_ability_accuracy)){ $this_ability_title_plain .= ' | '.$this_ability_accuracy.'% Accuracy'; }
                                                            //if (!empty($this_ability_description)){ $this_ability_title_plain .= ' | '.$this_ability_description; }
Ejemplo n.º 3
0
    $temp_condition .= $mmrpg_database_abilities_filter;
}
// Collect the database abilities
$ability_fields = rpg_ability::get_index_fields(true);
$db->query("SET @ability_row_number = 0;");
$mmrpg_database_abilities = $db->get_array_list("SELECT {$ability_fields} FROM mmrpg_index_abilities WHERE ability_flag_published = 1 AND (ability_flag_hidden = 0 OR ability_token = '{$this_current_token}')  {$temp_condition} ORDER BY ability_order ASC", 'ability_token');
$mmrpg_database_abilities_count = $db->get_value("SELECT COUNT(ability_id) AS ability_count FROM mmrpg_index_abilities WHERE ability_flag_published = 1 AND ability_flag_hidden = 0 {$temp_condition_unfiltered};", 'ability_count');
$mmrpg_database_abilities_numbers = $db->get_array_list("SELECT ability_token, (@ability_row_number:=@ability_row_number + 1) AS ability_key FROM mmrpg_index_abilities WHERE ability_flag_published = 1 {$temp_condition_unfiltered} ORDER BY ability_flag_hidden ASC, ability_order ASC;", 'ability_token');
// Remove unallowed abilities from the database, and increment counters
foreach ($mmrpg_database_abilities as $temp_token => $temp_info) {
    // Define first ability token if not set
    if (!isset($first_ability_token)) {
        $first_ability_token = $temp_token;
    }
    // Send this data through the ability index parser
    $temp_info = rpg_ability::parse_index_info($temp_info);
    // Collect this ability's key in the index
    $temp_info['ability_key'] = $mmrpg_database_abilities_numbers[$temp_token]['ability_key'];
    // Ensure this ability's image exists, else default to the placeholder
    $temp_image_token = isset($temp_info['ability_image']) ? $temp_info['ability_image'] : $temp_token;
    if ($temp_info['ability_flag_complete']) {
        $temp_info['ability_image'] = $temp_image_token;
    } else {
        $temp_info['ability_image'] = 'ability';
    }
    $temp_info['ability_speed'] = isset($temp_info['ability_speed']) ? $temp_info['ability_speed'] + 9 : 10;
    $temp_info['ability_energy'] = isset($temp_info['ability_energy']) ? $temp_info['ability_energy'] : 10;
    // Increment the corresponding type counter for this ability else the empty counter
    if (!empty($temp_info['ability_type'])) {
        if (!isset($mmrpg_database_abilities_types[$temp_info['ability_type']])) {
            $mmrpg_database_abilities_types[$temp_info['ability_type']] = 0;
Ejemplo n.º 4
0
    public static function print_editor_markup($player_info)
    {
        // Define the global variables
        global $mmrpg_index, $this_current_uri, $this_current_url, $db;
        global $allowed_edit_players, $allowed_edit_fields, $global_allow_editing;
        global $allowed_edit_data_count, $allowed_edit_player_count, $first_player_token;
        global $key_counter, $player_key, $player_counter, $player_rewards, $player_field_rewards, $player_item_rewards, $temp_player_totals, $player_options_markup;
        global $mmrpg_database_robots, $mmrpg_database_items;
        $session_token = rpg_game::session_token();
        // If either fo empty, return error
        if (empty($player_info)) {
            return 'error:player-empty';
        }
        // Collect the approriate database indexes
        if (empty($mmrpg_database_robots)) {
            $mmrpg_database_robots = $db->get_array_list("SELECT * FROM mmrpg_index_robots WHERE robot_flag_complete = 1;", 'robot_token');
        }
        if (empty($mmrpg_database_items)) {
            $mmrpg_database_items = $db->get_array_list("SELECT * FROM mmrpg_index_abilities WHERE ability_class = 'item' AND ability_flag_complete = 1;", 'ability_token');
        }
        // Define the quick-access variables for later use
        $player_token = $player_info['player_token'];
        if (!isset($first_player_token)) {
            $first_player_token = $player_token;
        }
        // Define the player's image and size if not defined
        $player_info['player_image'] = !empty($player_info['player_image']) ? $player_info['player_image'] : $player_info['player_token'];
        $player_info['player_image_size'] = !empty($player_info['player_image_size']) ? $player_info['player_image_size'] : 40;
        // Define the player's battle points total, battles complete, and other details
        $player_info['player_points'] = rpg_game::player_points($player_token);
        $player_info['player_battles_complete'] = rpg_prototype::battles_complete($player_token);
        $player_info['player_battles_complete_total'] = rpg_prototype::battles_complete($player_token, false);
        $player_info['player_battles_failure'] = rpg_prototype::battles_failure($player_token);
        $player_info['player_battles_failure_total'] = rpg_prototype::battles_failure($player_token, false);
        $player_info['player_robots_count'] = 0;
        $player_info['player_abilities_count'] = rpg_game::abilities_unlocked($player_token);
        $player_info['player_field_stars'] = rpg_game::stars_unlocked($player_token, 'field');
        $player_info['player_fusion_stars'] = rpg_game::stars_unlocked($player_token, 'fusion');
        $player_info['player_screw_counter'] = 0;
        $player_info['player_heart_counter'] = 0;
        // Define the player's experience points total
        $player_info['player_experience'] = 0;
        // Collect this player's current defined omega item list
        if (!empty($_SESSION[$session_token]['values']['battle_rewards'])) {
            //$debug_experience_sum = $player_token.' : ';
            foreach ($_SESSION[$session_token]['values']['battle_rewards'] as $temp_player => $temp_player_info) {
                if (!empty($_SESSION[$session_token]['values']['battle_rewards'][$temp_player]['player_robots'])) {
                    $temp_player_robot_rewards = $_SESSION[$session_token]['values']['battle_rewards'][$temp_player]['player_robots'];
                    $temp_player_robot_settings = $_SESSION[$session_token]['values']['battle_settings'][$temp_player]['player_robots'];
                    if (empty($temp_player_robot_rewards) || empty($temp_player_robot_settings)) {
                        unset($_SESSION[$session_token]['values']['battle_rewards'][$temp_player]['player_robots']);
                        unset($_SESSION[$session_token]['values']['battle_settings'][$temp_player]['player_robots']);
                        continue;
                    }
                    foreach ($temp_player_robot_rewards as $temp_key => $temp_robot_info) {
                        if (empty($temp_robot_info['robot_token'])) {
                            unset($_SESSION[$session_token]['values']['battle_rewards'][$temp_player]['player_robots'][$temp_key]);
                            unset($_SESSION[$session_token]['values']['battle_settings'][$temp_player]['player_robots'][$temp_key]);
                            continue;
                        }
                        $temp_robot_settings = $temp_player_robot_settings[$temp_robot_info['robot_token']];
                        $temp_robot_rewards = $temp_player_robot_settings[$temp_robot_info['robot_token']];
                        // If this robot is not owned by the player, skip it as it doesn't count towards their totals
                        if (empty($temp_robot_settings['original_player']) && $temp_player != $player_token) {
                            continue;
                        } elseif (empty($temp_robot_settings['original_player'])) {
                            $temp_robot_settings['original_player'] = $temp_player;
                        }
                        if ($temp_robot_settings['original_player'] != $player_token) {
                            continue;
                        }
                        //$debug_experience_sum .= $temp_robot_info['robot_token'].', ';
                        $player_info['player_robots_count']++;
                        if (!empty($temp_robot_info['robot_level'])) {
                            $player_info['player_experience'] += $temp_robot_info['robot_level'] * MMRPG_SETTINGS_BATTLEPOINTS_PERROBOT;
                        }
                        if (!empty($temp_robot_info['robot_experience'])) {
                            $player_info['player_experience'] += $temp_robot_info['robot_experience'];
                        }
                    }
                }
            }
            //die($debug_experience_sum);
        }
        // Collect this player's current field selection from the omega session
        $temp_session_key = $player_info['player_token'] . '_target-robot-omega_prototype';
        $player_info['target_robot_omega'] = !empty($_SESSION[$session_token]['values'][$temp_session_key]) ? $_SESSION[$session_token]['values'][$temp_session_key] : array();
        $player_info['player_fields_current'] = array();
        //die('<pre>$player_info[\'target_robot_omega\'] = '.print_r($player_info['target_robot_omega'], true).'</pre>');
        if (count($player_info['target_robot_omega']) == 2) {
            $player_info['target_robot_omega'] = array_shift($player_info['target_robot_omega']);
        }
        foreach ($player_info['target_robot_omega'] as $key => $info) {
            $field = rpg_field::get_index_info($info['field']);
            if (empty($field)) {
                continue;
            }
            $player_info['player_fields_current'][] = $field;
        }
        // Define this player's stat type boost for display purposes
        $player_info['player_stat_type'] = '';
        if (!empty($player_info['player_energy'])) {
            $player_info['player_stat_type'] = 'energy';
        } elseif (!empty($player_info['player_attack'])) {
            $player_info['player_stat_type'] = 'attack';
        } elseif (!empty($player_info['player_defense'])) {
            $player_info['player_stat_type'] = 'defense';
        } elseif (!empty($player_info['player_speed'])) {
            $player_info['player_stat_type'] = 'speed';
        }
        // Define whether or not field switching is enabled
        $temp_allow_field_switch = rpg_prototype::campaign_complete($player_info['player_token']) || rpg_prototype::campaign_complete();
        // Collect a temp robot object for printing items
        if ($player_info['player_token'] == 'dr-light') {
            $robot_info = rpg_robot::parse_index_info($mmrpg_database_robots['mega-man']);
        } elseif ($player_info['player_token'] == 'dr-wily') {
            $robot_info = rpg_robot::parse_index_info($mmrpg_database_robots['bass']);
        } elseif ($player_info['player_token'] == 'dr-cossack') {
            $robot_info = rpg_robot::parse_index_info($mmrpg_database_robots['proto-man']);
        }
        // Define the markup variable
        $this_markup = '';
        // Start the output buffer
        ob_start();
        // DEBUG
        //die(print_r($player_field_rewards, true));
        ?>
            <div class="event event_double event_<?php 
        echo $player_key == $first_player_token ? 'visible' : 'hidden';
        ?>
" data-token="<?php 
        echo $player_info['player_token'] . '_' . $player_info['player_token'];
        ?>
">
                <div class="this_sprite sprite_left" style="height: 40px;">
                    <?php 
        $temp_margin = -1 * ceil(($player_info['player_image_size'] - 40) * 0.5);
        ?>
                    <div style="margin-top: <?php 
        echo $temp_margin;
        ?>
px; margin-bottom: <?php 
        echo $temp_margin * 3;
        ?>
px; background-image: url(i/p/<?php 
        echo !empty($player_info['player_image']) ? $player_info['player_image'] : $player_info['player_token'];
        ?>
/mr<?php 
        echo $player_info['player_image_size'];
        ?>
.png?<?php 
        echo MMRPG_CONFIG_CACHE_DATE;
        ?>
); " class="sprite sprite_player sprite_player_sprite sprite_<?php 
        echo $player_info['player_image_size'] . 'x' . $player_info['player_image_size'];
        ?>
 sprite_<?php 
        echo $player_info['player_image_size'] . 'x' . $player_info['player_image_size'];
        ?>
_mug player_status_active player_position_active"><?php 
        echo $player_info['player_name'];
        ?>
</div>
                </div>
                <div class="header header_left player_type player_type_<?php 
        echo !empty($player_info['player_stat_type']) ? $player_info['player_stat_type'] : 'none';
        ?>
" style="margin-right: 0;"><?php 
        echo $player_info['player_name'];
        ?>
&#39;s Data <span class="player_type"><?php 
        echo !empty($player_info['player_stat_type']) ? ucfirst($player_info['player_stat_type']) : 'Neutral';
        ?>
 Type</span></div>
                <div class="body body_left" style="margin-right: 0; padding: 2px 3px; height: auto;">
                    <table class="full" style="margin-bottom: 5px;">
                        <colgroup>
                            <col width="48.5%" />
                            <col width="1%" />
                            <col width="48.5%" />
                        </colgroup>
                        <tbody>

                            <tr>
                                <td  class="right">
                                    <label style="display: block; float: left;">Name :</label>
                                    <span class="player_name player_type player_type_none"><?php 
        echo $player_info['player_name'];
        ?>
</span>
                                </td>
                                <td class="center">&nbsp;</td>
                                <td class="right">
                                    <label style="display: block; float: left;">Bonus :</label>
                                    <?php 
        // Display any special boosts this player has
        if (!empty($player_info['player_stat_type'])) {
            echo '<span class="player_name player_type player_type_' . $player_info['player_stat_type'] . '">Robot ' . ucfirst($player_info['player_stat_type']) . ' +' . $player_info['player_' . $player_info['player_stat_type']] . '%</span>';
        } else {
            echo '<span class="player_name player_type player_type_none">None</span>';
        }
        ?>
                                </td>
                            </tr>

                            <tr>
                                <td  class="right">
                                    <label style="display: block; float: left;">Exp Points :</label>
                                    <span class="player_stat player_type player_type_<?php 
        echo !empty($player_info['player_experience']) ? 'cutter' : 'none';
        ?>
"><?php 
        echo number_format($player_info['player_experience'], 0, '.', ',');
        ?>
 EXP</span>
                                </td>
                                <td class="center">&nbsp;</td>
                                <td  class="right">
                                    <label style="display: block; float: left;">Unlocked Robots :</label>
                                    <span class="player_stat player_type player_type_<?php 
        echo !empty($player_info['player_robots_count']) ? 'cutter' : 'none';
        ?>
"><?php 
        echo $player_info['player_robots_count'] . ' ' . ($player_info['player_robots_count'] == 1 ? 'Robot' : 'Robots');
        ?>
</span>
                                </td>
                            </tr>
                            <tr>
                                <td  class="right">
                                    <label style="display: block; float: left;">Battle Points :</label>
                                    <span class="player_stat player_type player_type_<?php 
        echo !empty($player_info['player_points']) ? 'cutter' : 'none';
        ?>
"><?php 
        echo number_format($player_info['player_points'], 0, '.', ',');
        ?>
 BP</span>
                                </td>
                                <td class="center">&nbsp;</td>
                                <td  class="right">
                                    <label style="display: block; float: left;">Unlocked Abilities :</label>
                                    <span class="player_stat player_type player_type_<?php 
        echo !empty($player_info['player_abilities_count']) ? 'cutter' : 'none';
        ?>
"><?php 
        echo $player_info['player_abilities_count'] . ' ' . ($player_info['player_abilities_count'] == 1 ? 'Ability' : 'Abilities');
        ?>
</span>
                                </td>
                            </tr>

                            <tr>
                                <td  class="right">
                                    <label style="display: block; float: left;">Missions Completed :</label>
                                    <span class="player_stat player_type player_type_<?php 
        echo !empty($player_info['player_battles_complete']) ? 'energy' : 'none';
        ?>
"><?php 
        echo $player_info['player_battles_complete'];
        ?>
 Missions</span>
                                </td>
                                <td class="center">&nbsp;</td>
                                <td  class="right">
                                    <label style="display: block; float: left;">Total Victories :</label>
                                    <span class="player_stat player_type player_type_<?php 
        echo !empty($player_info['player_battles_complete_total']) ? 'energy' : 'none';
        ?>
"><?php 
        echo $player_info['player_battles_complete_total'];
        ?>
 Victories</span>
                                </td>
                            </tr>
                            <tr>
                                <td  class="right">
                                    <label style="display: block; float: left;">Missions Failed :</label>
                                    <span class="player_stat player_type player_type_<?php 
        echo !empty($player_info['player_battles_failure']) ? 'attack' : 'none';
        ?>
"><?php 
        echo $player_info['player_battles_failure'];
        ?>
 Missions</span>
                                </td>
                                <td class="center">&nbsp;</td>
                                <td  class="right">
                                    <label style="display: block; float: left;">Total Defeats :</label>
                                    <span class="player_stat player_type player_type_<?php 
        echo !empty($player_info['player_battles_failure_total']) ? 'attack' : 'none';
        ?>
"><?php 
        echo $player_info['player_battles_failure_total'];
        ?>
 Defeats</span>
                                </td>
                            </tr>

                            <tr>
                                <td  class="right">
                                    <?php 
        if (!empty($player_info['player_field_stars'])) {
            ?>
                                    <label style="display: block; float: left;">Field Stars :</label>
                                    <span class="player_stat player_type player_type_<?php 
            echo !empty($player_info['player_field_stars']) ? 'electric' : 'empty';
            ?>
"><?php 
            echo $player_info['player_field_stars'] . ' ' . ($player_info['player_field_stars'] == 1 ? 'Star' : 'Stars');
            ?>
</span>
                                    <?php 
        } else {
            ?>
                                    <label style="display: block; float: left; opacity: 0.5; filter: alpha(opacity=50); ">??? :</label>
                                    <span class="player_stat player_type player_type_empty" style=" opacity: 0.5; filter: alpha(opacity=50); ">0</span>
                                    <?php 
        }
        ?>
                                </td>
                                <td class="center">&nbsp;</td>
                                <td  class="right">
                                    <?php 
        if (!empty($player_info['player_fusion_stars'])) {
            ?>
                                    <label style="display: block; float: left;">Fusion Stars :</label>
                                    <span class="player_stat player_type player_type_<?php 
            echo !empty($player_info['player_fusion_stars']) ? 'time' : 'empty';
            ?>
"><?php 
            echo $player_info['player_fusion_stars'] . ' ' . ($player_info['player_fusion_stars'] == 1 ? 'Star' : 'Stars');
            ?>
</span>
                                    <?php 
        } else {
            ?>
                                    <label style="display: block; float: left; opacity: 0.5; filter: alpha(opacity=50); ">??? :</label>
                                    <span class="player_stat player_type player_type_empty" style=" opacity: 0.5; filter: alpha(opacity=50); ">0</span>
                                    <?php 
        }
        ?>
                                </td>
                            </tr>

                        </tbody>
                    </table>



                    <?php 
        if (false && !empty($player_item_rewards)) {
            ?>

                        <table class="full">
                            <colgroup>
                                <col width="100%" />
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td class="right" style="padding-top: 4px;">
                                    <label class="item_header">Player Items :</label>
                                        <div class="item_container" style="height: auto;">
                                        <?php 
            // Define the array to hold ALL the reward option markup
            $item_rewards_options = '';
            // Collect this player's item rewards and add them to the dropdown
            //$player_item_rewards = !empty($player_rewards['player_items']) ? $player_rewards['player_items'] : array();
            //if (!empty($player_item_rewards)){ sort($player_item_rewards); }
            // DEBUG
            //$debug_tokens = array();
            //foreach ($player_item_rewards AS $info){ $debug_tokens[] = $info['ability_token']; }
            //echo 'before:'.implode(',', array_keys($debug_tokens)).'<br />';
            // Sort the item index based on item group
            uasort($player_item_rewards, array('rpg_functions', 'items_sort_for_editor'));
            // DEBUG
            //echo 'after:'.implode(',', array_keys($player_item_rewards)).'<br />';
            // DEBUG
            //$debug_tokens = array();
            //foreach ($player_item_rewards AS $info){ $debug_tokens[] = $info['ability_token']; }
            //echo 'after:'.implode(',', $debug_tokens).'<br />';
            // Dont' bother generating option dropdowns if editing is disabled
            if ($global_allow_editing) {
                $player_item_rewards_options = array();
                foreach ($player_item_rewards as $temp_item_key => $temp_item_info) {
                    if (empty($temp_item_info['ability_token'])) {
                        continue;
                    }
                    $temp_token = $temp_item_info['ability_token'];
                    $temp_item_info = rpg_ability::parse_index_info($mmrpg_database_items[$temp_token]);
                    $temp_option_markup = rpg_ability::print_editor_option_markup($robot_info, $temp_item_info);
                    if (!empty($temp_option_markup)) {
                        $player_item_rewards_options[] = $temp_option_markup;
                    }
                }
                $player_item_rewards_options = '<optgroup label="Player Items">' . implode('', $player_item_rewards_options) . '</optgroup>';
                $item_rewards_options .= $player_item_rewards_options;
                /*
                // Collect this robot's item rewards and add them to the dropdown
                $player_item_rewards = !empty($player_rewards['player_items']) ? $player_rewards['player_items'] : array();
                $player_item_settings = !empty($player_settings['player_items']) ? $player_settings['player_items'] : array();
                foreach ($player_item_settings AS $token => $info){ if (empty($player_item_rewards[$token])){ $player_item_rewards[$token] = $info; } }
                if (!empty($player_item_rewards)){ sort($player_item_rewards); }
                $player_item_rewards_options = array();
                foreach ($player_item_rewards AS $temp_item_info){
                    if (empty($temp_item_info['ability_token'])){ continue; }
                    $temp_token = $temp_item_info['ability_token'];
                    $temp_item_info = rpg_ability::parse_index_info($mmrpg_database_items[$temp_token]);
                    $temp_option_markup = rpg_ability::print_editor_option_markup($robot_info, $temp_item_info);
                    if (!empty($temp_option_markup)){ $player_item_rewards_options[] = $temp_option_markup; }
                }
                $player_item_rewards_options = '<optgroup label="Player Items">'.implode('', $player_item_rewards_options).'</optgroup>';
                $item_rewards_options .= $player_item_rewards_options;
                */
                // Add an option at the bottom to remove the ability
                $item_rewards_options .= '<optgroup label="Item Actions">';
                $item_rewards_options .= '<option value="" title="">- Remove Item -</option>';
                $item_rewards_options .= '</optgroup>';
            }
            // Loop through the robot's current items and list them one by one
            $empty_item_counter = 0;
            $temp_string = array();
            $temp_inputs = array();
            $item_key = 0;
            if (!empty($player_info['player_items_current'])) {
                // DEBUG
                //echo 'robot-ability:';
                foreach ($player_info['player_items_current'] as $key => $player_item) {
                    if (empty($player_item['ability_token'])) {
                        continue;
                    } elseif ($player_item['ability_token'] == '*') {
                        continue;
                    } elseif ($player_item['ability_token'] == 'ability') {
                        continue;
                    } elseif ($item_key > 7) {
                        continue;
                    }
                    $this_item = rpg_ability::parse_index_info($mmrpg_database_items[$player_item['ability_token']]);
                    if (empty($this_item)) {
                        continue;
                    }
                    $this_item_token = $this_item['ability_token'];
                    $this_item_name = $this_item['ability_name'];
                    $this_item_type = !empty($this_item['ability_type']) ? $this_item['ability_type'] : false;
                    $this_item_type2 = !empty($this_item['ability_type2']) ? $this_item['ability_type2'] : false;
                    if (!empty($this_item_type) && !empty($mmrpg_index['types'][$this_item_type])) {
                        $this_item_type = $mmrpg_index['types'][$this_item_type]['type_name'] . ' Type';
                        if (!empty($this_item_type2) && !empty($mmrpg_index['types'][$this_item_type2])) {
                            $this_item_type = str_replace(' Type', ' / ' . $mmrpg_index['types'][$this_item_type2]['type_name'] . ' Type', $this_item_type);
                        }
                    } else {
                        $this_item_type = '';
                    }
                    $this_item_energy = isset($this_item['ability_energy']) ? $this_item['ability_energy'] : 4;
                    $this_item_damage = !empty($this_item['ability_damage']) ? $this_item['ability_damage'] : 0;
                    $this_item_damage2 = !empty($this_item['ability_damage2']) ? $this_item['ability_damage2'] : 0;
                    $this_item_damage_percent = !empty($this_item['ability_damage_percent']) ? true : false;
                    $this_item_damage2_percent = !empty($this_item['ability_damage2_percent']) ? true : false;
                    if ($this_item_damage_percent && $this_item_damage > 100) {
                        $this_item_damage = 100;
                    }
                    if ($this_item_damage2_percent && $this_item_damage2 > 100) {
                        $this_item_damage2 = 100;
                    }
                    $this_item_recovery = !empty($this_item['ability_recovery']) ? $this_item['ability_recovery'] : 0;
                    $this_item_recovery2 = !empty($this_item['ability_recovery2']) ? $this_item['ability_recovery2'] : 0;
                    $this_item_recovery_percent = !empty($this_item['ability_recovery_percent']) ? true : false;
                    $this_item_recovery2_percent = !empty($this_item['ability_recovery2_percent']) ? true : false;
                    if ($this_item_recovery_percent && $this_item_recovery > 100) {
                        $this_item_recovery = 100;
                    }
                    if ($this_item_recovery2_percent && $this_item_recovery2 > 100) {
                        $this_item_recovery2 = 100;
                    }
                    $this_item_accuracy = !empty($this_item['ability_accuracy']) ? $this_item['ability_accuracy'] : 0;
                    $this_item_description = !empty($this_item['ability_description']) ? $this_item['ability_description'] : '';
                    $this_item_description = str_replace('{DAMAGE}', $this_item_damage, $this_item_description);
                    $this_item_description = str_replace('{RECOVERY}', $this_item_recovery, $this_item_description);
                    $this_item_description = str_replace('{DAMAGE2}', $this_item_damage2, $this_item_description);
                    $this_item_description = str_replace('{RECOVERY2}', $this_item_recovery2, $this_item_description);
                    $this_item_title = rpg_ability::print_editor_title_markup($robot_info, $this_item);
                    $this_item_title_plain = strip_tags(str_replace('<br />', '&#10;', $this_item_title));
                    $this_item_title_tooltip = htmlentities($this_item_title, ENT_QUOTES, 'UTF-8');
                    $this_item_title_html = str_replace(' ', '&nbsp;', $this_item_name);
                    $temp_select_options = str_replace('value="' . $this_item_token . '"', 'value="' . $this_item_token . '" selected="selected" disabled="disabled"', $item_rewards_options);
                    $this_item_title_html = '<label style="background-image: url(i/a/' . $this_item_token . '/il40.png?' . MMRPG_CONFIG_CACHE_DATE . ');">' . $this_item_title_html . '</label>';
                    if ($global_allow_editing) {
                        $this_item_title_html .= '<select class="ability_name" data-key="' . $item_key . '" data-player="' . $player_info['player_token'] . '">' . $temp_select_options . '</select>';
                    }
                    $temp_string[] = '<a class="ability_name ability_type ability_type_' . (!empty($this_item['ability_type']) ? $this_item['ability_type'] : 'none') . (!empty($this_item['ability_type2']) ? '_' . $this_item['ability_type2'] : '') . '" style="' . (($item_key + 1) % 4 == 0 ? 'margin-right: 0; ' : '') . (!$global_allow_editing ? 'cursor: default; ' : '') . '" data-key="' . $item_key . '" data-player="' . $player_info['player_token'] . '" data-item="' . $this_item_token . '" title="' . $this_item_title_plain . '" data-tooltip="' . $this_item_title_tooltip . '">' . $this_item_title_html . '</a>';
                    $item_key++;
                }
                if ($item_key <= 7) {
                    for ($item_key; $item_key <= 7; $item_key++) {
                        $empty_item_counter++;
                        if ($empty_item_counter >= 2) {
                            $empty_item_disable = true;
                        } else {
                            $empty_item_disable = false;
                        }
                        $temp_select_options = str_replace('value=""', 'value="" selected="selected" disabled="disabled"', $item_rewards_options);
                        $this_item_title_html = '<label>-</label>';
                        if ($global_allow_editing) {
                            $this_item_title_html .= '<select class="ability_name" data-key="' . $item_key . '" data-player="' . $player_info['player_token'] . '" ' . ($empty_item_disable ? 'disabled="disabled" ' : '') . '>' . $temp_select_options . '</select>';
                        }
                        $temp_string[] = '<a class="ability_name " style="' . (($item_key + 1) % 4 == 0 ? 'margin-right: 0; ' : '') . ($empty_item_disable ? 'opacity:0.25; ' : '') . (!$global_allow_editing ? 'cursor: default; ' : '') . '" data-key="' . $item_key . '" data-player="' . $player_info['player_token'] . '" data-item="" title="" data-tooltip="">' . $this_item_title_html . '</a>';
                    }
                }
            } else {
                for ($item_key = 0; $item_key <= 7; $item_key++) {
                    $empty_item_counter++;
                    if ($empty_item_counter >= 2) {
                        $empty_item_disable = true;
                    } else {
                        $empty_item_disable = false;
                    }
                    $temp_select_options = str_replace('value=""', 'value="" selected="selected"', $item_rewards_options);
                    $this_item_title_html = '<label>-</label>';
                    if ($global_allow_editing) {
                        $this_item_title_html .= '<select class="ability_name" data-key="' . $item_key . '" data-player="' . $player_info['player_token'] . '" data-robot="' . $robot_info['robot_token'] . '" ' . ($empty_item_disable ? 'disabled="disabled" ' : '') . '>' . $temp_select_options . '</select>';
                    }
                    $temp_string[] = '<a class="ability_name " style="' . (($item_key + 1) % 4 == 0 ? 'margin-right: 0; ' : '') . ($empty_item_disable ? 'opacity:0.25; ' : '') . (!$global_allow_editing ? 'cursor: default; ' : '') . '" data-key="' . $item_key . '" data-player="' . $player_info['player_token'] . '" data-robot="' . $robot_info['robot_token'] . '" data-ability="">' . $this_item_title_html . '</a>';
                }
            }
            // DEBUG
            //echo 'temp-string:';
            echo !empty($temp_string) ? implode(' ', $temp_string) : '';
            // DEBUG
            //echo '<br />temp-inputs:';
            echo !empty($temp_inputs) ? implode(' ', $temp_inputs) : '';
            // DEBUG
            //echo '<br />';
            ?>
                                        </div>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

                    <?php 
        }
        ?>

                    <?php 
        if (!empty($player_field_rewards) && rpg_prototype::campaign_complete($player_info['player_token'])) {
            ?>

                        <table class="full">
                            <colgroup>
                                <col width="100%" />
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td class="right" style="padding-top: 4px;">
                                        <label class="field_header"><?php 
            echo $global_allow_editing ? 'Edit ' : '';
            ?>
Player Fields :</label>
                                        <div class="field_container" style="height: auto;">
                                        <?php 
            // Define the array to hold ALL the reward option markup
            $field_rewards_options = '';
            // Collect this player's field rewards and add them to the dropdown
            //$player_field_rewards = !empty($player_rewards['player_fields']) ? $player_rewards['player_fields'] : array();
            //if (!empty($player_field_rewards)){ sort($player_field_rewards); }
            // DEBUG
            //echo 'start:player_field_rewards:<pre style="font-size: 80%;">'.print_r($player_field_rewards, true).'</pre><br />';
            // DEBUG
            //echo 'before:player_field_rewards(keys):'.implode(',', array_keys($player_field_rewards)).'<br />';
            // DEBUG
            //$debug_tokens = array();
            //foreach ($player_field_rewards AS $info){ $debug_tokens[] = $info['field_token']; }
            //echo 'before:player_field_rewards(field_tokens):'.implode(',', array_values($debug_tokens)).'<br />';
            // Sort the field index based on field number
            uasort($player_field_rewards, array('rpg_functions', 'fields_sort_for_editor'));
            // DEBUG
            //echo 'after:player_field_rewards(keys):'.implode(',', array_keys($player_field_rewards)).'<br />';
            // DEBUG
            //$debug_tokens = array();
            //foreach ($player_field_rewards AS $info){ $debug_tokens[] = $info['field_token']; }
            //echo 'after:player_field_rewards(field_tokens):'.implode(',', array_values($debug_tokens)).'<br />';
            // Don't bother generating the option markup if disabled editing
            if ($global_allow_editing) {
                // Define the field group index for displau
                $temp_group_index = array('MMRPG' => 'Mega Man RPG Fields', 'MM00' => 'Mega Man Bonus Fields', 'MM01' => 'Mega Man 1 Fields', 'MM02' => 'Mega Man 2 Fields', 'MM03' => 'Mega Man 3 Fields', 'MM04' => 'Mega Man 4 Fields', 'MM05' => 'Mega Man 5 Fields', 'MM06' => 'Mega Man 6 Fields', 'MM07' => 'Mega Man 7 Fields', 'MM08' => 'Mega Man 8 Fields', 'MM09' => 'Mega Man 9 Fields', 'MM10' => 'Mega Man 10 Fields');
                // Loop through the group index and display any fields that match
                $player_field_rewards_backup = $player_field_rewards;
                foreach ($temp_group_index as $group_key => $group_name) {
                    $player_field_rewards_options = array();
                    foreach ($player_field_rewards_backup as $temp_field_key => $temp_field_info) {
                        if (empty($temp_field_info['field_game']) || $temp_field_info['field_game'] != $group_key) {
                            continue;
                        }
                        $temp_option_markup = rpg_field::print_editor_option_markup($temp_field_info);
                        if (!empty($temp_option_markup)) {
                            $player_field_rewards_options[] = $temp_option_markup;
                        }
                        unset($player_field_rewards_backup[$temp_field_key]);
                    }
                    if (empty($player_field_rewards_options)) {
                        continue;
                    }
                    $player_field_rewards_options = '<optgroup label="' . $group_name . '">' . implode('', $player_field_rewards_options) . '</optgroup>';
                    $field_rewards_options .= $player_field_rewards_options;
                }
            }
            // Add an option at the bottom to remove the field
            //$field_rewards_options .= '<optgroup label="Field Actions">';
            //$field_rewards_options .= '<option value="" title="">- Remove Field -</option>';
            //$field_rewards_options .= '</optgroup>';
            // Loop through the player's current fields and list them one by one
            $empty_field_counter = 0;
            $temp_string = array();
            $temp_inputs = array();
            $field_key = 0;
            if (!empty($player_info['player_fields_current'])) {
                // DEBUG
                //echo 'player-field:';
                $rpg_field_index = rpg_field::get_index();
                $player_info['player_fields_current'] = $player_info['player_fields_current'];
                //array_reverse($player_info['player_fields_current']);
                foreach ($player_info['player_fields_current'] as $player_field) {
                    if ($player_field['field_token'] == '*') {
                        continue;
                    } elseif (!isset($rpg_field_index[$player_field['field_token']])) {
                        continue;
                    } elseif ($field_key > 7) {
                        continue;
                    }
                    $this_field = rpg_field::parse_index_info($rpg_field_index[$player_field['field_token']]);
                    $this_field_token = $this_field['field_token'];
                    $this_robot_token = $this_field['field_master'];
                    $this_robot = rpg_robot::parse_index_info($mmrpg_database_robots[$this_robot_token]);
                    $this_field_name = $this_field['field_name'];
                    $this_field_type = !empty($this_field['field_type']) ? $this_field['field_type'] : false;
                    $this_field_type2 = !empty($this_field['field_type2']) ? $this_field['field_type2'] : false;
                    if (!empty($this_field_type) && !empty($mmrpg_index['types'][$this_field_type])) {
                        $this_field_type = $mmrpg_index['types'][$this_field_type]['type_name'] . ' Type';
                        if (!empty($this_field_type2) && !empty($mmrpg_index['types'][$this_field_type2])) {
                            $this_field_type = str_replace(' Type', ' / ' . $mmrpg_index['types'][$this_field_type2]['type_name'] . ' Type', $this_field_type);
                        }
                    } else {
                        $this_field_type = '';
                    }
                    $this_field_description = !empty($this_field['field_description']) ? $this_field['field_description'] : '';
                    $this_field_title = rpg_field::print_editor_title_markup($this_field);
                    $this_field_title_plain = strip_tags(str_replace('<br />', '&#10;', $this_field_title));
                    $this_field_title_tooltip = htmlentities($this_field_title, ENT_QUOTES, 'UTF-8');
                    $this_field_title_html = str_replace(' ', '&nbsp;', $this_field_name);
                    $temp_select_options = str_replace('value="' . $this_field_token . '"', 'value="' . $this_field_token . '" selected="selected" disabled="disabled"', $field_rewards_options);
                    $temp_field_type_class = 'field_type_' . (!empty($this_field['field_type']) ? $this_field['field_type'] : 'none') . (!empty($this_field['field_type2']) ? '_' . $this_field['field_type2'] : '');
                    if ($global_allow_editing && $temp_allow_field_switch) {
                        $this_field_title_html = '<label class="field_type  ' . $temp_field_type_class . '" style="">' . $this_field_title_html . '</label><select class="field_name" data-key="' . $field_key . '" data-player="' . $player_info['player_token'] . '" data-player="' . $player_info['player_token'] . '">' . $temp_select_options . '</select>';
                    } elseif (!$global_allow_editing && $temp_allow_field_switch) {
                        $this_field_title_html = '<label class="field_type  ' . $temp_field_type_class . '" style="cursor: default !important;">' . $this_field_title_html . '</label>';
                    } else {
                        $this_field_title_html = '<label class="field_type ' . $temp_field_type_class . '" style="cursor: default !important;">' . $this_field_title_html . '</label>';
                    }
                    $temp_string[] = '<a class="field_name field_type ' . $temp_field_type_class . '" style="background-image: url(i/f/' . $this_field_token . '/bfp.png?' . MMRPG_CONFIG_CACHE_DATE . '); ' . (($field_key + 1) % 4 == 0 ? 'margin-right: 0; ' : '') . (!$temp_allow_field_switch || !$global_allow_editing ? 'cursor: default !important; ' : '') . (!$temp_allow_field_switch ? 'opacity: 0.50; filter: alpha(opacity=50); ' : '') . '" data-key="' . $field_key . '" data-player="' . $player_info['player_token'] . '" data-player="' . $player_info['player_token'] . '" data-field="' . $this_field_token . '" data-tooltip="' . $this_field_title_tooltip . '">' . $this_field_title_html . '</a>';
                    $field_key++;
                }
                if ($field_key <= 7) {
                    for ($field_key; $field_key <= 7; $field_key++) {
                        $empty_field_counter++;
                        if ($empty_field_counter >= 2) {
                            $empty_field_disable = true;
                        } else {
                            $empty_field_disable = false;
                        }
                        $temp_select_options = str_replace('value=""', 'value="" selected="selected" disabled="disabled"', $field_rewards_options);
                        $this_field_title_html = '<label>-</label><select class="field_name" data-key="' . $field_key . '" data-player="' . $player_info['player_token'] . '" data-player="' . $player_info['player_token'] . '" ' . ($empty_field_disable ? 'disabled="disabled" ' : '') . '>' . $temp_select_options . '</select>';
                        $temp_string[] = '<a class="field_name " style="' . (($field_key + 1) % 4 == 0 ? 'margin-right: 0; ' : '') . ($empty_field_disable ? 'opacity:0.25; ' : '') . '" data-key="' . $field_key . '" data-player="' . $player_info['player_token'] . '" data-player="' . $player_info['player_token'] . '" data-field="" title="">' . $this_field_title_html . '</a>';
                    }
                }
            } else {
                for ($field_key = 0; $field_key <= 7; $field_key++) {
                    $empty_field_counter++;
                    if ($empty_field_counter >= 2) {
                        $empty_field_disable = true;
                    } else {
                        $empty_field_disable = false;
                    }
                    $temp_select_options = str_replace('value=""', 'value="" selected="selected"', $field_rewards_options);
                    $this_field_title_html = '<label>-</label><select class="field_name" data-key="' . $field_key . '" data-player="' . $player_info['player_token'] . '" data-player="' . $player_info['player_token'] . '" ' . ($empty_field_disable ? 'disabled="disabled" ' : '') . '>' . $temp_select_options . '</select>';
                    $temp_string[] = '<a class="field_name " style="' . (($field_key + 1) % 4 == 0 ? 'margin-right: 0; ' : '') . ($empty_field_disable ? 'opacity:0.25; ' : '') . '" data-key="' . $field_key . '" data-player="' . $player_info['player_token'] . '" data-player="' . $player_info['player_token'] . '" data-field="" title="">' . $this_field_title_html . '</a>';
                }
            }
            // DEBUG
            //echo 'temp-string:';
            echo !empty($temp_string) ? implode(' ', $temp_string) : '';
            // DEBUG
            //echo '<br />temp-inputs:';
            echo !empty($temp_inputs) ? implode(' ', $temp_inputs) : '';
            // DEBUG
            //echo '<br />';
            // Collect the available star counts for this player
            $temp_star_counts = rpg_game::stars_available($player_token);
            ?>
                                        <div class="field_stars">
                                            <label class="label">stars</label>
                                            <span class="star star_field" data-star="field"><?php 
            echo $temp_star_counts['field'];
            ?>
 field</span>
                                            <span class="star star_fusion" data-star="fusion"><?php 
            echo $temp_star_counts['fusion'];
            ?>
 fusion</span>
                                        </div>
                                        <?php 
            // Print the sort wrapper and options if allowed
            if ($global_allow_editing) {
                ?>
                                            <div class="field_tools">
                                                <label class="label">tools</label>
                                                <a class="tool tool_shuffle" data-tool="shuffle" data-player="<?php 
                echo $player_token;
                ?>
">shuffle</a>
                                                <a class="tool tool_randomize" data-tool="randomize" data-player="<?php 
                echo $player_token;
                ?>
">randomize</a>
                                            </div>
                                            <?php 
            }
            ?>
                                        </div>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

                    <?php 
        }
        ?>


                </div>
            </div>
            <?php 
        $key_counter++;
        // Collect the outbut buffer contents
        $this_markup = trim(ob_get_clean());
        // Return the generated markup
        return $this_markup;
    }
Ejemplo n.º 5
0
 public static function robot_select_markup($this_prototype_data)
 {
     // Refence the global config and index objects for easy access
     global $db;
     // Define the temporary robot markup string
     $this_robots_markup = '';
     // Collect the robot index for calculation purposes
     $this_robot_index = $db->get_array_list("SELECT * FROM mmrpg_index_robots WHERE robot_flag_complete = 1;", 'robot_token');
     // Collect the ability index for calculation purposes
     $this_ability_index = $db->get_array_list("SELECT * FROM mmrpg_index_abilities WHERE ability_flag_complete = 1;", 'ability_token');
     // Loop through and display the available robot options for this player
     $temp_robot_option_count = count($this_prototype_data['robot_options']);
     $temp_player_favourites = rpg_game::robot_favourites();
     foreach ($this_prototype_data['robot_options'] as $key => $info) {
         $info = array_merge($this_robot_index[$info['robot_token']], $info);
         if (!isset($info['original_player'])) {
             $info['original_player'] = $this_prototype_data['this_player_token'];
         }
         $this_option_class = 'option option_this-robot-select option_this-' . $info['original_player'] . '-robot-select option_' . ($temp_robot_option_count == 1 ? '1x4' : ($this_prototype_data['robots_unlocked'] <= 2 ? '1x2' : '1x1')) . ' option_' . $info['robot_token'] . ' block_' . ($key + 1);
         $this_option_style = '';
         $this_option_token = $info['robot_id'] . '_' . $info['robot_token'];
         $this_option_image = !empty($info['robot_image']) ? $info['robot_image'] : $info['robot_token'];
         $this_option_size = !empty($info['robot_image_size']) ? $info['robot_image_size'] : 40;
         $temp_size = $this_option_size;
         $temp_size_text = $temp_size . 'x' . $temp_size;
         $temp_top = -2 + (40 - $temp_size);
         $temp_right_inc = $temp_size > 40 ? ceil($temp_size * 0.5 - 60) : 0;
         $temp_right = 15 + $temp_right_inc;
         $this_robot_name = $info['robot_name'];
         $this_robot_rewards = rpg_game::robot_rewards($this_prototype_data['this_player_token'], $info['robot_token']);
         $this_robot_settings = rpg_game::robot_settings($this_prototype_data['this_player_token'], $info['robot_token']);
         $this_robot_experience = rpg_game::robot_experience($this_prototype_data['this_player_token'], $info['robot_token']);
         $this_robot_level = rpg_game::robot_level($this_prototype_data['this_player_token'], $info['robot_token']);
         $this_experience_required = rpg_prototype::calculate_experience_required($this_robot_level);
         $this_robot_abilities = rpg_game::abilities_unlocked($this_prototype_data['this_player_token'], $info['robot_token']);
         $text_robot_special = $this_robot_level >= 100 || !empty($this_robot_rewards['flags']['reached_max_level']) ? true : false;
         $this_robot_experience = $this_robot_level >= 100 ? '<span style="position: relative; bottom: 0; font-size: 120%;">&#8734;</span>' : $this_robot_experience;
         $this_robot_experience_title = $this_robot_level >= 100 ? '&#8734;' : $this_robot_experience;
         $this_robot_favourite = in_array($info['robot_token'], $temp_player_favourites) ? true : false;
         $this_robot_name .= $this_robot_favourite ? ' <span style="position: relative; bottom: 2px; font-size: 11px;">&hearts;</span>' : '';
         $this_robot_name .= $text_robot_special ? ' <span style="position: relative; bottom: 2px; font-size: 9px;" title="Congratulations!!! :D">&#9733;</span>' : '';
         $this_robot_item = !empty($info['robot_item']) ? $info['robot_item'] : '';
         $this_robot_energy = $info['robot_energy'];
         $this_robot_attack = $info['robot_attack'];
         $this_robot_defense = $info['robot_defense'];
         $this_robot_speed = $info['robot_speed'];
         $this_robot_core = !empty($info['robot_core']) ? $info['robot_core'] : '';
         $this_robot_core2 = !empty($info['robot_core2']) ? $info['robot_core2'] : '';
         $temp_level = $this_robot_level - 1;
         $this_robot_energy += ceil($temp_level * (0.05 * $this_robot_energy));
         $this_robot_attack += ceil($temp_level * (0.05 * $this_robot_attack));
         $this_robot_defense += ceil($temp_level * (0.05 * $this_robot_defense));
         $this_robot_speed += ceil($temp_level * (0.05 * $this_robot_speed));
         if (!empty($this_robot_settings['robot_item'])) {
             $this_robot_item = $this_robot_settings['robot_item'];
         }
         if (!empty($this_robot_rewards['robot_energy'])) {
             $this_robot_energy += $this_robot_rewards['robot_energy'];
         }
         if (!empty($this_robot_rewards['robot_attack'])) {
             $this_robot_attack += $this_robot_rewards['robot_attack'];
         }
         if (!empty($this_robot_rewards['robot_defense'])) {
             $this_robot_defense += $this_robot_rewards['robot_defense'];
         }
         if (!empty($this_robot_rewards['robot_speed'])) {
             $this_robot_speed += $this_robot_rewards['robot_speed'];
         }
         if ($this_prototype_data['this_player_token'] == 'dr-light') {
             $this_robot_defense += ceil(0.25 * $this_robot_defense);
         }
         if ($this_prototype_data['this_player_token'] == 'dr-wily') {
             $this_robot_attack += ceil(0.25 * $this_robot_attack);
         }
         if ($this_prototype_data['this_player_token'] == 'dr-cossack') {
             $this_robot_speed += ceil(0.25 * $this_robot_speed);
         }
         $this_robot_energy = $this_robot_energy > MMRPG_SETTINGS_STATS_MAX ? MMRPG_SETTINGS_STATS_MAX : $this_robot_energy;
         $this_robot_attack = $this_robot_attack > MMRPG_SETTINGS_STATS_MAX ? MMRPG_SETTINGS_STATS_MAX : $this_robot_attack;
         $this_robot_defense = $this_robot_defense > MMRPG_SETTINGS_STATS_MAX ? MMRPG_SETTINGS_STATS_MAX : $this_robot_defense;
         $this_robot_speed = $this_robot_speed > MMRPG_SETTINGS_STATS_MAX ? MMRPG_SETTINGS_STATS_MAX : $this_robot_speed;
         if (!empty($this_robot_settings['robot_image'])) {
             $this_option_image = $this_robot_settings['robot_image'];
         }
         if (!empty($this_robot_item) && preg_match('/^item-core-/i', $this_robot_item)) {
             $item_core_type = preg_replace('/^item-core-/i', '', $this_robot_item);
             if (empty($this_robot_core2)) {
                 //$this_robot_core != 'copy' &&
                 $this_robot_core2 = $item_core_type;
             }
         }
         $this_robot_abilities_current = !empty($info['robot_abilities']) ? array_keys($info['robot_abilities']) : array('buster-shot');
         $this_option_title = '';
         //-- Basics -------------------------------  <br />';
         $this_option_title .= $info['robot_name'];
         //''.$info['robot_number'].' '.$info['robot_name'];
         $this_option_title .= ' (' . (!empty($this_robot_core) ? ucfirst($this_robot_core) . ' Core' : 'Neutral Core') . ')';
         $this_option_title .= ' <br />Level ' . $this_robot_level . ' | ' . $this_robot_experience_title . ' / ' . $this_experience_required . ' Exp' . (!empty($this_robot_favourite_title) ? ' ' . $this_robot_favourite_title : '');
         if (!empty($this_robot_item) && isset($this_ability_index[$this_robot_item])) {
             $this_option_title .= ' | + ' . $this_ability_index[$this_robot_item]['ability_name'] . ' ';
         }
         $this_option_title .= ' <br />E : ' . $this_robot_energy . ' | A : ' . $this_robot_attack . ' | D : ' . $this_robot_defense . ' | S: ' . $this_robot_speed;
         if (!empty($this_robot_abilities_current)) {
             $this_option_title .= ' <hr />';
             // <hr />-- Abilities ------------------------------- <br />';
             $temp_counter = 1;
             foreach ($this_robot_abilities_current as $token) {
                 if (empty($token) || !isset($this_ability_index[$token])) {
                     continue;
                 }
                 $temp_info = rpg_ability::parse_index_info($this_ability_index[$token]);
                 $this_option_title .= $temp_info['ability_name'];
                 if ($temp_counter % 4 == 0) {
                     $this_option_title .= ' <br />';
                 } elseif ($temp_counter < count($this_robot_abilities_current)) {
                     $this_option_title .= ' | ';
                 }
                 $temp_counter++;
             }
         }
         $this_option_title_plain = strip_tags(str_replace('<br />', '&#10;', $this_option_title));
         $this_option_title_tooltip = htmlentities($this_option_title, ENT_QUOTES, 'UTF-8');
         $this_option_label = '<span class="sprite sprite_' . $temp_size_text . ' sprite_' . $temp_size_text . '_base" style="background-image: url(i/r/' . $this_option_image . '/sr' . $temp_size . '.png?' . MMRPG_CONFIG_CACHE_DATE . '); top: ' . $temp_top . 'px; right: ' . $temp_right . 'px;">' . $info['robot_name'] . '</span>';
         $this_option_label .= '<span class="multi">';
         $this_option_label .= '<span class="maintext">' . $this_robot_name . '</span>';
         $this_option_label .= '<span class="subtext">Level ' . $this_robot_level . '</span>';
         $this_option_label .= '<span class="subtext2">' . $this_robot_experience . '/' . $this_experience_required . ' Exp</span>';
         $this_option_label .= '</span>';
         $this_option_label .= '<span class="arrow">&#9658;</span>';
         //$this_robots_markup .= '<a class="'.$this_option_class.'" data-child="true" data-token="'.$this_option_token.'" title="'.$this_option_title_plain.'" data-tooltip="'.$this_option_title_tooltip.'" style="'.$this_option_style.'">';
         $this_robots_markup .= '<a class="' . $this_option_class . '" data-child="true" data-token="' . $this_option_token . '" style="' . $this_option_style . '">';
         $this_robots_markup .= '<div class="chrome chrome_type robot_type_' . (!empty($this_robot_core) ? $this_robot_core : 'none') . (!empty($this_robot_core2) ? '_' . $this_robot_core2 : '') . '" data-tooltip="' . $this_option_title_tooltip . '"><div class="inset"><label class="has_image">' . $this_option_label . '</label></div></div>';
         $this_robots_markup .= '</a>' . "\r\n";
     }
     // Loop through and display any option padding cells
     //if ($this_prototype_data['robots_unlocked'] >= 3){
     if ($temp_robot_option_count >= 3) {
         //$this_prototype_data['padding_num'] = $this_prototype_data['robots_unlocked'] <= 8 ? 4 : 2;
         $this_prototype_data['padding_num'] = 4;
         $this_prototype_data['robots_padding'] = $temp_robot_option_count % $this_prototype_data['padding_num'];
         if (!empty($this_prototype_data['robots_padding'])) {
             $counter = $temp_robot_option_count % $this_prototype_data['padding_num'] + 1;
             for ($counter; $counter <= $this_prototype_data['padding_num']; $counter++) {
                 $this_option_class = 'option option_this-robot-select option_this-' . $this_prototype_data['this_player_token'] . '-robot-select option_1x1 option_disabled block_' . $counter;
                 $this_option_style = '';
                 $this_robots_markup .= '<a class="' . $this_option_class . '" style="' . $this_option_style . '">';
                 $this_robots_markup .= '<div class="platform"><div class="chrome"><div class="inset"><label>&nbsp;</label></div></div></div>';
                 $this_robots_markup .= '</a>' . "\r\n";
             }
         }
     }
     // Return the generated markup
     return $this_robots_markup;
 }
Ejemplo n.º 6
0
 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 . '&#39;s ' : '') . $this_robot->robot_name;
     $event_body = ($this_player->player_token != 'player' ? $this_player->print_name() . '&#39;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() . '&#39;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() . '&#39;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() . '&#39;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 . '&#39;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 . '&#39;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 ? ' &#9733;' : '') . '</span>!<br /> ';
                 $event_body .= $temp_robot->robot_name . '&#39;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() . '&#39;s health improved! ';
                 $event_body .= '<br />';
                 $event_body .= $temp_robot->print_name() . '&#39;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() . '&#39;s weapons improved! ';
                 $event_body .= '<br />';
                 $event_body .= $temp_robot->print_name() . '&#39;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() . '&#39;s shields improved! ';
                 $event_body .= '<br />';
                 $event_body .= $temp_robot->print_name() . '&#39;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() . '&#39;s mobility improved! ';
                 $event_body .= '<br />';
                 $event_body .= $temp_robot->print_name() . '&#39;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&hellip;';
                     } 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.'&#39;s Data Destroyed';
                             $event_body = $this->print_name().'&#39;s battle data was damaged beyond repair!<br />';
                             $event_body .= $this->print_name().' could not be unlocked for use in battle&hellip;';
                             $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;
 }
Ejemplo n.º 7
0
 public static function unlock_robot($player_info, $robot_info, $unlock_abilities = true, $events_create = true)
 {
     // Reference the global variables
     global $mmrpg_index, $db;
     //$_SESSION[$session_token] = &$_SESSION[self::session_token()];
     $session_token = self::session_token();
     // If the player info was a string, create the info array
     if (is_string($player_info)) {
         $player_info = array('player_token' => $player_info);
     } elseif (is_array($player_info) && !isset($player_info['player_token'])) {
         return false;
     }
     // If the robot info was a string, create the info array
     if (is_string($robot_info)) {
         $robot_info = array('robot_token' => $robot_info);
     } elseif (is_array($robot_info) && !isset($robot_info['robot_token'])) {
         return false;
     }
     // Define a reference to the game's session flag variable
     if (empty($_SESSION[$session_token]['flags'])) {
         $_SESSION[$session_token]['flags'] = array();
     }
     $temp_game_flags =& $_SESSION[$session_token]['flags'];
     // If this robot does not exist in the global index, return false
     //if (!isset($player_info['player_token'])){ echo 'player_info<pre>'.print_r($player_info, true).'</pre>'; }
     $player_index_info = $mmrpg_index['players'][$player_info['player_token']];
     $robot_index_info = $robot_info;
     if (!isset($player_index_info)) {
         return false;
     }
     if (!isset($robot_index_info)) {
         return false;
     }
     // Collect the robot info from the inde
     $this_robot_token = $robot_info['robot_token'];
     $this_player_token = $player_info['player_token'];
     $this_robot_level = !empty($robot_info['robot_level']) ? $robot_info['robot_level'] : 1;
     $this_robot_experience = !empty($robot_info['robot_experience']) ? $robot_info['robot_experience'] : 0;
     $player_info = array_replace($player_index_info, $player_info);
     $robot_info = array_replace($robot_index_info, $robot_info);
     // Collect or define the robot points and robot rewards variables
     $this_robot_rewards = !empty($robot_info['robot_rewards']) ? $robot_info['robot_rewards'] : array();
     // Automatically unlock this robot for use in battle and create the settings array
     $this_reward = array('flags' => array(), 'values' => array(), 'counters' => array(), 'robot_token' => $this_robot_token, 'robot_level' => $this_robot_level, 'robot_experience' => $this_robot_experience, 'robot_energy' => 0, 'robot_attack' => 0, 'robot_defense' => 0, 'robot_speed' => 0, 'robot_energy_pending' => 0, 'robot_attack_pending' => 0, 'robot_defense_pending' => 0, 'robot_speed_pending' => 0);
     $_SESSION[$session_token]['values']['battle_rewards'][$player_info['player_token']]['player_robots'][$this_robot_token] = $this_reward;
     if (empty($_SESSION[$session_token]['values']['battle_settings'][$player_info['player_token']]['player_robots']) || empty($_SESSION[$session_token]['values']['battle_settings'][$player_info['player_token']]['player_robots'][$this_robot_token]) || count($_SESSION[$session_token]['values']['battle_settings'][$player_info['player_token']]['player_robots']) < 8) {
         $this_setting = array('flags' => array(), 'values' => array(), 'counters' => array(), 'robot_token' => $this_robot_token, 'robot_abilities' => array(), 'original_player' => $player_info['player_token']);
         $_SESSION[$session_token]['values']['battle_settings'][$player_info['player_token']]['player_robots'][$this_robot_token] = $this_setting;
     }
     // Add this robot to the global robot database array
     $temp_data_existed = !empty($_SESSION[$session_token]['values']['robot_database'][$this_robot_token]) ? true : false;
     if (!isset($_SESSION[$session_token]['values']['robot_database'][$this_robot_token])) {
         $_SESSION[$session_token]['values']['robot_database'][$this_robot_token] = array('robot_token' => $this_robot_token);
     }
     if (!isset($_SESSION[$session_token]['values']['robot_database'][$this_robot_token]['robot_unlocked'])) {
         $_SESSION[$session_token]['values']['robot_database'][$this_robot_token]['robot_unlocked'] = 1;
     }
     if (!isset($_SESSION[$session_token]['values']['robot_database'][$this_robot_token]['robot_summoned'])) {
         $_SESSION[$session_token]['values']['robot_database'][$this_robot_token]['robot_summoned'] = 0;
     }
     if (!isset($_SESSION[$session_token]['values']['robot_database'][$this_robot_token]['robot_encountered'])) {
         $_SESSION[$session_token]['values']['robot_database'][$this_robot_token]['robot_encountered'] = 0;
     }
     if (!isset($_SESSION[$session_token]['values']['robot_database'][$this_robot_token]['robot_scanned'])) {
         $_SESSION[$session_token]['values']['robot_database'][$this_robot_token]['robot_scanned'] = 0;
     }
     //$_SESSION[$session_token]['values']['robot_database'][$this_robot_token]['robot_unlocked']++;
     // Only show the event if allowed by the function args
     if ($events_create) {
         // Generate the attributes and text variables for this robot unlock
         $robot_info_size = isset($robot_info['robot_image_size']) ? $robot_info['robot_image_size'] * 2 : 40 * 2;
         $robot_info_size_token = $robot_info_size . 'x' . $robot_info_size;
         $this_name = $robot_info['robot_name'];
         $this_description = !empty($robot_info['robot_description']) && $robot_info['robot_description'] != '...' ? $robot_info['robot_description'] : '';
         $this_number = $robot_info['robot_number'];
         $this_energy_boost = round($robot_info['robot_energy'] * 0.05, 1);
         $this_attack_boost = round($robot_info['robot_attack'] * 0.05, 1);
         $this_defense_boost = round($robot_info['robot_defense'] * 0.05, 1);
         $this_speed_boost = round($robot_info['robot_speed'] * 0.05, 1);
         $this_find = array('{this_player}', '{this_robot}', '{target_player}', '{target_robot}');
         $this_replace = array($player_info['player_name'], $robot_info['robot_name'], $player_info['player_name'], $this_player_token == 'dr-light' ? 'Mega Man' : ($this_player_token == 'dr-wily' ? 'Bass' : ($this_player_token == 'dr-cossack' ? 'Proto Man' : 'Robot')));
         $this_quote = !empty($robot_info['robot_quotes']['battle_taunt']) ? str_replace($this_find, $this_replace, $robot_info['robot_quotes']['battle_taunt']) : '...';
         $this_field = rpg_field::get_index_info(!empty($robot_info['robot_field']) ? $robot_info['robot_field'] : 'intro-field');
         $this_pronoun = 'he';
         $this_posessive = 'his';
         $this_congrats = 'Congratulations!';
         if (in_array($robot_info['robot_token'], array('roll', 'disco', 'rhythm'))) {
             $this_congrats = '<strong>' . $this_name . '</strong> to the rescue!';
         }
         if (in_array($robot_info['robot_token'], array('roll', 'disco', 'rhythm', 'splash-woman'))) {
             $this_pronoun = 'she';
             $this_posessive = 'her';
         } elseif (in_array($robot_info['robot_token'], array('met'))) {
             $this_pronoun = 'it';
             $this_posessive = 'its';
         }
         $this_best_stat = $robot_info['robot_energy'];
         $this_best_attribute = 'a support';
         if ($robot_info['robot_attack'] > $this_best_stat) {
             $this_best_stat = $robot_info['robot_attack'];
             $this_best_attribute = 'a powerful';
         } elseif ($robot_info['robot_defense'] > $this_best_stat) {
             $this_best_stat = $robot_info['robot_defense'];
             $this_best_attribute = 'a defensive';
         } elseif ($robot_info['robot_speed'] > $this_best_stat) {
             $this_best_stat = $robot_info['robot_speed'];
             $this_best_attribute = 'a speedy';
         }
         if ($robot_info['robot_token'] == 'met') {
             $this_best_attribute = 'bonus';
         }
         $this_first_ability = array('level' => 0, 'token' => 'buster-shot');
         $this_count_abilities = count($robot_info['robot_rewards']['abilities']);
         //die('<pre>'.print_r($robot_info['robot_rewards']['abilities'], true).'</pre>');
         foreach ($robot_info['robot_rewards']['abilities'] as $temp_key => $temp_reward) {
             if ($temp_reward['token'] != 'buster-shot' && $temp_reward['level'] > 0) {
                 $this_first_ability = $temp_reward;
                 break;
             }
         }
         $temp_ability_index = $db->get_array_list("SELECT * FROM mmrpg_index_abilities WHERE ability_flag_complete = 1;", 'ability_token');
         $this_first_ability_name = $temp_ability_index[$this_first_ability['token']]['ability_name'];
         //die('<pre>'.print_r($this_first_ability, true).'</pre>');
         if ($robot_info['robot_token'] == 'oil-man' || $robot_info['robot_token'] == 'time-man') {
             $this_first_appearance = 'that first appeared in <em>Mega Man Powered Up</em> for the Sony PlayStation Portable';
         } elseif ($robot_info['robot_game'] == 'MM01' || $robot_info['robot_token'] == 'mega-man' || $robot_info['robot_token'] == 'roll') {
             $this_first_appearance = 'that first appeared in the original <em>Mega Man</em> on the Nintendo Entertainment System';
         } elseif ($robot_info['robot_game'] == 'MM02') {
             $this_first_appearance = 'that first appeared in <em>Mega Man 2</em> for the Nintendo Entertainment System';
         } elseif ($robot_info['robot_game'] == 'MM03' || $robot_info['robot_token'] == 'proto-man') {
             $this_first_appearance = 'that first appeared in <em>Mega Man 3</em> for the Nintendo Entertainment System';
         } elseif ($robot_info['robot_game'] == 'MM04') {
             $this_first_appearance = 'that first appeared in <em>Mega Man 4</em> for the Nintendo Entertainment System';
         } elseif ($robot_info['robot_game'] == 'MM05') {
             $this_first_appearance = 'that first appeared in <em>Mega Man 5</em> for the Nintendo Entertainment System';
         } elseif ($robot_info['robot_game'] == 'MM06') {
             $this_first_appearance = 'that first appeared in <em>Mega Man 6</em> for the Nintendo Entertainment System';
         } elseif ($robot_info['robot_game'] == 'MM07' || $robot_info['robot_token'] == 'bass') {
             $this_first_appearance = 'that first appeared in <em>Mega Man 7</em> for the Super Nintendo Entertainment System';
         } elseif ($robot_info['robot_game'] == 'MM08' || $robot_info['robot_token'] == 'duo') {
             $this_first_appearance = 'that first appeared in <em>Mega Man 8</em> for the Sega Saturn and Sony PlayStation';
         } elseif ($robot_info['robot_game'] == 'MM085') {
             $this_first_appearance = 'that first appeared in <em title="Rockman &amp; Forte in Japan">Mega Man &amp; Bass</em> for the Super Nintendo Entertainment System and Nintendo Game Boy Advance';
         } elseif ($robot_info['robot_game'] == 'MM09') {
             $this_first_appearance = 'that first appeared in <em>Mega Man 9</em> for Nintendo Wii, Sony PlayStation 3, and Xbox 360';
         } elseif ($robot_info['robot_game'] == 'MM10') {
             $this_first_appearance = 'that first appeared in <em>Mega Man 10</em> for Nintendo Wii, Sony PlayStation 3, and Xbox 360';
         } elseif ($robot_info['robot_game'] == 'MM21') {
             $this_first_appearance = 'that first appeared in <em>Mega Man : The Wily Wars</em> for Sega Mega Drive';
         } elseif ($robot_info['robot_game'] == 'MM30') {
             $this_first_appearance = 'that first appeared in <em>Mega Man V</em> for Nintendo Game Boy';
         } elseif ($robot_info['robot_token'] == 'disco' || $robot_info['robot_token'] == 'rhythm') {
             $this_first_appearance = 'making her debut in the <em>Mega Man RPG World</em>';
         } elseif ($robot_info['robot_token'] == 'bond-man') {
             $this_first_appearance = 'making his first playable debut in the <em>Mega Man RPG World</em>';
         } elseif ($robot_info['robot_token'] == 'enker') {
             $this_first_appearance = 'that first appeared in <em>Mega Man : Dr. Wily\'s Revenge</em> for the Nintendo Game Boy';
         } elseif ($robot_info['robot_token'] == 'punk') {
             $this_first_appearance = 'that first appeared in <em>Mega Man III</em> for the Nintendo Game Boy';
         } elseif ($robot_info['robot_token'] == 'ballade') {
             $this_first_appearance = 'that first appeared in <em>Mega Man IV</em> for the Nintendo Game Boy';
         } elseif ($robot_info['robot_token'] == 'quint') {
             $this_first_appearance = 'that first appeared in <em>Mega Man II</em> for the Nintendo Game Boy';
         } elseif ($robot_info['robot_token'] == 'solo') {
             $this_first_appearance = 'that first appeared in <em>Mega Man Star Force 3</em> for the Nintendo DS';
         } elseif (preg_match('/^duo/i', $robot_info['robot_token'])) {
             $this_first_appearance = 'that first appeared in <em>Mega Man 7</em> for the Super Nintendo Entertainment System';
         } elseif (preg_match('/^trio/i', $robot_info['robot_token'])) {
             $this_first_appearance = 'making their debut in the <em>Mega Man RPG World</em>';
         }
         if ($this_first_ability['level'] == 0) {
             $this_level = 1;
         } else {
             $this_level = $this_first_ability['level'];
         }
         $this_weaknesses = !empty($robot_info['robot_weaknesses']) ? $robot_info['robot_weaknesses'] : array();
         $this_resistances = !empty($robot_info['robot_resistances']) ? $robot_info['robot_resistances'] : array();
         $this_affinities = !empty($robot_info['robot_affinities']) ? $robot_info['robot_affinities'] : array();
         $this_immunities = !empty($robot_info['robot_immunities']) ? $robot_info['robot_immunities'] : array();
         foreach ($this_weaknesses as $key => $token) {
             $this_weaknesses[$key] = '<strong class="ability_type ability_type_' . $token . '">' . ucfirst($token) . '</strong>';
         }
         foreach ($this_resistances as $key => $token) {
             $this_resistances[$key] = '<strong class="ability_type ability_type_' . $token . '">' . ucfirst($token) . '</strong>';
         }
         foreach ($this_affinities as $key => $token) {
             $this_affinities[$key] = '<strong class="ability_type ability_type_' . $token . '">' . ucfirst($token) . '</strong>';
         }
         foreach ($this_immunities as $key => $token) {
             $this_immunities[$key] = '<strong class="ability_type ability_type_' . $token . '">' . ucfirst($token) . '</strong>';
         }
         //$this_weaknesses = implode(', ', $this_weaknesses);
         //$this_resistances = implode(', ', $this_resistances);
         //$this_affinities = implode(', ', $this_affinities);
         //$this_immunities = implode(', ', $this_immunities);
         // Generate the window event's canvas and message markup then append to the global array
         $temp_canvas_markup = '<div class="sprite sprite_80x80" style="background-image: url(images/sprites/fields/' . $this_field['field_token'] . '/battle-field_background_base.gif?' . MMRPG_CONFIG_CACHE_DATE . '); background-position: center -50px; top: 0; right: 0; bottom: 0; left: 0; width: auto; height: auto;">' . $this_field['field_name'] . '</div>';
         $temp_canvas_markup .= '<div class="sprite sprite_80x80" style="background-image: url(images/sprites/fields/' . $this_field['field_token'] . '/battle-field_foreground_base.png?' . MMRPG_CONFIG_CACHE_DATE . '); background-position: center -45px; top: 0; right: 0; bottom: 0; left: 0; width: auto; height: auto;">' . $this_field['field_name'] . '</div>';
         $temp_canvas_markup .= '<div class="sprite sprite_' . $robot_info_size_token . ' sprite_' . $robot_info_size_token . '_victory" style="background-image: url(images/sprites/robots/' . $robot_info['robot_token'] . '/sprite_right_' . $robot_info_size_token . '.png?' . MMRPG_CONFIG_CACHE_DATE . '); bottom: 40px; left: ' . (200 - ($robot_info_size - 80) * 0.5) . 'px;">' . $robot_info['robot_name'] . '</div>';
         $temp_canvas_markup .= '<div class="sprite sprite_80x80 sprite_80x80_02" style="background-image: url(images/sprites/players/' . $player_info['player_token'] . '/sprite_left_80x80.png?' . MMRPG_CONFIG_CACHE_DATE . '); bottom: 40px; right: 200px;">' . $player_info['player_name'] . '</div>';
         //$temp_console_markup = '<p>Congratulations!  <strong>'.$player_info['player_name'].'</strong> unlocked <strong>'.$this_name.'</strong> '.(!empty($this_description) ? '- the '.str_replace('Robot', 'robot', $this_description).' -' : '').' ('.$this_number.') as a playable character! &quot;<em>'.$this_quote.'</em>&quot; <strong>'.$this_name.'</strong> is '.$this_best_attribute.' '.(!empty($robot_info['robot_core']) ? '<strong class="robot_type robot_type_'.$robot_info['robot_core'].'">'.ucfirst($robot_info['robot_core']).' Core</strong> ' : '<strong class="robot_type robot_type_none">Neutral Core</strong> ').'robot '.$this_first_appearance.'.</p>';
         $temp_console_markup = '<p>' . $this_congrats . '  <strong>' . $player_info['player_name'] . '</strong> unlocked <strong>' . $this_name . '</strong> as a playable character! <strong>' . $this_name . '</strong> is ' . $this_best_attribute . ' ' . (!empty($robot_info['robot_core']) ? '<strong data-class="robot_type robot_type_' . $robot_info['robot_core'] . '">' . ucfirst($robot_info['robot_core']) . ' Core</strong> ' : '<strong data-class="robot_type robot_type_none">Neutral Core</strong> ') . 'robot ' . $this_first_appearance . '. <strong>' . $this_name . '</strong>&#39;s data was ' . ($temp_data_existed ? 'updated in ' : 'added to ') . ' the <strong>Robot Database</strong>.</p>';
         $temp_console_markup .= '<div id="console" style="width: auto; height: auto;"><div class="extra"><div class="extra2">' . preg_replace('/\\s+/', ' ', rpg_robot::print_database_markup($robot_info, array('layout_style' => 'event'))) . '</div></div></div>';
         //die(''.$this_robot_token.': '.$temp_console_markup);
         $_SESSION[$session_token]['EVENTS'][] = array('canvas_markup' => $temp_canvas_markup, 'console_markup' => $temp_console_markup);
     }
     // Loop through the ability rewards for this robot if set
     if ($unlock_abilities && !empty($this_robot_rewards['abilities'])) {
         // Collect the ability index for calculation purposes
         $this_ability_index = $db->get_array_list("SELECT * FROM mmrpg_index_abilities WHERE ability_flag_complete = 1;", 'ability_token');
         foreach ($this_robot_rewards['abilities'] as $ability_reward_key => $ability_reward_info) {
             // Check if the required amount of points have been met by this robot
             if ($this_robot_level >= $ability_reward_info['level']) {
                 // Unlock this ability
                 $this_ability_info = rpg_ability::parse_index_info($this_ability_index[$ability_reward_info['token']]);
                 $this_ability_info['ability_points'] = $ability_reward_info['level'];
                 $show_event = !self::ability_unlocked('', '', $ability_reward_info['token']) ? true : false;
                 self::unlock_ability($player_info, $robot_info, $this_ability_info, $show_event);
             }
         }
     }
     // Create the event flag for unlocking this robot
     $temp_game_flags['events']['unlocked-robot_' . $this_robot_token] = true;
     if (!empty($this_player_token)) {
         $temp_game_flags['events']['unlocked-robot_' . $this_player_token . '_' . $this_robot_token] = true;
     }
     // Return true on success
     return true;
 }
Ejemplo n.º 8
0
                     elseif ($active && $sort_direction == 'desc'){ echo ' <sup>&#8593;</sup>'; }
                 echo '</th>'.PHP_EOL;
             } else {
                 echo '<th class="'.$class.'">&nbsp;</th>'.PHP_EOL;
             }
         }
         ?>
     </tr>
 </thead>
 <tbody>
     <?
     // Loop through collected abilities and list their details
     if (!empty($ability_index)){
         foreach ($ability_index AS $ability_id => $ability_info){
             // Parse the ability info before displaying it
             $ability_info = rpg_ability::parse_index_info($ability_info);
             // Collect the display fields from the array
             $ability_token = $ability_info['ability_token'];
             $ability_name = $ability_info['ability_name'];
             $ability_group = '<span class="token">'.$ability_info['ability_group'].'</span>';
             $ability_type1 = !empty($ability_info['ability_type']) && !empty($type_index[$ability_info['ability_type']]) ? $type_index[$ability_info['ability_type']] : $type_index['none'];
             $ability_type2 = !empty($ability_info['ability_type2']) && !empty($type_index[$ability_info['ability_type2']]) ? $type_index[$ability_info['ability_type2']] : false;
             if (!empty($ability_type2)){ $type_string = '<span class="type '.$ability_type1['type_token'].'_'.$ability_type2['type_token'].'">'.$ability_type1['type_name'].' / '.$ability_type2['type_name'].'</span>'; }
             else { $type_string = '<span class="type '.$ability_type1['type_token'].'">'.$ability_type1['type_name'].'</span>'; }
             $edit_link = 'admin/abilities/'.$ability_id.'/';
             $view_link = 'database/abilities/'.$ability_token.'/';
             $complete = $ability_info['ability_flag_complete'] ? true : false;
             $published = $ability_info['ability_flag_published'] ? true : false;
             $hidden = $ability_info['ability_flag_hidden'] ? true : false;
             // Print out the ability info as a table row
             ?>
Ejemplo n.º 9
0
 /**
  * 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 ? '&#9733;' : '&#9734;';
     }
     // (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' ? '&hellip;' : '!') . ' ';
         $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 . '&#39;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&#39;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&#39;s ' . $temp_human_rewards['battle_failure'] . ' times now&hellip; ' : '') . 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'] . ' &nbsp;/&nbsp; ' . $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'] . ' &nbsp;/&nbsp; ' . $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'] . ' &nbsp;/&nbsp; ' . $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'] . ' &nbsp;/&nbsp; ' . $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;
 }