Example #1
0
function sn_chat_add_model()
{
    global $skip_fleet_update, $config, $user;
    define('IN_AJAX', true);
    $skip_fleet_update = true;
    if ($config->_MODE != CACHER_NO_CACHE && $config->chat_timeout && SN_TIME_MICRO - $config->array_get('users', $user['id'], 'chat_last_activity') > $config->chat_timeout) {
        die;
    }
    if (($message = sys_get_param_str('message')) && $user['username']) {
        $ally_id = sys_get_param('ally') && $user['ally_id'] ? $user['ally_id'] : 0;
        $nick = db_escape(player_nick_compact(player_nick_render_current_to_array($user, array('color' => true, 'icons' => true, 'ally' => !$ally_id))));
        $message = preg_replace("#(?:https?\\:\\/\\/(?:.+)?\\/index\\.php\\?page\\=battle_report\\&cypher\\=([0-9a-zA-Z]{32}))#", "[ube=\$1]", $message);
        doquery("INSERT INTO {{chat}} (chat_message_sender_id, user, ally_id, message, timestamp) VALUES ('{$user['id']}', '{$nick}', '{$ally_id}', '{$message}', " . SN_TIME_NOW . ");");
        $config->array_set('users', $user['id'], 'chat_last_activity', SN_TIME_MICRO);
    }
    die;
}
Example #2
0
 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;
 }
Example #3
0
$result = array();
if (($result_message = sys_get_param_str('MESSAGE')) && isset($lang[$result_message])) {
    $result[] = array('STATUS' => sys_get_param_int('STATUS'), 'MESSAGE' => $lang[$result_message]);
}
$note_id_edit = sys_get_param_id('note_id_edit');
if (sys_get_param('note_delete')) {
    try {
        $not = '';
        $query_where = '';
        switch (sys_get_param_str('note_delete_range')) {
            case 'all':
                break;
            case 'marked_not':
                $not = 'NOT';
            case 'marked':
                if (!is_array($notes_marked = sys_get_param('note'))) {
                    throw new exception('note_err_none_selected', ERR_WARNING);
                }
                $notes_marked_filtered = array();
                foreach ($notes_marked as $note_id => $note_select) {
                    if ($note_select == 'on' && ($note_id = idval($note_id))) {
                        $notes_marked_filtered[] = $note_id;
                    }
                }
                if (empty($notes_marked_filtered)) {
                    throw new exception('note_err_none_selected', ERR_WARNING);
                }
                $notes_marked_filtered = implode(',', $notes_marked_filtered);
                $query_where = "AND `id` {$not} IN ({$notes_marked_filtered})";
                break;
            default:
Example #4
0
             $survey_until = strtotime($survey_until = sys_get_param_str('survey_until'), SN_TIME_NOW);
             $survey_until = date(FMT_DATE_TIME_SQL, $survey_until ? $survey_until : SN_TIME_NOW + PERIOD_DAY * 1);
             doquery("INSERT INTO {{survey}} SET `survey_announce_id` = {$announce_id}, `survey_question` = '{$survey_question}', `survey_until` = '{$survey_until}'");
             $survey_id = db_insert_id();
             foreach ($survey_answers as $survey_answer) {
                 $survey_answer = db_escape(trim($survey_answer));
                 $survey_answer ? doquery("INSERT INTO {{survey_answers}} SET `survey_parent_id` = {$survey_id}, `survey_answer_text` = '{$survey_answer}'") : false;
             }
         }
     }
     if ($announce_time <= SN_TIME_NOW) {
         if ($announce_time > $config->var_news_last && $announce_time == SN_TIME_NOW) {
             $config->db_saveItem('var_news_last', $announce_time);
         }
         if (sys_get_param_int('news_mass_mail')) {
             $text = sys_get_param('text') . ($detail_url ? " <a href=\"{$detail_url}\"><span class=\"positive\">{$lang['news_more']}</span></a>" : '');
             msg_send_simple_message('*', 0, 0, MSG_TYPE_ADMIN, $lang['sys_administration'], $lang['news_title'], $text);
         }
     }
     $mode = '';
     $announce_id = 0;
 }
 $survey_answers = '';
 switch ($mode) {
     case 'del':
         doquery("DELETE FROM {{announce}} WHERE `idAnnounce` = {$announce_id} LIMIT 1;");
         $mode = '';
         break;
     case 'edit':
         $template->assign_var('ID', $announce_id);
     case 'copy':
Example #5
0
         if ($planetrow['id'] == $user['id_planet']) {
             db_user_set_by_id($user['id'], "galaxy = {$new_coordinates['galaxy']}, system = {$new_coordinates['system']}, planet = {$new_coordinates['planet']}");
         }
         // $global_data = sys_o_get_updated($user, $planetrow['id'], SN_TIME_NOW);
         sn_db_transaction_commit();
         $user = db_user_by_id($user['id'], true, '*');
         $planetrow = db_planet_by_id($planetrow['id'], true, '*');
         $result = array('STATUS' => ERR_NONE, 'MESSAGE' => $lang['ov_teleport_err_none']);
         sys_redirect('overview.php?mode=manage');
     } catch (exception $e) {
         sn_db_transaction_rollback();
         $result = array('STATUS' => $e->getCode(), 'MESSAGE' => $e->getMessage());
     }
 } elseif (sys_get_param_str('abandon')) {
     //if(sec_password_encode(sys_get_param('abandon_confirm'), $user['salt']) == $user['password']) {
     if (sec_password_check($user, sys_get_param('abandon_confirm'))) {
         if ($user['id_planet'] != $user['current_planet'] && $user['current_planet'] == $planet_id) {
             $destroyed = SN_TIME_NOW + 60 * 60 * 24;
             db_planet_set_by_id($user['current_planet'], "`destruyed`='{$destroyed}', `id_owner`=0");
             db_planet_set_by_parent($user['current_planet'], "`destruyed`='{$destroyed}', `id_owner`=0");
             db_user_set_by_id($user['id'], '`current_planet` = `id_planet`');
             message($lang['ov_delete_ok'], $lang['colony_abandon'], 'overview.php?mode=manage');
         } else {
             message($lang['ov_delete_wrong_planet'], $lang['colony_abandon'], 'overview.php?mode=manage');
         }
     } else {
         message($lang['ov_delete_wrong_pass'], $lang['colony_abandon'], 'overview.php?mode=manage');
     }
 } elseif (($hire = sys_get_param_int('hire')) && in_array($hire, sn_get_groups('governors')) && (!get_unit_param($hire, P_MAX_STACK) || $planetrow['PLANET_GOVERNOR_ID'] != $hire || $planetrow['PLANET_GOVERNOR_ID'] == $hire && $planetrow['PLANET_GOVERNOR_LEVEL'] < get_unit_param($hire, P_MAX_STACK))) {
     sn_db_transaction_start();
     $user = db_user_by_id($user['id'], true);
Example #6
0
function sn_imperium_view($template = null)
{
    global $user, $lang;
    $planets = array();
    $ques = array();
    $sn_group_factories = sn_get_groups('factories');
    $planet_density = sn_get_groups('planet_density');
    if (sys_get_param('save_production')) {
        $production = sys_get_param('percent');
        if (is_array($production) && !empty($production)) {
            // sn_db_transaction_start();
            $query = array();
            $planet_row_list = db_planet_list_sorted($user, false, '*');
            // while($planet = db_fetch($planet_row_list))
            foreach ($planet_row_list as $planet) {
                foreach ($sn_group_factories as $factory_unit_id) {
                    $unit_db_name_porcent = pname_factory_production_field_name($factory_unit_id);
                    if (get_unit_param($factory_unit_id, P_MINING_IS_MANAGED) && isset($production[$factory_unit_id][$planet['id']]) && ($actual_porcent = intval($production[$factory_unit_id][$planet['id']] / 10)) >= 0 && $actual_porcent <= 10 && $actual_porcent != $planet[$unit_db_name_porcent]) {
                        $query[$planet['id']][] = "{$unit_db_name_porcent} = {$actual_porcent}";
                    }
                }
            }
            foreach ($query as $planet_id => $query_data) {
                db_planet_set_by_id($planet_id, implode(',', $query_data));
            }
            // sn_db_transaction_commit();
        }
    }
    $planet_row_list = db_planet_list_sorted($user);
    // while ($planet = db_fetch($planet_row_list))
    foreach ($planet_row_list as $planet) {
        sn_db_transaction_start();
        $global_data = sys_o_get_updated($user, $planet['id'], SN_TIME_NOW, false, true);
        $planets[$planet['id']] = $global_data['planet'];
        // $ques[$planet['id']] = que_get($user['id'], $planet['id'], false);
        $ques[$planet['id']] = $global_data['que'];
        sn_db_transaction_commit();
    }
    $template = gettemplate('imperium', $template);
    $template->assign_var('amount', count($planets) + 2);
    for ($i = 100; $i >= 0; $i -= 10) {
        $template->assign_block_vars('percent', array('PERCENT' => $i));
    }
    $fleet_id = 1;
    $fleets = array();
    $total['temp_min'] = 1000;
    $total['temp_max'] = -999;
    foreach ($planets as $planet_index => &$planet) {
        $list_planet_que = $ques[$planet_index];
        $planet_template = tpl_parse_planet($planet);
        $planet_fleet_id = 0;
        $fleet_list = $planet_template['fleet_list'];
        //flt_get_fleets_to_planet($planet);
        if ($fleet_list['own']['count']) {
            $planet_fleet_id = "p{$fleet_id}";
            $fleets[] = tpl_parse_fleet_sn($fleet_list['own']['total'], $planet_fleet_id);
            $fleet_id++;
        }
        $template->assign_block_vars('planet', array_merge($planet_template, array('PLANET_FLEET_ID' => $planet_fleet_id, 'METAL_CUR' => pretty_number($planet['metal'], true, $planet['caps']['total_storage'][RES_METAL]), 'METAL_PROD' => pretty_number($planet['caps']['total'][RES_METAL]), 'CRYSTAL_CUR' => pretty_number($planet['crystal'], true, $planet['caps']['total_storage'][RES_CRYSTAL]), 'CRYSTAL_PROD' => pretty_number($planet['caps']['total'][RES_CRYSTAL]), 'DEUTERIUM_CUR' => pretty_number($planet['deuterium'], true, $planet['caps']['total_storage'][RES_DEUTERIUM]), 'DEUTERIUM_PROD' => pretty_number($planet['caps']['total'][RES_DEUTERIUM]), 'ENERGY_CUR' => pretty_number($planet['caps'][RES_ENERGY][BUILD_CREATE] - $planet['caps'][RES_ENERGY][BUILD_DESTROY], true, true), 'ENERGY_MAX' => pretty_number($planet['caps'][RES_ENERGY][BUILD_CREATE]), 'TEMP_MIN' => $planet['temp_min'], 'TEMP_MAX' => $planet['temp_max'], 'DENSITY_CLASS' => $planet['density_index'], 'DENSITY_RICHNESS' => $planet_density[$planet['density_index']][UNIT_PLANET_DENSITY_RICHNESS], 'DENSITY_CLASS_TEXT' => $lang['uni_planet_density_types'][$planet['density_index']])));
        $planet['fleet_list'] = $planet_template['fleet_list'];
        $planet['BUILDING_ID'] = $planet_template['BUILDING_ID'];
        $planet['hangar_que'] = $planet_template['hangar_que'];
        $planet['full_que'] = $list_planet_que;
        $total['fields'] += $planet['field_current'];
        $total['metal'] += $planet['metal'];
        $total['crystal'] += $planet['crystal'];
        $total['deuterium'] += $planet['deuterium'];
        $total['energy'] += $planet['energy_max'] - $planet['energy_used'];
        $total['fields_max'] += eco_planet_fields_max($planet);
        $total['metal_perhour'] += $planet['caps']['total'][RES_METAL];
        $total['crystal_perhour'] += $planet['caps']['total'][RES_CRYSTAL];
        $total['deuterium_perhour'] += $planet['caps']['total'][RES_DEUTERIUM];
        $total['energy_max'] += $planet['caps'][RES_ENERGY][BUILD_CREATE];
        $total['temp_min'] = min($planet['temp_min'], $total['temp_min']);
        $total['temp_max'] = max($planet['temp_max'], $total['temp_max']);
    }
    tpl_assign_fleet($template, $fleets);
    unset($planet);
    $show_groups = array(UNIT_STRUCTURES => 'structures', UNIT_STRUCTURES_SPECIAL => 'structures', UNIT_SHIPS => 'fleet', UNIT_DEFENCE => 'defense');
    foreach ($show_groups as $unit_group_id => $mode) {
        $template->assign_block_vars('prods', array('NAME' => $lang['tech'][$unit_group_id]));
        $unit_group = get_unit_param('techtree', $unit_group_id);
        foreach ($unit_group as $unit_id) {
            $unit_count = $unit_count_abs = 0;
            $block_vars = array();
            $unit_is_factory = in_array($unit_id, $sn_group_factories) && get_unit_param($unit_id, P_MINING_IS_MANAGED);
            // $unit_db_name = pname_resource_name($unit_id);
            foreach ($planets as $planet) {
                $unit_level_plain = mrc_get_level($user, $planet, $unit_id, false, true);
                $level_plus['FACTORY'] = $unit_is_factory;
                $level_plus['LEVEL_PLUS_YELLOW'] = 0;
                $level_plus['LEVEL_PLUS_GREEN'] = 0;
                $level_plus['PERCENT'] = $unit_is_factory ? $unit_level_plain ? $planet[pname_factory_production_field_name($unit_id)] * 10 : -1 : -1;
                switch ($mode) {
                    /*
                    case 'structures':
                      $level_plus_build = $ques[$planet['id']]['in_que'][que_get_unit_que($unit_id)][$user['id']][$planet['id']][$unit_id];
                      if($level_plus_build)
                      {
                        $level_plus['LEVEL_PLUS_GREEN'] = $level_plus_build < 0 ? $level_plus_build : "+{$level_plus_build}";
                        $total['units'][$unit_id]['LEVEL_PLUS_GREEN'] += $level_plus['LEVEL_PLUS_GREEN'];
                      }
                    break;
                    */
                    /** @noinspection PhpMissingBreakStatementInspection */
                    case 'fleet':
                        $level_plus['LEVEL_PLUS_YELLOW'] = $planet['fleet_list']['own']['total'][$unit_id] <= 0 ? $planet['fleet_list']['own']['total'][$unit_id] : "+{$planet['fleet_list']['own']['total'][$unit_id]}";
                        $total['units'][$unit_id]['LEVEL_PLUS_YELLOW'] += $level_plus['LEVEL_PLUS_YELLOW'];
                    case 'structures':
                    case 'defense':
                        $level_plus_build = $ques[$planet['id']]['in_que'][que_get_unit_que($unit_id)][$user['id']][$planet['id']][$unit_id];
                        if ($level_plus_build) {
                            $level_plus['LEVEL_PLUS_GREEN'] = $level_plus_build < 0 ? $level_plus_build : "+{$level_plus_build}";
                            // $level_plus['LEVEL_PLUS_GREEN'] = "+{$level_plus_build}";
                            $total['units'][$unit_id]['LEVEL_PLUS_GREEN'] += $level_plus['LEVEL_PLUS_GREEN'];
                        }
                        break;
                    default:
                        break;
                }
                $block_vars[] = array_merge($level_plus, array('ID' => $planet['id'], 'TYPE' => $planet['planet_type'], 'LEVEL' => $unit_level_plain == 0 && !$level_plus['LEVEL_PLUS_YELLOW'] && !$level_plus['LEVEL_PLUS_GREEN'] ? '-' : $unit_level_plain));
                $unit_count += $unit_level_plain;
                $unit_count_abs += $unit_level_plain + abs($level_plus['LEVEL_PLUS_YELLOW']) + abs($level_plus['LEVEL_PLUS_GREEN']);
            }
            if ($unit_count_abs) {
                $template->assign_block_vars('prods', array('ID' => $unit_id, 'FIELD' => 'unit_' . $unit_id, 'NAME' => $lang['tech'][$unit_id], 'MODE' => $mode));
                foreach ($block_vars as $block_var) {
                    $template->assign_block_vars('prods.planet', $block_var);
                }
                $unit_green = $total['units'][$unit_id]['LEVEL_PLUS_GREEN'];
                $unit_yellow = $total['units'][$unit_id]['LEVEL_PLUS_YELLOW'];
                $template->assign_block_vars('prods.planet', array('ID' => 0, 'LEVEL' => $unit_count, 'LEVEL_PLUS_GREEN' => $unit_green == 0 ? '' : ($unit_green > 0 ? "+{$unit_green}" : $unit_green), 'LEVEL_PLUS_YELLOW' => $unit_yellow == 0 ? '' : ($unit_yellow > 0 ? "+{$unit_yellow}" : $unit_yellow), 'PERCENT' => $unit_is_factory ? '' : -1, 'FACTORY' => $unit_is_factory));
            }
        }
    }
    $template->assign_block_vars('planet', array_merge(array('ID' => 0, 'NAME' => $lang['sys_total'], 'FIELDS_CUR' => $total['fields'], 'FIELDS_MAX' => $total['fields_max'], 'METAL_CUR' => pretty_number($total['metal']), 'METAL_PROD' => pretty_number($total['metal_perhour']), 'CRYSTAL_CUR' => pretty_number($total['crystal']), 'CRYSTAL_PROD' => pretty_number($total['crystal_perhour']), 'DEUTERIUM_CUR' => pretty_number($total['deuterium']), 'DEUTERIUM_PROD' => pretty_number($total['deuterium_perhour']), 'ENERGY_CUR' => pretty_number($total['energy']), 'ENERGY_MAX' => pretty_number($total['energy_max']), 'TEMP_MIN' => $total['temp_min'], 'TEMP_MAX' => $total['temp_max'])));
    $template->assign_vars(array('COLONIES_CURRENT' => get_player_current_colonies($user), 'COLONIES_MAX' => get_player_max_colonies($user), 'EXPEDITIONS_CURRENT' => get_player_current_expeditions($user), 'EXPEDITIONS_MAX' => get_player_max_expeditons($user), 'PLANET_DENSITY_RICHNESS_NORMAL' => PLANET_DENSITY_RICHNESS_NORMAL, 'PLANET_DENSITY_RICHNESS_AVERAGE' => PLANET_DENSITY_RICHNESS_AVERAGE, 'PLANET_DENSITY_RICHNESS_GOOD' => PLANET_DENSITY_RICHNESS_GOOD, 'PLANET_DENSITY_RICHNESS_PERFECT' => PLANET_DENSITY_RICHNESS_PERFECT));
    //$template->assign_recursive($template_result);
    return $template;
}
Example #7
0
}
if ($message_delete) {
    doquery("DELETE FROM {{messages}} WHERE `message_id` in ({$message_delete});");
    $template->assign_block_vars('result', array('MESSAGE' => sprintf($lang['mlst_messages_deleted'], $message_delete)));
}
if (sys_get_param('str_delete_date') && checkdate($month = sys_get_param_id('delete_month'), $day = sys_get_param_id('delete_day'), $year = sys_get_param_id('delete_year'))) {
    $delete_date = "{$year}-{$month}-{$day}";
    doquery("DELETE FROM {{messages}} WHERE message_time <= UNIX_TIMESTAMP('{$delete_date}')" . ($int_type_selected >= 0 ? " AND `message_type` = {$int_type_selected}" : ''));
    $template->assign_block_vars('result', array('MESSAGE' => sprintf($lang['mlst_messages_deleted_date'], $allowed_types[$int_type_selected]['TEXT'], $delete_date)));
}
$page_max = doquery('SELECT COUNT(*) AS `max` FROM {{messages}}' . ($int_type_selected >= 0 ? " WHERE `message_type` = {$int_type_selected};" : ''), true);
$page_max = ceil($page_max['max'] / 25);
$int_page_current = min(sys_get_param_id('int_page_current', 1), $page_max);
if (sys_get_param('page_prev') && $int_page_current > 1) {
    $int_page_current--;
} elseif (sys_get_param('page_next') && $int_page_current < $page_max) {
    $int_page_current++;
}
for ($i = 1; $i <= $page_max; $i++) {
    $template->assign_block_vars('page', array('NUMBER' => $i));
}
/*
$Prev       = ( !empty($_POST['prev'])   ) ? true : false;
$Next       = ( !empty($_POST['next'])   ) ? true : false;
$DelSel     = ( !empty($_POST['delsel']) ) ? true : false;
$DelDat     = ( !empty($_POST['deldat']) ) ? true : false;
$CurrPage   = ( !empty($_POST['curr'])   ) ? $_POST['curr'] : 1;
$SelType    = $_POST['type'];
$SelPage    = $_POST['page'];

$ViewPage = 1;
Example #8
0
define('INSIDE', true);
define('INSTALL', false);
define('IN_ADMIN', true);
require '../common.' . substr(strrchr(__FILE__, '.'), 1);
// if($user['authlevel'] < 2)
if ($user['authlevel'] < 3) {
    AdminMessage($lang['adm_err_denied']);
}
AdminMessage('Временно не работает');
require "includes/admin_planet_edit.inc" . DOT_PHP_EX;
$template = gettemplate('admin/admin_planet_edit', true);
$mode = admin_planet_edit_mode($template, $admin_planet_edit_mode_list);
$planet_id = sys_get_param_id('planet_id');
$unit_list = sys_get_param('unit_list');
if (sys_get_param('change_data') && !empty($unit_list)) {
    $query_string = array();
    foreach ($unit_list as $unit_id => $unit_amount) {
        if ($unit_query_string = admin_planet_edit_query_string($unit_id, $unit_amount, $mode)) {
            $query_string[] = $unit_query_string;
        }
    }
    if (!empty($query_string)) {
        db_planet_set_by_id($planet_id, implode(', ', $query_string));
    }
}
if ($planet_id) {
    $edit_planet_row = db_planet_by_id($planet_id);
    admin_planet_edit_template($template, $edit_planet_row, $mode);
}
foreach ($admin_planet_edit_mode_list as $page_mode => $mode_locale) {
Example #9
0
function sys_get_param_str_both($param_name, $default = '')
{
    $param = strip_tags(trim(sys_get_param($param_name, $default)));
    return array('raw' => $param, 'str' => mysql_real_escape_string($param));
}
Example #10
0
function sys_get_param_str_both($param_name, $default = '')
{
    $param = sys_get_param($param_name, $default);
    $param_unsafe = str_raw2unsafe($param);
    return array('raw' => $param, 'unsafe' => $param_unsafe, 'safe' => db_escape($param_unsafe));
}
Example #11
0
$FlyingFleets = $FlyingFleets['Number'];
if ($MaxFleets <= $FlyingFleets && $fleet_page && $fleet_page != 4) {
    message($lang['fl_noslotfree'], $lang['fl_error'], "fleet." . PHP_EX, 5);
}
$MaxExpeditions = get_player_max_expeditons($user);
if ($MaxExpeditions) {
    $FlyingExpeditions = doquery("SELECT COUNT(fleet_owner) AS `expedi` FROM {{fleets}} WHERE `fleet_owner` = {$user['id']} AND `fleet_mission` = '" . MT_EXPLORE . "';", '', true);
    $FlyingExpeditions = $FlyingExpeditions['expedi'];
} else {
    $FlyingExpeditions = 0;
}
switch ($fleet_page) {
    case 3:
    case 2:
        $fleet_group_mr = sys_get_param_id('fleet_group');
        $fleetarray = unserialize(base64_decode(str_rot13(sys_get_param('usedfleet'))));
        $fleetarray = is_array($fleetarray) ? $fleetarray : array();
        foreach ($fleetarray as $ship_id => &$ship_amount) {
            if (!in_array($ship_id, sn_get_groups('fleet')) || (string) floatval($ship_amount) != $ship_amount || $ship_amount < 1) {
                $debug->warning('Supplying wrong ship in ship list on fleet page', 'Hack attempt', 302, array('base_dump' => true));
                die;
            }
            $ship_amount = floatval($ship_amount);
        }
        $UsedPlanet = false;
        $YourPlanet = false;
        $missiontype = array();
        if ($planet > $config->game_maxPlanet) {
            $target_mission = MT_EXPLORE;
            $missiontype[MT_EXPLORE] = $lang['type_mission'][MT_EXPLORE];
        } elseif ($galaxy && $system && $planet) {
Example #12
0
 public function player_register_model()
 {
     // TODO ВСЕГДА ПРЕДЛАГАТЬ РЕГАТЬ ИГРОКА ИЛИ ПОДКЛЮЧИТЬ ИМЕЮЩЕГОСЯ!
     // TODO в auth_local делать проверку БД на существование имени игрока в локальной БД - что бы избежать лишнего шага (см.выше)
     // TODO Хотя тут может получится вечный цикл - ПОДУМАТЬ
     // TODO Тут же можно пробовать провести попытку слияния аккаунтов - хотя это и очень небезопасно
     if (sys_get_param('login_player_register_logout')) {
         $this->logout();
     }
     $original_suggest = '';
     // Смотрим - есть ли у нас данные от пользователя
     if ($player_name_submitted = sys_get_param('submit_player_name')) {
         // Попытка регистрации нового игрока из данных, введенных пользователем
         $this->player_suggested_name = sys_get_param_str_unsafe('player_suggested_name');
     } else {
         foreach ($this->providers_authorised as $provider) {
             if ($this->player_suggested_name = $provider->player_name_suggest()) {
                 // OK 4.5
                 $original_suggest = $provider->player_name_suggest();
                 break;
             }
         }
     }
     // Если у нас провайдеры не дают имени и пользователь не дал свой вариант - это у нас первый логин в игру
     if (!$this->player_suggested_name) {
         $max_user_id = db_player_get_max_id();
         // 4.5
         // TODO - предлагать имя игрока по локали
         // Проверить наличие такого имени в истории имён
         do {
             sn_db_transaction_rollback();
             $this->player_suggested_name = 'Emperor ' . mt_rand($max_user_id + 1, $max_user_id + 1000);
             sn_db_transaction_start();
         } while (db_player_name_exists($this->player_suggested_name));
     }
     if ($player_name_submitted) {
         $this->register_player_db_create($this->player_suggested_name);
         // OK 4.5
         if ($this->register_status == LOGIN_SUCCESS) {
             sys_redirect(SN_ROOT_VIRTUAL . 'overview.php');
         } elseif ($this->register_status == REGISTER_ERROR_PLAYER_NAME_EXISTS && $original_suggest == $this->player_suggested_name) {
             // self::$player_suggested_name .= ' ' . $this->account->account_id;
         }
         //      if(self::$login_status != LOGIN_SUCCESS) {
         //        // TODO Ошибка при регистрации нового игрока под текущим именем
         //      }
     }
 }
Example #13
0
function sec_login(&$result)
{
    sec_login_prepare($result);
    $username_unsafe = sys_get_param_str_unsafe('username');
    $password_raw = sys_get_param('password');
    $email_unsafe = sys_get_param_str_unsafe('email');
    // Проверяем регу
    if (sys_get_param('register')) {
        $password_repeat_raw = trim(sys_get_param('password_repeat'));
        $language = sys_get_param_str('lang', DEFAULT_LANG);
        if ($password_raw != $password_repeat_raw) {
            // throw new exception(REGISTER_ERROR_PASSWORD_DIFFERENT, ERR_ERROR);
            $result[F_LOGIN_STATUS] = REGISTER_ERROR_PASSWORD_DIFFERENT;
        } else {
            $result[F_LOGIN_STATUS] = sec_login_register($username_unsafe, $password_raw, $email_unsafe, $language, sys_get_param_int('rememberme'));
        }
    }
    // Если есть в параметрах логин и пароль...
    //  if($username_unsafe && $password_raw) {
    //    }
    if (sys_get_param('login') && in_array($result['status'], array(LOGIN_UNDEFINED, REGISTER_SUCCESS))) {
        $result[F_LOGIN_STATUS] = sec_login_username($username_unsafe, $password_raw, sys_get_param_int('rememberme'));
    } elseif (sys_get_param('confirm_code_send') && ($email_unsafe = sys_get_param_str_unsafe('email'))) {
        // TODO - test
        $result[F_LOGIN_STATUS] = sec_restore_password_send_email($email_unsafe);
    } elseif (sys_get_param('confirm_code_submit') && ($confirm_safe = sys_get_param_str('confirm'))) {
        // TODO - test
        sec_restore_password_confirm($confirm_safe, $result);
    }
    // Тут всякие логины по внешним плагинам
    //pdump($result, 'security');
    // В этой точке должен быть установлена кука СН - логинимся по ней
    if (in_array($result['status'], array(LOGIN_UNDEFINED, REGISTER_SUCCESS))) {
        sec_login_cookie($result);
    }
    // TODO -          ЗАМЕНИТЬ F_LOGIN_MESSAGE       на сообщения по   F_LOGIN_STATUS
    // return $result;
}
Example #14
0
         if ($planetrow['id'] == $user['id_planet']) {
             db_user_set_by_id($user['id'], "galaxy = {$new_coordinates['galaxy']}, system = {$new_coordinates['system']}, planet = {$new_coordinates['planet']}");
         }
         // $global_data = sys_o_get_updated($user, $planetrow['id'], SN_TIME_NOW);
         sn_db_transaction_commit();
         $user = db_user_by_id($user['id'], true, '*');
         $planetrow = db_planet_by_id($planetrow['id'], true, '*');
         $result[] = array('STATUS' => ERR_NONE, 'MESSAGE' => $lang['ov_teleport_err_none']);
         sys_redirect('overview.php?mode=manage');
     } catch (exception $e) {
         sn_db_transaction_rollback();
         $result[] = array('STATUS' => $e->getCode(), 'MESSAGE' => $e->getMessage());
     }
 } elseif (sys_get_param_str('action') == 'planet_abandon') {
     // if(sec_password_check($user['id'], sys_get_param('abandon_confirm'))) {
     if (classSupernova::$auth->password_check(sys_get_param('abandon_confirm'))) {
         if ($user['id_planet'] != $user['current_planet'] && $user['current_planet'] == $planet_id) {
             $destroyed = SN_TIME_NOW + 60 * 60 * 24;
             db_planet_set_by_id($user['current_planet'], "`destruyed`='{$destroyed}', `id_owner`=0");
             db_planet_set_by_parent($user['current_planet'], "`destruyed`='{$destroyed}', `id_owner`=0");
             db_user_set_by_id($user['id'], '`current_planet` = `id_planet`');
             message($lang['ov_delete_ok'], $lang['colony_abandon'], 'overview.php?mode=manage');
         } else {
             message($lang['ov_delete_wrong_planet'], $lang['colony_abandon'], 'overview.php?mode=manage');
         }
     } else {
         message($lang['ov_delete_wrong_pass'], $lang['colony_abandon'], 'overview.php?mode=manage');
     }
 } elseif (($hire = sys_get_param_int('hire')) && in_array($hire, sn_get_groups('governors')) && (!get_unit_param($hire, P_MAX_STACK) || $planetrow['PLANET_GOVERNOR_ID'] != $hire || $planetrow['PLANET_GOVERNOR_ID'] == $hire && $planetrow['PLANET_GOVERNOR_LEVEL'] < get_unit_param($hire, P_MAX_STACK))) {
     sn_db_transaction_start();
     $user = db_user_by_id($user['id'], true);
Example #15
0
 * @copyright 2008 By Chlorel for XNova
 */
include 'common.' . substr(strrchr(__FILE__, '.'), 1);
lng_include('fleet');
if ($TargetPlanet = sys_get_param_id('jmpto')) {
    sn_db_transaction_start();
    db_user_by_id($user['id'], true, 'id');
    $planetrow = db_planet_by_id($planetrow['id'], true);
    if (!($NextJumpTime = uni_get_time_to_jump($planetrow))) {
        $TargetGate = db_planet_by_id($TargetPlanet, true, '`id`, `last_jump_time`');
        if (mrc_get_level($user, $TargetGate, STRUC_MOON_GATE) > 0) {
            $NextDestTime = uni_get_time_to_jump($TargetGate);
            if (!$NextDestTime) {
                // $SubQueryOri = "";
                // $SubQueryDes = "";
                $ship_list = sys_get_param('ships');
                $db_changeset = array();
                foreach ($ship_list as $ship_id => $ship_count) {
                    if (!in_array($ship_id, sn_get_groups('fleet'))) {
                        continue;
                    }
                    $ship_count = max(0, min(floor($ship_count), mrc_get_level($user, $planetrow, $ship_id)));
                    if ($ship_count) {
                        $db_changeset['unit'][] = sn_db_unit_changeset_prepare($ship_id, -$ship_count, $user, $planetrow['id']);
                        $db_changeset['unit'][] = sn_db_unit_changeset_prepare($ship_id, $ship_count, $user, $TargetGate['id']);
                    }
                }
                // Dit monsieur, y avait quelque chose a envoyer ???
                if (!empty($db_changeset)) {
                    db_planet_set_by_id($TargetGate['id'], "`last_jump_time` = " . SN_TIME_NOW . "");
                    db_planet_set_by_id($planetrow['id'], "`last_jump_time` = " . SN_TIME_NOW . "");
Example #16
0
             $text = sys_get_param_str_raw('text');
         }
     }
     $subject = $subject ? $subject : $lang['msg_subject_default'];
     $template->assign_vars(array('RECIPIENT_ID' => $recipient_id, 'RECIPIENT_NAME' => $recipient_name, 'SUBJECT' => $subject, 'TEXT' => $text));
     foreach ($error_list as $error_message) {
         $template->assign_block_vars('messages', $error_message);
     }
     break;
 case 'delete':
     $query_add = '';
     $message_range = sys_get_param_str('message_range');
     switch ($message_range) {
         case 'unchecked':
         case 'checked':
             $marked_message_list = sys_get_param('mark', array());
             if ($message_range == 'checked' && empty($marked_message_list)) {
                 break;
             }
             $query_add = implode(',', $marked_message_list);
             if ($query_add) {
                 $query_add = "IN ({$query_add})";
                 if ($message_range == 'unchecked') {
                     $query_add = "NOT {$query_add}";
                 }
                 $query_add = " AND `message_id` {$query_add}";
             }
         case 'class':
             if ($current_class != MSG_TYPE_OUTBOX && $current_class != MSG_TYPE_NEW) {
                 $query_add .= " AND `message_type` = {$current_class}";
             }
Example #17
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]));
    }
}
Example #18
0
function sn_options_model()
{
    global $user, $user_option_list, $lang, $template_result, $config;
    $language_new = sys_get_param_str('langer', $user['lang']);
    if ($language_new != $user['lang']) {
        $lang->lng_switch($language_new);
    }
    lng_include('options');
    lng_include('messages');
    $FMT_DATE = preg_replace(array('/d/', '/m/', '/Y/'), array('DD', 'MM', 'YYYY'), FMT_DATE);
    if (sys_get_param_str('mode') == 'change') {
        if ($user['authlevel'] > 0) {
            $planet_protection = sys_get_param_int('adm_pl_prot') ? $user['authlevel'] : 0;
            db_planet_set_by_owner($user['id'], "`id_level` = '{$planet_protection}'");
            db_user_set_by_id($user['id'], "`admin_protection` = '{$planet_protection}'");
            $user['admin_protection'] = $planet_protection;
        }
        if (sys_get_param_int('vacation') && !$config->user_vacation_disable) {
            sn_db_transaction_start();
            if ($user['authlevel'] < 3) {
                if ($user['vacation_next'] > SN_TIME_NOW) {
                    message($lang['opt_vacation_err_timeout'], $lang['Error'], 'index.php?page=options', 5);
                    die;
                }
                $is_building = doquery("SELECT * FROM `{{fleets}}` WHERE `fleet_owner` = '{$user['id']}' LIMIT 1;", true);
                if ($is_building) {
                    message($lang['opt_vacation_err_your_fleet'], $lang['Error'], 'index.php?page=options', 5);
                    die;
                }
                $que = que_get($user['id'], false);
                if (!empty($que)) {
                    message($lang['opt_vacation_err_que'], $lang['Error'], 'index.php?page=options', 5);
                    die;
                }
                $query = classSupernova::db_get_record_list(LOC_PLANET, "`id_owner` = {$user['id']}");
                foreach ($query as $planet) {
                    // $planet = sys_o_get_updated($user, $planet, SN_TIME_NOW);
                    // $planet = $planet['planet'];
                    db_planet_set_by_id($planet['id'], "last_update = " . SN_TIME_NOW . ", energy_used = '0', energy_max = '0',\n            metal_perhour = '{$config->metal_basic_income}', crystal_perhour = '{$config->crystal_basic_income}', deuterium_perhour = '{$config->deuterium_basic_income}',\n            metal_mine_porcent = '0', crystal_mine_porcent = '0', deuterium_sintetizer_porcent = '0', solar_plant_porcent = '0',\n            fusion_plant_porcent = '0', solar_satelit_porcent = '0', ship_sattelite_sloth_porcent = 0");
                }
                $user['vacation'] = SN_TIME_NOW + $config->player_vacation_time;
            } else {
                $user['vacation'] = SN_TIME_NOW;
            }
            sn_db_transaction_commit();
        }
        foreach ($user_option_list as $option_group_id => $option_group) {
            foreach ($option_group as $option_name => $option_value) {
                if ($user[$option_name] !== null) {
                    $user[$option_name] = sys_get_param_str($option_name);
                } else {
                    $user[$option_name] = $option_value;
                }
            }
        }
        $options = sys_user_options_pack($user);
        $player_options = sys_get_param('options');
        if (!empty($player_options)) {
            array_walk($player_options, function (&$value) {
                // TODO - Когда будет больше параметров - сделать больше проверок
                $value = intval($value);
            });
            classSupernova::$user_options->offsetSet($player_options);
            // pdump($player_options);die();
            //      player_save_option_array($user, $player_options);
        }
        $username = substr(sys_get_param_str_unsafe('username'), 0, 32);
        $username_safe = db_escape($username);
        if ($username && $user['username'] != $username && $config->game_user_changename != SERVER_PLAYER_NAME_CHANGE_NONE && sys_get_param_int('username_confirm') && !strpbrk($username, LOGIN_REGISTER_CHARACTERS_PROHIBITED)) {
            // проверка на корректность
            sn_db_transaction_start();
            $name_check = doquery("SELECT * FROM {{player_name_history}} WHERE `player_name` LIKE \"{$username_safe}\" LIMIT 1 FOR UPDATE;", true);
            if (!$name_check || $name_check['player_id'] == $user['id']) {
                $user = db_user_by_id($user['id'], true);
                switch ($config->game_user_changename) {
                    case SERVER_PLAYER_NAME_CHANGE_PAY:
                        if (mrc_get_level($user, $planetrow, RES_DARK_MATTER) < $config->game_user_changename_cost) {
                            $template_result['.']['result'][] = array('STATUS' => ERR_ERROR, 'MESSAGE' => $lang['opt_msg_name_change_err_no_dm']);
                            break;
                        }
                        rpg_points_change($user['id'], RPG_NAME_CHANGE, -$config->game_user_changename_cost, sprintf('Пользователь ID %d сменил имя с "%s" на "%s"', $user['id'], $user['username'], $username));
                    case SERVER_PLAYER_NAME_CHANGE_FREE:
                        db_user_set_by_id($user['id'], "`username` = '{$username_safe}'");
                        doquery("REPLACE INTO {{player_name_history}} SET `player_id` = {$user['id']}, `player_name` = '{$username_safe}'");
                        // TODO: Change cookie to not force user relogin
                        // sn_setcookie(SN_COOKIE, '', time() - PERIOD_WEEK, SN_ROOT_RELATIVE);
                        $template_result['.']['result'][] = array('STATUS' => ERR_NONE, 'MESSAGE' => $lang['opt_msg_name_changed']);
                        $user['username'] = $username;
                        break;
                }
            } else {
                $template_result['.']['result'][] = array('STATUS' => ERR_ERROR, 'MESSAGE' => $lang['opt_msg_name_change_err_used_name']);
            }
            sn_db_transaction_commit();
        }
        if ($new_password = sys_get_param('newpass1')) {
            try {
                if ($new_password != sys_get_param('newpass2')) {
                    throw new Exception($lang['opt_err_pass_unmatched'], ERR_WARNING);
                }
                if (!classSupernova::$auth->password_change(sys_get_param('db_password'), $new_password)) {
                    throw new Exception($lang['opt_err_pass_wrong'], ERR_WARNING);
                }
                throw new Exception($lang['opt_msg_pass_changed'], ERR_NONE);
            } catch (Exception $e) {
                $template_result['.']['result'][] = array('STATUS' => in_array($e->getCode(), array(ERR_NONE, ERR_WARNING, ERR_ERROR)) ? $e->getCode() : ERR_ERROR, 'MESSAGE' => $e->getMessage());
            }
        }
        $user['email'] = sys_get_param_str('db_email');
        //    if(!$template_result[F_ACCOUNT]['account_email'] && ($email_2 = sys_get_param_str('db_email2'))) {
        //      core_auth::email_set($email_2);
        //    }
        $user['dpath'] = sys_get_param_str('dpath');
        $user['lang'] = sys_get_param_str('langer', $user['lang']);
        //    if($lang->lng_switch($user['lang'])) {
        //      lng_include('options');
        //      lng_include('messages');
        //    }
        $user['design'] = sys_get_param_int('design');
        $user['noipcheck'] = sys_get_param_int('noipcheck');
        // $user['spio_anz'] = sys_get_param_int('spio_anz');
        // $user['settings_fleetactions'] = sys_get_param_int('settings_fleetactions', 1);
        // $user['settings_tooltiptime'] = sys_get_param_int('settings_tooltiptime');
        // $user['settings_esp'] = sys_get_param_int('settings_esp');
        // $user['settings_wri'] = sys_get_param_int('settings_wri');
        // $user['settings_bud'] = sys_get_param_int('settings_bud');
        // $user['settings_mis'] = sys_get_param_int('settings_mis');
        // $user['settings_statistics'] = sys_get_param_int('settings_statistics');
        // $user['settings_info'] = sys_get_param_int('settings_info');
        // $user['settings_rep'] = sys_get_param_int('settings_rep');
        // $user['planet_sort']  = sys_get_param_int('settings_sort');
        // $user['planet_sort_order'] = sys_get_param_int('settings_order');
        $user['deltime'] = !sys_get_param_int('deltime') ? 0 : ($user['deltime'] ? $user['deltime'] : SN_TIME_NOW + $config->player_delete_time);
        $gender = sys_get_param_int('gender', $user['gender']);
        !isset($lang['sys_gender_list'][$gender]) ? $gender = $user['gender'] : false;
        $user['gender'] = $user['gender'] == GENDER_UNKNOWN ? $gender : $user['gender'];
        try {
            if ($user['birthday']) {
                throw new exception();
            }
            $user_birthday = sys_get_param_str_unsafe('user_birthday');
            if (!$user_birthday || $user_birthday == $FMT_DATE) {
                throw new exception();
            }
            // Some black magic to parse any valid date format - those that contains all three "d", "m" and "Y" and any of the delimeters "\", "/", ".", "-"
            $pos['d'] = strpos(FMT_DATE, 'd');
            $pos['m'] = strpos(FMT_DATE, 'm');
            $pos['Y'] = strpos(FMT_DATE, 'Y');
            asort($pos);
            $i = 0;
            foreach ($pos as &$position) {
                $position = ++$i;
            }
            $regexp = "/" . preg_replace(array('/\\\\/', '/\\//', '/\\./', '/\\-/', '/d/', '/m/', '/Y/'), array('\\\\\\', '\\/', '\\.', '\\-', '(\\d?\\d)', '(\\d?\\d)', '(\\d{4})'), FMT_DATE) . "/";
            if (!preg_match($regexp, $user_birthday, $match)) {
                throw new exception();
            }
            if (!checkdate($match[$pos['m']], $match[$pos['d']], $match[$pos['Y']])) {
                throw new exception();
            }
            $user['user_birthday'] = db_escape("{$match[$pos['Y']]}-{$match[$pos['m']]}-{$match[$pos['d']]}");
            // EOF black magic! Now we have valid SQL date in $user['user_birthday'] - independent of date format
            $year = date('Y', SN_TIME_NOW);
            if (mktime(0, 0, 0, $match[$pos['m']], $match[$pos['d']], $year) > SN_TIME_NOW) {
                $year--;
            }
            $user['user_birthday_celebrated'] = db_escape("{$year}-{$match[$pos['m']]}-{$match[$pos['d']]}");
            $user_birthday = ", `user_birthday` = '{$user['user_birthday']}', `user_birthday_celebrated` = '{$user['user_birthday_celebrated']}'";
        } catch (exception $e) {
            $user_birthday = '';
        }
        require_once 'includes/includes/sys_avatar.php';
        $avatar_upload_result = sys_avatar_upload($user['id'], $user['avatar']);
        $template_result['.']['result'][] = $avatar_upload_result;
        $user_time_diff = playerTimeDiff::user_time_diff_get();
        if (sys_get_param_int('PLAYER_OPTION_TIME_DIFF_FORCED')) {
            playerTimeDiff::user_time_diff_set(array(PLAYER_OPTION_TIME_DIFF => sys_get_param_int('PLAYER_OPTION_TIME_DIFF'), PLAYER_OPTION_TIME_DIFF_UTC_OFFSET => 0, PLAYER_OPTION_TIME_DIFF_FORCED => 1, PLAYER_OPTION_TIME_DIFF_MEASURE_TIME => SN_TIME_SQL));
        } elseif (sys_get_param_int('opt_time_diff_clear') || $user_time_diff[PLAYER_OPTION_TIME_DIFF_FORCED]) {
            playerTimeDiff::user_time_diff_set(array(PLAYER_OPTION_TIME_DIFF => '', PLAYER_OPTION_TIME_DIFF_UTC_OFFSET => 0, PLAYER_OPTION_TIME_DIFF_FORCED => 0, PLAYER_OPTION_TIME_DIFF_MEASURE_TIME => SN_TIME_SQL));
        }
        $user_options_safe = db_escape($user['options']);
        db_user_set_by_id($user['id'], "`email` = '{$user['email']}', `lang` = '{$user['lang']}', `avatar` = '{$user['avatar']}',\n      `dpath` = '{$user['dpath']}', `design` = '{$user['design']}', `noipcheck` = '{$user['noipcheck']}',\n      `deltime` = '{$user['deltime']}', `vacation` = '{$user['vacation']}', `options` = '{$user_options_safe}', `gender` = {$user['gender']}\n      {$user_birthday}");
        $template_result['.']['result'][] = array('STATUS' => ERR_NONE, 'MESSAGE' => $lang['opt_msg_saved']);
    } elseif (sys_get_param_str('result') == 'ok') {
        $template_result['.']['result'][] = array('STATUS' => ERR_NONE, 'MESSAGE' => $lang['opt_msg_saved']);
    }
    $user = db_user_by_id($user['id']);
    $options = sys_user_options_unpack($user);
}
Example #19
0
 protected function prepare()
 {
     $this->input_login_unsafe = sys_get_param_str_unsafe('username', sys_get_param_str_unsafe('email'));
     // TODO переделать эту порнографию
     $this->is_login = sys_get_param('login') ? true : false;
     $this->is_register = sys_get_param('register') ? true : false;
     $this->is_password_reset = sys_get_param('password_reset') ? true : false;
     $this->is_password_reset_confirm = sys_get_param('password_reset_confirm') ? true : false;
     $this->remember_me = intval(sys_get_param_int('rememberme') || $this->is_register);
     $this->input_login_password_raw = sys_get_param('password');
     $this->input_login_password_raw_repeat = sys_get_param('password_repeat');
     $this->input_email_unsafe = sys_get_param_str_unsafe('email');
     $this->input_language_unsafe = sys_get_param_str_unsafe('lang', DEFAULT_LANG);
     $this->input_language_safe = sys_get_param_str('lang', DEFAULT_LANG);
 }
Example #20
0
<?php

/**
 * login.php
 *
 * @version 2.0 Security checks & tests by Gorlum for http://supernova.ws
 * @version 1.1 Security checks & tests by Gorlum for http://supernova.ws
 * @version 1.0
 * @copyright 2008 by ?????? for XNova
 */
define('LOGIN_LOGOUT', true);
$allow_anonymous = true;
include 'includes/init.' . substr(strrchr(__FILE__, '.'), 1);
// die();
if ($template_result[F_USER_IS_AUTHORIZED]) {
    sys_redirect('index' . DOT_PHP_EX);
}
lng_include('login');
lng_include('admin');
$username_unsafe = sys_get_param_str_unsafe('username');
$password_raw = trim(sys_get_param('password'));
$password_repeat_raw = trim(sys_get_param('password_repeat'));
$email = sys_get_param_str('email');
$template = gettemplate('login_body', true);
$template->assign_vars(array('last_user' => db_user_last_registered_username(), 'online_users' => db_user_count(true), 'id_ref' => sys_get_param_int('id_ref'), 'F_LOGIN_MESSAGE' => $template_result[F_LOGIN_MESSAGE], 'F_LOGIN_STATUS' => $template_result[F_LOGIN_STATUS], 'LOGIN_ERROR_USERNAME' => LOGIN_ERROR_USERNAME, 'LOGIN_ERROR_PASSWORD' => LOGIN_ERROR_PASSWORD, 'REGISTER_ERROR_EMAIL_EXISTS' => REGISTER_ERROR_EMAIL_EXISTS, 'PASSWORD_RESTORE_ERROR_WRONG_EMAIL' => PASSWORD_RESTORE_ERROR_EMAIL_NOT_EXISTS, 'USERNAME' => htmlentities($username_unsafe, ENT_QUOTES, 'UTF-8'), 'EMAIL' => htmlentities($email, ENT_QUOTES, 'UTF-8'), 'PASSWORD' => htmlentities($password_raw, ENT_QUOTES, 'UTF-8'), 'PASSWORD_REPEAT' => htmlentities($password_repeat_raw, ENT_QUOTES, 'UTF-8'), 'URL_RULES' => $config->url_rules, 'URL_FORUM' => $config->url_forum, 'URL_FAQ' => $config->url_faq, 'GAME_BLITZ' => $config->game_mode == GAME_BLITZ));
tpl_login_lang($template);
display($template, $lang['Login'], false, '', false, false);
Example #21
0
<?php

define('INSIDE', true);
define('INSTALL', false);
define('IN_ADMIN', true);
require '../common.' . substr(strrchr(__FILE__, '.'), 1);
if ($user['authlevel'] < 2) {
    AdminMessage($lang['adm_err_denied']);
}
$mode = sys_get_param_str('mode');
$mode = in_array($mode, array('structures', 'fleet', 'defense', 'resources_loot')) ? $mode : 'structures';
$planet_id = sys_get_param_int('planet_id');
$unit_list = sys_get_param('unit_list');
if (sys_get_param('change_data')) {
    $query_string = array();
    foreach ($unit_list as $unit_id => $unit_amount) {
        if (!$unit_amount || !in_array($unit_id, $sn_data['groups'][$mode])) {
            continue;
        }
        $unit_amount = intval($unit_amount);
        $query_string[] = "{$sn_data[$unit_id]['name']} = GREATEST(0, {$sn_data[$unit_id]['name']} + ({$unit_amount}))";
    }
    $query_string = implode(', ', $query_string);
    if ($query_string) {
        doquery("UPDATE {{planets}} SET {$query_string} WHERE id = {$planet_id} LIMIT 1;");
    }
}
$template = gettemplate('admin/admin_planet_edit', true);
if ($planet_id) {
    $edit_planet_row = doquery("SELECT * FROM {{planets}} WHERE `id` = {$planet_id}", '', true);
}
Example #22
0
<?php

/**
 * login.php
 *
 * @version 2.0 Security checks & tests by Gorlum for http://supernova.ws
 * @version 1.1 Security checks & tests by Gorlum for http://supernova.ws
 * @version 1.0
 * @copyright 2008 by ?????? for XNova
 */
include 'includes/init.' . substr(strrchr(__FILE__, '.'), 1);
lng_include('login');
lng_include('admin');
$id_ref = sys_get_param_int('id_ref');
$username = sys_get_param('username');
$password = sys_get_param('password');
if ($username) {
    $result = sn_login($username, $password, $_POST['rememberme']);
    switch ($result['status']) {
        case LOGIN_SUCCESS:
            $user = $result['user_row'];
            header('Location: overview.php');
            break;
        case LOGIN_ERROR_USERNAME:
        case LOGIN_ERROR_PASSWORD:
            message($result['error_msg'], $lang['Login_Error']);
            break;
        default:
    }
    die;
} elseif (!empty($_COOKIE[$config->COOKIE_NAME])) {
Example #23
0
// Может добавить спецстатус "Ответ системы платежа" и парсить дальше getMessage
// см constants.php
include_once 'common.' . substr(strrchr(__FILE__, '.'), 1);
if (!sn_module_get_active_count('payment')) {
    sys_redirect('overview.php');
    die;
}
global $config;
lng_include('payment');
$template = gettemplate('metamatter', true);
$player_currency_default = player_load_option($user, PLAYER_OPTION_CURRENCY_DEFAULT);
$player_currency = sys_get_param_str('player_currency', $player_currency_default);
empty($lang['pay_currency_list'][$player_currency]) ? $player_currency = $player_currency_default ? $player_currency_default : $config->payment_currency_default : false;
$player_currency_default != $player_currency ? player_save_option($user, PLAYER_OPTION_CURRENCY_DEFAULT, $player_currency) : false;
// Конвертация ММ в ТМ
if (sys_get_param('mm_convert_do')) {
    try {
        if (!($mm_convert = sys_get_param_id('mm_convert'))) {
            throw new exception($lang['pay_msg_mm_convert_wrong_amount'], ERR_ERROR);
        }
        sn_db_transaction_start();
        $user = db_user_by_id($user['id'], true);
        if ($mm_convert > mrc_get_level($user, null, RES_METAMATTER)) {
            throw new exception($lang['pay_msg_mm_convert_not_enough'], ERR_ERROR);
        }
        $payment_comment = sprintf("Игрок сконвертировал %d Метаматерии в Тёмную Материю", $mm_convert);
        if (!mm_points_change($user['id'], RPG_CONVERT_MM, -$mm_convert, $payment_comment)) {
            throw new exception($lang['pay_msg_mm_convert_mm_error'], ERR_ERROR);
        }
        if (!rpg_points_change($user['id'], RPG_CONVERT_MM, $mm_convert, $payment_comment)) {
            throw new exception($lang['pay_msg_mm_convert_dm_error'], ERR_ERROR);
Example #24
0
    $config->fleet_bashing_waves = sys_get_param_int('fleet_bashing_waves', 3);
    $config->allow_buffing = sys_get_param_int('allow_buffing');
    $config->ally_help_weak = sys_get_param_int('ally_help_weak');
    $config->game_email_pm = sys_get_param_int('game_email_pm');
    $config->rpg_exchange_metal = sys_get_param_int('rpg_exchange_metal', 1);
    $config->rpg_exchange_crystal = sys_get_param_int('rpg_exchange_crystal', 2);
    $config->rpg_exchange_deuterium = sys_get_param_int('rpg_exchange_deuterium', 4);
    $config->rpg_exchange_darkMatter = sys_get_param_int('rpg_exchange_darkMatter', 1000);
    $config->initial_fields = sys_get_param_int('initial_fields', 200);
    $config->metal_basic_income = sys_get_param_int('metal_basic_income', 40);
    $config->crystal_basic_income = sys_get_param_int('crystal_basic_income', 20);
    $config->deuterium_basic_income = sys_get_param_int('deuterium_basic_income', 10);
    $config->energy_basic_income = sys_get_param_int('energy_basic_income');
    $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->db_saveAll();
    $template->assign_var('MESSAGE', $lang['adm_opt_saved']);
}
$template->assign_vars(array('game_disable' => $config->game_disable ? 'checked' : '', 'advGoogleLeftMenuIsOn' => $config->advGoogleLeftMenuIsOn ? 'checked' : '', 'debug' => $config->debug ? 'checked' : '', 'game_counter' => $config->game_counter ? 'checked' : '', 'user_vacation_disable' => $config->user_vacation_disable ? 'checked' : '', 'ALLOW_BUFFING' => $config->allow_buffing, 'ALLY_HELP_WEAK' => $config->ally_help_weak, 'GAME_EMAIL_PM' => $config->game_email_pm, 'game_mode' => $config->game_mode, 'game_language' => $config->game_default_language));
foreach ($lang['sys_game_mode'] as $mode_id => $mode_name) {
    $template->assign_block_vars('game_modes', array('ID' => $mode_id, 'NAME' => $mode_name));
}
$lang_list = lng_get_list();
foreach ($lang_list as $lang_id => $lang_data) {
    $template->assign_block_vars('game_languages', array('ID' => $lang_id, 'NAME' => "{$lang_data['LANG_NAME_NATIVE']} ({$lang_data['LANG_NAME_ENGLISH']})"));
}
display(parsetemplate($template), $lang['adm_opt_title'], false, '', true);
Example #25
0
     $user['username'] = $username;
     $username = mysql_real_escape_string($username);
     // TODO: Change cookie to not force user relogin
     setcookie(COOKIE_NAME, '', time() - 100000, '/', '', 0);
     //le da el expire
     $template->assign_var('CHANGE_NAME', true);
 } else {
     $username = mysql_real_escape_string($user['username']);
 }
 $new_password = sys_get_param('newpass1');
 if ($new_password) {
     try {
         if (md5(sys_get_param('db_password')) != $user['password']) {
             throw new Exception('', 1);
         }
         if ($new_password != sys_get_param('newpass2')) {
             throw new Exception('', 2);
         }
         $user['password'] = md5($new_password);
         // TODO: Change cookie to not force user relogin
         setcookie(COOKIE_NAME, '', time() - 100000, '/', '', 0);
         //le da el expire
         $template->assign_var('CHANGE_PASS', -1);
     } catch (Exception $e) {
         $template->assign_var('CHANGE_PASS', $e->getCode());
     }
 }
 $user['email'] = sys_get_param_str('db_email');
 $user['dpath'] = sys_get_param_str('dpath');
 $user['lang'] = $language = sys_get_param_str('langer', $language);
 $user['avatar'] = sys_get_param_str('avatar');
Example #26
0
            adm_lng_write_string($arr_name, $arr_data, $ident . '  ', $string_name_prefix);
        }
        fwrite($file_handler, "{$ident}),\r\n");
    }
    fwrite($file_handler, "\r\n");
}
$template = gettemplate('admin/admin_locale', true);
lng_include('system');
lng_include('tech');
lng_include('admin');
$languages = array();
$language_domains = array();
$languages_info = lng_get_list();
$domain = sys_get_param_str('domain');
if ($domain) {
    $lang_new = sys_get_param('lang_new');
    if (!empty($lang_new)) {
        $constants = get_defined_constants(true);
        $constants = $constants['user'];
        ksort($constants);
        foreach ($languages_info as $lang_id => $land_data) {
            $file_handler = fopen(SN_ROOT_PHYSICAL . "language/{$lang_id}/{$domain}.mo.php.new", 'w');
            fwrite($file_handler, "<?php\r\n\r\n/*\r\n#############################################################################\n#  Filename: {$domain}.mo.php\n#  Project: SuperNova.WS\n#  Website: http://www.supernova.ws\n#  Description: Massive Multiplayer Online Browser Space Startegy Game\r\n#\r\n");
            foreach ($land_data['LANG_COPYRIGHT'] as $lang_copyright) {
                $lang_copyright = str_replace(array('&copy;', '&quot;', '&lt;', '&gt;'), array('©', '"', '<', '>'), $lang_copyright);
                fwrite($file_handler, "#  {$lang_copyright}\r\n");
            }
            fwrite($file_handler, "#############################################################################\r\n*/\r\n\n/**\r\n*\r\n* @package language\r\n* @system [{$land_data['LANG_NAME_ENGLISH']}]\r\n* @version " . SN_VERSION . "\r\n*\r\n*/\r\n\n/**\r\n* DO NOT CHANGE\r\n*/\r\n\r\nif (!defined('INSIDE')) die();\r\n\n\$a_lang_array = array(\r\n");
            foreach ($lang_new as $string_name => $string_value) {
                adm_lng_write_string($string_name, $string_value);
            }
Example #27
0
function eco_bld_hangar($que_type, $user, &$planet)
{
    global $lang;
    if (mrc_get_level($user, $planet, STRUC_FACTORY_HANGAR) == 0) {
        message($lang['need_hangar'], $lang['tech'][STRUC_FACTORY_HANGAR]);
    }
    $page_mode = $que_type == SUBQUE_FLEET ? 'fleet' : 'defense';
    switch (sys_get_param_str('action')) {
        case 'clear':
            que_delete($que_type, $user, $planet, true);
            break;
        case 'trim':
            que_delete($que_type, $user, $planet, false);
            break;
            //case 'build':$operation_result = que_build($user, $planet);break;
            //case 'build':$operation_result = eco_bld_tech_research($user, $planet);break;
    }
    $template = gettemplate("buildings_hangar", true);
    if (sys_unit_arr2str(sys_get_param('fmenge'))) {
        $operation_result = que_build($user, $planet);
    }
    if (!empty($operation_result)) {
        $template->assign_block_vars('result', $operation_result);
    }
    $page_error = '';
    $sn_data_group = sn_get_groups($page_mode);
    $ques = que_get($user['id'], $planet['id'], $que_type);
    $que =& $ques['ques'][$que_type][$user['id']][$planet['id']];
    $in_que =& $ques['in_que'][$que_type][$user['id']][$planet['id']];
    $silo_capacity_free = mrc_get_level($user, $planet, STRUC_SILO) * get_unit_param(STRUC_SILO, P_CAPACITY);
    $group_missile = sn_get_groups('missile');
    foreach ($group_missile as $unit_id) {
        $silo_capacity_free -= (mrc_get_level($user, $planet, $unit_id, false, true) + (isset($in_que[$unit_id]) && $in_que[$unit_id] ? $in_que[$unit_id] : 0)) * get_unit_param($unit_id, P_UNIT_SIZE);
    }
    $silo_capacity_free = max(0, $silo_capacity_free);
    $TabIndex = 0;
    foreach ($sn_data_group as $unit_id) {
        $unit_info = get_unit_param($unit_id);
        $build_data = eco_get_build_data($user, $planet, $unit_id);
        if ($build_data['RESULT'][BUILD_CREATE] == BUILD_REQUIRE_NOT_MEET) {
            continue;
        }
        $unit_message = '';
        $ElementCount = mrc_get_level($user, $planet, $unit_id);
        // Restricting $can_build by resources on planet and (where applicable) with max count per unit
        $can_build = $unit_info[P_MAX_STACK] ? max(0, $unit_info[P_MAX_STACK] - $in_que[$unit_id] - $ElementCount) : $build_data['CAN'][BUILD_CREATE];
        // Restricting $can_build by free silo capacity
        $can_build = ($unit_is_missile = in_array($unit_id, $group_missile)) ? min($can_build, floor($silo_capacity_free / $unit_info[P_UNIT_SIZE])) : $can_build;
        if (!$can_build) {
            if (!$build_data['CAN'][BUILD_CREATE]) {
                $unit_message = $lang['sys_build_result'][BUILD_NO_RESOURCES];
            } elseif ($unit_is_missile && $silo_capacity_free < $unit_info[P_UNIT_SIZE]) {
                $unit_message = $lang['b_no_silo_space'];
            } elseif ($unit_info[P_MAX_STACK]) {
                $unit_message = $lang['only_one'];
            }
        } else {
            $TabIndex++;
        }
        $temp[RES_METAL] = floor($planet['metal'] - $build_data[BUILD_CREATE][RES_METAL]);
        // + $fleet_list['own']['total'][RES_METAL]
        $temp[RES_CRYSTAL] = floor($planet['crystal'] - $build_data[BUILD_CREATE][RES_CRYSTAL]);
        // + $fleet_list['own']['total'][RES_CRYSTAL]
        $temp[RES_DEUTERIUM] = floor($planet['deuterium'] - $build_data[BUILD_CREATE][RES_DEUTERIUM]);
        // + $fleet_list['own']['total'][RES_DEUTERIUM]
        $template->assign_block_vars('production', array('ID' => $unit_id, 'NAME' => $lang['tech'][$unit_id], 'DESCRIPTION' => $lang['info'][$unit_id]['description_short'], 'LEVEL' => $ElementCount, 'LEVEL_OLD' => mrc_get_level($user, $planet, $unit_id), 'LEVEL_CHANGE' => $que['in_que'][$unit_id], 'BUILD_CAN' => $can_build, 'TIME' => pretty_time($build_data[RES_TIME][BUILD_CREATE]), 'METAL' => $build_data[BUILD_CREATE][RES_METAL], 'CRYSTAL' => $build_data[BUILD_CREATE][RES_CRYSTAL], 'DEUTERIUM' => $build_data[BUILD_CREATE][RES_DEUTERIUM], 'METAL_PRINT' => pretty_number($build_data[BUILD_CREATE][RES_METAL], true, $planet['metal']), 'CRYSTAL_PRINT' => pretty_number($build_data[BUILD_CREATE][RES_CRYSTAL], true, $planet['crystal']), 'DEUTERIUM_PRINT' => pretty_number($build_data[BUILD_CREATE][RES_DEUTERIUM], true, $planet['deuterium']), 'DESTROY_CAN' => $build_data['CAN'][BUILD_DESTROY], 'DESTROY_TIME' => pretty_time($build_data[RES_TIME][BUILD_DESTROY]), 'DESTROY_METAL' => $build_data[BUILD_DESTROY][RES_METAL], 'DESTROY_CRYSTAL' => $build_data[BUILD_DESTROY][RES_CRYSTAL], 'DESTROY_DEUTERIUM' => $build_data[BUILD_DESTROY][RES_DEUTERIUM], 'METAL_REST' => pretty_number($temp[RES_METAL], true, true), 'CRYSTAL_REST' => pretty_number($temp[RES_CRYSTAL], true, true), 'DEUTERIUM_REST' => pretty_number($temp[RES_DEUTERIUM], true, true), 'METAL_REST_NUM' => $temp[RES_METAL], 'CRYSTAL_REST_NUM' => $temp[RES_CRYSTAL], 'DEUTERIUM_REST_NUM' => $temp[RES_DEUTERIUM], 'ARMOR' => pretty_number($unit_info[P_ARMOR]), 'SHIELD' => pretty_number($unit_info[P_SHIELD]), 'WEAPON' => pretty_number($unit_info[P_ATTACK]), 'TABINDEX' => $TabIndex, 'MESSAGE' => $unit_message));
    }
    //$hangar_busy
    $template->assign_vars(array('noresearch' => $NoFleetMessage, 'error_msg' => $page_error, 'MODE' => $que_type, 'QUE_ID' => $que_type, 'TIME_NOW' => SN_TIME_NOW, 'HANGAR_BUSY' => eco_hangar_is_building($que), 'QUE_HAS_PLACE' => empty($que) || count($que) < que_get_max_que_length($user, $planet, $que_type)));
    // tpl_assign_hangar($que_type, $planet, $template);
    // $ques = que_get($que_type, $user['id'], $planet['id']);
    que_tpl_parse($template, $que_type, $user, $planet);
    display(parsetemplate($template), $lang[$page_mode]);
}