private function move_xenobe($id, $aggression, $turns) { global $db_prefix, $sector_max; $sql_manager = new manage_table(); $player_manager = new manage_player(); $manage_log = new manage_log(); /*get xenobe current sector*/ $xenobe_data = $sql_manager->playerinfo($id, ""); /*check current warp links, are there any? pick one at random to warp to*/ //$link_query = ; $sector_links = $sql_manager->process_query("SELECT * FROM " . $db_prefix . "links WHERE link_start='" . $xenobe_data['sector'] . "'"); $available_links = array(); if ($sector_links) { #Sector Links Detected# foreach ($sector_links as $row) { /*List all the links, and pick one at random*/ array_push($available_links, $row['link_dest']); } $selected = array_rand($available_links, 1); $target_sector = $available_links[$selected]; } else { #No Sector Links Detected - PICKING RANDOM FROM THE UNIVERSE# $target_sector = mt_rand(1, $sector_max); /*We want the xenobes to have a presence everywhere, for intimidation reasons*/ } /*Right target sector has been selected, now we just need to move there. check for fighters and mines*/ /* To override for testing purposes, you can force a single target sector using $target_sector = 400; for example here */ $total_sector_mines = $sql_manager->sector_defence_quantities($target_sector, 'M', $id, "investigate"); $total_sector_fighters = $sql_manager->sector_defence_quantities($target_sector, 'F', $id, "investigate"); $total_sector_fighters = (int) $total_sector_fighters; $total_sector_mines = (int) $total_sector_mines; if ($total_sector_fighters > 0 || $total_sector_mines > 0 || $total_sector_fighters > 0 && $total_sector_mines > 0) { if ($aggression > 0) { /*Attacks sector defence*/ if ($sql_manager->move_ship($id, $target_sector, $turns)) { $sector_manager = new manage_sector(); if ($sector_manager->sector_defence_challange($target_sector, $id)) { echo "<br/>ship moved to sector<br/>"; /*Ship in sector, got through defences - do nothing*/ ##New Log ## $player_manager->last_activity_stamp($id); $manage_log->player_log($id, 17, $target_sector, '', '', '', "<font color='#6190a5'>Low Priority</font>", "<b>Information</b>"); } else { echo "<br/>Ship was destroyed<br/>"; /*ship was destroyed trying to enter sector*/ if ($xenobe_data['dev_emerwarp'] == "Y") { ##New Log ## $manage_log->player_log($id, 19, $target_sector, '', '', '', "<font color='#FF0000'><b>Extreme Priority</b></font>", '<b><font color="#FF0000">Warning</font></b>'); $sql_manager->reset_ship($id); } else { ##New Log ## $manage_log->player_log($id, 18, $target_sector, '', '', '', "<font color='#FF0000'><b>Extreme Priority</b></font>", '<b><font color="#FF0000">Warning</font></b>'); $sql_manager->reset_ship($id); $sql_manager->kill_ship($id); } /*Need function to remove bounty? or ignore this? only remove bounty in ship to ship or ship to planet combat situations?*/ } } else { ##not enough turns## /*move failed, stay in sector*/ } } else { /*Avoids sector*/ } } else { if ($target_sector > 0) { if ($sql_manager->move_ship($id, $target_sector, $turns)) { $player_manager->last_activity_stamp($id); /*no defences sucessful move*/ } else { /*move failed, stay in sector*/ } } else { /*Avoids sector*/ } } }
public function sector_defence_challange($sector, $id) { global $db_prefix; global $torp_dmg_rate; global $level_factor; $sql_manager = new manage_table(); $player_manager = new manage_player(); $ship_manager = new manage_ship(); $manage_log = new manage_log(); /*load player information*/ $player_data = $sql_manager->playerinfo($id, ""); /*Load sector information - Team defences are removed from the quantities, so if there are any left, it must be hostile, take the apropriate action*/ $total_sector_mines = $sql_manager->sector_defence_quantities($sector, 'M', $id, "investigate"); $total_sector_fighters = $sql_manager->sector_defence_quantities($sector, 'F', $id, "investigate"); $total_sector_fighters = (int) $total_sector_fighters; $total_sector_mines = (int) $total_sector_mines; if ($total_sector_fighters > 0 || $total_sector_mines > 0 || $total_sector_fighters > 0 && $total_sector_mines > 0) { ##Hostile defences detected!## /*Mark player as in combat*/ if ($sql_manager->ship_in_sector_defence_combat($sector, $id)) { ##Log this## /*Log player engaging sector defences*/ } else { ##log this## /*Failed to update ship and set to in combat*/ } ##YOU HAVE ENGAGED THE SECTOR DEFENCES## $sector_defence_fighters = $total_sector_fighters; $playerbeams = $ship_manager->number_beams($player_data['beams']); if ($playerbeams > $player_data['ship_energy']) { /*Player Beams Armed*/ $playerbeams = $player_data['ship_energy']; } $player_data['ship_energy'] = $player_data['ship_energy'] - $playerbeams; $playershields = $ship_manager->number_shields($player_data['shields']); if ($playershields > $player_data['ship_energy']) { /*Player Shields Raised*/ $playershields = $player_data['ship_energy']; } $playertorpnum = round(pow($level_factor, $player_data['torp_launchers'])) * 2; if ($playertorpnum > $player_data['torps']) { /*Torpedos places in firing tubes*/ $playertorpnum = $player_data['torps']; } /*Torpedo warheads armed*/ $playertorpdmg = $torp_dmg_rate * $playertorpnum; /*polerize the armour plating*/ $playerarmor = $player_data['armor_pts']; /*pilots to fighter bays*/ $playerfighters = $player_data['ship_fighters']; /*fetch amount of sector mines in minefield*/ $sector_defence_minefield = $total_sector_mines; if ($sector_defence_minefield > 1) { /*change of getting through minefield*/ $roll = mt_rand(1, $sector_defence_minefield); } else { $roll = 1; } /*total mines which are attracted to the hull of the players ship*/ $sector_defence_minefield = $sector_defence_minefield - $roll; /*prepare mine deflectors for launch*/ $playerminedeflect = $player_data['dev_minedeflector']; /*Where are the fighters? inside or outside the fighter formation?*/ $fighter_or_mines_first = mt_rand(1, 100); if ($fighter_or_mines_first > 50) { /*Engages the fighters first*/ $fighter_results = $this->sector_fighter_engaged($playerbeams, $sector_defence_fighters, $playertorpdmg, $playerarmor, $playerfighters, $playershields, $id); $playerbeams = $fighter_results[0]; $sector_defence_fighters = $fighter_results[1]; $playertorpdmg = $fighter_results[2]; $playerarmor = $fighter_results[3]; $playerfighters = $fighter_results[4]; $playershields = $fighter_results[5]; if ($playerarmor > 0) { if ($playerminedeflect >= $roll) { /*do nothing... players fought off the fighters, and found a hole in minefield*/ /*ship is in sector \o/*/ if ($sql_manager->ship_in_sector_defence_combat("", $id)) { ### ## ## Update Sector Information ## ### $sql_manager->manage_sector_defences($sector, $sector_defence_fighters, $sector_defence_minefield, $id); ### ## ## Update Player Stats ## ### /*Leftover torpedoes?*/ $y = $playertorpdmg / $torp_dmg_rate; $torpedoes_left = $y; /*Leftover energy?*/ $t = $playershields + $playerbeams; $energy_left = $player_data['ship_energy'] - $t; if ($energy_left < 0) { $energy_left = 0; } $updated_stats = array('cleared_defences' => ' ', 'ship_energy' => $energy_left, 'dev_minedeflector' => $playerminedeflect, 'armor_pts' => $playerarmor, 'ship_fighters' => $playerfighters, 'torps' => $torpedoes_left); if ($sql_manager->updatePlayer($id, "ships", $updated_stats)) { ##Log this## /*Log player got passed sector defences*/ return true; } else { ##Log this## /*Log player failed to update their stats*/ return false; } } else { ##log this## /*Failed to update ship setting got into sector - fail entire move*/ return false; } } else { $minefield_results = $this->sector_minefield_engaged($playerminedeflect, $playershields, $playerarmor, $sector_defence_minefield, $id); $playerminedeflect = $minefield_results[0]; $playershields = $minefield_results[1]; $playerarmor = $minefield_results[2]; $sector_defence_minefield = $minefield_results[3]; if ($playerarmor > 0) { /*ship is in sector \o/*/ if ($sql_manager->ship_in_sector_defence_combat("", $id)) { ### ## ## Update Sector Information ## ### $sql_manager->manage_sector_defences($sector, $sector_defence_fighters, $sector_defence_minefield, $id); ### ## ## Update Player Stats ## ### /*Leftover torpedoes?*/ $y = $playertorpdmg / $torp_dmg_rate; $torpedoes_left = $y; /*Leftover energy?*/ $t = $playershields + $playerbeams; $energy_left = $player_data['ship_energy'] - $t; if ($energy_left < 0) { $energy_left = 0; } $updated_stats = array('cleared_defences' => ' ', 'ship_energy' => $energy_left, 'dev_minedeflector' => $playerminedeflect, 'armor_pts' => $playerarmor, 'ship_fighters' => $playerfighters, 'torps' => $torpedoes_left); if ($sql_manager->updatePlayer($id, "ships", $updated_stats)) { ##Log this## /*Log player got passed sector defences*/ return true; } else { ##Log this## /*Log player failed to update their stats*/ return false; } } else { ##log this## /*Failed to update ship setting got into sector - fail entire move*/ return false; } } else { ### ## ## Update Sector Information ## ### $sql_manager->manage_sector_defences($sector, $sector_defence_fighters, $sector_defence_minefield, $id); //ship destroyed! return false; } } } else { echo "player died"; ### ## ## Update Sector Information ## ### $sql_manager->manage_sector_defences($sector, $sector_defence_fighters, $sector_defence_minefield, $id); echo "passed function"; //ship destroyed! return false; } } else { /*Engages the minefield first*/ if ($playerminedeflect >= $roll) { /*do nothing... hole in minefield sucessfully found. Now lets go and get those fighters...*/ } else { $minefield_results = $this->sector_minefield_engaged($playerminedeflect, $playershields, $playerarmor, $sector_defence_minefield, $id); $playerminedeflect = $minefield_results[0]; $playershields = $minefield_results[1]; $playerarmor = $minefield_results[2]; $sector_defence_minefield = $minefield_results[3]; } if ($playerarmor > 0) { $fighter_results = $this->sector_fighter_engaged($playerbeams, $sector_defence_fighters, $playertorpdmg, $playerarmor, $playerfighters, $playershields, $id); $playerbeams = $fighter_results[0]; $sector_defence_fighters = $fighter_results[1]; $playertorpdmg = $fighter_results[2]; $playerarmor = $fighter_results[3]; $playerfighters = $fighter_results[4]; $playershields = $fighter_results[5]; if ($playerarmor > 0) { /*ship is in sector \o/*/ if ($sql_manager->ship_in_sector_defence_combat("", $id)) { ### ## ## Update Sector Information ## ### $sql_manager->manage_sector_defences($sector, $sector_defence_fighters, $sector_defence_minefield, $id); ### ## ## Update Player Stats ## ### /*Leftover torpedoes?*/ $y = $playertorpdmg / $torp_dmg_rate; $torpedoes_left = $y; /*Leftover energy?*/ $t = $playershields + $playerbeams; $energy_left = $player_data['ship_energy'] - $t; if ($energy_left < 0) { $energy_left = 0; } $updated_stats = array('cleared_defences' => ' ', 'ship_energy' => $energy_left, 'dev_minedeflector' => $playerminedeflect, 'armor_pts' => $playerarmor, 'ship_fighters' => $playerfighters, 'torps' => $torpedoes_left); if ($sql_manager->updatePlayer($id, "ships", $updated_stats)) { ##Log this## /*Log player got passed sector defences*/ return true; } else { ##Log this## /*Log player failed to update their stats*/ return false; } } else { ##log this## /*Failed to update ship setting got into sector - fail entire move*/ return false; } } else { ### ## ## Update Sector Information ## ### $sql_manager->manage_sector_defences($sector, $sector_defence_fighters, $sector_defence_minefield, $id); //ship destroyed! return false; } } else { ### ## ## Update Sector Information ## ### $sql_manager->manage_sector_defences($sector, $sector_defence_fighters, $sector_defence_minefield, $id); //ship destroyed! return false; } } } else { /*NO sector defences, or sector defences belong to self or friend. Player in sector.*/ return true; } }