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; } }
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; }
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. }
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; }
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; }
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; } }
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 }
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; } }
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; }
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> <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__); }
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; } }
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__); }
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> <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__); }