public static function duped_ips() { $host = gethostname(); $server_ip = gethostbyname($host); return query_array('select uname, player_id, ip from players where ip in (SELECT ip FROM players WHERE active = 1 and ip != \'\' and ip != \'127.0.0.1\' and ip != \'' . $server_ip . '\' GROUP BY ip HAVING count(*) > 1 ORDER BY count(*) ASC limit 30) order by ip'); }
function member_counts() { $counts = query_array("(SELECT count(session_id) FROM ppl_online WHERE member AND activity > (now() - CAST('30 minutes' AS interval))) \n\t\tUNION ALL (SELECT count(session_id) FROM ppl_online WHERE member) \n\t\tUNION ALL (select count(player_id) from players where active = 1)"); $active_row = array_shift($counts); $online_row = array_shift($counts); $total_row = array_shift($counts); return array('active' => reset($active_row), 'online' => reset($online_row), 'total' => end($total_row)); }
public static function high_rollers() { // Select first few max kills from players. // Max turns. // Max gold. // Max kills // etc. $res = array(); $res['gold'] = query_array('select player_id, uname, gold from players order by gold desc limit 10'); $res['turns'] = query_array('select player_id, uname, turns from players order by turns desc limit 10'); $res['kills'] = query_array('select player_id, uname, kills from players order by kills desc limit 10'); $res['health'] = query_array('select player_id, uname, health from players order by health desc limit 10'); $res['ki'] = query_array('select player_id, uname, ki from players order by ki desc limit 10'); return $res; }
function json_index() { DatabaseConnection::getInstance(); $player = public_self_info(); $events = array(); $messages = array(); $user_id = $player['player_id']; $unread_messages = null; $unread_events = null; if ($user_id) { $events = DatabaseConnection::$pdo->prepare("SELECT event_id, message AS event, date, send_to, send_from, unread, uname AS sender FROM events JOIN players ON player_id = send_from WHERE send_to = :userID and unread = 1 ORDER BY date DESC"); $events->bindValue(':userID', $user_id); $events->execute(); $unread_events = $events->rowCount(); $messages = DatabaseConnection::$pdo->prepare("SELECT message_id, message, date, send_to, send_from, unread, uname AS sender FROM messages JOIN players ON player_id = send_from WHERE send_to = :userID1 AND send_from != :userID2 and unread = 1 ORDER BY date DESC"); $messages->bindValue(':userID1', $user_id); $messages->bindValue(':userID2', $user_id); $messages->execute(); $unread_messages = $messages->rowCount(); } return '{"player":' . json_encode($player) . ', "member_counts":' . json_member_count() . ', "unread_messages_count":' . json_encode($unread_messages) . ', "message":' . json_encode(!empty($messages) ? $messages->fetch() : null) . ', "inventory":{"inv":1,"items":' . json_encode(query_array("SELECT item.item_display_name as item, amount FROM inventory join item on inventory.item_type = item.item_id WHERE owner = :user_id ORDER BY item_display_name", array(':user_id' => $user_id))) . ',"hash":"' . md5(strtotime("now")) . '"}, "unread_events_count":' . json_encode($unread_events) . ', "event":' . json_encode(!empty($events) ? $events->fetch() : null) . '}'; }
/** * Select characters right nearby in ranking score, up and down. * * @param int $p_playerId * @return array */ private function getNearbyPeers($p_playerId) { $sel = "(SELECT rank_id, uname, level, player_id, health FROM players JOIN player_rank ON _player_id = player_id WHERE score >\n (SELECT score FROM player_rank WHERE _player_id = :char_id) AND active = 1 AND health > 0 ORDER BY score ASC LIMIT 5)\n UNION\n (SELECT rank_id, uname, level, player_id, health FROM players JOIN player_rank ON _player_id = player_id WHERE score <\n (SELECT score FROM player_rank WHERE _player_id = :char_id2) AND active = 1 AND health > 0 ORDER BY score DESC LIMIT 5)"; $peers = query_array($sel, [':char_id' => [$p_playerId, PDO::PARAM_INT], ':char_id2' => [$p_playerId, PDO::PARAM_INT]]); if (!count($peers)) { // Get bottom 10 players if not yet ranked. $peers = query_array('SELECT rank_id, uname, level, player_id, health FROM players JOIN player_rank ON _player_id = player_id where active = 1 and health > 0 order by rank_id desc limit 10'); } return $peers; }
<?php require_once LIB_ROOT . "control/lib_player.php"; $private = false; $alive = false; if ($error = init($private, $alive)) { redirect('list.php'); } else { $stats = membership_and_combat_stats(); $vicious_killer = $stats['vicious_killer']; $duels = query_array("SELECT dueling_log.*, attackers.player_id AS attacker_id, defenders.player_id AS defender_id FROM dueling_log JOIN players AS attackers ON attackers.uname = attacker JOIN players AS defenders ON defender = defenders.uname ORDER BY id DESC LIMIT 500"); display_page('duel.tpl', 'Bath House', get_certain_vars(get_defined_vars(), array('duels')), array('quickstat' => false)); }
function inventory_counts($char_id) { $sql = "SELECT amount AS count, item_display_name AS name, item_type, item.item_id, other_usable\n\t\tFROM inventory join item on item_type = item.item_id\n\t\tWHERE owner = :owner ORDER BY item_internal_name = 'shuriken' DESC, item_display_name"; return query_array($sql, array(':owner' => array($char_id, PDO::PARAM_INT))); }
/** * Returns a view spec hash for rendering a template * * @param Array $parts Hash of variables to pass to the view * @return Response */ private function render($parts) { $char = Player::findPlayable($this->getAccountId()); if (!$char) { $char = new Player(); } $myBounty = $char->bounty; // Pulling the bounties. $bounties = query_array("SELECT player_id, uname, bounty, class_name AS class, level, clan_id, clan_name\n FROM players JOIN class ON class_id = _class_id LEFT JOIN clan_player ON player_id = _player_id\n LEFT JOIN clan ON clan_id = _clan_id WHERE bounty > 0 AND active = 1 and health > 0 ORDER BY bounty DESC"); $parts['bounties'] = $bounties; $parts['myBounty'] = $myBounty; $parts['char'] = $char; $parts['display_gold'] = number_format($char->gold); $quickstat = $parts['quickstat']; return new StreamedViewResponse('Doshin Office', 'doshin.tpl', $parts, ['quickstat' => $quickstat]); }
/** * Get the members of a clan, */ public function getMembers() { $membersArray = query_array('SELECT uname, accounts.active_email as email, clan_name, level, days, clan_founder, player_id, member_level ' . 'FROM clan JOIN clan_player ON _clan_id = :clan_id AND clan_id = _clan_id JOIN players ON player_id = clan_player._player_id ' . 'JOIN account_players on player_id = account_players._player_id join accounts on account_id = _account_id ' . 'AND active = 1 ORDER BY level, health DESC', [':clan_id' => $this->id()]); $max = query_item('SELECT max(level) AS max ' . 'FROM clan ' . 'JOIN clan_player ON _clan_id = :clan_id AND clan_id = _clan_id ' . 'JOIN players ON player_id = _player_id AND active = 1', [':clan_id' => $this->id()]); // Modify the members by reference foreach ($membersArray as &$member) { $member['leader'] = false; $member['size'] = floor(($member['level'] - $member['days'] < 1 ? 0 : $member['level'] - $member['days']) / $max * 2) + 1; // Calc the member display size based on their level relative to the max. if ($member['member_level'] >= 1) { $member['leader'] = true; $member['size'] = max($member['size'] + 2, 3); } $member['gravatar_url'] = (new Player($member['player_id']))->avatarUrl(); } return $membersArray; }
init(true, false); // Initialize the environment. // TODO: Protect this file from unlogged-in displaying. // *** Turning the header variables into variables for this page. $section_only = in('section_only') === '1'; // Check whether it's an ajax section. $command = in('command'); $user_id = get_user_id(); $info = self_info(); $health = $user_id ? $info['health'] : 0; $strength = $user_id ? $info['strength'] : 0; $gold = $user_id ? $info['gold'] : 0; $kills = $user_id ? $info['kills'] : 0; $turns = $user_id ? $info['turns'] : 0; $level = $user_id ? $info['level'] : 0; $class = $user_id ? $info['class'] : 0; $bounty = $user_id ? $info['bounty'] : 0; $player = new Player($user_id); $username = $player->vo->uname; $next_level = $player->vo->level * 5; // This needs to have a more centralized formula source. $max_health = max_health_by_level($level); $progress = $user_id ? min(100, round($kills / $next_level * 100)) : 0; $health_pct = $user_id ? min(100, round($health / $max_health * 100)) : 0; $status_list = get_status_list(); $viewinv = $command == 'viewinv'; // *** TODO: switch this to query() when we switch to SMARTY. Templatelite can't handle iterating over the resultset *** $items = query_array("SELECT item.item_display_name as item, amount FROM inventory join item on item_type = item.item_id WHERE owner = :user ORDER BY item.item_display_name", array(':user' => $user_id)); $parts = get_certain_vars(get_defined_vars(), array('items', 'status_list')); // Pull current flat vars + the resultset into the template. display_page('quickstats.tpl', 'Quickstats', $parts, array('quickstat' => false));
function nearby_peers($char_id) { $sel = "(SELECT rank_id, uname, level, player_id, health FROM players JOIN player_rank ON _player_id = player_id WHERE score >\n (SELECT score FROM player_rank WHERE _player_id = :char_id) AND active = 1 AND health > 0 ORDER BY score ASC LIMIT 5)\n UNION\n (SELECT rank_id, uname, level, player_id, health FROM players JOIN player_rank ON _player_id = player_id WHERE score <\n (SELECT score FROM player_rank WHERE _player_id = :char_id2) AND active = 1 AND health > 0 ORDER BY score DESC LIMIT 5)"; $peers = query_array($sel, array(':char_id' => array($char_id, PDO::PARAM_INT), ':char_id2' => array($char_id, PDO::PARAM_INT))); if (!count($peers)) { // Get bottom 10 players if not yet ranked. $peers = query_array('SELECT rank_id, uname, level, player_id, health FROM players JOIN player_rank ON _player_id = player_id where active = 1 and health > 0 order by rank_id desc limit 10'); } $peers = array_map('format_health_percent', $peers); return $peers; }
/** * Pull an item's effects. * * @param int $itemId * @return array */ private function itemEffects($itemId) { $sel = 'SELECT ' . 'effect_identity, effect_name, effect_verb, effect_self ' . 'FROM effects JOIN item_effects ON _effect_id = effect_id ' . 'WHERE _item_id = :item_id'; $data = query_array($sel, [':item_id' => [$itemId, PDO::PARAM_INT]]); $res = array(); foreach ($data as $effect) { $res[strtolower($effect['effect_identity'])] = $effect; } return $res; }
public static function allData() { return query_array('select clan_id, clan_name, clan_created_date, clan_founder, clan_avatar_url, description from clan'); }
/** * Action to request class change form AND execute class change * * @todo split form request and execute into separate funcs * @param Container * @return Response */ public function changeClass(Container $p_dependencies) { if ($p_dependencies['session']->get('authenticated', false)) { $player = $p_dependencies['current_player']; $classes = query_array('select class_id, identity, class_name, class_note, class_tier, class_desc, class_icon, theme from class where class_active = true'); $requestedIdentity = RequestWrapper::getPostOrGet('requested_identity'); $currentClass = $player->identity; $showMonks = false; $parts = []; if (isset($classes[$requestedIdentity])) { $error = $this->classChangeReqs($player, self::CLASS_CHANGE_COST); if ($currentClass != $requestedIdentity && !$error) { $error = $this->changePlayerClass($player, $requestedIdentity); } $currentClass = $player->identity; if (!$error) { $parts['pageParts'] = ['success-class-change']; $showMonks = true; } else { $parts['error'] = $error; } } else { $parts['pageParts'] = ['form-class-change']; } unset($classes[$currentClass]); $parts['classOptions'] = $classes; return $this->render($parts, $player, $showMonks); } else { return $this->accessDenied(); } }
/** * Pull the class choices. * * @todo Move this to a model * @return String[][] An array of class attributes indexed by class key */ private function class_choices() { $activeClasses = query_array('SELECT identity, class_name, class_note AS expertise FROM class WHERE class_active'); $classes = array(); foreach ($activeClasses as $loopClass) { $classes[$loopClass['identity']] = ['name' => $loopClass['class_name'], 'expertise' => $loopClass['expertise']]; } return $classes; }
/** * Returns a view spec hash for rendering a template * * @param Array $parts Hash of variables to pass to the view * @return Array */ private function render($parts) { $char = new Player(self_char_id()); $myBounty = $char->bounty(); // Pulling the bounties. $bounties = query_array("SELECT player_id, uname, bounty, class_name AS class, level, clan_id, clan_name\n FROM players JOIN class ON class_id = _class_id LEFT JOIN clan_player ON player_id = _player_id\n LEFT JOIN clan ON clan_id = _clan_id WHERE bounty > 0 AND active = 1 and health > 0 ORDER BY bounty DESC"); $parts['bounties'] = $bounties; $parts['myBounty'] = $myBounty; $parts['char'] = $char; $parts['display_gold'] = number_format($char->gold()); $quickstat = $parts['quickstat']; return ['template' => 'doshin.tpl', 'title' => 'Doshin Office', 'parts' => $parts, 'options' => ['quickstat' => $quickstat]]; }
function item_effects($item_id) { $sel = 'SELECT effect_identity, effect_name, effect_verb, effect_self FROM effects JOIN item_effects ON _effect_id = effect_id WHERE _item_id = :item_id'; $data = query_array($sel, array(':item_id' => array($item_id, PDO::PARAM_INT))); $res = array(); foreach ($data as $effect) { $res[strtolower($effect['effect_identity'])] = $effect; } return $res; }
function is_valid_class($potential_class_identity) { $sel = "select identity from class"; $classes = query_array($sel); foreach ($classes as $l_class) { if ($l_class['identity'] == $potential_class_identity) { return true; } } return false; }
private function duels() { return query_array("SELECT dueling_log.*, attackers.player_id AS attacker_id, defenders.player_id AS defender_id FROM dueling_log JOIN players AS attackers ON attackers.uname = attacker JOIN players AS defenders ON defender = defenders.uname ORDER BY id DESC LIMIT 500"); }
/** * Returns a view spec hash for rendering a template * * @param p_data Array Hash of variables to pass to the view * @return Array */ private function render($p_data) { $myBounty = getBounty($this->sessionData['char_id']); // Pulling the bounties. $data = query_array("SELECT player_id, uname, bounty, class_name AS class, level, clan_id, clan_name \n\t\t\tFROM players JOIN class ON class_id = _class_id LEFT JOIN clan_player ON player_id = _player_id \n\t\t\tLEFT JOIN clan ON clan_id = _clan_id WHERE bounty > 0 AND active = 1 and health > 0 ORDER BY bounty DESC"); $p_data['data'] = $data; $p_data['myBounty'] = $myBounty; return ['template' => 'doshin.tpl', 'title' => 'Doshin Office', 'parts' => $p_data, 'options' => ['quickstat' => $p_data['quickstat']]]; }
/** * query the recently active players * @return array */ public static function findActive($limit = 5, $alive_only = true) { $where_cond = $alive_only ? ' AND health > 0' : ''; $sel = "SELECT uname, player_id FROM players WHERE active = 1 {$where_cond} ORDER BY last_started_attack DESC LIMIT :limit"; $active_ninjas = query_array($sel, array(':limit' => array($limit, PDO::PARAM_INT))); return $active_ninjas; }
function clan_member_names_and_ids($clan_id, $self_char_id) { $member_select = 'SELECT uname, player_id FROM players JOIN clan_player ON player_id = _player_id WHERE _clan_id = :clan_id AND player_id <> :player_id'; $members_and_ids = query_array($member_select, array(':clan_id' => $clan_id, ':player_id' => $self_char_id)); return $members_and_ids; }
function class_choices() { $st = query_array('SELECT identity, class_name, class_note as expertise FROM class WHERE class_active'); $classes = array(); foreach ($st as $loop_class) { $classes[$loop_class['identity']] = array('name' => $loop_class['class_name'], 'expertise' => $loop_class['expertise']); } return $classes; }