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 {
var $member = array();
var $input = array();
var $session_id = "";
var $base_url = "";
var $vars = "";
var $skin_id = "0";
var $skin_rid = "";
var $lang_id = "en";
var $skin = "";
var $lang = "";
var $server_load = 0;
var $version = "v1.3 Final";
var $lastclick = "";
var $location = "";
var $debug_html = "";
var $perm_id = "";
var $forum_read = array();
var $topic_cache = "";
var $session_type = "";
function info() {
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
{
var $output = "";
var $html = "";
var $page_title = "";
var $nav = array();
var $parser = "";
var $arcade = array();
var $version = "2.7.0+";
var $updatecheck = "http://www.vbulletin-arcade.com/ibpaversion.inc"; // do not change this !!
function Arcade()
{
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']);
$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
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
print "&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
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
print "&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);
print "&opSuccess=true&endvar=1";
}
// Load the users last saved game
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']));
}
print "&opSuccess=true&gameData=$gameData&endvar=1";
}
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;
}
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
//
//------------------------------------------
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 .= "
";
}
$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
//
//-----------------------------------
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 .= " ";
$this->output .= " ";
$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'] );
}
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
//
//------------------------------------------
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']} ";
}
//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] = " ";
}
$Cpt++;
}
if (!$Highscorechamp['ArcadeChampion1']) $Highscorechamp['ArcadeChampion1'] = "{$ibforums->lang['top3box_norank']}";
if (!$Highscorechamp['ArcadeChampion2']) $Highscorechamp['ArcadeChampion2'] = "{$ibforums->lang['top3box_norank']}";
if (!$Highscorechamp['ArcadeChampion3']) $Highscorechamp['ArcadeChampion3'] = "{$ibforums->lang['top3box_norank']}";
// Smilies für Top3 definieren
$Highscorechamp['ArcadeChampionSmily1'] = " lang['top3info1']}\" />";
$Highscorechamp['ArcadeChampionSmily2'] = " lang['top3info2']}\" />";
$Highscorechamp['ArcadeChampionSmily3'] = " lang['top3info3']}\" />";
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 = "base_url."act=Arcade&cat=".$the_cat['c_id']."\">".$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'] = "base_url."act=Arcade&module=league&lcat=".$cat."\">".$tourneyinfo['catchamp']." ".$ibforums->lang['category_champion']." ";
else
$tourneyinfo['catchamp'] = "base_url."act=Arcade&module=league&lcat=".$cat."\">".$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 = "base_url."act=Arcade&module=report&user=".$row['mid']."\">";
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 .= ' ';
}
$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'] .= " ";
$newgame = " ";
}
//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 = " ";
$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 .= " ";
}
$leftover = (5-$the_game['g_rating']);
for( $a = 1 ; $a <= $leftover ; $a++ )
{
$rating .= " ";
}
}
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
//
//------------------------------------------
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 = " ";
$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( "base_url."act=Arcade&cat=".$game['gcat']."\">{$ibforums->lang['page_title']} ", $game['gtitle'] );
}
//------------------------------------------
// Play_Game In Popup Window v1.0
//
// This will allow users to play game in new window
//
//------------------------------------------
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
//
//------------------------------------------
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
//
//----------------------------------------
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'] = ibp_cleansql($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 = " ";
$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)
// #######################################
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();
}
}
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);
}
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);
}
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();
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;
}
}
}
}
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'];
$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 = " ";
$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 = "";
}
$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 .= " ";
$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 .= " ";
}
$leftover = (5-$ginfo['g_rating']);
for( $a = 1 ; $a <= $leftover ; $a++ )
{
$rating .= " ";
}
}
$this->output .= " ";
}
$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);
}
}
}
}
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']);
$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']);
$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']);
$print->pop_up_window("{$ibforums->lang['rate_title']}",$html);
exit();
}
}
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;
}
function diff_dates($time)
{
$diff = time() - $time;
$daysDiff = floor($diff/60/60/24);
return $daysDiff;
}
// Function to view the terminated tourneys
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'] );
}
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 .= "".$GAME['gtitle']." ";
}
$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'] );
}
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(),
'timesplayed' => 0,
'notified' => 0,
) );
$DB->query("INSERT INTO ibf_tournament_players
(" .$db_string['FIELD_NAMES']. ") VALUES
(". $db_string['FIELD_VALUES'] .")");
$cpt = $cpt + 1;
}
// Insertion du membre créateur du tournoi dans ce tournoi (au hasard)
$nbjoueurs = $nbjoueurs - 1;
$hasard = rand(1,$nbjoueurs);
$faceoff = ceil($hasard/2);
$DB->query("UPDATE ibf_tournament_players SET mid='".$ibforums->member['id']."' WHERE rung='".$rung."' AND tid='".$tid."' AND faceoff='".$faceoff."' LIMIT 1");
// Création statut pour ce tournoi (0 = Ok, actif)
$db_string = $DB->compile_db_insert_string( array ( 'tid' => $tid,
'mid' => $ibforums->member['id'],
'statut' => 0, ) ) ;
$DB->query("INSERT INTO ibf_tournament_players_statut (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")");
// Création statut bidon pour mid = 0
$db_string = $DB->compile_db_insert_string( array ( 'tid' => $tid,
'mid' => 0,
'statut' => 0, ) );
$DB->query("INSERT INTO ibf_tournament_players_statut (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")");
if ($FIXSTYLE == 1)
{
echo " "; // some forums need this...
}
$print->redirect_screen($ibforums->lang['tournament_created'], $ibforums->vars['base_url']."do=viewtourney&tid=".$tid);
}
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']));
}
$groupstring = implode(',',$groups);
$DB->query("SELECT arcade_access FROM ibf_groups WHERE g_id IN (".$groupstring.")");
while ($check = $DB->fetch_row())
{
if ($check['arcade_access'] > 1)
{
$playok = 1;
}
}
unset($groups);
unset($check);
if ($playok == 0)
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'err_noplay') );
}
$tid = intval($tid);
// Ce membre n'est-il pas déjà inscrit à ce tournoi ?
$DB->query("SELECT mid FROM ibf_tournament_players WHERE tid='".$tid."' AND mid='".$ibforums->member['id']."'");
if($DB->fetch_row())
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 'player_already') );
}
/*
if($ibforums->member['posts'] < $GROUP['p_require'])
{
$std->Error( array( 'LEVEL' => 1, 'MSG' => 't_p_requires') );
}
*/
$DB->query("SELECT creat, gid, demare, numplayers, cost FROM ibf_tournaments 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;
}
$num = ($row['faceoff']*2) - $ctr;
if($row['mid'] == 0) // Place libre
{
$liste .= $num;
}
}
$hasard = rand(1,strlen($liste)) - 1;
$num = $liste{$hasard}; // On a une place ok :)
$faceoff = ceil($num/2);
$datestarted = time();
$DB->query("UPDATE ibf_tournament_players SET mid='".$ibforums->member['id']."', notified=0 WHERE rung='".$rung."' AND tid='".$tid."' AND mid='0' AND faceoff='".$faceoff."' LIMIT 1");
// Création statut pour ce tournoi (0 = Ok, actif)
$DB->query("INSERT INTO ibf_tournament_players_statut VALUES ('".$tid."', '".$ibforums->member['id']."', '0')");
if(strlen($liste) == 1) // Le tournoi est donc plein après cette inscription ;)
{
$DB->query("UPDATE ibf_tournament_players SET timeplayed='".$datestarted."' WHERE tid='".$tid."'");
$DB->query("UPDATE ibf_tournaments SET datestarted='".$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);
}
function corige_tournoi($tid, $rung, $faceoff)
{
global $ibforums, $DB, $std, $GROUP, $print;
$tid = intval($tid);
$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 $ibforums->lang['advance_players'];
$this->view_tourney($tid);
return;
}
if($faceoff == 1 || $faceoff == 2) {
$nextfaceoff=1;
} else {
$nextfaceoff=2;
}
// Cas où un champion doit être couronné
if($rung == 1) {
if ( (($infoj[0]['rungscore'] >= $infoj[1]['rungscore']) && $infog['highscore_type'] == "high") || (($infoj[0]['rungscore'] <= $infoj[1]['rungscore']) && $infog['highscore_type'] == "low" && $infoj[0]['rungscore'] > 0) )
{
$winner = $infoj[0]['mid'];
} else {
$winner = $infoj[1]['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' LIMIT 1");
// Mise à jour du statut de tous les participants (Statut = 3 => Tournoi terminé)
$DB->query("UPDATE ibf_tournament_players_statut SET statut='3' WHERE tid='".$tid."'");
$print->redirect_screen($ibforums->lang['operation_ok'], $ibforums->vars['base_url']."do=viewtourney&tid=".$tid);
return;
}
// Le tournoi n'est pas terminé, on fait juste avancer
$loser = "";
if ((($infoj[0]['rungscore'] >= $infoj[1]['rungscore']) && $infog['highscore_type'] == "high") || (($infoj[0]['rungscore'] <= $infoj[1]['rungscore']) && $infog['highscore_type'] == "low" && $infoj[0]['rungscore'] > 0))
{
$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'];
} 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'];
}
// Mise à jour du statut du perdant
$DB->query("UPDATE ibf_tournament_players_statut SET statut='1' WHERE tid='".$tid."' AND mid='".$loser."'");
// update last playtime for both (new) opponents
$DB->query("UPDATE ibf_tournament_players SET timeplayed=".time().", notified=0 WHERE tid=".$tid." AND rung=".($rung-1)." AND faceoff=".$nextfaceoff);
$print->redirect_screen($ibforums->lang['operation_ok'], $ibforums->vars['base_url']."do=viewtourney&tid=".$tid);
}
function disqual_tournoi($tid, $rung, $faceoff, $mid)
{
global $ibforums, $DB, $std, $GROUP, $print;
$tid = intval($tid);
$rung = intval($rung);
$faceoff = intval($faceoff);
$mid = intval($mid);
// check permission to run this
$DB->query("SELECT m.is_arcade_mod AS is_mod, g.g_access_cp AS is_admin FROM ibf_members AS m LEFT JOIN ibf_groups AS g ON (m.mgroup = g.g_id) WHERE id=".$ibforums->member['id']." LIMIT 0, 1");
$userinfo = $DB->fetch_row();
if ($userinfo['is_mod'] || $userinfo['is_admin'])
{
$DB->query("SELECT * FROM ibf_tournaments WHERE tid='$tid'");
$infot = $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($faceoff == 1 || $faceoff == 2) {
$nextfaceoff=1;
} else {
$nextfaceoff=2;
}
// Cas où un champion doit être couronné
if($rung == 1) {
if($mid == $infoj[0]['mid']) {
$winner = $infoj[1]['mid'];
} else {
$winner = $infoj[0]['mid'];
}
$DB->query("SELECT gname, gtitle from ibf_games_list WHERE gid='".$infot['gid']."' LIMIT 1");
$row = $DB->fetch_row();
$gname = $row['gname'];
$gtitle = $row['gtitle'];
$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' LIMIT 1");
// Mise à jour du statut de tous les participants (Statut = 3 => Tournoi terminé)
$DB->query("UPDATE ibf_tournament_players_statut SET statut='3' WHERE tid='".$tid."' AND mid=".$winner);
$DB->query("UPDATE ibf_tournament_players_statut SET statut='2' WHERE tid='".$tid."' AND mid=".$mid);
$DB->query("UPDATE ibf_tournament_players SET timesplayed='$nbtries' WHERE tid='$tid' AND faceoff='$faceoff' AND rung='$rung'");
$print->redirect_screen($ibforums->lang['operation_ok'], $ibforums->vars['base_url']."do=viewtourney&tid=".$tid);
return;
}
// Le tournoi n'est pas terminé, on fait juste avancer
$loser = "";
if($mid == $infoj[0]['mid']) {
$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_players SET timeplayed='".time()."', notified=0 WHERE tid=".$tid." AND faceoff=".$nextfaceoff." AND rung=".($rung-1)." AND mid=".$row['mid']);
}
}
// Mise à jour du statut du perdant
$DB->query("UPDATE ibf_tournament_players_statut SET statut='2' WHERE tid='".$tid."' AND mid='".$loser."'");
$DB->query("UPDATE ibf_tournament_players SET timesplayed='$nbtries' WHERE tid='$tid' AND faceoff='$faceoff' AND rung='$rung'");
}
$print->redirect_screen($ibforums->lang['operation_ok'], $ibforums->vars['base_url']."do=viewtourney&tid=".$tid);
}
}
$main = new Arcade;
if( isset($ibforums->input['module']) )
{
$file = MODULE_PATH."mod_".$ibforums->input['module'].".php";
if( file_exists($file) )
{
require $file;
}
else
{
$main->show_games();
$print->add_output($main->output);
$print->do_output( array( 'TITLE' => $main->page_title, 'JS' => 0, NAV => $main->nav ) );
}
}
function ibp_cleansql($value)
{
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( "/