예제 #1
0
파일: index.php 프로젝트: reillo/ninjawars
    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');
    }
예제 #2
0
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));
}
예제 #3
0
 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;
 }
예제 #4
0
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) . '}';
}
예제 #5
0
 /**
  * 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;
 }
예제 #6
0
파일: duel.php 프로젝트: reillo/ninjawars
<?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));
}
예제 #7
0
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)));
}
예제 #8
0
 /**
  * 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]);
 }
예제 #9
0
 /**
  * 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;
 }
예제 #10
0
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));
예제 #11
0
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;
}
예제 #12
0
 /**
  * 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;
 }
예제 #13
0
 public static function allData()
 {
     return query_array('select clan_id, clan_name, clan_created_date, clan_founder, clan_avatar_url, description from clan');
 }
예제 #14
0
 /**
  * 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();
     }
 }
예제 #15
0
 /**
  * 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;
 }
예제 #16
0
 /**
  * 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]];
 }
예제 #17
0
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;
}
예제 #18
0
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;
}
예제 #19
0
 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");
 }
예제 #20
0
 /**
  * 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']]];
 }
예제 #21
0
 /**
  * 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;
 }
예제 #22
0
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;
}
예제 #23
0
파일: signup.php 프로젝트: reillo/ninjawars
 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;
 }