Beispiel #1
0
function ArcadeSubmit()
{
    global $scripturl, $sourcedir, $modSettings, $txt, $db_prefix, $context, $smcFunc, $user_info;
    if (!($system = SubmitSystemInfo())) {
        fatal_lang_error('arcade_submit_error', false);
    }
    require_once $sourcedir . '/' . $system['file'];
    if ($system['get_game'] !== false) {
        $context['game'] = $system['get_game']();
    }
    // Check that everyhing is ok
    if (!$context['game'] || !isset($_SESSION['arcade_play_' . $context['game']['id']]) || !isset($_SESSION['arcade_play_extra_' . $context['game']['id']])) {
        fatal_lang_error('arcade_submit_error_session', false);
    }
    if ($context['game']['score_type'] == 2 || $context['game']['submit_system'] != $system['system']) {
        log_error(sprintf($txt['arcade_submit_error_configure_log'], $context['game']['name'], $system['system']));
        fatal_lang_error('arcade_submit_error', false);
    }
    $session_info = $_SESSION['arcade_play_' . $context['game']['id']];
    $extra = $_SESSION['arcade_play_extra_' . $context['game']['id']];
    unset($_SESSION['arcade_play_' . $context['game']['id']], $_SESSION['arcade_play_extra_' . $context['game']['id']]);
    $submit_info = $system['info']($context['game'], $session_info);
    if (!$submit_info || isset($submit_info['error'])) {
        fatal_lang_error('arcade_submit_error', false);
    }
    if (isset($extra['match'])) {
        $id_match = (int) $extra['match'];
        $request = $smcFunc['db_query']('', '
			SELECT m.id_match, m.name, m.current_players, m.num_players, m.current_round, m.num_rounds, m.status
			FROM {db_prefix}arcade_matches AS m
			WHERE m.id_match = {int:match}
				AND status = 1', array('match' => $id_match));
        $matchInfo = $smcFunc['db_fetch_assoc']($request);
        $smcFunc['db_free_result']($request);
        if (!$matchInfo) {
            fatal_lang_error('arcade_game_not_found', false);
        }
        $request = $smcFunc['db_query']('', '
			SELECT id_game
			FROM {db_prefix}arcade_matches_rounds
			WHERE id_match = {int:match}
				AND round = {int:round}', array('match' => $id_match, 'round' => $matchInfo['current_round']));
        $round = $smcFunc['db_fetch_assoc']($request);
        $smcFunc['db_free_result']($request);
        if (!$round) {
            fatal_lang_error('arcade_game_not_found', false);
        }
        $request = $smcFunc['db_query']('', '
			SELECT status
			FROM {db_prefix}arcade_matches_players
			WHERE id_match = {int:match}
				AND id_member = {int:member}', array('match' => $id_match, 'round' => $matchInfo['current_round'], 'member' => $user_info['id']));
        $result = $smcFunc['db_fetch_assoc']($request);
        $smcFunc['db_free_result']($request);
        if (!$result) {
            fatal_lang_error('arcade_game_not_found', false);
        }
        if ($result['status'] == 2) {
            $smcFunc['db_insert']('insert', '{db_prefix}arcade_matches_results', array('id_match' => 'int', 'id_member' => 'int', 'round' => 'int', 'score' => 'float', 'duration' => 'float', 'end_time' => 'int', 'score_status' => 'string-30', 'validate_hash' => 'string-255'), array($id_match, $user_info['id'], $matchInfo['current_round'], $submit_info['score'], $submit_info['duration'], $submit_info['end_time'], $submit_info['cheating'], !empty($submit_info['hash']) ? $submit_info['hash'] : 'v1' . sha1($submit_info['score'])), array('id_match', 'id_member', 'round'));
            matchUpdatePlayers($id_match, array($user_info['id']), 3);
            redirectexit('action=arcade;sa=viewMatch;match=' . $id_match);
        }
    }
    if ($user_info['is_guest'] && !$context['arcade']['can_submit']) {
        $_SESSION['arcade']['highscore'] = array('id' => false, 'game' => $context['game']['id'], 'score' => $submit_info['score'], 'position' => 0, 'start' => 0, 'saved' => false, 'error' => 'arcade_no_permission');
        redirectexit('action=arcade;sa=highscore;game=' . $context['game']['id']);
    } elseif ($user_info['is_guest']) {
        $member = array('id' => $user_info['id'], 'name' => isset($_SESSION['playerName']) ? $_SESSION['playerName'] : '', 'ip' => $user_info['ip']);
    } else {
        $member = array('id' => $user_info['id'], 'name' => $user_info['name'], 'ip' => $user_info['ip']);
    }
    $score = array('score' => $submit_info['score'], 'duration' => $submit_info['duration'], 'endTime' => $submit_info['end_time'], 'status' => $submit_info['cheating'], 'hash' => !empty($submit_info['hash']) ? $submit_info['hash'] : '');
    if ($context['arcade']['can_submit'] && empty($member['name'])) {
        $_SESSION['save_score'] = array($context['game'], $member, $score);
        redirectexit('action=arcade;sa=save;game=' . $context['game']['id']);
    } elseif ($context['arcade']['can_submit']) {
        $save = SaveScore($context['game'], $member, $score);
        if ($save === false || $save['id'] === false) {
            $_SESSION['arcade']['highscore'] = array('id' => false, 'game' => $context['game']['id'], 'score' => $score['score'], 'start' => 0, 'saved' => false, 'error' => isset($save['error']) ? $save['error'] : 'arcade_saving_error');
        } else {
            $_SESSION['arcade']['highscore'] = array('id' => $save['id'], 'position' => $save['position'], 'game' => $context['game']['id'], 'newChampion' => $save['newChampion'], 'personalBest' => $save['isPersonalBest'], 'score' => $score['score'], 'start' => floor(($save['position'] - 1) / $context['scores_per_page']) * $context['scores_per_page'], 'saved' => true);
        }
    } else {
        $_SESSION['arcade']['highscore'] = array('id' => false, 'game' => $context['game']['id'], 'score' => $submit_info['score'], 'position' => 0, 'start' => 0, 'saved' => false, 'error' => 'arcade_no_permission');
    }
    if (!isset($_REQUEST['xml'])) {
        redirectexit('action=arcade;sa=highscore;game=' . $context['game']['id'] . ';start=' . $_SESSION['arcade']['highscore']['start']);
    }
}
Beispiel #2
0
function EditGame2()
{
    global $scripturl, $txt, $db_prefix, $modSettings, $context, $sourcedir, $smcFunc, $boarddir;
    $context['game_permissions'] = $modSettings['arcadePermissionMode'] > 2;
    $context['edit_page'] = !isset($_REQUEST['advanced']) ? 'basic' : 'advanced';
    if (!isset($context['game'])) {
        $id = loadGame((int) $_REQUEST['game'], true);
        if ($id === false) {
            fatal_lang_error('arcade_game_not_found', false);
        }
        $game =& $context['arcade']['game_data'][$id];
        $context['game'] = array('id' => $game['id_game'], 'internal_name' => $game['internal_name'], 'category' => $game['id_cat'], 'name' => htmlspecialchars($game['game_name']), 'thumbnail' => htmlspecialchars($game['thumbnail']), 'thumbnail_small' => htmlspecialchars($game['thumbnail_small']), 'description' => htmlspecialchars($game['description']), 'help' => htmlspecialchars($game['help']), 'game_file' => $game['game_file'], 'game_directory' => $game['game_directory'], 'submit_system' => $game['submit_system'], 'score_type' => $game['score_type'], 'member_groups' => explode(',', $game['member_groups']), 'extra_data' => unserialize($game['extra_data']), 'enabled' => !empty($game['enabled']));
        if (!is_array($context['game']['extra_data']) || isset($_REQUEST['detect'])) {
            require_once $sourcedir . '/SWFReader.php';
            $swf = new SWFReader();
            if (substr($game['game_file'], -3) == 'swf') {
                $swf->open($modSettings['gamesDirectory'] . '/' . $game['game_directory'] . '/' . $game['game_file']);
                $context['game']['extra_data'] = array('width' => $swf->header['width'], 'height' => $swf->header['height'], 'flash_version' => $swf->header['version'], 'background_color' => $swf->header['background']);
                $swf->close();
            } else {
                $context['game']['extra_data'] = array('width' => '', 'height' => '', 'flash_version' => '', 'background_color' => array('', '', ''));
            }
        }
    }
    $context['game_permissions'] = $modSettings['arcadePermissionMode'] > 2;
    // Load categories
    if (!isset($context['arcade_category'])) {
        $request = $smcFunc['db_query']('', '
			SELECT id_cat, cat_name
			FROM {db_prefix}arcade_categories');
        $context['arcade_category'] = array();
        while ($row = $smcFunc['db_fetch_assoc']($request)) {
            $context['arcade_category'][] = array('id' => $row['id_cat'], 'name' => $row['cat_name']);
        }
        $smcFunc['db_free_result']($request);
    }
    // Load Sumbit Systems
    if (!isset($context['submit_systems'])) {
        $context['submit_systems'] = SubmitSystemInfo('*');
    }
    $gameOptions = array();
    $errors = array();
    if (checkSession('post', '', false) !== '') {
        $errors['session'] = 'session_timeout';
    }
    // Basic
    if (empty($_REQUEST['edit_page']) || $_REQUEST['edit_page'] == 'basic') {
        if (isset($_POST['game_name']) && trim($_POST['game_name']) == '') {
            $errors['game_name'] = 'invalid';
        }
        $gameOptions['name'] = $_POST['game_name'];
        $gameOptions['description'] = $_POST['description'];
        $gameOptions['thumbnail'] = $_POST['thumbnail'];
        $gameOptions['thumbanil_small'] = $_POST['thumbnail_small'];
        $gameOptions['help'] = $_POST['help'];
        $gameOptions['enabled'] = !empty($_POST['game_enabled']);
        if ($context['game_permissions']) {
            $gameOptions['member_groups'] = array();
            if (!empty($_POST['groups'])) {
                foreach ($_POST['groups'] as $id) {
                    $gameOptions['member_groups'][] = (int) $id;
                }
            }
        }
        $gameOptions['category'] = (int) $_POST['category'];
    } else {
        if (trim($_POST['internal_name']) == '') {
            $errors['internal_name'] = 'invalid';
        }
        if (trim($_POST['game_file']) == '') {
            $errors['game_file'] = 'invalid';
        }
        if (!isset($context['submit_systems'][$_POST['submit_system']])) {
            $errors['submit_system'] = 'invalid';
        }
        $extra_data = $context['game']['extra_data'];
        if (isset($_POST['extra_data'])) {
            foreach ($_POST['extra_data'] as $item => $value) {
                $extra_data[$item] = $value;
            }
        }
        $gameOptions['internal_name'] = $_POST['internal_name'];
        $gameOptions['submit_system'] = $_POST['submit_system'];
        $gameOptions['game_directory'] = $_POST['game_directory'];
        $gameOptions['game_file'] = $_POST['game_file'];
        $gameOptions['score_type'] = (int) $_POST['score_type'];
        $gameOptions['extra_data'] = $extra_data;
    }
    if (!empty($errors)) {
        $context['errors'] = $errors;
        return EditGame();
    }
    updateGame($context['game']['id'], $gameOptions, true);
    redirectexit('action=admin;area=managegames');
}