static function user_time_diff_probe() { // Определяем время в браузере $client_time = strtotime(sys_get_param('client_gmt')); // Попытка определить по GMT-времени браузера. В нём будет часовой пояс (GMT), поэтому время будет автоматически преобразовано в часовой пояс сервера !$client_time ? $client_time = round(sys_get_param_float('timeBrowser') / 1000) : false; // Попытка определить по Date.valueOf() - миллисекунды с начала эпохи UNIX_TIME !$client_time ? $client_time = SN_TIME_NOW : false; // Если все попытки провалились - тупо берем время сервера // TODO - REMOVE // !($client_time = strtotime(sys_get_param('client_gmt'))) // Время в браузере определяется через GMT // ? (!($client_time = sys_get_param_float('timeBrowser') / 1000) // ? $client_time = SN_TIME_NOW : false) // : false; // !($client_time = strtotime(sys_get_param('client_gmt'))) // Время в браузере определяется через GMT // ? $client_time = SN_TIME_NOW // : false; $result = array(PLAYER_OPTION_TIME_DIFF => $client_time - SN_TIME_NOW, PLAYER_OPTION_TIME_DIFF_UTC_OFFSET => ($browser_utc_offset = sys_get_param_int('utc_offset')) ? $browser_utc_offset - date('Z') : 0, PLAYER_OPTION_TIME_DIFF_FORCED => sys_get_param_int('PLAYER_OPTION_TIME_DIFF_FORCED'), PLAYER_OPTION_TIME_DIFF_MEASURE_TIME => SN_TIME_SQL); return $result; }
* @copyright 2008 by ??????? for XNova */ define('INSIDE', true); define('INSTALL', false); define('IN_ADMIN', true); require '../common.' . substr(strrchr(__FILE__, '.'), 1); if ($user['authlevel'] < 3) { AdminMessage($lang['adm_err_denied']); } $template = gettemplate('admin/settings', true); if (sys_get_param('save')) { $config->game_name = sys_get_param_str_raw('game_name'); $config->game_mode = sys_get_param_int('game_mode'); $config->game_speed = sys_get_param_float('game_speed', 1); $config->fleet_speed = sys_get_param_float('fleet_speed', 1); $config->resource_multiplier = sys_get_param_float('resource_multiplier', 1); $config->user_vacation_disable = sys_get_param_int('user_vacation_disable', 0); $config->url_faq = sys_get_param_str_raw('url_faq'); $config->url_forum = sys_get_param_str_raw('url_forum'); $config->url_rules = sys_get_param_str_raw('url_rules'); $config->url_dark_matter = sys_get_param_str_raw('url_dark_matter'); $config->game_disable = sys_get_param_int('game_disable'); $config->game_disable_reason = sys_get_param_str_raw('game_disable_reason'); $config->game_default_language = sys_get_param_str_raw('game_default_language', DEFAULT_LANG); $config->game_default_skin = sys_get_param_str_raw('game_default_skin', DEFAULT_SKINPATH); $config->game_default_template = sys_get_param_str_raw('game_default_template', TEMPLATE_NAME); $config->game_maxGalaxy = sys_get_param_int('game_maxGalaxy', 5); $config->game_maxSystem = sys_get_param_int('game_maxSystem', 199); $config->game_maxPlanet = sys_get_param_int('game_maxPlanet', 15); $config->player_max_colonies = sys_get_param_int('player_max_colonies', 9); $config->fleet_bashing_attacks = sys_get_param_int('fleet_bashing_attacks', 3);
$config->crystal_basic_income = sys_get_param_float('crystal_basic_income', 20); $config->deuterium_basic_income = sys_get_param_float('deuterium_basic_income', 10); $config->energy_basic_income = sys_get_param_float('energy_basic_income', 0); $config->eco_planet_storage_metal = sys_get_param_float('eco_planet_storage_metal', BASE_STORAGE_SIZE); $config->eco_planet_storage_crystal = sys_get_param_float('eco_planet_storage_crystal', BASE_STORAGE_SIZE); $config->eco_planet_storage_deuterium = sys_get_param_float('eco_planet_storage_deuterium', BASE_STORAGE_SIZE); $config->chat_timeout = sys_get_param_int('chat_timeout', 5); $config->game_news_overview = sys_get_param_int('game_news_overview', 5); $config->advGoogleLeftMenuIsOn = sys_get_param_int('advGoogleLeftMenuIsOn'); $config->advGoogleLeftMenuCode = sys_get_param('advGoogleLeftMenuCode'); $config->debug = sys_get_param_int('debug'); $config->game_counter = sys_get_param_int('game_counter'); $config->geoip_whois_url = sys_get_param_str('geoip_whois_url'); $config->uni_price_galaxy = sys_get_param_float('uni_price_galaxy'); $config->uni_price_system = sys_get_param_float('uni_price_system'); $config->user_birthday_gift = sys_get_param_float('user_birthday_gift'); $config->user_birthday_range = sys_get_param_int('user_birthday_range'); $config->stats_hide_admins = sys_get_param_int('stats_hide_admins'); $config->stats_hide_player_list = sys_get_param_str('stats_hide_player_list'); $config->stats_hide_pm_link = sys_get_param_int('stats_hide_pm_link'); $config->stats_schedule = sys_get_param_str('stats_schedule'); $config->empire_mercenary_base_period = sys_get_param_int('empire_mercenary_base_period'); if ($config->empire_mercenary_temporary != sys_get_param_int('empire_mercenary_temporary')) { if ($config->empire_mercenary_temporary) { db_unit_list_admin_delete_mercenaries_finished(); } else { db_unit_list_admin_set_mercenaries_expire_time($config->empire_mercenary_base_period); } $config->empire_mercenary_temporary = sys_get_param_int('empire_mercenary_temporary'); } $config->db_saveAll();
if ($payment_id = sys_get_param_id('payment_id')) { $payment = doquery("SELECT * FROM {{payment}} WHERE `payment_id` = {$payment_id} LIMIT 1;", true); if ($payment && $payment['payment_user_id'] == $user['id']) { if ($payment['payment_status'] == PAYMENT_STATUS_COMPLETE) { $template->assign_block_vars('result', array('MESSAGE' => sprintf($lang['pay_msg_mm_purchase_complete'], $payment['payment_dark_matter_paid'], $payment['payment_module_name'], $payment['payment_dark_matter_gained']))); } if ($payment['payment_status'] == PAYMENT_STATUS_NONE) { $template->assign_block_vars('result', array('MESSAGE' => sprintf($lang['pay_msg_mm_purchase_incomplete'], $payment['payment_dark_matter_paid'], $payment['payment_module_name']), 'STATUS' => 1)); } if ($payment['payment_test']) { $template->assign_block_vars('result', array('MESSAGE' => sprintf($lang['pay_msg_mm_purchase_test']), 'STATUS' => -1)); } } } $unit_available_amount_list =& sn_module_payment::$bonus_table; $request = array('metamatter' => sys_get_param_float('metamatter')); if (!$request['metamatter']) { unset($_POST); } $payment_methods_available = array_combine(array_keys(sn_module_payment::$payment_methods), array_fill(0, count(sn_module_payment::$payment_methods), null)); array_walk($payment_methods_available, function (&$value, $index) { $value = !empty(sn_module_payment::$payment_methods[$index]) ? array_combine(array_keys(sn_module_payment::$payment_methods[$index]), array_fill(0, count(sn_module_payment::$payment_methods[$index]), null)) : $value; }); // pdump($payment_methods_available); $payment_module_valid = false; $payment_module = sys_get_param_str('payment_module'); foreach ($sn_module_list['payment'] as $module_name => $module) { if (!is_object($module) || !$module->manifest['active']) { continue; } lng_include($module_name, $module->manifest['root_relative']);
define('INSIDE', true); define('INSTALL', false); define('IN_ADMIN', true); require '../common.' . substr(strrchr(__FILE__, '.'), 1); if ($user['authlevel'] < 3) { AdminMessage($lang['adm_err_denied']); } $template = gettemplate('admin/planet_compensate', true); $galaxy_src = sys_get_param_int('galaxy_src'); $system_src = sys_get_param_int('system_src'); $planet_src = sys_get_param_int('planet_src'); $galaxy_dst = sys_get_param_int('galaxy_dst'); $system_dst = sys_get_param_int('system_dst'); $planet_dst = sys_get_param_int('planet_dst'); $bonus = sys_get_param_float('bonus', 1); $username_unsafe = sys_get_param_str_unsafe('username'); $username = sys_get_param_escaped('username'); if ($galaxy_src) { sn_db_transaction_start(); $errors = array(); $owner = db_user_by_username($username_unsafe, false, '*', true, true); $planet = sys_o_get_updated($owner, array('galaxy' => $galaxy_src, 'system' => $system_src, 'planet' => $planet_src, 'planet_type' => 1), SN_TIME_NOW); $que = $planet['que']; $planet = $planet['planet']; if (!$planet) { $errors[] = $lang['adm_pl_comp_err_0']; } if ($planet['destruyed']) { $errors[] = $lang['adm_pl_comp_err_1']; }
function que_build($user, $planet, $build_mode = BUILD_CREATE, $redirect = true) { global $lang; $unit_amount_qued = 0; try { if (!$user['id']) { throw new exception('{Нет идентификатора пользователя - сообщите Администрации}', ERR_ERROR); // TODO EXCEPTION } $unit_id = sys_get_param_int('unit_id'); /* if(!$unit_id && is_array($unit_list = sys_get_param('fmenge'))) { foreach($unit_list as $unit_id => $unit_amount) if($unit_amount) break; } */ if (!$unit_id) { throw new exception('{Нет идентификатора юнита - сообщите Администрации}', ERR_ERROR); // TODO EXCEPTION } $que_id = que_get_unit_que($unit_id); if (!$que_id) { throw new exception('{Неправильный тип очереди - сообщите Администрации}', ERR_ERROR); // TODO EXCEPTION } if ($build_mode == BUILD_DESTROY && $que_id != QUE_STRUCTURES) { throw new exception('{Уничтожать можно только здания на планете}', ERR_ERROR); // TODO EXCEPTION } $que_data = sn_get_groups('ques'); $que_data = $que_data[$que_id]; // die(); // TODO Переделать под подочереди if ($que_id == QUE_STRUCTURES) { $sn_groups_build_allow = sn_get_groups('build_allow'); $que_data['unit_list'] = $sn_groups_build_allow[$planet['planet_type']]; if (!isset($que_data['unit_list'][$unit_id])) { throw new exception('{Это здание нельзя строить на ' . ($planet['planet_type'] == PT_PLANET ? 'планете' : 'луне'), ERR_ERROR); // TODO EXCEPTION } } /* // TODO Разделить очереди для Верфи и Обороны elseif($que_id == QUE_HANGAR) { $que_data['mercenary'] = in_array($unit_id, sn_get_groups('defense')) ? MRC_FORTIFIER : MRC_ENGINEER; } elseif($que_id == QUE_HANGAR) { $que_data['mercenary'] = in_array($unit_id, sn_get_groups('defense')) ? MRC_FORTIFIER : MRC_ENGINEER; } */ sn_db_transaction_start(); // Это нужно, что бы заблокировать пользователя и работу с очередями $user = db_user_by_id($user['id']); // Это нужно, что бы заблокировать планету от списания ресурсов if (isset($planet['id']) && $planet['id']) { $planet = db_planet_by_id($planet['id'], true); } else { $planet['id'] = 0; } $planet_id = $que_id == QUE_RESEARCH ? 0 : intval($planet['id']); $que = que_get($user['id'], $planet['id'], $que_id, true); $in_que =& $que['in_que'][$que_id][$user['id']][$planet_id]; $que_max_length = que_get_max_que_length($user, $planet, $que_id, $que_data); // TODO Добавить вызовы функций проверок текущей и максимальной длин очередей if (count($in_que) >= $que_max_length) { throw new exception('{Все слоты очереди заняты}', ERR_ERROR); // TODO EXCEPTION } // TODO Отдельно посмотреть на уничтожение зданий - что бы можно было уничтожать их без планов switch (eco_can_build_unit($user, $planet, $unit_id)) { case BUILD_ALLOWED: break; case BUILD_UNIT_BUSY: throw new exception('{Строение занято}', ERR_ERROR); break; // TODO EXCEPTION eco_bld_msg_err_laboratory_upgrading // case BUILD_REQUIRE_NOT_MEET: // TODO EXCEPTION eco_bld_msg_err_laboratory_upgrading // case BUILD_REQUIRE_NOT_MEET: default: if ($build_mode == BUILD_CREATE) { throw new exception('{Требования не удовлетворены}', ERR_ERROR); } break; // TODO EXCEPTION eco_bld_msg_err_requirements_not_meet } $unit_amount = floor(sys_get_param_float('unit_amount', 1)); $unit_amount_qued = $unit_amount; $units_qued = isset($in_que[$unit_id]) ? $in_que[$unit_id] : 0; $unit_level = mrc_get_level($user, $planet, $unit_id, true, true) + $units_qued; if ($unit_max = get_unit_param($unit_id, P_MAX_STACK)) { if ($unit_level >= $unit_max) { throw new exception('{Максимальное количество юнитов данного типа уже достигнуто или будет достигнуто по окончанию очереди}', ERR_ERROR); // TODO EXCEPTION } $unit_amount = max(0, min($unit_amount, $unit_max - $unit_level)); } if ($unit_amount < 1) { throw new exception('{Неправильное количество юнитов - сообщите Администрации}', ERR_ERROR); // TODO EXCEPTION } /* if($unit_max && $unit_level + $unit_amount > $unit_max) { throw new exception("Постройка {$unit_amount} {$lang['tech'][$unit_id]} приведет к привышению максимально возможного количества юнитов данного типа", ERR_ERROR); // TODO EXCEPTION } */ // TODO Переделать eco_unit_busy для всех типов зданий // if(eco_unit_busy($user, $planet, $que, $unit_id)) // { // die('Unit busy'); // TODO EXCEPTION // } if (get_unit_param($unit_id, P_STACKABLE)) { // TODO Поле 'max_Lot_size' для ограничения размера стэка в очереди - то ли в юниты, то ли в очередь if (in_array($unit_id, $group_missile = sn_get_groups('missile'))) { // TODO Поле 'container' - указывает на родительску структуру, в которой хранится данный юнит и по вместительности которой нужно применять размер юнита $used_silo = 0; foreach ($group_missile as $missile_id) { $missile_qued = isset($in_que[$missile_id]) ? $in_que[$missile_id] : 0; $used_silo += (mrc_get_level($user, $planet, $missile_id, true, true) + $missile_qued) * get_unit_param($missile_id, P_UNIT_SIZE); } $free_silo = mrc_get_level($user, $planet, STRUC_SILO) * get_unit_param(STRUC_SILO, P_CAPACITY) - $used_silo; if ($free_silo <= 0) { throw new exception('{Ракетная шахта уже заполнена или будет заполнена по окончанию очереди}', ERR_ERROR); // TODO EXCEPTION } $unit_size = get_unit_param($unit_id, P_UNIT_SIZE); if ($free_silo < $unit_size) { throw new exception("{В ракетной шахте нет места для {$lang['tech'][$unit_id]}}", ERR_ERROR); // TODO EXCEPTION } $unit_amount = max(0, min($unit_amount, floor($free_silo / $unit_size))); } $unit_level = $new_unit_level = 0; } else { $unit_amount = 1; if ($que_id == QUE_STRUCTURES) { // if($build_mode == BUILD_CREATE && eco_planet_fields_max($planet) - $planet['field_current'] - $que['sectors'][$planet['id']] <= 0) $sectors_qued = is_array($in_que) ? array_sum($in_que) : 0; if ($build_mode == BUILD_CREATE && eco_planet_fields_max($planet) - $planet['field_current'] - $sectors_qued <= 0) { throw new exception('{Не хватает секторов на планете}', ERR_ERROR); // TODO EXCEPTION } // И что это я такое написал? Зачем? //if($build_mode == BUILD_DESTROY && $planet['field_current'] <= $que['amounts'][$que_id]) //{ // die('Too much buildings'); // TODO EXCEPTION //} } $build_multiplier = $build_mode == BUILD_CREATE ? 1 : -1; $new_unit_level = $unit_level + $unit_amount * $build_multiplier; } $build_data = eco_get_build_data($user, $planet, $unit_id, $unit_level); $unit_amount = min($build_data['CAN'][$build_mode], $unit_amount); if ($unit_amount < 0) { throw new exception('{Не хватает ресурсов}', ERR_ERROR); // TODO EXCEPTION } if ($new_unit_level < 0) { throw new exception('{Нельзя уничтожить больше юнитов, чем есть}', ERR_ERROR); // TODO EXCEPTION } if ($build_data['RESULT'][$build_mode] != BUILD_ALLOWED) { throw new exception('{Строительство блокировано}', ERR_ERROR); // TODO EXCEPTION } // $unit_amount = min($unit_amount, MAX_FLEET_OR_DEFS_PER_ROW); $unit_amount_qued = 0; while ($unit_amount > 0 && count($que['ques'][$que_id][$user['id']][$planet_id]) < $que_max_length) { $place = min($unit_amount, MAX_FLEET_OR_DEFS_PER_ROW); que_add_unit($unit_id, $user, $planet, $build_data, $new_unit_level, $place, $build_mode); $unit_amount -= $place; $que = que_get($user['id'], $planet['id'], $que_id, true); $unit_amount_qued += $place; } // pdump($que); /* pdump($que = que_get($user['id'], $planet['id'], $que_id, true)); */ // die(); // if(count($que['ques'][$que_id][$user['id']][$planet_id]) >= $que_max_length) sn_db_transaction_commit(); if ($redirect) { sys_redirect("{$_SERVER['PHP_SELF']}?mode=" . sys_get_param_str('mode') . "&ally_id=" . sys_get_param_id('ally_id')); die; } $operation_result = array('STATUS' => ERR_NONE, 'MESSAGE' => '{Строительство начато}'); } catch (exception $e) { sn_db_transaction_rollback(); $operation_result = array('STATUS' => in_array($e->getCode(), array(ERR_NONE, ERR_WARNING, ERR_ERROR)) ? $e->getCode() : ERR_ERROR, 'MESSAGE' => $e->getMessage()); } if (!empty($operation_result['MESSAGE'])) { $operation_result['MESSAGE'] .= ' ' . ($unit_amount_qued ? $unit_amount_qued : $unit_amount) . 'x[' . $lang['tech'][$unit_id] . ']' . (isset($planet['id']) ? ' на ' . $planet['name'] : '') . '}'; } return $operation_result; }
<tr><th colspan="5">' . $lang['deuterium'] . '</th><th colspan="5"><input type="texte" value="0" name="deutsouhait" /></th></tr> <tr><th colspan="10"><input type="submit" value="' . $lang['send'] . '" /></th></tr> <form> </table> </HTML>'; display($page); break; case 2: // On vient d'envoyer une annonce, on l'enregistre et on affiche un message comme quoi on l'a bien fait $metalvendre = sys_get_param_float('metalvendre'); $metalsouhait = sys_get_param_float('metalsouhait'); $cristalvendre = sys_get_param_float('cristalvendre'); $cristalsouhait = sys_get_param_float('cristalsouhait'); $deutvendre = sys_get_param_float('deutvendre'); $deutsouhait = sys_get_param_float('deutsouhait'); if ($metalvendre != 0 && $metalsouhait == 0 || $cristalvendre != 0 && $cristalsouhait == 0 || $deutvendre != 0 && $deutsouhait == 0) { doquery("INSERT INTO {{annonce}} SET `user` ='{$users['username']}', `galaxie` ='{$users['galaxy']}', `systeme` ='{$users['system']}', `metala` ='{$metalvendre}', `cristala` ='{$cristalvendre}', `deuta` ='{$deutvendre}', `metals` ='{$metalsouhait}', `cristals` ='{$cristalsouhait}', `deuts` ='{$deutsouhait}'"); message($lang['Your_announce_was_recorded'], $lang['announce_status'], "annonce.php"); } else { message($lang['Your_announce_not_recorded'], $lang['announce_status'], "annonce.php?action=1"); } break; case 3: //Suppression d'annonce doquery("DELETE FROM {{annonce}} WHERE `id` = {$GET_id}"); message($lang['Your_announce_was_deleted'], $lang['announce_status'], "annonce.php"); break; default: //Sinon on affiche la liste des annonces $annonce = doquery("SELECT * FROM {{annonce}} ORDER BY `id` DESC ");
* */ define('INSIDE', true); define('INSTALL', false); define('IN_ADMIN', true); require '../common.' . substr(strrchr(__FILE__, '.'), 1); if (!sn_module_get_active_count('payment')) { sys_redirect(SN_ROOT_VIRTUAL . 'admin/overview.php'); } if ($user['authlevel'] < 3) { AdminMessage($lang['adm_err_denied']); } $template = gettemplate("admin/adm_metamatter", true); $message = ''; $message_status = ERR_ERROR; if ($points = sys_get_param_float('points')) { try { $username = sys_get_param_str_unsafe('id_user'); if (empty($username)) { throw new Exception($lang['adm_mm_no_dest']); } $an_account = new Account(classSupernova::$auth->account->db); if (!$an_account->db_get_by_id($username) && !$an_account->db_get_by_name($username) && !$an_account->db_get_by_email($username)) { throw new Exception(sprintf($lang['adm_mm_user_none'], $username)); } if (!$an_account->metamatter_change(RPG_ADMIN, $points, sprintf($lang['adm_matter_change_log_record'], $an_account->account_id, db_escape($an_account->account_name), $user['id'], db_escape($user['username']), db_escape(sys_get_param_str('reason'))))) { throw new Exception($lang['adm_mm_add_err']); } $message = sprintf($lang['adm_mm_user_added'], $an_account->account_name, $an_account->account_id, pretty_number($points)); $isNoError = true; $message_status = ERR_NONE;
<?php try { $template = gettemplate('universe_rename', true); if ($uni_galaxy < 1 || $uni_galaxy > $config->game_maxGalaxy) { throw new exception($lang['uni_msg_error_wrong_galaxy'], ERR_ERROR); } if ($uni_system < 0 || $uni_system > $config->game_maxSystem) { throw new exception($lang['uni_msg_error_wrong_system'], ERR_ERROR); } $uni_row = doquery("select * from `{{universe}}` where `universe_galaxy` = {$uni_galaxy} and `universe_system` = {$uni_system} limit 1;", '', true); $uni_row['universe_price'] += $uni_system ? $config->uni_price_system : $config->uni_price_galaxy; $uni_row['universe_name'] = strip_tags($uni_row['universe_name'] ? $uni_row['universe_name'] : ($uni_system ? "{$lang['sys_system']} [{$uni_galaxy}:{$uni_system}]" : "{$lang['sys_galaxy']} {$uni_galaxy}")); if (sys_get_param_str('uni_name_submit')) { $uni_row['universe_name'] = strip_tags(sys_get_param_str('uni_name')); $uni_price = sys_get_param_float('uni_price'); if ($uni_price < $uni_row['universe_price']) { throw new exception($lang['uni_msg_error_low_price'], ERR_ERROR); } $uni_row['universe_price'] = $uni_price; sn_db_transaction_start(); $user = db_user_by_id($user['id'], true); // if($user[get_unit_param(RES_DARK_MATTER, P_NAME)] < $uni_price) if (mrc_get_level($user, null, RES_DARK_MATTER) < $uni_price) { throw new exception($lang['uni_msg_error_no_dm'], ERR_ERROR); } if (!rpg_points_change($user['id'], RPG_RENAME, -$uni_price, "Renaming [{$uni_galaxy}:{$uni_system}] to " . sys_get_param_str_unsafe('uni_name'))) { throw new exception($lang['sys_msg_err_update_dm'], ERR_ERROR); } doquery("replace {{universe}} set `universe_galaxy` = {$uni_galaxy}, `universe_system` = {$uni_system}, `universe_name` = '{$uni_row['universe_name']}', `universe_price` = {$uni_row['universe_price']};"); $debug->warning(sprintf($lang['uni_msg_admin_rename'], $user['id'], $user['username'], $uni_price, $uni_system ? $lang['uni_system_of'] : $lang['uni_galaxy_of'], $uni_galaxy, $uni_system ? ":{$uni_system}" : '', strip_tags(sys_get_param_str_unsafe('uni_name'))), $lang['uni_naming'], LOG_INFO_UNI_RENAME);
if ($payment_id = sys_get_param_id('payment_id')) { $payment = doquery("SELECT * FROM {{payment}} WHERE `payment_id` = {$payment_id} LIMIT 1;", true); if ($payment && $payment['payment_user_id'] == $user['id']) { if ($payment['payment_status'] == PAYMENT_STATUS_COMPLETE || $payment['payment_status'] == PAYMENT_STATUS_TEST) { $template->assign_block_vars('result', array('MESSAGE' => sprintf($lang['sys_dark_matter_purchase_result_complete'], $payment['payment_dark_matter_paid'], $payment['payment_module_name'], $payment['payment_dark_matter_gained']))); } if ($payment['payment_status'] == PAYMENT_STATUS_NONE) { $template->assign_block_vars('result', array('MESSAGE' => sprintf($lang['sys_dark_matter_purchase_result_incomplete'], $payment['payment_dark_matter_paid'], $payment['payment_module_name']), 'STATUS' => 1)); } if ($payment['payment_status'] == PAYMENT_STATUS_TEST) { $template->assign_block_vars('result', array('MESSAGE' => sprintf($lang['sys_dark_matter_purchase_result_test']), 'STATUS' => -1)); } } } $dm_amount_list =& sn_module_payment::$bonus_table; $request = array('dark_matter' => sys_get_param_float('dark_matter')); $request['dark_matter'] = isset($dm_amount_list[$request['dark_matter']]) ? $request['dark_matter'] : 0; if (!$request['dark_matter']) { unset($_POST); } $payment_module_valid = false; $payment_module = sys_get_param_str('payment_module'); foreach ($sn_module as $module_name => $module) { if (!is_object($module) || $module->manifest['package'] != 'payment' || !$module->manifest['active']) { continue; } lng_include($module_name, $module->manifest['root_relative']); $template->assign_block_vars('payment_module', array('ID' => $module_name, 'NAME' => $lang["module_{$module_name}_name"], 'DESCRIPTION' => $lang["module_{$module_name}_description"])); $payment_module_valid = $payment_module_valid || $module_name == $payment_module; } // If payment_module invalid - making it empty OR if there is only one payment_module - selecting it
case MT_SPY: $fleet_array[SHIP_SPY] = min(mrc_get_level($user, $planetrow, SHIP_SPY), abs($user['spio_anz'])); $unit_group = 'flt_spies'; break; case MT_RECYCLE: foreach (sn_get_groups('flt_recyclers') as $unit_id) { if ($unit_count = mrc_get_level($user, $planetrow, $unit_id)) { $fleet_array[$unit_id] = $unit_count; } } $transport_data = flt_calculate_fleet_to_transport($fleet_array, $target_row['debris_metal'] + $target_row['debris_crystal'], $planetrow, $target_row); $fleet_array = $transport_data['fleet']; $unit_group = 'flt_recyclers'; break; case MT_MISSILE: $fleet_array[UNIT_DEF_MISSILE_INTERPLANET] = min(mrc_get_level($user, $planetrow, UNIT_DEF_MISSILE_INTERPLANET), abs(sys_get_param_float('missiles'))); $unit_group = 'missile'; break; } $options = array('target_structure' => $target_structure = sys_get_param_int('structures')); $cant_attack = flt_can_attack($planetrow, $target_row, $fleet_array, $target_mission, $options); if ($cant_attack != ATTACK_ALLOWED) { die($lang['fl_attack_error'][$cant_attack]); } $FleetDBArray = array(); $db_changeset = array(); foreach ($fleet_array as $unit_id => $unit_count) { $FleetDBArray[] = "{$unit_id},{$unit_count}"; // $db_changeset[] = "`{$unit_db_name}` = `{$unit_db_name}` - {$unit_count}"; $db_changeset['unit'][] = sn_db_unit_changeset_prepare($unit_id, -$unit_count, $user, $planetrow); }
function qst_render_page() { global $lang, $user, $template, $config; $user_id = sys_get_param_id('user_id', false); $mode = sys_get_param_str('mode'); $quest_units_allowed = sn_get_groups(array('structures', 'tech', 'fleet', 'defense')); $quest_reward_allowed = sn_get_groups('quest_rewards'); $in_admin = defined('IN_ADMIN') && IN_ADMIN === true; if ($in_admin) { $quest_id = sys_get_param_id('id'); $quest_name = sys_get_param_str_unsafe('QUEST_NAME'); if (!empty($quest_name)) { $quest_description = sys_get_param_str_unsafe('QUEST_DESCRIPTION'); try { $quest_rewards_list = sys_get_param('QUEST_REWARDS_LIST'); $quest_rewards = array(); foreach ($quest_rewards_list as $quest_rewards_id => $quest_rewards_amount) { if (!in_array($quest_rewards_id, $quest_reward_allowed)) { throw new Exception($lang['qst_adm_err_reward_type']); } if ($quest_rewards_amount < 0) { throw new Exception($lang['qst_adm_err_reward_amount']); } elseif ($quest_rewards_amount > 0) { $quest_rewards[] = "{$quest_rewards_id},{$quest_rewards_amount}"; } } if (empty($quest_rewards)) { throw new Exception($lang['qst_adm_err_reward_empty']); } $quest_rewards = implode(';', $quest_rewards); $quest_unit_id = sys_get_param_int('QUEST_UNIT_ID'); if (!in_array($quest_unit_id, $quest_units_allowed)) { throw new Exception($lang['qst_adm_err_unit_id']); } $quest_unit_amount = sys_get_param_float('QUEST_UNIT_AMOUNT'); if ($quest_unit_amount <= 0) { throw new Exception($lang['qst_adm_err_unit_amount']); } $quest_conditions = "{$quest_unit_id},{$quest_unit_amount}"; // TODO: Change quest type $quest_type = 0; if ($mode == 'edit') { $quest_name = db_escape($quest_name); $quest_description = db_escape($quest_description); doquery("UPDATE {{quest}} SET\n `quest_name` = '{$quest_name}',\n `quest_type` = '{$quest_type}',\n `quest_description` = '{$quest_description}',\n `quest_conditions` = '{$quest_conditions}',\n `quest_rewards` = '{$quest_rewards}'\n WHERE `quest_id` = {$quest_id} LIMIT 1;"); } else { sn_db_perform('{{quest}}', array('quest_name' => $quest_name, 'quest_type' => $quest_type, 'quest_description' => $quest_description, 'quest_conditions' => $quest_conditions, 'quest_rewards' => $quest_rewards)); } // TODO: Add mass mail for new quests /* if(sys_get_param_int('news_mass_mail')) { msg_send_simple_message('*', 0, 0, MSG_TYPE_PLAYER, $lang['sys_administration'], $lang['news_title'], $text); } */ } catch (Exception $e) { message($e->getMessage(), $lang['sys_error']); } $mode = ''; } switch ($mode) { case 'del': doquery("DELETE FROM {{quest}} WHERE `quest_id` = {$quest_id} LIMIT 1;"); $mode = ''; break; case 'edit': $template->assign_var('QUEST_ID', $quest_id); case 'copy': $quest = doquery("SELECT * FROM {{quest}} WHERE `quest_id` = {$quest_id} LIMIT 1;", '', true); break; } $query = doquery("SELECT count(*) AS count FROM {{quest}};", '', true); $config->db_saveItem('quest_total', $query['count']); } elseif (!$user_id) { $user_id = $user['id']; } $quest_list = qst_get_quests($user_id); $template->assign_vars(array('AUTHLEVEL' => $user['authlevel'], 'TOTAL' => count($quest_list), 'mode' => $mode, 'USER_ID' => $user_id, 'IN_ADMIN' => $in_admin)); if ($quest) { $quest_templatized = qst_templatize(qst_quest_parse($quest, false)); } else { $quest_templatized['quest_rewards_list'] = array(); } foreach ($quest_reward_allowed as $unit_id) { $found = false; foreach ($quest_templatized['quest_rewards_list'] as $quest_templatized_reward) { if ($quest_templatized_reward['ID'] == $unit_id) { $found = true; break; } } if (!$found) { $quest_templatized['quest_rewards_list'][$unit_id] = array('ID' => $unit_id, 'NAME' => $lang['tech'][$unit_id], 'AMOUNT' => 0); } } qst_assign_to_template($template, $quest_templatized); foreach ($quest_list as $quest_data) { qst_assign_to_template($template, qst_templatize($quest_data, true), 'quest'); } foreach ($quest_units_allowed as $unit_id) { $template->assign_block_vars('allowed_unit', array('ID' => $unit_id, 'NAME' => $lang['tech'][$unit_id])); } }
function user_time_diff_probe() { $result = array(PLAYER_OPTION_TIME_DIFF => ($time_local = sys_get_param_float('localtime')) ? round($time_local / 1000 - SN_TIME_MICRO) : 0, PLAYER_OPTION_TIME_DIFF_UTC_OFFSET => ($time_local_utc_offset = sys_get_param_int('utc_offset')) ? $time_local_utc_offset - date('Z') : 0, PLAYER_OPTION_TIME_DIFF_FORCED => sys_get_param_int('user_time_diff_forced'), PLAYER_OPTION_TIME_DIFF_MEASURE_TIME => SN_TIME_SQL); return $result; }
protected function payment_request_process($options = array()) { global $lang, $config; if (!$this->manifest['active']) { throw new Exception($lang['pay_msg_module_disabled'], SN_MODULE_DISABLED); } // Если есть payment_id - загружаем под него данные if (!empty($this->payment_params['payment_id'])) { $this->request_payment_id = sys_get_param_id($this->payment_params['payment_id']); if (!$this->request_payment_id) { throw new Exception($lang['pay_msg_request_payment_id_invalid'], SN_PAYMENT_REQUEST_INTERNAL_ID_WRONG); } if (!$this->db_get_by_id($this->request_payment_id)) { throw new Exception($lang['pay_msg_request_payment_id_invalid'], SN_PAYMENT_REQUEST_INTERNAL_ID_WRONG); } // Проверяем - был ли этот платеж обработан? // TODO - Статусы бывают разные. Нужен спецфлаг payment_processed if ($this->payment_status != PAYMENT_STATUS_NONE) { sn_db_transaction_rollback(); sys_redirect(SN_ROOT_VIRTUAL . 'metamatter.php?payment_id=' . $this->payment_id); die; } } // Пытаемся получить из запроса ИД аккаунта $request_account_id = !empty($this->payment_params['account_id']) ? sys_get_param_id($this->payment_params['account_id']) : 0; // Если в запросе нет ИД аккаунта - пытаемся использовать payment_account_id if (empty($request_account_id) && !empty($this->payment_account_id)) { $request_account_id = $this->payment_account_id; } // Если теперь у нас нету ИД аккаунта ни в запросе, ни в записи таблицы - можно паниковать if (empty($request_account_id)) { // TODO - аккаунт throw new Exception($lang['pay_msg_request_user_invalid'], $this->retranslate_error(SN_PAYMENT_REQUEST_USER_NOT_FOUND, $options)); } // Если нет записи в таблице - тогда берем payment_account_id из запроса if (empty($this->payment_account_id)) { $this->payment_account_id = $request_account_id; } // Если у нас отличаются ИД аккаунта в запросе и ИД аккаунта в записи - тоже можно паниковать if ($this->payment_account_id != $request_account_id) { // TODO - Поменять сообщение об ошибке throw new Exception($lang['pay_msg_request_user_invalid'], $this->retranslate_error(SN_PAYMENT_REQUEST_USER_NOT_FOUND, $options)); } // Проверяем существование аккаунта с данным ИД if (!$this->account->db_get_by_id($this->payment_account_id)) { throw new Exception($lang['pay_msg_request_user_invalid'] . ' ID ' . $this->payment_account_id, $this->retranslate_error(SN_PAYMENT_REQUEST_USER_NOT_FOUND, $options)); } // TODO Проверка на сервер_ид - как бы и не нужна, наверное? if (!empty($this->payment_params['server_id'])) { $this->request_server_id = sys_get_param_str($this->payment_params['server_id']); if (SN_ROOT_VIRTUAL != $this->request_server_id) { throw new Exception($lang['pay_msg_request_server_wrong'] . " {$this->request_server_id} вместо " . SN_ROOT_VIRTUAL, SN_PAYMENT_REQUEST_SERVER_WRONG); } } // Сверка количества оплаченной ММ с учётом бонусов if (!empty($this->payment_params['payment_dark_matter_gained'])) { $request_mm_amount = sys_get_param_id($this->payment_params['payment_dark_matter_gained']); if ($request_mm_amount != $this->payment_dark_matter_gained && $this->is_loaded) { throw new Exception($lang['pay_msg_mm_request_amount_invalid'] . " пришло {$request_mm_amount} ММ вместо {$this->payment_dark_matter_gained} ММ", SN_PAYMENT_REQUEST_MM_AMOUNT_INVALID); } empty($this->payment_dark_matter_gained) ? $this->payment_dark_matter_gained = $request_mm_amount : false; } if (empty($this->payment_dark_matter_paid)) { // TODO - обратный расчёт из gained } // Проверка наличия внешнего ИД платежа if (!empty($this->payment_params['payment_external_id'])) { $request_payment_external_id = sys_get_param_id($this->payment_params['payment_external_id']); if (empty($request_payment_external_id)) { throw new exception($lang['pay_msg_request_payment_id_invalid'], SN_PAYMENT_REQUEST_EXTERNAL_ID_WRONG); } elseif (!empty($this->payment_external_id) && $this->payment_external_id != $request_payment_external_id) { // TODO - Может быть поменять сообщение throw new exception($lang['pay_msg_request_payment_id_invalid'], SN_PAYMENT_REQUEST_EXTERNAL_ID_WRONG); } $this->payment_external_id = $request_payment_external_id; } // Сверка суммы, запрошенной СН к оплате if (!empty($this->payment_params['payment_external_money'])) { $request_money_out = sys_get_param_float($this->payment_params['payment_external_money']); if ($request_money_out != $this->payment_external_amount && $this->is_loaded) { throw new Exception($lang['pay_msg_request_payment_amount_invalid'] . " пришло {$request_money_out} денег вместо {$this->payment_external_amount} денег", SN_PAYMENT_REQUEST_CURRENCY_AMOUNT_INVALID); } empty($this->payment_external_amount) ? $this->payment_external_amount = $request_money_out : false; } // Заполняем поле валюты платёжной системы if (!empty($this->payment_params['payment_external_currency'])) { $this->payment_external_currency = sys_get_param_str($this->payment_params['payment_external_currency']); if (empty($this->payment_external_currency)) { // TODO - поменять сообщение throw new Exception($lang['pay_msg_request_payment_amount_invalid'] . " {$this->payment_external_currency}", SN_PAYMENT_REQUEST_CURRENCY_AMOUNT_INVALID); } } if (empty($this->payment_external_currency)) { $this->payment_external_currency = $this->config['currency']; } // Заполнение внутренней суммы и валюты из внешних данных if (empty($this->payment_currency)) { $this->payment_currency = $config->payment_currency_default; } if (empty($this->payment_amount) && !empty($this->payment_external_currency)) { $this->payment_amount = self::currency_convert($this->payment_external_amount, $this->payment_external_currency, $this->payment_currency); } // TODO - Тестовый режим if (!empty($this->payment_params['test'])) { $this->payment_test = $this->config['test'] || sys_get_param_int($this->payment_params['test']); } $this->generate_description(); // // TODO - REMOVE // return array( // 'payer' => $this->account, // ); }