public static function Init($params) { DebugManager::Log("Got a logout request!", '@'); $account = AccountController::Create($params); SessionManager::Create($account); return new ResponseObject(); }
/** * Initialize Page Manager * * ## Overview * * @uses SatanBarbaraApp * @uses SessionManager * @uses ViewManager * @uses DebugManager * @uses RouteManager * @uses PageView * * @see RouteManager * * @param array An array of creds for SendGrid API. * @return true Always unless fatal error or exception is thrown. * * @version 2015-07-05.1 * @since 0.5.1b * @author TronNet DevOps [Sean Murray] <*****@*****.**> */ public static function Init($params) { DebugManager::Log("Initializing Page Manager", '@'); DebugManager::Log($params); $appConfig = SatanBarbaraApp::GetConfig(); /** * @todo have config in it's own 'config' position instead of array_merge */ $data = array('app' => array_merge($appConfig[SATANBARBARA_CURRENT_ENVIRONMENT], array()), 'page' => $params); DebugManager::Log("checking if logged in...", null, 3); if (SessionManager::IsLoggedIn()) { $data['session'] = array('is_auth' => true, 'account' => SessionManager::GetAccount()); DebugManager::Log("Got an account, checking for a saved program...", null, 3); } $Page = ucfirst($params['page']) . 'View'; DebugManager::Log("Searching for view with class name: " . $Page); if ($Page::HasAccess(SessionManager::GetAccessLevel())) { $Page::Init($data); ViewManager::Render($Page); } else { DebugManager::Log("looks like this page requires auth but user isn't authenticated!"); RouteManager::GoToPageURI('login'); } return true; }
public static function Create($objectName, $properties) { DebugManager::Status("API Create Request"); DebugManager::Status($objectName); DebugManager::Status($properties); $Controller = "SatanBarbaraAPI\\" . $objectName . "Controller"; return $Controller::Create($properties); }
public static function IsBetaAccount() { DebugManager::Log("Checking session account if beta account", '@'); if (isset(static::$account['role'])) { return self::$_roles[static::$account['role']] == 'beta' || static::$account['id'] == '0'; } else { return false; } }
public static function Init($params) { DebugManager::Log("Got a logout request!", '@'); $params['start'] = date('c', strtotime($params['start'])); $params['end'] = date('c', strtotime($params['end'])); $Account = SessionManager::GetAccount(); try { $Event = EventController::Create($params); } catch (Exception $e) { return new ResponseObject("Error", 1); } if (isset($params['acts']) && is_array($params['acts'])) { foreach ($params['acts'] as $pos => $act) { try { $Act = ActController::Create(array('title' => $act)); } catch (Exception $e) { $Acts = ActController::Search(array('title' => $act)); $Act = reset($Acts); } try { if (isset($params['slots'][$pos])) { $slot = date('c', strtotime($params['slots'][$pos])); } else { if (isset($slot)) { $slot = date('c', strtotime('+1 hour', $slot)); } else { $slot = date('c', strtotime('+30 minutes', $params['start'])); } } $Performance = PerformanceController::Create(array('act_id' => $Act['id'], 'event_id' => $Event['id'], 'position' => $pos, 'slot' => $slot)); } catch (Exception $e) { } } } if (isset($params['venue'])) { try { $Venue = VenueController::Create(array('title' => $params['venue'])); } catch (Exception $e) { $Venues = VenueController::Search(array('title' => $params['venue'])); $Venue = reset($Venues); } try { $Hoster = HosterController::Create(array('venue_id' => $Venue['id'], 'event_id' => $Event['id'])); } catch (Exception $e) { } } $Attendee = AttendeeController::Create(array('account_id' => $Account['id'], 'event_id' => $Event['id'], 'privilege_level' => 3, 'role' => 3, 'type' => 3)); self::$defaultRedirect = 'event/' . $Event['id']; return new ResponseObject(); }
public static function Init($params) { DebugManager::Log("Got a logout request!", '@'); /** * @todo ValidateLogin should provide a token, which is passed to * SessionManager */ if (AccountController::ValidateLogin($params)) { $account = AccountController::Search($params); SessionManager::Create(true, reset($account)); } else { self::$defaultRedirect = 'login'; } return new ResponseObject(); }
public static function Init($params) { DebugManager::Log("Got a logout request!", '@'); $Account = SessionManager::GetAccount(); try { $Location = LocationController::Create($params); } catch (Exception $e) { $Locations = LocationController::Search($params); $Location = reset($Locations); } try { $Venue = VenueController::Update(array('ids' => $params['venue_id'], 'location_id' => $Location['id'])); } catch (Exception $e) { } self::$defaultRedirect = 'venue/' . $Venue['id']; return new ResponseObject(); }
public static function Init($requestParams) { $appConfig = SatanBarbaraApp::GetConfig(); $data = $requestParams['params']; DebugManager::Log("Got a " . $requestParams['request']['action'] . " request!", '@'); DebugManager::Log("Got some data"); DebugManager::Log($data); $requestName = ucfirst($requestParams['request']['action']) . 'Request'; DebugManager::Log("Searching for view with class name: " . $requestName); if ($requestName::HasAccess(SessionManager::GetAccessLevel())) { $response = $requestName::Init($data); } else { DebugManager::Log("looks like this page requires auth but user isn't authenticated!"); RouteManager::GoToPageURI('login', array("message" => "That page requires authenticated access!")); } if (isset($data['_format']) && $data['_format'] == 'json') { self::AJAXResponse($response); } else { $format = isset($data['_format']) ? $data['_format'] : 'html'; if (isset($data['_redirect'])) { $redirect = $data['_redirect']; } else { if (isset($requestName::$defaultRedirect)) { $redirect = $requestName::$defaultRedirect; } else { $redirect = 'home'; // $requestParams['uri']; <-- can't do this, it will cause circular loop because it's getting current URI and not last URI. } } $redirectURI = $redirect; $HTTPVars = array(); if ($response->message != 'Success!') { if ($response->code) { $HTTPVars['error'] = $response->message; } else { $HTTPVars['success'] = $response->message; } } RouteManager::GoToPageURI($redirectURI, $HTTPVars); } }
public function __construct($debug = false) { if (empty(self::$reslist)) { self::includeVars('XG'); } if (!LangManager::getInstance()->implementationExist()) { LangManager::getInstance()->setImplementation(new LangImplementation('XG')); } $attackers = $this->getAttachers(); $defenders = $this->getDefenders(); $memory1 = memory_get_usage(); $micro1 = microtime(); $engine = new Battle($attackers, $defenders); $startBattle = DebugManager::runDebugged(array($engine, 'startBattle'), array('RunnableTest', 'myErrorHandler'), array('RunnableTest', 'save')); $startBattle($debug); $micro1 = microtime() - $micro1; $memory1 = memory_get_usage() - $memory1; $this->report = $engine->getReport(); $this->time = round(1000 * $micro1, 2); $this->memory = round($memory1 / 1000); echo $this; }
/** * Upload An Image * * ## Overview * * @uses $_FILES * * @param string $file_field Name of file upload field in html form. * @param string $new_name Name of file upload. * @param bool $check_image Check if uploaded file is a valid image. * @param bool $random_name Generate random filename for uploaded file * @param bool $force Force file overwrites. * * @return array A set of error messages. * * @version 2015-07-05.1 * @since 0.6.5b * @author TronNet DevOps [Sean Murray] <*****@*****.**> */ public static function Upload($file_field = null, $new_name = false, $check_image = false, $random_name = false, $force = false) { DebugManager::Log("Uploading Image!", '@', 0); //Config Section //Set file upload path $path = self::GetPath(); DebugManager::Log($path . $new_name, null, 0); //Set max file size in bytes $max_size = 1000000; //Set default file extension whitelist $whitelist_ext = array('jpg', 'png', 'gif'); //Set default file type whitelist $whitelist_type = array('image/jpeg', 'image/png', 'image/gif'); //The Validation // Create an array to hold any output $out = array('error' => null); if (!$file_field) { $out['error'][] = "Please specify a valid form field name"; } if (!$path) { $out['error'][] = "Please specify a valid upload path"; } if (count($out['error']) > 0) { return $out; } //Make sure that there is a file if (!empty($_FILES[$file_field]) && $_FILES[$file_field]['error'] == 0) { // Get filename $file_info = pathinfo($_FILES[$file_field]['name']); $name = $file_info['filename']; $ext = $file_info['extension']; //Check file has the right extension if (!in_array($ext, $whitelist_ext)) { $out['error'][] = "Invalid file Extension"; } //Check that the file is of the right type if (!in_array($_FILES[$file_field]["type"], $whitelist_type)) { $out['error'][] = "Invalid file Type"; } //Check that the file is not too big if ($_FILES[$file_field]["size"] > $max_size) { $out['error'][] = "File is too big"; } //If $check image is set as true if ($check_image) { if (!getimagesize($_FILES[$file_field]['tmp_name'])) { $out['error'][] = "Uploaded file is not a valid image"; } } //Create full filename including path if ($new_name) { $name = $new_name; } if ($random_name) { // Generate random filename $tmp = str_replace(array('.', ' '), array('', ''), microtime()); if (!$tmp || $tmp == '') { $out['error'][] = "File must have a name"; } $newname = $tmp . '.' . $ext; } else { $newname = $name . '.' . $ext; } //Check if file already exists on server if (file_exists($path . $newname)) { if ($force) { unlink($path . $newname); } else { $out['error'][] = "A file with this name already exists"; } } if (count($out['error']) > 0) { //The file has not correctly validated return $out; } if (move_uploaded_file($_FILES[$file_field]['tmp_name'], $path . $newname)) { /** * @todo probably can do this with image in memory instead of writing then rewriting */ DebugManager::Log("Uploaded Image!", null, 1); DebugManager::Log("Checking image is png...", null, 1); if ($ext != 'png') { DebugManager::Log("Nope! Going to convert it!", null, 1); $finalImage = new Imagick($path . $newname); $finalImage->setImageFormat("png"); DebugManager::Log("Getting rid of old image: " . $path . $newname, null, 1); unlink($path . $newname); $newname = $name . '.png'; if ($finalImage->writeImage($path . $newname)) { DebugManager::Log("Sweet, it should now be at: " . $path . $newname, null, 1); } else { DebugManager::Log("There were problems writing the image!", null, 1); } } //Success $out['filepath'] = $path; $out['filename'] = $newname; return $out; } else { $out['error'][] = "Server Error!"; } } else { $out['error'][] = "No file uploaded"; return $out; } }
public static function SendRedemptionTemplate($params) { DebugManager::Log("Sending a Redemption Email Template!", '@'); DebugManager::Log($params); $interface = self::GetInterface(); DebugManager::Log("Setting Sendgrid Email Headers"); $email = new SendGrid\Email(); $email->addTo($params['toEmail'])->setFromName($params['fromName'])->setFrom($params['fromEmail'])->setSubject($params['subject'])->setText("You used " . $params['points'] . " visits to redeem")->setHtml("You used " . $params['points'] . " visits to redeem")->addSubstitution(':title', array($params['title']))->addSubstitution(':id', array($params['id']))->addSubstitution(':advertiser_title', array($params['advertiser_title']))->addSubstitution(':advertiser_subtitle', array($params['advertiser_subtitle']))->addSubstitution(':description', array($params['description']))->addSubstitution(':advertiser_description', array($params['advertiser_description']))->addSubstitution(':subtitle', array($params['subtitle']))->addSubstitution(':name', array($params['toName']))->addSubstitution(':offer', array($params['title']))->addSubstitution(':instructions', array($params['instructions']))->addSubstitution(':points', array($params['points']))->setTemplateId(self::$_templates['rewardRedeemed']); DebugManager::Log($email); DebugManager::Log("Sending Sendgrid Email!!"); $response = true; if (!self::$dry_run) { $response = $interface->send($email); } DebugManager::Log("Got a response!"); DebugManager::Log($response); return $response; }
/** * Get Application Config Data * * @return array An array of app settings. * * @version 2015-07-05.1 * @since 0.5.1b * @author TronNet DevOps [Sean Murray] <*****@*****.**> */ public static function GetConfig() { DebugManager::Log("Getting Application Configurations"); DebugManager::Log(self::$appConfig); return self::$appConfig; }
$homeFleet->addShipType(getShipType($i, $targetPlanet[$resource[$i]])); } } } if (!$defenders->existPlayer($TargetUserID)) { $player = new Player($TargetUserID, array($homeFleet)); $player->setTech($targetUser['military_tech'], $targetUser['shield_tech'], $targetUser['defence_tech']); $player->setName($targetUser['name']); $defenders->addPlayer($player); } else { $defenders->getPlayer($TargetUserID)->addDefense($homeFleet); } //------------------------------------------------------------------------- //------------------------------ battle ----------------------------------- $battle = new Battle($attackers, $defenders); $startBattle = DebugManager::runDebugged(array($battle, 'startBattle'), $errorHandler, $exceptionHandler); $startBattle(); //------------------------------------------------------------------------- //-------------------------- after battle stuff --------------------------- $report = $battle->getReport(); $steal = updateAttackers($report->getPresentationAttackersFleetOnRound('START'), $report->getAfterBattleAttackers(), $targetPlanet, $resource, $pricelist); $report->setSteal($steal); updateDefenders($report->getPresentationDefendersFleetOnRound('START'), $report->getAfterBattleDefenders(), $targetPlanet, $resource, $steal); updateDebris($FleetRow, $report); updateMoon($FleetRow, $report, '', $TargetUserID, $targetPlanet); sendMessage($FleetRow, $report, $lang, $resource); //------------------------------------------------------------------------- } elseif ($FleetRow['fleet_end_time'] <= time()) { $Message = sprintf($lang['sys_fleet_won'], $TargetName, GetTargetAdressLink($FleetRow, ''), Format::pretty_number($FleetRow['fleet_resource_metal']), $lang['Metal'], Format::pretty_number($FleetRow['fleet_resource_crystal']), $lang['Crystal'], Format::pretty_number($FleetRow['fleet_resource_deuterium']), $lang['Deuterium']); SendSimpleMessage($FleetRow['fleet_owner'], '', $FleetRow['fleet_end_time'], 3, $lang['sys_mess_tower'], $lang['sys_mess_fleetback'], $Message); $this->RestoreFleetToPlanet($FleetRow);
* Metalsite Application PHP Configuration. * * Loads the application PHP config file. This file will determine the * current environment setup as well as define global constants and paths * that are utilized in the Metalsite Application Core. */ require_once SATANBARBARA_PATH . '/www/lib/config.php'; /** * Metalsite Application PHP Class Autoloader. * * Defines the paths to search for Application specific classes and loads * them if found. All classes in the Application Core are loaded by this * mechanism. */ require_once SATANBARBARA_APP_PATH . '/lib/autoloader.php'; DebugManager::Log(SATANBARBARA_APP_PACKAGE_NAME . " Entry Point", '@'); /** * Metalsite API PHP Class Autoloader. * * Defines the paths to search for API specific classes and loads them * if found. All classes in the API are loaded by this mechanism. */ require_once SATANBARBARA_API_PATH . '/lib/autoloader.php'; /** * Initialize Metalsite Application. * * Utilizing the constants and autoloaders included above, initialize the * Metalsite Application. This is where all session, routing, data and * requests are handled. */ SatanBarbaraApp::Init();
/** * DebugManager::myErrorHandler() * default error handler function * @param mixed $errno * @param mixed $errstr * @param mixed $errfile * @param mixed $errline * @return */ public static function myErrorHandler($errno, $errstr, $errfile, $errline) { $error = ''; switch ($errno) { case E_USER_ERROR: $error .= "ERROR [{$errno}] {$errstr}" . PHP_EOL; break; case E_USER_WARNING: $error .= "WARNING [{$errno}] {$errstr}" . PHP_EOL; break; case E_USER_NOTICE: $error .= "NOTICE [{$errno}] {$errstr}" . PHP_EOL; break; default: $error .= "Unknown error type: [{$errno}] {$errstr}" . PHP_EOL; break; } $error .= "Error on line {$errline} in file {$errfile}"; $error .= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")" . PHP_EOL; DebugManager::save($error); /* Don't execute PHP internal error handler */ return true; }
/** * Send A Notification via SendGrid * * ## Overview * * @uses NotificationManager * * @see SatanBarbaraApp * * @param array The HTTP params for SendGrid API; such as message, to, etc. * @return string A response string for request from SendGrid API. * * @version 2015-07-05.1 * @since 0.5.1b * @author TronNet DevOps [Sean Murray] <*****@*****.**> */ public static function Send(array $params) { DebugManager::Log("Sending an email via SendGrid", '@'); DebugManager::Log($params); return SendgridConnector::SendEmail($params); }
/** * method attack_mission * param $fleet_row * return the attack result */ public function attack_mission($fleet_row) { // null == use default handlers $errorHandler = null; $exceptionHandler = null; if ($fleet_row['fleet_mess'] == 0 && $fleet_row['fleet_start_time'] <= time()) { $base = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR; require $base . 'utils' . DIRECTORY_SEPARATOR . 'includer.php'; $target_planet = parent::$db->query_fetch("SELECT *\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tFROM " . PLANETS . " AS p\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tINNER JOIN " . BUILDINGS . " AS b ON b.building_planet_id = p.`planet_id`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tINNER JOIN " . SHIPS . " AS s ON s.ship_planet_id = p.`planet_id`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tINNER JOIN " . DEFENSES . " AS d ON d.defense_planet_id = p.`planet_id`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE `planet_galaxy` = " . (int) $fleet_row['fleet_end_galaxy'] . " AND\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t`planet_system` = " . (int) $fleet_row['fleet_end_system'] . " AND\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t`planet_type` = " . (int) $fleet_row['fleet_end_type'] . " AND\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t`planet_planet` = " . (int) $fleet_row['fleet_end_planet'] . ";"); if ($fleet_row['fleet_group'] > 0) { parent::$db->query("DELETE FROM `" . ACS_FLEETS . "`\n\t\t\t\t\t\t\t\t\t\tWHERE `acs_fleet_id` = '" . (int) $fleet_row['fleet_group'] . "'"); parent::$db->query("UPDATE `" . FLEETS . "` SET\n\t\t\t\t\t\t\t\t\t\t`fleet_mess` = '1'\n\t\t\t\t\t\t\t\t\t\tWHERE `fleet_group` = '" . $fleet_row['fleet_group'] . "'"); } else { parent::return_fleet($fleet_row['fleet_id']); } $target_user = doquery('SELECT * FROM {{table}} WHERE id=' . $target_planet['id_owner'], 'users', true); $target_userID = $target_user['id']; PlanetResourceUpdate($target_user, $target_planet, time()); // attackers fleet sum $attackers = new PlayerGroup(); if ($fleet_row['fleet_group'] != 0) { $fleets = doquery('SELECT * FROM {{table}} WHERE fleet_group=' . $fleet_row['fleet_group'], 'fleets'); $attackers = get_player_group_from_query($fleets); } else { $attackers = get_player_group($fleet_row); } //defenders fleet sum $def = doquery('SELECT * FROM {{table}} WHERE `fleet_end_galaxy` = ' . $fleet_row['fleet_end_galaxy'] . ' AND `fleet_end_system` = ' . $fleet_row['fleet_end_system'] . ' AND `fleet_end_type` = ' . $fleet_row['fleet_end_type'] . ' AND `fleet_end_planet` = ' . $fleet_row['fleet_end_planet'] . ' AND fleet_start_time<' . time() . ' AND fleet_end_stay>=' . time(), 'fleets'); $defenders = get_player_group_from_query($def, true, $target_user); //defenses sum $homeFleet = new HomeFleet(0); for ($i = self::DEFENSE_MIN_ID; $i < self::DEFENSE_MAX_ID; $i++) { if (isset($this->_resource[$i]) && isset($target_planet[$this->_resource[$i]])) { if ($target_planet[$this->_resource[$i]] != 0) { $homeFleet->add(get_ship_type($i, $target_planet[$this->_resource[$i]])); } } } for ($i = self::SHIP_MIN_ID; $i < self::SHIP_MAX_ID; $i++) { if (isset($this->_resource[$i]) && isset($target_planet[$this->_resource[$i]])) { if ($target_planet[$this->_resource[$i]] != 0) { $homeFleet->add(get_ship_type($i, $target_planet[$this->_resource[$i]])); } } } if (!$defenders->existPlayer($target_userID)) { $player = new Player($target_userID, array($homeFleet)); $player->setTech($target_user['military_tech'], $target_user['shield_tech'], $target_user['defence_tech']); $defenders->addPlayer($player); } else { $defenders->getPlayer($target_userID)->addDefense($homeFleet); } //start of battle $battle = new Battle($attackers, $defenders); $startBattle = DebugManager::runDebugged(array($battle, 'startBattle'), $errorHandler, $exceptionHandler); $startBattle(); //end of battle $report = $battle->getReport(); $steal = $this->update_attackers($report->getPresentationAttackersFleetOnRound('START'), $report->getAfterBattleAttackers(), $target_planet); $this->update_defenders($report->getPresentationDefendersFleetOnRound('START'), $report->getAfterBattleDefenders(), $target_planet, $steal); $this->updateDebris($fleet_row, $report); $this->update_moon($fleet_row, $report, '', $target_userID, $target_planet); $this->send_message($fleet_row, $report); } elseif ($fleet_row['fleet_end_time'] <= time()) { $message = sprintf($this->_lang['sys_fleet_won'], $target_planet['planet_name'], Fleets_Lib::target_link($fleet_row, ''), Format_Lib::pretty_number($fleet_row['fleet_resource_metal']), $this->_lang['Metal'], Format_Lib::pretty_number($fleet_row['fleet_resource_crystal']), $this->_lang['Crystal'], Format_Lib::pretty_number($fleet_row['fleet_resource_deuterium']), $this->_lang['Deuterium']); Functions_Lib::send_message($fleet_row['fleet_owner'], '', $fleet_row['fleet_end_time'], 1, $this->_lang['sys_mess_tower'], $this->_lang['sys_mess_fleetback'], $message); parent::restore_fleet($fleet_row); parent::remove_fleet($fleet_row['fleet_id']); } }
/** * Set Session Account * * ## Overview * * @uses SessionManager * @uses DebugManager * * @return array The current account associated with this session. * * @version 2015-07-05.1 * @since 0.5.1b * @author TronNet DevOps [Sean Murray] <*****@*****.**> */ public static function SetAccount($account, $persist = false) { DebugManager::Log("Setting Session Account", '@'); DebugManager::Log("Current: "); DebugManager::Log(self::$account); if ($account) { $match = AccountController::Get(array('ids' => $account['id'])); if (count($match)) { $account = $match; } } else { /** * Allowing to set 'null' to destroy session */ // throw new Exception("No account was provided! Can't set session account!"); } self::$account = $account; if ($persist) { $_SESSION['account'] = $account; } DebugManager::Log("New: "); DebugManager::Log(self::$account); return true; }
public static function Init($params) { DebugManager::Log("Got a logout request!", '@'); SessionManager::Destroy(); return new ResponseObject(); }
/** * attackMission * * @param array $fleet_row Fleet row * * @return void */ public function attackMission($fleet_row) { // null == use default handlers $errorHandler = null; $exceptionHandler = null; $target_planet = parent::$db->query_fetch("SELECT *\n FROM " . PLANETS . " AS p\n INNER JOIN " . BUILDINGS . " AS b ON b.building_planet_id = p.`planet_id`\n INNER JOIN " . SHIPS . " AS s ON s.ship_planet_id = p.`planet_id`\n INNER JOIN " . DEFENSES . " AS d ON d.defense_planet_id = p.`planet_id`\n WHERE `planet_galaxy` = " . (int) $fleet_row['fleet_end_galaxy'] . " AND\n `planet_system` = " . (int) $fleet_row['fleet_end_system'] . " AND\n `planet_type` = " . (int) $fleet_row['fleet_end_type'] . " AND\n `planet_planet` = " . (int) $fleet_row['fleet_end_planet'] . ";"); if ($fleet_row['fleet_mess'] == 0 && $fleet_row['fleet_start_time'] <= time()) { $base = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR; // require several stuff require $base . 'libraries' . DIRECTORY_SEPARATOR . 'battle_engine' . DIRECTORY_SEPARATOR . 'utils' . DIRECTORY_SEPARATOR . 'includer.php'; // require language implementation require $base . 'libraries' . DIRECTORY_SEPARATOR . 'missions' . DIRECTORY_SEPARATOR . 'attackLang.php'; // set language for the reports LangManager::getInstance()->setImplementation(new AttackLang($this->_lang)); if ($fleet_row['fleet_group'] > 0) { parent::$db->query("DELETE FROM `" . ACS_FLEETS . "`\n WHERE `acs_fleet_id` = '" . (int) $fleet_row['fleet_group'] . "'"); parent::$db->query("UPDATE `" . FLEETS . "` SET\n `fleet_mess` = '1'\n WHERE `fleet_group` = '" . $fleet_row['fleet_group'] . "'"); } else { parent::return_fleet($fleet_row['fleet_id']); } $targetUser = parent::$db->query_fetch("SELECT u.*,\n r.*,\n pr.*\n FROM " . USERS . " AS u\n INNER JOIN " . RESEARCH . " AS r ON r.research_user_id = u.user_id\n INNER JOIN " . PREMIUM . " AS pr ON pr.premium_user_id = u.user_id\n WHERE u.user_id = '" . intval($target_planet['planet_user_id']) . "';"); $target_userID = $targetUser['user_id']; UpdateResourcesLib::updateResource($targetUser, $target_planet, time()); //----------------------- prepare players for battle ---------------------- // attackers fleet sum $attackers = new PlayerGroup(); // If we have a ACS attack if ($fleet_row['fleet_group'] != 0) { $fleets = parent::$db->query_fetch("SELECT * FROM `" . FLEETS . "` WHERE `fleet_group` = '" . $fleet_row['fleet_group'] . "';"); $attackers = $this->getPlayerGroupFromQuery($fleets); } else { $attackers = $this->getPlayerGroup($fleet_row); } // defenders fleet sum $def = parent::$db->query("SELECT * FROM `" . FLEETS . "` \n WHERE `fleet_end_galaxy` = '" . $fleet_row['fleet_end_galaxy'] . "' AND \n `fleet_end_system` = '" . $fleet_row['fleet_end_system'] . "' AND \n `fleet_end_type` = '" . $fleet_row['fleet_end_type'] . "' AND \n `fleet_end_planet` = '" . $fleet_row['fleet_end_planet'] . "' AND\n `fleet_start_time` < '" . time() . "' AND \n `fleet_end_stay` >= '" . time() . "';"); $defenders = $this->getPlayerGroupFromQuery($def, $targetUser); //defenses sum $homeFleet = new HomeFleet(0); for ($i = self::DEFENSE_MIN_ID; $i < self::DEFENSE_MAX_ID; $i++) { if (isset($this->_resource[$i]) && isset($target_planet[$this->_resource[$i]])) { if ($target_planet[$this->_resource[$i]] != 0) { $homeFleet->addShipType($this->getShipType($i, $target_planet[$this->_resource[$i]])); } } } for ($i = self::SHIP_MIN_ID; $i < self::SHIP_MAX_ID; $i++) { if (isset($this->_resource[$i]) && isset($target_planet[$this->_resource[$i]])) { if ($target_planet[$this->_resource[$i]] != 0) { $homeFleet->addShipType($this->getShipType($i, $target_planet[$this->_resource[$i]])); } } } if (!$defenders->existPlayer($target_userID)) { $player = new Player($target_userID, array($homeFleet)); $player->setTech($targetUser['research_weapons_technology'], $targetUser['research_shielding_technology'], $targetUser['research_armour_technology']); $player->setName($targetUser['user_name']); $defenders->addPlayer($player); } else { $defenders->getPlayer($target_userID)->addDefense($homeFleet); } //------------------------------------------------------------------------- //------------------------------ battle ----------------------------------- $battle = new Battle($attackers, $defenders); $startBattle = DebugManager::runDebugged(array($battle, 'startBattle'), $errorHandler, $exceptionHandler); $startBattle(); //------------------------------------------------------------------------- //-------------------------- after battle stuff --------------------------- $report = $battle->getReport(); $steal = $this->updateAttackers($report->getPresentationAttackersFleetOnRound('START'), $report->getAfterBattleAttackers(), $target_planet); $report->setSteal($steal); $this->updateDefenders($report->getPresentationDefendersFleetOnRound('START'), $report->getAfterBattleDefenders(), $target_planet, $steal); $this->updateDebris($fleet_row, $report); $this->updateMoon($fleet_row, $report, '', $target_userID, $target_planet); $this->sendMessage($fleet_row, $report); } elseif ($fleet_row['fleet_end_time'] <= time()) { $message = sprintf($this->_lang['sys_fleet_won'], $target_planet['planet_name'], Fleets_Lib::target_link($fleet_row, ''), Format_Lib::pretty_number($fleet_row['fleet_resource_metal']), $this->_lang['Metal'], Format_Lib::pretty_number($fleet_row['fleet_resource_crystal']), $this->_lang['Crystal'], Format_Lib::pretty_number($fleet_row['fleet_resource_deuterium']), $this->_lang['Deuterium']); Functions_Lib::send_message($fleet_row['fleet_owner'], '', $fleet_row['fleet_end_time'], 1, $this->_lang['sys_mess_tower'], $this->_lang['sys_mess_fleetback'], $message); parent::restore_fleet($fleet_row); parent::remove_fleet($fleet_row['fleet_id']); } }
/** * calculateAttack() * Calculate the battle using OPBE. * * OPBE ,to decrease memory usage, don't save both the initial and end state of fleets in a single round: only the end state is saved. * Then OPBE store the first round in BattleReport and don't start it, just to show the fleets before the battle. * Also,cause OPBE start the rounds without saving the initial state, the informations about how many shots were fired etc must be asked to the next round. * Logically, the last round can't ask the next round because there is not. * * @param array &$attackers * @param array &$defenders * @param mixed $FleetTF * @param mixed $DefTF * @return array */ function calculateAttack(&$attackers, &$defenders, $FleetTF, $DefTF) { //null == use default handlers $errorHandler = null; $exceptionHandler = null; $CombatCaps = $GLOBALS['CombatCaps']; $pricelist = $GLOBALS['pricelist']; /********** BUILDINGS MODELS **********/ /** Note: we are transform array of data like * fleetID => infos * into object tree structure like * playerGroup -> player -> fleet -> shipType */ //attackers $attackerGroupObj = new PlayerGroup(); foreach ($attackers as $fleetID => $attacker) { $player = $attacker['player']; //techs + bonus. Note that the bonus is divided by the factor because the result sum will be multiplied by the same inside OPBE list($attTech, $defenceTech, $shieldTech) = getTechsFromArray($player); //-- $attackerPlayerObj = $attackerGroupObj->createPlayerIfNotExist($player['id'], array(), $attTech, $shieldTech, $defenceTech); $attackerFleetObj = new Fleet($fleetID); foreach ($attacker['unit'] as $element => $amount) { if (empty($amount)) { continue; } $shipType = getShipType($element, $amount); $attackerFleetObj->addShipType($shipType); } $attackerPlayerObj->addFleet($attackerFleetObj); } //defenders $defenderGroupObj = new PlayerGroup(); foreach ($defenders as $fleetID => $defender) { $player = $defender['player']; //techs + bonus. Note that the bonus is divided by the factor because the result sum will be multiplied by the same inside OPBE list($attTech, $defenceTech, $shieldTech) = getTechsFromArray($player); //-- $defenderPlayerObj = $defenderGroupObj->createPlayerIfNotExist($player['id'], array(), $attTech, $shieldTech, $defenceTech); $defenderFleetObj = getFleet($fleetID); foreach ($defender['unit'] as $element => $amount) { if (empty($amount)) { continue; } $shipType = getShipType($element, $amount); $defenderFleetObj->addShipType($shipType); } $defenderPlayerObj->addFleet($defenderFleetObj); } /********** BATTLE ELABORATION **********/ $opbe = new Battle($attackerGroupObj, $defenderGroupObj); $startBattle = DebugManager::runDebugged(array($opbe, 'startBattle'), $errorHandler, $exceptionHandler); $startBattle(); $report = $opbe->getReport(); /********** WHO WON **********/ if ($report->defenderHasWin()) { $won = DEFENDERS_WON; } elseif ($report->attackerHasWin()) { $won = ATTACKERS_WON; } elseif ($report->isAdraw()) { $won = DRAW; } else { throw new Exception('problem'); } /********** ROUNDS INFOS **********/ $ROUND = array(); $lastRound = $report->getLastRoundNumber(); for ($i = 0; $i <= $lastRound; $i++) { // in case of last round, ask for rebuilt defenses. to change rebuils prob see constants/battle_constants.php $attackerGroupObj = $lastRound == $i ? $report->getAfterBattleAttackers() : $report->getResultAttackersFleetOnRound($i); $defenderGroupObj = $lastRound == $i ? $report->getAfterBattleDefenders() : $report->getResultDefendersFleetOnRound($i); $attInfo = updatePlayers($attackerGroupObj, $attackers); $defInfo = updatePlayers($defenderGroupObj, $defenders); $ROUND[$i] = roundInfo($report, $attackers, $defenders, $attackerGroupObj, $defenderGroupObj, $i + 1, $attInfo, $defInfo); } /********** DEBRIS **********/ //attackers $debAtt = $report->getAttackerDebris(); $debAttMet = $debAtt[0]; $debAttCry = $debAtt[1]; //defenders $debDef = $report->getDefenderDebris(); $debDefMet = $debDef[0]; $debDefCry = $debDef[1]; //total $debris = array('attacker' => array(METAL_ID => $debAttMet, CRYSTAL_ID => $debAttCry), 'defender' => array(METAL_ID => $debDefMet, CRYSTAL_ID => $debDefCry)); /********** LOST UNITS **********/ $totalLost = array('attacker' => $report->getTotalAttackersLostUnits(), 'defender' => $report->getTotalDefendersLostUnits()); /********** RETURNS **********/ return array('won' => $won, 'debris' => $debris, 'rw' => $ROUND, 'unitLost' => $totalLost); }
/** * Log Message * * ## Overview * * @uses DebugManager * * @param mixed $message Either a string or an object to be logged. * @return true Always unless fatal error or exception is thrown. * * @version 2015-07-05.1 * @since 0.5.1b * @author TronNet DevOps [Sean Murray] <*****@*****.**> */ public static function CreateRecord($message, $sep = false, $level = null) { $classes = array(); if (!$level) { $level = self::SYSTEM_LEVEL; } $trace = debug_backtrace(); $function = $trace[1]['function']; $line = $trace[1]['line']; if (count($trace) >= 3) { foreach ($trace as $depth => $cb) { if ($depth >= 2) { $classes[] = $cb['class']; if ($depth == 2) { $function = $cb['function']; $line = $cb['line']; } } } } else { $classes = array('Main'); } $class = implode('/', array_reverse($classes)); $preamble = '[:' . $line . ' @ ' . $class . '::' . $function . ']'; if (self::$active && $level <= self::$level) { if ($class == 'Main') { self::$_log[] = array('preamble' => $preamble, 'message' => '', 'open' => true); } if (is_string($message)) { self::$_log[] = array('preamble' => $preamble, 'message' => $message, 'sep' => $sep); } else { self::$_log[] = array('preamble' => $preamble, 'message' => var_export($message, true), 'sep' => $sep); } } if (self::$logFile) { $content = ''; /** * @todo will this cause a racecondition...? */ foreach (self::$_log as $entry) { if (isset($entry['open']) && $entry['open']) { $content .= PHP_EOL . PHP_EOL . PHP_EOL . PHP_EOL . PHP_EOL . PHP_EOL . PHP_EOL; } if (isset($entry['sep']) && $entry['sep']) { $content .= PHP_EOL . PHP_EOL . str_repeat($entry['sep'], 80) . PHP_EOL; } $content .= $entry['preamble'] . ' ' . $entry['message'] . PHP_EOL; } if (!empty($content)) { file_put_contents(self::$logFile, $content, FILE_APPEND | LOCK_EX); } self::$_log = array(); } return true; }