ed during development or the extensive test-phase // German support -> http://www.vbulletin-germany.org // English support -> http://www.vbulletin.org // // Make sure not to use any converted Game that has no permission from its author ! //---------------------------------------------------------------------------------------- // ################################################################################# // ### some global switches - only change if you are told to for support-reasons ### // ################################################################################# $DEBUGMODE = 0; // 0 = off / 1 = enable the debugmode / 2 = verbose debugging (support only!) $NATIVEMODE = 0; // set this to 1 to disable all Hooks/PlugIns within ibProArcade $LOGIPS = 1; // set this to 0 to disable logging of IP-addresses $AVATARRESIZE = 0; // set this to 0 to disable resizing of avatars or problems with getimagesize() $FIXSTYLE = 0; // set this to 1 if you get empty pages (tournament-creation ect.) $FIXIE = 1; // current workaround to fix problems with IE7 $MYSQLI = 0; // set to 1 to use ibProArcade-mySQLi-driver (may cause problems!) // ########################################## // ### !! DO NOT CHANGE ANYTHING BELOW !! ### // ########################################## // #################### Add v3arcade Game Support ######################## if (isset($_POST['sessdo'])) { if ($_POST['sessdo'] == 'sessionstart') { $gamerand = rand(1, 10); $gametime = mktime(); $lastid = $_POST['gamename']; echo "&connStatus=1&initbar=$gamerand&gametime=$gametime&lastid=$lastid&result=OK"; exit; } if ($_POST['sessdo'] == 'permrequest') { $microone = microtime(); setcookie('v3score', $_POST['score']); echo "&validate=1µone=$microone&result=OK"; exit; } } // ####################### SET PHP ENVIRONMENT ########################### error_reporting(E_ALL & ~E_NOTICE); // ################## Page-Refresher while playing ####################### if ($_GET['do'] == 'holdsession') { include './holdsession.php'; exit; } // #################### DEFINE IMPORTANT CONSTANTS ####################### define('NO_REGISTER_GLOBALS', 1); define('THIS_SCRIPT', 'arcade'); define('ROOT_PATH', './'); define('CAT_IMGS', './arcade/cat_imgs/'); define('MODULE_PATH', './arcade/modules/'); define('FUNCTIONS_PATH', './arcade/functions/'); define('PATH', (($getcwd = getcwd()) ? $getcwd : '.')); // ################### PRE-CACHE TEMPLATES AND DATA ###################### // get special phrase groups $phrasegroups = array(); // get special data templates from the datastore $specialtemplates = array(); // pre-cache templates used by specific actions $actiontemplates = array(); // pre-cache templates used by all actions $globaltemplates = array('ARCADE'); // ######################### REQUIRE BACK-END ############################ include_once './global.php'; setcookie('ibPAcookiecheck', 'yesss'); $vbversion = substr($vboptions[templateversion], 0, 3); if ($vbversion != '3.0') { // make some legacy-variables compatible to vBulletin 3.5.x $vboptions[forumhome] = $vbulletin->options[forumhome]; $vboptions[bburl] = $vbulletin->options[bburl]; if ($NATIVEMODE == 0) { ($hook = vBulletinHook::fetch_hook('ibproarcade_global_start')) ? eval($hook) : false; } } class info { public $member = array(); public $input = array(); public $session_id = ''; public $base_url = ''; public $vars = ''; public $skin_id = '0'; public $skin_rid = ''; public $lang_id = 'en'; public $skin = ''; public $lang = ''; public $server_load = 0; public $version = 'v1.3 Final'; public $lastclick = ''; public $location = ''; public $debug_html = ''; public $perm_id = ''; public $forum_read = array(); public $topic_cache = ''; public $session_type = ''; public function __construct() { global $sess, $std, $DB, $INFO, $vboptions, $vbulletin, $session; $this->vars = &$INFO; $this->vars['board_name'] = $vboptions['bbtitle']; } } include ROOT_PATH.'includes/config.php'; require FUNCTIONS_PATH.'functions.php'; $std = new FUNC(); $print = new display(); $sess = new session(); $skin_universal = $std->load_template('skin_global'); $sql_driver = FUNCTIONS_PATH.'dbclass.php'; // support for mysqli by MrZeropage if ((strtolower($config['Database']['dbtype']) == 'mysqli') && ($MYSQLI == 1)) { $sql_driver = FUNCTIONS_PATH.'dbclass_mysqli.php'; } require $sql_driver; $DB = new db_driver(); // automatic vB-Version-Detection by MrZeroage $vbversion = substr($vboptions[templateversion], 0, 3); if ($vbversion == '3.0') { // DB-Access for vBulletin 3.0.x $DB->obj['sql_database'] = $dbname; $DB->obj['sql_user'] = $dbusername; $DB->obj['sql_pass'] = $dbpassword; $DB->obj['sql_host'] = $servername; $DB->obj['sql_port'] = $port; $DB->obj['sql_tbl_prefix'] = $tableprefix; $DB->connect(); // End DB Connectivity unset($dbname, $dbusername, $dbpassword, $servername); } else { // DB-Access for vBulletin 3.5.x $DB->obj['sql_database'] = $config['Database']['dbname']; $DB->obj['sql_user'] = $config['MasterServer']['username']; $DB->obj['sql_pass'] = $config['MasterServer']['password']; $DB->obj['sql_host'] = $config['MasterServer']['servername']; $DB->obj['sql_port'] = $config['MasterServer']['port']; $DB->obj['sql_tbl_prefix'] = $config['Database']['tableprefix']; $DB->connect(); // End DB Connectivity unset($config['Database']['dbname'], $config['MasterServer']['username'], $config['MasterServer']['password'], $config['Database']['tableprefix']); } //-------------------------------- // Wrap it all up in a nice easy to // transport super class //-------------------------------- $ibforums = new info(); //-------------------------------- // Set up our vars //-------------------------------- $ibforums->input = $std->parse_incoming(); if ($vbversion == '3.0') { $forumpath = $vboptions[bburl]; $sess = $session['sessionurl']; } else { $forumpath = $vbulletin->options[bburl]; $sess = $vbulletin->session->vars['sessionurl']; } // fix for lousy configurated vBulletin options as this eats some time in support... if (strpos($forumpath, 'index.php') === false) { // seems to be correct } else { $forumpath = str_replace('/index.php', '', $forumpath); } $ibforums->vars['base_url'] = $forumpath.'/'.'arcade.php?'.$sess.'&'; $ibforums->base_url = $forumpath.'/'.'arcade.php?'.$sess.'&'; foreach ($_POST as $key => $value) { $ibforums->input[$key] = $value; } foreach ($_GET as $key => $value) { $ibforums->input[$key] = $value; } $ibforums->input['keepsess'] = 0; // for PNflashgames to keep their session // handle calls from v3arcade links if (($ibforums->input['categoryid'] != '') && (intval($ibforums->input['categoryid']) > 0)) { $ibforums->input['cat'] = $ibforums->input['categoryid']; } // define possible Guest-Player-ID $guestplayerid = 0; $DB->query('SELECT arcade_access, p_require FROM ibf_groups WHERE g_id = 1'); $guestperm = $DB->fetch_row(); if ($guestperm['arcade_access'] == 4) { if (intval($guestperm['p_require'] > 0)) { $guestplayerid = $guestperm['p_require']; } } // DEBUG-Mode v1.0 by MrZeropage $DEBUGPAGE = ''; if ($ibforums->input['debug'] == 'yes') { if ($DEBUGMODE != 0) { $DEBUGPAGE .= 'DEBUG-Information
'; $DEBUGPAGE .= 'vboptions[forumhome]   =   '.$vboptions[forumhome].'
'; $DEBUGPAGE .= 'vboptions[bburl]   =   '.$vboptions[bburl].'
'; if ($vboptions[templateversion] != '') { $DEBUGPAGE .= 'vboptions[templateversion]   =   '.$vboptions[templateversion].'
'; } else { $DEBUGPAGE .= 'vbulletin->options[templateversion]   =   '.$vbulletin->options[templateversion].'
'; } $DEBUGPAGE .= 'TABLE_PREFIX   =   '.TABLE_PREFIX.'
'; } } if ($vbversion == '3.0') { // vBulletin 3.0.x if (isset($bbuserinfo['userid']) && !empty($bbuserinfo['userid'])) { $ibforums->member['id'] = $bbuserinfo['userid']; } else { $ibforums->member['id'] = $guestplayerid; } } else { // vBulletin 3.5.x if (isset($vbulletin->userinfo['userid']) && !empty($vbulletin->userinfo['userid'])) { $ibforums->member['id'] = $vbulletin->userinfo['userid']; } else { $ibforums->member['id'] = $guestplayerid; } } if ($_POST['sessdo'] == 'burn') { $gamename = ibp_cleansql($_POST['id']); $cheat = 0; $getgameidquery = $DB->query("SELECT gid FROM ibf_games_list WHERE gname='".$gamename."'"); $getgameid = $DB->fetch_row($getgameidquery); $gameid = $getgameid['gid']; if ($guestplayerid != $ibforums->member['id']) { // this is not a guest playing $userquery = $DB->query('SELECT * FROM ibf_user WHERE userid='.$ibforums->member['id']); $userinfo = $DB->fetch_row($userquery); if ($userinfo['arcade_session'] == '') { $ERRORLEVEL = ($DEBUGMODE == 0) ? '' : 'Error #020 - no session'; $std->Error(array(LEVEL => 1, MSG => 'cheater', EXTRA => $ERRORLEVEL)); } // check if there is a stored session for that gameid $DB->query("SELECT * FROM ibf_games_session WHERE sessid='".$userinfo['arcade_session']."' LIMIT 1"); $vs = $DB->fetch_row(); if (($vs['gameid'] != $_COOKIE['gidstarted']) || ($gameid != $vs['gameid'])) { // cheat! so eliminate the result *g* ++$cheat; $VERBOSE = ($DEBUGMODE == 2) ? ' -> vs_gid='.$vs['gameid'].' | cookie_gid='.$_COOKIE['gidstarted'].' | gameid='.$gameid : ''; $ERRORLEVEL = ($DEBUGMODE == 0) ? '' : 'Error #001'; $ERRORLEVEL = $ERRORLEVEL.$VERBOSE; $std->Error(array(LEVEL => 1, MSG => 'cheater', EXTRA => $ERRORLEVEL)); } } else { // this is a guest! $userinfo['arcade_session'] = intval($_COOKIE['guestsession']); } $_POST['gname'] = $gamename; $_POST['gscore'] = ibp_cleansql($_COOKIE['v3score']); $ibforums->input['do'] = 'newscore'; } class Arcade { public $output = ''; public $html = ''; public $page_title = ''; public $nav = array(); public $parser = ''; public $arcade = array(); public $version = '2.7.2+'; public $updatecheck = 'http://www.vbulletin-arcade.com/ibpaversion.inc'; // do not change this !! public $BFL = false; public function __construct() { global $ibforums, $DB, $std, $print, $DEBUGPAGE, $DEBUGMODE, $vbulletin, $vboptions; require MODULE_PATH.'mod_arcade.php'; $this->arcade = new mod_arcade(); $this->arcade->authorize(); // load the language set in AdminCP (by MrZeropage) $ibforums->langid = $this->arcade->settings['arcade_language']; $langfile = 'lang_Arcade_'.$ibforums->langid; $ibforums->lang = $std->load_words($ibforums->lang, $langfile, $ibforums->lang_id); if ($this->arcade->settings['skin'] == 0) { $this->html = $std->load_template('skin_Arcade'); } else { $this->html = $std->load_template('skin_v3Arcade'); } // hand some main setting to LANG to reach functions.php $ibforums->lang['htmltitle'] = ($this->arcade->settings['htmltitle']) ? $this->arcade->settings['htmltitle'] : '%FORUMNAME% - %IBPRO% - %ACTION%'; $this->arcade->top_links($this->html); $this->output .= $this->arcade->extra_links; if ($ibforums->input['debug'] == 'yes') { if ($DEBUGMODE != 0) { $DEBUGPAGE .= 'score_type = '.$this->arcade->settings['score_type'].'
'; $DEBUGPAGE .= 'use_cats = '.$this->arcade->settings['use_cats'].'
'; $DEBUGPAGE .= 'def_cat = '.$this->arcade->settings['def_cat'].'
'; $DEBUGPAGE .= 'cats_per_tr = '.$this->arcade->settings['cats_per_tr'].'
'; $DEBUGPAGE .= 'crown_type = '.$this->arcade->settings['crown_type'].'
'; $DEBUGPAGE .= 'show_crowns = '.$this->arcade->settings['show_crowns'].'
'; $DEBUGPAGE .= 'show_t_won = '.$this->arcade->settings['show_t_won'].'
'; $DEBUGPAGE .= 'notification = '.$this->arcade->settings['notification'].'
'; $DEBUGPAGE .= 'auto_prune = '.$this->arcade->settings['auto_prune'].'
'; } $DEBUGPAGE .= 'ibProArcade v'.$this->version.'
'; $this->output .= $DEBUGPAGE.'
'; } if (isset($ibforums->input['module']) && $ibforums->input['module'] != 'arcade') { return; } else { switch ($ibforums->input['do']) { case 'rate': $this->rate(); break; case 'play': $this->arcade->play_game_authorize(); $this->play_game(); break; case 'playfull': $this->arcade->play_game_authorize(); $this->playfull(); break; case 'newscore': $this->post_score(); break; case 'stats': $this->show_stats(); break; case 'viewtournaments': $this->view_tournaments(); break; case 'playtourney': $this->play_tourney(); break; case 'viewtourney': $this->view_tourney($ibforums->input['tid']); break; case 'createtourney': $this->create_tourney(); break; case 'registertourney': $this->register_tourney($ibforums->input['tid']); break; case 'docreatetourney': $this->do_create_tourney(); break; case 'disqualtourney': $this->disqual_tournoi($ibforums->input['tid'], $ibforums->input['rung'], $ibforums->input['faceoff'], $ibforums->input['mid']); break; case 'corigetourney': $this->corige_tournoi($ibforums->input['tid'], $ibforums->input['rung'], $ibforums->input['faceoff']); break; case 'viewtourneyend': $this->view_tourney_end(); break; case 'pnFStoreScore': $this->pnFlashGames_StoreScore(); break; case 'pnFSaveGame': $this->pnFlashGames_SaveGame(); break; case 'pnFLoadGame': $this->pnFlashGames_LoadGame(); break; case 'verifyscore': $this->verify_score(); break; case 'savescore': $this->save_score(); break; default: $this->show_games(); break; } $action = (isset($ibforums->input['do'])) ? $ibforums->input['do'] : 'glist'; $show_users = unserialize($this->arcade->settings['show_active']); if ($show_users[$action] != 0) { $this->arcade->get_active($this->html); $this->output .= $this->arcade->active; } $this->output .= $this->html->copyright($this->version, $ibforums->lang['timeformat1'], $this->BFL); $print->add_output($this->output); $print->do_output(array('TITLE' => $this->page_title, 'JS' => 0, NAV => $this->nav)); } } // All we have to do here is set gscore to the score sent by the game public function pnFlashGames_StoreScore() { global $ibforums, $DB; // Set the variables as needed $gid = intval($ibforums->input['gid']); $sql = "SELECT * FROM ibf_games_list WHERE gid='".$gid."'"; $DB->query($sql); $gameinfo = $DB->fetch_row(); $ibforums->input['gname'] = $gameinfo['gname']; $_GET['gname'] = $ibforums->input['gname']; $_POST['gname'] = $ibforums->input['gname']; // Convert a time based score to an integer if necessary $score = $ibforums->input['score']; if (strstr($score, ':') !== false) { $timestamp = strtotime($score); $formatedTime = strftime('%H:%M:%S', $timestamp); $hours = substr($formatedTime, 0, 2); $minutes = substr($formatedTime, 3, 2); $seconds = substr($formatedTime, 6, 2); $numSeconds = (($hours * 60) * 60) + ($minutes * 60) + $seconds; $score = $numSeconds; $ibforums->input['gscore'] = $score; } $ibforums->input['gscore'] = $ibforums->input['score']; $_POST['gscore'] = $ibforums->input['score']; // There might be a better way to do this if (isset($_POST['gscore'])) { // We will only set this if 'score' was set (the pnflashgames score var) // Otherwise, the request is still not legit and we will let IbProArcade's security weed that out $_POST['gscore'] = $ibforums->input['gscore']; // IbProArcade checks the _POST data, so we have to fake this in order to not get labeled as a cheater } // pnFlashGames looks for this to make sure the score got saved correctly echo '&opSuccess=true&endvar=1'; // tell the scoresaver not to delete the session... $_POST['keepsess'] = 1; $ibforums->input['keepsess'] = 1; // Allow the stock function to the hard work here :) $this->post_score(); } // Save game function public function pnFlashGames_SaveGame() { global $ibforums, $DB, $std; $gid = intval($ibforums->input['gid']); $gameData = ibp_cleansql($_POST['gameData']); //We can't use the $ibforums->input[gameData] because of the changes that are made to the data by the ibforums class. We need the data in its raw format here $uname = ibp_cleansql($this->arcade->user['name']); if ((!isset($gid)) || (!isset($uname)) || (!isset($gameData))) { // Missing information, exit now echo '&opSuccess=Missing info&endvar=1'; return false; } $savedgames = 'ibf_games_savedGames'; $sql = "SELECT gameData as oldGameData FROM $savedgames WHERE uname='$uname' AND gid=$gid"; $DB->query($sql); if ($DB->get_num_rows() == 0) { //No rows found, this user has not stored a high score for this game yet $sql = "INSERT INTO $savedgames SET gid=$gid, uname='".$uname."', gameData='$gameData', saveDate=NOW()"; } else { //old gameData found so replace it with the new one. $sql = "UPDATE $savedgames SET gameData='$gameData', saveDate=NOW() WHERE uname='".$uname."' AND gid=$gid"; } // Do the selected action $DB->query($sql); echo '&opSuccess=true&endvar=1'; } // Load the users last saved game public function pnFlashGames_LoadGame() { global $ibforums, $DB, $std; $gid = intval($ibforums->input['gid']); $uname = addslashes($this->arcade->user['name']); if ((!isset($gid)) || (!isset($uname))) { // Missing information, exit now return false; } $savedgames = 'ibf_games_savedGames'; $sql = "SELECT gameData FROM $savedgames WHERE uname='$uname' AND gid=$gid"; $DB->query($sql); if ($DB->get_num_rows() == 0) { //No rows found, this user has not stored a high score for this game yet $gameData = ''; } else { //Game data found $data = $DB->fetch_row(); $gameData = urlencode(($data['gameData'])); } echo "&opSuccess=true&gameData=$gameData&endvar=1"; } public function pnFlashGames_getDomain() { $url = 'http://'.$_SERVER['HTTP_HOST'].'/'; // get host name from URL preg_match("/^(http:\/\/)?([^\/]+)/i", $url, $matches); $host = $matches[2]; $host = str_replace('www.', '', $host); return $host; } public function pnFlashGames_getChecksum($file) { $file = 'arcade/'.$file.'.swf'; if ($fp = fopen($file, 'r')) { $filecontent = fread($fp, filesize($file)); fclose($fp); return md5($filecontent); } else { return false; } } //------------------------------------------ // View_Tourney // // This will show a specific tournament // //------------------------------------------ public function view_tourney($tid) { global $ibforums, $DB, $std; $std->time_options['ARCADE'] = "{$ibforums->lang['timeformat4']}"; $a = explode(',', gmdate('Y,n,j,G,i,s', time() + $std->get_time_offset())); $day1 = $a[2]; $month1 = $a[1]; $year1 = $a[0]; $tid = intval($tid); $DB->query('SELECT t.nbtries, t.demare, t.datestarted, t.cost, t.numplayers, g.gtitle, g.gname, g.gid, g.decpoints, g.highscore_type FROM ibf_tournaments as t, ibf_games_list as g WHERE t.gid = g.gid AND t.tid='.$tid.' LIMIT 0, 1'); $tinfo = $DB->fetch_row(); $tinfo['datestarted'] = $std->get_date($tinfo['datestarted'], 'ARCADE'); if ($tinfo['highscore_type'] == 'high') { $tinfo['hilotext'] = $ibforums->lang['tourney_highwin']; } else { $tinfo['hilotext'] = $ibforums->lang['tourney_lowwin']; } $tinfo['limit1'] = ''; $tinfo['limit2'] = ''; if ($this->arcade->settings['tourney_limit1'] > 0) { $tinfo['limit1'] = $ibforums->lang['tourney_remind1'].$this->arcade->settings['tourney_limit1'].$ibforums->lang['tourney_remind2'].'
'; } if ($this->arcade->settings['tourney_limit2'] > 0) { $tinfo['limit2'] = $ibforums->lang['tourney_disqual1'].$this->arcade->settings['tourney_limit2'].$ibforums->lang['tourney_disqual2'].'
'; } $tinfo['jackpottxt'] = ''; if ((floatval($tinfo['cost']) > 0) && (($vbulletin->options['vbbux_enabled'] == 1) && ($vbulletin->options['vbbux_arcadeintegration'] == 1))) { $tinfo['jackpottxt'] = $ibforums->lang['tourney_jackpot1'].''.$tinfo['cost'].'
'; $tinfo['jackpottxt'] .= $ibforums->lang['tourney_jackpot2'].''.(floatval($tinfo['cost']) * intval($tinfo['numplayers'])).'
'; } $DB->query('SELECT champion FROM ibf_tournaments WHERE tid='.$tid); $champ = $DB->fetch_row(); $this->output .= $this->html->tourney_start($ibforums->lang['tournament_ladder'], $tinfo, $champ['champion']); $DB->query('SELECT DISTINCT rung FROM ibf_tournament_players WHERE tid='.$tid.' ORDER BY rung DESC LIMIT 0, 1'); $qrungs = $DB->fetch_row(); $numrungs = $qrungs['rung']; $listenodisqual = ''; $cptlnodq = 0; for ($i = 1; $i <= $numrungs; ++$i) { $ctr = 0; $playerinfo = array(); $tdclass = array(); $refctr = 0; while ($refctr <= 7) { $playerinfo[$refctr]['name'] = ''; $playerinfo[$refctr]['timesplayed'] = 0; $playerinfo[$refctr]['rungscore'] = 0; $playerinfo[$refctr]['playlink'] = ''; $playerinfo[$refctr]['repairlink'] = ''; $playerinfo[$refctr]['disquallink'] = ''; $playerinfo[$refctr]['bgcolor'] = ''; $playerinfo[$refctr]['dateplayed'] = ''; $tdclass[$refctr] = ''; ++$refctr; } $already = 0; $user_intourney = false; $tourney_started = false; if ($tinfo['demare'] > 0) { $tourney_started = true; } $DB->query('SELECT m.name, t.timesplayed, t.timeplayed, t.rungscore, t.mid, t.rung, t.faceoff, ps.statut FROM ibf_tournament_players as t, ibf_members as m, ibf_tournament_players_statut as ps WHERE t.tid='.$tid.' AND t.rung='.$i.' AND m.id=t.mid AND ps.tid=t.tid AND ps.mid=t.mid ORDER BY t.faceoff ASC'); while ($row = $DB->fetch_row()) { // set correct counter corresponding to faceoff if (($ctr < 2) && ($row['faceoff'] == 2)) { $ctr = 2; } if (($ctr < 4) && ($row['faceoff'] == 3)) { $ctr = 4; } if (($ctr < 6) && ($row['faceoff'] == 4)) { $ctr = 6; } // is current user already participating in that tournament ? if ($ibforums->member['id'] == $row['mid']) { $user_intourney = true; } $playerinfo[$ctr]['disquallink'] = ''; if ($this->arcade->user['is_admin'] && $champ['champion'] == '') { $cpttest = 0; $bool = 'false'; while ($cpttest < $cptlnodq) { if ($listenodisqual[$cpttest][mid] == $row['mid']) { $bool = 'true'; $cpttest = $cptlnodq; $playerinfo[$ctr]['disquallink'] = ''; $playerinfo[(floor($ctr / 2))]['repairlink'] = ''; } ++$cpttest; } if ($bool == 'false') { $listenodisqual[$cptlnodq][mid] = $row['mid']; ++$cptlnodq; if ($row['statut'] == 0 && $row['timesplayed'] < $tinfo['nbtries']) { $playerinfo[$ctr]['disquallink'] = "".$ibforums->lang['disqualify'].''; } if (floor($ctr / 2) != ($crt / 2) && $playerinfo[(floor($ctr / 2))]['repairlink'] != '') { $playerinfo[(floor($ctr / 2))]['repairlink'] = "".$ibforums->lang['winner_advance'].''; } else { if (floor($ctr / 2) == ($ctr / 2)) { $playerinfo[(floor($ctr / 2))]['repairlink'] = "".$ibforums->lang['winner_advance'].''; } } } } else { $playerinfo[(floor($ctr / 2))]['repairlink'] = ''; $playerinfo[$ctr]['disquallink'] = ''; } if ($row['mid'] > 0) { $playerinfo[$ctr]['name'] = $row['name']; } else { $playerinfo[$ctr]['name'] = ''; } $diff = ''; if ($tinfo['demare'] == 1) { $small1 = ""; $small2 = ''; if (($champ['champion'] == '') && ($row['timesplayed'] < $tinfo['nbtries'])) { if ($row['timesplayed'] == '0') { // not played any time yet $diff = $small1.$ibforums->lang['no_date'].'
'; } else { $diff = $small1.$ibforums->lang['last_play'].':
'; } if (intval($this->diff_dates($row['timeplayed'])) > 0) { $red1 = ''; $red2 = ''; if (intval($this->diff_dates($row['timeplayed'])) > $this->arcade->settings['tourney_limit1'] - 1) { $red1 = ""; $red2 = ''; } if (intval($this->diff_dates($row['timeplayed'])) < 2) { if (intval($this->diff_dates($row['timeplayed'])) == 1) { $daytext = $this->diff_dates($row['timeplayed']).' '.$ibforums->lang['acp_day1']; } else { $daytext = $ibforums->lang['today']; } } else { $daytext = $this->diff_dates($row['timeplayed']).' '.$ibforums->lang['acp_day1'].$ibforums->lang['acp_day2']; } $diff .= $red1.$daytext.$red2; } else { $diff .= $ibforums->lang['today']; } $diff .= $small2; } else { $diff = $ibforums->lang['completed'].'
'; } $playerinfo[$ctr]['timesplayed'] = $row['timesplayed'].' / '.$tinfo['nbtries']; $playerinfo[$ctr]['dateplayed'] = $diff; if ($row['timesplayed'] < $tinfo['nbtries']) { $playerinfo[$ctr]['rungscore'] = $ibforums->lang['best_score'].':
'.$this->arcade->do_arcade_format($row['rungscore'], $tinfo['decpoints']).'

'; } else { $playerinfo[$ctr]['rungscore'] = $ibforums->lang['final_score'].':
'.$this->arcade->do_arcade_format($row['rungscore'], $tinfo['decpoints']).'

'; } if ($row['timesplayed'] == 0) { $playerinfo[$ctr]['rungscore'] = '


'; } if ($row['statut'] == 1) { $playerinfo[$ctr]['name'] = ''.$playerinfo[$ctr]['name'].''; $playerinfo[$ctr]['bgcolor'] = $this->arcade->settings['ladder_elim_color']; $playerinfo[$ctr]['playlink'] = ''.$ibforums->lang['eliminated'].''; $playerinfo[$ctr]['disquallink'] = ''; $tdclass[$ctr] = 'elim'; } if ($row['statut'] == 2) { $playerinfo[$ctr]['name'] = ''.$playerinfo[$ctr]['name'].''; $playerinfo[$ctr]['bgcolor'] = $this->arcade->settings['ladder_disqual_color']; $playerinfo[$ctr]['playlink'] = ''.$ibforums->lang['disqualified'].''; $playerinfo[$ctr]['disquallink'] = ''; $tdclass[$ctr] = 'disqual'; } if ($row['statut'] == 0) { $playerinfo[$ctr]['bgcolor'] = $this->arcade->settings['ladder_qual_color']; if ($row['timesplayed'] < $tinfo['nbtries'] && $ibforums->member['id'] == $row['mid']) { $playerinfo[$ctr]['playlink'] = "".$ibforums->lang['play'].''; } else { $playerinfo[$ctr]['playlink'] = ''; } $tdclass[$ctr] = 'qual'; } } else { $playerinfo[$ctr]['timesplayed'] = ''; $playerinfo[$ctr]['rungscore'] = ''; $playerinfo[$ctr]['playlink'] = ''; $playerinfo[(floor($ctr / 2))]['repairlink'] = ''; $playerinfo[$ctr]['disquallink'] = ''; $playerinfo[$ctr]['bgcolor'] = $this->arcade->settings['ladder_empty_color']; $playerinfo[$ctr]['dateplayed'] = ''; $tdclass[$ctr] = 'empty'; } ++$ctr; } // Sort the Tournament to match correct faceoffs - by MrZeropage if ($i < $numrungs) { // not the first round in tournament so query the round before and build variables $old = 0; $DB->query('SELECT m.name, t.timesplayed, t.rungscore, t.mid, t.rung, t.faceoff FROM ibf_tournament_players as t, ibf_members as m WHERE t.tid='.$tid.' AND t.rung='.($i + 1).' AND m.id=t.mid ORDER BY t.faceoff ASC'); while ($qoldrow = $DB->fetch_row()) { $oldrow[$old]['name'] = $qoldrow['name']; $oldrow[$old]['timesplayed'] = $qoldrow['timesplayed']; $oldrow[$old]['rungscore'] = $qoldrow['rungscore']; ++$old; } for ($j = 0;$j <= $ctr;++$j) { if ($j == 0) { $m = 0; $n = 1; } if ($j == 1) { $m = 2; $n = 3; } if ($j == 2) { $m = 4; $n = 5; } if ($j == 3) { $m = 6; $n = 7; } if (($playerinfo[$j]['name'] != $oldrow[$m]['name']) && ($playerinfo[$j]['name'] != $oldrow[$n]['name'])) { // swap this faceoff $tempdata['name'] = $playerinfo[$j]['name']; $tempdata['timesplayed'] = $playerinfo[$j]['timesplayed']; $tempdata['rungscore'] = $playerinfo[$j]['rungscore']; $tempdata['playlink'] = $playerinfo[$j]['playlink']; $tempdata['disquallink'] = $playerinfo[$j]['disquallink']; $tempdata['bgcolor'] = $playerinfo[$j]['bgcolor']; $tempdata['dateplayed'] = $playerinfo[$j]['dateplayed']; $tempdata['tdclass'] = $tdclass[$j]; // search the old faceoff... $oldfaceoff = 333; for ($k = 0;$k < 8;++$k) { if ($oldrow[$k]['name'] == $playerinfo[$j]['name']) { $oldfaceoff = $k; } } if ($oldfaceoff != 333) { if (($oldfaceoff == 0) || ($oldfaceoff == 1)) { $oldmatch = 0; } if (($oldfaceoff == 2) || ($oldfaceoff == 3)) { $oldmatch = 1; } if (($oldfaceoff == 4) || ($oldfaceoff == 5)) { $oldmatch = 2; } if (($oldfaceoff == 6) || ($oldfaceoff == 7)) { $oldmatch = 3; } $playerinfo[$j]['name'] = $playerinfo[$oldmatch]['name']; $playerinfo[$j]['timesplayed'] = $playerinfo[$oldmatch]['timesplayed']; $playerinfo[$j]['rungscore'] = $playerinfo[$oldmatch]['rungscore']; $playerinfo[$j]['playlink'] = $playerinfo[$oldmatch]['playlink']; $playerinfo[$j]['disquallink'] = $playerinfo[$oldmatch]['disquallink']; $playerinfo[$j]['bgcolor'] = $playerinfo[$oldmatch]['bgcolor']; $playerinfo[$j]['dateplayed'] = $playerinfo[$oldmatch]['dateplayed']; $tdclass[$j] = $tdclass[$oldmatch]; $playerinfo[$oldmatch]['name'] = $tempdata['name']; $playerinfo[$oldmatch]['timesplayed'] = $tempdata['timesplayed']; $playerinfo[$oldmatch]['rungscore'] = $tempdata['rungscore']; $playerinfo[$oldmatch]['playlink'] = $tempdata['playlink']; $playerinfo[$oldmatch]['disquallink'] = $tempdata['disquallink']; $playerinfo[$oldmatch]['bgcolor'] = $tempdata['bgcolor']; $playerinfo[$oldmatch]['dateplayed'] = $tempdata['dateplayed']; $tdclass[$oldmatch] = $tempdata['tdclass']; } } } } // set WAITING flag to those without any opponent for ($j = 0;$j <= $ctr;++$j) { // bad code, I know, but too lazy right now to do a fine one *gg* if ($j == 0) { $opponent = 1; } if ($j == 1) { $opponent = 0; } if ($j == 2) { $opponent = 3; } if ($j == 3) { $opponent = 2; } if ($j == 4) { $opponent = 5; } if ($j == 5) { $opponent = 4; } if ($j == 6) { $opponent = 7; } if ($j == 7) { $opponent = 6; } if (($playerinfo[$j]['name'] == '') || ($playerinfo[$opponent]['name'] == '')) { // at least one slot in this faceoff is free! if ($playerinfo[$j]['name'] == '') { $playerinfo[$j]['dateplayed'] = ''; } if ($playerinfo[$opponent]['name'] == '') { $playerinfo[$j]['dateplayed'] = ''; } } } $this->output .= $this->define_ladder($i, $playerinfo, $tdclass); } if (!$user_intourney && !$tourney_started && intval($ibforums->member['id']) > 0) { $this->output .= "

".$ibforums->lang['tourney_joinin'].'
'; } $this->output .= $this->html->tourney_stop(); $this->page_title = $ibforums->vars['board_name'].' -> '.$ibforums->lang['page_title'].' -> '.$ibforums->lang['tournament_view']; $this->nav = array("{$ibforums->lang['page_title']}", "".$ibforums->lang['tournament_view'].'', $tinfo['gtitle'].' '.$ibforums->lang['tournament']); } //----------------------------------- // View_Tournaments // // This will show a listing of all // currently active Tournaments // //----------------------------------- public function view_tournaments() { global $ibforums, $DB, $std, $vbulletin, $vboptions, $NATIVEMODE; $std->time_options['ARCADE'] = "{$ibforums->lang['timeformat4']}"; // Look for the tourneys where the member is registered $cpt = 0; $DB->query("SELECT * FROM ibf_tournament_players_statut WHERE mid='".$ibforums->member['id']."' AND statut<'3'"); while ($row = $DB->fetch_row()) { $tournoi[$cpt]['tid'] = $row['tid']; $tournoi[$cpt]['statut'] = $row['statut']; $cpt = $cpt + 1; } $this->output .= $this->html->tournament_listing(); $DB->query("SELECT t.numplayers,t.datestarted,t.tid,g.gtitle,g.gid,t.champion FROM ibf_tournaments as t, ibf_games_list as g WHERE champion = '' AND t.gid = g.gid AND demare>0 ORDER BY datestarted DESC"); while ($row = $DB->fetch_row()) { $row['link'] = "".$ibforums->lang['view_tourney'].''; $row['datestarted'] = $std->get_date($row['datestarted'], 'ARCADE'); $row['statut'] = $ibforums->lang['not_in_tourney']; $i = 0; if ($ibforums->member['id'] != 0) { while ($i < $cpt) { if ($tournoi[$i]['tid'] == $row['tid']) { // Inscrit switch ($tournoi[$i]['statut']) { case '0': $row['statut'] = $ibforums->lang['still_in']; $row['link'] = ''.$row['link'].''; break; case '1': $row['statut'] = $ibforums->lang['eliminated_2']; break; case '2': $row['statut'] = $ibforums->lang['disqualified_2']; break; default: echo $ibforums->lang['problem']; break; } $i = $cpt; } $i = $i + 1; } } $this->output .= $this->html->tournament_actif($row); } $this->output .= $this->html->tournament_attente(); $costhtmlstart = ''; $costhtmlend = ''; // detect vBplaza if (($vbulletin->options['vbbux_enabled'] == 1) && ($vbulletin->options['vbbux_arcadeintegration'] == 1)) { $costhtmlstart = '
'.$ibforums->lang['costs_tourneyj']; $costhtmlend = ''; } $vbversion = substr($vboptions[templateversion], 0, 3); if (($vbversion != '3.0') && ($NATIVEMODE == 0)) { ($hook = vBulletinHook::fetch_hook('ibproarcade_view_tourney')) ? eval($hook) : false; } $DB->query('SELECT t.nbtries, t.plibre, t.creat, t.gid, t.numplayers,t.datestarted,t.tid,t.champion,t.cost,g.gtitle FROM ibf_tournaments as t, ibf_games_list as g WHERE t.gid = g.gid AND demare = 0 ORDER BY datestarted DESC'); while ($row = $DB->fetch_row()) { $row['link'] = "".$ibforums->lang['see_this_tourney'].''; if ($costhtmlstart != '') { // add the costs to HTML and format it $value = $vbulletin->options['vbbux_decimalplaces']; if (($vbversion != '3.0') && ($NATIVEMODE == 0)) { ($hook = vBulletinHook::fetch_hook('ibproarcade_view_tourney_getcosts')) ? eval($hook) : false; } $costhtmlstart .= vb_number_format($row['cost'], $value); } $row['inscrire'] = "".$ibforums->lang['register'].''.$costhtmlstart.$costhtmlend; $i = 0; while ($i < $cpt) { if ($tournoi[$i]['tid'] == $row['tid']) { // Inscrit $row['inscrire'] = $ibforums->lang['registered']; $i = $cpt; } ++$i; } $row['datestarted'] = $std->get_date($row['datestarted'], 'ARCADE'); $row['creat'] = $row['creat']; if (intval($row['plibre']) == 1) { $row['plibre'] = "".$row['plibre'].''; if ($row['inscrire'] != $ibforums->lang['registered']) { $row['inscrire'] = ''.$row['inscrire'].''; } } if (intval($ibforums->member['id']) == 0) { $row['inscrire'] = ''; } $this->output .= $this->html->tournament_attente_row($row); } $this->output .= $this->html->stop(' ', ' '); $this->output .= "
".$ibforums->lang['create_new_t'].'


'; $this->output .= "
".$ibforums->lang['acp_tourneylist_ready'].'

'; $this->page_title = $ibforums->vars['board_name'].' -> '.$ibforums->lang['page_title'].' -> '.$ibforums->lang['tournament_view']; $this->nav = array("{$ibforums->lang['page_title']}", $ibforums->lang['tournament_view']); } public function define_ladder($rung, $playerinfo, $tdclass) { global $ibforums; for ($nr = 0;$nr < 9;++$nr) { if ($playerinfo[$nr]['name'] == '') { $playerhtml[$nr] = '




'; } else { $playerhtml[$nr] = ''.$playerinfo[$nr]['name'].'
'; if ($playerinfo[$nr]['timesplayed'] != '') { $playerhtml[$nr] .= $ibforums->lang['tourneytxt1'].'
'.$playerinfo[$nr]['timesplayed'].'
'.$ibforums->lang['tourneytxt2'].'
'. ''.$playerinfo[$nr]['rungscore'].''.$playerinfo[$nr]['dateplayed'].'
'; } if ($playerinfo[$nr]['playlink'] != '') { $playerhtml[$nr] = $playerhtml[$nr].$playerinfo[$nr]['playlink'].'
'; } else { $playerhtml[$nr] = $playerhtml[$nr].'
'; } if ($playerinfo[$nr]['disquallink'] != '') { $playerhtml[$nr] = $playerhtml[$nr].$playerinfo[$nr]['disquallink'].'
'; } else { $playerhtml[$nr] = $playerhtml[$nr].'
'; } $playerhtmlend_big[$nr] = ''; // if (strlen($playerinfo[$nr]['name'])>12) // { $playerhtmlend_big[$nr]="

"; } $playerhtmlend_small[$nr] = ''; // if (strlen($playerinfo[$nr]['name'])>14) // { $playerhtmlend_small[$nr]="

"; } } } $tablecolor = $this->arcade->settings['ladder_color']; switch ($rung) { case 1: $ladderhtml = "
{$playerhtml[0]} {$playerhtmlend_big[0]}
{$playerinfo[0]['repairlink']}
{$playerhtml[1]} {$playerhtmlend_big[1]}
"; break; case 2: $ladderhtml = "
{$playerhtml[0]} {$playerhtmlend_big[0]}
{$playerinfo[0]['repairlink']}
{$playerhtml[1]} {$playerhtmlend_big[1]}
{$playerhtml[2]} {$playerhtmlend_big[2]}
{$playerinfo[1]['repairlink']}
{$playerhtml[3]} {$playerhtmlend_big[3]}
"; break; case 3: $infoboxsize = 90; $infoboxhsize = 150; $spacesize = 10; $fontsize = 1; $ladderhtml = "
$playerhtml[0] $playerhtmlend_small[0]
{$playerinfo[0]['repairlink']}
$playerhtml[1] $playerhtmlend_small[1]
$playerhtml[2] $playerhtmlend_small[2]
{$playerinfo[1]['repairlink']}
$playerhtml[3] $playerhtmlend_small[3]
$playerhtml[4] $playerhtmlend_small[4]
{$playerinfo[2]['repairlink']}
$playerhtml[5] $playerhtmlend_small[5]
$playerhtml[6] $playerhtmlend_small[6]
{$playerinfo[3]['repairlink']}
$playerhtml[7] $playerhtmlend_small[7]
"; break; } return $ladderhtml; } //------------------------------------------ // Show_Games // // This shows the list of games available // //------------------------------------------ public function show_games() { global $ibforums, $DB, $std, $vbulletin, $vboptions, $NATIVEMODE; $games = array(); $game_gids = array(); $game_string = '(0)'; $rowcol = 'alt1'; $total_num = 0; // cleanup some incoming stuff $ibforums->input['gsearch'] = ibp_cleansql($ibforums->input['gsearch']); $stylecolumns = $this->arcade->settings['games_pr']; // this affects the ibPro-Style only! // Newest Games $DB->query("SELECT g.gid, g.gtitle, g.gname, g.gcat, cat.password, cat.active FROM ibf_games_list AS g, ibf_games_cats AS cat WHERE g.active=1 AND cat.active=1 AND g.gcat=cat.c_id AND trim(password)='' ORDER BY g.added DESC LIMIT ".$this->arcade->settings['games_new']); $firstnew = true; while ($newgline = $DB->fetch_row()) { if ($firstnew) { $firstnew = false; } else { $new_games .= "
\n"; } $new_games .= " {$newgline['gtitle']} "; } // End Newest Games // Begin Most Popular Games $DB->query("SELECT g.gid, g.gtitle, g.gname, g.gcat, cat.password, g.gcount, cat.active FROM ibf_games_list AS g, ibf_games_cats AS cat WHERE g.active=1 AND cat.active=1 AND g.gcat=cat.c_id AND trim(password)='' ORDER BY g.gcount DESC LIMIT ".$this->arcade->settings['games_popular']); $firstpop = true; while ($popgline = $DB->fetch_row()) { if ($firstpop) { $firstpop = false; } else { $pop_games .= "
\n"; } $pop_games .= " {$popgline['gtitle']} ".$ibforums->lang[times_played].$popgline["; } //Most End Popular Games // Random Game $DB->query("SELECT g.gid, g.gtitle, g.gname, g.gcat, cat.password, cat.active FROM ibf_games_list AS g, ibf_games_cats AS cat WHERE g.active=1 AND cat.active=1 AND g.gcat=cat.c_id AND trim(password)='' ORDER BY RAND() LIMIT 1"); $firstran = true; while ($rangline = $DB->fetch_row()) { if ($firstran) { $firstran = false; } else { $ran_games .= "
\n"; } // Create Code based on setting for static/AJAX $this->arcade->settings['random_AJAX'] = 0; if ($this->arcade->settings['random_AJAX'] < 1) { // static display $ran_games .= "

{$rangline['gtitle']}
"; } else { $ran_games .= ' '; } } // End Random Game // Begin Total Stuff $tot_games = 0; //Arrays $games2 = array(); $gid_array2 = array(); $DB->query("SELECT g.gid, c.password from ibf_games_list AS g, ibf_games_cats AS c WHERE g.active=1 AND g.gcat=c.c_id AND trim(password)='' ORDER BY ".$this->arcade->settings['g_display_sort'].' '.$this->arcade->settings['g_display_order']); while ($this_game = $DB->fetch_row()) { $games2[] = array( 'gid' => $this_game2['gid'], ); $gid_array2[] = $this_game2['gid']; ++$tot_games; } if (count($gid_array2) > 0) { $game_string2 = '('.implode(',', $gid_array2).')'; } $tot_cats = 0; $DB->query('SELECT * FROM ibf_games_cats AS c WHERE c.active=1 AND c.show_all=0'); while ($this_cat = $DB->fetch_row()) { ++$tot_cats; } // End Total Stuff // die Top3 der Highscores $query = 'SELECT champ_gid AS GID, champ_mid AS MID, champ_name AS name, COUNT(champ_mid) AS total FROM ibf_games_champs GROUP BY MID ORDER BY total DESC LIMIT 3'; $result = $DB->query($query); $Cpt = 1; while ($data = $DB->fetch_row($result)) { $Highscorechamp['ArcadeChampion'.$Cpt] = ''.$data['name'].'
'.$ibforums->lang[top3box_txt1].''.$data['total'].''.$ibforums->lang[top3box_txt2]; $Highscorechamp['ArcadeChampionMid'.$Cpt] = $data['MID']; $Highscorechamp['ArcadeChampionScore'.$Cpt] = $data['total']; $DB->query('SELECT avatar,avatar_size AS size FROM ibf_members WHERE id='.$Highscorechamp['ArcadeChampionMid'.$Cpt]); if ($avatar = $DB->fetch_row()) { $Highscorechamp['ArcadeChampionAvatarCode'.$Cpt] = $std->get_avatar($avatar, 1, $avatar['size']); if ($Highscorechamp['ArcadeChampionAvatarCode'.$Cpt] == '') { $Highscorechamp['ArcadeChampionAvatarCode'.$Cpt] = ""; } } else { $Highscorechamp['ArcadeChampionAvatarCode'.$Cpt] = ""; if ($Highscorechamp['ArcadeChampionScore2'] == $Highscorechamp['ArcadeChampionScore1']) { if ($Highscorechamp['ArcadeChampionScore2'] > 0) { $Highscorechamp['ArcadeChampionSmily2'] = $Highscorechamp['ArcadeChampionSmily1']; } } if ($Highscorechamp['ArcadeChampionScore3'] == $Highscorechamp['ArcadeChampionScore2']) { if ($Highscorechamp['ArcadeChampionScore3'] > 0) { $Highscorechamp['ArcadeChampionSmily3'] = $Highscorechamp['ArcadeChampionSmily2']; } } // Champion mit den meisten besten Ergebnissen aller Zeiten $Champion['ArcadeChampion1'] = "{$ibforums->lang['top3box_norank']}"; $Champion['ArcadeChampion2'] = "{$ibforums->lang['top3box_norank']}"; $Champion['ArcadeChampion3'] = "{$ibforums->lang['top3box_norank']}"; $Cpt = 0; $DB->query('SELECT g.gid, g.active, count(*) nb, g.bestscore, g.bestmid AS champ_mid, u.username AS champ_name FROM ibf_games_list AS g INNER JOIN ibf_user AS u ON u.userid=g.bestmid WHERE active=1 GROUP BY bestmid ORDER BY 3 DESC LIMIT 1'); while ($res = $DB->fetch_row()) { ++$Cpt; $Champion['ArcadeChampion'.$Cpt] = ''.$res['champ_name'].'
'.$ibforums->lang[arcadeking_txt1].''.$res['nb'].''.$ibforums->lang[arcadeking_txt2]; $Champion['ArcadeChampionMid'.$Cpt] = $res['champ_mid']; } for ($i = 1; $i <= $Cpt; ++$i) { $DB->query('SELECT avatar,avatar_size AS size FROM ibf_members WHERE id='.$Champion['ArcadeChampionMid'.$i]); if ($avatar = $DB->fetch_row()) { $Champion['ArcadeChampionAvatarCode'.$i] = $std->get_avatar($avatar, 1, $avatar['size']); if ($Champion['ArcadeChampionAvatarCode'.$i] == '') { $Champion['ArcadeChampionAvatarCode'.$i] = ""; } } else { $Champion['ArcadeChampionAvatarCode'.$i] = ""; } } $std->time_options['ARCADE'] = "{$ibforums->lang['timeformat4']}"; $cattable = ''; $show_all = ''; if (isset($ibforums->input['cat'])) { $cat = $ibforums->input['cat']; } else { $cat = $this->arcade->settings['def_cat']; } if (!is_numeric($cat)) { $cat = 1; } $termine = 0; $actifs = 0; $attente = 0; $DB->query('SELECT demare, champion FROM ibf_tournaments'); while ($row = $DB->fetch_row()) { if ($row['demare'] == 0) { ++$attente; } else { if ($row['champion'] == '') { ++$actifs; } else { ++$termine; } } } $termine = "$termine ".$ibforums->lang['finished_tourneys'].''; $actifs = "$actifs ".$ibforums->lang['running_tourneys'].''; if ($attente == 0) { $attente = $ibforums->lang['no_tourney_waiting']; } else { $attente = "$attente ".$ibforums->lang['tourneys_waiting'].''; } $DB->query("SELECT tps.*, ta.tid FROM ibf_tournament_players_statut tps LEFT JOIN ibf_tournaments ta ON (tps.tid=ta.tid) WHERE tps.mid='".$ibforums->member['id']."' AND tps.statut<'3' AND ta.demare = '1'"); $mtinfo['encourse'] = 0; $mtinfo['elimine'] = 0; $mtinfo['disqualifie'] = 0; if ($ibforums->member['id'] != 0) { while ($res = $DB->fetch_row()) { if ($res['statut'] == 0) { ++$mtinfo['encourse']; } if ($res['statut'] == 1) { ++$mtinfo['elimine']; } if ($res['statut'] == 2) { ++$mtinfo['disqualifie']; } } } $mtinfo['participe'] = $mtinfo['encourse'] + $mtinfo['elimine'] + $mtinfo['disqualifie']; $mtinfo['participe'] = $ibforums->lang['active_in'].$mtinfo['participe']; $mtinfo['encourse'] = $ibforums->lang['still_qualified'].' '.$mtinfo['encourse']; $mtinfo['elimine'] = $ibforums->lang['eliminated_in'].' '.$mtinfo['elimine']; $mtinfo['disqualifie'] = $ibforums->lang['disqualified_in'].' '.$mtinfo['disqualifie']; $cat_counter = 0; //Category System if ($this->arcade->settings['use_cats']) { $show_all = ' AND gcat='.$cat; $categories = ''; if ($this->arcade->user['userid'] == 0) { // this is a guest! $DB->query('SELECT ibpa_cats FROM ibf_groups WHERE g_id = 1'); $guestperm = $DB->fetch_row(); $this->arcade->user['allowed_categories'] = $guestperm['ibpa_cats']; } $restrictedcats = false; $allowedcats = explode(',', $this->arcade->user['allowed_categories']); if (!in_array(0, $allowedcats)) { $restrictedcats = true; } $DB->query('SELECT cat_name, c_id, show_all, password, num_of_games, description FROM ibf_games_cats WHERE active=1 ORDER BY pos ASC'); while ($the_cat = $DB->fetch_row()) { $displaycat = true; if ($restrictedcats) { if (!in_array($the_cat['c_id'], $allowedcats)) { $displaycat = false; } } if ($displaycat) { if ($cat == $the_cat['c_id']) { $total_num = $the_cat['num_of_games']; if ($the_cat['show_all'] == 1) { $show_all = " AND trim(password)=''"; $the_cat['num_of_games'] = $ibforums->lang['acp_all']; } if ($the_cat['password'] != '') { $the_cookie = 'cat_pass_'.$the_cat['c_id']; $pass = ibp_cleansql($_COOKIE[$the_cookie]); if ($pass != $the_cat['password']) { $this->output .= $this->html->cat_pass($the_cat['c_id']); return; } } $the_cat['cat_name'] = ''.$the_cat['cat_name'].''; if (strlen($the_cat['description']) > 2) { $tourneyinfo['desc'] = $this->html->cat_desc($the_cat['description']); } else { $tourneyinfo['desc'] = ''; } } else { if ($the_cat['show_all'] == 1) { $the_cat['num_of_games'] = $ibforums->lang['acp_all']; } } if (intval($this->arcade->settings['cats_per_tr']) > 0) { if ((($cat_counter % $this->arcade->settings['cats_per_tr']) == 0) && ($this->arcade->settings['cats_per_tr'] != 0) && ($cat_counter != 0)) { $categories .= ''; $cat_counter = 0; } } $file = CAT_IMGS.$the_cat['c_id'].'.gif'; if (file_exists($file)) { $the_cat['cat_name'] = " ".$the_cat['cat_name']; } $the_cat = ''.$the_cat['cat_name'].' ('.$the_cat['num_of_games'].')'; $categories .= $this->html->cat_cell($the_cat); ++$cat_counter; } } if (($this->arcade->settings['cats_per_tr'] != 0) && ($this->arcade->settings['cats_per_tr'] - $cat_counter > 0)) { $left_over = $this->arcade->settings['cats_per_tr'] - $cat_counter; for ($a = 1; $a <= $left_over; ++$a) { $categories .= $this->html->cat_cell(' '); } } $cattable = $this->html->the_cat_table($categories, $stylecolumns); $extquery = ''; $DB->query('SELECT mid, gid, sum(position) AS position, sum(points) AS points FROM ibf_games_league '.$extquery.' GROUP BY mid ORDER BY points DESC LIMIT 1'); $row = $DB->fetch_row(); if ($row['mid'] > 0) { $DB->query('SELECT name FROM ibf_members WHERE id='.$row['mid']); $row = $DB->fetch_row(); $tourneyinfo['catchamp'] = $row['name']; } else { $tourneyinfo['catchamp'] = $ibforums->lang['nobody']; } if ($this->arcade->settings['skin'] != 0) { $tourneyinfo['catchamp'] = ''.$tourneyinfo['catchamp'].' '.$ibforums->lang['category_champion'].''; } else { $tourneyinfo['catchamp'] = ''.$tourneyinfo['catchamp'].''; } } //End category table building. $query_limit = ''; if ($this->arcade->settings['games_pp'] && ($ibforums->input['gsearch'] == '')) { $this->arcade->get_pages(0, $this->arcade->settings['use_cats'], $total_num); $start = 0; if (isset($ibforums->input['st'])) { $start = intval($ibforums->input['st']); } if ($start < 0) { $start = 0; } $query_limit = 'LIMIT '.$start.', '.$this->arcade->settings['games_pp']; } //tourney stuff $tourneyinfo['active'] = 0; $tourneyinfo['unactive'] = 0; $tourneyinfo['numenrolled'] = 0; $tourneyinfo['championships'] = 0; $tourneyinfo['playable'] = $ibforums->lang['no_active']; $DB->query('SELECT champion FROM ibf_tournaments'); while ($this_tourney = $DB->fetch_row()) { if ($this_tourney['champion'] == $this->arcade->user['name']) { ++$tourneyinfo['championships']; } if ($this_tourney['champion'] == '') { ++$tourneyinfo['active']; } else { ++$tourneyinfo['unactive']; } } $DB->query("SELECT DISTINCT(p.tid) FROM ibf_tournaments as t, ibf_tournament_players as p WHERE t.tid=p.tid AND t.champion='' AND p.mid = '".$this->arcade->user['id']."' ORDER BY t.datestarted ASC"); while ($this_tourney = $DB->fetch_row()) { ++$tourneyinfo['numenrolled']; $tourneyinfo['playable'] = "".$ibforums->lang['view_latest_active'].''; } //plays left today $plays_left = ''; if ($this->arcade->user['max_play'] != 0 && $this->arcade->user['arcade_access'] == 2) { $plays_left = $ibforums->lang['plays'].($this->arcade->user['max_play'] - $this->arcade->user['times_played']); } //latest score and champions //Added g.decpoints after g.title $DB->query("SELECT s.*, g.gtitle, g.decpoints, c.password FROM ibf_games_scores AS s, ibf_games_list AS g, ibf_games_cats AS c WHERE s.gid=g.gid AND g.gcat=c.c_id AND g.active=1 AND trim(password)='' ORDER BY datescored DESC LIMIT 0,5"); $newest_score = $DB->fetch_row(); //$newest_score['score'] = $this->arcade->t3h_format($newest_score['score']); // Replaced $newest_score['score'] = $this->arcade->do_arcade_format($newest_score['score'], $newest_score['decpoints']); if ($this->arcade->settings['use_announce']) { $announce = $this->arcade->settings['announcement_parsed']; $tourneyinfo['announcement'] = $this->html->generalbox($ibforums->lang['arcade_announcements'], $announce); } else { $tourneyinfo['announcement'] = ''; } $latestinfo = $ibforums->lang['newest_score']; $latestinfo = preg_replace('/<% NAME %>/i', $newest_score['name'], $latestinfo); $latestinfo = preg_replace('/<% SCORE %>/i', $newest_score['score'], $latestinfo); $latestinfo = preg_replace('/<% GAME %>/i', $newest_score['gtitle'], $latestinfo); $newtext = ''; $DB->query("SELECT c.*, g.gcat, cat.password FROM ibf_games_champs AS c, ibf_games_list AS g, ibf_games_cats AS cat WHERE c.champ_gid=g.gid AND g.gcat=cat.c_id AND g.active=1 AND trim(password)='' ORDER BY champ_date DESC LIMIT 0,5"); while ($row = $DB->fetch_row()) { $row['champ_date'] = $std->get_date($row['champ_date'], 'ARCADE'); if ($row['champ_date'] == date("{$ibforums->lang['timeformat4']}")) { $row['champ_date'] = $ibforums->lang['today']; } else { if ($ibforums->lang[timeformat1] == 'de') { $yesterday = date("{$ibforums->lang['timeformat4']}", mktime(0, 0, 0, date('d') - 1, date('m'), date('Y'))); } else { $yesterday = date("{$ibforums->lang['timeformat4']}", mktime(0, 0, 0, date('m') - 1, date('d'), date('Y'))); } if ($row['champ_date'] == $yesterday) { $row['champ_date'] = $ibforums->lang['yesterday']; } } $row['text'] = $ibforums->lang['new_champ']; $row['text'] = preg_replace('/<% USERNAME %>/i', $row['champ_name'], $row['text']); $row['text'] = preg_replace('/<% GAMENAME %>/i', $row['champ_gtitle'], $row['text']); $newtext .= $this->html->newest_champs_row($row); } $DB->query('SELECT mid, gid, sum(position) AS position, sum(points) AS points FROM ibf_games_league GROUP BY mid ORDER BY points DESC LIMIT 1'); $row = $DB->fetch_row(); $points = $row['points']; $name = ''; if ($row['mid'] > 0) { $Touruserid = $row['mid']; $DB->query('SELECT name FROM ibf_members WHERE id='.$Touruserid); $row = $DB->fetch_row(); $name = $name.$row['name'].''; $tourneyinfo['champ'] = ''.$name."
{$ibforums->lang['tourneyinfo_txt1']}".$points."{$ibforums->lang['tourneyinfo_txt2']}"; $tourneyinfo['champavatar'] = ''; $DB->query('SELECT avatar,avatar_size AS size FROM ibf_members WHERE id='.$Touruserid); if ($avatar = $DB->fetch_row()) { $tourneyinfo['champavatar'] = $std->get_avatar($avatar, 1, $avatar['size']); if ($tourneyinfo['champavatar'] == '') { $tourneyinfo['champavatar'] = ""; } } else { $tourneyinfo['champavatar'] = ""; } } else { $tourneyinfo['champ'] = "{$ibforums->lang['top3box_norank']}"; $tourneyinfo['champavatar'] = ''; } $usecats = $this->arcade->settings['use_cats']; $defcat = $this->arcade->settings['def_cat']; // alpha-navbar by MrZeropage $alphabet = array('ALL', '0-9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ); $alphabar = ''; $currentfilter = 'ALL'; if ($ibforums->input['gsearch'] != '') { $currentfilter = $ibforums->input['gsearch']; } foreach ($alphabet as $letter) { $style = 'alt1'; $boldon = ''; $boldoff = ''; $width = '18'; $urlstring = 'act=Arcade&gsearch='.$letter.'&search_type='; if ($letter == '0-9') { $urlstring .= '3'; $width = '24'; } else { $urlstring .= '1'; } if ($letter == $currentfilter) { $style = 'alt2'; $boldon = ''; $boldoff = ''; } if ($letter == 'ALL') { $urlstring = ''; $letter = $ibforums->lang['acp_all']; $width = '26'; } if (isset($ibforums->input['cat'])) { $urlstring .= '&cat='.intval($ibforums->input['cat']); } $alphabar .= '
'.$boldon.$letter.$boldoff.'
'; } $this->arcade->links['alphabar'] = $alphabar; // end alpha-navbar $selected['sort']['gtitle'] = ''; $selected['sort']['gcount'] = ''; $selected['sort']['gwords'] = ''; $selected['sort']['g_rating'] = ''; $selected['sort']['added'] = ''; $selected['order']['ASC'] = ''; $selected['order']['DESC'] = ''; // make sure the setting is clean and has a valid value if (!in_array($this->arcade->settings['g_display_sort'], array('gtitle', 'gcount', 'gwords', 'g_rating', 'added'))) { $this->arcade->settings['g_display_sort'] = 'gtitle'; } if (!in_array($this->arcade->settings['g_display_order'], array('ASC', 'DESC'))) { $this->arcade->settings['g_display_order'] = 'ASC'; } $selected['sort'][$this->arcade->settings['g_display_sort']] = 'selected="selected" '; $selected['order'][$this->arcade->settings['g_display_order']] = 'selected="selected" '; //header $this->arcade->make_links($newest_score['gid'], $newest_score['gtitle']); $viewerav = ''; if ($this->arcade->settings['arcade_status'] == 0) { $this->output .= "
".$ibforums->lang['arcade_offline'].'
'; } $this->output .= $this->html->start($newtext, $latestinfo, $new_games, $pop_games, $ran_games, $tot_games, $usecats, $tot_cats, $this->arcade->links, $plays_left, $tourneyinfo, $cattable, $attente, $termine, $actifs, $mtinfo, $Champion, $Highscorechamp, $stylecolumns, $selected); $this->output .= ''; // start of gametable //show new? if ($this->arcade->settings['show_new']) { $time = time() - ($this->arcade->settings['show_new'] * $this->arcade->settings['show_new_frame']); } // Search Mod $search = ''; $show_all = ''; if ($ibforums->input['gsearch'] != '') { $show_all = " and trim(password)=''"; switch (intval($ibforums->input['search_type'])) { case 0: $search = " and gtitle like '%".$ibforums->input['gsearch']."%'"; break; case 1: $search = " and gtitle like '".$ibforums->input['gsearch']."%'"; break; case 2: $search = " and gtitle like '%".$ibforums->input['gsearch']."'"; break; case 3: $search = " and gtitle REGEXP '^[0-9]'"; break; } } // End Search Mod $catselect = ''; if ($this->arcade->settings['use_cats']) { if (isset($ibforums->input['cat'])) { $querycat = intval($ibforums->input['cat']); } else { $querycat = $this->arcade->settings['def_cat']; } // category selected/setup, but make sure it is active and not showing all games anyway $catquery = $DB->query('SELECT show_all, active FROM ibf_games_cats WHERE c_id='.$querycat); $catdata = $DB->fetch_row($catquery); if (($catdata[show_all] == 0) && ($catdata[active] == 1)) { if ($search == '') { // no searching here $catselect = ' and gcat='.$querycat; } else { // ok, search found, now check if we can access ALL categories if (substr($this->arcade->user['allowed_categories'], 0, 1) != '0') { $mycats = $this->arcade->user['allowed_categories']; if (substr($mycats, -1) == ',') { $mycats = substr($mycats, 0, (strlen($mycats) - 1)); } $catselect = ' and gcat IN ('.$mycats.')'; } } } } $game_counter = 1; //get games $DB->query('select g.*, c.password, c.cat_name from ibf_games_list as g left join ibf_games_cats as c on (g.gcat = c.c_id) where g.active = 1 '.$show_all.$search.$catselect.' order by '.$this->arcade->settings['g_display_sort'].' '.$this->arcade->settings['g_display_order'].' '.$query_limit); while ($this_game = $DB->fetch_row()) { $games[] = array('gid' => $this_game['gid'], 'gwidth' => $this_game['gwidth'], 'gheight' => $this_game['gheight'], 'gkeys' => $this_game['gkeys'], 'gname' => $this_game['gname'], 'gtitle' => $this_game['gtitle'], 'gcount' => $this_game['gcount'], 'gwords' => $this_game['gwords'], 'added' => $this_game['added'], 'g_rating' => $this_game['g_rating'], 'gtime' => $this_game['gtime'], 'g_raters' => $this_game['g_raters'], 'decpoints' => $this_game['decpoints'], 'filesize' => $this_game['filesize'], 'cat_name' => $this_game['cat_name'], 'cost' => $this_game['cost'], 'jackpot' => $this_game['jackpot'], 'jackpot_type' => $this_game['jackpot_type'], 'highscore_type' => $this_game['highscore_type'], 'bestscore' => $this_game['bestscore'], 'bestmid' => $this_game['bestmid'], ); $game_gids[] = $this_game['gid']; } $game_string = '(0)'; if (count($game_gids) > 0) { $game_string = '('.implode(',', $game_gids).')'; } // get the best result of all time for each game $highscores = array(); $scores_query = $DB->query('SELECT g.bestmid, g.bestscore AS champ_score, g.gid AS champ_gid, g.decpoints, u.username AS champ_name FROM ibf_games_list AS g INNER JOIN ibf_user AS u ON u.userid=g.bestmid WHERE g.gid IN '.$game_string.' ORDER BY g.gid'); while ($row = $DB->fetch_row($scores_query)) { $row['champ_score'] = $this->arcade->do_arcade_format($row['champ_score'], $row['decpoints']); $highscores[ $row['champ_gid'] ] = array('name' => $row['champ_name'], 'score' => $row['champ_score']); } $personal_highs = array(); $scores_query = $DB->query('SELECT mid, gid, score AS the_score, MAX(score) FROM ibf_games_scores WHERE gid IN '.$game_string.' AND mid='.$this->arcade->user['id'].' GROUP BY score'); while ($row = $DB->fetch_row($scores_query)) { $personal_highs[ $row['gid'] ] = $row['the_score']; } foreach ($games as $the_game) { $gamesplit = ''; //row color if ($this->arcade->settings['skin'] != 0) { $rowcol = ($rowcol == 'alt1') ? 'alt2' : 'alt1'; } //game top score $top = $highscores[ $the_game['gid'] ]; // crowns only if name not empty (by MrZeropage) if ($top['score'] != 0) { $top['name'] = ' '.$top['name'].' '; $top['score'] = "{$ibforums->lang['tourneyinfo_txt1']}".$top['score']."{$ibforums->lang['tourneyinfo_txt2']}"; } else { $top['name'] = "{$ibforums->lang['noscorestored']}"; $top['score'] = ' '; } //game actual highscore $ordering = ($the_game['highscore_type'] == 'high') ? 'DESC' : 'ASC'; $this_query = $DB->query('SELECT * FROM ibf_games_scores WHERE gid='.$the_game['gid'].' ORDER BY score '.$ordering.', timespent ASC'); $actualhighscore = $DB->fetch_row($this_query); $actualtop['score'] = $this->arcade->do_arcade_format($actualhighscore['score'], $the_game['decpoints']); if ($actualtop['score'] != '0') { $actualtop['name'] = ' '.$actualhighscore['name'].' '; $actualtop['score'] = "{$ibforums->lang['tourneyinfo_txt1']}".$actualtop['score']."{$ibforums->lang['tourneyinfo_txt2']}"; } else { $actualtop['name'] = "{$ibforums->lang['noscorestored']}"; $actualtop['score'] = ' '; } //create play links $this->arcade->make_links($the_game['gid'], $the_game['gtitle']); //is game new? $newgame = ''; if ($the_game['added'] > $time && $this->arcade->settings['show_new']) { $this->arcade->links['click'] .= " {$ibforums->lang["; $newgame = "{$ibforums->lang["; } //fav games $temp = unserialize($this->arcade->user['favs']); if (!is_array($temp)) { $temp = array(); } $favs = $temp; $the_game['gtitle2'] = $the_game['gtitle']; $favtitle = $ibforums->lang['add_to_faves']; $favtitle = preg_replace('/<% GAMENAME %>/i', $the_game['gtitle'], $favtitle); $star = ''; if (in_array($the_game['gid'], $favs)) { $star = "".$ibforums->lang[ "; $favtitle = $ibforums->lang['remove_from_faves']; $favtitle = preg_replace('/<% GAMENAME %>/i', $the_game['gtitle'], $favtitle); } if ($this->arcade->user['arcade_access'] == 2 && $this->arcade->user['id']) { $the_game['gtitle'] = $star."$favtitle"; } //personal best $pbesttext = ''; if ($personal_highs[ $the_game['gid'] ] == '') { $pbesttext = $ibforums->lang['n_a']; } else { //$pbesttext = $this->arcade->t3h_format($personal_highs[ $the_game['gid'] ]); //Replaced $pbesttext = $this->arcade->do_arcade_format($personal_highs[ $the_game['gid'] ], $the_game['decpoints']); } //rating $rating = ''; $rating = $ibforums->lang['rating']; $raters = unserialize($the_game['g_raters']); if (empty($the_game['g_raters'])) { $rating .= $ibforums->lang['no_votes']; } else { $amount = count($raters).$ibforums->lang['rates']; for ($a = 1; $a <= $the_game['g_rating']; ++$a) { $rating .= "".$amount.""; } $leftover = (5 - $the_game['g_rating']); for ($a = 1; $a <= $leftover; ++$a) { $rating .= "".$amount.""; } } if ($this->arcade->user['id'] != 0 && !isset($raters[$this->arcade->user['id']])) { //no rating here, play game to rate! //$rating .= $this->html->rate_link($the_game['gid']); } // File Size Mod if ($the_game['filesize'] > 0) { $the_game['filesize'] = "\n\n".$ibforums->lang['file_size'].': '.$std->size_format($the_game['filesize']); } else { $the_game['filesize'] = ''; } // End File Size Mod if ($game_counter == $stylecolumns) { $gamesplit = ''; $game_counter = 0; } //getting the row $the_game['gtime'] = $this->arcade->thatdate($the_game['gtime']); $vbversion = substr($vboptions[templateversion], 0, 3); if (($vbversion != '3.0') && ($NATIVEMODE == 0)) { ($hook = vBulletinHook::fetch_hook('ibproarcade_gamebit')) ? eval($hook) : false; } $the_game['jackpot_info'] = ''; $the_game['cost_info'] = ''; $the_game['jackpot_info'] = ''; $the_game['ibprostyle_info1'] = ''; $the_game['ibprostyle_info2'] = ''; $the_game['v3style_info'] = "
".$this->arcade->links['click'].'
'; // detect vBplaza if (($vbulletin->options['vbbux_enabled'] == 1) && ($vbulletin->options['vbbux_arcadeintegration'] == 1)) { $the_game['ibprostyle_info1'] = "
{$ibforums->lang['gb_jackpot_title']}
"; $the_game['ibprostyle_info2'] = '
'; $the_game['v3style_info'] = '
'; $the_game['cost_info'] = $ibforums->lang['costs_pgame'].''.$the_game['cost'].'
'; if ($the_game['jackpot_type'] == '-1') { // raising Jackpot, so display it in GameBit! $the_game['jackpot_info'] = $ibforums->lang['gb_win_jackpot_raising'].''.$the_game['jackpot'].''; } else { // static Jackpot $the_game['jackpot_info'] = $ibforums->lang['gb_win_jackpot_static'].''.$the_game['jackpot'].''; } } $this->output .= $this->html->row($the_game, $gamesplit, $top, $pbesttext, $this->arcade->links, $rowcol, $rating, $actualtop, $newgame, $stylecolumns); ++$game_counter; } $this->output .= $this->html->stop($this->arcade->links['pages']); $this->page_title = $ibforums->vars['board_name'].' -> '.$ibforums->lang['page_title']; $this->nav = array($ibforums->lang['page_title']); } //------------------------------------------ // Play_Game // // This brings up the game to play // //------------------------------------------ public function play_game() { global $ibforums, $DB, $std, $vboptions, $vbulletin, $DEBUGMODE, $NATIVEMODE; if (($GROUP['max_play'] - $ibforums->member['times_played']) <= 0 && $GROUP['max_play'] != 0) { $std->Error(array(LEVEL => 1, MSG => 'max')); } $id = intval($ibforums->input['gameid']); if ($id < 1) { $id = 1; } setcookie('gidstarted', '', time() - 3600); setcookie('gidstarted', $id); setcookie('tidstarted', '', time() - 3600); setcookie('gpstarted', time()); if (!preg_match("/^(\d+)$/", $id)) { $std->Error(array(LEVEL => 1, MSG => 'no_help_file')); } $DB->query('SELECT * FROM ibf_games_list WHERE gid='.$id); $game = $DB->fetch_row(); $game['hash'] = $hash; $randomchar = '1'; $randomchar2 = '1'; // only run this if the game is using the new code if ((file_exists(ROOT_PATH.'arcade/gamedata/'.$game['gname'].'/v32game.txt')) || (file_exists(ROOT_PATH.'arcade/gamedata/'.$game['gname'].'/v3game.txt'))) { $randomchar = rand(1, 10); $randomchar2 = rand(1, 5); $game['gidencoded'] = $game['gid'] * $randomchar ^ $randomchar2; } if ($this->arcade->user['arcade_access'] > 2) { // this is a guest // create a hash for that guest playing srand((double) microtime() * 1000000); $guesthash = rand(100000, 999999); setcookie('guesthash', $guesthash); if ($_COOKIE['ibPAcookiecheck'] != 'yesss') { $server = strtolower($_SERVER['HTTP_REFERER']); if (strpos($server, 'arcade.php') > 0) { $VERBOSE = ($DEBUGMODE == 2) ? ' cookie #001 -> ghash='.$guesthash.' | ibPAcheck='.$_COOKIE['ibPAcookiecheck'] : ''; $std->Error(array(LEVEL => 1, MSG => 'cat_pass_notice', EXTRA => $VERBOSE)); } else { // game called directly (without arcade.php), so set cookie NOW for later verification setcookie('ibPAcookiecheck', 'yesss'); } } // now create session-entry... $DB->query("INSERT INTO ibf_games_session (gname, gameid, gtitle, mname, mid, randgid, randgid2) VALUES ('".addslashes($game['gname'])."', '".$game['gid']."', '".addslashes($game['gtitle'])."', '".$guesthash."', '0', '".$randomchar."', '".$randomchar2."')"); $sessionid = $DB->get_insert_id(); setcookie('guestsession', $sessionid); } else { // prune any old session from that user $DB->query('DELETE FROM ibf_games_session WHERE mid='.$this->arcade->user['id']); // now create session-entry... $DB->query("INSERT INTO ibf_games_session (gname, gameid, gtitle, mname, mid, randgid, randgid2) VALUES ('".addslashes($game['gname'])."', '".$game['gid']."', '".addslashes($game['gtitle'])."', '".addslashes($this->arcade->user['name'])."', '".$this->arcade->user['id']."', '".$randomchar."', '".$randomchar2."')"); $sessionid = $DB->get_insert_id(); // ...and store session-info in userprofile $DB->query("UPDATE ibf_members SET times_played=times_played+1, arcade_sess_gid='".$game['gid']."', arcade_sess_start='".time()."', arcade_gtype=0, arcade_session='".$sessionid."' WHERE id=".$this->arcade->user['id']); } $DB->query('SELECT champ_name AS name,champ_score AS score FROM ibf_games_champs WHERE champ_gid='.$id); $top = $DB->fetch_row(); $DB->query('UPDATE ibf_games_list SET gcount=gcount+1 WHERE gid='.$id); $top['score'] = $this->arcade->do_arcade_format($top['score'], $game['decpoints']); if ($top['name'] == '') { $top['name'] = $ibforums->lang['top3box_norank']; } /*********************************************************************** pnFlashGames Modification: Add in extra information to the $game array so that it can be displayed properly and so that the pnFlashGames component can get the information it needs */ $game['username'] = $player_name = $this->arcade->user['name']; $game['checksum'] = $this->pnFlashGames_getChecksum($game['gname']); $game['domain'] = $this->pnFlashGames_getDomain(); //couldnt get this to work for some reason /**********************************************************************/ $extra_html = ''; if (trim($game['object']) != '') { $extra_html .= $this->html->objective($game); } if (trim($game['gkeys']) != '') { $extra_html .= $this->html->keys($game); } //fav games $temp = unserialize($this->arcade->user['favs']); if (!is_array($temp)) { $temp = array(); } $favs = $temp; $favtitle = $ibforums->lang['add_to_faves']; $favtitle = preg_replace('/<% GAMENAME %>/i', $game['gtitle'], $favtitle); $star = ''; if (in_array($game['gid'], $favs)) { $star = "".$ibforums->lang[ "; $favtitle = $ibforums->lang['remove_from_faves']; $favtitle = preg_replace('/<% GAMENAME %>/i', $game['gtitle'], $favtitle); } if ($this->arcade->user['arcade_access'] == 2 && $this->arcade->user['id']) { $game['fave'] = $star."$favtitle"; } $vbversion = substr($vboptions[templateversion], 0, 3); if (($vbversion != '3.0') && ($NATIVEMODE == 0)) { ($hook = vBulletinHook::fetch_hook('ibproarcade_play_game')) ? eval($hook) : false; } $this->output .= $this->html->game($game, $top, $extra_html); $this->page_title = $ibforums->vars['board_name'].' -> '.$ibforums->lang['page_title'].' -> '.$game['gtitle']; $this->nav = array('{$ibforums->lang['page_title']}", $game['gtitle']); } //------------------------------------------ // Play_Game In Popup Window v1.0 // // This will allow users to play game in new window // //------------------------------------------ public function playfull() { global $ibforums, $DB, $std, $vboptions, $vbulletin, $DEBUGMODE, $NATIVEMODE; if (($GROUP['max_play'] - $ibforums->member['times_played']) <= 0 && $GROUP['max_play'] != 0) { $std->Error(array(LEVEL => 1, MSG => 'max')); } $id = intval($ibforums->input['gameid']); if ($id < 1) { $id = 1; } setcookie('gidstarted', '', time() - 3600); setcookie('gidstarted', $id); setcookie('tidstarted', '', time() - 3600); setcookie('gpstarted', time()); $DB->query('SELECT * FROM ibf_games_list WHERE gid='.$id); $game = $DB->fetch_row(); $game['hash'] = $hash; $randomchar = '1'; $randomchar2 = '1'; // only run this if the game is using the new code if ((file_exists(ROOT_PATH.'arcade/gamedata/'.$game['gname'].'/v32game.txt')) || (file_exists(ROOT_PATH.'arcade/gamedata/'.$game['gname'].'/v3game.txt'))) { $randomchar = rand(1, 10); $randomchar2 = rand(1, 5); $game['gidencoded'] = $game['gid'] * $randomchar ^ $randomchar2; } if ($this->arcade->user['arcade_access'] > 2) { // this is a guest // create a hash for that guest playing srand((double) microtime() * 1000000); $guesthash = rand(10, 99); setcookie('guesthash', $guesthash); // check if cookies are working if ($_COOKIE['ibPAcookiecheck'] != 'yesss') { $VERBOSE = ($DEBUGMODE == 2) ? ' cookie #002 -> ghash='.$guesthash.' | ibPAcheck='.$_COOKIE['ibPAcookiecheck'] : ''; $std->Error(array(LEVEL => 1, MSG => 'cat_pass_notice', EXTRA => $VERBOSE)); } // now create session-entry... $DB->query("INSERT INTO ibf_games_session (gname, gameid, gtitle, mname, mid, randgid, randgid2) VALUES ('".addslashes($game['gname'])."', '".$game['gid']."', '".addslashes($game['gtitle'])."', '".$guesthash."', '0', '".$randomchar."', '".$randomchar2."')"); $sessionid = $DB->get_insert_id(); setcookie('guestsession', $sessionid); } else { // prune any old session from that user $DB->query('DELETE FROM ibf_games_session WHERE mid='.$this->arcade->user['id']); // now create session-entry... $DB->query("INSERT INTO ibf_games_session (gname, gameid, gtitle, mname, mid, randgid, randgid2) VALUES ('".addslashes($game['gname'])."', '".$game['gid']."', '".addslashes($game['gtitle'])."', '".addslashes($this->arcade->user['name'])."', '".$this->arcade->user['id']."', '".$randomchar."', '".$randomchar2."')"); $sessionid = $DB->get_insert_id(); // ...and store session-info in userprofile $DB->query("UPDATE ibf_members SET times_played=times_played+1, arcade_sess_gid='".$game['gid']."', arcade_sess_start='".time()."', arcade_gtype=0, arcade_session='".$sessionid."' WHERE id=".$this->arcade->user['id']); } if (!preg_match("/^(\d+)$/", $id)) { $std->Error(array(LEVEL => 1, MSG => 'no_help_file')); } $DB->query('SELECT champ_name AS name,champ_score AS score FROM ibf_games_champs WHERE champ_gid='.$id); $top = $DB->fetch_row(); $DB->query('UPDATE ibf_games_list SET gcount=gcount+1 WHERE gid='.$id); /*********************************************************************** pnFlashGames Modification: Add in extra information to the $game array so that it can be displayed properly and so that the pnFlashGames component can get the information it needs */ $game['username'] = $player_name = $this->arcade->user['name']; $game['checksum'] = $this->pnFlashGames_getChecksum($game['gname']); $game['domain'] = $this->pnFlashGames_getDomain(); //couldnt get this to work for some reason /**********************************************************************/ $vbversion = substr($vboptions[templateversion], 0, 3); if (($vbversion != '3.0') && ($NATIVEMODE == 0)) { ($hook = vBulletinHook::fetch_hook('ibproarcade_play_game_popup')) ? eval($hook) : false; } echo << {$ibforums->lang['popuptitle']}{$game['gname']} {$ibforums->lang['no_embed']}{$game['gtitle']} EOF; exit(); } //------------------------------------------ // Play_Tourney // // This brings up the game to play // //------------------------------------------ public function play_tourney() { global $ibforums, $DB, $std, $vboptions, $vbulletin, $guestplayerid, $NATIVEMODE; $id = intval($ibforums->input['gameid']); $tid = intval($ibforums->input['tid']); $rung = intval($ibforums->input['rung']); $faceoff = intval($ibforums->input['faceoff']); setcookie('gidstarted', '', time() - 3600); setcookie('gidstarted', $id); setcookie('tidstarted', '', time() - 3600); setcookie('tidstarted', $tid); if ($guestplayerid == $this->arcade->user['id']) { $std->Error(array('LEVEL' => 1, 'MSG' => 'no_tourney_user')); } $DB->query('SELECT nbtries FROM ibf_tournaments WHERE tid='.$tid); $readrow = $DB->fetch_row(); $nbtries = $readrow['nbtries']; $DB->query('SELECT * FROM ibf_tournament_players WHERE mid='.$this->arcade->user['id'].' AND tid='.$tid.' AND timesplayed<'.$nbtries.' AND rung='.$rung); $ctr = 0; while ($row = $DB->fetch_row()) { ++$ctr; } if ($ctr == 0) { $std->Error(array(LEVEL => 1, MSG => 'passed_times_played')); } if (!preg_match("/^(\d+)$/", $id)) { $std->Error(array(LEVEL => 1, MSG => 'no_help_file')); } $DB->query('SELECT * FROM ibf_games_list WHERE gid='.$id); $game = $DB->fetch_row(); $randomchar = '1'; $randomchar2 = '1'; // prune any old session from that user $DB->query('DELETE FROM ibf_games_session WHERE mid='.$this->arcade->user['id']); // now create session-entry... $DB->query("INSERT INTO ibf_games_session (gname, gameid, gtitle, mname, mid) VALUES ('".addslashes($game['gname'])."', '".$game['gid']."', '".addslashes($game['gtitle'])."', '".addslashes($this->arcade->user['name'])."', '".$this->arcade->user['id']."')"); $sessionid = $DB->get_insert_id(); // ...and store session-info in userprofile $DB->query("UPDATE ibf_members SET times_played=times_played+1, arcade_sess_gid='".$game['gid']."', arcade_sess_start='".time()."', arcade_gtype=1, arcade_session='".$sessionid."' WHERE id=".$this->arcade->user['id']); $DB->query('SELECT m.name, t.rungscore, t.timesplayed FROM ibf_members as m, ibf_tournament_players as t WHERE m.id = t.mid AND t.tid='.$tid.' AND t.rung='.$rung.' AND t.faceoff='.$faceoff.' AND t.mid<>'.$this->arcade->user['id'].' LIMIT 0, 1'); $top = $DB->fetch_row(); $DB->query('UPDATE ibf_games_list SET gcount=gcount+1 WHERE gid='.$id); $DB->query('UPDATE ibf_tournament_players SET timesplayed=timesplayed+1, notified=0 WHERE tid='.$tid.' AND mid='.$this->arcade->user['id'].' AND rung='.$rung); /*********************************************************************** pnFlashGames Modification: Add in extra information to the $game array so that it can be displayed properly and so that the pnFlashGames component can get the information it needs */ $game['username'] = $player_name = $this->arcade->user['name']; $game['checksum'] = $this->pnFlashGames_getChecksum($game['gname']); $game['domain'] = $this->pnFlashGames_getDomain(); /**********************************************************************/ $top['nbtries'] = $nbtries; $top['rungscore'] = $this->arcade->do_arcade_format($top['rungscore'], $game['decpoints']); $top['playertext'] = $ibforums->lang['tourney_opponent']; $top['name'] .= "
(".$ibforums->lang['tourney_playinfo1'].' '.$top['timesplayed'].'/'.$top['nbtries'].' '.$ibforums->lang['tourney_playinfo2'].')'; $top['scoretext'] = $ibforums->lang['tourney_scoretext1']; if ($top['timesplayed'] == 0) { $top['scoretext'] = $ibforums->lang['tourney_scoretext2']; $top['rungscore'] = ''; } if ($top['timesplayed'] == $top['nbtries']) { $top['scoretext'] = $ibforums->lang['tourney_scoretext3']; } $game['ginfotxt'] = "
*** ".$ibforums->lang['gtourneyinfotxt1']." ***
".$ibforums->lang['gtourneyinfotxt2'].'
'; $game['extra'] = ''; if (trim($game['object']) != '') { $game['extra'] .= $this->html->objective($game); } if (trim($game['gkeys']) != '') { $game['extra'] .= $this->html->keys($game); } $vbversion = substr($vboptions[templateversion], 0, 3); if (($vbversion != '3.0') && ($NATIVEMODE == 0)) { ($hook = vBulletinHook::fetch_hook('ibproarcade_play_game_tourney')) ? eval($hook) : false; } $this->output .= $this->html->tourneygame($game, $top, $tid); $this->page_title = $ibforums->vars['board_name'].' -> '.$ibforums->lang['page_title'].' -> '.$game['gtitle']; $this->nav = array("{$ibforums->lang['page_title']}", $game['gtitle']); } //---------------------------------------- // Show_Stats // // This shows the leaderboard // //---------------------------------------- public function show_stats() { global $ibforums, $DB, $std, $vbulletin, $vboptions; // clean incoming stuff... $ibforums->input['comment'] = ibp_cleanhtml(ibp_cleansql($ibforums->input['comment'])); $ibforums->input['s_id'] = intval($ibforums->input['s_id']); $ibforums->input['gameid'] = intval($ibforums->input['gameid']); if ($ibforums->input['comment'] != '') { if (isset($ibforums->input['s_id']) && $ibforums->input['s_id'] != '') { $DB->query("UPDATE ibf_games_scores SET comment='".$ibforums->input['comment']."' WHERE s_id=".$ibforums->input['s_id']); } else { $DB->query("UPDATE ibf_games_scores SET comment='".$ibforums->input['comment']."' WHERE mid=".$this->arcade->user['id'].' AND gid='.$ibforums->input['gameid']); } } $query_limit = ''; if ($this->arcade->settings['scores_amount']) { $this->arcade->get_pages(1); $start = 0; if (isset($ibforums->input['st'])) { $start = intval($ibforums->input['st']); } $query_limit = 'LIMIT '.$start.', '.$this->arcade->settings['scores_amount']; } $id = intval($ibforums->input['gameid']); $DB->query('SELECT g.gid,g.gname,g.gtitle,g.gwords,g.gcat,g.highscore_type,g.decpoints, c.* FROM ibf_games_list AS g, ibf_games_champs AS c WHERE (g.gid = c.champ_gid) AND gid='.$id); if ($DB->get_num_rows()) { $ginfo = $DB->fetch_row(); //$ginfo['champ_score'] = $this->arcade->t3h_format($ginfo['champ_score']); //replaced $ginfo['champ_score'] = $this->arcade->do_arcade_format($ginfo['champ_score'], $ginfo['decpoints']); if (!empty($ginfo['champ_mid'])) { $DB->query('SELECT avatar,avatar_size AS size FROM ibf_members WHERE id='.$ginfo['champ_mid']); $avatar = $DB->fetch_row(); $ginfo['avatarcode'] = $std->get_avatar($avatar, 1, $avatar['size']); } } else { $DB->query('SELECT * FROM ibf_games_list WHERE gid='.$id); $ginfo = $DB->fetch_row(); } $ginfo['avatarcode'] = (empty($ginfo['avatarcode'])) ? "" : $ginfo['avatarcode']; // favorites-link $temp = unserialize($this->arcade->user['favs']); if (!is_array($temp)) { $temp = array(); } $favs = $temp; $favtitle = $ibforums->lang['add_to_faves']; $favtitle = preg_replace('/<% GAMENAME %>/i', $game['gtitle'], $favtitle); $star = ''; if (in_array($ginfo['gid'], $favs)) { //$star = "".$ibforums->lang[ "; $favtitle = $ibforums->lang['remove_from_faves']; $favtitle = preg_replace('/<% GAMENAME %>/i', $ginfo['gtitle'], $favtitle); } if ($this->arcade->user['arcade_access'] == 2 && $this->arcade->user['id']) { $ginfo['fave'] = "$favtitle"; } // make the link fit everything ;) $ginfo['backlink'] = $ibforums->lang['arcade_home']; if ($this->arcade->settings['use_cats']) { $ginfo['backlink'] = $ibforums->lang['showothersincat']; } $this->arcade->make_links($ginfo['gid'], $ginfo['gtitle']); $this->output .= $this->html->leaderstart($ginfo, $this->arcade->links); $DB->query('SELECT mid FROM ibf_games_scores WHERE gid='.$id); $num_scores = 0; while ($nsarray = $DB->fetch_row()) { ++$num_scores; } $ordering = ($ginfo['highscore_type'] == 'high') ? 'DESC' : 'ASC'; //$this_query = $DB->query("SELECT * FROM ibf_games_scores WHERE gid=".$id." ORDER BY score ".$ordering.", datescored ASC ".$query_limit); $this_query = $DB->query('SELECT * FROM ibf_games_scores WHERE gid='.$id.' ORDER BY score '.$ordering.',timespent ASC '.$query_limit); $ctr = $start + 1; $intctr = 1; $rowcol = 'alt2'; while ($lboard = $DB->fetch_row($this_query)) { //$lboard['comment'] = array( 'TEXT' => $lboard['comment'], 'SMILIES' => 1, 'CODE' => 1, 'SIGNATURE' => 0, 'HTML' => 0); //$lboard['comment'] = $this->parser->convert($lboard['comment']); // parse the comment $vbversion = substr($vboptions[templateversion], 0, 3); // Version 3.0 oder 3.5 if ($vbversion == '3.0') { require_once './includes/functions_bbcodeparse.php'; $parsed_comment = parse_bbcode($lboard['comment']); } else { require_once './includes/class_bbcode.php'; $bbcode_parser = &new vB_BbCodeParser($vbulletin, fetch_tag_list()); $parsed_comment = $bbcode_parser->parse($lboard['comment'], 0, 1); } $lboard['comment'] = $parsed_comment; if ($ibforums->lang[timeformat1] == 'de') { $std->time_options['LROW'] = "{$ibforums->lang['timeformat2']} \u\m {$ibforums->lang['timeformat3']}"; } else { $std->time_options['LROW'] = "{$ibforums->lang['timeformat2']} {$ibforums->lang['timeformat3']}"; } $formatteddate = $std->get_date($lboard['datescored'], 'LROW'); $usercell = ""; $usercell .= "{$lboard[name]}"; $datecell = $formatteddate; $scorecell = $this->arcade->do_arcade_format($lboard['score'], $ginfo['decpoints']); if ($lboard['timespent'] == 0) { $lboard['timespent'] = $ibforums->lang['n_a']; } else { $lboard['timespent'] = $this->arcade->thatdate($lboard['timespent']); } if ($this->arcade->settings['skin'] != 0) { if ($rowcol == 'alt1') { $rowcol = 'alt2'; } else { $rowcol = 'alt1'; } } $this->output .= $this->html->leaderrow($lboard, $ctr, $usercell, $datecell, $scorecell, $rowcol); ++$ctr; ++$intctr; ++$start_row; } $this->output .= $this->html->stop($this->arcade->links['pages']); $this->page_title = $ibforums->vars['board_name'].' -> '.$ibforums->lang['page_title'].' -> '.$ibforums->lang['arcade_scores']; $this->nav = array("{$ibforums->lang['page_title']}", "{$ibforums->lang['hscores_title']}"); } // ####################################### // new function for secure games (v32/v33) // ####################################### public function verify_score() { global $DB, $DEBUGMODE; list($usec, $sec) = explode(' ', microtime()); $gametime = ((float) $usec + (float) $sec); $randomchar = rand(1, 10); $randomchar2 = rand(1, 5); if ($this->arcade->user['arcade_access'] > 2) { // this is a guest $userinfo['arcade_session'] = intval($_COOKIE['guestsession']); } else { $userquery = $DB->query('SELECT * FROM ibf_user WHERE userid='.$this->arcade->user['id']); $userinfo = $DB->fetch_row($userquery); } if ($userinfo['arcade_session'] == '') { $ERRORLEVEL = ($DEBUGMODE == 0) ? '' : 'Error #021 - no session'; $std->Error(array(LEVEL => 1, MSG => 'cheater', EXTRA => $ERRORLEVEL)); } $DB->query("SELECT sessd FROM ibf_games_session WHERE sessid='".$userinfo['arcade_session']."'"); $s = $DB->fetch_row(); if (!$DB->get_num_rows()) { die(); } if ($s['sessd'] != 1) { $DB->query("UPDATE ibf_games_session SET randchar1 = '".$randomchar."' , randchar2 = '".$randomchar2."' , start = '".$gametime."' , sessd = 1 WHERE sessid = '".$userinfo['arcade_session']."'"); //sleep(1); // Do not unedit this unless your instructed to ! // Do not edit this line! echo "&randchar=$randomchar&randchar2=$randomchar2&savescore=1&blah=OK"; exit(); } } public function save_score() { // ### for new, secured ibPro-Games global $DB, $ibforums, $std, $DEBUGMODE, $FIXIE, $vboptions, $vbulletin, $NATIVEMODE; $tgame = 0; $player_ip = $ibforums->input['IP_ADDRESS']; $player_score = isset($ibforums->input['gscore']) ? $ibforums->input['gscore'] : 0; $gidencoded = isset($ibforums->input['arcadegid']) ? $ibforums->input['arcadegid'] : 0; $genscore = $ibforums->input['enscore']; $swfgname = $ibforums->input['gname']; $player_score_encode = $player_score; // ### protection for external scripts faking incoming gamedata // ### by MrZeropage // look who sends the POST-data... $referer = ''; if ($_SERVER['REFERER'] != '') { $referer = strtolower($_SERVER['REFERER']); } if ($_SERVER['HTTP_REFERER'] != '') { $referer = strtolower($_SERVER['HTTP_REFERER']); } if ($HTTP_SERVER_VARS['REFERER'] != '') { $referer = strtolower($HTTP_SERVER_VARS['REFERER']); } // avoid external scripts calling this function if ((strpos($referer, 'arcade.php') > 0) && (strpos($referer, $vboptions[bburl]) > 0)) { // maybe there is some cheater trying to inject a score ?! *boooooh* $VERBOSE = ($DEBUGMODE == 2) ? ' -> referrercheck | referer='.$referer : ''; $ERRORLEVEL = ($DEBUGMODE == 0) ? '' : 'Error #002'; $ERRORLEVEL = $ERRORLEVEL.$VERBOSE; $std->Error(array(LEVEL => 1, MSG => 'cheater', EXTRA => $ERRORLEVEL)); } // ### if ($this->arcade->user['arcade_access'] == 3) { // This is a Guest that won't record any score $player_score = 0; $good_score = 1; } if ($this->arcade->user['arcade_access'] > 2) { // this is a guest $userinfo['arcade_session'] = intval($_COOKIE['guestsession']); $userinfo['arcade_sess_start'] = $_COOKIE['gpstarted']; $userinfo['arcade_gtype'] = 0; // guests never play tourneys! $userinfo['arcade_sess_gid'] = intval($_COOKIE['gidstarted']); $player_name = $this->arcade->user['name']; } else { $userquery = $DB->query('SELECT * FROM ibf_user WHERE userid='.$this->arcade->user['id']); $userinfo = $DB->fetch_row($userquery); $player_name = $userinfo['username']; } $DB->query('SELECT * FROM ibf_games_list WHERE gid='.$userinfo['arcade_sess_gid']); $g = $DB->fetch_row(); // Kiss Cookies good bye! if (!isset($userinfo['arcade_gtype']) || $userinfo['arcade_gtype'] == '0') { $tgame = 0; $tid = 0; } else { $tgame = 1; $tid = $userinfo['arcade_gtype']; } if ($userinfo['arcade_session'] == '') { $ERRORLEVEL = ($DEBUGMODE == 0) ? '' : 'Error #022 - no session'; $std->Error(array(LEVEL => 1, MSG => 'cheater', EXTRA => $ERRORLEVEL)); } $DB->query("SELECT * FROM ibf_games_session WHERE sessid='".$userinfo['arcade_session']."' LIMIT 1"); $vs = $DB->fetch_row(); $gid = $vs['gameid']; $vbversion = substr($vboptions[templateversion], 0, 3); if (($vbversion != '3.0') && ($NATIVEMODE == 0)) { ($hook = vBulletinHook::fetch_hook('ibproarcade_savescore_readsessiondata')) ? eval($hook) : false; } if ((($vs['sessd'] != 1) && ($vs['sessid'] > 0)) && ($FIXIE == 1)) { // this score has NOT run through the verify() function! // actual issue using IE7 and doing more than one play per game // make it valid anyway ;) list($usec, $sec) = explode(' ', microtime()); $gametime = ((float) $usec + (float) $sec); $randomchar = rand(1, 10); $randomchar2 = rand(1, 5); $vs['sessd'] = 1; $vs['start'] = $gametime; $vs['randchar1'] = $randomchar; $vs['randchar2'] = $randomchar2; $genscore = $player_score * $vs['randchar1'] ^ $vs['randchar2']; } // for the new games... if ((file_exists(ROOT_PATH.'arcade/gamedata/'.$g['gname'].'/v32game.txt')) || (file_exists(ROOT_PATH.'arcade/gamedata/'.$g['gname'].'/v3game.txt'))) { $encoded_gid = $vs['gameid'] * $vs['randgid'] ^ $vs['randgid2']; if ($gidencoded == 0) { $gidencoded = $g['gid'] * $vs['randgid'] ^ $vs['randgid2']; } } $decodescore = $player_score * $vs['randchar1'] ^ $vs['randchar2']; list($usec, $sec) = explode(' ', microtime()); $time_end = ((float) $usec + (float) $sec); $timecheck = round($time_end - $vs['start'], 4); $DB->query('DELETE FROM ibf_games_session WHERE sessid='.$userinfo['arcade_session']); if (($vs['sessd'] != 1) || (!$vs['start']) || (!$vs['sessid'])) { $ERRORLEVEL = ($DEBUGMODE == 0) ? '' : 'Error #003'; $BROWSERDATA = ($_SERVER['HTTP_USER_AGENT'] != '') ? $_SERVER['HTTP_USER_AGENT'] : $HTTP_SERVER_VARS['HTTP_USER_AGENT']; $VERBOSE = ($DEBUGMODE == 2) ? ' -> sessd='.$vs['sessd'].' | start='.$vs['start'].' | sessid='.$vs['sessid'].'
userid='.$this->arcade->user['id'].' | ui[arcade_session]='.$userinfo['arcade_session'].' | ui[arcade_sess_gid]='.$userinfo['arcade_sess_gid'].'
FIXIE = '.$FIXIE.'

'.$BROWSERDATA : ''; $ERRORLEVEL = $ERRORLEVEL.$VERBOSE; $std->Error(array(LEVEL => 1, MSG => 'cheater', EXTRA => $ERRORLEVEL)); } if ($gid != $userinfo['arcade_sess_gid']) { // avoid cross-scoring... finally! *gg* $ERRORLEVEL = ($DEBUGMODE == 0) ? '' : 'Error #004'; $VERBOSE = ($DEBUGMODE == 2) ? ' -> gid='.$gid.' | ui[arcade_sess_gid]='.$userinfo['arcade_sess_gid'] : ''; $ERRORLEVEL = $ERRORLEVEL.$VERBOSE; $std->Error(array(LEVEL => 1, MSG => 'cheater', EXTRA => $ERRORLEVEL)); } $readtimeoutquery = $DB->query('SELECT scoretimeout FROM ibf_games_settings'); $readtimeout = $DB->fetch_row($readtimeoutquery); $SCORETIMEOUT = $readtimeout['scoretimeout']; if (!$timecheck || $timecheck > $SCORETIMEOUT) { $ERRORLEVEL = ($DEBUGMODE == 0) ? 'Transmission Timeout ('.$timecheck.' sec)' : 'Error #005'; $VERBOSE = ($DEBUGMODE == 2) ? ' -> timecheck='.$timecheck : ''; $ERRORLEVEL = $ERRORLEVEL.$VERBOSE; $std->Error(array(LEVEL => 1, MSG => 'cheater', EXTRA => $ERRORLEVEL)); } if ($genscore != $decodescore) { $ERRORLEVEL = ($DEBUGMODE == 0) ? '' : 'Error #006'; $VERBOSE = ($DEBUGMODE == 2) ? ' -> genscore='.$genscore.' | decodescore='.$decodescore.' | score='.$player_score : ''; $ERRORLEVEL = $ERRORLEVEL.$VERBOSE; $std->Error(array(LEVEL => 1, MSG => 'cheater', EXTRA => $ERRORLEVEL)); } if (file_exists(ROOT_PATH.'arcade/gamedata/'.$g['gname'].'/v32game.txt')) { if (($gidencoded != $encoded_gid) || ($swfgname != $g['gname'])) { $ERRORLEVEL = ($DEBUGMODE == 0) ? '' : 'Error #007'; $VERBOSE = ($DEBUGMODE == 2) ? ' -> gidenc='.$gidencoded.' | enc_gid='.$encoded_gid.' | swfgn='.$swfgname.' | g[gname]='.$g['gname'] : ''; $ERRORLEVEL = $ERRORLEVEL.$VERBOSE; $std->Error(array(LEVEL => 1, MSG => 'cheater', EXTRA => $ERRORLEVEL)); } } //Get's the timespent $timespent = 0; if ($userinfo['arcade_sess_start']) { $timespent = time() - $userinfo['arcade_sess_start']; } if ($timespent) { $DB->query("UPDATE ibf_games_list SET gtime=gtime+'".$timespent."', gtotalscore=gtotalscore+'".$player_score."' WHERE gid='".$gid."' LIMIT 1"); $DB->query("UPDATE ibf_members SET games_played=games_played+1, time_played=time_played+'".$timespent."' WHERE id=".$ibforums->member['id']); } // users sessiondata is no longer needed, so kick it to avoid any re-usage $DB->query("UPDATE ibf_members SET arcade_sess_gid='0', arcade_sess_start='0', arcade_gtype=0, arcade_session='0' WHERE id=".$this->arcade->user['id']); $this->storescore($this->arcade->user['id'], $player_score, $timespent, $gid, $tgame, $tid, 0); } public function post_score() { // ### for old, unsecured ibPro-Games // ### for v3arcade-Games // ### for pnFlashGames-Games global $ibforums, $DB, $std, $vboptions, $vbulletin, $DEBUGMODE, $NATIVEMODE; $tgame = 0; $player_ip = $ibforums->input['IP_ADDRESS']; $member_id = $this->arcade->user['id']; $player_name = $this->arcade->user['name']; $player_score = floatval($_POST['gscore']); $game_name = ibp_cleansql($_POST['gname']); $score = $ibforums->input['gscore']; $keepsess = $ibforums->input['keepsess']; // ### protection for external scripts faking incoming gamedata // ### by MrZeropage // look who sends the POST-data... $referer = ''; if ($_SERVER['REFERER'] != '') { $referer = strtolower($_SERVER['REFERER']); } if ($_SERVER['HTTP_REFERER'] != '') { $referer = strtolower($_SERVER['HTTP_REFERER']); } if ($HTTP_SERVER_VARS['REFERER'] != '') { $referer = strtolower($HTTP_SERVER_VARS['REFERER']); } // avoid external scripts calling this function if ((strpos($referer, 'arcade.php') > 0) && (strpos($referer, $vboptions[bburl]) > 0)) { // maybe there is some cheater trying to inject a score ?! *boooooh* $ERRORLEVEL = ($DEBUGMODE == 0) ? '' : 'Error #008'; $VERBOSE = ($DEBUGMODE == 2) ? ' -> REF = '.$referer : ''; $ERRORLEVEL = $ERRORLEVEL.$VERBOSE; $std->Error(array(LEVEL => 1, MSG => 'cheater', EXTRA => $ERRORLEVEL)); } // ### if ($this->arcade->user['arcade_access'] == 3) { // This is a Guest that won't record any score $player_score = 0; $good_score = 1; } if ($this->arcade->user['arcade_access'] > 2) { // GUEST $userinfo['arcade_session'] = $_COOKIE['guestsession']; $userinfo['arcade_sess_start'] = $_COOKIE['gpstarted']; $userinfo['arcade_gtype'] = 0; // guests never play tourneys! } else { $userquery = $DB->query('SELECT * FROM ibf_user WHERE userid='.$this->arcade->user['id']); $userinfo = $DB->fetch_row($userquery); } $getgameidquery = $DB->query("SELECT gid FROM ibf_games_list WHERE gname='".$game_name."'"); $getgameid = $DB->fetch_row($getgameidquery); $timespent = 0; if ($userinfo['arcade_sess_start']) { $timespent = time() - $userinfo['arcade_sess_start']; } if (strstr($score, ':') !== false) { $timestamp = strtotime($score); $formatedTime = strftime('%H:%M:%S', $timestamp); $hours = substr($formatedTime, 0, 2); $minutes = substr($formatedTime, 3, 2); $seconds = substr($formatedTime, 6, 2); $numSeconds = (($hours * 60) * 60) + ($minutes * 60) + $seconds; $score = $numSeconds; $ibforums->input['gscore'] = $score; } // Kiss Cookies good bye! if (!isset($userinfo['arcade_gtype']) || $userinfo['arcade_gtype'] == '0') { $tgame = 0; $tid = 0; } else { $tgame = 1; $tid = $userinfo['arcade_gtype']; } $DB->query("SELECT gid, highscore_type, game_type FROM ibf_games_list WHERE gname='".$game_name."' LIMIT 1"); $g = $DB->fetch_row(); if ($g['game_type'] == 1) { // this is a secure game which should not use POST_SCORE !! $ERRORLEVEL = ($DEBUGMODE == 0) ? '' : 'Error #009'; $std->Error(array(LEVEL => 1, MSG => 'cheater', EXTRA => $ERRORLEVEL)); } if ($userinfo['arcade_session'] == '') { $ERRORLEVEL = ($DEBUGMODE == 0) ? '' : 'Error #023 - no session'; $std->Error(array(LEVEL => 1, MSG => 'cheater', EXTRA => $ERRORLEVEL)); } $DB->query("SELECT * FROM ibf_games_session WHERE sessid='".$userinfo['arcade_session']."' LIMIT 1"); $vs = $DB->fetch_row(); $gid = $vs['gameid']; $vbversion = substr($vboptions[templateversion], 0, 3); if (($vbversion != '3.0') && ($NATIVEMODE == 0)) { ($hook = vBulletinHook::fetch_hook('ibproarcade_postscore_readsessiondata')) ? eval($hook) : false; } if ($keepsess != 1) { // remove session as all data is read from it... and this is NO PNfg $DB->query('DELETE FROM ibf_games_session WHERE sessid='.$userinfo['arcade_session']); } if ((!$vs['sessid'])) { $ERRORLEVEL = ($DEBUGMODE == 0) ? '' : 'Error #010'; $std->Error(array(LEVEL => 1, MSG => 'cheater', EXTRA => $ERRORLEVEL)); } // ######################################### // final fix for cross-scoring by MrZeropage // ######################################### // first we check if GameID stored in userinfo is the same of submitting Game if ($this->arcade->user['arcade_access'] < 3) { // make sure this is NOT a guest // compare userinfo and sessiondata if (($gid != $userinfo['arcade_sess_gid']) || ($gid != $g['gid']) || ($userinfo['userid'] != $vs['mid']) || ($vs['gname'] != $game_name)) { $ERRORLEVEL = ($DEBUGMODE == 0) ? '' : 'Error #011'; $VERBOSE = ($DEBUGMODE == 2) ? ' -> gid='.$gid.'|ui[a_sess_gid]='.$userinfo['arcade_sess_gid'].'|g[gid]='.$g['gid'].'|vs[mid]='.$vs['mid'].'|vs[gname]='.$vs['gname'].'|gamename='.$game_name : ''; $ERRORLEVEL = $ERRORLEVEL.$VERBOSE; $std->Error(array(LEVEL => 1, MSG => 'cheater', EXTRA => $ERRORLEVEL)); } // compare incoming gameid with the one stored in sessiondata if ($getgameid['gid'] != $gid) { $ERRORLEVEL = ($DEBUGMODE == 0) ? '' : 'Error #012'; $VERBOSE = ($DEBUGMODE == 2) ? ' -> gid='.$gid.'|getgameid='.$getgameid['gid'] : ''; $ERRORLEVEL = $ERRORLEVEL.$VERBOSE; $std->Error(array(LEVEL => 1, MSG => 'cheater', EXTRA => $ERRORLEVEL)); } } else { // this is a guest... if ($vs['mname'] != $_COOKIE['guesthash']) { $ERRORLEVEL = ($DEBUGMODE == 0) ? '' : 'Error #013'; $VERBOSE = ($DEBUGMODE == 2) ? ' -> vs[mname]='.$vs['mname'].'|guesthash='.$_COOKIE['guesthash'] : ''; $ERRORLEVEL = $ERRORLEVEL.$VERBOSE; $std->Error(array(LEVEL => 1, MSG => 'cheater', EXTRA => $ERRORLEVEL)); } // cleanup cookiestuff from guest $_COOKIE['guesthash'] = ''; $_COOKIE['guestsession'] = ''; } if ($keepsess != 1) { // users sessiondata is no longer needed, so kick it to avoid any re-usage $DB->query("UPDATE ibf_members SET arcade_sess_gid='0', arcade_sess_start='0', arcade_gtype=0, arcade_session='0' WHERE id=".$this->arcade->user['id']); } // ######################################### if ($timespent < 86400) { $DB->query("UPDATE ibf_games_list SET gtime=gtime+'".$timespent."', gtotalscore=gtotalscore+'".$player_score."' WHERE gid='".$gid."' LIMIT 1"); if (($ibforums->member['id'] > 0) && ($this->arcade->user['arcade_access'] == 2 || $this->arcade->user['arcade_access'] == 4)) { $DB->query("UPDATE ibf_members SET games_played=games_played+1, time_played=time_played+'".$timespent."' WHERE id=".$ibforums->member['id']); } } $this->storescore($this->arcade->user['id'], $player_score, $timespent, $gid, $tgame, $tid, $keepsess); } public function storescore($userid, $player_score, $timespent, $gid, $tgame, $tid, $keepsess) { // ############################################################## // common handling of scores coming from any game (by MrZeropage) // ############################################################## global $DB, $std, $vbulletin, $vboptions, $ibforums, $LOGIPS, $NATIVEMODE; $gid = intval($gid); $tid = intval($tid); $userid = intval($userid); $keepsess = intval($keepsess); $player_score = floatval($player_score); $timespent = ibp_cleansql($timespent); $server = strtolower($_SERVER['HTTP_REFERER']); $referer = strpos($server, 'arcade.php'); // for guests playing and calling games directly (without arcade.php) we have to re-check cookies if (($_COOKIE['ibPAcookiecheck'] != 'yesss') && ($_COOKIE['guesthash']) > 0) { $VERBOSE = ($DEBUGMODE == 2) ? ' cookie #003 -> ghash='.$_COOKIE['guesthash'].' | ibPAcheck='.$_COOKIE['ibPAcookiecheck'].' | referer='.$_SERVER['HTTP_REFERER'] : ''; $std->Error(array(LEVEL => 1, MSG => 'cat_pass_notice', EXTRA => $VERBOSE)); } $gamequery = $DB->query("SELECT highscore_type FROM ibf_games_list WHERE gid='".$gid."' LIMIT 1"); $g = $DB->fetch_row($gamequery); $ordering = ($g['highscore_type'] == 'high') ? 'DESC' : 'ASC'; $player_name = $this->arcade->user['name']; $member_id = $userid; $player_ip = ($LOGIPS == 0) ? '' : $ibforums->input['IP_ADDRESS']; // get this user's best result in that game $scorequery = $DB->query('SELECT score, timespent FROM ibf_games_scores WHERE gid='.$gid.' AND mid='.$this->arcade->user['id'].' ORDER BY score '.$ordering.' LIMIT 0, 1'); if ($DB->get_num_rows($scorequery)) { $userscore = $DB->fetch_row($scorequery); $score = $userscore['score']; $usertime = $userscore['timespent']; $name_found = 1; } else { $score = 0; $usertime = 0; $name_found = 0; } if ($tgame == 0) { $std->time_options['LROW'] = 'G:i'; $max_scores_shown = $this->arcade->settings['scores_amount']; $DB->query('SELECT g.gid,g.gname,g.gtitle,g.gwords,g.gcat,g.highscore_type,g.decpoints,g.cost,g.jackpot,g.jackpot_type,g.g_rating,g.g_raters,c.* FROM ibf_games_list AS g, ibf_games_champs AS c WHERE (g.gid = c.champ_gid) AND gid='.$gid); if ($DB->get_num_rows()) { $ginfo = $DB->fetch_row(); $ginfo['champ_score'] = $this->arcade->do_arcade_format($ginfo['champ_score'], $ginfo['decpoints']); if (!empty($ginfo['champ_mid'])) { $DB->query('SELECT avatar,avatar_size AS size FROM ibf_members WHERE id='.$ginfo['champ_mid']); $avatar = $DB->fetch_row(); $ginfo['avatarcode'] = $std->get_avatar($avatar, 1, $avatar['size']); } } else { $DB->query('SELECT * FROM ibf_games_list WHERE gid='.$gid); $ginfo = $DB->fetch_row(); } $ginfo['avatarcode'] = (empty($ginfo['avatarcode'])) ? "" : $ginfo['avatarcode']; $DB->query('SELECT champ_score AS score, champ_time AS time, champ_name AS name, champ_mid AS mid, champ_gtitle FROM ibf_games_champs WHERE champ_gid='.$gid); if ($DB->get_num_rows()) { $champ = $DB->fetch_row(); //xxxxx if (($player_score != 0) && ((($player_score > $champ['score'] && $ginfo['highscore_type'] == 'high') || ($player_score < $champ['score'] && $ginfo['highscore_type'] == 'low')) || (($player_score == $champ['score']) && (($timespent < $champ['time']) || ($champ['time'] == 0))))) { $vbversion = substr($vboptions[templateversion], 0, 3); if (($vbversion != '3.0') && ($NATIVEMODE == 0)) { ($hook = vBulletinHook::fetch_hook('ibproarcade_new_champ')) ? eval($hook) : false; } $db_string = $DB->compile_db_update_string(array('champ_gid' => $gid, 'champ_gtitle' => $ginfo['gtitle'], 'champ_mid' => $this->arcade->user['id'], 'champ_name' => $this->arcade->user['name'], 'champ_date' => time(), 'champ_score' => $player_score, 'champ_time' => $timespent, )); // update Avatarinfo for HTML-Output $DB->query('SELECT avatar,avatar_size AS size FROM ibf_members WHERE id='.$this->arcade->user['id']); $avatar = $DB->fetch_row(); $ginfo['avatarcode'] = $std->get_avatar($avatar, 1, $avatar['size']); $ginfo['avatarcode'] = (empty($ginfo['avatarcode'])) ? "" : $ginfo['avatarcode']; if ($player_score != 0) { // PM-Notification on new highscore by MrZeropage :-) $senderid = $this->arcade->user['id']; $sendername = $this->arcade->user['name']; $recipient = $champ['mid']; $vbversion = substr($vboptions[templateversion], 0, 3); // Version 3.0 oder 3.5 if ($vbversion == '3.0') { $forumlink = $vboptions['bburl'].'/'; } else { $forumlink = $vbulletin->options['bburl'].'/'; } $title = $ibforums->lang['pmnote_title']; $mailtitle = $ibforums->lang['mailnote_title']; $message = $this->arcade->settings['msgsys_hscore_text']; $mailmessage = $this->arcade->settings['msgsys_hscore_text']; $message = preg_replace('/%NAME%/', $champ['name'], $message); $message = preg_replace('/%GAME%/', $ginfo['gtitle'], $message); $message = preg_replace('/%CHAMP%/', $this->arcade->user['name'], $message); $message = preg_replace("#%LINKGAME\|(.*?)%#", "[url='".$forumlink.'arcade.php?do=play&gameid='.$gid."']$1[/url]", $message); $message = preg_replace("#%LINKHIGH\|(.*?)%#", "[url='".$forumlink.'arcade.php?do=stats&gameid='.$gid."']$1[/url]", $message); $mailmessage = preg_replace('/%NAME%/', $champ['name'], $mailmessage); $mailmessage = preg_replace('/%GAME%/', $ginfo['gtitle'], $mailmessage); $mailmessage = preg_replace('/%CHAMP%/', $this->arcade->user['name'], $mailmessage); $mailmessage = preg_replace("#%LINKGAME\|(.*?)%#", "$1", $mailmessage); $mailmessage = preg_replace("#%LINKHIGH\|(.*?)%#", "$1", $mailmessage); $mailmessage = strip_bbcode($mailmessage, true); $mailmessage = preg_replace('/<\/?[a-z][a-z0-9]*[^<>]*>/i', '', $mailmessage); if (($senderid != $recipient) && ($this->arcade->settings['msgsys_hscore'] == 1)) { // does the recipient want to receive any Notifications from the Arcade ? $DB->query("SELECT arcade_pmactive, email FROM ibf_user WHERE userid=$recipient"); $recip = $DB->fetch_row(); // check for possible Guest-Player if ($guestplayerid == $recipient) { $recip['arcade_pmactive'] = 0; } if (($recip['arcade_pmactive'] == 1) && ($this->arcade->settings['msgsys_hscore'] == 1)) { // Notification via PM if (($this->arcade->settings['notification'] == 'pm') || ($this->arcade->settings['notification'] == 'pm+mail')) { $DB->query("INSERT INTO ibf_pmtext (fromuserid, fromusername, title, message, touserarray, iconid, dateline, showsignature, allowsmilie) VALUES ('".$senderid."', '".addslashes($sendername)."', '".addslashes($title)."', '".addslashes($message)."', '".addslashes(serialize(array($recipient)))."', 0, ".TIMENOW.', 0, 0)'); $pmid = $DB->get_insert_id(); $DB->query("UPDATE ibf_user SET pmtotal=pmtotal+1, pmunread=pmunread+1 WHERE userid=$recipient"); $DB->query("INSERT INTO ibf_pm (pmtextid, userid, folderid, messageread) VALUES ('$pmid', '$recipient', '0', '0')"); } // Notification via eMail if (($this->arcade->settings['notification'] == 'mail') || ($this->arcade->settings['notification'] == 'pm+mail')) { vbmail($recip['email'], $mailtitle, $mailmessage); } } } // finally update Highscore-Table if (($this->arcade->user['id'] != 0) && ($player_score != 0)) { $DB->query('UPDATE ibf_games_champs SET '.$db_string.' WHERE champ_gid='.$gid); $ginfo['champ_mid'] = $this->arcade->user['id']; $ginfo['champ_name'] = $this->arcade->user['name']; $ginfo['champ_score'] = $player_score; // 100 vcash for high score of all time $DB->query("UPDATE juventuz_user SET ucash=ucash+100 WHERE userid=$userid"); // 100 vcash for high score of all time } } } } else { $db_string = $DB->compile_db_insert_string(array('champ_gid' => $gid, 'champ_gtitle' => $ginfo['gtitle'], 'champ_mid' => $this->arcade->user['id'], 'champ_name' => $this->arcade->user['name'], 'champ_date' => time(), 'champ_score' => $player_score, 'champ_time' => $timespent, )); if ($player_score != 0) { // no champ with no result ... $DB->query('INSERT INTO ibf_games_champs ('.$db_string['FIELD_NAMES'].') VALUES ('.$db_string['FIELD_VALUES'].')'); $ginfo['champ_mid'] = $this->arcade->user['id']; $ginfo['champ_name'] = $this->arcade->user['name']; $ginfo['champ_score'] = $player_score; } } // best result of all time? by MrZeropage if ($player_score != 0) { $DB->query('SELECT gid, bestmid, bestscore, besttime, highscore_type FROM ibf_games_list WHERE gid='.$gid); if ($DB->get_num_rows()) { // check if existing best result ever is lower $best = $DB->fetch_row(); if (($best['bestscore'] < $player_score && $best['highscore_type'] == 'high') || ($best['bestscore'] > $player_score && $best['highscore_type'] == 'low') || (intval($best['bestscore']) == 0) || ($best['bestscore'] == '') || (($best['bestscore'] == $player_score) && (($best['besttime'] == 0) || ($best['besttime'] > $timespent)))) { $userid = $this->arcade->user['id']; // 1000 vcash for best high score of all time $DB->query("UPDATE juventuz_user SET ucash=ucash+1000 WHERE userid=$userid"); // 1000 vcash for best high score of all time $DB->query('UPDATE ibf_games_list SET bestmid='.$userid.', bestscore='.$player_score.", besttime='".$timespent."' WHERE gid=$gid"); } } } // end of b.r.o.a.t. if (isset($player_score) && is_numeric($player_score) && isset($player_name)) { //Has this name played already? $gtime = time(); $highsid = array(); $highsid['s_id'] = 0; if ($this->arcade->settings['score_type'] == 'top' || empty($this->arcade->settings['score_type'])) { if ($name_found == 1) { // if name already exists, and score is good enough, update it if ((($player_score > $score) && $ginfo['highscore_type'] == 'high') || (($player_score < $score && $ginfo['highscore_type'] == 'low') && $score != 0) || (($player_score == $score) && ($timespent < $usertime))) { $db_string = $DB->compile_db_update_string(array('score' => $player_score, 'datescored' => $gtime, 'ip' => $player_ip, 'timespent' => $timespent, )); $DB->query('UPDATE ibf_games_scores SET '.$db_string.' WHERE mid='.$member_id.' AND gid='.$gid); $good_score = 1; $DB->query('SELECT s_id FROM ibf_games_scores WHERE score='.$player_score.' AND datescored='.$gtime.' AND gid='.$gid.' AND mid='.$member_id.' ORDER BY s_id DESC LIMIT 0, 1'); $highsid = $DB->fetch_row(); } } else { $good_score = 1; //Insert new name, score and ip if ($good_score == 1) { $db_string = $DB->compile_db_insert_string(array('mid' => $member_id, 'gid' => $gid, 'name' => $player_name, 'score' => $player_score, 'ip' => $player_ip, 'timespent' => $timespent, 'datescored' => $gtime, 'comment' => '', )); $DB->query('INSERT INTO ibf_games_scores ('.$db_string['FIELD_NAMES'].') VALUES ('.$db_string['FIELD_VALUES'].')'); //$getsid = $DB->get_insert_id(); //$highsid['s_id']=$getsid; $DB->query('SELECT s_id FROM ibf_games_scores WHERE score='.$player_score.' AND datescored='.$gtime.' AND gid='.$gid.' AND mid='.$member_id.' ORDER BY s_id DESC LIMIT 0, 1'); $highsid = $DB->fetch_row(); } } } else { $good_score = 1; $db_string = $DB->compile_db_insert_string(array('mid' => $member_id, 'gid' => $gid, 'name' => $player_name, 'score' => $player_score, 'ip' => $player_ip, 'timespent' => $timespent, 'datescored' => $gtime, 'comment' => '', )); $DB->query('INSERT INTO ibf_games_scores ('.$db_string['FIELD_NAMES'].') VALUES ('.$db_string['FIELD_VALUES'].')'); //$highsid = $DB->get_insert_id(); //$highsid['s_id']=$getsid; $DB->query('SELECT s_id FROM ibf_games_scores ORDER BY s_id DESC LIMIT 0, 1'); $highsid = $DB->fetch_row(); } } if ($keepsess != 1) { // favorites-link $temp = unserialize($this->arcade->user['favs']); if (!is_array($temp)) { $temp = array(); } $favs = $temp; $favtitle = $ibforums->lang['add_to_faves']; $favtitle = preg_replace('/<% GAMENAME %>/i', $game['gtitle'], $favtitle); $star = ''; if (in_array($ginfo['gid'], $favs)) { //$star = "".$ibforums->lang[ "; $favtitle = $ibforums->lang['remove_from_faves']; $favtitle = preg_replace('/<% GAMENAME %>/i', $ginfo['gtitle'], $favtitle); } if ($this->arcade->user['arcade_access'] == 2 && $this->arcade->user['id']) { $ginfo['fave'] = "$favtitle"; } // make the link fit everything ;) $ginfo['backlink'] = $ibforums->lang['arcade_home']; if ($this->arcade->settings['use_cats']) { $ginfo['backlink'] = $ibforums->lang['showothersincat']; } $this->arcade->make_links($ginfo['gid'], $ginfo['gtitle']); $this->output .= $this->html->leaderstart($ginfo, $this->arcade->links); $yscore[1] = $player_name; $yscore[2] = $this->arcade->do_arcade_format($player_score, $ginfo['decpoints']); $yscore[3] = $std->get_date($gtime, 'LROW'); $yscore[4] = $gid; $yscore[5] = $good_score; $yscore[6] = $this->arcade->thatdate($timespent); $ordering = ($ginfo['highscore_type'] == 'high') ? 'DESC' : 'ASC'; // set all League-Scores for this Game to default, as they get recalculated next $leaguearray = explode(',', $this->arcade->settings['league_scores']); $DB->query("UPDATE ibf_games_league SET points='".$leaguearray[10]."', position='0' WHERE gid=".$gid); // calculate which scores should show up on page $s_query = $DB->query('SELECT COUNT(*) AS counter FROM ibf_games_scores WHERE gid='.$gid); $s_all = $DB->fetch_row($s_query); $s_all = $s_all['counter']; $s_limit = $this->arcade->settings['scores_amount']; $lookctr = 1; $s_pos = 0; $lookupquery = $DB->query('SELECT s_id, mid, name, score FROM ibf_games_scores WHERE gid='.$gid.' ORDER BY score '.$ordering.',timespent ASC'); while ($lookup = $DB->fetch_row($lookupquery)) { if ((($highsid['s_id'] != 0) && ($lookup['s_id'] == $highsid['s_id'])) || (($highsid['s_id'] == '0') && ($lookup['name'] == $player_name))) { $s_pos = $lookctr; } ++$lookctr; } if (($s_pos / $s_limit) == (floor($s_pos / $s_limit))) { $startpage = (floor($s_pos / $s_limit) * $s_limit) - $s_limit; } else { $startpage = floor($s_pos / $s_limit) * $s_limit; } $endpage = $startpage + $s_limit + 1; $startpage = $startpage; if ($endpage > $s_all) { $endpage = $s_all; } if ($startpage < 0) { $startpage = 0; } if ($endpage <= $startpage) { $endpage = $startpage + 1; } // setup LIMIT which should be at least 11 to make sure all Top10 get leaguepoints if ($endpage < 11) { $limitquery = 'LIMIT 11'; } else { $limitquery = 'LIMIT '.$endpage; } $this_query = $DB->query('SELECT * FROM ibf_games_scores WHERE gid='.$gid.' ORDER BY score '.$ordering.',timespent ASC '.$limitquery); $ctr = 1; $rowcol = 'alt2'; while ($lboard = $DB->fetch_row($this_query)) { // parse the comment $vbversion = substr($vboptions[templateversion], 0, 3); // Version 3.0 oder 3.5 if ($vbversion == '3.0') { require_once './includes/functions_bbcodeparse.php'; $parsed_comment = parse_bbcode($lboard['comment']); } else { require_once './includes/class_bbcode.php'; $bbcode_parser = &new vB_BbCodeParser($vbulletin, fetch_tag_list()); $parsed_comment = $bbcode_parser->parse($lboard['comment'], 0, 1); } $lboard['comment'] = $parsed_comment; if ($ibforums->lang[timeformat1] == 'de') { $std->time_options['LROW'] = "{$ibforums->lang['timeformat2']} \u\m {$ibforums->lang['timeformat3']}"; } else { $std->time_options['LROW'] = "{$ibforums->lang['timeformat2']} {$ibforums->lang['timeformat3']}"; } $formatteddate = $std->get_date($lboard['datescored'], 'LROW'); $usercell = ""; $usercell .= "{$lboard[name]}"; $datecell = $formatteddate; $scorecell = $this->arcade->do_arcade_format($lboard['score'], $ginfo['decpoints']); if ($lboard['timespent'] == 0) { $lboard['timespent'] = $ibforums->lang['n_a']; } else { $lboard['timespent'] = $this->arcade->thatdate($lboard['timespent']); } if ($this->arcade->settings['skin'] != 0) { if ($rowcol == 'alt1') { $rowcol = 'alt2'; } else { $rowcol = 'alt1'; } } // only display scorelines that match the page needed if (($ctr > $startpage) && ($ctr < ($endpage + 1))) { if ($ctr != $s_pos) { $this->output .= $this->html->leaderrow($lboard, $ctr, $usercell, $datecell, $scorecell, $rowcol); } else { if ($this->arcade->user['arcade_access'] == 3) { $yscore[5] = 0; } if (($ctr == 1 && $s_pos == 1) && ($yscore[5] == 1)) { $usercell = " ".$usercell." "; } $commentcell = $lboard['comment']; if ($yscore[5] == 1) { $commentcell = '
\n"; $commentcell .= "  \n"; $commentcell .= '\n"; if ($this->arcade->settings['score_type'] == 'all') { $commentcell .= ""; } $commentcell .= '
'; } $data['comment'] = $commentcell; $data['timespent'] = $yscore[6]; $vbversion = substr($vboptions[templateversion], 0, 3); if (($vbversion != '3.0') && ($NATIVEMODE == 0)) { ($hook = vBulletinHook::fetch_hook('ibproarcade_play_game_finished')) ? eval($hook) : false; } $this->output .= $this->html->leaderrow($data, ''.$ctr.'', ''.$usercell.'', $datecell, $scorecell, 'alt1'); } } switch ($ctr) { case 1: $points = $leaguearray[0]; break; case 2: $points = $leaguearray[1]; break; case 3: $points = $leaguearray[2]; break; case 4: $points = $leaguearray[3]; break; case 5: $points = $leaguearray[4]; break; case 6: $points = $leaguearray[5]; break; case 7: $points = $leaguearray[6]; break; case 8: $points = $leaguearray[7]; break; case 9: $points = $leaguearray[8]; break; case 10: $points = $leaguearray[9]; break; default: $points = $leaguearray[10]; } // ***** LEAGUE finally fixed by MrZeropage :) ***** if (($ctr < 11) && ($points != $leaguearray[10])) { // check if that player already has an entry for that game $DB->query('SELECT gid, mid, lid FROM ibf_games_league WHERE gid='.$gid.' AND mid='.$lboard['mid'].' AND position=0'); if ($DB->get_num_rows()) { // already in league, so just update the entry $onerow = $DB->fetch_row(); $db_string = $DB->compile_db_update_string(array( 'mid' => $lboard['mid'], 'gid' => $gid, 'position' => $ctr, 'points' => $points, 'cat' => $ginfo['gcat'], )); $DB->query('UPDATE ibf_games_league SET '.$db_string.' WHERE gid='.$gid.' AND mid='.$lboard['mid'].' AND lid='.$onerow['lid']); } else { // new entry in league $db_string = $DB->compile_db_insert_string(array( 'mid' => $lboard['mid'], 'gid' => $gid, 'position' => $ctr, 'points' => $points, 'cat' => $ginfo['gcat'], )); $DB->query('INSERT INTO ibf_games_league ('.$db_string['FIELD_NAMES'].') VALUES ('.$db_string['FIELD_VALUES'].')'); } } // ***** end of League ***** ++$ctr; } $this->output .= $this->html->stop($this->arcade->links['pages']); if ($yscore[5] != 1) { // show information if score is not stored because of main settings if ($this->arcade->user['arcade_access'] == 3) { $this->output .= "
".$ibforums->lang['not_recorded_guest'].'

'; } else { $this->output .= "
".$ibforums->lang['not_recorded'].'

'; } } $this->output .= "
".$ibforums->lang['play_again'].'

'; $rating = ''; $rating = $ibforums->lang['rating']; $raters = unserialize($ginfo['g_raters']); if (isset($raters[$this->arcade->user['id']]) || $this->arcade->user['id'] == 0) { // no output for rating (guestplayer or already rated this game) } else { if (empty($ginfo['g_raters'])) { $rating .= $ibforums->lang['no_votes']; } else { $amount = count($raters).$ibforums->lang['rates']; for ($a = 1; $a <= $ginfo['g_rating']; ++$a) { $rating .= "".$amount.""; } $leftover = (5 - $ginfo['g_rating']); for ($a = 1; $a <= $leftover; ++$a) { $rating .= "".$amount.""; } } $this->output .= "
".$rating.'
'; $this->output .= "base_url}act=Arcade&do=rate&gid={$gid}&scored=1','comment_edit','height=150,width=400'); return false;\">{$ibforums->lang['rate_game']}


"; } $this->page_title = $ibforums->vars['board_name'].' -> '.$ibforums->lang['page_title'].' -> '.$ibforums->lang['hscores_title']; $this->nav = array("{$ibforums->lang['page_title']}", "{$ibforums->lang['hscores_title']}"); } else { // PNfg! This means we have to update the league now... $leaguearray = explode(',', $this->arcade->settings['league_scores']); $DB->query("UPDATE ibf_games_league SET points='".$leaguearray[10]."', position='0' WHERE gid=".$gid); $game_query = $DB->query('SELECT * FROM ibf_games_list WHERE gid='.$gid); $ginfo = $DB->fetch_row($game_query); $ordering = ($ginfo['highscore_type'] == 'high') ? 'DESC' : 'ASC'; $ctr = 1; $this_query = $DB->query("SELECT mid FROM ibf_games_scores WHERE gid='".$gid."' ORDER BY score ".$ordering.', timespent ASC LIMIT 0,10'); if ($DB->get_num_rows($this_query)) { while ($lboard = $DB->fetch_row($this_query)) { switch ($ctr) { case 1: $points = $leaguearray[0]; break; case 2: $points = $leaguearray[1]; break; case 3: $points = $leaguearray[2]; break; case 4: $points = $leaguearray[3]; break; case 5: $points = $leaguearray[4]; break; case 6: $points = $leaguearray[5]; break; case 7: $points = $leaguearray[6]; break; case 8: $points = $leaguearray[7]; break; case 9: $points = $leaguearray[8]; break; case 10: $points = $leaguearray[9]; break; default: $points = $leaguearray[10]; } if ($points > 0) { extract($ginfo); $mid = $this->arcade->user['id']; // check if that player already has an entry for that game $DB->query('SELECT gid, mid, lid FROM ibf_games_league WHERE gid='.$gid.' AND mid='.$mid.' AND position=0'); if ($DB->get_num_rows()) { // already in league, so just update the entry $onerow = $DB->fetch_row(); $db_string = $DB->compile_db_update_string(array( 'mid' => $mid, 'gid' => $gid, 'position' => $ctr, 'points' => $points, 'cat' => $ginfo['gcat'], )); $DB->query('UPDATE ibf_games_league SET '.$db_string.' WHERE gid='.$gid.' AND mid='.$mid.' AND lid='.$onerow['lid']); } else { // new entry in league $db_string = $DB->compile_db_insert_string(array( 'mid' => $mid, 'gid' => $gid, 'position' => $ctr, 'points' => $points, 'cat' => $ginfo['gcat'], )); $DB->query('INSERT INTO ibf_games_league ('.$db_string['FIELD_NAMES'].') VALUES ('.$db_string['FIELD_VALUES'].')'); } } ++$ctr; } } } } elseif ($tgame == 1) { $tid = intval($_COOKIE['tidstarted']); $tquery = $DB->query("SELECT nbtries,cost,numplayers,gid FROM ibf_tournaments WHERE tid = '".$tid."' LIMIT 1"); $row = $DB->fetch_row($tquery); $nbtries = $row['nbtries']; $jackpot = $row['cost'] * $row['numplayers']; // get Game-Settings $gamequery = $DB->query('SELECT gid, bestmid, bestscore, besttime, highscore_type, gtitle FROM ibf_games_list WHERE gid='.$row['gid']); $gameinfo = $DB->fetch_row($gamequery); $scoretype = $gameinfo['highscore_type']; // best result of all time? by MrZeropage if ($player_score != 0) { // check if existing best result ever is lower if ((($gameinfo['bestscore'] < $player_score) && $scoretype == 'high') || (($gameinfo['bestscore'] > $player_score) && $scoretype == 'low') || (empty($gameinfo['bestscore'])) || (($gameinfo['bestscore'] == $player_score) && (($gameinfo['besttime'] == 0) || ($gameinfo['besttime'] > $timespent)))) { $userid = $this->arcade->user['id']; $DB->query('UPDATE ibf_games_list SET bestmid='.$userid.", bestscore='".$player_score."', besttime='".$timespent."' WHERE gid=".$gid); } } // Check to see if this faceoff in this rung has been played. $tourneyquery = $DB->query('SELECT rung,rungscore,timeplayed,faceoff,timesplayed FROM ibf_tournament_players WHERE mid='.$this->arcade->user['id'].' AND tid='.$tid.' ORDER BY rung DESC'); $ctr = 0; while ($row = $DB->fetch_row($tourneyquery)) { if ($row['timesplayed'] <= $nbtries) { ++$ctr; } $savearray[0] = $row['rung']; $savearray[1] = $row['rungscore']; $savearray[2] = $row['timeplayed']; $savearray[3] = $row['faceoff']; $savearray[4] = $this->arcade->user['id']; $savearray[5] = $tid; $savearray[6] = $row['timesplayed']; } if ($ctr > 0) { $thisscore = $player_score; if ((($thisscore > $savearray[1]) && $scoretype == 'high') || (($thisscore > 0 && $savearray[1] == 0) && $scoretype == 'low') || (($thisscore < $savearray[1]) && $scoretype == 'low') && ($thisscore != 0)) { // Save new game score in that spot $DB->query('UPDATE ibf_tournament_players SET rungscore='.$player_score.", timeplayed='".time()."', notified=0 WHERE mid=".$this->arcade->user['id'].' AND tid='.$tid.' AND rung='.$savearray[0]); $savearray[1] = $thisscore; } else { $DB->query("UPDATE ibf_tournament_players SET timeplayed='".time()."', notified=0 WHERE mid=".$this->arcade->user['id'].' AND tid='.$tid.' AND rung='.$savearray[0]); } } else { $this->view_tourney($tid); return; } // see if the opponent has played yet $DB->query('SELECT * FROM ibf_tournament_players WHERE tid='.$tid.' AND rung='.$savearray[0]." AND faceoff='".$savearray[3]."' AND mid <> '".$savearray[4]."' LIMIT 0, 1"); $opponentinfo = $DB->fetch_row(); $advancetourney = 0; if ($opponentinfo['timesplayed'] < $nbtries || $savearray[6] < $nbtries) { // check if the result could be clear before all Games are played // opponent is finished ? if ($opponentinfo['timesplayed'] == $nbtries) { if (($savearray[1] > $opponentinfo['rungscore'] && $scoretype == 'high') || ($savearray[1] < $opponentinfo['rungscore'] && $savearray[1] > 0 && $scoretype == 'low')) { // just beaten your opponent, so advance to next round :) $advancetourney = 1; $savearray[6] = $nbtries; } } // player himself is finished ? if ($savearray[6] == $nbtries) { if (($savearray[1] < $opponentinfo['rungscore'] && $scoretype == 'high') || ($savearray[1] > $opponentinfo['rungscore'] && $opponentinfo['rungscore'] > 0 && $scoretype == 'low')) { // player did not reach opponent, so advance to next round :) $advancetourney = 1; $opponentinfo['timesplayed'] = $nbtries; } } } else { $advancetourney = 1; } if ($advancetourney == 1) { if ($savearray[3] == 1 || $savearray[3] == 2) { $nextfaceoff = 1; } else { $nextfaceoff = 2; } if (($savearray[0] == 1) && ($opponentinfo['rungscore'] != $savearray[1])) { if (($opponentinfo['rungscore'] >= $savearray[1] && $scoretype == 'high') || ($opponentinfo['rungscore'] < $savearray[1] && $opponentinfo['rungscore'] > 0 && $scoretype == 'low')) { $winner = $opponentinfo['mid']; $loser = $savearray[4]; } else { $winner = $savearray[4]; $loser = $opponentinfo['mid']; } $DB->query("SELECT name,id FROM ibf_members WHERE id='".$winner."' LIMIT 1"); $name = $DB->fetch_row(); $DB->query("UPDATE ibf_tournaments SET champion='".ibp_cleansql($name['name'])."' WHERE tid=".$tid); $DB->query("UPDATE ibf_tournament_players_statut SET statut='1' WHERE tid='".$tid."' AND mid='".$loser."'"); $DB->query("UPDATE ibf_tournament_players_statut SET statut='3' WHERE tid='".$tid."' AND mid='".$winner."'"); // Notification to winner by MrZeropage :-) if ($this->arcade->settings['msgsys_twin'] == 1) { $senderid = $this->arcade->user['id']; $sendername = $this->arcade->user['name']; $recipient = $winner; $vbversion = substr($vboptions[templateversion], 0, 3); // Version 3.0 oder 3.5 if ($vbversion == '3.0') { $forumlink = $vboptions['bburl'].'/'; } else { $forumlink = $vbulletin->options['bburl'].'/'; } $title = $ibforums->lang['pmnote_winner']; $mailtitle = $ibforums->lang['pmnote_winner']; $message = $this->arcade->settings['msgsys_twin_text']; $mailmessage = $this->arcade->settings['msgsys_twin_text']; $message = preg_replace('/%NAME%/', $name['name'], $message); $message = preg_replace('/%GAME%/', $gameinfo['gtitle'], $message); $message = preg_replace("#%LINK\|(.*?)%#", "[url='".$forumlink.'arcade.php?do=viewtourney&tid='.$tid."']$1[/url]", $message); $mailmessage = preg_replace('/%NAME%/', $name['name'], $mailmessage); $mailmessage = preg_replace('/%GAME%/', $gameinfo['gtitle'], $mailmessage); $mailmessage = preg_replace("#%LINK\|(.*?)%#", "$1", $mailmessage); $mailmessage = strip_bbcode($mailmessage, true); $mailmessage = preg_replace('/<\/?[a-z][a-z0-9]*[^<>]*>/i', '', $mailmessage); // does the recipient want to receive any Notifications from the Arcade ? $DB->query("SELECT arcade_pmactive, email FROM ibf_user WHERE userid=$recipient"); $recip = $DB->fetch_row(); // check for possible Guest-Player if ($guestplayerid == $recipient) { $recip['arcade_pmactive'] = 0; } if ($recip['arcade_pmactive'] == 1) { // Notification via PM if (($this->arcade->settings['notification'] == 'pm') || ($this->arcade->settings['notification'] == 'pm+mail')) { $DB->query("INSERT INTO ibf_pmtext (fromuserid, fromusername, title, message, touserarray, iconid, dateline, showsignature, allowsmilie) VALUES ('".$senderid."', '".addslashes($sendername)."', '".addslashes($title)."', '".addslashes($message)."', '".addslashes(serialize(array($recipient)))."', 0, ".TIMENOW.', 0, 0)'); $pmid = $DB->get_insert_id(); $DB->query("UPDATE ibf_user SET pmtotal=pmtotal+1, pmunread=pmunread+1 WHERE userid=$recipient"); $DB->query("INSERT INTO ibf_pm (pmtextid, userid, folderid, messageread) VALUES ('$pmid', '$recipient', '0', '0')"); } // Notification via eMail if (($this->arcade->settings['notification'] == 'mail') || ($this->arcade->settings['notification'] == 'pm+mail')) { vbmail($recip['email'], $mailtitle, $mailmessage); } } } $vbversion = substr($vboptions[templateversion], 0, 3); if (($vbversion != '3.0') && ($NATIVEMODE == 0)) { ($hook = vBulletinHook::fetch_hook('ibproarcade_tourney_won')) ? eval($hook) : false; } $this->view_tourney($tid); return; } $timenow = time(); if ($opponentinfo['rungscore'] == $savearray[1]) { // both opponents finally have same result, so give both one more try $DB->query("UPDATE ibf_tournament_players SET timesplayed=timesplayed-1, timeplayed='".$timenow."', notified=0 WHERE tid='".$tid."' AND mid='".$opponentinfo['mid']."' AND rung='".$opponentinfo['rung']."'"); $DB->query("UPDATE ibf_tournament_players SET timesplayed=timesplayed-1, timeplayed='".$timenow."', notified=0 WHERE tid='".$tid."' AND mid='".$savearray['4']."' AND rung='".$savearray[0]."'"); } else { if (($opponentinfo['rungscore'] > $savearray[1] && $scoretype == 'high') || ($opponentinfo['rungscore'] < $savearray[1] && $scoretype == 'low')) { // opponent has won $db_string = $DB->compile_db_insert_string(array('mid' => $opponentinfo['mid'], 'tid' => $tid, 'rung' => ($opponentinfo['rung'] - 1), 'rungscore' => 0, 'faceoff' => $nextfaceoff, 'timeplayed' => $timenow, 'timesplayed' => 0, 'notified' => 0, )); $DB->query('INSERT INTO ibf_tournament_players ('.$db_string['FIELD_NAMES'].') VALUES ('.$db_string['FIELD_VALUES'].')'); $DB->query("UPDATE ibf_tournament_players_statut SET statut='1' WHERE tid='".$tid."' AND mid='".$savearray[4]."'"); // check if there is an opponent (to set back his timer) $check = $DB->query('SELECT mid FROM ibf_tournament_players WHERE tid='.$tid.' AND faceoff='.$nextfaceoff.' AND rung='.($opponentinfo['rung'] - 1).' AND mid<>'.$opponentinfo['mid']); if ($row = $DB->fetch_row($check)) { $DB->query("UPDATE ibf_tournament_players SET timeplayed='".$timenow."', notified=0 WHERE tid=".$tid.' AND faceoff='.$nextfaceoff.' AND rung='.($opponentinfo['rung'] - 1).' AND mid='.$row['mid']); } // fill up tries in old rung $DB->query('UPDATE ibf_tournament_players SET timesplayed='.$nbtries.', notified=1 WHERE tid='.$tid.' AND rung='.$opponentinfo['rung'].' AND mid='.$opponentinfo['mid']); // set data for notifications $winnerid = $opponentinfo['mid']; $loserid = $this->arcade->user['id']; } else { // player has won $db_string = $DB->compile_db_insert_string(array('mid' => $savearray[4], 'tid' => $savearray[5], 'rung' => ($savearray[0] - 1), 'rungscore' => 0, 'faceoff' => $nextfaceoff, 'timeplayed' => $timenow, 'timesplayed' => 0, 'notified' => 0, )); $DB->query('INSERT INTO ibf_tournament_players ('.$db_string['FIELD_NAMES'].') VALUES ('.$db_string['FIELD_VALUES'].')'); $DB->query("UPDATE ibf_tournament_players_statut SET statut='1' WHERE tid='".$tid."' AND mid='".$opponentinfo['mid']."'"); // check if there is an opponent (to set back his timer) $check = $DB->query('SELECT mid FROM ibf_tournament_players WHERE tid='.$savearray[5].' AND faceoff='.$nextfaceoff.' AND rung='.($savearray[0] - 1).' AND mid<>'.$savearray[4]); if ($row = $DB->fetch_row($check)) { $DB->query("UPDATE ibf_tournament_players SET timeplayed='".$timenow."', notified=0 WHERE tid=".$savearray[5].' AND faceoff='.$nextfaceoff.' AND rung='.($savearray[0] - 1).' AND mid='.$row['mid']); } // fill up tries in old rung $DB->query('UPDATE ibf_tournament_players SET timesplayed='.$nbtries.', notified=1 WHERE tid='.$savearray[5].' AND rung='.$savearray[0].' AND mid='.$savearray[4]); // set data for notifications $loserid = $opponentinfo['mid']; $winnerid = $this->arcade->user['id']; $tid = $savearray[5]; } // Notifications by MrZeropage $senderid = $this->arcade->user['id']; $sendername = $this->arcade->user['name']; if ($senderid == $winnerid) { $winnername = $sendername; $getnamequery = $DB->query('SELECT username FROM ibf_user WHERE userid='.$loserid); $getname = $DB->fetch_row($getnamequery); $losername = $getname['username']; } else { $losername = $sendername; $getnamequery = $DB->query('SELECT username FROM ibf_user WHERE userid='.$winnerid); $getname = $DB->fetch_row($getnamequery); $winnername = $getname['username']; } $vbversion = substr($vboptions[templateversion], 0, 3); // Version 3.0 oder 3.5 if ($vbversion == '3.0') { $forumlink = $vboptions['bburl'].'/'; } else { $forumlink = $vbulletin->options['bburl'].'/'; } $title = $ibforums->lang['pmnote_elim']; $mailtitle = $ibforums->lang['pmnote_elim']; $message = $this->arcade->settings['msgsys_telim_text']; $mailmessage = $this->arcade->settings['msgsys_telim_text']; $message = preg_replace('/%NAME%/', $losername, $message); $message = preg_replace('/%OTHER%/', $winnername, $message); $message = preg_replace('/%GAME%/', $gameinfo['gtitle'], $message); $message = preg_replace("#%LINK\|(.*?)%#", "[url='".$forumlink.'arcade.php?do=viewtourney&tid='.$tid."']$1[/url]", $message); $mailmessage = preg_replace('/%NAME%/', $losername, $mailmessage); $mailmessage = preg_replace('/%OTHER%/', $winnername, $mailmessage); $mailmessage = preg_replace('/%GAME%/', $gameinfo['gtitle'], $mailmessage); $mailmessage = preg_replace("#%LINK\|(.*?)%#", "$1", $mailmessage); $mailmessage = strip_bbcode($mailmessage, true); $mailmessage = preg_replace('/<\/?[a-z][a-z0-9]*[^<>]*>/i', '', $mailmessage); $recipient = $loserid; // does the recipient want to receive any Notifications from the Arcade ? $DB->query("SELECT arcade_pmactive, email FROM ibf_user WHERE userid=$recipient"); $recip = $DB->fetch_row(); // check for possible Guest-Player if ($guestplayerid == $recipient) { $recip['arcade_pmactive'] = 0; } if (($recip['arcade_pmactive'] == 1) && ($this->arcade->settings['msgsys_telim'] == 1)) { // Notification via PM if (($this->arcade->settings['notification'] == 'pm') || ($this->arcade->settings['notification'] == 'pm+mail')) { $DB->query("INSERT INTO ibf_pmtext (fromuserid, fromusername, title, message, touserarray, iconid, dateline, showsignature, allowsmilie) VALUES ('".$senderid."', '".addslashes($sendername)."', '".addslashes($title)."', '".addslashes($message)."', '".addslashes(serialize(array($recipient)))."', 0, ".TIMENOW.', 0, 0)'); $pmid = $DB->get_insert_id(); $DB->query("UPDATE ibf_user SET pmtotal=pmtotal+1, pmunread=pmunread+1 WHERE userid=$recipient"); $DB->query("INSERT INTO ibf_pm (pmtextid, userid, folderid, messageread) VALUES ('$pmid', '$recipient', '0', '0')"); } // Notification via eMail if (($this->arcade->settings['notification'] == 'mail') || ($this->arcade->settings['notification'] == 'pm+mail')) { vbmail($recip['email'], $mailtitle, $mailmessage); } } // and now to the winner of the match... $title = $ibforums->lang['pmnote_adv']; $mailtitle = $ibforums->lang['pmnote_adv']; $message = $this->arcade->settings['msgsys_tadvance_text']; $mailmessage = $this->arcade->settings['msgsys_tadvance_text']; $message = preg_replace('/%NAME%/', $winnername, $message); $message = preg_replace('/%OTHER%/', $losername, $message); $message = preg_replace('/%GAME%/', $gameinfo['gtitle'], $message); $message = preg_replace("#%LINK\|(.*?)%#", "[url='".$forumlink.'arcade.php?do=viewtourney&tid='.$tid."']$1[/url]", $message); $mailmessage = preg_replace('/%NAME%/', $winnername, $mailmessage); $mailmessage = preg_replace('/%OTHER%/', $losername, $mailmessage); $mailmessage = preg_replace('/%GAME%/', $gameinfo['gtitle'], $mailmessage); $mailmessage = preg_replace("#%LINK\|(.*?)%#", "$1", $mailmessage); $mailmessage = strip_bbcode($mailmessage, true); $mailmessage = preg_replace('/<\/?[a-z][a-z0-9]*[^<>]*>/i', '', $mailmessage); $recipient = $winnerid; // does the recipient want to receive any Notifications from the Arcade ? $DB->query("SELECT arcade_pmactive, email FROM ibf_user WHERE userid=$recipient"); $recip = $DB->fetch_row(); // check for possible Guest-Player if ($guestplayerid == $recipient) { $recip['arcade_pmactive'] = 0; } if (($recip['arcade_pmactive'] == 1) && ($this->arcade->settings['msgsys_tadvance'] == 1)) { // Notification via PM if (($this->arcade->settings['notification'] == 'pm') || ($this->arcade->settings['notification'] == 'pm+mail')) { $DB->query("INSERT INTO ibf_pmtext (fromuserid, fromusername, title, message, touserarray, iconid, dateline, showsignature, allowsmilie) VALUES ('".$senderid."', '".addslashes($sendername)."', '".addslashes($title)."', '".addslashes($message)."', '".addslashes(serialize(array($recipient)))."', 0, ".TIMENOW.', 0, 0)'); $pmid = $DB->get_insert_id(); $DB->query("UPDATE ibf_user SET pmtotal=pmtotal+1, pmunread=pmunread+1 WHERE userid=$recipient"); $DB->query("INSERT INTO ibf_pm (pmtextid, userid, folderid, messageread) VALUES ('$pmid', '$recipient', '0', '0')"); } // Notification via eMail if (($this->arcade->settings['notification'] == 'mail') || ($this->arcade->settings['notification'] == 'pm+mail')) { vbmail($recip['email'], $mailtitle, $mailmessage); } } } if ($keepsess == 1) { // tournament-game, so change gametype to normal game after first result $DB->query("UPDATE ibf_members SET arcade_gtype='0' WHERE id=".$this->arcade->user['id']); } else { $this->view_tourney($tid); } } else { if ($keepsess == 1) { // tournament-game, so change gametype to normal game after first result $DB->query("UPDATE ibf_members SET arcade_gtype='0' WHERE id=".$this->arcade->user['id']); } else { $this->view_tourney($tid); } } } } public function rate() { global $ibforums, $DB, $print; $gid = intval($ibforums->input['gid']); $pagereload = $ibforums->input['scored']; $raters = array(); $DB->query('SELECT g_raters FROM ibf_games_list WHERE gid='.$gid); $temp = $DB->fetch_row(); $temp = unserialize($temp['g_raters']); if (!is_array($temp)) { $temp = array(); } $raters = $temp; $id = $this->arcade->user['id']; if (isset($raters[$id]) || $id == 0) { $msg = ($id) ? $ibforums->lang['rated_allready'] : $ibforums->lang['guest_rate']; $html = $this->html->rating_general($msg, $pagereload); $html .= $this->html->copyright($this->version, $ibforums->lang['timeformat1'], $this->BFL); $print->pop_up_window("{$ibforums->lang['rate_title']}", $html); exit(); } if (!isset($ibforums->input['rating'])) { $DB->query('SELECT gid, gtitle FROM ibf_games_list WHERE gid='.$gid); $game = $DB->fetch_row(); $html .= $this->html->rating($game, $pagereload); $html .= $this->html->copyright($this->version, $ibforums->lang['timeformat1'], $this->BFL); $print->pop_up_window("{$ibforums->lang['rate_title']}", $html); exit(); } else { $new_amount = count($raters) + 1; $total_rate = 0; foreach ($raters as $user => $rate) { $total_rate += $rate; } $total_rate += $ibforums->input['rating']; $new_rate = floor($total_rate / $new_amount); if ($new_rate > 5) { $new_rate = 5; } if ($new_rate < 1) { $new_rate = 1; } $raters[$id] = $ibforums->input['rating']; $new_raters = serialize($raters); $db_string = $DB->compile_db_update_string(array('g_rating' => $new_rate, 'g_raters' => $new_raters, )); $DB->query('UPDATE ibf_games_list SET '.$db_string.' WHERE gid='.$gid); $html = $this->html->rating_general($ibforums->lang['thanks_rating'], $pagereload); $html .= $this->html->copyright($this->version, $ibforums->lang['timeformat1'], $this->BFL); $print->pop_up_window("{$ibforums->lang['rate_title']}", $html); exit(); } } public function facteur($jour, $mois, $annee) { global $ibforums, $DB, $std, $GROUP; $b = 365 * $annee; $c = 31 * ($mois - 1); if (($mois == 1) || ($mois == 2)) { $d = 0; $e = intval(($annee - 1) / 4); $h = intval(0.75 * (intval(($annee - 1) / 100) + 1)); } else { $d = intval(0.4 * $mois + 2.3); $e = intval($annee / 4); $h = intval(0.75 * (intval($annee / 100) + 1)); } $result = $jour + $b + $c - $d + $e - $h; return $result; } public function diff_dates($time) { $diff = time() - $time; $daysDiff = floor($diff / 60 / 60 / 24); return $daysDiff; } // Function to view the terminated tourneys public function view_tourney_end() { global $ibforums, $DB, $std, $GROUP; $std->time_options['ARCADE'] = $ibforums->lang['timeformat4']; $this->output = $this->html->finished_tournament_listing($tourneyinfo); $DB->query("SELECT t.numplayers,t.datestarted,t.tid,g.gtitle,t.champion, t.url_discut FROM ibf_tournaments as t, ibf_games_list as g WHERE t.champion <> '' AND t.gid = g.gid ORDER BY datestarted DESC"); while ($row = $DB->fetch_row()) { $row['link'] = "".$ibforums->lang['see_this_tourney'].''; $row['datestarted'] = $std->get_date($row['datestarted'], 'ARCADE'); $this->output .= $this->html->tournament_row($row); } $this->output .= $this->html->stop(' ', ' '); $this->page_title = $ibforums->vars['board_name'].' -> '.$ibforums->lang['page_title'].' -> '.$ibforums->lang['tournament_view']; $this->nav = array("{$ibforums->lang['page_title']}", $ibforums->lang['tournament_view']); } public function create_tourney() { global $ibforums, $DB, $std, $GROUP, $vbulletin, $vboptions, $guestplayerid, $NATIVEMODE; // is this a guest? if ($ibforums->member['id'] == 0) { $std->Error(array('LEVEL' => 1, 'MSG' => 'no_tourney_group')); } // check users private permissions first $DB->query('SELECT create_tourney AS tourney FROM ibf_user WHERE userid='.$ibforums->member['id']); $userperm = $DB->fetch_row(); // check if player is allowed to create a tournament through all primary and secondary usergroups $cancreate = 0; $DB->query('SELECT m.usergroupid, m.membergroupids FROM ibf_members AS m LEFT JOIN ibf_groups AS g ON (m.mgroup=g.g_id) WHERE m.id='.$ibforums->member['id']); $userdata = $DB->fetch_row(); $groups = array(); $groups[] = $userdata['usergroupid']; if ($userdata['membergroupids'] != '') { $groups = array_merge($groups, explode(',', $userdata['membergroupids'])); } $groupstring = implode(',', $groups); $DB->query('SELECT tourney FROM ibf_groups WHERE g_id IN ('.$groupstring.')'); while ($check = $DB->fetch_row()) { if ($check['tourney'] == 1) { $cancreate = 1; } } unset($groups); unset($check); unset($userdata); $DB->query('SELECT g.tourney AS tourney, u.is_arcade_mod AS is_mod, g.g_access_cp AS is_admin FROM ibf_members AS u LEFT JOIN ibf_groups AS g ON (u.mgroup=g.g_id) WHERE userid='.$ibforums->member['id'].' LIMIT 0,1'); $groupperm = $DB->fetch_row(); if (!$groupperm['is_mod'] && !$groupperm['is_admin']) { // Admins and Arcade-Mod do always have permission to create Tourneys if (!$cancreate) { $std->Error(array('LEVEL' => 1, 'MSG' => 'no_tourney_group')); } if (!$userperm['tourney']) { $std->Error(array('LEVEL' => 1, 'MSG' => 'no_tourney_user')); } } if ($guestplayerid == $ibforums->member['id']) { $std->Error(array('LEVEL' => 1, 'MSG' => 'no_tourney_group')); } // Looking for the game list $form = ''; $cat = ''; $catquery = ''; if ($this->arcade->settings['use_cats'] == 1) { $catquery = 'cat.pos, cat.c_id, '; } $DB->query(" SELECT g.*, cat.password, cat.cat_name FROM ibf_games_list AS g, ibf_games_cats AS cat WHERE g.active = 1 AND g.tourney_use = 1 AND g.gcat=cat.c_id AND trim(password)='' ORDER BY ".$catquery.'gtitle'); while ($GAME = $DB->fetch_row()) { if ($GAME['cat_name'] != $cat && $this->arcade->settings['use_cats'] == 1) { if (preg_match('/optgroup/i', $form)) { $form .= ''; } $form .= ""; $cat = $GAME['cat_name']; } $form .= "'; } $extra = ''; // detect vBplaza if (($vbulletin->options['vbbux_enabled'] == 1) && ($vbulletin->options['vbbux_arcadeintegration'] == 1)) { $extra = " {$ibforums->lang['costs_tourney']} "; } $vbversion = substr($vboptions[templateversion], 0, 3); if (($vbversion != '3.0') && ($NATIVEMODE == 0)) { ($hook = vBulletinHook::fetch_hook('ibproarcade_create_tourney')) ? eval($hook) : false; } $this->output .= $this->html->create_tourney($form, $extra); $this->page_title = $ibforums->vars['board_name'].' -> '.$ibforums->lang['page_title'].' -> '.$ibforums->lang['tournament_view']; $this->nav = array("{$ibforums->lang['page_title']}", $ibforums->lang['tournament_view']); } public function do_create_tourney() { global $ibforums, $DB, $std, $GROUP, $bbuserinfo, $print, $vboptions, $vbulletin, $NATIVEMODE; // We aren't a guest... are we? if ($ibforums->member['id'] == '' || $ibforums->member['id'] == '0') { $std->Error(array('LEVEL' => 1, 'MSG' => 'no_guests')); } $vbversion = substr($vboptions[templateversion], 0, 3); if (($vbversion != '3.0') && ($NATIVEMODE == 0)) { ($hook = vBulletinHook::fetch_hook('ibproarcade_do_create_tourney_start')) ? eval($hook) : false; } $nbjoueurs = $ibforums->input['nbjoueurs']; $nbtries = $ibforums->input['nbtries']; $game = intval($ibforums->input['the_game']); $costs = intval($ibforums->input['tourney_costs']); $DB->query("SELECT gtitle from ibf_games_list WHERE gid='".$game."' LIMIT 1"); $GAME = $DB->fetch_row(); $gtitle = $GAME['gtitle']; $db_string = $DB->compile_db_insert_string(array('gid' => $game, 'numplayers' => $nbjoueurs, 'datestarted' => time(), 'demare' => 0, 'creat' => $this->arcade->user['name'], 'plibre' => $nbjoueurs - 1, 'nbtries' => $nbtries, 'cost' => $costs, 'champion' => '', 'url_discut' => '', )); $DB->query('INSERT INTO ibf_tournaments ('.$db_string['FIELD_NAMES'].') VALUES ('.$db_string['FIELD_VALUES'].')'); $tid = $DB->get_insert_id(); $nbjoueurs = $nbjoueurs + 1; $rung = ceil($nbjoueurs / 3); $cpt = 1; while ($cpt < $nbjoueurs) { $faceoff = ceil($cpt / 2); $db_string = $DB->compile_db_insert_string(array('mid' => 0, 'tid' => $tid, 'rung' => $rung, 'rungscore' => 0, 'faceoff' => $faceoff, 'timeplayed' => time(), ase_url'].'do=viewtourney&tid='.$tid); } public function register_tourney($tid) { global $ibforums, $DB, $std, $GROUP, $print, $vboptions, $vbulletin, $guestplayerid, $NATIVEMODE; // We aren't a guest... are we? if ($ibforums->member['id'] == '' || $ibforums->member['id'] == '0' || $guestplayerid == $ibforums->member['id']) { $std->Error(array('LEVEL' => 1, 'MSG' => 'no_guests')); } // check if player is allowed to play the Arcade through all primary and secondary usergroups $playok = 0; $DB->query('SELECT g.arcade_access, m.usergroupid, m.membergroupids FROM ibf_members AS m LEFT JOIN ibf_groups AS g ON (m.mgroup=g.g_id) WHERE m.id='.$ibforums->member['id']); $userdata = $DB->fetch_row(); $groups = array(); $groups[] = $userdata['usergroupid']; if ($userdata['membergroupids'] != '') { $groups = array_merge($groups, explode(',', $userdata['membergroupids'])); } aments WHERE tid = '".$tid."' LIMIT 1"); $row = $DB->fetch_row(); if ($row['demare'] == 1) { $std->Error(array('LEVEL' => 1, 'MSG' => 't_deja_dem')); } $vbversion = substr($vboptions[templateversion], 0, 3); if (($vbversion != '3.0') && ($NATIVEMODE == 0)) { ($hook = vBulletinHook::fetch_hook('ibproarcade_register_tourney_start')) ? eval($hook) : false; } $DB->query("SELECT gtitle from ibf_games_list WHERE gid='".$row['gid']."' LIMIT 1"); $GAME = $DB->fetch_row(); $gtitle = $GAME['gtitle']; $nbjoueurs = $row['numplayers']; $rung = ceil($nbjoueurs / 3); $gid = $row['gid']; $creat = $row['creat']; $ctr = 0; $liste = ''; $DB->query("SELECT * FROM ibf_tournament_players WHERE tid='".$tid."' ORDER BY faceoff ASC"); while ($row = $DB->fetch_row()) { if ($ctr == 0) { $ctr = 1; } else { $ctr = 0; ted='".$datestarted."',demare = '1', plibre='0' WHERE tid='".$tid."'"); if ($this->arcade->settings['msgsys_tstart'] == 1) { // send notification-message to all participants that the tourney starts right now $DB->query("SELECT gtitle from ibf_games_list WHERE gid='".$gid."' LIMIT 1"); $title = $DB->fetch_row(); $gamename = $title['gtitle']; $sendername = 'Arcade System Message'; global $vbulletin, $vboptions; $vbversion = substr($vboptions[templateversion], 0, 3); // Version 3.0 oder 3.5 if ($vbversion == '3.0') { $forumlink = $vboptions['bburl'].'/'; } else { $forumlink = $vbulletin->options['bburl'].'/'; } $callusers = $DB->query("SELECT mid FROM ibf_tournament_players WHERE tid='".$tid."'"); while ($row = $DB->fetch_row($callusers)) { $recipient = $row['mid']; // does the recipient want to receive any Notifications from the Arcade ? $DB->query('SELECT arcade_pmactive, email, username FROM ibf_user WHERE userid='.$recipient); $recip = $DB->fetch_row(); $recipientname = $recip['username']; $title = $gamename.' '.$ibforums->lang['pm_tourney_full']; $mailtitle = $gamename.' '.$ibforums->lang['pm_tourney_full']; $message = $this->arcade->settings['msgsys_tstart_text']; $mailmessage = $this->arcade->settings['msgsys_tstart_text']; $message = preg_replace('/%NAME%/', $recipientname, $message); $message = preg_replace('/%GAME%/', $gamename, $message); $message = preg_replace("#%LINK\|(.*?)%#", "[url='".$forumlink.'arcade.php?do=viewtourney&tid='.$tid."']$1[/url]", $message); $mailmessage = preg_replace('/%NAME%/', $recipientname, $mailmessage); $mailmessage = preg_replace('/%GAME%/', $gamename, $mailmessage); $mailmessage = preg_replace("#%LINK\|(.*?)%#", "$1", $mailmessage); $mailmessage = strip_bbcode($mailmessage, true); $mailmessage = preg_replace('/<\/?[a-z][a-z0-9]*[^<>]*>/i', '', $mailmessage); if ($guestplayerid == $recipient) { $recip['arcade_pmactive'] = 0; } if ($recip['arcade_pmactive'] == 1) { // Notification via PM if (($this->arcade->settings['notification'] == 'pm') || ($this->arcade->settings['notification'] == 'pm+mail')) { $DB->query("INSERT INTO ibf_pmtext (fromuserid, fromusername, title, message, touserarray, iconid, dateline, showsignature, allowsmilie) VALUES ('".$recipient."', '".$sendername."', '".$title."', '".addslashes($message)."', '".addslashes(serialize(array($recipient)))."', 0, ".TIMENOW.', 0, 0)'); $pmid = $DB->get_insert_id(); $DB->query("UPDATE ibf_user SET pmtotal=pmtotal+1, pmunread=pmunread+1 WHERE userid=$recipient"); $DB->query("INSERT INTO ibf_pm (pmtextid, userid, folderid, messageread) VALUES ('$pmid', '$recipient', '0', '0')"); } // Notification via eMail if (($this->arcade->settings['notification'] == 'mail') || ($this->arcade->settings['notification'] == 'pm+mail')) { vbmail($recip['email'], $mailtitle, $mailmessage); } } } } } $DB->query("UPDATE ibf_tournaments SET plibre=plibre-1 WHERE tid='".$tid."'"); if ($FIXSTYLE == 1) { echo ' '; // some forums need this... } $print->redirect_screen($ibforums->lang['tourney_reg_ok'], $ibforums->vars['base_url'].'do=viewtourney&tid='.$tid); } public function corige_tournoi($tid, $rung, $faceoff) { global $ibforums, $DB, $std, $GROUP, $print; $tid = intval($tid); $rung = intval($rung); $faceoff = intval($faceoff); $DB->query("SELECT * FROM ibf_tournaments WHERE tid='$tid'"); $infot = $DB->fetch_row(); $DB->query("SELECT * from ibf_games_list WHERE gid='".$infot['gid']."' LIMIT 1"); $infog = $DB->fetch_row(); $cpt = 0; // Recherche des infos sur les 2 joueurs $DB->query("SELECT * FROM ibf_tournament_players WHERE tid='$tid' AND rung='$rung' AND faceoff='$faceoff'"); while ($row = $DB->fetch_row()) { $infoj[$cpt] = $row; ++$cpt; } $nbtries = $infot['nbtries']; if ($infoj[0]['timesplayed'] < $nbtries || $infoj[1]['timesplayed'] < $nbtries) { echo $ibforu 'timeplayed' => time(), 'timesplayed' => 0, 'notified' => 0, )); $DB->query('INSERT INTO ibf_tournament_players ('.$db_string['FIELD_NAMES'].') VALUES ('.$db_string['FIELD_VALUES'].')'); $loser = $infoj[1]['mid']; } else { $db_string = $DB->compile_db_insert_string(array('mid' => $infoj[1]['mid'], 'tid' => $tid, 'rung' => ($rung - 1), 'rungscore' => 0, 'faceoff' => $nextfaceoff, 'timeplayed' => time(), 'timesplayed' => 0, 'notified' => 0, )); $DB->query('INSERT INTO ibf_tournament_players ('.$db_string['FIELD_NAMES'].') VALUES ('.$db_string['FIELD_VALUES'].')'); $loser = $infoj[0]['mid']; // check if there is an opponent (to set back his timer) $check = $DB->query('SELECT mid FROM ibf_tournament_players WHERE tid='.$tid.' AND faceoff='.$nextfaceoff.' AND rung='.($rung - 1).' AND mid<>'.$infoj[1]['mid']); if ($row = $DB->fetch_row($check)) { $DB->query("UPDATE ibf_tournament_players SET timeplayed='".time()."', notified=0 WHERE tid=".$tid.' AND faceoff='.$nextfaceoff.' AND rung='.($rung - 1).' AND mid='.$row['mid']); } } else { $db_string = $DB->compile_db_insert_string(array('mid' => $infoj[0]['mid'], 'tid' => $tid, 'rung' => ($rung - 1), 'rungscore' => 0, 'faceoff' => $nextfaceoff, 'timeplayed' => time(), 'timesplayed' => 0, 'notified' => 0, )); $DB->query('INSERT INTO ibf_tournament_players ('.$db_string['FIELD_NAMES'].') VALUES ('.$db_string['FIELD_VALUES'].')'); $loser = $infoj[1]['mid']; // check if there is an opponent (to set back his timer) $check = $DB->query('SELECT mid FROM ibf_tournament_players WHERE tid='.$tid.' AND faceoff='.$nextfaceoff.' AND rung='.($rung - 1).' AND mid<>'.$infoj[0]['mid']); if ($row = $DB->fetch_row($check)) { $DB->query("UPDATE ibf_tournament_e) { if (get_magic_quotes_gpc()) { $value = stripslashes($value); } //check if this function exists if (function_exists('mysql_real_escape_string')) { $value = mysql_real_escape_string($value); } //for PHP version < 4.3.0 use addslashes else { $value = addslashes($value); } return $value; } function ibp_cleanhtml($value) { if ($value != strip_tags($value)) { // seems to be HTML in the text... $search = array('@]*?>.*?@si', // Strip out javascript '@]*?>.*?@siU', // Strip style tags properly '@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags '@@' // Strip multi-line comments including CDATA ); $value = preg_replace($search, '', $value); $value = strip_tags($value); } return $value; } function clean_key($key) { if ($key == '') { return ''; } $key = preg_replace("/\.\./", '', $key); $key = preg_replace("/\_\_(.+?)\_\_/", '', $key); $key = preg_replace("/^([\w\.\-\_]+)$/", '$1', $key); return $key; } function clean_value($val) { if ($val == '') { return ''; } $val = str_replace(' ', ' ', $val); if ($ibforums->vars['strip_space_chr']) { $val = str_replace(chr(0xCA), '', $val); //Remove sneaky spaces } $val = str_replace('&', '&', $val); $val = str_replace('', '-->', $val); $val = preg_replace('/