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()));
<?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(); }
$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'));
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);