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']); } }
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'); }