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);
     }
 }
示例#9
0
 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;
 }
示例#13
0
                $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);
示例#14
0
 * 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();
示例#15
0
 /**
  * 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);
 }
示例#17
0
 /**
  * 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();
 }
示例#20
0
 /**
  * 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']);
     }
 }
示例#21
0
/**
 * 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;
 }