Редирект игроков между серверами

  1. Оффлайн
    Templar Ламер
    На проекте с:
    2 июл 2013
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Как сделать чтобы на одной страничке были видны 8 серверов, а не 7? Кто может помочь?
    Templar, 18 окт 2013
  2. Оффлайн
    sabas Ламер
    На проекте с:
    9 окт 2011
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Может кто-то из пользователей смог решить проблему с новым клиентом стим на новом билде !?
    sabas, 14 янв 2014
  3. Оффлайн
    Slowpoked ACP мембер
    На проекте с:
    25 янв 2011
    Сообщения:
    349
    Симпатии:
    73
    Баллы:
    28
    Вроде бы работал:
    PHP:
    /*
    *********************************************************************************
    *
    *  Multiserver Redirect v1.6 (updated)
    *  Last Update: 14/04/2013
    *  © a114 Team
    *
    *  Original plugin by Sho0ter: http://amx-x.ru/viewtopic.php?f=12&t=3033
    *  Modified by Hafner: http://www.a114games.com/community/threads/1657/
    *
    *
    *********************************************************************************
    */
     
    #include <amxmodx>
    #include <amxmisc>
    #include <sqlx>
     
    #define ACP_GENERAL
     
    #if defined ACP_GENERAL
        #include <acp>
    #endif
     
    #define PLUGIN "Multiserver Redirect"
    #define VERSION "1.6"
    #define AUTHOR "Sho0ter & Modified by Hafner"
     
    #define CONNECT_CHECK 0
    #define MENU_CHECK 1
     
    #define REDIRECT_FALSE 0
    #define REDIRECT_IGNORE 1
    #define REDIRECT_TRUE 2
     
    #define UPDATE_TASK 21387
     
    #define column(%1) SQL_FieldNameToNum(query, %1)
     
    new Handle:tuple
     
    new Array:retries_ids
    new Array:retries_servers
     
    new Array:server_name
    new Array:server_ip
    new Array:server_map
    new Array:server_players
    new Array:server_maxplayers
    new Array:server_viewplayers
    new Array:server_admins
    new Array:server_password
    new Array:server_online
    new Array:server_slots
     
    new query_cache[2048]
     
    new 
    menu_position[33]
    new 
    sub_data[33]
     
    new 
    current_serverg_serverIDg_redirect
     
    new pcvar_sql_hostpcvar_sql_userpcvar_sql_passpcvar_sql_db
    new pcvar_joinpcvar_retrypcvar_updatepcvar_adminspcvar_flagpcvar_ippcvar_erasepcvar_hide
     
    new maxplayersadminsg_serverip[22], g_password[32], g_reservationg_hideslots
     
    public plugin_init()
    {
        
    register_plugin(PLUGINVERSIONAUTHOR)
     
        
    register_dictionary("acp_multiserver_redirect.txt")
     
        
    server_name ArrayCreate(64)
        
    server_ip ArrayCreate(32)
        
    server_map ArrayCreate(32)
        
    server_password ArrayCreate(32)
        
    server_players ArrayCreate(1)
        
    server_maxplayers ArrayCreate(1)
        
    server_viewplayers ArrayCreate(1)
        
    server_admins ArrayCreate(1)
        
    server_online ArrayCreate(1)
        
    server_slots ArrayCreate(1)
     
        
    retries_ids ArrayCreate(1)
        
    retries_servers ArrayCreate(1)
     
        
    pcvar_sql_host register_cvar("acp_sql_host""localhost")
        
    pcvar_sql_user register_cvar("acp_sql_user""root")
        
    pcvar_sql_pass register_cvar("acp_sql_pass""")
        
    pcvar_sql_db register_cvar("acp_sql_db""amx")
     
        
    pcvar_join register_cvar("msr_join""1")
        
    pcvar_retry register_cvar("msr_retry""0")
        
    pcvar_admins register_cvar("msr_show_admins""0")
        
    pcvar_update register_cvar("msr_updaterate""1.0")
        
    pcvar_flag register_cvar("msr_admin_flag""b")
        
    pcvar_ip register_cvar("msr_serverip""")
        
    pcvar_erase register_cvar("msr_erase_hostname""")
        
    pcvar_hide register_cvar("msr_hide_offline""1")
     
        
    register_clcmd("say /server""cmd_server")
        
    register_clcmd("say_team /server""cmd_server")
     
        
    register_menucmd(register_menuid("redirect menu"), 1023"main_menu")
        
    register_menucmd(register_menuid("redirect sub menu"), 1023"sub_menu")
     
        
    maxplayers get_maxplayers()
     
        return 
    PLUGIN_CONTINUE
    }
     
    public 
    plugin_cfg()
    {
        new 
    configsDir[64]
        
    get_configsdir(configsDir63)
     
        
    server_cmd("exec %s/acp/sql.cfg"configsDir)
        
    server_cmd("exec %s/acp/multiserver_redirect.cfg"configsDir)
     
        
    get_pcvar_string(get_cvar_pointer("sv_password"), g_password31)
     
        
    g_reservation get_cvar_num("amx_reservation")
        if(
    get_cvar_num("amx_hideslots") > 0)
        {
            
    g_hideslots g_reservation
        
    }
        else
        {
            
    g_hideslots 0
        
    }
     
        
    get_pcvar_string(pcvar_ipg_serverip21)
        if(!
    strlen(g_serverip))
        {
            
    get_user_ip(0g_serverip21)
        }
     
        
    #if !defined ACP_GENERAL
            
    set_task(1.0"sql_init")
        
    #endif
     
        
    return PLUGIN_CONTINUE
    }
     
    #if defined ACP_GENERAL
        
    public acp_sql_initialized(Handle:sqlTuple)
        {
            if( 
    tuple != Empty_Handle )
            {
                
    log_amx("[MSR] DB Info Tuple from acp_general initialized twice!")
                return 
    PLUGIN_HANDLED
            
    }
     
            
    tuple sqlTuple
     
            
    if ( tuple == Empty_Handle )
            {
                
    log_amx("[MSR] DB Info Tuple from acp_multiserver_redirect is empty! Trying to get a valid one")
     
                new 
    host[32], user[32], pass[32], db[32]
                
    get_pcvar_string(pcvar_sql_hosthost31);
                
    get_pcvar_string(pcvar_sql_useruser31);
                
    get_pcvar_string(pcvar_sql_passpass31);
                
    get_pcvar_string(pcvar_sql_dbdb31);
     
                
    tuple SQL_MakeDbTuple(hostuserpassdb)
            }
     
            
    g_serverID acp_get_server_id()
            if( 
    g_serverID )
            {
                
    g_redirect true
                set_task
    (get_pcvar_float(pcvar_update), "update_data"UPDATE_TASK__"b")
            }
            else
            {
                
    log_amx("[MSR] %L"LANG_SERVER"MSR_NO_SERVERINFO")
            }
     
            return 
    PLUGIN_HANDLED
        
    }
     
    #else
     
        
    public sql_init()
        {
            new 
    host[64], user[64], pass[64], dbname[64]
     
            
    get_pcvar_string(pcvar_sql_host,host,31);
            
    get_pcvar_string(pcvar_sql_user,user,31);
            
    get_pcvar_string(pcvar_sql_pass,pass,31);
            
    get_pcvar_string(pcvar_sql_db,dbname,31);
     
            
    tuple SQL_MakeDbTuple(hostuserpassdbname)
     
            new 
    error[1024], errornum
     
            
    new Handle:connect SQL_Connect(tupleerrornumerror1023)
            if(
    connect == Empty_Handle)
            {
                
    log_amx("[MSR] %L"LANG_SERVER"MSR_SQL_CANT_CON"errornumerror)
            }
            else
            {
                new 
    Handle:query
     
                query 
    SQL_PrepareQuery(connect"SELECT `id` FROM `acp_servers` WHERE address = '%s' LIMIT 1"g_serverip)
     
                if (!
    SQL_Execute(query))
                {
                    
    SQL_QueryError(queryerror127)
                    
    log_amx("[MSR] %L"LANG_SERVER"MSR_CANT_LOAD_SERVERS"error)
                }
                else if (!
    SQL_NumResults(query))
                {
                    
    log_amx("[MSR] %L"LANG_SERVER"MSR_NO_SERVERINFO")
                }
                else
                {
                    
    g_serverID SQL_ReadResult(query0);
                    
    g_redirect true
                    set_task
    (get_pcvar_float(pcvar_update), "update_data"UPDATE_TASK__"b")
                }
     
                
    SQL_FreeHandle(connect)
            }
        }
    #endif
     
    public client_authorized(id)
    {
        new 
    redirect_server[32], redirect_password[32]
        switch(
    is_can_redirect(id_redirect_server31redirect_password31CONNECT_CHECK))
        {
            case 
    REDIRECT_FALSEserver_cmd("kick #%d  %L"get_user_userid(id), id"MSR_NO_FREE_SLOTS")
            case 
    REDIRECT_IGNORE: return PLUGIN_CONTINUE
            
    case REDIRECT_TRUE:
            {
                if(
    strlen(redirect_password))
                {
                    
    //return client_cmd(id, "^"connect^"%s;^"password^"%s", redirect_server, redirect_password)
                    
    return client_cmdid"^"disconnect^";^"wait^";^"wait^";^"wait^";^"connect^" %s;^"password^" %s"redirect_serverredirect_password )
                }
                
    //return client_cmd(id,"^"connect^"%s", redirect_server)
                
    return client_cmdid"^"disconnect^";^"wait^";^"wait^";^"wait^";^"connect^" %s"redirect_server )
            }
        }
        return 
    PLUGIN_CONTINUE
    }
     
    public 
    client_putinserver(id)
    {
        if(
    get_user_flags(id) & ADMIN_IMMUNITY)
        {
            
    admins++
        }
        return 
    PLUGIN_CONTINUE
    }
     
    public 
    client_disconnect(id)
    {
        if(
    get_user_flags(id) & ADMIN_IMMUNITY)
        {
            
    admins--
        }
     
        
    retry_check_and_delete(id)
     
        return 
    PLUGIN_CONTINUE
    }
     
    public 
    cmd_server(id)
    {
        if( 
    g_redirect )
            
    show_main_menu(idmenu_position[id] = 0)
     
        return 
    PLUGIN_CONTINUE
    }
     
    public 
    show_main_menu(idposition)
    {
        if(
    position 0)
        {
            return 
    PLUGIN_HANDLED
        
    }
     
        new 
    menu_body[1024]
        new 
    menu_start position 7
        
    new menu_end menu_start 7
        
    new menu_key 1
        
    new menu_keys 0
        
    new menu_len
     
        
    if(menu_end ArraySize(server_name))
        {
            
    menu_end ArraySize(server_name)
        }
     
        
    menu_len format(menu_body1023"\yRedirect to the server:^n^n")
     
        new 
    temp2[64], temp[32]
     
        for(new 
    menu_startmenu_endi++)
        {
            if(
    is_can_redirect(idi____MENU_CHECK))
            {
                
    menu_keys |= (<< (menu_key 1))
                
    ArrayGetString(server_nameitemp264)
     
                
    menu_len += format(menu_body[menu_len], 1023 menu_len"\r%d. \w%s "menu_keytemp2)
                
    ArrayGetString(server_mapitemp31)
     
                
    menu_len += format(menu_body[menu_len], 1023 menu_len"\y[\w%s\y] (\w%d/%d\y)"tempArrayGetCell(server_playersi), ArrayGetCell(server_viewplayersi))
     
                if((
    get_user_flags(id) & ADMIN_IMMUNITY) && get_pcvar_num(pcvar_admins))
                {
                    
    menu_len += format(menu_body[menu_len], 1023 menu_len" \y<= \w%d A"ArrayGetCell(server_adminsi))
                }
     
                
    menu_len += format(menu_body[menu_len], 1023 menu_len"^n")
            }
            else
            {
                
    ArrayGetString(server_nameitemp264)
                
    menu_len += format(menu_body[menu_len], 1023 menu_len"\r%d. \d%s "menu_keytemp2)
     
                if(!
    ArrayGetCell(server_onlinei))
                {
                    
    menu_len += format(menu_body[menu_len], 1023 menu_len"(\r%L\d)^n"id"MSR_DOWN")
                }
                else if(
    == current_server)
                {
                    
    menu_len += format(menu_body[menu_len], 1023 menu_len"(\y%L\d)^n"id"MSR_CURRENT")
                }
                else
                {
                    
    ArrayGetString(server_mapitemp31)
                    
    menu_len += format(menu_body[menu_len], 1023 menu_len"[\w%s\d] (%s%d/%d\d)"temp"\r"ArrayGetCell(server_playersi), ArrayGetCell(server_viewplayersi))
     
                    if((
    get_user_flags(id) & ADMIN_IMMUNITY) && get_pcvar_num(pcvar_admins))
                    {
                        
    menu_len += format(menu_body[menu_len], 1023 menu_len" \d<= \w%d A"ArrayGetCell(server_adminsi))
                    }
     
                    
    menu_len += format(menu_body[menu_len], 1023 menu_len"^n")
                }
            }
            
    menu_key++
        }
     
        
    menu_keys |= (<< 7)
     
        if(
    menu_end != ArraySize(server_name))
        {
            
    menu_keys |= (<< 8)
        }
     
        
    menu_keys |= (<< 9)
        
    menu_len += format(menu_body[menu_len], 1023 menu_len"^n\r8. \w%L^n^n\r9. %s%L^n\r0. \w%L"id"MSR_REFRESH", (menu_end == ArraySize(server_name)) ? "\d" "\w"id"MSR_MORE"idposition "MSR_BACK" "MSR_EXIT")
     
        return 
    show_menu(idmenu_keysmenu_body, -1"redirect menu")
    }
     
    public 
    main_menu(idkey)
    {
        switch(
    key)
        {
            case 
    7show_main_menu(idmenu_position[id])
            case 
    8show_main_menu(id, ++menu_position[id])
            case 
    9show_main_menu(id, --menu_position[id])
            default:
            {
                new 
    menu_choosed = (menu_position[id] * 7) + key
     
                
    new redirect_server[32], redirect_password[32]
     
                if(
    is_can_redirect(idmenu_choosedredirect_server31redirect_password31MENU_CHECK))
                {
                    if(
    strlen(redirect_password))
                    {
                        
    //return client_cmd(id, "^"connect^"%s;^"password^"%s", redirect_server, redirect_password)
                        
    return client_cmdid"^"disconnect^";^"wait^";^"wait^";^"wait^";^"connect^" %s;^"password^" %s"redirect_serverredirect_password )
                    }
                    else
                    {
                        
    //return client_cmd(id,"^"connect^"%s", redirect_server)
                        
    return client_cmdid"^"disconnect^";^"wait^";^"wait^";^"wait^";^"connect^" %s"redirect_server )
                    }
                }
                else if(
    get_pcvar_num(pcvar_retry))
                {
                    return 
    show_sub_menu(idmenu_choosed)
                }
                else
                {
                    
    client_print(idprint_chat"[Multiserver Redirect] %L"id"MSR_CHANGED")
                }
            }
        }
     
        return 
    PLUGIN_HANDLED
    }
     
    public 
    show_sub_menu(idserver_id)
    {
        
    sub_data[id] = server_id
     
        
    new body[512], lenkeys
        len 
    format(body[len], 511 len"\r%L\w^n"id"MRS_SUB_HEADER")
     
        new 
    is_retry is_user_retry(id)
     
        
    keys |= (1<<0)|(1<<9)
     
        
    len += format(body[len], 511 len"%s%L^n^n\r1. \w%L"is_retry "\y" "\d"idis_retry "MSR_IN_RETRY" "MSR_NO_RETRY"idis_retry "MSR_OFF_RETRY" "MSR_ON_RETRY")
     
        
    len += format(body[len], 511 len"^n^n\r0. \w%L"id"MSR_BACK")
     
        return 
    show_menu(idkeysbody, -1"redirect sub menu")
    }
     
    public 
    sub_menu(idkey)
    {
        if(
    key == 9) return show_main_menu(idmenu_position[id])
     
        if(
    is_user_retry(id))
        {
            
    retry_check_and_delete(id)
        }
        else
        {
            
    retry_add(idsub_data[id])
        }
     
        return 
    show_sub_menu(idsub_data[id])
    }
     
    public 
    update_data()
    {
        new 
    map[32], current_players get_playersnum(1)
     
        
    get_mapname(map31)
     
        new 
    sql_cond[44]
        if(
    get_pcvar_num(pcvar_hide))
            
    copy(sql_condsizeof(sql_cond) - 1" AND `current_online` = '1'");
     
        new 
    len format(query_cache2047"SELECT hostname, address, server_id, current_map, current_pwd, current_players, \
            current_maxplayers, current_viewplayers, current_admins, current_reserved_slots, current_timestamp, current_online \
            FROM `acp_servers_redirect` LEFT JOIN `acp_servers` ON acp_servers.id = acp_servers_redirect.server_id \
            WHERE acp_servers.opt_redirect = '1'%s ORDER BY acp_servers.rating DESC;"
    sql_cond)
        
    len += format(query_cache[len], 2047 len"INSERT INTO `acp_servers_redirect` (`server_id`,`current_map`,`current_pwd`,`current_players`,`current_maxplayers`,`current_viewplayers`,\
            `current_admins`,`current_reserved_slots`,`current_timestamp`,`current_online`) \
            VALUES ('%d','%s','%s','%d','%d','%d','%d','%d',UNIX_TIMESTAMP(NOW()),'1')"
    g_serverIDmap,
            
    g_passwordcurrent_playersmaxplayersmaxplayers g_hideslotsadminsg_reservation)
        
    len += format(query_cache[len], 2047 len"    ON DUPLICATE KEY UPDATE `current_map` = '%s', `current_pwd` = '%s', `current_players` = '%d', \
            `current_maxplayers` = '%d', `current_viewplayers` = '%d', `current_admins` = '%d', `current_reserved_slots` = '%d', `current_timestamp` = UNIX_TIMESTAMP(NOW()), `current_online` = '1';"
    ,
            
    mapg_passwordcurrent_playersmaxplayersmaxplayers g_hideslotsadminsg_reservation)
        
    len += format(query_cache[len], 2047 len"UPDATE `acp_servers_redirect` SET `current_online` = '0' WHERE (`current_timestamp` + %d) < UNIX_TIMESTAMP(NOW());"floatround(get_pcvar_float(pcvar_update)) * 4)
     
        return 
    SQL_ThreadQuery(tuple"update_data_post"query_cache)
    }
     
    public 
    update_data_post(failstateHandle:query, const error[], errornum, const qdata[], sizeFloat:queuetime)
    {
        if(
    failstate)
        {
            return 
    SQL_ThreadError(queryerrorerrornumfailstate)
        }
     
        if(!
    task_exists(UPDATE_TASK))
        {
            return 
    SQL_FreeHandle(query)
        }
     
        
    ArrayClear(server_name)
        
    ArrayClear(server_ip)
        
    ArrayClear(server_map)
        
    ArrayClear(server_players)
        
    ArrayClear(server_maxplayers)
        
    ArrayClear(server_viewplayers)
        
    ArrayClear(server_admins)
        
    ArrayClear(server_password)
        
    ArrayClear(server_online)
        
    ArrayClear(server_slots)
     
        new 
    curpostemp[64], erase[44]
        
    get_pcvar_string(pcvar_eraseerase43)
     
        new 
    qcolIP column("address")
        new 
    qcolHostname column("hostname")
        new 
    qcolMap column("current_map")
        new 
    qcolPass column("current_pwd")
        new 
    qcolPl column("current_players")
        new 
    qcolPlmax column("current_maxplayers")
        new 
    qcolPlview column("current_viewplayers")
        new 
    qcolAdmins column("current_admins")
        new 
    qcolSlots column("current_reserved_slots")
        new 
    qcolOnline column("current_online")
     
        while(
    SQL_MoreResults(query))
        {
            
    SQL_ReadResult(queryqcolHostnametemp63)
            if(
    strlen(erase)) replace_all(tempsizeof(temp) - 1erase"")
            
    ArrayPushString(server_nametemp)
            
    SQL_ReadResult(queryqcolIPtemp31)
            if(
    equal(temp,g_serverip))
            {
                
    current_server curpos
            
    }
            
    ArrayPushString(server_iptemp)
            
    SQL_ReadResult(queryqcolMaptemp31)
            
    ArrayPushString(server_maptemp)
            
    SQL_ReadResult(queryqcolPasstemp)
            
    ArrayPushString(server_passwordtemp)
            
    ArrayPushCell(server_playersSQL_ReadResult(queryqcolPl))
            
    ArrayPushCell(server_maxplayersSQL_ReadResult(queryqcolPlmax))
            
    ArrayPushCell(server_viewplayersSQL_ReadResult(queryqcolPlview))
            
    ArrayPushCell(server_adminsSQL_ReadResult(queryqcolAdmins))
            
    ArrayPushCell(server_slotsSQL_ReadResult(queryqcolSlots))
            
    ArrayPushCell(server_onlineSQL_ReadResult(queryqcolOnline))
     
            
    curpos++
     
            
    SQL_NextRow(query)
        }
     
        
    SQL_FreeHandle(query)
     
        new 
    arrsize ArraySize(retries_ids)
     
        for(new 
    iarrsizei++)
        {
            new 
    id ArrayGetCell(retries_idsi)
            new 
    redirect_server[32], redirect_password[32]
            if(
    is_can_redirect(idArrayGetCell(retries_serversi), redirect_server31redirect_password31MENU_CHECK))
            {
                if(
    strlen(redirect_password))
                {
                    
    //client_cmd(id, "^"connect^"%s;^"password^"%s", redirect_server, redirect_password)
                    
    client_cmdid"^"disconnect^";^"wait^";^"wait^";^"wait^";^"connect^" %s;^"password^" %s"redirect_serverredirect_password )
                }
                else
                {
                    
    //client_cmd(id,"^"connect^"%s", redirect_server)
                    
    client_cmdid"^"disconnect^";^"wait^";^"wait^";^"wait^";^"connect^" %s"redirect_server )
                }
     
                new 
    val ArrayGetCell(server_playersArrayGetCell(retries_serversi))
                
    ArraySetCell(server_playersArrayGetCell(retries_serversi),  val 1)
            }
        }
     
        return 
    PLUGIN_CONTINUE
    }
     
    #if defined ACP_GENERAL
     
    public acp_endmap_func()
    {
     
    #else
     
    public plugin_end()
    {
        if(
    tuple != Empty_Handle)
        {
            
    SQL_FreeHandle(tuple)
        }
     
    #endif
     
        
    remove_task(UPDATE_TASK)
     
        
    ArrayDestroy(server_name)
        
    ArrayDestroy(server_ip)
        
    ArrayDestroy(server_map)
        
    ArrayDestroy(server_players)
        
    ArrayDestroy(server_maxplayers)
        
    ArrayDestroy(server_viewplayers)
        
    ArrayDestroy(server_admins)
        
    ArrayDestroy(server_password)
        
    ArrayDestroy(server_online)
        
    ArrayDestroy(server_slots)
     
        
    ArrayClear(retries_ids)
        
    ArrayClear(retries_servers)
    }
     
    stock is_can_redirect(idserver_id 0output[] = ""len 0output2[] = ""len2 0type)
    {
        switch(
    type)
        {
            case 
    CONNECT_CHECK:
            {
                if(
    get_playersnum(1) <= (maxplayers g_reservation) || (is_have_slot(id) && get_playersnum(1) <= maxplayers) || !get_pcvar_num(pcvar_join)) return REDIRECT_IGNORE
     
                
    for(server_id 0server_id ArraySize(server_name); server_id++)
                {
                    if(
    server_id == current_server) continue;
     
                    new 
    slots ArrayGetCell(server_slotsserver_id), pl ArrayGetCell(server_maxplayersserver_id)
                    if(((
    ArrayGetCell(server_playersserver_id) < (pl-slots)) || is_have_slot(id) && (ArrayGetCell(server_playersserver_id) < pl)) && ArrayGetCell(server_onlineserver_id))
                    {
                        
    ArrayGetString(server_ipserver_idoutputlen)
                        
    ArrayGetString(server_passwordserver_idoutput2len2)
                        return 
    REDIRECT_TRUE
                    
    }
                }
     
                return 
    REDIRECT_FALSE
            
    }
            case 
    MENU_CHECK:
            {
                new 
    slots ArrayGetCell(server_slotsserver_id), pl ArrayGetCell(server_maxplayersserver_id)
                if(((
    ArrayGetCell(server_playersserver_id) < (pl-slots)) || is_have_slot(id) && (ArrayGetCell(server_playersserver_id) < pl)) && ArrayGetCell(server_onlineserver_id) && server_id != current_server)
                {
                    
    ArrayGetString(server_ipserver_idoutputlen)
                    
    ArrayGetString(server_passwordserver_idoutput2len2)
                    return 
    REDIRECT_TRUE
                
    }
                return 
    REDIRECT_FALSE
            
    }
        }
        return 
    REDIRECT_IGNORE
    }
     
    stock is_have_slot(id)
    {
        new 
    ip[32]
        
    get_user_ip(idip311)
        return (
    get_user_flags(id) & get_slot_flag() && g_reservation)
    }
     
    stock SQL_ThreadError(Handle:query, const error[], errornumfailstate)
    {
        
    log_amx("[MSR] %L"LANG_SERVER"MSR_THREADED_ERROR"errornumerror)
     
        new 
    pquery[1024]
        
    SQL_GetQueryString(querypquery1023)
     
        
    log_amx("[MSR] %L"LANG_SERVER"MSR_QUERY_STRING"pquery)
     
        if(
    failstate == TQUERY_CONNECT_FAILED)
        {
            
    log_amx("[MSR] %L"LANG_SERVER"MSR_CONNECTION_FAILED")
        }
        else if(
    failstate == TQUERY_QUERY_FAILED)
        {
            
    log_amx("[MSR] %L"LANG_SERVER"MSR_QUERY_FAILED")
        }
     
        return 
    SQL_FreeHandle(query)
    }
     
    stock get_slot_flag()
    {
        new 
    str[32]
        
    get_pcvar_string(pcvar_flagstr31)
        return 
    read_flags(str)
    }
     
    stock retry_check_and_delete(id)
    {
        new 
    arrsize ArraySize(retries_ids)
        for(new 
    iarrsizei++)
        {
            new 
    tid ArrayGetCell(retries_idsi)
            if(
    id == tid)
            {
                
    ArrayDeleteItem(retries_idsi)
                
    ArrayDeleteItem(retries_serversi)
                return 
    1
            
    }
        }
        return 
    0
    }
     
    stock retry_add(idserver)
    {
        
    ArrayPushCell(retries_idsid)
        
    ArrayPushCell(retries_serversserver)
        return 
    1
    }
     
    stock sql_safe(dest[], len)
    {
        
    replace_all(destlen"\\""\\\\")
        
    replace_all(destlen"\0""\\0")
        
    replace_all(destlen"\n""\\n")
        
    replace_all(destlen"\r""\\r")
        
    replace_all(destlen"\x1a""\Z")
        
    replace_all(destlen"'""\'")
        
    replace_all(destlen"^"", "\^"")
     
        return 
    1
    }
     
    stock is_user_retry(id)
    {
        new 
    arrsize ArraySize(retries_ids)
        for(new 
    iarrsizei++)
        {
            new 
    tid ArrayGetCell(retries_idsi)
            if(
    id == tid)
            {
                return 
    1
            
    }
        }
        return 
    0
    }
    Slowpoked, 14 янв 2014
    sabas нравится это.
  4. Оффлайн
    sabas Ламер
    На проекте с:
    9 окт 2011
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    ай Красава ! ща заценим ... :az:
    sabas, 14 янв 2014
  5. Оффлайн
    sabas Ламер
    На проекте с:
    9 окт 2011
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Нее , к сожалению не работает :dontknow:
    multiserver_redirect.cfg
    // Включение редиректа при коннекте игрока на заполненный сервер
    msr_join "1"

    // Админ-флаг для резвервного слота
    msr_admin_flag "b"

    // Позволяет игрокам ждать свободно слота
    // Используется в меню
    msr_retry "0"

    // Отображение количества админов на серверах
    // Видят только администраторы
    msr_show_admins "0"

    // Частота обновления данных в секундах
    // Чем меньше значение, тем точнее данные и больше нагрузка на базу
    // Тестировал со значением 0.1 (10 раз в секунду) - нагрузки не заметил
    msr_updaterate "2.0"

    // IP сервера
    // Если не указывать, то будет определяться автоматически
    msr_serverip ""

    // Укажите фразу, которую необходимо вырезать из hostname
    msr_erase_hostname ""

    // Скрывать оффлайн сервера в списке редиректа?
    msr_hide_offline "1"
    sabas, 15 янв 2014
  6. Оффлайн
    Slowpoked ACP мембер
    На проекте с:
    25 янв 2011
    Сообщения:
    349
    Симпатии:
    73
    Баллы:
    28
    Странно, у меня работает...
    Slowpoked, 15 янв 2014
  7. Оффлайн
    sabas Ламер
    На проекте с:
    9 окт 2011
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    version : 48/1.1.2.7/Stdio 6132
    AMXX v1.8.2, MM v1.21p37
    sabas, 15 янв 2014
  8. Оффлайн
    Slowpoked ACP мембер
    На проекте с:
    25 янв 2011
    Сообщения:
    349
    Симпатии:
    73
    Баллы:
    28
    Клиент часть - проблем нет:
    ] version
    Protocol version 48
    Exe version 1.1.2.7/Stdio (cstrike)
    Exe build: 13:14:12 Aug 29 2013 (6153)
    Slowpoked, 16 янв 2014
  9. Оффлайн
    sabas Ламер
    На проекте с:
    9 окт 2011
    Сообщения:
    18
    Симпатии:
    0
    Баллы:
    1
    Проблема с редиректом и только ! При переходе с менюшки - все работает , а вот при наполнении - тупо не перекидывает на следующий сервер , раньше все работало, поставил новый серверный билд и жопа ...
    sabas, 16 янв 2014
  10. Оффлайн
    argento ACP мембер
    На проекте с:
    2 янв 2012
    Сообщения:
    160
    Симпатии:
    3
    Баллы:
    18
    подключаю плагин к серверу и сервер не запускается.
    argento, 7 мар 2014