create_error('You can\'t dump more than you have.');
}
$sector =& $player->getSector();
if ($sector->offersFederalProtection()) {
    create_error('You can\'t dump cargo in a Federal Sector!');
}
require_once 'shop_goods.inc';
// get the distance
$x = Globals::getGood($good_id);
$x['TransactionType'] = 'Sell';
$good_distance = Plotter::findDistanceToX($x, $sector, true);
if (is_object($good_distance)) {
    $good_distance = $good_distance->getRelativeDistance();
}
$good_distance = max(1, $good_distance);
$lost_xp = round(SmrPort::getBaseExperience($amount, $good_distance));
$player->decreaseExperience($lost_xp);
$player->increaseHOF($lost_xp, array('Trade', 'Experience', 'Jettisoned'), HOF_PUBLIC);
// take turn
$player->takeTurns(1, 1);
$ship->decreaseCargo($good_id, $amount);
$player->increaseHOF($amount, array('Trade', 'Goods', 'Jettisoned'), HOF_PUBLIC);
// log action
$account->log(LOG_TYPE_TRADING, 'Dumps ' . $amount . ' of ' . $good_name . ' and looses ' . $lost_xp . ' experience', $player->getSectorID());
$container = array();
$container['url'] = 'skeleton.php';
if ($amount > 1) {
    $container['msg'] = 'You have jettisoned <span class="yellow">' . $amount . '</span> units of ' . $good_name . ' and have lost <span class="exp">' . $lost_xp . '</span> experience.';
} else {
    $container['msg'] = 'You have jettisoned <span class="yellow">' . $amount . '</span> unit of ' . $good_name . ' and have lost <span class="exp">' . $lost_xp . '</span> experience.';
}
<?php

require_once get_file_loc('SmrPort.class.inc');
$sector =& $player->getSector();
if ($var['func'] == 'Map') {
    $account_id = $player->getAccountID();
    $game_id = $player->getGameID();
    // delete all entries from the player_visited_sector/port table
    $db->query('DELETE FROM player_visited_sector WHERE account_id = ' . $db->escapeNumber($account_id) . ' AND game_id = ' . $db->escapeNumber($game_id));
    // add port infos
    $db->query('SELECT sector_id FROM port WHERE game_id = ' . $db->escapeNumber($game_id) . ' ORDER BY sector_id');
    while ($db->nextRecord()) {
        SmrPort::getPort($game_id, $db->getField('sector_id'))->addCachePort($account_id);
    }
} elseif ($var['func'] == 'Money') {
    $player->setCredits(50000000);
} elseif ($var['func'] == 'PageNewb') {
    if (!defined('ACCOUNT_ID_PAGE')) {
        create_error('You\'re so mean! Go pick on someone else!');
    }
    $page =& SmrPlayer::getPlayer(ACCOUNT_ID_PAGE, $player->getGameID());
    $page->setNewbieTurns(0);
} elseif ($var['func'] == 'Ship' && $_REQUEST['ship_id'] <= 75 && $_REQUEST['ship_id'] != 68) {
    $ship_id = (int) $_REQUEST['ship_id'];
    $speed = $ship->getSpeed();
    // assign the new ship
    $ship->decloak();
    $ship->disableIllusion();
    $ship->setShipTypeID($ship_id);
    //now adapt turns
    $player->setTurns($player->getTurns() * ($speed / $ship->getSpeed()));
Example #3
0
<?php

require_once '../htdocs/config.inc';
require_once LIB . 'Default/SmrMySqlDatabase.class.inc';
require_once LIB . 'Default/Globals.class.inc';
require_once LIB . 'Default/SmrPort.class.inc';
$db = new SmrMySqlDatabase();
$db->query('SELECT account_id,sector_id,game_id FROM player_visited_port');
while ($db->nextRecord()) {
    SmrPort::getCachedPort($db->getInt('game_id'), $db->getInt('sector_id'), $db->getInt('account_id'))->addCachePort($db->getInt('account_id'));
    SmrPort::clearCache();
}
Example #4
0
    $db->query('SELECT * FROM player_visited_sector WHERE sector_id >= ' . $db->escapeNumber($low) . ' AND sector_id <= ' . $db->escapeNumber($high) . ' AND account_id = ' . $db->escapeNumber($player->getAccountID()) . ' AND game_id = ' . $db->escapeNumber($player->getGameID()) . ' LIMIT 1');
    if (!$db->nextRecord()) {
        create_error('You already have maps of this galaxy!');
    }
    $player->increaseHOF(1, array('Bar', 'Maps Bought'), HOF_PUBLIC);
    //take money
    $account->decreaseTotalSmrCredits(CREDITS_PER_GAL_MAP);
    //now give maps
    // delete all entries from the player_visited_sector/port table
    $db->query('DELETE FROM player_visited_sector WHERE sector_id >= ' . $db->escapeNumber($low) . ' AND sector_id <= ' . $db->escapeNumber($high) . ' AND account_id = ' . $db->escapeNumber($player->getAccountID()) . ' AND game_id = ' . $db->escapeNumber($player->getGameID()));
    //start section
    require_once get_file_loc('SmrPort.class.inc');
    // add port infos
    $db->query('SELECT sector_id FROM port WHERE game_id = ' . $db->escapeNumber($player->getGameID()) . ' AND sector_id <= ' . $db->escapeNumber($high) . ' AND sector_id >= ' . $db->escapeNumber($low) . ' ORDER BY sector_id');
    while ($db->nextRecord()) {
        SmrPort::getPort($player->getGameID(), $db->getField('sector_id'))->addCachePort($player->getAccountID());
    }
    $container = create_container('skeleton.php', 'bar_main.php');
    $container['script'] = 'bar_opening.php';
    $container['message'] = '<div align="center">Galaxy Info has been added.  Enjoy!</div><br />';
    forward($container);
} else {
    //find what gal they want
    $container = array();
    $container['url'] = 'skeleton.php';
    $container['body'] = 'bar_main.php';
    $container['script'] = 'bar_galmap_buy.php';
    $container['process'] = true;
    $PHP_OUTPUT .= '<div align="center">What galaxy do you want info on?<br />';
    $PHP_OUTPUT .= create_echo_form($container);
    $PHP_OUTPUT .= '<select type="select" name="gal_id">';
// end here if we are alone in the alliance
if (empty($alliance_ids)) {
    create_error('Who exactly are you sharing maps with?');
}
$unvisitedSectors = array(0);
// get the sectors the user hasn't visited yet
$db->query('SELECT sector_id
			FROM player_visited_sector
			WHERE game_id = ' . $db->escapeNumber($player->getGameID()) . '
				AND account_id = ' . $db->escapeNumber($player->getAccountID()));
while ($db->nextRecord()) {
    $unvisitedSectors[] = $db->getInt('sector_id');
}
// delete all visited sectors from the table of all our alliance mates
$db->query('DELETE
			FROM player_visited_sector
			WHERE account_id IN (' . $db->escapeArray($alliance_ids) . ')
				AND game_id = ' . $db->escapeNumber($player->getGameID()) . '
				AND sector_id NOT IN (' . $db->escapeArray($unvisitedSectors) . ')');
// free some memory
unset($unvisitedSectors);
// get a list of all visited ports
$db->query('SELECT sector_id
			FROM player_visited_port
			WHERE account_id = ' . $db->escapeNumber($player->getAccountID()) . '
				AND game_id = ' . $db->escapeNumber($player->getGameID()));
while ($db->nextRecord()) {
    $cachedPort =& SmrPort::getCachedPort($player->getGameID(), $db->getInt('sector_id'), $player->getAccountID());
    $cachedPort->addCachePorts($alliance_ids);
}
forward(create_container('skeleton.php', 'alliance_roster.php'));
Example #6
0
function &findRoutes(&$player)
{
    debug('Finding Routes');
    $galaxies =& SmrGalaxy::getGameGalaxies($player->getGameID());
    $tradeGoods = array(GOOD_NOTHING => false);
    $goods =& Globals::getGoods();
    foreach ($goods as $goodID => &$good) {
        if ($player->meetsAlignmentRestriction($good['AlignRestriction'])) {
            $tradeGoods[$goodID] = true;
        } else {
            $tradeGoods[$goodID] = false;
        }
    }
    unset($good);
    $tradeRaces = array();
    $races =& Globals::getRaces();
    foreach ($races as $raceID => &$race) {
        $tradeRaces[$raceID] = false;
    }
    unset($race);
    $tradeRaces[$player->getRaceID()] = true;
    $galaxy =& $player->getSector()->getGalaxy();
    $maxNumberOfPorts = 2;
    $routesForPort = -1;
    $numberOfRoutes = 1000;
    $maxDistance = 15;
    $startSectorID = $galaxy->getStartSector();
    $endSectorID = $galaxy->getEndSector();
    $db = new SmrMySqlDatabase();
    $db->query('SELECT routes FROM route_cache WHERE game_id=' . $db->escapeNumber($player->getGameID()) . ' AND max_ports=' . $db->escapeNumber($maxNumberOfPorts) . ' AND goods_allowed=' . $db->escapeObject($tradeGoods) . ' AND races_allowed=' . $db->escapeObject($tradeRaces) . ' AND start_sector_id=' . $db->escapeNumber($startSectorID) . ' AND end_sector_id=' . $db->escapeNumber($endSectorID) . ' AND routes_for_port=' . $db->escapeNumber($routesForPort) . ' AND max_distance=' . $db->escapeNumber($maxDistance));
    if ($db->nextRecord()) {
        $routes = unserialize(gzuncompress($db->getField('routes')));
        debug('Using Cached Routes: #' . count($routes));
        return $routes;
    } else {
        debug('Generating Routes');
        $allSectors = array();
        foreach ($galaxies as &$galaxy) {
            $allSectors += $galaxy->getSectors();
            //Merge arrays
        }
        unset($galaxy);
        $distances =& Plotter::calculatePortToPortDistances($allSectors, $maxDistance, $startSectorID, $endSectorID);
        if ($maxNumberOfPorts == 1) {
            $allRoutes = RouteGenerator::generateOneWayRoutes($allSectors, $distances, $tradeGoods, $tradeRaces, $routesForPort);
        } else {
            $allRoutes = RouteGenerator::generateMultiPortRoutes($maxNumberOfPorts, $allSectors, $tradeGoods, $tradeRaces, $distances, $routesForPort, $numberOfRoutes);
        }
        unset($distances);
        $allRoutes =& $allRoutes[RouteGenerator::EXP_ROUTE];
        $routesMerged = array();
        foreach ($allRoutes as $multi => &$routesByMulti) {
            $routesMerged += $routesByMulti;
            //Merge arrays
        }
        unset($routesByMulti);
        unset($allSectors);
        SmrPort::clearCache();
        SmrSector::clearCache();
        $db->query('INSERT INTO route_cache ' . '(game_id, max_ports, goods_allowed, races_allowed, start_sector_id, end_sector_id, routes_for_port, max_distance, routes)' . ' VALUES (' . $db->escapeNumber($player->getGameID()) . ', ' . $db->escapeNumber($maxNumberOfPorts) . ', ' . $db->escapeObject($tradeGoods) . ', ' . $db->escapeObject($tradeRaces) . ', ' . $db->escapeNumber($startSectorID) . ', ' . $db->escapeNumber($endSectorID) . ', ' . $db->escapeNumber($routesForPort) . ', ' . $db->escapeNumber($maxDistance) . ', ' . $db->escapeObject($routesMerged, true) . ')');
        debug('Found Routes: #' . count($routesMerged));
        return $routesMerged;
    }
}
    SmrSession::updateVar('offered_price', $port->getOfferPrice($ideal_price, $relations, $portGood['TransactionType']));
}
$offered_price = $var['offered_price'];
// nothing should happen here but just to avoid / by 0
if ($ideal_price == 0 || $offered_price == 0) {
    create_error('Port calculation error...buy more goods.');
}
// can we accept the current price?
if (!empty($bargain_price) && ($portGood['TransactionType'] == 'Buy' && $bargain_price >= $ideal_price || $portGood['TransactionType'] == 'Sell' && $bargain_price <= $ideal_price)) {
    // the url we going to
    $container = create_container('skeleton.php');
    transfer('ideal_price');
    transfer('offered_price');
    // base xp is the amount you would get for a perfect trade.
    // this is the absolut max. the real xp can only be smaller.
    $base_xp = SmrPort::getBaseExperience($amount, $port->getGoodDistance($good_id));
    // if offered equals ideal we get a problem (division by zero)
    $gained_exp = round($port->calculateExperiencePercent($ideal_price, $offered_price, $bargain_price, $portGood['TransactionType']) * $base_xp);
    //will use these variables in current sector and port after successful trade
    $container['traded_xp'] = $gained_exp;
    $container['traded_amount'] = $amount;
    $container['traded_good'] = $good_name;
    $container['traded_credits'] = $bargain_price;
    if ($portGood['TransactionType'] == 'Buy') {
        $container['traded_transaction'] = 'bought';
        $ship->increaseCargo($good_id, $amount);
        $player->decreaseCredits($bargain_price);
        $player->increaseHOF($amount, array('Trade', 'Goods', 'Bought'), HOF_PUBLIC);
        $player->increaseHOF($gained_exp, array('Trade', 'Experience', 'Buying'), HOF_PUBLIC);
        $player->decreaseHOF($bargain_price, array('Trade', 'Money', 'Profit'), HOF_PUBLIC);
        $player->increaseHOF($bargain_price, array('Trade', 'Money', 'Buying'), HOF_PUBLIC);
         //check if this sector is valid, if not then get a new one
         while ($galSector->hasPort() || $galSector->offersFederalProtection()) {
             $galSector =& $galSectors[array_rand($galSectors)];
         }
         $raceID = array_rand($numRacePorts);
         $numRacePorts[$raceID]--;
         if ($numRacePorts[$raceID] == 0) {
             unset($numRacePorts[$raceID]);
         }
         $port =& $galSector->createPort();
         $port->setRaceID($raceID);
         $port->upgradeToLevel($i);
         $port->setCreditsToDefault();
     }
 }
 SmrPort::savePorts();
 $var['message'] = '<span class="green">Success</span> : Succesfully added ports.';
 //		//iterate through levels 1-20 for mines
 //		for ($i=1;$i<=20;$i++) {
 //			//iterate once for each port of this level
 //			for ($j=1;$j<=$_POST['mine' . $i];$j++) {
 //				//get a sector for this mine
 //				$sector = mt_rand($start, $end);
 //				//check if this sector is valid, if not then get a new one
 //				while ((is_array($loc_info[$sector]) && in_array($FED_BEACON,$loc_info[$sector])) || isset($updateMine[$sector])) $sector = mt_rand($start, $end);
 //				if (mt_rand(1,2) == 1) $type = 'Asteroid';
 //				else $type = 'Colony';
 //				$amount = 26700 * (mt_rand(5,11) / 10) / (pow($i,0.69) / 1.5);
 //				//add to the array
 //				$updateMine[$sector] = array('Level' => $i, 'Type' => $type, 'Amount' => $amount);
 //			}
// fire shots
if (DEBUG) {
    $PHP_OUTPUT .= 'Pre Shots<br>';
}
portFires($fleet, $port, $players);
fleetFires($fleet, $port, $players, $weapons);
//get results in a way we want them
$results = processResults($players, $port, $fleet, $weapons);
//post on alliances MB or send to player
portDowngrade($results, $port);
sendReport($results, $port);
//log player
doLog($results);
//insert into combat logs
$finalResults = $results[0] . '<br /><img src="images/portAttack.jpg" width="480px" height="330px" alt="Port Attack" title="Port Attack"><br />' . $results[1];
$db->query('INSERT INTO combat_logs VALUES(\'\',' . SmrSession::$game_id . ',\'PORT\',' . $player->getSectorID() . ',' . TIME . ',' . SmrSession::$account_id . ',' . $player->getAllianceID() . ',0,0,' . $db->escapeBinary(gzcompress($finalResults)) . ', \'FALSE\')');
if (DEBUG) {
    $PHP_OUTPUT .= 'Pre Forward/Display<br>';
}
$container = array();
$container['url'] = 'skeleton.php';
$container['body'] = 'port_attack.php';
$container['results'] = $results;
if ($players[$player->getAccountID()][KILLER]) {
    $container['override_death'] = TRUE;
}
$container['continue'] = checkContinue($players, $port);
SmrPlayer::refreshCache();
SmrShip::refreshCache();
SmrPort::refreshCache();
forward($container);