Beispiel #1
0
 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;
     }
 }
Beispiel #2
0
 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;
 }
Beispiel #3
0
 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.
 }
Beispiel #4
0
 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;
 }
Beispiel #5
0
 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;
 }
Beispiel #6
0
 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;
     }
 }
Beispiel #7
0
 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
 }
Beispiel #8
0
 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;
     }
 }
Beispiel #9
0
 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;
 }
Beispiel #10
0
 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__);
 }
Beispiel #11
0
 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;
     }
 }
Beispiel #12
0
 public static function planetBombing(\PDO $pdo_db, string $lang, array $langvars, Reg $tkireg, array $playerinfo, array $ownerinfo, array $planetinfo, Smarty $template)
 {
     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;
     }
     echo $langvars['l_bombsaway'] . "<br><br>\n";
     $planetfighterslost = 0;
     $attackerfitscapacity = \Tki\CalcLevels::fighters($playerinfo['computer'], $tkireg);
     $ownerfightercapacity = \Tki\CalcLevels::fighters($ownerinfo['computer'], $tkireg);
     $planettorps = \Tki\CalcLevels::planetTorps($pdo_db, $ownerinfo, $planetinfo, $tkireg);
     $planetbeams = \Tki\CalcLevels::planetBeams($pdo_db, $ownerinfo, $tkireg->base_defense, $planetinfo);
     $planetfighters = $planetinfo['fighters'];
     $attackerfighters = $playerinfo['ship_fighters'];
     if ($ownerfightercapacity / $attackerfitscapacity < 1) {
         echo $langvars['l_bigfigs'] . "<br><br>\n";
     }
     if ($planetbeams <= $attackerfighters) {
         $attackerfighterslost = $planetbeams;
         $beamsused = $planetbeams;
     } else {
         $attackerfighterslost = $attackerfighters;
         $beamsused = $attackerfighters;
     }
     if ($attackerfighters <= $attackerfighterslost) {
         echo $langvars['l_bigbeams'] . "<br>\n";
     } else {
         $attackerfighterslost += $planettorps * $tkireg->torp_dmg_rate;
         if ($attackerfighters <= $attackerfighterslost) {
             echo $langvars['l_bigtorps'] . "<br>\n";
         } else {
             echo $langvars['l_strafesuccess'] . "<br>\n";
             if ($ownerfightercapacity / $attackerfitscapacity > 1) {
                 $planetfighterslost = $attackerfighters - $attackerfighterslost;
             } else {
                 $planetfighterslost = round(($attackerfighters - $attackerfighterslost) * $ownerfightercapacity / $attackerfitscapacity);
             }
             if ($planetfighterslost > $planetfighters) {
                 $planetfighterslost = $planetfighters;
             }
         }
     }
     echo "<br><br>\n";
     \Tki\PlayerLog::WriteLog($pdo_db, $ownerinfo['ship_id'], LOG_PLANET_BOMBED, "{$planetinfo['name']}|{$playerinfo['sector']}|{$playerinfo['character_name']}|{$beamsused}|{$planettorps}|{$planetfighterslost}");
     $stmt = $pdo_db->prepare("UPDATE ::prefix::ships SET turns = turns - 1, turns_used = turns_used + 1, ship_fighters = ship_fighters - :ship_fighters WHERE ship_id=:ship_id");
     $stmt->bindParam(':ship_fighters', $attackerfighters);
     $stmt->bindParam(':ship_id', $playerinfo['ship_id']);
     $result = $stmt->execute();
     \Tki\Db::logDbErrors($pdo_db, $result, __LINE__, __FILE__);
     $stmt = $pdo_db->prepare("UPDATE ::prefix::planets SET energy = energy - :energy, fighters = fighters - :fighters, torps = torps - :torps WHERE planet_id=:planet_id");
     $stmt->bindParam(':energy', $beamsused);
     $stmt->bindParam(':fighters', $planetfighterslost);
     $stmt->bindParam(':torps', $planettorps);
     $stmt->bindParam(':planet_id', $planetinfo['planet_id']);
     $result = $stmt->execute();
     \Tki\Db::logDbErrors($pdo_db, $result, __LINE__, __FILE__);
 }
Beispiel #13
0
 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__);
 }