コード例 #1
0
ファイル: Player.php プロジェクト: thekabal/tki
 public static function handleAuth(\PDO $pdo_db, string $lang, array $langvars, Reg $tkireg, Smarty $template)
 {
     $request = Request::createFromGlobals();
     $flag = true;
     $error_status = null;
     $playerinfo = array();
     if (array_key_exists('username', $_SESSION) === false) {
         $_SESSION['username'] = null;
     }
     if (array_key_exists('password', $_SESSION) === false) {
         $_SESSION['password'] = null;
     }
     if ($_SESSION['username'] !== null && $_SESSION['password'] !== null) {
         $sql = "SELECT ip_address, password, last_login, ship_id, ship_destroyed, dev_escapepod FROM ::prefix::ships WHERE email=:email LIMIT 1";
         $stmt = $pdo_db->prepare($sql);
         $stmt->bindParam(':email', $_SESSION['username']);
         $stmt->execute();
         $playerinfo = $stmt->fetch();
         if ($playerinfo !== false) {
             // Check the password against the stored hashed password
             // Check the cookie to see if username/password are empty - check password against database
             if (password_verify($_SESSION['password'], $playerinfo['password'])) {
                 $stamp = date('Y-m-d H:i:s');
                 $timestamp = array();
                 $timestamp['now'] = (int) strtotime($stamp);
                 $timestamp['last'] = (int) strtotime($playerinfo['last_login']);
                 // Update the players last_login every 60 seconds to cut back SQL Queries.
                 if ($timestamp['now'] >= $timestamp['last'] + 60) {
                     $remote_ip = $request->server->get('REMOTE_ADDR');
                     $sql = "UPDATE ::prefix::ships SET last_login = :last_login, ip_address = :ip_address WHERE ship_id=:ship_id";
                     $stmt = $pdo_db->prepare($sql);
                     $stmt->bindParam(':last_login', $stamp);
                     $stmt->bindParam(':ip_address', $remote_ip);
                     $stmt->bindParam(':ship_id', $playerinfo['ship_id']);
                     $stmt->execute();
                     Db::logDbErrors($pdo_db, $sql, __LINE__, __FILE__);
                     // Reset the last activity time on the session so that the session renews - this is the
                     // replacement for the (now removed) update_cookie function.
                     $_SESSION['last_activity'] = $timestamp['now'];
                 }
                 $flag = false;
             }
         }
     }
     if ($flag) {
         $error_status .= str_replace('[here]', "<a href='index.php'>" . $langvars['l_here'] . '</a>', $langvars['l_global_needlogin']);
         $title = $langvars['l_error'];
         Header::display($pdo_db, $lang, $template, $title);
         echo $error_status;
         Footer::display($pdo_db, $lang, $tkireg, $template);
         die;
     } else {
         return $playerinfo;
     }
 }
コード例 #2
0
ファイル: CheckBan.php プロジェクト: thekabal/tki
 public static function isBanned(\PDO $pdo_db, array $playerinfo)
 {
     $request = Request::createFromGlobals();
     // Check for IP Ban
     $sql = "SELECT * FROM ::prefix::bans WHERE (ban_type = :ban_type AND ban_mask = :ban_mask1) OR (ban_mask = :ban_mask2)";
     $stmt = $pdo_db->prepare($sql);
     $stmt->bindValue(':ban_type', IP_BAN);
     $stmt->bindParam(':ban_mask1', $playerinfo['ip_address']);
     $stmt->bindParam(':ban_mask2', $playerinfo['ip_address']);
     $stmt->execute();
     $ipban_count = $stmt->rowCount();
     $ipbans_res = $stmt->fetch();
     Db::logDbErrors($pdo_db, $sql, __LINE__, __FILE__);
     if ($ipban_count > 0) {
         // Ok, we have a ban record matching the players current IP Address, so return the BanType.
         return (array) $ipbans_res->fields;
     }
     // Check for ID Watch, Ban, Lock, 24H Ban etc linked to the platyers ShipID.
     $sql = "SELECT * FROM ::prefix::bans WHERE ban_ship = :ban_ship";
     $stmt = $pdo_db->prepare($sql);
     $stmt->bindParam(':ban_ship', $playerinfo['ship_id']);
     $stmt->execute();
     $idban_count = $stmt->rowCount();
     $idbans_res = $stmt->fetch();
     Db::logDbErrors($pdo_db, $sql, __LINE__, __FILE__);
     if ($idban_count > 0) {
         // Now return the highest ban type (i.e. worst type of ban)
         $ban_type = array('ban_type' => 0);
         while (!$idbans_res->EOF) {
             if ($idbans_res->fields['ban_type'] > $ban_type['ban_type']) {
                 $ban_type = $idbans_res->fields;
             }
             $idbans_res->MoveNext();
         }
         return (array) $ban_type;
     }
     // Check for Multi Ban (IP, ID)
     $remote_ip = $request->server->get('REMOTE_ADDR');
     $sql = "SELECT * FROM ::prefix::bans WHERE ban_type = :ban_type AND (ban_mask = :ban_mask1 OR ban_mask = :ban_mask2 OR ban_ship = :ban_ship)";
     $stmt = $pdo_db->prepare($sql);
     $stmt->bindValue(':ban_type', MULTI_BAN);
     $stmt->bindParam(':ban_mask1', $playerinfo['ip_address']);
     $stmt->bindParam(':ban_mask2', $remote_ip);
     $stmt->bindParam(':ban_ship', $playerinfo['ship_id']);
     $stmt->execute();
     $multiban_count = $stmt->rowCount();
     $multiban_res = $stmt->fetch();
     Db::logDbErrors($pdo_db, $sql, __LINE__, __FILE__);
     if ($multiban_count > 0) {
         // Ok, we have a ban record matching the players current IP Address or their ShipID, so return the BanType.
         return (array) $multiban_res->fields;
     }
     // Well we got here, so we haven't found anything, so we return a Bool false.
     return (bool) false;
 }
コード例 #3
0
ファイル: PlayersGateway.php プロジェクト: thekabal/tki
 public function selectPlayerInfo(string $email)
 {
     $sql = "SELECT * FROM ::prefix::ships WHERE email = :email";
     $stmt = $this->pdo_db->prepare($sql);
     $stmt->bindParam(':email', $email);
     $stmt->execute();
     \Tki\Db::logDbErrors($this->pdo_db, $sql, __LINE__, __FILE__);
     // Log any errors, if there are any
     // A little magic here. If it couldn't select a user, the following call will return false - which is what we want for "no user found".
     $playerinfo = $stmt->fetch(\PDO::FETCH_ASSOC);
     return $playerinfo;
     // FUTURE: Eventually we want this to return a player object instead, for now, playerinfo array or false for no user found.
 }
コード例 #4
0
ファイル: NewsGateway.php プロジェクト: thekabal/tki
 public function selectNewsByDay(string $day)
 {
     // SQL call that selects all of the news items between the start date beginning of day, and the end of day.
     $sql = "SELECT * FROM ::prefix::news WHERE date > :start AND date < :end ORDER BY news_id";
     $stmt = $this->pdo_db->prepare($sql);
     $stmt->bindValue(':start', $day . ' 00:00:00');
     $stmt->bindValue(':end', $day . ' 23:59:59');
     $stmt->execute();
     \Tki\Db::logDbErrors($this->pdo_db, $sql, __LINE__, __FILE__);
     // Log errors, if there are any
     $return_value = $stmt->fetchAll(\PDO::FETCH_ASSOC);
     return $return_value;
 }
コード例 #5
0
ファイル: AdminLog.php プロジェクト: thekabal/tki
 public static function writeLog(\PDO $pdo_db, int $log_type, string $data = null)
 {
     $result = false;
     $query = "INSERT INTO ::prefix::logs VALUES (NULL, 0, :logtype, NOW(), :data)";
     $prep = $pdo_db->prepare($query);
     if ($prep !== false) {
         // so we should not attempt to write (or it will fail silently)
         $prep->bindParam(':logtype', $log_type, PDO::PARAM_STR);
         $prep->bindParam(':data', $data, PDO::PARAM_STR);
         $prep->execute();
         Db::logDbErrors($pdo_db, $query, __LINE__, __FILE__);
     } else {
         $result = false;
     }
     return $result;
 }
コード例 #6
0
ファイル: Loan.php プロジェクト: thekabal/tki
 public static function isPending(\PDO $pdo_db, int $ship_id, Reg $tkireg)
 {
     $sql = "SELECT loan, UNIX_TIMESTAMP(loantime) AS time FROM ::prefix::ibank_accounts WHERE ship_id = :ship_id";
     $stmt = $pdo_db->prepare($sql);
     $stmt->bindParam(':ship_id', $ship_id);
     $stmt->execute();
     \Tki\Db::logDbErrors($pdo_db, $sql, __LINE__, __FILE__);
     $account = $stmt->fetch(\PDO::FETCH_ASSOC);
     if ($account['loan'] > 0) {
         $curtime = time();
         $difftime = ($curtime - $account['time']) / 60;
         if ($difftime > $tkireg->ibank_lrate) {
             return true;
         }
     } else {
         return false;
     }
 }
コード例 #7
0
ファイル: SchedulerGateway.php プロジェクト: thekabal/tki
 public function selectSchedulerLastRun()
 {
     // It is possible to have this call run before the game is setup, so we need to test to ensure the db is active
     if (\Tki\Db::isActive($this->pdo_db)) {
         // SQL call that selects the last run of the scheduler, and only one record
         $sql = "SELECT last_run FROM ::prefix::scheduler LIMIT 1";
         $stmt = $this->pdo_db->query($sql);
         // Query the pdo DB using this SQL call
         $row = $stmt->fetchObject();
         \Tki\Db::logDbErrors($this->pdo_db, $sql, __LINE__, __FILE__);
         // Log any errors, if there are any
         if (is_object($row)) {
             return (int) $row->last_run;
             // Return the int value of the last scheduler run
         }
     }
     return false;
     // If anything goes wrong, db not active, etc, return false
 }
コード例 #8
0
ファイル: Translate.php プロジェクト: thekabal/tki
 public static function load(\PDO $pdo_db, string $language = null, array $categories = null) : array
 {
     // Check if all supplied args are valid, if not return an empty array.
     if ($pdo_db === null || $language === null || !is_array($categories)) {
         return self::$langvars;
     }
     if (!Db::isActive($pdo_db)) {
         // Slurp in language variables from the ini file directly
         $ini_file = './languages/' . $language . '.ini';
         $ini_keys = parse_ini_file($ini_file, true);
         foreach ($ini_keys as $config_line) {
             foreach ($config_line as $config_key => $config_value) {
                 self::$langvars[$config_key] = $config_value;
             }
         }
         return (array) self::$langvars;
     } else {
         // Populate the $langvars array
         foreach ($categories as $category) {
             // Select from the database and return the value of the language variables requested, but do not use caching
             $query = "SELECT name, value FROM ::prefix::languages WHERE category = :category AND section = :language;";
             $result = $pdo_db->prepare($query);
             Db::logDbErrors($pdo_db, $query, __LINE__, __FILE__);
             // It is possible to use a single prepare, and multiple executes, but it makes the logic of this section much less clear.
             $result->bindParam(':category', $category, PDO::PARAM_STR);
             $result->bindParam(':language', $language, PDO::PARAM_STR);
             $result->execute();
             Db::logDbErrors($pdo_db, $query, __LINE__, __FILE__);
             $lang_entries = $result->fetchAll();
             foreach ($lang_entries as $row) {
                 self::$langvars[$row['name']] = $row['value'];
             }
         }
         return (array) self::$langvars;
     }
 }
コード例 #9
0
ファイル: PlanetProduction.php プロジェクト: thekabal/tki
 public static function productionChange(\PDO $pdo_db, \ADODB_mysqli $db, array $langvars, array $prodpercentarray, Reg $tkireg)
 {
     //  Declare default production values from the config.php file
     //
     //  We need to track what the player_id is and what team they belong to if they belong to a team,
     //    these two values are not passed in as arrays
     //    ship_id = the owner of the planet          ($ship_id = $prodpercentarray['ship_id'])
     //    team_id = the team creators ship_id ($team_id = $prodpercentarray['team_id'])
     //
     //  First we generate a list of values based on the commodity
     //    (ore, organics, goods, energy, fighters, torps, team, sells)
     //
     //  Second we generate a second list of values based on the planet_id
     //  Because team and ship_id are not arrays we do not pass them through the second list command.
     //  When we write the ore production percent we also clear the selling and team values out of the db
     //  When we pass through the team array we set the value to $team we grabbed out of the array.
     //  in the sells and team the prodpercent = the planet_id.
     //
     //  We run through the database checking to see if any planet production is greater than 100, or possibly negative
     //    if so we set the planet to the default values and report it to the player.
     //
     //  There has got to be a better way, but at this time I am not sure how to do it.
     //  Off the top of my head if we could sort the data passed in, in order of planets we could check before we do the writes
     //  This would save us from having to run through the database a second time checking our work.
     //  This should patch the game from being hacked with planet Hack.
     $request = Request::createFromGlobals();
     $result = $db->Execute("SELECT ship_id, team FROM {$db->prefix}ships WHERE email = ?;", array($_SESSION['username']));
     \Tki\Db::LogDbErrors($pdo_db, $result, __LINE__, __FILE__);
     $ship_id = $result->fields['ship_id'];
     $planet_hack = false;
     $hack_id = 0x0;
     $hack_count = array(0, 0, 0);
     echo str_replace("[here]", "<a href='planet_report.php?preptype=2'>" . $langvars['l_here'] . "</a>", $langvars['l_pr_click_return_prod']);
     echo "<br><br>";
     while (list($commod_type, $valarray) = each($prodpercentarray)) {
         if ($commod_type != "team_id" && $commod_type != "ship_id") {
             while (list($planet_id, $prodpercent) = each($valarray)) {
                 if ($commod_type == "prod_ore" || $commod_type == "prod_organics" || $commod_type == "prod_goods" || $commod_type == "prod_energy" || $commod_type == "prod_fighters" || $commod_type == "prod_torp") {
                     $res = $db->Execute("SELECT COUNT(*) AS owned_planet FROM {$db->prefix}planets WHERE planet_id = ? AND owner = ?;", array($planet_id, $ship_id));
                     \Tki\Db::LogDbErrors($pdo_db, $res, __LINE__, __FILE__);
                     if ($res->fields['owned_planet'] == 0) {
                         $ip = $request->query->get('REMOTE_ADDR');
                         $planet_hack = true;
                         $hack_id = 0x18582;
                         $hack_count[0]++;
                         \Tki\AdminLog::writeLog($pdo_db, LOG_ADMIN_PLANETCHEAT, "{$hack_id}|{$ip}|{$planet_id}|{$ship_id}|commod_type={$commod_type}");
                     }
                     $resx = $db->Execute("UPDATE {$db->prefix}planets SET {$commod_type} = ? WHERE planet_id = ? AND owner = ?;", array($prodpercent, $planet_id, $ship_id));
                     \Tki\Db::LogDbErrors($pdo_db, $resx, __LINE__, __FILE__);
                     $resy = $db->Execute("UPDATE {$db->prefix}planets SET sells='N' WHERE planet_id = ? AND owner = ?;", array($planet_id, $ship_id));
                     \Tki\Db::LogDbErrors($pdo_db, $resy, __LINE__, __FILE__);
                     $resz = $db->Execute("UPDATE {$db->prefix}planets SET team=0 WHERE planet_id = ? AND owner = ?;", array($planet_id, $ship_id));
                     \Tki\Db::LogDbErrors($pdo_db, $resz, __LINE__, __FILE__);
                 } elseif ($commod_type == "sells") {
                     $resx = $db->Execute("UPDATE {$db->prefix}planets SET sells='Y' WHERE planet_id = ? AND owner = ?;", array($prodpercent, $ship_id));
                     \Tki\Db::LogDbErrors($pdo_db, $resx, __LINE__, __FILE__);
                 } elseif ($commod_type == "team") {
                     // Compare entered team_id and one in the db, if different then use one from db
                     $res = $db->Execute("SELECT {$db->prefix}ships.team as owner FROM {$db->prefix}ships, {$db->prefix}planets WHERE ( {$db->prefix}ships.ship_id = {$db->prefix}planets.owner ) AND ( {$db->prefix}planets.planet_id = ?);", array($prodpercent));
                     \Tki\Db::LogDbErrors($pdo_db, $res, __LINE__, __FILE__);
                     if ($res) {
                         $team_id = $res->fields['owner'];
                     } else {
                         $team_id = 0;
                     }
                     $resx = $db->Execute("UPDATE {$db->prefix}planets SET team = ? WHERE planet_id = ? AND owner = ?;", array($team_id, $prodpercent, $ship_id));
                     \Tki\Db::LogDbErrors($pdo_db, $resx, __LINE__, __FILE__);
                     if (array_key_exists("team_id", $prodpercentarray) === true && $prodpercentarray['team_id'] != $team_id) {
                         // They are different so send admin a log
                         $ip = $request->query->get('REMOTE_ADDR');
                         $planet_hack = true;
                         $hack_id = 0x18531;
                         $hack_count[1]++;
                         \Tki\AdminLog::writeLog($pdo_db, LOG_ADMIN_PLANETCHEAT, "{$hack_id}|{$ip}|{$prodpercent}|{$ship_id}|{$prodpercentarray['team_id']} not {$team_id}");
                     }
                 } else {
                     $ip = $request->query->get('REMOTE_ADDR');
                     $planet_hack = true;
                     $hack_id = 0x18598;
                     $hack_count[2]++;
                     \Tki\AdminLog::writeLog($pdo_db, LOG_ADMIN_PLANETCHEAT, "{$hack_id}|{$ip}|{$planet_id}|{$ship_id}|commod_type={$commod_type}");
                 }
             }
         }
     }
     if ($planet_hack) {
         $serial_data = serialize($prodpercentarray);
         \Tki\AdminLog::writeLog($pdo_db, LOG_ADMIN_PLANETCHEAT + 1000, "{$ship_id}|{$serial_data}");
         printf("<font color=\"red\"><strong>Your Cheat has been logged to the admin (%08x) [%02X:%02X:%02X].</strong></font><br>\n", (int) $hack_id, (int) $hack_count[0], (int) $hack_count[1], (int) $hack_count[2]);
     }
     echo "<br>";
     echo $langvars['l_pr_prod_updated'] . "<br><br>";
     echo $langvars['l_pr_checking_values'] . "<br><br>";
     $res = $db->Execute("SELECT * FROM {$db->prefix}planets WHERE owner = ? ORDER BY sector_id;", array($ship_id));
     \Tki\Db::LogDbErrors($pdo_db, $res, __LINE__, __FILE__);
     $i = 0;
     $planet = array();
     $planets = array();
     if ($res) {
         while (!$res->EOF) {
             $planets[$i] = $res->fields;
             $i++;
             $res->MoveNext();
         }
         foreach ($planets as $planet) {
             if (empty($planet['name'])) {
                 $planet['name'] = $langvars['l_unnamed'];
             }
             if ($planet['prod_ore'] < 0) {
                 $planet['prod_ore'] = 110;
             }
             if ($planet['prod_organics'] < 0) {
                 $planet['prod_organics'] = 110;
             }
             if ($planet['prod_goods'] < 0) {
                 $planet['prod_goods'] = 110;
             }
             if ($planet['prod_energy'] < 0) {
                 $planet['prod_energy'] = 110;
             }
             if ($planet['prod_fighters'] < 0) {
                 $planet['prod_fighters'] = 110;
             }
             if ($planet['prod_torp'] < 0) {
                 $planet['prod_torp'] = 110;
             }
             if ($planet['prod_ore'] + $planet['prod_organics'] + $planet['prod_goods'] + $planet['prod_energy'] + $planet['prod_fighters'] + $planet['prod_torp'] > 100) {
                 $temp1 = str_replace("[planet_name]", $planet['name'], $langvars['l_pr_value_reset']);
                 $temp2 = str_replace("[sector_id]", $planet['sector_id'], $temp1);
                 echo $temp2 . "<br>";
                 $resa = $db->Execute("UPDATE {$db->prefix}planets SET prod_ore = ? WHERE planet_id = ?;", array($tkireg->default_prod_ore, $planet['planet_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $resa, __LINE__, __FILE__);
                 $resb = $db->Execute("UPDATE {$db->prefix}planets SET prod_organics = ? WHERE planet_id = ?;", array($tkireg->default_prod_organics, $planet['planet_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $resb, __LINE__, __FILE__);
                 $resc = $db->Execute("UPDATE {$db->prefix}planets SET prod_goods = ? WHERE planet_id = ?;", array($tkireg->default_prod_goods, $planet['planet_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $resc, __LINE__, __FILE__);
                 $resd = $db->Execute("UPDATE {$db->prefix}planets SET prod_energy = ? WHERE planet_id = ?;", array($tkireg->default_prod_energy, $planet['planet_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $resd, __LINE__, __FILE__);
                 $rese = $db->Execute("UPDATE {$db->prefix}planets SET prod_fighters = ? WHERE planet_id = ?;", array($tkireg->default_prod_fighters, $planet['planet_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $rese, __LINE__, __FILE__);
                 $resf = $db->Execute("UPDATE {$db->prefix}planets SET prod_torp = ? WHERE planet_id = ?;", array($tkireg->default_prod_torp, $planet['planet_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $resf, __LINE__, __FILE__);
             }
         }
     }
 }
コード例 #10
0
ファイル: Ibank.php プロジェクト: thekabal/tki
 public static function ibankRepay(\PDO $pdo_db, string $lang, array $langvars, array $playerinfo, string $account, $amount, Reg $tkireg, Smarty $template)
 {
     $amount = preg_replace("/[^0-9]/", '', $amount);
     if ($amount * 1 != $amount) {
         self::ibankError($pdo_db, $langvars, $langvars['l_ibank_invalidamount'], "ibank.php?command=loans", $lang, $tkireg, $template);
     }
     if ($amount <= 0) {
         self::ibankError($pdo_db, $langvars, $langvars['l_ibank_invalidamount'], "ibank.php?command=loans", $lang, $tkireg, $template);
     }
     if ($account['loan'] == 0) {
         self::ibankError($pdo_db, $langvars, $langvars['l_ibank_notrepay'], "ibank.php?command=loans", $lang, $tkireg, $template);
     }
     if ($amount > $account['loan']) {
         $amount = $account['loan'];
     }
     if ($amount > $playerinfo['credits']) {
         self::ibankError($pdo_db, $langvars, $langvars['l_ibank_notenoughrepay'], "ibank.php?command=loans", $lang, $tkireg, $template);
     }
     $playerinfo['credits'] -= $amount;
     $account['loan'] -= $amount;
     echo "<tr><td colspan=2 align=center valign=top>" . $langvars['l_ibank_payloan'] . "<br>---------------------------------</td></tr>" . "<tr valign=top>" . "<td colspan=2 align=center>" . $langvars['l_ibank_loanthanks'] . "</td>" . "<tr valign=top>" . "<td colspan=2 align=center>---------------------------------</td>" . "<tr valign=top>" . "<td>" . $langvars['l_ibank_shipaccount'] . " :</td><td nowrap align=right>" . number_format($playerinfo['credits'], 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " C<br>" . "<tr valign=top>" . "<td>" . $langvars['l_ibank_payloan'] . " :</td><td nowrap align=right>" . number_format($amount, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " C<br>" . "<tr valign=top>" . "<td>" . $langvars['l_ibank_currentloan'] . " :</td><td nowrap align=right>" . number_format($account['loan'], 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " C<br>" . "<tr valign=top>" . "<td colspan=2 align=center>---------------------------------</td>" . "<tr valign=top>" . "<td nowrap><a href='ibank.php?command=login'>" . $langvars['l_ibank_back'] . "</a></td><td nowrap align=right>&nbsp;<a href=\"main.php\">" . $langvars['l_ibank_logout'] . "</a></td>" . "</tr>";
     $sql = "UPDATE ::prefix::ibank_accounts SET loan = loan - :loanamount, loantime=:loantime WHERE ship_id=:ship_id";
     $stmt = $pdo_db->prepare($sql);
     $stmt->bindParam(':loanamount', $amount);
     $stmt->bindParam(':loantime', $account['loantime']);
     $stmt->bindParam(':ship_id', $playerinfo['ship_id']);
     $stmt->execute();
     \Tki\Db::logDbErrors($pdo_db, $sql, __LINE__, __FILE__);
     $sql = "UPDATE ::prefix::ships SET credits = credits - :amount WHERE ship_id=:ship_id";
     $stmt = $pdo_db->prepare($sql);
     $stmt->bindParam(':amount', $amount);
     $stmt->bindParam(':ship_id', $playerinfo['ship_id']);
     $stmt->execute();
     \Tki\Db::logDbErrors($pdo_db, $sql, __LINE__, __FILE__);
 }
コード例 #11
0
ファイル: PlanetReportCE.php プロジェクト: thekabal/tki
 public static function takeCredits(\PDO $pdo_db, \ADODB_mysqli $db, array $langvars, int $planet_id)
 {
     // Get basic Database information (ship and planet)
     $res = $db->Execute("SELECT * FROM {$db->prefix}ships WHERE email = ?;", array($_SESSION['username']));
     \Tki\Db::LogDbErrors($pdo_db, $res, __LINE__, __FILE__);
     $playerinfo = $res->fields;
     $res = $db->Execute("SELECT * FROM {$db->prefix}planets WHERE planet_id = ?;", array($planet_id));
     \Tki\Db::LogDbErrors($pdo_db, $res, __LINE__, __FILE__);
     $planetinfo = $res->fields;
     // Set the name for unamed planets to be "unnamed"
     if (empty($planetinfo['name'])) {
         $planetinfo['name'] = $langvars['l_unnamed'];
     }
     // Verify player is still in same sector as the planet
     if ($playerinfo['sector'] == $planetinfo['sector_id']) {
         if ($playerinfo['turns'] >= 1) {
             // Verify player owns the planet to take credits from
             if ($planetinfo['owner'] == $playerinfo['ship_id']) {
                 // Get number of credits from the planet and current number player has on ship
                 $CreditsTaken = $planetinfo['credits'];
                 $CreditsOnShip = $playerinfo['credits'];
                 $NewShipCredits = $CreditsTaken + $CreditsOnShip;
                 // Update the planet record for credits
                 $res = $db->Execute("UPDATE {$db->prefix}planets SET credits = 0 WHERE planet_id = ?;", array($planetinfo['planet_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $res, __LINE__, __FILE__);
                 // update the player info with updated credits
                 $res = $db->Execute("UPDATE {$db->prefix}ships SET credits = ? WHERE email = ?;", array($NewShipCredits, $_SESSION['username']));
                 \Tki\Db::LogDbErrors($pdo_db, $res, __LINE__, __FILE__);
                 // update the player info with updated turns
                 $res = $db->Execute("UPDATE {$db->prefix}ships SET turns = turns - 1 WHERE email = ?;", array($_SESSION['username']));
                 \Tki\Db::LogDbErrors($pdo_db, $res, __LINE__, __FILE__);
                 $tempa1 = str_replace("[credits_taken]", number_format($CreditsTaken, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']), $langvars['l_pr_took_credits']);
                 $tempa2 = str_replace("[planet_name]", $planetinfo['name'], $tempa1);
                 echo $tempa2 . "<br>";
                 $tempb1 = str_replace("[ship_name]", $playerinfo['ship_name'], $langvars['l_pr_have_credits_onboard']);
                 $tempb2 = str_replace("[new_ship_credits]", number_format($NewShipCredits, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']), $tempb1);
                 echo $tempb2 . "<br>";
                 $retval = "GO";
             } else {
                 echo "<br><br>" . str_replace("[planet_name]", $planetinfo['name'], $langvars['l_pr_not_your_planet']) . "<br><br>";
                 $retval = "BREAK-INVALID";
             }
         } else {
             $tempc1 = str_replace("[planet_name]", $planetinfo['name'], $langvars['l_pr_not_enough_turns']);
             $tempc2 = str_replace("[sector_id]", $planetinfo['sector_id'], $tempc1);
             echo "<br><br>" . $tempc2 . "<br><br>";
             $retval = "BREAK-TURNS";
         }
     } else {
         echo "<br><br>" . $langvars['l_pr_must_same_sector'] . "<br><br>";
         $retval = "BREAK-SECTORS";
     }
     return $retval;
 }
コード例 #12
0
ファイル: Ibank2.php プロジェクト: thekabal/tki
 public static function ibankConsolidate3(\PDO $pdo_db, array $langvars, array $playerinfo, Reg $tkireg, int $dplanet_id, int $minimum, int $maximum, string $lang, Smarty $template)
 {
     $sql = "SELECT name, credits, owner, sector_id FROM ::prefix::planets WHERE planet_id=:planet_id";
     $stmt = $pdo_db->prepare($sql);
     $stmt->bindParam(':planet_id', $dplanet_id);
     $stmt->execute();
     $dest = $stmt->fetch(\PDO::FETCH_ASSOC);
     if ($dest === null) {
         \TkiIbank::ibankError($pdo_db, $langvars, $langvars['l_ibank_errunknownplanet'], "ibank.php?command=transfer", $lang, $tkireg, $template);
     }
     if (empty($dest['name'])) {
         $dest['name'] = $langvars['l_ibank_unnamed'];
     }
     if ($dest['owner'] != $playerinfo['ship_id']) {
         \TkiIbank::ibankError($pdo_db, $langvars, $langvars['l_ibank_errnotyourplanet'], "ibank.php?command=transfer", $lang, $tkireg, $template);
     }
     if ($minimum != 0) {
         $sql = "SELECT SUM(credits) as total, COUNT(*) AS count FROM ::prefix::planets WHERE owner = :owner_id AND credits <> 0 AND planet_id <> :planet_id AND credits >= :minimum";
         $stmt = $pdo_db->prepare($sql);
         $stmt->bindParam(':owner_id', $playerinfo['ship_id']);
         $stmt->bindParam(':dplanet_id', $dplanet_id);
         $stmt->bindParam(':minimum', $minimum);
         $stmt->execute();
         \Tki\Db::logDbErrors($pdo_db, $sql, __LINE__, __FILE__);
         $amount = $stmt->fetch(\PDO::FETCH_ASSOC);
     }
     if ($maximum != 0) {
         $sql = "SELECT SUM(credits) as total, COUNT(*) AS count FROM ::prefix::planets WHERE owner = :owner_id AND credits <> 0 AND planet_id <> :planet_id AND credits <= :maximum";
         $stmt = $pdo_db->prepare($sql);
         $stmt->bindParam(':owner_id', $playerinfo['ship_id']);
         $stmt->bindParam(':dplanet_id', $dplanet_id);
         $stmt->bindParam(':maximum', $maximum);
         $stmt->execute();
         \Tki\Db::logDbErrors($pdo_db, $sql, __LINE__, __FILE__);
         $amount = $stmt->fetch(\PDO::FETCH_ASSOC);
     }
     $fee = $tkireg->ibank_paymentfee * $amount['total'];
     $tcost = ceil($amount['count'] / $tkireg->ibank_tconsolidate);
     $transfer = $amount['total'] - $fee;
     $cplanet = $transfer + $dest['credits'];
     if ($tcost > $playerinfo['turns']) {
         \Tki\Ibank::ibankError($pdo_db, $langvars, $langvars['l_ibank_notenturns'], "ibank.php?command=transfer", $lang, $tkireg, $template);
     }
     echo "<tr><td colspan=2 align=center valign=top>" . $langvars['l_ibank_transfersuccessful'] . "<br>---------------------------------</td></tr>" . "<tr valign=top>" . "<td>" . $langvars['l_ibank_currentpl'] . " " . $dest['name'] . " " . $langvars['l_ibank_in'] . " " . $dest['sector_id'] . " :<br><br>" . $langvars['l_ibank_turncost'] . " :</td>" . "<td align=right>" . number_format($cplanet, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " C<br><br>" . number_format($tcost, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . "</td>" . "<tr valign=bottom>" . "<td><a href='ibank.php?command=login'>" . $langvars['l_ibank_back'] . "</a></td><td align=right>&nbsp;<br><a href=\"main.php\">" . $langvars['l_ibank_logout '] . "</a></td>" . "</tr>";
     if ($minimum != 0) {
         $sql = "UPDATE ::prefix::planets SET credits = 0 WHERE owner = :owner_id AND credits <> 0 AND planet_id <> :dplanet_id AND credits >= :minimum";
         $stmt = $pdo_db->prepare($sql);
         $stmt->bindParam(':owner_id', $playerinfo['ship_id']);
         $stmt->bindParam(':dplanet_id', $dplanet_id);
         $stmt->bindParam(':minimum', $minimum);
         $stmt->execute();
         \Tki\Db::logDbErrors($pdo_db, $sql, __LINE__, __FILE__);
     }
     if ($maximum != 0) {
         $sql = "UPDATE ::prefix::planets SET credits = 0 WHERE owner = :owner_id AND credits <> 0 AND planet_id <> :dplanet_id AND credxits <= :maximum";
         $stmt = $pdo_db->prepare($sql);
         $stmt->bindParam(':owner_id', $playerinfo['ship_id']);
         $stmt->bindParam(':dplanet_id', $dplanet_id);
         $stmt->bindParam(':maximum', $maximum);
         $stmt->execute();
         \Tki\Db::logDbErrors($pdo_db, $sql, __LINE__, __FILE__);
     }
     $sql = "UPDATE ::prefix::planets SET credits = :credits WHERE planet_id = :planet_id";
     $stmt = $pdo_db->prepare($sql);
     $stmt->bindParam(':credits', $cplanet);
     $stmt->bindParam(':planet_id', $dplanet_id);
     $stmt->execute();
     \Tki\Db::logDbErrors($pdo_db, $sql, __LINE__, __FILE__);
     $sql = "UPDATE ::prefix::ships SET turns = turns - :turns WHERE ship_id = :ship_id";
     $stmt = $pdo_db->prepare($sql);
     $stmt->bindParam(':turns', $tcost);
     $stmt->bindParam(':ship_id', $playerinfo['ship_id']);
     $stmt->execute();
     \Tki\Db::logDbErrors($pdo_db, $sql, __LINE__, __FILE__);
 }
コード例 #13
0
ファイル: Footer.php プロジェクト: thekabal/tki
 public static function display(\PDO $pdo_db, string $lang, Reg $tkireg, Smarty $template)
 {
     $request = Request::createFromGlobals();
     // Now set a container for the variables and langvars and send them off to the template system
     $variables = array();
     $langvars = array();
     $online = (int) 0;
     if (Db::isActive($pdo_db)) {
         $stamp = date("Y-m-d H:i:s", time());
         // Now (as seen by PHP)
         $since_stamp = date("Y-m-d H:i:s", time() - 5 * 60);
         // Five minutes ago
         $players_gateway = new Players\PlayersGateway($pdo_db);
         // Build a player gateway object to handle the SQL calls
         $online = $players_gateway->selectPlayersLoggedIn($since_stamp, $stamp);
         // Online is the (int) count of the numbers of players currently logged in via SQL select
     }
     $elapsed = (int) 999;
     // Default value for elapsed, overridden with an actual value if its available
     if ($tkireg !== null) {
         if (property_exists($tkireg, 'tkitimer')) {
             $tkireg->tkitimer->stop();
             $elapsed = $tkireg->tkitimer->elapsed();
         }
     }
     // Suppress the news ticker on the IBANK and index pages
     $news_ticker_active = !(preg_match("/index.php/i", $request->server->get('SCRIPT_NAME')) || preg_match("/ibank.php/i", $request->server->get('SCRIPT_NAME')) || preg_match("/new.php/i", $request->server->get('SCRIPT_NAME')));
     // Suppress the news ticker if the database is not active
     if (!Db::isActive($pdo_db)) {
         $news_ticker_active = false;
     }
     // Update counter
     $scheduler_gateway = new Scheduler\SchedulerGateway($pdo_db);
     // Build a scheduler gateway object to handle the SQL calls
     $last_run = $scheduler_gateway->selectSchedulerLastRun();
     // Last run is the (int) count of the numbers of players currently logged in via SQL select or false if DB is not active
     if ($last_run !== false) {
         $seconds_left = $tkireg->sched_ticks * 60 - (time() - $last_run);
         $show_update_ticker = true;
     } else {
         $seconds_left = (int) 0;
         $show_update_ticker = false;
     }
     // End update counter
     if ($tkireg->footer_show_debug === true) {
         $sf_logo_type = '14';
         $sf_logo_width = "150";
         $sf_logo_height = "40";
     } else {
         $sf_logo_type = '11';
         $sf_logo_width = "120";
         $sf_logo_height = "30";
     }
     if ($news_ticker_active === true) {
         // Database driven language entries
         $langvars_temp = Translate::load($pdo_db, $lang, array('news', 'common', 'footer', 'global_includes', 'logout'));
         // Use array merge so that we do not clobber the langvars array, and only add to it the items needed for footer
         $langvars = array_merge($langvars, $langvars_temp);
         // Use array unique so that we don't end up with duplicate lang array entries
         // This is resulting in an array with blank values for specific keys, so array_unique isn't entirely what we want
         // $langvars = array_unique ($langvars);
         // SQL call that selects all of the news items between the start date beginning of day, and the end of day.
         $news_gateway = new News\NewsGateway($pdo_db);
         // Build a scheduler gateway object to handle the SQL calls
         $row = $news_gateway->selectNewsByDay(date('Y-m-d'));
         $news_ticker = array();
         if (count($row) == 0) {
             array_push($news_ticker, array('url' => null, 'text' => $langvars['l_news_none'], 'type' => null, 'delay' => 5));
         } else {
             foreach ($row as $item) {
                 array_push($news_ticker, array('url' => "news.php", 'text' => $item['headline'], 'type' => $item['news_type'], 'delay' => 5));
             }
             array_push($news_ticker, array('url' => null, 'text' => "End of News", 'type' => null, 'delay' => 5));
         }
         $news_ticker['container'] = "article";
         $template->addVariables("news", $news_ticker);
     } else {
         $sf_logo_type++;
         // Make the SF logo darker for all pages except login. No need to change the sizes as 12 is the same size as 11 and 15 is the same size as 14.
     }
     $sf_logo_link = null;
     $mem_peak_usage = floor(memory_get_peak_usage() / 1024);
     $public_pages = array('ranking.php', 'new.php', 'faq.php', 'settings.php', 'news.php', 'index.php');
     $slash_position = mb_strrpos($request->server->get('SCRIPT_NAME'), '/') + 1;
     $current_page = mb_substr($request->server->get('SCRIPT_NAME'), $slash_position);
     if (in_array($current_page, $public_pages)) {
         // If it is a non-login required page, such as ranking, new, faq, settings, news, and index use the public SF logo, which increases project stats.
         $variables['suppress_logo'] = false;
     } else {
         // Else suppress the logo, so it is as fast as possible.
         $variables['suppress_logo'] = true;
     }
     // Set array with all used variables in page
     $variables['update_ticker'] = array("display" => $show_update_ticker, "seconds_left" => $seconds_left, "sched_ticks" => $tkireg->sched_ticks);
     $variables['players_online'] = $online;
     $variables['sf_logo_type'] = $sf_logo_type;
     $variables['sf_logo_height'] = $sf_logo_height;
     $variables['sf_logo_width'] = $sf_logo_width;
     $variables['sf_logo_link'] = $sf_logo_link;
     $variables['elapsed'] = $elapsed;
     $variables['mem_peak_usage'] = $mem_peak_usage;
     $variables['footer_show_debug'] = $tkireg->footer_show_debug;
     $variables['cur_year'] = date('Y');
     $template->addVariables('langvars', $langvars);
     $template->addVariables('variables', $variables);
     $template->display('footer.tpl');
 }
コード例 #14
0
ファイル: Traderoute3.php プロジェクト: thekabal/tki
 public static function traderouteSetsettings(\ADODB_mysqli $db, \PDO $pdo_db, string $lang, Reg $tkireg, Smarty $template, array $playerinfo, $colonists, $fighters, $torps, $energy)
 {
     $langvars = \Tki\Translate::load($pdo_db, $lang, array('traderoutes', 'common', 'global_includes', 'global_funcs', 'footer', 'regional'));
     empty($colonists) ? $colonists = 'N' : ($colonists = 'Y');
     empty($fighters) ? $fighters = 'N' : ($fighters = 'Y');
     empty($torps) ? $torps = 'N' : ($torps = 'Y');
     $resa = $db->Execute("UPDATE {$db->prefix}ships SET trade_colonists = ?, trade_fighters = ?, trade_torps = ?, trade_energy = ? WHERE ship_id = ?;", array($colonists, $fighters, $torps, $energy, $playerinfo['ship_id']));
     \Tki\Db::LogDbErrors($pdo_db, $resa, __LINE__, __FILE__);
     $langvars['l_tdr_returnmenu'] = str_replace("[here]", "<a href='traderoute.php'>" . $langvars['l_here'] . "</a>", $langvars['l_tdr_returnmenu']);
     echo $langvars['l_tdr_globalsetsaved'] . " " . $langvars['l_tdr_returnmenu'];
     \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, null, $template);
 }
コード例 #15
0
ファイル: Combat.php プロジェクト: thekabal/tki
 public static function shipToShip(\PDO $pdo_db, \ADODB_mysqli $db, array $langvars, int $ship_id, Reg $tkireg, array $playerinfo, $attackerbeams, $attackerfighters, $attackershields, $attackertorps, $attackerarmor, $attackertorpdamage)
 {
     $sql = "SELECT * FROM ::prefix::ships WHERE ship_id=:ship_id";
     $stmt = $pdo_db->prepare($sql);
     $stmt->bindParam(':ship_id', $ship_id);
     $stmt->execute();
     $targetinfo = $stmt->fetchAll(PDO::FETCH_ASSOC);
     echo "<br><br>-=-=-=-=-=-=-=--<br>\n        " . $langvars['l_cmb_startingstats'] . ":<br>\n        <br>\n        " . $langvars['l_cmb_statattackerbeams'] . ": {$attackerbeams}<br>\n        " . $langvars['l_cmb_statattackerfighters'] . ": {$attackerfighters}<br>\n        " . $langvars['l_cmb_statattackershields'] . ": {$attackershields}<br>\n        " . $langvars['l_cmb_statattackertorps'] . ": {$attackertorps}<br>\n        " . $langvars['l_cmb_statattackerarmor'] . ": {$attackerarmor}<br>\n        " . $langvars['l_cmb_statattackertorpdamage'] . ": {$attackertorpdamage}<br>";
     $targetbeams = \Tki\CalcLevels::beams($targetinfo['beams'], $tkireg);
     if ($targetbeams > $targetinfo['ship_energy']) {
         $targetbeams = $targetinfo['ship_energy'];
     }
     $targetinfo['ship_energy'] = $targetinfo['ship_energy'] - $targetbeams;
     $targetshields = \Tki\CalcLevels::shields($targetinfo['shields'], $tkireg);
     if ($targetshields > $targetinfo['ship_energy']) {
         $targetshields = $targetinfo['ship_energy'];
     }
     $targetinfo['ship_energy'] = $targetinfo['ship_energy'] - $targetshields;
     $targettorpnum = round(pow($tkireg->level_factor, $targetinfo['torp_launchers'])) * 2;
     if ($targettorpnum > $targetinfo['torps']) {
         $targettorpnum = $targetinfo['torps'];
     }
     $targettorpdmg = $tkireg->torp_dmg_rate * $targettorpnum;
     $targetarmor = $targetinfo['armor_pts'];
     $targetfighters = $targetinfo['ship_fighters'];
     echo "-->{$targetinfo['ship_name']} " . $langvars['l_cmb_isattackingyou'] . "<br><br>";
     echo $langvars['l_cmb_beamexchange'] . "<br>";
     if ($targetfighters > 0 && $attackerbeams > 0) {
         if ($attackerbeams > round($targetfighters / 2)) {
             $temp = round($targetfighters / 2);
             $lost = $targetfighters - $temp;
             $targetfighters = $temp;
             $attackerbeams = $attackerbeams - $lost;
             $langvars['l_cmb_beamsdestroy'] = str_replace("[cmb_lost]", $lost, $langvars['l_cmb_beamsdestroy']);
             echo "<-- " . $langvars['l_cmb_beamsdestroy'] . "<br>";
         } else {
             $targetfighters = $targetfighters - $attackerbeams;
             $langvars['l_cmb_beamsdestroy2'] = str_replace("[cmb_attackerbeams]", $attackerbeams, $langvars['l_cmb_beamsdestroy2']);
             echo "--> " . $langvars['l_cmb_beamsdestroy2'] . "<br>";
             $attackerbeams = 0;
         }
     } elseif ($targetfighters > 0 && $attackerbeams < 1) {
         echo $langvars['l_cmb_nobeamsareleft'] . "<br>";
     } else {
         echo $langvars['l_cmb_beamshavenotarget'] . "<br>";
     }
     if ($attackerfighters > 0 && $targetbeams > 0) {
         if ($targetbeams > round($attackerfighters / 2)) {
             $temp = round($attackerfighters / 2);
             $lost = $attackerfighters - $temp;
             $attackerfighters = $temp;
             $targetbeams = $targetbeams - $lost;
             $langvars['l_cmb_fighterdestroyedbybeams'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_fighterdestroyedbybeams']);
             $langvars['l_cmb_fighterdestroyedbybeams'] = str_replace("[cmb_lost]", $lost, $langvars['l_cmb_fighterdestroyedbybeams']);
             echo "--> " . $langvars['l_cmb_fighterdestroyedbybeams'] . "<br>";
         } else {
             $attackerfighters = $attackerfighters - $targetbeams;
             $langvars['l_cmb_beamsdestroystillhave'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_beamsdestroystillhave']);
             $langvars['l_cmb_beamsdestroystillhave'] = str_replace("[cmb_targetbeams]", $targetbeams, $langvars['l_cmb_beamsdestroystillhave']);
             $langvars['l_cmb_beamsdestroystillhave'] = str_replace("[cmb_attackerfighters]", $attackerfighters, $langvars['l_cmb_beamsdestroystillhave']);
             echo "<-- " . $langvars['l_cmb_beamsdestroystillhave'] . "<br>";
             $targetbeams = 0;
         }
     } elseif ($attackerfighters > 0 && $targetbeams < 1) {
         echo $langvars['l_cmb_fighterunhindered'] . "<br>";
     } else {
         echo $langvars['l_cmb_youhavenofightersleft'] . "<br>";
     }
     if ($attackerbeams > 0) {
         if ($attackerbeams > $targetshields) {
             $attackerbeams = $attackerbeams - $targetshields;
             $langvars['l_cmb_breachedsomeshields'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_breachedsomeshields']);
             echo "<-- " . $langvars['l_cmb_breachedsomeshields'] . "<br>";
         } else {
             $langvars['l_cmb_shieldsarehitbybeams'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_shieldsarehitbybeams']);
             $langvars['l_cmb_shieldsarehitbybeams'] = str_replace("[cmb_attackerbeams]", $attackerbeams, $langvars['l_cmb_shieldsarehitbybeams']);
             echo $langvars['l_cmb_shieldsarehitbybeams'] . "<br>";
             $attackerbeams = 0;
         }
     } else {
         $langvars['l_cmb_nobeamslefttoattack'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_nobeamslefttoattack']);
         echo $langvars['l_cmb_nobeamslefttoattack'] . "<br>";
     }
     if ($targetbeams > 0) {
         if ($targetbeams > $attackershields) {
             $targetbeams = $targetbeams - $attackershields;
             $attackershields = 0;
             $langvars['l_cmb_yourshieldsbreachedby'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_yourshieldsbreachedby']);
             echo "--> " . $langvars['l_cmb_yourshieldsbreachedby'] . "<br>";
         } else {
             $langvars['l_cmb_yourshieldsarehit'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_yourshieldsarehit']);
             $langvars['l_cmb_yourshieldsarehit'] = str_replace("[cmb_targetbeams]", $targetbeams, $langvars['l_cmb_yourshieldsarehit']);
             echo "<-- " . $langvars['l_cmb_yourshieldsarehit'] . "<br>";
             $attackershields = $attackershields - $targetbeams;
             $targetbeams = 0;
         }
     } else {
         $langvars['l_cmb_hehasnobeamslefttoattack'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_hehasnobeamslefttoattack']);
         echo $langvars['l_cmb_hehasnobeamslefttoattack'] . "<br>";
     }
     if ($attackerbeams > 0) {
         if ($attackerbeams > $targetarmor) {
             $targetarmor = 0;
             $langvars['l_cmb_yourbeamsbreachedhim'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_yourbeamsbreachedhim']);
             echo "--> " . $langvars['l_cmb_yourbeamsbreachedhim'] . "<br>";
         } else {
             $targetarmor = $targetarmor - $attackerbeams;
             $langvars['l_cmb_yourbeamshavedonedamage'] = str_replace("[cmb_attackerbeams]", $attackerbeams, $langvars['l_cmb_yourbeamshavedonedamage']);
             $langvars['l_cmb_yourbeamshavedonedamage'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_yourbeamshavedonedamage']);
             echo $langvars['l_cmb_yourbeamshavedonedamage'] . "<br>";
         }
     } else {
         $langvars['l_cmb_nobeamstoattackarmor'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_nobeamstoattackarmor']);
         echo $langvars['l_cmb_nobeamstoattackarmor'] . "<br>";
     }
     if ($targetbeams > 0) {
         if ($targetbeams > $attackerarmor) {
             $attackerarmor = 0;
             $langvars['l_cmb_yourarmorbreachedbybeams'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_yourarmorbreachedbybeams']);
             echo "--> " . $langvars['l_cmb_yourarmorbreachedbybeams'] . "<br>";
         } else {
             $attackerarmor = $attackerarmor - $targetbeams;
             $langvars['l_cmb_yourarmorhitdamaged'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_yourarmorhitdamaged']);
             $langvars['l_cmb_yourarmorhitdamaged'] = str_replace("[cmb_targetbeams]", $targetbeams, $langvars['l_cmb_yourarmorhitdamaged']);
             echo "<-- " . $langvars['l_cmb_yourarmorhitdamaged'] . "<br>";
         }
     } else {
         $langvars['l_cmb_hehasnobeamslefttoattackyou'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_hehasnobeamslefttoattackyou']);
         echo $langvars['l_cmb_hehasnobeamslefttoattackyou'] . "<br>";
     }
     echo "<br>" . $langvars['l_cmb_torpedoexchange'] . "<br>";
     if ($targetfighters > 0 && $attackertorpdamage > 0) {
         if ($attackertorpdamage > round($targetfighters / 2)) {
             $temp = round($targetfighters / 2);
             $lost = $targetfighters - $temp;
             $targetfighters = $temp;
             $attackertorpdamage = $attackertorpdamage - $lost;
             $langvars['l_cmb_yourtorpsdestroy'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_yourtorpsdestroy']);
             $langvars['l_cmb_yourtorpsdestroy'] = str_replace("[cmb_lost]", $lost, $langvars['l_cmb_yourtorpsdestroy']);
             echo "--> " . $langvars['l_cmb_yourtorpsdestroy'] . "<br>";
         } else {
             $targetfighters = $targetfighters - $attackertorpdamage;
             $langvars['l_cmb_yourtorpsdestroy2'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_yourtorpsdestroy2']);
             $langvars['l_cmb_yourtorpsdestroy2'] = str_replace("[cmb_attackertorpdamage]", $attackertorpdamage, $langvars['l_cmb_yourtorpsdestroy2']);
             echo "<-- " . $langvars['l_cmb_yourtorpsdestroy2'] . "<br>";
             $attackertorpdamage = 0;
         }
     } elseif ($targetfighters > 0 && $attackertorpdamage < 1) {
         $langvars['l_cmb_youhavenotorpsleft'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_youhavenotorpsleft']);
         echo $langvars['l_cmb_youhavenotorpsleft'] . "<br>";
     } else {
         $langvars['l_cmb_hehasnofighterleft'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_hehasnofighterleft']);
         echo $langvars['l_cmb_hehasnofighterleft'] . "<br>";
     }
     if ($attackerfighters > 0 && $targettorpdmg > 0) {
         if ($targettorpdmg > round($attackerfighters / 2)) {
             $temp = round($attackerfighters / 2);
             $lost = $attackerfighters - $temp;
             $attackerfighters = $temp;
             $targettorpdmg = $targettorpdmg - $lost;
             $langvars['l_cmb_torpsdestroyyou'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_torpsdestroyyou']);
             $langvars['l_cmb_torpsdestroyyou'] = str_replace("[cmb_lost]", $lost, $langvars['l_cmb_torpsdestroyyou']);
             echo "--> " . $langvars['l_cmb_torpsdestroyyou'] . "<br>";
         } else {
             $attackerfighters = $attackerfighters - $targettorpdmg;
             $langvars['l_cmb_someonedestroyedfighters'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_someonedestroyedfighters']);
             $langvars['l_cmb_someonedestroyedfighters'] = str_replace("[cmb_targettorpdmg]", $targettorpdmg, $langvars['l_cmb_someonedestroyedfighters']);
             echo "<-- " . $langvars['l_cmb_someonedestroyedfighters'] . "<br>";
             $targettorpdmg = 0;
         }
     } elseif ($attackerfighters > 0 && $targettorpdmg < 1) {
         $langvars['l_cmb_hehasnotorpsleftforyou'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_hehasnotorpsleftforyou']);
         echo $langvars['l_cmb_hehasnotorpsleftforyou'] . "<br>";
     } else {
         $langvars['l_cmb_youhavenofightersanymore'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_youhavenofightersanymore']);
         echo $langvars['l_cmb_youhavenofightersanymore'] . "<br>";
     }
     if ($attackertorpdamage > 0) {
         if ($attackertorpdamage > $targetarmor) {
             $targetarmor = 0;
             $langvars['l_cmb_youbreachedwithtorps'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_youbreachedwithtorps']);
             echo "--> " . $langvars['l_cmb_youbreachedwithtorps'] . "<br>";
         } else {
             $targetarmor = $targetarmor - $attackertorpdamage;
             $langvars['l_cmb_hisarmorishitbytorps'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_hisarmorishitbytorps']);
             $langvars['l_cmb_hisarmorishitbytorps'] = str_replace("[cmb_attackertorpdamage]", $attackertorpdamage, $langvars['l_cmb_hisarmorishitbytorps']);
             echo "<-- " . $langvars['l_cmb_hisarmorishitbytorps'] . "<br>";
         }
     } else {
         $langvars['l_cmb_notorpslefttoattackarmor'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_notorpslefttoattackarmor']);
         echo $langvars['l_cmb_notorpslefttoattackarmor'] . "<br>";
     }
     if ($targettorpdmg > 0) {
         if ($targettorpdmg > $attackerarmor) {
             $attackerarmor = 0;
             $langvars['l_cmb_yourarmorbreachedbytorps'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_yourarmorbreachedbytorps']);
             echo "<-- " . $langvars['l_cmb_yourarmorbreachedbytorps'] . "<br>";
         } else {
             $attackerarmor = $attackerarmor - $targettorpdmg;
             $langvars['l_cmb_yourarmorhitdmgtorps'] = str_replace("[cmb_targettorpdmg]", $targettorpdmg, $langvars['l_cmb_yourarmorhitdmgtorps']);
             $langvars['l_cmb_yourarmorhitdmgtorps'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_yourarmorhitdmgtorps']);
             echo "<-- " . $langvars['l_cmb_yourarmorhitdmgtorps'] . "<br>";
         }
     } else {
         $langvars['l_cmb_hehasnotorpsforyourarmor'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_hehasnotorpsforyourarmor']);
         echo $langvars['l_cmb_hehasnotorpsforyourarmor'] . "<br>";
     }
     echo "<br>" . $langvars['l_cmb_fightersattackexchange'] . "<br>";
     if ($attackerfighters > 0 && $targetfighters > 0) {
         if ($attackerfighters > $targetfighters) {
             $langvars['l_cmb_enemylostallfighters'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_enemylostallfighters']);
             echo "--> " . $langvars['l_cmb_enemylostallfighters'] . "<br>";
             $temptargfighters = 0;
         } else {
             $langvars['l_cmb_helostsomefighters'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_helostsomefighters']);
             $langvars['l_cmb_helostsomefighters'] = str_replace("[cmb_attackerfighters]", $attackerfighters, $langvars['l_cmb_helostsomefighters']);
             echo $langvars['l_cmb_helostsomefighters'] . "<br>";
             $temptargfighters = $targetfighters - $attackerfighters;
         }
         if ($targetfighters > $attackerfighters) {
             echo "<-- " . $langvars['l_cmb_youlostallfighters'] . "<br>";
             $tempplayfighters = 0;
         } else {
             $langvars['l_cmb_youalsolostsomefighters'] = str_replace("[cmb_targetfighters]", $targetfighters, $langvars['l_cmb_youalsolostsomefighters']);
             echo "<-- " . $langvars['l_cmb_youalsolostsomefighters'] . "<br>";
             $tempplayfighters = $attackerfighters - $targetfighters;
         }
         $attackerfighters = $tempplayfighters;
         $targetfighters = $temptargfighters;
     } elseif ($attackerfighters > 0 && $targetfighters < 1) {
         $langvars['l_cmb_hehasnofightersleftattack'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_hehasnofightersleftattack']);
         echo $langvars['l_cmb_hehasnofightersleftattack'] . "<br>";
     } else {
         $langvars['l_cmb_younofightersattackleft'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_younofightersattackleft']);
         echo $langvars['l_cmb_younofightersattackleft'] . "<br>";
     }
     if ($attackerfighters > 0) {
         if ($attackerfighters > $targetarmor) {
             $targetarmor = 0;
             $langvars['l_cmb_youbreachedarmorwithfighters'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_youbreachedarmorwithfighters']);
             echo "--> " . $langvars['l_cmb_youbreachedarmorwithfighters'] . "<br>";
         } else {
             $targetarmor = $targetarmor - $attackerfighters;
             $langvars['l_cmb_youhitarmordmgfighters'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_youhitarmordmgfighters']);
             $langvars['l_cmb_youhitarmordmgfighters'] = str_replace("[cmb_attackerfighters]", $attackerfighters, $langvars['l_cmb_youhitarmordmgfighters']);
             echo "<-- " . $langvars['l_cmb_youhitarmordmgfighters'] . "<br>";
         }
     } else {
         $langvars['l_cmb_youhavenofighterstoarmor'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_youhavenofighterstoarmor']);
         echo $langvars['l_cmb_youhavenofighterstoarmor'] . "<br>";
     }
     if ($targetfighters > 0) {
         if ($targetfighters > $attackerarmor) {
             $attackerarmor = 0;
             $langvars['l_cmb_hasbreachedarmorfighters'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_hasbreachedarmorfighters']);
             echo "<-- " . $langvars['l_cmb_hasbreachedarmorfighters'] . "<br>";
         } else {
             $attackerarmor = $attackerarmor - $targetfighters;
             $langvars['l_cmb_yourarmorishitfordmgby'] = str_replace("[cmb_targetfighters]", $targetfighters, $langvars['l_cmb_yourarmorishitfordmgby']);
             $langvars['l_cmb_yourarmorishitfordmgby'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_yourarmorishitfordmgby']);
             echo "--> " . $langvars['l_cmb_yourarmorishitfordmgby'] . "<br>";
         }
     } else {
         $langvars['l_cmb_nofightersleftheforyourarmor'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_nofightersleftheforyourarmor']);
         echo $langvars['l_cmb_nofightersleftheforyourarmor'] . "<br>";
     }
     if ($targetarmor < 1) {
         $langvars['l_cmb_hehasbeendestroyed'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_hehasbeendestroyed']);
         echo "<br>" . $langvars['l_cmb_hehasbeendestroyed'] . "<br>";
         if ($attackerarmor > 0) {
             $rating_change = round($targetinfo['rating'] * $tkireg->rating_combat_factor);
             $free_ore = round($targetinfo['ship_ore'] / 2);
             $free_organics = round($targetinfo['ship_organics'] / 2);
             $free_goods = round($targetinfo['ship_goods'] / 2);
             $free_holds = \Tki\CalcLevels::holds($playerinfo['hull'], $tkireg) - $playerinfo['ship_ore'] - $playerinfo['ship_organics'] - $playerinfo['ship_goods'] - $playerinfo['ship_colonists'];
             if ($free_holds > $free_goods) {
                 $salv_goods = $free_goods;
                 $free_holds = $free_holds - $free_goods;
             } elseif ($free_holds > 0) {
                 $salv_goods = $free_holds;
                 $free_holds = 0;
             } else {
                 $salv_goods = 0;
             }
             if ($free_holds > $free_ore) {
                 $salv_ore = $free_ore;
                 $free_holds = $free_holds - $free_ore;
             } elseif ($free_holds > 0) {
                 $salv_ore = $free_holds;
                 $free_holds = 0;
             } else {
                 $salv_ore = 0;
             }
             if ($free_holds > $free_organics) {
                 $salv_organics = $free_organics;
             } elseif ($free_holds > 0) {
                 $salv_organics = $free_holds;
             } else {
                 $salv_organics = 0;
             }
             $ship_value = $tkireg->upgrade_cost * (round(pow($tkireg->upgrade_factor, $targetinfo['hull'])) + round(pow($tkireg->upgrade_factor, $targetinfo['engines'])) + round(pow($tkireg->upgrade_factor, $targetinfo['power'])) + round(pow($tkireg->upgrade_factor, $targetinfo['computer'])) + round(pow($tkireg->upgrade_factor, $targetinfo['sensors'])) + round(pow($tkireg->upgrade_factor, $targetinfo['beams'])) + round(pow($tkireg->upgrade_factor, $targetinfo['torp_launchers'])) + round(pow($tkireg->upgrade_factor, $targetinfo['shields'])) + round(pow($tkireg->upgrade_factor, $targetinfo['armor'])) + round(pow($tkireg->upgrade_factor, $targetinfo['cloak'])));
             $ship_salvage_rate = random_int(10, 20);
             $ship_salvage = $ship_value * $ship_salvage_rate / 100;
             $langvars['l_cmb_yousalvaged'] = str_replace("[cmb_salv_ore]", $salv_ore, $langvars['l_cmb_yousalvaged']);
             $langvars['l_cmb_yousalvaged'] = str_replace("[cmb_salv_organics]", $salv_organics, $langvars['l_cmb_yousalvaged']);
             $langvars['l_cmb_yousalvaged'] = str_replace("[cmb_salv_goods]", $salv_goods, $langvars['l_cmb_yousalvaged']);
             $langvars['l_cmb_yousalvaged'] = str_replace("[cmb_salvage_rate]", $ship_salvage_rate, $langvars['l_cmb_yousalvaged']);
             $langvars['l_cmb_yousalvaged'] = str_replace("[cmb_salvage]", $ship_salvage, $langvars['l_cmb_yousalvaged']);
             $langvars['l_cmb_yousalvaged2'] = str_replace("[cmb_number_rating_change]", number_format(abs($rating_change), 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']), $langvars['l_cmb_yousalvaged2']);
             echo $langvars['l_cmb_yousalvaged'] . "<br>" . $langvars['l_cmb_yousalvaged2'];
             $sql = "UPDATE ::prefix::ships SET ship_ore=ship_ore+:salv_ore, ship_organics=ship_organics+:salv_organics, ship_goods=ship_goods+:salv_goods, credits=credits+:ship_salvage WHERE ship_id = :ship_id";
             $stmt = $pdo_db->prepare($sql);
             $stmt->bindParam(':salv_ore', $salv_ore);
             $stmt->bindParam(':salv_organics', $salv_organics);
             $stmt->bindParam(':salv_goods', $salv_goods);
             $stmt->bindParam(':salv_salvage', $salv_salvage);
             $stmt->bindParam(':ship_id', $playerinfo['ship_id']);
             $update = $stmt->execute();
         }
         if ($targetinfo['dev_escapepod'] == "Y") {
             $rating = round($targetinfo['rating'] / 2);
             echo $langvars['l_cmb_escapepodlaunched'] . "<br><br>";
             echo "<br><br>ship_id = {$targetinfo['ship_id']}<br><br>";
             $test = $db->Execute("UPDATE {$db->prefix}ships SET hull=0,engines=0,power=0,sensors=0,computer=0,beams=0,torp_launchers=0,torps=0,armor=0,armor_pts=100,cloak=0,shields=0,sector=0,ship_organics=0,ship_ore=0,ship_goods=0,ship_energy = ?,ship_colonists=0,ship_fighters=100,dev_warpedit=0,dev_genesis=0,dev_beacon=0,dev_emerwarp=0,dev_escapepod='N',dev_fuelscoop='N',dev_minedeflector=0,on_planet='N',rating = ?, dev_lssd='N' WHERE ship_id = ?;", array($tkireg->start_energy, $rating, $targetinfo['ship_id']));
             \Tki\Db::LogDbErrors($pdo_db, $test, __LINE__, __FILE__);
             \Tki\PlayerLog::WriteLog($pdo_db, $targetinfo['ship_id'], LOG_ATTACK_LOSE, "{$playerinfo['character_name']}|Y");
             \Tki\Bounty::collect($pdo_db, $langvars, $playerinfo['ship_id'], $targetinfo['ship_id']);
         } else {
             \Tki\PlayerLog::WriteLog($pdo_db, $targetinfo['ship_id'], LOG_ATTACK_LOSE, "{$playerinfo['character_name']}|N");
             \Tki\Character::kill($pdo_db, $targetinfo['ship_id'], $langvars, $tkireg, false);
             \Tki\Bounty::collect($pdo_db, $langvars, $playerinfo['ship_id'], $targetinfo['ship_id']);
         }
     } else {
         $langvars['l_cmb_youdidntdestroyhim'] = str_replace("[cmb_targetinfo_ship_name]", $targetinfo['ship_name'], $langvars['l_cmb_youdidntdestroyhim']);
         echo $langvars['l_cmb_youdidntdestroyhim'] . "<br>";
         $target_armor_lost = $targetinfo['armor_pts'] - $targetarmor;
         $target_fighters_lost = $targetinfo['ship_fighters'] - $targetfighters;
         $target_energy = $targetinfo['ship_energy'];
         \Tki\PlayerLog::WriteLog($pdo_db, $targetinfo['ship_id'], LOG_ATTACKED_WIN, "{$playerinfo['character_name']}|{$target_armor_lost}|{$target_fighters_lost}");
         $update4 = $db->Execute("UPDATE {$db->prefix}ships SET ship_energy = ?, ship_fighters = ship_fighters - ?, armor_pts = armor_pts - ?, torps = torps - ? WHERE ship_id = ?;", array($target_energy, $target_fighters_lost, $target_armor_lost, $targettorpnum, $targetinfo['ship_id']));
         \Tki\Db::LogDbErrors($pdo_db, $update4, __LINE__, __FILE__);
     }
     echo "<br>_+_+_+_+_+_+_<br>";
     echo $langvars['l_cmb_shiptoshipcombatstats'] . "<br>";
     echo $langvars['l_cmb_statattackerbeams'] . ": {$attackerbeams}<br>";
     echo $langvars['l_cmb_statattackerfighters'] . ": {$attackerfighters}<br>";
     echo $langvars['l_cmb_statattackershields'] . ": {$attackershields}<br>";
     echo $langvars['l_cmb_statattackertorps'] . ": {$attackertorps}<br>";
     echo $langvars['l_cmb_statattackerarmor'] . ": {$attackerarmor}<br>";
     echo $langvars['l_cmb_statattackertorpdamage'] . ": {$attackertorpdamage}<br>";
     echo "_+_+_+_+_+_+<br>";
 }
コード例 #16
0
ファイル: Bases.php プロジェクト: thekabal/tki
 public static function buildBase(\PDO $pdo_db, array $langvars, int $planet_id, int $sector_id, Reg $tkireg)
 {
     $request = Request::createFromGlobals();
     echo "<br>";
     echo str_replace("[here]", "<a href='planet_report.php?preptype=1'>" . $langvars['l_here'] . "</a>", $langvars['l_pr_click_return_status']);
     echo "<br><br>";
     // Get playerinfo from database
     $sql = "SELECT * FROM ::prefix::ships WHERE email=:email LIMIT 1";
     $stmt = $pdo_db->prepare($sql);
     $stmt->bindParam(':email', $_SESSION['username']);
     $stmt->execute();
     $playerinfo = $stmt->fetch(\PDO::FETCH_ASSOC);
     $sql = "SELECT * FROM ::prefix::planets WHERE planet_id=:planet_id LIMIT 1";
     $stmt = $pdo_db->prepare($sql);
     $stmt->bindParam(':planet_id', $planet_id);
     $stmt->execute();
     $planetinfo = $stmt->fetch(\PDO::FETCH_ASSOC);
     // Error out and return if the Player isn't the owner of the Planet
     // Verify player owns the planet which is to have the base created on.
     if ($planetinfo['owner'] != $playerinfo['ship_id']) {
         echo "<div style='color:#f00; font-size:16px;'>" . $langvars['l_pr_make_base_failed'] . "</div>\n";
         echo "<div style='color:#f00; font-size:16px;'>" . $langvars['l_pr_invalid_info'] . "</div>\n";
         return (bool) false;
     }
     if (!is_numeric($planet_id) || !is_numeric($sector_id)) {
         $ip = $request->query->get('REMOTE_ADDR');
         $hack_id = 0x1337;
         \Tki\AdminLog::writeLog($pdo_db, LOG_ADMIN_PLANETCHEAT, "{$hack_id}|{$ip}|{$planet_id}|{$sector_id}|{$playerinfo['ship_id']}");
         echo "<div style='color:#f00; font-size:16px;'>" . $langvars['l_pr_make_base_failed'] . "</div>\n";
         return (bool) false;
     }
     // Build a base
     \Tki\Realspace\realSpaceMove($pdo_db, $langvars, $sector_id, $tkireg);
     echo "<br>";
     echo str_replace("[here]", "<a href='planet.php?planet_id={$planet_id}'>" . $langvars['l_here'] . "</a>", $langvars['l_pr_click_return_planet']);
     echo "<br><br>";
     if ($planetinfo['ore'] >= $tkireg->base_ore && $planetinfo['organics'] >= $tkireg->base_organics && $planetinfo['goods'] >= $tkireg->base_goods && $planetinfo['credits'] >= $tkireg->base_credits) {
         // Create The Base
         $stmt = $pdo_db->prepare("UPDATE ::prefix::planets SET base='Y', ore = :planetore - :baseore, organics = :planetorg - :baseorg, goods = :planetgoods - :basegoods, credits = :planetcredits - :basecredits WHERE planet_id = :planet_id");
         $stmt->bindParam(':planetore', $planetinfo['ore']);
         $stmt->bindParam(':baseore', $tkireg->base_ore);
         $stmt->bindParam(':planetorg', $planetinfo['organics']);
         $stmt->bindParam(':baseorg', $tkireg->base_organics);
         $stmt->bindParam(':planetgoods', $planetinfo['goods']);
         $stmt->bindParam(':basegoods', $tkireg->base_goods);
         $stmt->bindParam(':planetcredits', $planetinfo['credits']);
         $stmt->bindParam(':basecredits', $tkireg->base_credits);
         $stmt->bindParam(':planet_id', $planet_id);
         $result = $stmt->execute();
         \Tki\Db::logDbErrors($pdo_db, $result, __LINE__, __FILE__);
         // Update User Turns
         $stmt = $pdo_db->prepare("UPDATE ::prefix::ships SET turns = turns - 1, turns_used = turns_used + 1 WHERE ship_id = :ship_id");
         $stmt->bindParam(':ship_id', $playerinfo['ship_id']);
         $result = $stmt->execute();
         \Tki\Db::logDbErrors($pdo_db, $result, __LINE__, __FILE__);
         // Refresh Planet Info
         $sql = "SELECT * FROM ::prefix::planets WHERE planet_id=:planet_id LIMIT 1";
         $stmt = $pdo_db->prepare($sql);
         $stmt->bindParam(':planet_id', $planet_id);
         $stmt->execute();
         $planetinfo = $stmt->fetch(\PDO::FETCH_ASSOC);
         // Notify User Of Base Results
         echo $langvars['l_planet_bbuild'] . "<br><br>";
         // Calc Ownership and Notify User Of Results
         $ownership = \Tki\Ownership::calc($pdo_db, $playerinfo['sector'], $tkireg->min_bases_to_own, $langvars);
         if ($ownership !== null) {
             echo $ownership . "<p>";
         }
         return $planetinfo;
     }
 }
コード例 #17
0
ファイル: Traderoute2.php プロジェクト: thekabal/tki
 public static function traderouteCheckCompatible(\ADODB_mysqli $db, \PDO $pdo_db, string $lang, $type1, $type2, $move, $circuit, $src, $dest, array $playerinfo, Reg $tkireg, Smarty $template)
 {
     $langvars = \Tki\Translate::load($pdo_db, $lang, array('traderoutes', 'common', 'global_includes', 'global_funcs', 'footer', 'regional'));
     // Check circuit compatibility (we only use types 1 and 2 so block anything else)
     if ($circuit != "1" && $circuit != "2") {
         \Tki\AdminLog::writeLog($pdo_db, LOG_RAW, "{$playerinfo['ship_id']}|Tried to use an invalid circuit_type of '{$circuit}', This is normally a result from using an external page and should be banned.");
         self::traderouteDie($pdo_db, $lang, $tkireg, "Invalid Circuit type!<br>*** Possible Exploit has been reported to the admin. ***", $template);
     }
     // Check warp links compatibility
     if ($move == 'warp') {
         $query = $db->Execute("SELECT link_id FROM {$db->prefix}links WHERE link_start = ? AND link_dest = ?;", array($src['sector_id'], $dest['sector_id']));
         \Tki\Db::LogDbErrors($pdo_db, $query, __LINE__, __FILE__);
         if ($query->EOF) {
             $langvars['l_tdr_nowlink1'] = str_replace("[tdr_src_sector_id]", $src['sector_id'], $langvars['l_tdr_nowlink1']);
             $langvars['l_tdr_nowlink1'] = str_replace("[tdr_dest_sector_id]", $dest['sector_id'], $langvars['l_tdr_nowlink1']);
             self::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_nowlink1'], $template);
         }
         if ($circuit == '2') {
             $query = $db->Execute("SELECT link_id FROM {$db->prefix}links WHERE link_start = ? AND link_dest = ?;", array($dest['sector_id'], $src['sector_id']));
             \Tki\Db::LogDbErrors($pdo_db, $query, __LINE__, __FILE__);
             if ($query->EOF) {
                 $langvars['l_tdr_nowlink2'] = str_replace("[tdr_src_sector_id]", $src['sector_id'], $langvars['l_tdr_nowlink2']);
                 $langvars['l_tdr_nowlink2'] = str_replace("[tdr_dest_sector_id]", $dest['sector_id'], $langvars['l_tdr_nowlink2']);
                 self::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_nowlink2'], $template);
             }
         }
     }
     // Check ports compatibility
     if ($type1 == 'port') {
         if ($src['port_type'] == 'special') {
             if ($type2 != 'planet' && $type2 != 'team_planet') {
                 self::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_sportissrc'], $template);
             }
             if ($dest['owner'] != $playerinfo['ship_id'] && ($dest['team'] == 0 || $dest['team'] != $playerinfo['team'])) {
                 self::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_notownplanet'], $template);
             }
         } else {
             if ($type2 == 'planet') {
                 self::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_planetisdest'], $template);
             }
             if ($src['port_type'] == $dest['port_type']) {
                 self::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_samecom'], $template);
             }
         }
     } else {
         if (array_key_exists('port_type', $dest) === true && $dest['port_type'] == 'special') {
             self::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_sportcom'], $template);
         }
     }
 }
コード例 #18
0
ファイル: Planet.php プロジェクト: thekabal/tki
 public static function planetCombat(\PDO $pdo_db, \ADODB_mysqli $db, string $lang, array $langvars, Reg $tkireg, Smarty $template, array $playerinfo, $ownerinfo, $planetinfo)
 {
     if ($playerinfo['turns'] < 1) {
         echo $langvars['l_cmb_atleastoneturn'] . "<br><br>";
         \Tki\Text::gotomain($pdo_db, $lang);
         \Tki\Footer::display($pdo_db, $lang, $tkireg, $template);
         die;
     }
     // Planetary defense system calculation
     $planetbeams = \Tki\CalcLevels::planetBeams($pdo_db, $ownerinfo, $tkireg->base_defense, $planetinfo);
     $planetfighters = $planetinfo['fighters'];
     $planetshields = \Tki\CalcLevels::planetShields($pdo_db, $ownerinfo, $tkireg->base_defense, $planetinfo);
     $planettorps = \Tki\CalcLevels::planetTorps($pdo_db, $ownerinfo, $planetinfo, $tkireg);
     // Attacking ship calculations
     $attackerbeams = \Tki\CalcLevels::beams($playerinfo['beams'], $tkireg);
     $attackerfighters = $playerinfo['ship_fighters'];
     $attackershields = \Tki\CalcLevels::shields($playerinfo['shields'], $tkireg);
     $attackertorps = round(pow($tkireg->level_factor, $playerinfo['torp_launchers'])) * 2;
     $attackerarmor = $playerinfo['armor_pts'];
     // Now modify player beams, shields and torpedos on available materiel
     $tkireg->start_energy = $playerinfo['ship_energy'];
     // Beams
     if ($attackerbeams > $playerinfo['ship_energy']) {
         $attackerbeams = $playerinfo['ship_energy'];
     }
     $playerinfo['ship_energy'] = $playerinfo['ship_energy'] - $attackerbeams;
     // Shields
     if ($attackershields > $playerinfo['ship_energy']) {
         $attackershields = $playerinfo['ship_energy'];
     }
     $playerinfo['ship_energy'] = $playerinfo['ship_energy'] - $attackershields;
     // Torpedos
     if ($attackertorps > $playerinfo['torps']) {
         $attackertorps = $playerinfo['torps'];
     }
     $playerinfo['torps'] = $playerinfo['torps'] - $attackertorps;
     // Setup torp damage rate for both Planet and Ship
     $planettorpdamage = $tkireg->torp_dmg_rate * $planettorps;
     $attackertorpdamage = $tkireg->torp_dmg_rate * $attackertorps;
     echo "\n        <center>\n        <hr>\n        <table width='75%' border='0'>\n        <tr align='center'>\n        <td width='9%' height='27'></td>\n        <td width='12%' height='27'><font color='white'>" . $langvars['l_cmb_beams'] . "</font></td>\n        <td width='17%' height='27'><font color='white'>" . $langvars['l_cmb_fighters'] . "</font></td>\n        <td width='18%' height='27'><font color='white'>" . $langvars['l_cmb_shields'] . "</font></td>\n        <td width='11%' height='27'><font color='white'>" . $langvars['l_cmb_torps'] . "</font></td>\n        <td width='22%' height='27'><font color='white'>" . $langvars['l_cmb_torpdamage'] . "</font></td>\n        <td width='11%' height='27'><font color='white'>" . $langvars['l_cmb_armor'] . "</font></td>\n        </tr>\n        <tr align='center'>\n        <td width='9%'> <font color='red'>" . $langvars['l_cmb_you'] . "</td>\n        <td width='12%'><font color='red'><strong>" . $attackerbeams . "</strong></font></td>\n        <td width='17%'><font color='red'><strong>" . $attackerfighters . "</strong></font></td>\n        <td width='18%'><font color='red'><strong>" . $attackershields . "</strong></font></td>\n        <td width='11%'><font color='red'><strong>" . $attackertorps . "</strong></font></td>\n        <td width='22%'><font color='red'><strong>" . $attackertorpdamage . "</strong></font></td>\n        <td width='11%'><font color='red'><strong>" . $attackerarmor . "</strong></font></td>\n        </tr>\n        <tr align='center'>\n        <td width='9%'> <font color='#6098F8'>" . $langvars['l_cmb_planet'] . "</font></td>\n        <td width='12%'><font color='#6098F8'><strong>" . $planetbeams . "</strong></font></td>\n        <td width='17%'><font color='#6098F8'><strong>" . $planetfighters . "</strong></font></td>\n        <td width='18%'><font color='#6098F8'><strong>" . $planetshields . "</strong></font></td>\n        <td width='11%'><font color='#6098F8'><strong>" . $planettorps . "</strong></font></td>\n        <td width='22%'><font color='#6098F8'><strong>" . $planettorpdamage . "</strong></font></td>\n        <td width='11%'><font color='#6098F8'><strong>N/A</strong></font></td>\n        </tr>\n        </table>\n        <hr>\n        </center>\n        ";
     // Begin actual combat calculations
     echo "<br><center><strong><font size='+2'>" . $langvars['l_cmb_combatflow'] . "</font></strong><br><br>\n";
     echo "<table width='75%' border='0'><tr align='center'><td><font color='red'>" . $langvars['l_cmb_you'] . "</font></td><td><font color='#6098F8'>" . $langvars['l_cmb_defender'] . "</font></td>\n";
     echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_attackingplanet'] . " " . $playerinfo['sector'] . "</strong></font></td><td></td>";
     echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_youfireyourbeams'] . "</strong></font></td><td></td>\n";
     if ($planetfighters > 0 && $attackerbeams > 0) {
         if ($attackerbeams > $planetfighters) {
             $langvars['l_cmb_defenselost'] = str_replace("[cmb_planetfighters]", $planetfighters, $langvars['l_cmb_defenselost']);
             echo "<tr align='center'><td></td><td><font color='#6098F8'><strong>" . $langvars['l_cmb_defenselost'] . "</strong></font>";
             $attackerbeams = $attackerbeams - $planetfighters;
             $planetfighters = 0;
         } else {
             $langvars['l_cmb_defenselost2'] = str_replace("[cmb_attackerbeams]", $attackerbeams, $langvars['l_cmb_defenselost2']);
             $planetfighters = $planetfighters - $attackerbeams;
             echo "<tr align='center'><td></td><td><font color='#6098F8'><strong>" . $langvars['l_cmb_defenselost2'] . "</strong></font>";
             $attackerbeams = 0;
         }
     }
     if ($attackerfighters > 0 && $planetbeams > 0) {
         // If there are more beams on the planet than attacker has fighters
         if ($planetbeams > round($attackerfighters / 2)) {
             // Half the attacker fighters
             $temp = round($attackerfighters / 2);
             // Attacker loses half his fighters
             $lost = $attackerfighters - $temp;
             // Set attacker fighters to 1/2 it's original value
             $attackerfighters = $temp;
             // Subtract half the attacker fighters from available planetary beams
             $planetbeams = $planetbeams - $lost;
             $langvars['l_cmb_planetarybeams'] = str_replace("[cmb_temp]", $temp, $langvars['l_cmb_planetarybeams']);
             echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_planetarybeams'] . "</strong></font><td></td>";
         } else {
             $langvars['l_cmb_planetarybeams2'] = str_replace("[cmb_planetbeams]", $planetbeams, $langvars['l_cmb_planetarybeams2']);
             $attackerfighters = $attackerfighters - $planetbeams;
             echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_planetarybeams2'] . "</strong></font><td></td>";
             $planetbeams = 0;
         }
     }
     if ($attackerbeams > 0) {
         if ($attackerbeams > $planetshields) {
             $attackerbeams = $attackerbeams - $planetshields;
             $planetshields = 0;
             echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_youdestroyedplanetshields'] . "</font></strong><td></td>";
         } else {
             $langvars['l_cmb_beamsexhausted'] = str_replace("[cmb_attackerbeams]", $attackerbeams, $langvars['l_cmb_beamsexhausted']);
             echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_beamsexhausted'] . "</font></strong><td></td>";
             $planetshields = $planetshields - $attackerbeams;
             $attackerbeams = 0;
         }
     }
     if ($planetbeams > 0) {
         if ($planetbeams > $attackershields) {
             $planetbeams = $planetbeams - $attackershields;
             $attackershields = 0;
             echo "<tr align='center'><td></td><td><font color='#6098F8'><strong>" . $langvars['l_cmb_breachedyourshields'] . "</font></strong></td>";
         } else {
             $attackershields = $attackershields - $planetbeams;
             $langvars['l_cmb_destroyedyourshields'] = str_replace("[cmb_planetbeams]", $planetbeams, $langvars['l_cmb_destroyedyourshields']);
             echo "<tr align='center'><td></td><font color='#6098F8'><strong>" . $langvars['l_cmb_destroyedyourshields'] . "</font></strong></td>";
             $planetbeams = 0;
         }
     }
     if ($planetbeams > 0) {
         if ($planetbeams > $attackerarmor) {
             $attackerarmor = 0;
             echo "<tr align='center'><td></td><td><font color='#6098F8'><strong>" . $langvars['l_cmb_breachedyourarmor'] . "</strong></font></td>";
         } else {
             $attackerarmor = $attackerarmor - $planetbeams;
             $langvars['l_cmb_destroyedyourarmor'] = str_replace("[cmb_planetbeams]", $planetbeams, $langvars['l_cmb_destroyedyourarmor']);
             echo "<tr align='center'><td></td><td><font color='#6098F8'><strong>" . $langvars['l_cmb_destroyedyourarmor'] . "</font></strong></td>";
         }
     }
     echo "<tr align='center'><td><font color='YELLOW'><strong>" . $langvars['l_cmb_torpedoexchangephase'] . "</strong></font></td><td><strong><font color='YELLOW'>" . $langvars['l_cmb_torpedoexchangephase'] . "</strong></font></td><br>";
     if ($planetfighters > 0 && $attackertorpdamage > 0) {
         if ($attackertorpdamage > $planetfighters) {
             $langvars['l_cmb_nofightersleft'] = str_replace("[cmb_planetfighters]", $planetfighters, $langvars['l_cmb_nofightersleft']);
             echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_nofightersleft'] . "</font></strong></td><td></td>";
             $attackertorpdamage = $attackertorpdamage - $planetfighters;
             $planetfighters = 0;
         } else {
             $planetfighters = $planetfighters - $attackertorpdamage;
             $langvars['l_cmb_youdestroyfighters'] = str_replace("[cmb_attackertorpdamage]", $attackertorpdamage, $langvars['l_cmb_youdestroyfighters']);
             echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_youdestroyfighters'] . "</font></strong></td><td></td>";
             $attackertorpdamage = 0;
         }
     }
     if ($attackerfighters > 0 && $planettorpdamage > 0) {
         if ($planettorpdamage > round($attackerfighters / 2)) {
             $temp = round($attackerfighters / 2);
             $lost = $attackerfighters - $temp;
             $attackerfighters = $temp;
             $planettorpdamage = $planettorpdamage - $lost;
             $langvars['l_cmb_planettorpsdestroy'] = str_replace("[cmb_temp]", $temp, $langvars['l_cmb_planettorpsdestroy']);
             echo "<tr align='center'><td></td><td><font color='red'><strong>" . $langvars['l_cmb_planettorpsdestroy'] . "</strong></font></td>";
         } else {
             $attackerfighters = $attackerfighters - $planettorpdamage;
             $langvars['l_cmb_planettorpsdestroy2'] = str_replace("[cmb_planettorpdamage]", $planettorpdamage, $langvars['l_cmb_planettorpsdestroy2']);
             echo "<tr align='center'><td></td><td><font color='red'><strong>" . $langvars['l_cmb_planettorpsdestroy2'] . "</strong></font></td>";
             $planettorpdamage = 0;
         }
     }
     if ($planettorpdamage > 0) {
         if ($planettorpdamage > $attackerarmor) {
             $attackerarmor = 0;
             echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_torpsbreachedyourarmor'] . "</strong></font></td><td></td>";
         } else {
             $attackerarmor = $attackerarmor - $planettorpdamage;
             $langvars['l_cmb_planettorpsdestroy3'] = str_replace("[cmb_planettorpdamage]", $planettorpdamage, $langvars['l_cmb_planettorpsdestroy3']);
             echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_planettorpsdestroy3'] . "</strong></font></td><td></td>";
         }
     }
     if ($attackertorpdamage > 0 && $planetfighters > 0) {
         $planetfighters = $planetfighters - $attackertorpdamage;
         if ($planetfighters < 0) {
             $planetfighters = 0;
             echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_youdestroyedallfighters'] . "</strong></font></td><td></td>";
         } else {
             $langvars['l_cmb_youdestroyplanetfighters'] = str_replace("[cmb_attackertorpdamage]", $attackertorpdamage, $langvars['l_cmb_youdestroyplanetfighters']);
             echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_youdestroyplanetfighters'] . "</strong></font></td><td></td>";
         }
     }
     echo "<tr align='center'><td><font color='YELLOW'><strong>" . $langvars['l_cmb_fightercombatphase'] . "</strong></font></td><td><strong><font color='YELLOW'>" . $langvars['l_cmb_fightercombatphase'] . "</strong></font></td><br>";
     if ($attackerfighters > 0 && $planetfighters > 0) {
         if ($attackerfighters > $planetfighters) {
             echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_youdestroyedallfighters2'] . "</strong></font></td><td></td>";
             $tempplanetfighters = 0;
         } else {
             $langvars['l_cmb_youdestroyplanetfighters2'] = str_replace("[cmb_attackerfighters]", $attackerfighters, $langvars['l_cmb_youdestroyplanetfighters2']);
             echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_youdestroyplanetfighters2'] . "</strong></font></td><td></td>";
             $tempplanetfighters = $planetfighters - $attackerfighters;
         }
         if ($planetfighters > $attackerfighters) {
             echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_allyourfightersdestroyed'] . "</strong></font></td><td></td>";
             $tempplayfighters = 0;
         } else {
             $tempplayfighters = $attackerfighters - $planetfighters;
             $langvars['l_cmb_fightertofighterlost'] = str_replace("[cmb_planetfighters]", $planetfighters, $langvars['l_cmb_fightertofighterlost']);
             echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_fightertofighterlost'] . "</strong></font></td><td></td>";
         }
         $attackerfighters = $tempplayfighters;
         $planetfighters = $tempplanetfighters;
     }
     if ($attackerfighters > 0 && $planetshields > 0) {
         if ($attackerfighters > $planetshields) {
             $attackerfighters = $attackerfighters - round($planetshields / 2);
             echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_youbreachedplanetshields'] . "</strong></font></td><td></td>";
             $planetshields = 0;
         } else {
             $langvars['l_cmb_shieldsremainup'] = str_replace("[cmb_attackerfighters]", $attackerfighters, $langvars['l_cmb_shieldsremainup']);
             echo "<tr align='center'><td></td><font color='#6098F8'><strong>" . $langvars['l_cmb_shieldsremainup'] . "</strong></font></td>";
             $planetshields = $planetshields - $attackerfighters;
         }
     }
     if ($planetfighters > 0) {
         if ($planetfighters > $attackerarmor) {
             $attackerarmor = 0;
             echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_fighterswarm'] . "</strong></font></td><td></td>";
         } else {
             $attackerarmor = $attackerarmor - $planetfighters;
             echo "<tr align='center'><td><font color='red'><strong>" . $langvars['l_cmb_swarmandrepel'] . "</strong></font></td><td></td>";
         }
     }
     echo "</table></center>\n";
     // Send each docked ship in sequence to attack agressor
     $result4 = $db->Execute("SELECT * FROM {$db->prefix}ships WHERE planet_id = ? AND on_planet = 'Y'", array($planetinfo['planet_id']));
     \Tki\Db::LogDbErrors($pdo_db, $result4, __LINE__, __FILE__);
     $shipsonplanet = $result4->RecordCount();
     if ($shipsonplanet > 0) {
         $langvars['l_cmb_shipdock'] = str_replace("[cmb_shipsonplanet]", $shipsonplanet, $langvars['l_cmb_shipdock']);
         echo "<br><br><center>" . $langvars['l_cmb_shipdock'] . "<br>" . $langvars['l_cmb_engshiptoshipcombat'] . "</center><br><br>\n";
         while (!$result4->EOF) {
             $onplanet = $result4->fields;
             if ($attackerfighters < 0) {
                 $attackerfighters = 0;
             }
             if ($attackertorps < 0) {
                 $attackertorps = 0;
             }
             if ($attackershields < 0) {
                 $attackershields = 0;
             }
             if ($attackerbeams < 0) {
                 $attackerbeams = 0;
             }
             if ($attackerarmor < 1) {
                 break;
             }
             echo "<br>-" . $onplanet['ship_name'] . " " . $langvars['l_cmb_approachattackvector'] . "-<br>";
             \Tki\Combat::shipToShip($pdo_db, $db, $langvars, $onplanet['ship_id'], $tkireg, $playerinfo, $attackerbeams, $attackerfighters, $attackershields, $attackertorps, $attackerarmor, $attackertorpdamage);
             $result4->MoveNext();
         }
     } else {
         echo "<br><br><center>" . $langvars['l_cmb_noshipsdocked'] . "</center><br><br>\n";
     }
     if ($attackerarmor < 1) {
         $free_ore = round($playerinfo['ship_ore'] / 2);
         $free_organics = round($playerinfo['ship_organics'] / 2);
         $free_goods = round($playerinfo['ship_goods'] / 2);
         $ship_value = $tkireg->upgrade_cost * (round(pow($tkireg->upgrade_factor, $playerinfo['hull'])) + round(pow($tkireg->upgrade_factor, $playerinfo['engines'])) + round(pow($tkireg->upgrade_factor, $playerinfo['power'])) + round(pow($tkireg->upgrade_factor, $playerinfo['computer'])) + round(pow($tkireg->upgrade_factor, $playerinfo['sensors'])) + round(pow($tkireg->upgrade_factor, $playerinfo['beams'])) + round(pow($tkireg->upgrade_factor, $playerinfo['torp_launchers'])) + round(pow($tkireg->upgrade_factor, $playerinfo['shields'])) + round(pow($tkireg->upgrade_factor, $playerinfo['armor'])) + round(pow($tkireg->upgrade_factor, $playerinfo['cloak'])));
         $ship_salvage_rate = random_int(0, 10);
         $ship_salvage = $ship_value * $ship_salvage_rate / 100;
         echo "<br><center><font size='+2' COLOR='red'><strong>" . $langvars['l_cmb_yourshipdestroyed'] . "</font></strong></center><br>";
         if ($playerinfo['dev_escapepod'] == "Y") {
             echo "<center><font color='white'>" . $langvars['l_cmb_escapepod'] . "</font></center><br><br>";
             $resx = $db->Execute("UPDATE {$db->prefix}ships SET hull=0,engines=0,power=0,sensors=0,computer=0,beams=0,torp_launchers=0,torps=0,armor=0,armor_pts=100,cloak=0,shields=0,sector=0,ship_organics=0,ship_ore=0,ship_goods=0,ship_energy = ?,ship_colonists=0,ship_fighters=100,dev_warpedit=0,dev_genesis=0,dev_beacon=0,dev_emerwarp=0,dev_escapepod='N',dev_fuelscoop='N',dev_minedeflector=0,on_planet='N',dev_lssd='N' WHERE ship_id = ?;", array($tkireg->start_energy, $playerinfo['ship_id']));
             \Tki\Db::LogDbErrors($pdo_db, $resx, __LINE__, __FILE__);
             \Tki\Bounty::collect($pdo_db, $langvars, $planetinfo['owner'], $playerinfo['ship_id']);
         } else {
             \Tki\Character::kill($pdo_db, $playerinfo['ship_id'], $langvars, $tkireg, false);
             \Tki\Bounty::collect($pdo_db, $langvars, $planetinfo['owner'], $playerinfo['ship_id']);
         }
     } else {
         $free_ore = 0;
         $free_goods = 0;
         $free_organics = 0;
         $ship_salvage_rate = 0;
         $ship_salvage = 0;
         $planetrating = $ownerinfo['hull'] + $ownerinfo['engines'] + $ownerinfo['computer'] + $ownerinfo['beams'] + $ownerinfo['torp_launchers'] + $ownerinfo['shields'] + $ownerinfo['armor'];
         if ($ownerinfo['rating'] != 0) {
             $rating_change = $ownerinfo['rating'] / abs($ownerinfo['rating']) * $planetrating * 10;
         } else {
             $rating_change = -100;
         }
         echo "<center><br><strong><font size='+2'>" . $langvars['l_cmb_finalcombatstats'] . "</font></strong><br><br>";
         $fighters_lost = $playerinfo['ship_fighters'] - $attackerfighters;
         $langvars['l_cmb_youlostfighters'] = str_replace("[cmb_fighters_lost]", $fighters_lost, $langvars['l_cmb_youlostfighters']);
         $langvars['l_cmb_youlostfighters'] = str_replace("[cmb_playerinfo_ship_fighters]", $playerinfo['ship_fighters'], $langvars['l_cmb_youlostfighters']);
         echo $langvars['l_cmb_youlostfighters'] . "<br>";
         $armor_lost = $playerinfo['armor_pts'] - $attackerarmor;
         $langvars['l_cmb_youlostarmorpoints'] = str_replace("[cmb_armor_lost]", $armor_lost, $langvars['l_cmb_youlostarmorpoints']);
         $langvars['l_cmb_youlostarmorpoints'] = str_replace("[cmb_playerinfo_armor_pts]", $playerinfo['armor_pts'], $langvars['l_cmb_youlostarmorpoints']);
         $langvars['l_cmb_youlostarmorpoints'] = str_replace("[cmb_attackerarmor]", $attackerarmor, $langvars['l_cmb_youlostarmorpoints']);
         echo $langvars['l_cmb_youlostarmorpoints'] . "<br>";
         $energy = $playerinfo['ship_energy'];
         $energy_lost = $tkireg->start_energy - $playerinfo['ship_energy'];
         $langvars['l_cmb_energyused'] = str_replace("[cmb_energy_lost]", $energy_lost, $langvars['l_cmb_energyused']);
         $langvars['l_cmb_energyused'] = str_replace("[cmb_playerinfo_ship_energy]", $tkireg->start_energy, $langvars['l_cmb_energyused']);
         echo $langvars['l_cmb_energyused'] . "<br></center>";
         $resx = $db->Execute("UPDATE {$db->prefix}ships SET ship_energy = ?, ship_fighters = ship_fighters - ?, torps = torps - ?, armor_pts = armor_pts - ?, rating = rating - ? WHERE ship_id = ?;", array($energy, $fighters_lost, $attackertorps, $armor_lost, $rating_change, $playerinfo['ship_id']));
         \Tki\Db::LogDbErrors($pdo_db, $resx, __LINE__, __FILE__);
     }
     $result4 = $db->Execute("SELECT * FROM {$db->prefix}ships WHERE planet_id = ? AND on_planet = 'Y';", array($planetinfo['planet_id']));
     \Tki\Db::LogDbErrors($pdo_db, $result4, __LINE__, __FILE__);
     $shipsonplanet = $result4->RecordCount();
     if ($planetshields < 1 && $planetfighters < 1 && $attackerarmor > 0 && $shipsonplanet == 0) {
         echo "<br><br><center><font color='GREEN'><strong>" . $langvars['l_cmb_planetdefeated'] . "</strong></font></center><br><br>";
         // Patch to stop players dumping credits for other players.
         $self_tech = \Tki\CalcLevels::avgTech($playerinfo);
         $target_tech = round(\Tki\CalcLevels::avgTech($ownerinfo));
         $roll = random_int(0, (int) $target_tech);
         if ($roll > $self_tech) {
             // Reset Planet Assets.
             $sql = "UPDATE {$db->prefix}planets ";
             $sql .= "SET organics = '0', ore = '0', goods = '0', energy = '0', colonists = '2', credits = '0', fighters = '0', torps = '0', team = '0', base = 'N', sells = 'N', prod_organics = '20', prod_ore = '20', prod_goods = '20', prod_energy = '20', prod_fighters = '10', prod_torp = '10' ";
             $sql .= "WHERE planet_id = ? LIMIT 1;";
             $resx = $db->Execute($sql, array($planetinfo['planet_id']));
             \Tki\Db::LogDbErrors($pdo_db, $resx, __LINE__, __FILE__);
             echo "<div style='text-align:center; font-size:18px; color:#f00;'>The planet become unstable due to not being looked after, and all life and assets have been destroyed.</div>\n";
         }
         if ($tkireg->min_value_capture != 0) {
             $playerscore = \Tki\Score::updateScore($pdo_db, $playerinfo['ship_id'], $tkireg, $playerinfo);
             $playerscore *= $playerscore;
             $planetscore = $planetinfo['organics'] * $tkireg->organics_price + $planetinfo['ore'] * $tkireg->ore_price + $planetinfo['goods'] * $tkireg->goods_price + $planetinfo['energy'] * $tkireg->energy_price + $planetinfo['fighters'] * $tkireg->fighter_price + $planetinfo['torps'] * $tkireg->torpedo_price + $planetinfo['colonists'] * $tkireg->colonist_price + $planetinfo['credits'];
             $planetscore = $planetscore * $tkireg->min_value_capture / 100;
             if ($playerscore < $planetscore) {
                 echo "<center>" . $langvars['l_cmb_citizenswanttodie'] . "</center><br><br>";
                 $resx = $db->Execute("DELETE FROM {$db->prefix}planets WHERE planet_id = ?;", array($planetinfo['planet_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $resx, __LINE__, __FILE__);
                 \Tki\PlayerLog::WriteLog($pdo_db, $ownerinfo['ship_id'], LOG_PLANET_DEFEATED_D, "{$planetinfo['name']}|{$playerinfo['sector']}|{$playerinfo['character_name']}");
                 \Tki\AdminLog::writeLog($pdo_db, LOG_ADMIN_PLANETDEL, "{$playerinfo['character_name']}|{$ownerinfo['character_name']}|{$playerinfo['sector']}");
                 \Tki\Score::updateScore($pdo_db, $ownerinfo['ship_id'], $tkireg, $playerinfo);
             } else {
                 $langvars['l_cmb_youmaycapture'] = str_replace("[capture]", "<a href='planet.php?planet_id=" . $planetinfo['planet_id'] . "&amp;command=capture'>" . $langvars['l_planet_capture1'] . "</a>", $langvars['l_cmb_youmaycapture']);
                 echo "<center><font color=red>" . $langvars['l_cmb_youmaycapture'] . "</font></center><br><br>";
                 \Tki\PlayerLog::WriteLog($pdo_db, $ownerinfo['ship_id'], LOG_PLANET_DEFEATED, "{$planetinfo['name']}|{$playerinfo['sector']}|{$playerinfo['character_name']}");
                 \Tki\Score::updateScore($pdo_db, $ownerinfo['ship_id'], $tkireg, $playerinfo);
                 $update7a = $db->Execute("UPDATE {$db->prefix}planets SET owner=0, fighters=0, torps=torps-?, base='N', defeated='Y' WHERE planet_id = ?;", array($planettorps, $planetinfo['planet_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $update7a, __LINE__, __FILE__);
             }
         } else {
             $langvars['l_cmb_youmaycapture'] = str_replace("[capture]", "<a href='planet.php?planet_id=" . $planetinfo['planet_id'] . "&amp;command=capture'>" . $langvars['l_planet_capture1'] . "</a>", $langvars['l_cmb_youmaycapture']);
             echo "<center>" . $langvars['l_cmb_youmaycapture'] . "</center><br><br>";
             \Tki\PlayerLog::WriteLog($pdo_db, $ownerinfo['ship_id'], LOG_PLANET_DEFEATED, "{$planetinfo['name']}|{$playerinfo['sector']}|{$playerinfo['character_name']}");
             \Tki\Score::updateScore($pdo_db, $ownerinfo['ship_id'], $tkireg, $playerinfo);
             $update7a = $db->Execute("UPDATE {$db->prefix}planets SET owner=0,fighters=0, torps=torps-?, base='N', defeated='Y' WHERE planet_id = ?;", array($planettorps, $planetinfo['planet_id']));
             \Tki\Db::LogDbErrors($pdo_db, $update7a, __LINE__, __FILE__);
         }
         \Tki\Ownership::calc($pdo_db, $planetinfo['sector_id'], $tkireg->min_bases_to_own, $langvars);
     } else {
         echo "<br><br><center><font color='#6098F8'><strong>" . $langvars['l_cmb_planetnotdefeated'] . "</strong></font></center><br><br>";
         $fighters_lost = $planetinfo['fighters'] - $planetfighters;
         $langvars['l_cmb_fighterloststat'] = str_replace("[cmb_fighters_lost]", $fighters_lost, $langvars['l_cmb_fighterloststat']);
         $langvars['l_cmb_fighterloststat'] = str_replace("[cmb_planetinfo_fighters]", $planetinfo['fighters'], $langvars['l_cmb_fighterloststat']);
         $langvars['l_cmb_fighterloststat'] = str_replace("[cmb_planetfighters]", $planetfighters, $langvars['l_cmb_fighterloststat']);
         $energy = $planetinfo['energy'];
         \Tki\PlayerLog::WriteLog($pdo_db, $ownerinfo['ship_id'], LOG_PLANET_NOT_DEFEATED, "{$planetinfo['name']}|{$playerinfo['sector']}|{$playerinfo['character_name']}|{$free_ore}|{$free_organics}|{$free_goods}|{$ship_salvage_rate}|{$ship_salvage}");
         \Tki\Score::updateScore($pdo_db, $ownerinfo['ship_id'], $tkireg, $playerinfo);
         $update7b = $db->Execute("UPDATE {$db->prefix}planets SET energy = ?, fighters = fighters - ?, torps = torps - ?, ore = ore + ?, goods = goods + ?, organics = organics + ?, credits = credits + ? WHERE planet_id = ?;", array($energy, $fighters_lost, $planettorps, $free_ore, $free_goods, $free_organics, $ship_salvage, $planetinfo['planet_id']));
         \Tki\Db::LogDbErrors($pdo_db, $update7b, __LINE__, __FILE__);
     }
     $update = $db->Execute("UPDATE {$db->prefix}ships SET turns = turns - 1, turns_used = turns_used + 1 WHERE ship_id = ?", array($playerinfo['ship_id']));
     \Tki\Db::LogDbErrors($pdo_db, $update, __LINE__, __FILE__);
 }
コード例 #19
0
ファイル: Score.php プロジェクト: thekabal/tki
 public static function updateScore(\PDO $pdo_db, int $ship_id, Reg $tkireg, array $playerinfo) : int
 {
     // Not currently used in calculation!
     // $base_ore = $tkireg->base_ore;
     // $base_goods = $tkireg->base_goods;
     // $base_organics = $tkireg->base_organics;
     // These are all SQL Queries, so treat them like them.
     $calc_hull = "ROUND(POW(" . $tkireg->upgrade_factor . ", hull))";
     $calc_engines = "ROUND(POW(" . $tkireg->upgrade_factor . ", engines))";
     $calc_power = "ROUND(POW(" . $tkireg->upgrade_factor . ", power))";
     $calc_computer = "ROUND(POW(" . $tkireg->upgrade_factor . ", computer))";
     $calc_sensors = "ROUND(POW(" . $tkireg->upgrade_factor . ", sensors))";
     $calc_beams = "ROUND(POW(" . $tkireg->upgrade_factor . ", beams))";
     $calc_torp_launchers = "ROUND(POW(" . $tkireg->upgrade_factor . ", torp_launchers))";
     $calc_shields = "ROUND(POW(" . $tkireg->upgrade_factor . ", shields))";
     $calc_armor = "ROUND(POW(" . $tkireg->upgrade_factor . ", armor))";
     $calc_cloak = "ROUND(POW(" . $tkireg->upgrade_factor . ", cloak))";
     $calc_levels = "({$calc_hull} + {$calc_engines} + {$calc_power} + {$calc_computer} + {$calc_sensors} + {$calc_beams} + {$calc_torp_launchers} + {$calc_shields} + {$calc_armor} + {$calc_cloak}) * " . $tkireg->upgrade_cost;
     $calc_torps = "::prefix::ships.torps * " . $tkireg->torpedo_price;
     $calc_armor_pts = "armor_pts * " . $tkireg->armor_price;
     $calc_ship_ore = "ship_ore * " . $tkireg->ore_price;
     $calc_ship_organics = "ship_organics * " . $tkireg->organics_price;
     $calc_ship_goods = "ship_goods * " . $tkireg->goods_price;
     $calc_ship_energy = "ship_energy * " . $tkireg->energy_price;
     $calc_ship_colonists = "ship_colonists * " . $tkireg->colonist_price;
     $calc_ship_fighters = "ship_fighters * " . $tkireg->fighter_price;
     $calc_equip = "{$calc_torps} + {$calc_armor_pts} + {$calc_ship_ore} + {$calc_ship_organics} + {$calc_ship_goods} + {$calc_ship_energy} + {$calc_ship_colonists} + {$calc_ship_fighters}";
     $calc_dev_warpedit = "dev_warpedit * " . $tkireg->dev_warpedit_price;
     $calc_dev_genesis = "dev_genesis * " . $tkireg->dev_genesis_price;
     $calc_dev_beacon = "dev_beacon * " . $tkireg->dev_beacon_price;
     $calc_dev_emerwarp = "dev_emerwarp * " . $tkireg->dev_emerwarp_price;
     $calc_dev_escapepod = "IF(dev_escapepod='Y', " . $tkireg->dev_escapepod_price . ", 0)";
     $calc_dev_fuelscoop = "IF(dev_fuelscoop='Y', " . $tkireg->dev_fuelscoop_price . ", 0)";
     $calc_dev_lssd = "IF(dev_lssd='Y', " . $tkireg->dev_lssd_price . ", 0)";
     $calc_minedeflector = "dev_minedeflector * " . $tkireg->dev_minedeflector_price;
     $calc_dev = "{$calc_dev_warpedit} + {$calc_dev_genesis} + {$calc_dev_beacon} + {$calc_dev_emerwarp} + {$calc_dev_escapepod} + {$calc_dev_fuelscoop} + {$calc_minedeflector} + {$calc_dev_lssd}";
     $calc_planet_goods = "SUM(::prefix::planets.organics) * " . $tkireg->organics_price . "+ SUM(::prefix::planets.ore) * " . $tkireg->ore_price . "+ SUM(::prefix::planets.goods) * " . $tkireg->goods_price . "+ SUM(::prefix::planets.energy) * " . $tkireg->energy_price;
     $calc_planet_cols = "SUM(::prefix::planets.colonists) * " . $tkireg->colonist_price;
     $calc_planet_defense = "SUM(::prefix::planets.fighters) * " . $tkireg->fighter_price . "+ IF(::prefix::planets.base='Y', " . $tkireg->base_credits . "+ SUM(::prefix::planets.torps) * " . $tkireg->torpedo_price . ", 0)";
     $calc_planet_credits = "SUM(::prefix::planets.credits)";
     $sql = "SELECT IF(COUNT(*)>0, {$calc_planet_goods} + {$calc_planet_cols} + {$calc_planet_defense} + {$calc_planet_credits}, 0) AS planet_score " . "FROM ::prefix::planets WHERE owner=:ship_id";
     $stmt = $pdo_db->prepare($sql);
     $stmt->bindParam(':ship_id', $ship_id);
     $stmt->execute();
     $planet_score = $stmt->fetch(\PDO::FETCH_COLUMN);
     $sql = "SELECT IF(COUNT(*)>0, {$calc_levels} + {$calc_equip} + {$calc_dev} + ::prefix::ships.credits, 0) AS ship_score " . "FROM ::prefix::ships LEFT JOIN ::prefix::planets ON ::prefix::planets.owner=ship_id WHERE ship_id = :ship_id AND ship_destroyed='N'";
     $stmt = $pdo_db->prepare($sql);
     $stmt->bindParam(':ship_id', $ship_id);
     $stmt->execute();
     $ship_score = $stmt->fetch(\PDO::FETCH_COLUMN);
     $sql = "SELECT (balance-loan) AS bank_score FROM ::prefix::ibank_accounts WHERE ship_id = :ship_id";
     $stmt = $pdo_db->prepare($sql);
     $stmt->bindParam(':ship_id', $ship_id);
     $stmt->execute();
     $bank_score = $stmt->fetch(\PDO::FETCH_COLUMN);
     $score = $ship_score + $planet_score + $bank_score;
     if ($score < 0) {
         $score = 0;
     }
     $score = (int) round(sqrt($score));
     $stmt = $pdo_db->prepare("UPDATE ::prefix::ships SET score = :score WHERE ship_id=:ship_id");
     $stmt->bindParam(':score', $score);
     $stmt->bindParam(':ship_id', $playerinfo['ship_id']);
     $result = $stmt->execute();
     \Tki\Db::logDbErrors($pdo_db, $result, __LINE__, __FILE__);
     return (int) $score;
 }
コード例 #20
0
ファイル: Xenobe.php プロジェクト: thekabal/tki
 public static function xenobeHunter(\PDO $pdo_db, \ADODB_mysqli $db, array $playerinfo, $xenobeisdead, array $langvars, Reg $tkireg)
 {
     $targetinfo = array();
     $rescount = $db->Execute("SELECT COUNT(*) AS num_players FROM {$db->prefix}ships WHERE ship_destroyed='N' AND email NOT LIKE '%@xenobe' AND ship_id > 1");
     \Tki\Db::LogDbErrors($pdo_db, $rescount, __LINE__, __FILE__);
     $rowcount = $rescount->fields;
     $topnum = min(10, $rowcount['num_players']);
     // If we have killed all the players in the game then stop here.
     if ($topnum < 1) {
         return;
     }
     $res = $db->SelectLimit("SELECT * FROM {$db->prefix}ships WHERE ship_destroyed='N' AND email NOT LIKE '%@xenobe' AND ship_id > 1 ORDER BY score DESC", $topnum);
     \Tki\Db::LogDbErrors($pdo_db, $res, __LINE__, __FILE__);
     // Choose a target from the top player list
     $i = 1;
     $targetnum = random_int(1, $topnum);
     while (!$res->EOF) {
         if ($i == $targetnum) {
             $targetinfo = $res->fields;
         }
         $i++;
         $res->MoveNext();
     }
     // Make sure we have a target
     if (!$targetinfo) {
         \Tki\PlayerLog::WriteLog($pdo_db, $playerinfo['ship_id'], LOG_RAW, "Hunt Failed: No Target ");
         return;
     }
     // Jump to target sector
     $sectres = $db->Execute("SELECT sector_id, zone_id FROM {$db->prefix}universe WHERE sector_id = ?;", array($targetinfo['sector']));
     \Tki\Db::LogDbErrors($pdo_db, $sectres, __LINE__, __FILE__);
     $sectrow = $sectres->fields;
     $zoneres = $db->Execute("SELECT zone_id,allow_attack FROM {$db->prefix}zones WHERE zone_id = ?;", array($sectrow['zone_id']));
     \Tki\Db::LogDbErrors($pdo_db, $zoneres, __LINE__, __FILE__);
     $zonerow = $zoneres->fields;
     // Only travel there if we can attack in the target sector
     if ($zonerow['allow_attack'] == "Y") {
         $stamp = date("Y-m-d H:i:s");
         $move_result = $db->Execute("UPDATE {$db->prefix}ships SET last_login = ?, turns_used = turns_used + 1, sector = ? WHERE ship_id = ?", array($stamp, $targetinfo['sector'], $playerinfo['ship_id']));
         \Tki\Db::LogDbErrors($pdo_db, $move_result, __LINE__, __FILE__);
         \Tki\PlayerLog::WriteLog($pdo_db, $playerinfo['ship_id'], LOG_RAW, "Xenobe used a wormhole to warp to sector {$targetinfo['sector']} where he is hunting player {$targetinfo['character_name']}.");
         if (!$move_result) {
             $error = $db->ErrorMsg();
             \Tki\PlayerLog::WriteLog($pdo_db, $playerinfo['ship_id'], LOG_RAW, "Move failed with error: {$error} ");
             return;
         }
         // Check for sector defenses
         $i = 0;
         $all_sector_fighters = 0;
         $defenses = array();
         $sql = "SELECT * FROM ::prefix::sector_defense WHERE sector_id = :sector_id AND defense_type = 'F' ORDER BY quantity DESC";
         $stmt = $pdo_db->prepare($sql);
         $stmt->bindParam(':sector_id', $targetinfo['sector']);
         $stmt->execute();
         $defenses_present = $stmt->fetchAll(\PDO::FETCH_ASSOC);
         if ($defenses_present !== null) {
             foreach ($defenses_present as $tmp_defense) {
                 $defenses[$i] = $tmp_defense;
                 $all_sector_fighters += $defenses[$i]['quantity'];
                 $i++;
             }
         }
         $i = 0;
         $total_sector_mines = 0;
         $sql = "SELECT * FROM ::prefix::sector_defense WHERE sector_id = :sector_id AND defense_type = 'M'";
         $stmt = $pdo_db->prepare($sql);
         $stmt->bindParam(':sector_id', $targetinfo['sector']);
         $stmt->execute();
         $defenses_present = $stmt->fetchAll(\PDO::FETCH_ASSOC);
         if ($defenses_present !== null) {
             foreach ($defenses_present as $tmp_defense) {
                 $defenses[$i] = $tmp_defense;
                 $total_sector_mines += $defenses[$i]['quantity'];
                 $i++;
             }
         }
         if ($all_sector_fighters > 0 || $total_sector_mines > 0 || $all_sector_fighters > 0 && $total_sector_mines > 0) {
             // Attack sector defenses
             $targetlink = $targetinfo['sector'];
             self::xenobeToSecDef($pdo_db, $db, $langvars, $playerinfo, $targetlink, $tkireg);
         }
         if ($xenobeisdead > 0) {
             return;
             // Sector defenses killed the Xenobe
         }
         \Tki\PlayerLog::WriteLog($pdo_db, $playerinfo['ship_id'], LOG_RAW, "Xenobe launching an attack on {$targetinfo['character_name']}.");
         // Attack the target
         if ($targetinfo['planet_id'] > 0) {
             self::xenobeToPlanet($pdo_db, $db, $targetinfo['planet_id'], $tkireg, $playerinfo, $langvars);
             // Yes, so move to that planet
         } else {
             self::xenobeToShip($pdo_db, $db, $targetinfo['ship_id'], $tkireg, $playerinfo, $langvars);
             // Not on a planet, so move to the ship
         }
     } else {
         \Tki\PlayerLog::WriteLog($pdo_db, $playerinfo['ship_id'], LOG_RAW, "Xenobe hunt failed, target {$targetinfo['character_name']} was in a no attack zone (sector {$targetinfo['sector']}).");
     }
 }
コード例 #21
0
ファイル: Team.php プロジェクト: thekabal/tki
 public static function showInfo(\PDO $pdo_db, \ADODB_mysqli $db, array $langvars, $whichteam, $isowner, array $playerinfo, $invite_info, $team, Reg $tkireg)
 {
     // Heading
     echo "<div align=center><h3><font color=white><strong>{$team['team_name']}</strong>";
     echo "<br><font size=2>\"<i>{$team['description']}</i>\"</font></h3>";
     if ($playerinfo['team'] == $team['id']) {
         echo "<font color=white>";
         if ($playerinfo['ship_id'] == $team['creator']) {
             echo $langvars['l_team_coord'] . " ";
         } else {
             echo $langvars['l_team_member'] . " ";
         }
         echo $langvars['l_options'] . " <br><font size=2>";
         if (is_team_owner($team, $playerinfo) === true) {
             echo "[<a href=teams.php?teamwhat=9&whichteam={$playerinfo['team']}>" . $langvars['l_edit'] . "</a>] - ";
         }
         echo "[<a href=teams.php?teamwhat=7&whichteam={$playerinfo['team']}>" . $langvars['l_team_inv'] . "</a>] - [<a href=teams.php?teamwhat=2&whichteam={$playerinfo['team']}>" . $langvars['l_team_leave'] . "</a>]</font></font>";
     }
     self::displayInviteInfo($langvars, $playerinfo, $invite_info);
     echo "</div>";
     // Main table
     echo "<table border=2 cellspacing=2 cellpadding=2 bgcolor=\"#400040\" width=\"75%\" align=center><tr>";
     echo "<td><font color=white>" . $langvars['l_team_members'] . "</font></td></tr><tr bgcolor={$tkireg->color_line2}>";
     $result = $db->Execute("SELECT * FROM {$db->prefix}ships WHERE team = ?;", array($whichteam));
     \Tki\Db::LogDbErrors($pdo_db, $result, __LINE__, __FILE__);
     while (!$result->EOF) {
         $member = $result->fields;
         echo "<td> - " . $member['character_name'] . " (" . $langvars['l_score'] . " " . $member['score'] . ")";
         if ($isowner && $member['ship_id'] != $playerinfo['ship_id']) {
             echo " - <font size=2>[<a href=\"teams.php?teamwhat=5&who={$member['ship_id']}\">" . $langvars['l_team_eject'] . "</a>]</font></td>";
         } else {
             if ($member['ship_id'] == $team['creator']) {
                 echo " - " . $langvars['l_team_coord'] . " </td>";
             }
         }
         echo "</tr><tr bgcolor={$tkireg->color_line2}>";
         $result->MoveNext();
     }
     // Displays for members name
     $res = $db->Execute("SELECT ship_id, character_name FROM {$db->prefix}ships WHERE team_invite = ?;", array($whichteam));
     \Tki\Db::LogDbErrors($pdo_db, $res, __LINE__, __FILE__);
     echo "<td bgcolor={$tkireg->color_line2}><font color=white>" . $langvars['l_team_pending'] . " <strong>" . $team['team_name'] . "</strong></font></td>";
     echo "</tr><tr>";
     if ($res->RecordCount() > 0) {
         echo "</tr><tr bgcolor={$tkireg->color_line2}>";
         while (!$res->EOF) {
             $who = $res->fields;
             echo "<td> - {$who['character_name']}</td>";
             echo "</tr><tr bgcolor={$tkireg->color_line2}>";
             $res->MoveNext();
         }
     } else {
         echo "<td>" . $langvars['l_team_noinvites'] . " <strong>" . $team['team_name'] . "</strong>.</td></tr><tr>";
     }
     echo "</tr></table>";
 }
コード例 #22
0
ファイル: Traderoute.php プロジェクト: thekabal/tki
 public static function traderouteEngage(\ADODB_mysqli $db, \PDO $pdo_db, string $lang, int $j, array $langvars, Reg $tkireg, array $playerinfo, int $engage, array $dist, array $traderoutes, int $portfull, Smarty $template)
 {
     $traderoute = array();
     $source = array();
     $dest = array();
     // Added below initializations, for traderoute bug
     $ore_buy = 0;
     $goods_buy = 0;
     $organics_buy = 0;
     $energy_buy = 0;
     $colonists_buy = null;
     $fighters_buy = null;
     $torps_buy = null;
     foreach ($traderoutes as $testroute) {
         if ($testroute['traderoute_id'] == $engage) {
             $traderoute = $testroute;
         }
     }
     if (!isset($traderoute)) {
         \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_engagenonexist'], $template);
     }
     if ($traderoute['owner'] != $playerinfo['ship_id']) {
         \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_notowntdr'], $template);
     }
     // Source check
     if ($traderoute['source_type'] == 'P') {
         // Retrieve port info here, we'll need it later anyway
         $result = $db->Execute("SELECT * FROM {$db->prefix}universe WHERE sector_id = ?;", array($traderoute['source_id']));
         \Tki\Db::LogDbErrors($pdo_db, $result, __LINE__, __FILE__);
         if (!$result || $result->EOF) {
             \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_invalidspoint'], $template);
         }
         $source = $result->fields;
         if ($traderoute['source_id'] != $playerinfo['sector']) {
             $langvars['l_tdr_inittdr'] = str_replace("[tdr_source_id]", $traderoute['source_id'], $langvars['l_tdr_inittdr']);
             \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_inittdr'], $template);
         }
     } elseif ($traderoute['source_type'] == 'L' || $traderoute['source_type'] == 'C') {
         $result = $db->Execute("SELECT * FROM {$db->prefix}planets WHERE planet_id = ? AND (owner = ? OR (team <> 0 AND team = ?));", array($traderoute['source_id'], $playerinfo['ship_id'], $playerinfo['team']));
         \Tki\Db::LogDbErrors($pdo_db, $result, __LINE__, __FILE__);
         if (!$result || $result->EOF) {
             \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_invalidsrc'], $template);
         }
         $source = $result->fields;
         if ($source['sector_id'] != $playerinfo['sector']) {
             // Check for valid owned source planet
             // $langvars['l_tdr_inittdrsector'] = str_replace("[tdr_source_sector_id]", $source['sector_id'], $langvars['l_tdr_inittdrsector']);
             // \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_inittdrsector'], $template);
             \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, 'You must be in starting sector before you initiate a trade route!', $template);
         }
         if ($traderoute['source_type'] == 'L') {
             if ($source['owner'] != $playerinfo['ship_id']) {
                 // $langvars['l_tdr_notyourplanet'] = str_replace("[tdr_source_name]", $source[name], $langvars['l_tdr_notyourplanet']);
                 // $langvars['l_tdr_notyourplanet'] = str_replace("[tdr_source_sector_id]", $source[sector_id], $langvars['l_tdr_notyourplanet']);
                 // \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_notyourplanet'], $template);
                 \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_invalidsrc'], $template);
             }
         } elseif ($traderoute['source_type'] == 'C') {
             if ($source['team'] != $playerinfo['team']) {
                 // $langvars['l_tdr_notyourplanet'] = str_replace("[tdr_source_name]", $source[name], $langvars['l_tdr_notyourplanet']);
                 // $langvars['l_tdr_notyourplanet'] = str_replace("[tdr_source_sector_id]", $source[sector_id], $langvars['l_tdr_notyourplanet']);
                 // $not_team_planet = "$source[name] in $source[sector_id] not a Copporate Planet";
                 // \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $not_team_planet, $template);
                 \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_invalidsrc'], $template);
             }
         }
         // Store starting port info, we'll need it later
         $result = $db->Execute("SELECT * FROM {$db->prefix}universe WHERE sector_id = ?;", array($source['sector_id']));
         \Tki\Db::LogDbErrors($pdo_db, $result, __LINE__, __FILE__);
         if (!$result || $result->EOF) {
             \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_invalidssector'], $template);
         }
         $sourceport = $result->fields;
     }
     // Destination Check
     if ($traderoute['dest_type'] == 'P') {
         $result = $db->Execute("SELECT * FROM {$db->prefix}universe WHERE sector_id = ?;", array($traderoute['dest_id']));
         \Tki\Db::LogDbErrors($pdo_db, $result, __LINE__, __FILE__);
         if (!$result || $result->EOF) {
             \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_invaliddport'], $template);
         }
         $dest = $result->fields;
     } elseif ($traderoute['dest_type'] == 'L' || $traderoute['dest_type'] == 'C') {
         // Check for valid owned source planet
         // This now only returns planets that the player owns or planets that belong to the team and set as team planets..
         $result = $db->Execute("SELECT * FROM {$db->prefix}planets WHERE planet_id = ? AND (owner = ? OR (team <> 0 AND team = ?));", array($traderoute['dest_id'], $playerinfo['ship_id'], $playerinfo['team']));
         \Tki\Db::LogDbErrors($pdo_db, $result, __LINE__, __FILE__);
         if (!$result || $result->EOF) {
             \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_invaliddplanet'], $template);
         }
         $dest = $result->fields;
         if ($traderoute['dest_type'] == 'L') {
             if ($dest['owner'] != $playerinfo['ship_id']) {
                 $langvars['l_tdr_notyourplanet'] = str_replace("[tdr_source_name]", $dest['name'], $langvars['l_tdr_notyourplanet']);
                 $langvars['l_tdr_notyourplanet'] = str_replace("[tdr_source_sector_id]", $dest['sector_id'], $langvars['l_tdr_notyourplanet']);
                 \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_notyourplanet'], $template);
             }
         } elseif ($traderoute['dest_type'] == 'C') {
             if ($dest['team'] != $playerinfo['team']) {
                 $langvars['l_tdr_notyourplanet'] = str_replace("[tdr_source_name]", $dest['name'], $langvars['l_tdr_notyourplanet']);
                 $langvars['l_tdr_notyourplanet'] = str_replace("[tdr_source_sector_id]", $dest['sector_id'], $langvars['l_tdr_notyourplanet']);
                 \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_notyourplanet'], $template);
             }
         }
         $result = $db->Execute("SELECT * FROM {$db->prefix}universe WHERE sector_id = ?;", array($dest['sector_id']));
         \Tki\Db::LogDbErrors($pdo_db, $result, __LINE__, __FILE__);
         if (!$result || $result->EOF) {
             \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_invaliddsector'], $template);
         }
         $destport = $result->fields;
     }
     if (!isset($sourceport)) {
         $sourceport = $source;
     }
     if (!isset($destport)) {
         $destport = $dest;
     }
     // Warp or real space and generate distance
     if ($traderoute['move_type'] == 'W') {
         $query = $db->Execute("SELECT link_id FROM {$db->prefix}links WHERE link_start = ? AND link_dest = ?;", array($source['sector_id'], $dest['sector_id']));
         \Tki\Db::LogDbErrors($pdo_db, $query, __LINE__, __FILE__);
         if ($query->EOF) {
             $langvars['l_tdr_nowlink1'] = str_replace("[tdr_src_sector_id]", $source['sector_id'], $langvars['l_tdr_nowlink1']);
             $langvars['l_tdr_nowlink1'] = str_replace("[tdr_dest_sector_id]", $dest['sector_id'], $langvars['l_tdr_nowlink1']);
             \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_nowlink1'], $template);
         }
         if ($traderoute['circuit'] == '2') {
             $query = $db->Execute("SELECT link_id FROM {$db->prefix}links WHERE link_start = ? AND link_dest = ?;", array($dest['sector_id'], $source['sector_id']));
             \Tki\Db::LogDbErrors($pdo_db, $query, __LINE__, __FILE__);
             if ($query->EOF) {
                 $langvars['l_tdr_nowlink2'] = str_replace("[tdr_src_sector_id]", $source['sector_id'], $langvars['l_tdr_nowlink2']);
                 $langvars['l_tdr_nowlink2'] = str_replace("[tdr_dest_sector_id]", $dest['sector_id'], $langvars['l_tdr_nowlink2']);
                 \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_nowlink2'], $template);
             }
             $dist['triptime'] = 4;
         } else {
             $dist['triptime'] = 2;
         }
         $dist['scooped'] = 0;
         $dist['scooped1'] = 0;
         $dist['scooped2'] = 0;
     } else {
         $dist = \Tki\Traderoute3::traderouteDistance($pdo_db, 'P', 'P', $sourceport, $destport, $traderoute['circuit'], $playerinfo, $tkireg);
     }
     // Check if player has enough turns
     if ($playerinfo['turns'] < $dist['triptime']) {
         $langvars['l_tdr_moreturnsneeded'] = str_replace("[tdr_dist_triptime]", $dist['triptime'], $langvars['l_tdr_moreturnsneeded']);
         $langvars['l_tdr_moreturnsneeded'] = str_replace("[tdr_playerinfo_turns]", $playerinfo['turns'], $langvars['l_tdr_moreturnsneeded']);
         \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_moreturnsneeded'], $template);
     }
     // Sector defense check
     $hostile = 0;
     $result99 = $db->Execute("SELECT * FROM {$db->prefix}sector_defense WHERE sector_id = ? AND ship_id <> ?", array($source['sector_id'], $playerinfo['ship_id']));
     \Tki\Db::LogDbErrors($pdo_db, $result99, __LINE__, __FILE__);
     if (!$result99->EOF) {
         $fighters_owner = $result99->fields;
         $sql = "SELECT * FROM ::prefix::ships WHERE ship_id=:ship_id LIMIT 1";
         $stmt = $pdo_db->prepare($sql);
         $stmt->bindParam(':ship_id', $fighters_owner['ship_id']);
         $stmt->execute();
         $nsfighters = $stmt->fetch(\PDO::FETCH_ASSOC);
         if ($nsfighters['team'] != $playerinfo['team'] || $playerinfo['team'] == 0) {
             $hostile = 1;
         }
     }
     $result98 = $db->Execute("SELECT * FROM {$db->prefix}sector_defense WHERE sector_id = ? AND ship_id <> ?", array($dest['sector_id'], $playerinfo['ship_id']));
     \Tki\Db::LogDbErrors($pdo_db, $result98, __LINE__, __FILE__);
     if (!$result98->EOF) {
         $fighters_owner = $result98->fields;
         $sql = "SELECT * FROM ::prefix::ships WHERE ship_id=:ship_id LIMIT 1";
         $stmt = $pdo_db->prepare($sql);
         $stmt->bindParam(':ship_id', $fighters_owner['ship_id']);
         $stmt->execute();
         $nsfighters = $stmt->fetch(\PDO::FETCH_ASSOC);
         if ($nsfighters['team'] != $playerinfo['team'] || $playerinfo['team'] == 0) {
             $hostile = 1;
         }
     }
     if ($hostile > 0 && $playerinfo['hull'] > $tkireg->mine_hullsize) {
         \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_hostdef'], $template);
     }
     // Special port nothing to do
     if ($traderoute['source_type'] == 'P' && $source['port_type'] == 'special' && $playerinfo['trade_colonists'] == 'N' && $playerinfo['trade_fighters'] == 'N' && $playerinfo['trade_torps'] == 'N') {
         \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_globalsetbuynothing'], $template);
     }
     // Check if zone allows trading  SRC
     if ($traderoute['source_type'] == 'P') {
         $sql = "SELECT * FROM ::prefix::zones,::prefix::universe WHERE ::prefix::universe.sector_id=:sector_id AND ::prefix::zones.zone_id=::prefix::universe.zone_id";
         $stmt = $pdo_db->prepare($sql);
         $stmt->bindParam(':sector_id', $traderoute['source_id']);
         $stmt->execute();
         $zoneinfo = $stmt->fetch(\PDO::FETCH_ASSOC);
         if ($zoneinfo['allow_trade'] == 'N') {
             \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_nosrcporttrade'], $template);
         } elseif ($zoneinfo['allow_trade'] == 'L') {
             if ($zoneinfo['team_zone'] == 'N') {
                 $sql = "SELECT team FROM ::prefix::ships WHERE ship_id=:ship_id";
                 $stmt = $pdo_db->prepare($sql);
                 $stmt->bindParam(':ship_id', $zoneinfo['owner']);
                 $stmt->execute();
                 $ownerinfo = $stmt->fetch(\PDO::FETCH_ASSOC);
                 if ($playerinfo['ship_id'] != $zoneinfo['owner'] && $playerinfo['team'] == 0 || $playerinfo['team'] != $ownerinfo['team']) {
                     \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_tradesrcportoutsider'], $template);
                 }
             } else {
                 if ($playerinfo['team'] != $zoneinfo['owner']) {
                     \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_tradesrcportoutsider'], $template);
                 }
             }
         }
     }
     // Check if zone allows trading  DEST
     if ($traderoute['dest_type'] == 'P') {
         $sql = "SELECT * FROM ::prefix::zones,::prefix::universe WHERE ::prefix::universe.sector_id=:sector_id AND ::prefix::zones.zone_id=::prefix::universe.zone_id";
         $stmt = $pdo_db->prepare($sql);
         $stmt->bindParam(':zone_id', $traderoute['dest_id']);
         $stmt->execute();
         $zoneinfo = $stmt->fetch(\PDO::FETCH_ASSOC);
         if ($zoneinfo['allow_trade'] == 'N') {
             \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_nodestporttrade'], $template);
         } elseif ($zoneinfo['allow_trade'] == 'L') {
             if ($zoneinfo['team_zone'] == 'N') {
                 $sql = "SELECT team FROM ::prefix::ships WHERE ship_id=:ship_id";
                 $stmt = $pdo_db->prepare($sql);
                 $stmt->bindParam(':ship_id', $zoneinfo['owner']);
                 $stmt->execute();
                 $ownerinfo = $stmt->fetch(\PDO::FETCH_ASSOC);
                 if ($playerinfo['ship_id'] != $zoneinfo['owner'] && $playerinfo['team'] == 0 || $playerinfo['team'] != $ownerinfo['team']) {
                     \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_tradedestportoutsider'], $template);
                 }
             } else {
                 if ($playerinfo['team'] != $zoneinfo['owner']) {
                     \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, $langvars['l_tdr_tradedestportoutsider'], $template);
                 }
             }
         }
     }
     \Tki\Traderoute3::traderouteResultsTableTop($pdo_db, $lang, $tkireg);
     // Determine if source is a planet or a port
     if ($traderoute['source_type'] == 'P') {
         echo $langvars['l_tdr_portin'] . " " . $source['sector_id'];
     } elseif ($traderoute['source_type'] == 'L' || $traderoute['source_type'] == 'C') {
         echo $langvars['l_tdr_planet'] . " " . $source['name'] . " in " . $sourceport['sector_id'];
     }
     \Tki\Traderoute3::traderouteResultsSource();
     // Determine if destination is a planet or a port
     if ($traderoute['dest_type'] == 'P') {
         echo $langvars['l_tdr_portin'] . " " . $dest['sector_id'];
     } elseif ($traderoute['dest_type'] == 'L' || $traderoute['dest_type'] == 'C') {
         echo $langvars['l_tdr_planet'] . " " . $dest['name'] . " in " . $destport['sector_id'];
     }
     \Tki\Traderoute3::traderouteResultsDestination($tkireg);
     $sourcecost = 0;
     // Source is port
     if ($traderoute['source_type'] == 'P') {
         // Special port section (begin)
         if ($source['port_type'] == 'special') {
             $total_credits = $playerinfo['credits'];
             if ($playerinfo['trade_colonists'] == 'Y') {
                 $free_holds = \Tki\CalcLevels::holds($playerinfo['hull'], $tkireg) - $playerinfo['ship_ore'] - $playerinfo['ship_organics'] - $playerinfo['ship_goods'] - $playerinfo['ship_colonists'];
                 $colonists_buy = $free_holds;
                 if ($playerinfo['credits'] < $tkireg->colonist_price * $colonists_buy) {
                     $colonists_buy = $playerinfo['credits'] / $tkireg->colonist_price;
                 }
                 if ($colonists_buy != 0) {
                     echo $langvars['l_tdr_bought'] . " " . number_format($colonists_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_colonists'] . "<br>";
                 }
                 $sourcecost -= $colonists_buy * $tkireg->colonist_price;
                 $total_credits -= $colonists_buy * $tkireg->colonist_price;
             } else {
                 $colonists_buy = 0;
             }
             if ($playerinfo['trade_fighters'] == 'Y') {
                 $free_fighters = \Tki\CalcLevels::fighters($playerinfo['computer'], $tkireg) - $playerinfo['ship_fighters'];
                 $fighters_buy = $free_fighters;
                 if ($total_credits < $fighters_buy * $tkireg->fighter_price) {
                     $fighters_buy = $total_credits / $tkireg->fighter_price;
                 }
                 if ($fighters_buy != 0) {
                     echo $langvars['l_tdr_bought'] . " " . number_format($fighters_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_fighters'] . "<br>";
                 }
                 $sourcecost -= $fighters_buy * $tkireg->fighter_price;
                 $total_credits -= $fighters_buy * $tkireg->fighter_price;
             } else {
                 $fighters_buy = 0;
             }
             if ($playerinfo['trade_torps'] == 'Y') {
                 $free_torps = \Tki\CalcLevels::fighters($playerinfo['torp_launchers'], $tkireg) - $playerinfo['torps'];
                 $torps_buy = $free_torps;
                 if ($total_credits < $torps_buy * $tkireg->torpedo_price) {
                     $torps_buy = $total_credits / $tkireg->torpedo_price;
                 }
                 if ($torps_buy != 0) {
                     echo $langvars['l_tdr_bought'] . " " . number_format($torps_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_torps'] . "<br>";
                 }
                 $sourcecost -= $torps_buy * $tkireg->torpedo_price;
             } else {
                 $torps_buy = 0;
             }
             if ($torps_buy == 0 && $colonists_buy == 0 && $fighters_buy == 0) {
                 echo $langvars['l_tdr_nothingtotrade'] . "<br>";
             }
             if ($traderoute['circuit'] == '1') {
                 $resb = $db->Execute("UPDATE {$db->prefix}ships SET ship_colonists = ship_colonists + ?, ship_fighters = ship_fighters + ?, torps = torps + ?, ship_energy = ship_energy + ? WHERE ship_id = ?;", array($colonists_buy, $fighters_buy, $torps_buy, $dist['scooped1'], $playerinfo['ship_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $resb, __LINE__, __FILE__);
             }
         } else {
             // Sells commodities
             if ($source['port_type'] != 'ore') {
                 $tkireg->ore_price = $tkireg->ore_price + ${$tkireg}->ore_delta * $source['port_ore'] / $tkireg->ore_limit * $tkireg->inventory_factor;
                 if ($source['port_ore'] - $playerinfo['ship_ore'] < 0) {
                     $ore_buy = $source['port_ore'];
                     $portfull = 1;
                 } else {
                     $ore_buy = $playerinfo['ship_ore'];
                 }
                 $sourcecost += $ore_buy * $tkireg->ore_price;
                 if ($ore_buy != 0) {
                     if ($portfull == 1) {
                         echo $langvars['l_tdr_sold'] . " " . number_format($ore_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_ore'] . " (" . $langvars['l_tdr_portisfull'] . ")<br>";
                     } else {
                         echo $langvars['l_tdr_sold'] . " " . number_format($ore_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_ore'] . "<br>";
                     }
                 }
                 $playerinfo['ship_ore'] -= $ore_buy;
             }
             $portfull = 0;
             if ($source['port_type'] != 'goods') {
                 $tkireg->goods_price = $tkireg->goods_price + $tkireg->goods_delta * $source['port_goods'] / $tkireg->goods_limit * $tkireg->inventory_factor;
                 if ($source['port_goods'] - $playerinfo['ship_goods'] < 0) {
                     $goods_buy = $source['port_goods'];
                     $portfull = 1;
                 } else {
                     $goods_buy = $playerinfo['ship_goods'];
                 }
                 $sourcecost += $goods_buy * $tkireg->goods_price;
                 if ($goods_buy != 0) {
                     if ($portfull == 1) {
                         echo $langvars['l_tdr_sold'] . " " . number_format($goods_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_goods'] . " (" . $langvars['l_tdr_portisfull'] . ")<br>";
                     } else {
                         echo $langvars['l_tdr_sold'] . " " . number_format($goods_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_goods'] . "<br>";
                     }
                 }
                 $playerinfo['ship_goods'] -= $goods_buy;
             }
             $portfull = 0;
             if ($source['port_type'] != 'organics') {
                 $tkireg->organics_price = $tkireg->organics_price + $tkireg->organics_delta * $source['port_organics'] / $tkireg->organics_limit * $tkireg->inventory_factor;
                 if ($source['port_organics'] - $playerinfo['ship_organics'] < 0) {
                     $organics_buy = $source['port_organics'];
                     $portfull = 1;
                 } else {
                     $organics_buy = $playerinfo['ship_organics'];
                 }
                 $sourcecost += $organics_buy * $tkireg->organics_price;
                 if ($organics_buy != 0) {
                     if ($portfull == 1) {
                         echo $langvars['l_tdr_sold'] . " " . number_format($organics_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_organics'] . " (" . $langvars['l_tdr_portisfull'] . ")<br>";
                     } else {
                         echo $langvars['l_tdr_sold'] . " " . number_format($organics_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_organics'] . "<br>";
                     }
                 }
                 $playerinfo['ship_organics'] -= $organics_buy;
             }
             $portfull = 0;
             if ($source['port_type'] != 'energy' && $playerinfo['trade_energy'] == 'Y') {
                 $tkireg->energy_price = $tkireg->energy_price + $tkireg->energy_delta * $source['port_energy'] / $tkireg->energy_limit * $tkireg->inventory_factor;
                 if ($source['port_energy'] - $playerinfo['ship_energy'] < 0) {
                     $energy_buy = $source['port_energy'];
                     $portfull = 1;
                 } else {
                     $energy_buy = $playerinfo['ship_energy'];
                 }
                 $sourcecost += $energy_buy * $tkireg->energy_price;
                 if ($energy_buy != 0) {
                     if ($portfull == 1) {
                         echo $langvars['l_tdr_sold'] . " " . number_format($energy_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_energy'] . " (" . $langvars['l_tdr_portisfull'] . ")<br>";
                     } else {
                         echo $langvars['l_tdr_sold'] . " " . number_format($energy_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_energy'] . "<br>";
                     }
                 }
                 $playerinfo['ship_energy'] -= $energy_buy;
             }
             $free_holds = \Tki\CalcLevels::holds($playerinfo['hull'], $tkireg) - $playerinfo['ship_ore'] - $playerinfo['ship_organics'] - $playerinfo['ship_goods'] - $playerinfo['ship_colonists'];
             // Time to buy
             if ($source['port_type'] == 'ore') {
                 $tkireg->ore_price = $tkireg->ore_price - ${$tkireg}->ore_delta * $source['port_ore'] / $tkireg->ore_limit * $tkireg->inventory_factor;
                 $ore_buy = $free_holds;
                 if ($playerinfo['credits'] + $sourcecost < $ore_buy * $tkireg->ore_price) {
                     $ore_buy = ($playerinfo['credits'] + $sourcecost) / $tkireg->ore_price;
                 }
                 if ($source['port_ore'] < $ore_buy) {
                     $ore_buy = $source['port_ore'];
                     if ($source['port_ore'] == 0) {
                         echo $langvars['l_tdr_bought'] . " " . number_format($ore_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_ore'] . "(" . $langvars['l_tdr_portisempty'] . ")<br>";
                     }
                 }
                 if ($ore_buy != 0) {
                     echo $langvars['l_tdr_bought'] . " " . number_format($ore_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_ore'] . "<br>";
                 }
                 $playerinfo['ship_ore'] += $ore_buy;
                 $sourcecost -= $ore_buy * $tkireg->ore_price;
                 $resc = $db->Execute("UPDATE {$db->prefix}universe SET port_ore=port_ore-?, port_energy=port_energy-?, port_goods=port_goods-?, port_organics=port_organics-? WHERE sector_id = ?;", array($ore_buy, $energy_buy, $goods_buy, $organics_buy, $source['sector_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $resc, __LINE__, __FILE__);
             }
             if ($source['port_type'] == 'goods') {
                 $tkireg->goods_price = $tkireg->goods_price - $tkireg->goods_delta * $source['port_goods'] / $tkireg->goods_limit * $tkireg->inventory_factor;
                 $goods_buy = $free_holds;
                 if ($playerinfo['credits'] + $sourcecost < $goods_buy * $tkireg->goods_price) {
                     $goods_buy = ($playerinfo['credits'] + $sourcecost) / $tkireg->goods_price;
                 }
                 if ($source['port_goods'] < $goods_buy) {
                     $goods_buy = $source['port_goods'];
                     if ($source['port_goods'] == 0) {
                         echo $langvars['l_tdr_bought'] . " " . number_format($goods_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_goods'] . " (" . $langvars['l_tdr_portisempty'] . ")<br>";
                     }
                 }
                 if ($goods_buy != 0) {
                     echo $langvars['l_tdr_bought'] . " " . number_format($goods_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_goods'] . "<br>";
                 }
                 $playerinfo['ship_goods'] += $goods_buy;
                 $sourcecost -= $goods_buy * $tkireg->goods_price;
                 $resd = $db->Execute("UPDATE {$db->prefix}universe SET port_ore=port_ore-?, port_energy=port_energy-?, port_goods=port_goods-?, port_organics=port_organics-? WHERE sector_id = ?;", array($ore_buy, $energy_buy, $goods_buy, $organics_buy, $source['sector_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $resd, __LINE__, __FILE__);
             }
             if ($source['port_type'] == 'organics') {
                 $tkireg->organics_price = $tkireg->organics_price - $tkireg->organics_delta * $source['port_organics'] / $tkireg->organics_limit * $tkireg->inventory_factor;
                 $organics_buy = $free_holds;
                 if ($playerinfo['credits'] + $sourcecost < $organics_buy * $tkireg->organics_price) {
                     $organics_buy = ($playerinfo['credits'] + $sourcecost) / $tkireg->organics_price;
                 }
                 if ($source['port_organics'] < $organics_buy) {
                     $organics_buy = $source['port_organics'];
                     if ($source['port_organics'] == 0) {
                         echo $langvars['l_tdr_bought'] . " " . number_format($organics_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_organics'] . " (" . $langvars['l_tdr_portisempty'] . ")<br>";
                     }
                 }
                 if ($organics_buy != 0) {
                     echo $langvars['l_tdr_bought'] . " " . number_format($organics_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_organics'] . "<br>";
                 }
                 $playerinfo['ship_organics'] += $organics_buy;
                 $sourcecost -= $organics_buy * $tkireg->organics_price;
                 $rese = $db->Execute("UPDATE {$db->prefix}universe SET port_ore=port_ore-?, port_energy=port_energy-?, port_goods=port_goods-?, port_organics=port_organics-? WHERE sector_id = ?;", array($ore_buy, $energy_buy, $goods_buy, $organics_buy, $source['sector_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $rese, __LINE__, __FILE__);
             }
             if ($source['port_type'] == 'energy') {
                 $tkireg->energy_price = $tkireg->energy_price - $tkireg->energy_delta * $source['port_energy'] / $tkireg->energy_limit * $tkireg->inventory_factor;
                 $energy_buy = \Tki\CalcLevels::energy($playerinfo['power'], $tkireg) - $playerinfo['ship_energy'] - $dist['scooped1'];
                 if ($playerinfo['credits'] + $sourcecost < $energy_buy * $tkireg->energy_price) {
                     $energy_buy = ($playerinfo['credits'] + $sourcecost) / $tkireg->energy_price;
                 }
                 if ($source['port_energy'] < $energy_buy) {
                     $energy_buy = $source['port_energy'];
                     if ($source['port_energy'] == 0) {
                         echo $langvars['l_tdr_bought'] . " " . number_format($energy_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_energy'] . " (" . $langvars['l_tdr_portisempty'] . ")<br>";
                     }
                 }
                 if ($energy_buy != 0) {
                     echo $langvars['l_tdr_bought'] . " " . number_format($energy_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_energy'] . "<br>";
                 }
                 $playerinfo['ship_energy'] += $energy_buy;
                 $sourcecost -= $energy_buy * $tkireg->energy_price;
                 $resf = $db->Execute("UPDATE {$db->prefix}universe SET port_ore=port_ore-?, port_energy=port_energy-?, port_goods=port_goods-?, port_organics=port_organics-? WHERE sector_id = ?;", array($ore_buy, $energy_buy, $goods_buy, $organics_buy, $source['sector_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $resf, __LINE__, __FILE__);
             }
             if ($dist['scooped1'] > 0) {
                 $playerinfo['ship_energy'] += $dist['scooped1'];
                 if ($playerinfo['ship_energy'] > \Tki\CalcLevels::energy($playerinfo['power'], $tkireg)) {
                     $playerinfo['ship_energy'] = \Tki\CalcLevels::energy($playerinfo['power'], $tkireg);
                 }
             }
             if ($ore_buy == 0 && $goods_buy == 0 && $energy_buy == 0 && $organics_buy == 0) {
                 echo $langvars['l_tdr_nothingtotrade'] . "<br>";
             }
             if ($traderoute['circuit'] == '1') {
                 $resf = $db->Execute("UPDATE {$db->prefix}ships SET ship_ore = ?, ship_goods = ?, ship_organics = ?, ship_energy = ? WHERE ship_id = ?;", array($playerinfo['ship_ore'], $playerinfo['ship_goods'], $playerinfo['ship_organics'], $playerinfo['ship_energy'], $playerinfo['ship_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $resf, __LINE__, __FILE__);
             }
         }
     } elseif ($traderoute['source_type'] == 'L' || $traderoute['source_type'] == 'C') {
         $free_holds = \Tki\CalcLevels::holds($playerinfo['hull'], $tkireg) - $playerinfo['ship_ore'] - $playerinfo['ship_organics'] - $playerinfo['ship_goods'] - $playerinfo['ship_colonists'];
         if ($traderoute['dest_type'] == 'P') {
             // Pick stuff up to sell at port
             if ($playerinfo['ship_id'] == $source['owner'] || $playerinfo['team'] == $source['team']) {
                 if ($source['goods'] > 0 && $free_holds > 0 && $dest['port_type'] != 'goods') {
                     if ($source['goods'] > $free_holds) {
                         $goods_buy = $free_holds;
                     } else {
                         $goods_buy = $source['goods'];
                     }
                     $free_holds -= $goods_buy;
                     $playerinfo['ship_goods'] += $goods_buy;
                     echo $langvars['l_tdr_loaded'] . " " . number_format($goods_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_goods'] . "<br>";
                 } else {
                     $goods_buy = 0;
                 }
                 if ($source['ore'] > 0 && $free_holds > 0 && $dest['port_type'] != 'ore') {
                     if ($source['ore'] > $free_holds) {
                         $ore_buy = $free_holds;
                     } else {
                         $ore_buy = $source['ore'];
                     }
                     $free_holds -= $ore_buy;
                     $playerinfo['ship_ore'] += $ore_buy;
                     echo $langvars['l_tdr_loaded'] . " " . number_format($ore_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_ore'] . "<br>";
                 } else {
                     $ore_buy = 0;
                 }
                 if ($source['organics'] > 0 && $free_holds > 0 && $dest['port_type'] != 'organics') {
                     if ($source['organics'] > $free_holds) {
                         $organics_buy = $free_holds;
                     } else {
                         $organics_buy = $source['organics'];
                     }
                     $free_holds -= $organics_buy;
                     $playerinfo['ship_organics'] += $organics_buy;
                     echo $langvars['l_tdr_loaded'] . " " . number_format($organics_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_organics'] . "<br>";
                 } else {
                     $organics_buy = 0;
                 }
                 if ($ore_buy == 0 && $goods_buy == 0 && $organics_buy == 0) {
                     echo $langvars['l_tdr_nothingtoload'] . "<br>";
                 }
                 if ($traderoute['circuit'] == '1') {
                     $resg = $db->Execute("UPDATE {$db->prefix}ships SET ship_ore = ?, ship_goods = ?, ship_organics = ? WHERE ship_id = ?;", array($playerinfo['ship_ore'], $playerinfo['ship_goods'], $playerinfo['ship_organics'], $playerinfo['ship_id']));
                     \Tki\Db::LogDbErrors($pdo_db, $resg, __LINE__, __FILE__);
                 }
             }
             $resh = $db->Execute("UPDATE {$db->prefix}planets SET ore = ore - ?, goods = goods - ?, organics = organics - ? WHERE planet_id = ?;", array($ore_buy, $goods_buy, $organics_buy, $source['planet_id']));
             \Tki\Db::LogDbErrors($pdo_db, $resh, __LINE__, __FILE__);
         } elseif ($traderoute['dest_type'] == 'L' || $traderoute['dest_type'] == 'C') {
             if ($source['colonists'] > 0 && $free_holds > 0 && $playerinfo['trade_colonists'] == 'Y') {
                 if ($source['colonists'] > $free_holds) {
                     $colonists_buy = $free_holds;
                 } else {
                     $colonists_buy = $source['colonists'];
                 }
                 $free_holds -= $colonists_buy;
                 $playerinfo['ship_colonists'] += $colonists_buy;
                 echo $langvars['l_tdr_loaded'] . " " . number_format($colonists_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_colonists'] . "<br>";
             } else {
                 $colonists_buy = 0;
             }
             $free_torps = \Tki\CalcLevels::torpedoes($playerinfo['torp_launchers'], $tkireg) - $playerinfo['torps'];
             if ($source['torps'] > 0 && $free_torps > 0 && $playerinfo['trade_torps'] == 'Y') {
                 if ($source['torps'] > $free_torps) {
                     $torps_buy = $free_torps;
                 } else {
                     $torps_buy = $source['torps'];
                 }
                 $free_torps -= $torps_buy;
                 $playerinfo['torps'] += $torps_buy;
                 echo $langvars['l_tdr_loaded'] . " " . number_format($torps_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_torps'] . "<br>";
             } else {
                 $torps_buy = 0;
             }
             $free_fighters = \Tki\CalcLevels::fighters($playerinfo['computer'], $tkireg) - $playerinfo['ship_fighters'];
             if ($source['fighters'] > 0 && $free_fighters > 0 && $playerinfo['trade_fighters'] == 'Y') {
                 if ($source['fighters'] > $free_fighters) {
                     $fighters_buy = $free_fighters;
                 } else {
                     $fighters_buy = $source['fighters'];
                 }
                 $free_fighters -= $fighters_buy;
                 $playerinfo['ship_fighters'] += $fighters_buy;
                 echo $langvars['l_tdr_loaded'] . " " . number_format($fighters_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_fighters'] . "<br>";
             } else {
                 $fighters_buy = 0;
             }
             if ($fighters_buy == 0 && $torps_buy == 0 && $colonists_buy == 0) {
                 echo $langvars['l_tdr_nothingtoload'] . "<br>";
             }
             if ($traderoute['circuit'] == '1') {
                 $resi = $db->Execute("UPDATE {$db->prefix}ships SET torps = ?, ship_fighters = ?, ship_colonists = ? WHERE ship_id = ?;", array($playerinfo['torps'], $playerinfo['ship_fighters'], $playerinfo['ship_colonists'], $playerinfo['ship_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $resi, __LINE__, __FILE__);
             }
             $resj = $db->Execute("UPDATE {$db->prefix}planets SET colonists = colonists - ?, torps = torps - ?, fighters = fighters - ? WHERE planet_id = ?;", array($colonists_buy, $torps_buy, $fighters_buy, $source['planet_id']));
             \Tki\Db::LogDbErrors($pdo_db, $resj, __LINE__, __FILE__);
         }
     }
     if ($dist['scooped1'] != 0) {
         echo $langvars['l_tdr_scooped'] . " " . number_format($dist['scooped1'], 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_energy'] . "<br>";
     }
     \Tki\Traderoute3::traderouteResultsCloseCell();
     if ($traderoute['circuit'] == '2') {
         $playerinfo['credits'] += $sourcecost;
         $destcost = 0;
         if ($traderoute['dest_type'] == 'P') {
             // Added the below for traderoute bug
             $ore_buy = 0;
             $goods_buy = 0;
             $organics_buy = 0;
             $energy_buy = 0;
             // Sells commodities
             $portfull = 0;
             if ($dest['port_type'] != 'ore') {
                 $tkireg->ore_price = $tkireg->ore_price + ${$tkireg}->ore_delta * $dest['port_ore'] / $tkireg->ore_limit * $tkireg->inventory_factor;
                 if ($dest['port_ore'] - $playerinfo['ship_ore'] < 0) {
                     $ore_buy = $dest['port_ore'];
                     $portfull = 1;
                 } else {
                     $ore_buy = $playerinfo['ship_ore'];
                 }
                 $destcost += $ore_buy * $tkireg->ore_price;
                 if ($ore_buy != 0) {
                     if ($portfull == 1) {
                         echo $langvars['l_tdr_sold'] . " " . number_format($ore_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_ore'] . " (" . $langvars['l_tdr_portisfull'] . ")<br>";
                     } else {
                         echo $langvars['l_tdr_sold'] . " " . number_format($ore_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_ore'] . "<br>";
                     }
                 }
                 $playerinfo['ship_ore'] -= $ore_buy;
             }
             $portfull = 0;
             if ($dest['port_type'] != 'goods') {
                 $tkireg->goods_price = $tkireg->goods_price + $tkireg->goods_delta * $dest['port_goods'] / $tkireg->goods_limit * $tkireg->inventory_factor;
                 if ($dest['port_goods'] - $playerinfo['ship_goods'] < 0) {
                     $goods_buy = $dest['port_goods'];
                     $portfull = 1;
                 } else {
                     $goods_buy = $playerinfo['ship_goods'];
                 }
                 $destcost += $goods_buy * $tkireg->goods_price;
                 if ($goods_buy != 0) {
                     if ($portfull == 1) {
                         echo $langvars['l_tdr_sold'] . " " . number_format($goods_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_goods'] . " (" . $langvars['l_tdr_portisfull'] . ")<br>";
                     } else {
                         echo $langvars['l_tdr_sold'] . " " . number_format($goods_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_goods'] . "<br>";
                     }
                 }
                 $playerinfo['ship_goods'] -= $goods_buy;
             }
             $portfull = 0;
             if ($dest['port_type'] != 'organics') {
                 $tkireg->organics_price = $tkireg->organics_price + $tkireg->organics_delta * $dest['port_organics'] / $tkireg->organics_limit * $tkireg->inventory_factor;
                 if ($dest['port_organics'] - $playerinfo['ship_organics'] < 0) {
                     $organics_buy = $dest['port_organics'];
                     $portfull = 1;
                 } else {
                     $organics_buy = $playerinfo['ship_organics'];
                 }
                 $destcost += $organics_buy * $tkireg->organics_price;
                 if ($organics_buy != 0) {
                     if ($portfull == 1) {
                         echo $langvars['l_tdr_sold'] . " " . number_format($organics_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_organics'] . " (" . $langvars['l_tdr_portisfull'] . ")<br>";
                     } else {
                         echo $langvars['l_tdr_sold'] . " " . number_format($organics_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_organics'] . "<br>";
                     }
                 }
                 $playerinfo['ship_organics'] -= $organics_buy;
             }
             $portfull = 0;
             if ($dest['port_type'] != 'energy' && $playerinfo['trade_energy'] == 'Y') {
                 $tkireg->energy_price = $tkireg->energy_price + $tkireg->energy_delta * $dest['port_energy'] / $tkireg->energy_limit * $tkireg->inventory_factor;
                 if ($dest['port_energy'] - $playerinfo['ship_energy'] < 0) {
                     $energy_buy = $dest['port_energy'];
                     $portfull = 1;
                 } else {
                     $energy_buy = $playerinfo['ship_energy'];
                 }
                 $destcost += $energy_buy * $tkireg->energy_price;
                 if ($energy_buy != 0) {
                     if ($portfull == 1) {
                         echo $langvars['l_tdr_sold'] . " " . number_format($energy_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_energy'] . " (" . $langvars['l_tdr_portisfull'] . ")<br>";
                     } else {
                         echo $langvars['l_tdr_sold'] . " " . number_format($energy_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_energy'] . "<br>";
                     }
                 }
                 $playerinfo['ship_energy'] -= $energy_buy;
             } else {
                 $energy_buy = 0;
             }
             $free_holds = \Tki\CalcLevels::holds($playerinfo['hull'], $tkireg) - $playerinfo['ship_ore'] - $playerinfo['ship_organics'] - $playerinfo['ship_goods'] - $playerinfo['ship_colonists'];
             // Time to buy
             if ($dest['port_type'] == 'ore') {
                 $tkireg->ore_price = $tkireg->ore_price - ${$tkireg}->ore_delta * $dest['port_ore'] / $tkireg->ore_limit * $tkireg->inventory_factor;
                 if ($traderoute['source_type'] == 'L') {
                     $ore_buy = 0;
                 } else {
                     $ore_buy = $free_holds;
                     if ($playerinfo['credits'] + $destcost < $ore_buy * $tkireg->ore_price) {
                         $ore_buy = ($playerinfo['credits'] + $destcost) / $tkireg->ore_price;
                     }
                     if ($dest['port_ore'] < $ore_buy) {
                         $ore_buy = $dest['port_ore'];
                         if ($dest['port_ore'] == 0) {
                             echo $langvars['l_tdr_bought'] . " " . number_format($ore_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_ore'] . " (" . $langvars['l_tdr_portisempty'] . ")<br>";
                         }
                     }
                     if ($ore_buy != 0) {
                         echo $langvars['l_tdr_bought'] . " " . number_format($ore_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_ore'] . "<br>";
                     }
                     $playerinfo['ship_ore'] += $ore_buy;
                     $destcost -= $ore_buy * $tkireg->ore_price;
                 }
                 $resk = $db->Execute("UPDATE {$db->prefix}universe SET port_ore = port_ore - ?, port_energy = port_energy - ?, port_goods = port_goods - ?, port_organics = port_organics - ? WHERE sector_id = ?;", array($ore_buy, $energy_buy, $goods_buy, $organics_buy, $dest['sector_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $resk, __LINE__, __FILE__);
             }
             if ($dest['port_type'] == 'goods') {
                 $tkireg->goods_price = $tkireg->goods_price - $tkireg->goods_delta * $dest['port_goods'] / $tkireg->goods_limit * $tkireg->inventory_factor;
                 if ($traderoute['source_type'] == 'L') {
                     $goods_buy = 0;
                 } else {
                     $goods_buy = $free_holds;
                     if ($playerinfo['credits'] + $destcost < $goods_buy * $tkireg->goods_price) {
                         $goods_buy = ($playerinfo['credits'] + $destcost) / $tkireg->goods_price;
                     }
                     if ($dest['port_goods'] < $goods_buy) {
                         $goods_buy = $dest['port_goods'];
                         if ($dest['port_goods'] == 0) {
                             echo $langvars['l_tdr_bought'] . " " . number_format($goods_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_goods'] . " (" . $langvars['l_tdr_portisempty'] . ")<br>";
                         }
                     }
                     if ($goods_buy != 0) {
                         echo $langvars['l_tdr_bought'] . " " . number_format($goods_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_goods'] . "<br>";
                     }
                     $playerinfo['ship_goods'] += $goods_buy;
                     $destcost -= $goods_buy * $tkireg->goods_price;
                 }
                 $resl = $db->Execute("UPDATE {$db->prefix}universe SET port_ore = port_ore - ?, port_energy = port_energy - ?, port_goods = port_goods - ?, port_organics = port_organics - ? WHERE sector_id = ?;", array($ore_buy, $energy_buy, $goods_buy, $organics_buy, $dest['sector_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $resl, __LINE__, __FILE__);
             }
             if ($dest['port_type'] == 'organics') {
                 $tkireg->organics_price = $tkireg->organics_price - $tkireg->organics_delta * $dest['port_organics'] / $tkireg->organics_limit * $tkireg->inventory_factor;
                 if ($traderoute['source_type'] == 'L') {
                     $organics_buy = 0;
                 } else {
                     $organics_buy = $free_holds;
                     if ($playerinfo['credits'] + $destcost < $organics_buy * $tkireg->organics_price) {
                         $organics_buy = ($playerinfo['credits'] + $destcost) / $tkireg->organics_price;
                     }
                     if ($dest['port_organics'] < $organics_buy) {
                         $organics_buy = $dest['port_organics'];
                         if ($dest['port_organics'] == 0) {
                             echo $langvars['l_tdr_bought'] . " " . number_format($organics_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_organics'] . " (" . $langvars['l_tdr_portisempty'] . ")<br>";
                         }
                     }
                     if ($organics_buy != 0) {
                         echo $langvars['l_tdr_bought'] . " " . number_format($organics_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_organics'] . "<br>";
                     }
                     $playerinfo['ship_organics'] += $organics_buy;
                     $destcost -= $organics_buy * $tkireg->organics_price;
                 }
                 $resm = $db->Execute("UPDATE {$db->prefix}universe SET port_ore = port_ore - ?, port_energy = port_energy - ?, port_goods = port_goods - ?, port_organics = port_organics - ? WHERE sector_id = ?;", array($ore_buy, $energy_buy, $goods_buy, $organics_buy, $dest['sector_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $resm, __LINE__, __FILE__);
             }
             if ($dest['port_type'] == 'energy') {
                 $tkireg->energy_price = $tkireg->energy_price - $tkireg->energy_delta * $dest['port_energy'] / $tkireg->energy_limit * $tkireg->inventory_factor;
                 if ($traderoute['source_type'] == 'L') {
                     $energy_buy = 0;
                 } else {
                     $energy_buy = \Tki\CalcLevels::energy($playerinfo['power'], $tkireg) - $playerinfo['ship_energy'] - $dist['scooped1'];
                     if ($playerinfo['credits'] + $destcost < $energy_buy * $tkireg->energy_price) {
                         $energy_buy = ($playerinfo['credits'] + $destcost) / $tkireg->energy_price;
                     }
                     if ($dest['port_energy'] < $energy_buy) {
                         $energy_buy = $dest['port_energy'];
                         if ($dest['port_energy'] == 0) {
                             echo $langvars['l_tdr_bought'] . " " . number_format($energy_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_energy'] . " (" . $langvars['l_tdr_portisempty'] . ")<br>";
                         }
                     }
                     if ($energy_buy != 0) {
                         echo $langvars['l_tdr_bought'] . " " . number_format($energy_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_energy'] . "<br>";
                     }
                     $playerinfo['ship_energy'] += $energy_buy;
                     $destcost -= $energy_buy * $tkireg->energy_price;
                 }
                 if ($ore_buy == 0 && $goods_buy == 0 && $energy_buy == 0 && $organics_buy == 0) {
                     echo $langvars['l_tdr_nothingtotrade'] . "<br>";
                 }
                 $resn = $db->Execute("UPDATE {$db->prefix}universe SET port_ore = port_ore - ?, port_energy = port_energy - ?, port_goods = port_goods - ?, port_organics = port_organics - ? WHERE sector_id = ?;", array($ore_buy, $energy_buy, $goods_buy, $organics_buy, $dest['sector_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $resn, __LINE__, __FILE__);
             }
             if ($dist['scooped2'] > 0) {
                 $playerinfo['ship_energy'] += $dist['scooped2'];
                 if ($playerinfo['ship_energy'] > \Tki\CalcLevels::energy($playerinfo['power'], $tkireg)) {
                     $playerinfo['ship_energy'] = \Tki\CalcLevels::energy($playerinfo['power'], $tkireg);
                 }
             }
             $reso = $db->Execute("UPDATE {$db->prefix}ships SET ship_ore = ?, ship_goods = ?, ship_organics = ?, ship_energy = ? WHERE ship_id = ?;", array($playerinfo['ship_ore'], $playerinfo['ship_goods'], $playerinfo['ship_organics'], $playerinfo['ship_energy'], $playerinfo['ship_id']));
             \Tki\Db::LogDbErrors($pdo_db, $reso, __LINE__, __FILE__);
         } else {
             if ($traderoute['source_type'] == 'L' || $traderoute['source_type'] == 'C') {
                 $colonists_buy = 0;
                 $fighters_buy = 0;
                 $torps_buy = 0;
             }
             $setcol = 0;
             if ($playerinfo['trade_colonists'] == 'Y') {
                 $colonists_buy += $playerinfo['ship_colonists'];
                 $col_dump = $playerinfo['ship_colonists'];
                 if ($dest['colonists'] + $colonists_buy >= $tkireg->colonist_limit) {
                     $exceeding = $dest['colonists'] + $colonists_buy - $tkireg->colonist_limit;
                     $col_dump = $exceeding;
                     $setcol = 1;
                     $colonists_buy -= $exceeding;
                     if ($colonists_buy < 0) {
                         $colonists_buy = 0;
                     }
                 }
             } else {
                 $col_dump = 0;
             }
             if ($colonists_buy != 0) {
                 if ($setcol == 1) {
                     echo $langvars['l_tdr_dumped'] . " " . number_format($colonists_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_colonists'] . " (" . $langvars['l_tdr_planetisovercrowded'] . ")<br>";
                 } else {
                     echo $langvars['l_tdr_dumped'] . " " . number_format($colonists_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_colonists'] . "<br>";
                 }
             }
             if ($playerinfo['trade_fighters'] == 'Y') {
                 $fighters_buy += $playerinfo['ship_fighters'];
                 $fight_dump = $playerinfo['ship_fighters'];
             } else {
                 $fight_dump = 0;
             }
             if ($fighters_buy != 0) {
                 echo $langvars['l_tdr_dumped'] . " " . number_format($fighters_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_fighters'] . "<br>";
             }
             if ($playerinfo['trade_torps'] == 'Y') {
                 $torps_buy += $playerinfo['torps'];
                 $torps_dump = $playerinfo['torps'];
             } else {
                 $torps_dump = 0;
             }
             if ($torps_buy != 0) {
                 echo $langvars['l_tdr_dumped'] . " " . number_format($torps_buy, 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_torps'] . "<br>";
             }
             if ($torps_buy == 0 && $fighters_buy == 0 && $colonists_buy == 0) {
                 echo $langvars['l_tdr_nothingtodump'] . "<br>";
             }
             if ($traderoute['source_type'] == 'L' || $traderoute['source_type'] == 'C') {
                 if ($playerinfo['trade_colonists'] == 'Y') {
                     if ($setcol != 1) {
                         $col_dump = 0;
                     }
                 } else {
                     $col_dump = $playerinfo['ship_colonists'];
                 }
                 if ($playerinfo['trade_fighters'] == 'Y') {
                     $fight_dump = 0;
                 } else {
                     $fight_dump = $playerinfo['ship_fighters'];
                 }
                 if ($playerinfo['trade_torps'] == 'Y') {
                     $torps_dump = 0;
                 } else {
                     $torps_dump = $playerinfo['torps'];
                 }
             }
             $resp = $db->Execute("UPDATE {$db->prefix}planets SET colonists = colonists + ?, fighters = fighters + ?, torps = torps + ? WHERE planet_id = ?;", array($colonists_buy, $fighters_buy, $torps_buy, $traderoute['dest_id']));
             \Tki\Db::LogDbErrors($pdo_db, $resp, __LINE__, __FILE__);
             if ($traderoute['source_type'] == 'L' || $traderoute['source_type'] == 'C') {
                 $resq = $db->Execute("UPDATE {$db->prefix}ships SET ship_colonists = ?, ship_fighters = ?, torps = ?, ship_energy = ship_energy + ? WHERE ship_id = ?;", array($col_dump, $fight_dump, $torps_dump, $dist['scooped'], $playerinfo['ship_id']));
                 \Tki\Db::LogDbErrors($pdo_db, $resq, __LINE__, __FILE__);
             } else {
                 if ($setcol == 1) {
                     $resr = $db->Execute("UPDATE {$db->prefix}ships SET ship_colonists = ?, ship_fighters = ship_fighters - ?, torps = torps - ?, ship_energy = ship_energy + ? WHERE ship_id = ?;", array($col_dump, $fight_dump, $torps_dump, $dist['scooped'], $playerinfo['ship_id']));
                     \Tki\Db::LogDbErrors($pdo_db, $resr, __LINE__, __FILE__);
                 } else {
                     $ress = $db->Execute("UPDATE {$db->prefix}ships SET ship_colonists = ship_colonists - ?, ship_fighters = ship_fighters - ?, torps = torps - ?, ship_energy = ship_energy + ? WHERE ship_id = ?;", array($col_dump, $fight_dump, $torps_dump, $dist['scooped'], $playerinfo['ship_id']));
                     \Tki\Db::LogDbErrors($pdo_db, $ress, __LINE__, __FILE__);
                 }
             }
         }
         if ($dist['scooped2'] != 0) {
             echo $langvars['l_tdr_scooped'] . " " . number_format($dist['scooped1'], 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']) . " " . $langvars['l_tdr_energy'] . "<br>";
         }
     } else {
         echo $langvars['l_tdr_onlyonewaytdr'];
         $destcost = 0;
     }
     \Tki\Traderoute3::traderouteResultsShowCost($tkireg);
     if ($sourcecost > 0) {
         echo $langvars['l_tdr_profit'] . " : " . number_format(abs($sourcecost), 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']);
     } else {
         echo $langvars['l_tdr_cost'] . " : " . number_format(abs($sourcecost), 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']);
     }
     \Tki\Traderoute3::traderouteResultsCloseCost();
     if ($destcost > 0) {
         echo $langvars['l_tdr_profit'] . " : " . number_format(abs($destcost), 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']);
     } else {
         echo $langvars['l_tdr_cost'] . " : " . number_format(abs($destcost), 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']);
     }
     \Tki\Traderoute3::traderouteResultsCloseTable();
     $total_profit = $sourcecost + $destcost;
     \Tki\Traderoute3::traderouteResultsDisplayTotals($pdo_db, $lang, $total_profit);
     if ($traderoute['circuit'] == '1') {
         $newsec = $destport['sector_id'];
     } else {
         $newsec = $sourceport['sector_id'];
     }
     $rest = $db->Execute("UPDATE {$db->prefix}ships SET turns = turns - ?, credits = credits + ?, turns_used = turns_used + ?, sector = ? WHERE ship_id = ?;", array($dist['triptime'], $total_profit, $dist['triptime'], $newsec, $playerinfo['ship_id']));
     \Tki\Db::LogDbErrors($pdo_db, $rest, __LINE__, __FILE__);
     $playerinfo['credits'] += $total_profit - $sourcecost;
     $playerinfo['turns'] -= $dist['triptime'];
     $tdr_display_creds = number_format($playerinfo['credits'], 0, $langvars['local_number_dec_point'], $langvars['local_number_thousands_sep']);
     \Tki\Traderoute3::traderouteResultsDisplaySummary($pdo_db, $lang, $tdr_display_creds, $dist, $playerinfo);
     // echo $j . " -- ";
     if ($traderoute['circuit'] == 2) {
         $langvars['l_tdr_engageagain'] = str_replace("[here]", "<a href=\"traderoute.php?engage=[tdr_engage]\">" . $langvars['l_here'] . "</a>", $langvars['l_tdr_engageagain']);
         $langvars['l_tdr_engageagain'] = str_replace("[five]", "<a href=\"traderoute.php?engage=[tdr_engage]&amp;tr_repeat=5\">" . $langvars['l_tdr_five'] . "</a>", $langvars['l_tdr_engageagain']);
         $langvars['l_tdr_engageagain'] = str_replace("[ten]", "<a href=\"traderoute.php?engage=[tdr_engage]&amp;tr_repeat=10\">" . $langvars['l_tdr_ten'] . "</a>", $langvars['l_tdr_engageagain']);
         $langvars['l_tdr_engageagain'] = str_replace("[fifty]", "<a href=\"traderoute.php?engage=[tdr_engage]&amp;tr_repeat=50\">" . $langvars['l_tdr_fifty'] . "</a>", $langvars['l_tdr_engageagain']);
         $langvars['l_tdr_engageagain'] = str_replace("[tdr_engage]", $engage, $langvars['l_tdr_engageagain']);
         if ($j == 1) {
             echo $langvars['l_tdr_engageagain'] . "\n";
             \Tki\Traderoute3::traderouteResultsShowRepeat($engage);
         }
     }
     if ($j == 1) {
         \Tki\Traderoute2::traderouteDie($pdo_db, $lang, $tkireg, null, $template);
     }
 }