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;
 }
Exemple #2
0
 * @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);
Exemple #3
0
 $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();
Exemple #4
0
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'];
    }
Exemple #6
0
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;
}
Exemple #7
0
    <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;
Exemple #9
0
<?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);
Exemple #10
0
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
Exemple #11
0
    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);
}
Exemple #12
0
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]));
    }
}
Exemple #13
0
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,
     //    );
 }