function fast_resolve($planet_id)
 {
     $CI =& get_instance();
     // Load resources and fetch data
     $CI->load->model('planetmodel');
     $CI->load->model('factionmodel');
     $CI->load->model('commandmodel');
     $CI->load->model('formationmodel');
     $CI->load->model('combatunitmodel');
     $planet = $CI->planetmodel->get_by_id($planet_id);
     $factions = $CI->factionmodel->get_by_game($planet->game_id);
     if (count($factions) != 2) {
         log_message('error', 'fast_resolve failed due to invalid numebr of factions on ' . $planet->name);
         return;
     }
     $commands = $CI->commandmodel->get_by_planet_for_combat($planet_id);
     $formations = $CI->formationmodel->get_by_planet_for_combat($planet_id);
     $combatunits = $CI->combatunitmodel->get_by_planet_for_combat($planet_id);
     // Determine LR rating of each faction
     $lrTable['Green'] = 1;
     $lrTable['Regular'] = 2;
     $lrTable['Veteran'] = 4;
     $lrTable['Elite'] = 6;
     $factionArray;
     foreach ($factions as $f) {
         $factionArray[$f->faction_id] = $f;
         $factionArray[$f->faction_id]->lr = 0;
         $factionArray[$f->faction_id]->num_recon = 0;
         $factionArray[$f->faction_id]->initBonus = 0;
         $factionArray[$f->faction_id]->damageBonus = 0;
     }
     foreach ($commands as $c) {
         $f_id = $c->f_id;
         if ($factionArray[$f_id]->lr < $lrTable[$c->faction_id]) {
             $factionArray[$f_id]->lr = $lrTable[$c->faction_id];
         }
     }
     // Initiative
     $fs = (array) $factions;
     $rollA = roll_dice(2, 6) + $factionArray[$fs[0]->faction_id]->lr;
     $rollB = roll_dice(2, 6) + $factionArray[$fs[1]->faction_id]->lr;
     if ($rollA > $rollB) {
         $factionArray[$fs[0]->faction_id]->initBonus = 1;
     } else {
         $factionArray[$fs[1]->faction_id]->initBonus = 1;
     }
     // Recon
     foreach ($formations as $f) {
         if ($f->role == 'Recon') {
             $factionArray[$f->faction_id]->num_recon++;
         }
     }
     $rollA = roll_dice(2, 6) + $factionArray[$fs[0]->faction_id]->num_recon * 2 + $factionArray[$fs[0]->faction_id]->initBonus;
     $rollB = roll_dice(2, 6) + $factionArray[$fs[1]->faction_id]->num_recon * 2 + $factionArray[$fs[1]->faction_id]->initBonus;
     if ($rollA > $rollB) {
         $factionArray[$fs[0]->faction_id]->damageBonus = 0.1;
     } else {
         $factionArray[$fs[1]->faction_id]->damageBonus = 0.1;
     }
     // Engagement, roll and store engagement roll
     // Affected by LR, Loyalty, recon, skill, morale, fatigue, supply
     $engageExp['Green'] = 1;
     $engageExp['Regular'] = 0;
     $engageExp['Veteran'] = -1;
     $engageExp['Elite'] = -2;
     $engageLoyalty['Questionable'] = 1;
     $engageLoyalty['Reliable'] = 0;
     $engageLoyalty['Fanatical'] = -1;
     $engageMorale['Normal'] = 0;
     $engageMorale['Shaken'] = 1;
     $engageMorale['Unsteady'] = 2;
     $engageMorale['Broken'] = 3;
     foreach ($formations as $f) {
         $target = $f->tactics;
         $target += $engageExp[$f->experience];
         if ($f->role == 'Recon') {
             $target += 2;
         }
         $target -= $factionArray[$f->faction_id]->lr;
         $target += $engageLoyalty[$f->loyalty];
         $target += !$f->supply * 3;
         $target += $engageMorale[$f->morale];
     }
     // Combat
     foreach ($combatunits as $c) {
     }
     // Damage resolution
     $combatunitarray = (array) $combatunits;
     foreach ($combatunits as $c) {
     }
 }
Example #2
0
 /**
  * Damage this formation
  * Damage is applied randomly among available combat units
  */
 function damage($token_id = 0)
 {
     $page = $this->page;
     $damage = $this->input->post('damage');
     $this->load->model('tokenmodel');
     $this->load->model('formationmodel');
     $this->load->model('combatunitmodel');
     $token = $this->tokenmodel->get_by_id($token_id);
     $formation = $this->formationmodel->get_by_id($token->formation_id);
     $combatunits = $this->combatunitmodel->get_by_formation($formation->formation_id);
     $numUnits = count($combatunits);
     $roll = roll_dice(1, $numUnits);
     $combatunits[$roll]->damage += $damage;
     $this->combatunitmodel->update($combatunits[$roll]->combatunit_id, $combatunits[$roll]);
     $this->view($token_id);
 }
 function generate_combatteam($combatteam_id = 0)
 {
     $CI =& get_instance();
     $CI->load->model('formationmodel');
     $CI->load->model('combatunitmodel');
     $CI->load->model('combatteammodel');
     $CI->load->model('lancemodel');
     $CI->load->model('unitmodel');
     $CI->load->model('ratmodel');
     $CI->load->model('ratdatamodel');
     $CI->load->model('commandmodel');
     $CI->load->model('elementmodel');
     $CI->load->model('unitmodel');
     $CI->load->model('factionmodel');
     // Gather up basic data from the command heirarchy
     $combatteam = $CI->combatteammodel->get_by_id($combatteam_id);
     $combatunit = $CI->combatunitmodel->get_by_id($combatteam->combatunit_id);
     $formation = $CI->formationmodel->get_by_id($combatunit->formation_id);
     $command = $CI->commandmodel->get_by_id($formation->command_id);
     $faction = $CI->factionmodel->get_by_id($command->faction_id);
     // Make RAT table lookup corrections
     if ($formation->type == 'Aero' || $formation->type == 'Vehicle') {
         $command->tech = 'B';
     }
     if ($formation->type == 'Infantry') {
         $command->tech = 'B';
         $faction->name = 'General';
     }
     // Skill lookup table
     $skillTable['Green'] = 5;
     $skillTable['Regular'] = 4;
     $skillTable['Veteran'] = 3;
     $skillTable['Elite'] = 2;
     $skill = $skillTable[$command->experience];
     // Size lookup table
     $sizeTable['Light'] = 1;
     $sizeTable['Medium'] = 2;
     $sizeTable['Heavy'] = 3;
     $sizeTable['Assault'] = 4;
     $altSizeTable[1] = 'Light';
     $altSizeTable[2] = 'Medium';
     $altSizeTable[3] = 'Heavy';
     $altSizeTable[4] = 'Assault';
     // Determine Company composition
     $roll = roll_dice(1, 6) - 1;
     $lanceWeights = array(array('Light', 'Medium', 'Medium'), array('Light', 'Medium', 'Heavy'), array('Medium', 'Medium', 'Heavy'), array('Light', 'Heavy', 'Heavy'), array('Heavy', 'Heavy', 'Heavy'), array('Heavy', 'Heavy', 'Assault'));
     $lanceWeights = $lanceWeights[$roll];
     // Generate lances
     for ($l = 0; $l < 3; $l++) {
         $lance = new stdClass();
         $lance->combatteam_id = $combatteam_id;
         $lance->type = $formation->type;
         $lance->weight = $lanceWeights[$l];
         $CI->lancemodel->create($lance);
     }
     $lances = $CI->lancemodel->get_by_combatteam($combatteam_id);
     // Determine Lance composition
     $elementWeights['Light'] = array(array('Light', 'Light', 'Light', 'Light'), array('Light', 'Light', 'Light', 'Medium'), array('Light', 'Light', 'Light', 'Medium'), array('Light', 'Light', 'Medium', 'Medium'), array('Light', 'Light', 'Medium', 'Medium'), array('Light', 'Light', 'Medium', 'Heavy'));
     $elementWeights['Medium'] = array(array('Light', 'Medium', 'Medium', 'Heavy'), array('Medium', 'Medium', 'Medium', 'Medium'), array('Medium', 'Medium', 'Medium', 'Medium'), array('Medium', 'Medium', 'Medium', 'Heavy'), array('Medium', 'Medium', 'Medium', 'Heavy'), array('Medium', 'Medium', 'Heavy', 'Heavy'));
     $elementWeights['Heavy'] = array(array('Medium', 'Heavy', 'Heavy', 'Heavy'), array('Heavy', 'Heavy', 'Heavy', 'Heavy'), array('Heavy', 'Heavy', 'Heavy', 'Heavy'), array('Medium', 'Heavy', 'Heavy', 'Assault'), array('Medium', 'Heavy', 'Heavy', 'Assault'), array('Heavy', 'Heavy', 'Heavy', 'Assault'));
     $elementWeights['Assault'] = array(array('Medium', 'Heavy', 'Assault', 'Assault'), array('Heavy', 'Heavy', 'Assault', 'Assault'), array('Heavy', 'Heavy', 'Assault', 'Assault'), array('Heavy', 'Assault', 'Assault', 'Assault'), array('Heavy', 'Assault', 'Assault', 'Assault'), array('Assault', 'Assault', 'Assault', 'Assault'));
     // Target movement modifier lookup table
     $tmm = array(-4, 0, 0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5);
     // Generate four elements per lance
     foreach ($lances as $l) {
         $lanceweight = 0;
         $roll = roll_dice(1, 6) - 1;
         $weightTable = $elementWeights[$l->weight][$roll];
         $numElements = 4;
         // Aero wings only have 2 elements
         if ($l->type == 'Aero') {
             $numElements = 2;
         }
         for ($e = 0; $e < $numElements; $e++) {
             $unit = new stdClass();
             $unit->lance_id = $l->lance_id;
             $unit->type = $l->type;
             $unit->weight = $weightTable[$e];
             // Aerospace can't have Assault elements
             if ($unit->type == 'Aero' && ($unit->weight = 'Assault')) {
                 $unit->weight = 'Heavy';
             }
             // Infantry is always light
             if ($unit->type == 'Infantry') {
                 $unit->weight = 'Light';
             }
             $CI->elementmodel->create($unit);
         }
         // Roll against the RAT table to populate each element
         $elements = $CI->elementmodel->get_by_lance($l->lance_id);
         foreach ($elements as $e) {
             $roll = roll_dice(2, 6);
             if ($faction->name == 'Ronin') {
                 $faction->name = 'Kurita';
             }
             // HACK...
             $ratresult = $CI->ratmodel->get_by_roll($faction->name, $command->tech, $e->type, $e->weight, $roll);
             $e->name = $ratresult->name;
             $e->move = $ratresult->move;
             $l->move += $e->move;
             $e->jump = $ratresult->jump;
             $l->jump += $e->jump;
             $e->overheat = $ratresult->overheat;
             $e->short_dmg = $ratresult->short_dmg;
             $l->short_dmg += $e->short_dmg + $e->overheat / 2;
             $e->med_dmg = $ratresult->med_dmg;
             $l->med_dmg += $e->med_dmg + $e->overheat / 2;
             $e->long_dmg = $ratresult->long_dmg;
             $l->long_dmg += $e->long_dmg + $e->overheat / 2;
             $e->armor = $ratresult->armor;
             $l->armor += $e->armor;
             $e->structure = $ratresult->structure;
             $l->armor += $e->structure;
             $e->special = $ratresult->special;
             $CI->elementmodel->update($e->element_id, $e);
             // Special cases
             if ($e->structure > 3 || strpos($e->special, 'CASE') !== FALSE || strpos($e->special, 'AMS') !== FALSE) {
                 $l->armor += 0.5;
             }
             if (strpos($e->special, 'ENE') !== FALSE) {
                 $l->armor += 1;
             }
         }
         // Aggregate lance data
         $l->move = round($l->move / count($elements));
         $l->tmm = $tmm[$l->move];
         $l->jump = round($l->jump / count($elements) / 2);
         $l->armor = round($l->armor / 3);
         $l->short_dmg = round($l->short_dmg / 3);
         $l->med_dmg = round($l->med_dmg / 3);
         $l->long_dmg = round($l->long_dmg / 3);
         $CI->lancemodel->update($l->lance_id, $l);
     }
     // end foreach lance
     // Refetch modified lance data
     $lances = $CI->lancemodel->get_by_combatteam($combatteam_id);
     $jump = 0;
     $size = 0;
     foreach ($lances as $l) {
         $combatteam->move += $l->move;
         $jump += $l->jump;
         $combatteam->tmm += $l->tmm;
         $combatteam->armor += $l->armor;
         $combatteam->short_dmg += $l->short_dmg;
         $combatteam->med_dmg += $l->med_dmg;
         $combatteam->long_dmg += $l->long_dmg;
         $size += $sizeTable[$l->weight];
     }
     $size = round($size / count($lances));
     $combatteam->size = $altSizeTable[$size];
     $combatteam->move = round($combatteam->move / count($lances));
     $jump = round($jump / 3);
     $combatteam->tmm = round($combatteam->tmm / count($lances)) + $jump;
     $combatteam->armor = round($combatteam->armor / 3);
     $combatteam->short_dmg = round($combatteam->short_dmg / 3);
     $combatteam->med_dmg = round($combatteam->med_dmg / 3);
     $combatteam->long_dmg = round($combatteam->long_dmg / 3);
     $CI->combatteammodel->update($combatteam_id, $combatteam);
 }
function toggle_turn($roomid)
{
    global $db, $ir;
    $ui = $db->fetch_row($db->query("SELECT p1,p2,turn FROM bg_room WHERE id = {$roomid}"));
    if ($ui['turn'] == $ui['p1']) {
        $db->query("UPDATE bg_room SET notifyturn=0,play_time=unix_timestamp(),turn={$ui['p2']} WHERE id={$roomid}");
    } else {
        $db->query("UPDATE bg_room SET notifyturn=0,play_time=unix_timestamp(),turn={$ui['p1']} WHERE id={$roomid}");
    }
    roll_dice($roomid);
}