Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

Плагин ранга.

Статус пользователя Dillon
сообщение 17.2.2017, 23:11
Сообщение #1


Стаж: 13 лет
Город: Москва

Сообщений: 49
Благодарностей: 3
Полезность: 46

Всем доброго времени суток.
Ребят, мне нужна помощь!
У меня есть плагин армейского ранга для CS 1.6 Где качал, как называется, какая версия и т.д я не помню так как их было скачено тонна и понравился только он.
В общем о проблеме. Плагин дает опыт за убийство, чем больше опыта тем выше ранг. Больше он ничего не делает, только опыт - только ранг. Так вот если у игрока максимальный опыт то сервер выдает ошибку:

Код
L 02/18/2017 - 00:59:17: [AMXX] Displaying debug trace (plugin "aSystem.amxx")
L 02/18/2017 - 00:59:17: [AMXX] Run time error 4: index out of bounds
L 02/18/2017 - 00:59:17: [AMXX]    [0] aSystem.sma::check_level (line 334)
L 02/18/2017 - 00:59:17: [AMXX]    [1] aSystem.sma::cmdCheck (line 218)
L 02/18/2017 - 00:59:17: [AMXX]    [2] aSystem.sma::client_putinserver (line 151)

Это вот эти строки:

Код
while ( UserData [ id ][ exp ] >= levels [ UserData [ id ][ level ] ] )

Код
check_level ( id )

Код
cmdCheck ( id )

Я так понимаю что проблема конкретно в том у кого максимальный опыт так как у других игроков вроде все нормально.
Ребят помогите решить данную проблему. Качать какой то Арми-Ранг или что то другое не хочу. Мне нужен просто ранг а не ранг + бонусы в виде автоматов или гранат или что то в этом роде.

Вот исходный код:

Код
#include < amxmodx >
#include < amxmisc >
#include < fakemeta >
#include < hamsandwich >
#include < nvault >
#include < sqlx >

#pragma tabsize 0

enum _:udata
{
    level, exp, bonus, kills, deaths, target, hazing,
    uhud
}

enum _:sdata
{
    type, host, user, pass, db, name, ntime, nvault,
    head_exp, head_bonus, stand_exp, stand_bonus,
    minus_exp, hud, maxplayers
}

new const prefix [ ][ ] =
{
    "!t [!g ИНФО !g]!y",
    "\d[ ИНФО ]\r"
}

new UserData [ 33 ][ udata ]
new UserSteam [ 33 ][ 35 ]
new OptServer [ sdata ]
new SQL_Active, SQL_Player[33]

new Handle:MYSQL_Tuple
new Handle:MYSQL_Connect

new const rank_names [ ][ ] =
{
    "R_0", "R_1", "R_2", "R_3", "R_4", "R_5", "R_6", "R_7", "R_8", "R_9", "R_10", "R_11", "R_12", "R_13", "R_14",        
    "R_15", "R_16", "R_17", "R_18", "R_19", "R_20"
}

new const levels [ ] =
{
    0, 30, 60, 120, 200, 350, 700, 800, 1000, 1500, 2000, 3000, 3500, 4000, 5000, 5500, 6000, 6500, 10000, 20000
}

public plugin_init ( )
{
    register_plugin ( "ARMY SYSTEM :: MAIN", "2.2.1", "OverGame" )
    
    register_forward ( FM_PlayerPreThink, "fwdPlayerPreThink", 0 )
    register_event ( "DeathMsg", "event_killing", "a" )
    
    OptServer [ type ] = register_cvar ( "as_type", "1" )
    
    OptServer [ stand_exp ] = register_cvar ( "as_stand_exp", "1" )
    OptServer [ stand_bonus ] = register_cvar ( "as_stand_bonus", "1" )
    OptServer [ head_exp ] = register_cvar ( "as_head_exp", "3" )
    OptServer [ head_bonus ] = register_cvar ( "as_head_bonus", "3" )
    OptServer [ minus_exp ] = register_cvar ( "as_minus_exp", "1" )
    
    OptServer [ maxplayers ] = get_maxplayers ( )
    OptServer [ hud ] = CreateHudSyncObj ( )
    
    switch ( get_pcvar_num ( OptServer [ type ] ) )
    {
        case 0:
        {
            new nvault_name [ 128 ]
            get_cvar_string ( "as_nvault_name", nvault_name, 63 )
            OptServer [ name ] = register_cvar ( "as_nvault_name", "army_system" )
            OptServer [ ntime ] = register_cvar ( "as_nvault_time", "31" )
            
            OptServer [ nvault ] = nvault_open ( nvault_name )
            if ( OptServer [ nvault ] == INVALID_HANDLE)
                set_fail_state ( "Error opening nVault!" )
            
            nvault_prune ( OptServer [ nvault ], 0, get_systime ( ) - ( 86400 * get_pcvar_num ( OptServer [ ntime ] ) ) )
        }
        case 1:
        {
            OptServer [ host ] = register_cvar ( "as_mysql_host", "127.0.0.1" )
            OptServer [ user ] = register_cvar ( "as_mysql_user", "root" )
            OptServer [ pass ] = register_cvar ( "as_mysql_pass", "" )
            OptServer [ db ] = register_cvar ( "as_mysql_db", "asystem" )
            
            set_task ( 1.0, "MYSQL_Load" )
        }
    }
    
    register_clcmd ( "as_hud", "function_hud" )
    register_clcmd ( "say /as_hud", "function_hud" )
    register_clcmd ( "say_team /as_hud", "function_hud" )
    
    set_task ( 1.0, "show_info", _, _, _, "b" )
    register_dictionary ( "asystem.txt" )
}

public plugin_cfg ( )
{
    new szCfgDir [ 64 ], szFile [ 192 ]
    get_configsdir ( szCfgDir, charsmax ( szCfgDir ) )
    format ( szFile, charsmax ( szFile ), "%s/as_setting.cfg", szCfgDir )
    
    if ( file_exists ( szFile ) )
        server_cmd ( "exec %s", szFile )
}

public plugin_end ( )
{
    if ( !get_pcvar_num ( OptServer [ type ] ) )
        nvault_close ( OptServer [ nvault ] )
}

public MYSQL_Load ( )
{
    new szHostname [ 30 ], szUsername [ 30 ], szPassword [ 30 ], szDatabase [ 30 ]
    new szError [ 512 ], szErr

    get_pcvar_string ( OptServer [ host ], szHostname, charsmax ( szHostname ) )
    get_pcvar_string ( OptServer [ user ], szUsername, charsmax ( szUsername ) )
    get_pcvar_string ( OptServer [ pass ], szPassword, charsmax ( szPassword ) )
    get_pcvar_string ( OptServer [ db ], szDatabase, charsmax ( szDatabase ) )

    MYSQL_Tuple = SQL_MakeDbTuple ( szHostname, szUsername, szPassword, szDatabase )
    MYSQL_Connect= SQL_Connect ( MYSQL_Tuple, szErr, szError, charsmax ( szError ) )

    if ( MYSQL_Connect == Empty_Handle )
        set_fail_state ( szError )

    SQL_Active = true
}

public function_hud ( id )
{
    if ( UserData [ id ][ uhud ] )
        UserData [ id ][ uhud ] = false
    else
        UserData [ id ][ uhud ] = true
}

public client_authorized ( id )
{
    get_user_authid ( id, UserSteam [ id ], charsmax ( UserSteam [ ] ) )
}

public client_putinserver ( id )
{
    UserData [ id ][ uhud ] = true
    cmdCheck ( id )
}

public client_disconnect ( id )
{
    cmdSave ( id )
}

public cmdCheck ( id )
{
    switch ( get_pcvar_num ( OptServer [ type ] ) )
    {
        case 0:
        {
            new s_GetLvl [ 40 ], s_GetExp [ 40 ], s_GetBonus [ 40 ]
    
            formatex ( s_GetLvl, charsmax ( s_GetLvl ), "%sRANK", UserSteam [ id ] )
            new s_Level = nvault_get ( OptServer [ nvault ], s_GetLvl )
    
            formatex ( s_GetExp, charsmax ( s_GetExp ), "%sEXP", UserSteam [ id ] )
            new s_Exp = nvault_get ( OptServer [ nvault ], s_GetExp )
    
            formatex ( s_GetBonus, charsmax ( s_GetBonus ), "%sBONUS", UserSteam [ id ] )
            new s_Bonus = nvault_get ( OptServer [ nvault ], s_GetBonus )
    
            if ( s_Level )
            {
                UserData [ id ][ level ] = s_Level
                UserData [ id ][ exp ] = s_Exp
                UserData [ id ][ bonus ] = s_Bonus
            } else {
                cmdSave(id)
            }
        }
        case 1:
        {
            if (!SQL_Active)
            {
                set_task ( 1.0, "MYSQL_Load", id )
            }

            new szError [ 512 ]
            new szMYSQLName [ 35 ]
            new Handle:szSelect

            szSelect = SQL_PrepareQuery ( MYSQL_Connect, "SELECT * FROM asystem" )

            if ( !SQL_Execute ( szSelect ) )
            {
                SQL_QueryError ( szSelect, szError, charsmax ( szError ) )
                set_fail_state ( szError )
            }

            while ( SQL_MoreResults ( szSelect ) )
            {
                SQL_ReadResult ( szSelect, 1, szMYSQLName, charsmax ( szMYSQLName ) )
    
                if ( equal ( szMYSQLName, UserSteam [ id ] ) )
                {
                    UserData [ id ][ level ] = SQL_ReadResult ( szSelect, 3 )
                    UserData [ id ][ exp ] = SQL_ReadResult ( szSelect, 4 )
                    UserData [ id ][ bonus ] = SQL_ReadResult ( szSelect, 5 )
                    UserData [ id ][ kills ] = SQL_ReadResult ( szSelect, 6 )
                    UserData [ id ][ deaths ] = SQL_ReadResult ( szSelect, 7 )
            
                    SQL_Player [ id ] = true
                    
                    check_level ( id )
                    break
                } else {
                    SQL_NextRow ( szSelect )
                }
            }
    
            new szName [ 33 ]
            get_user_name ( id, szName, charsmax ( szName ) )

            if ( !SQL_Player [ id ] )
            {
                new Handle:szInsert
                szInsert = SQL_PrepareQuery ( MYSQL_Connect, "INSERT INTO `asystem` (`steam`, `nick`, `level`, `exp`, `bonus`, `kills`, `deaths` ) VALUES  ('%s', '%s', '0', '0', '0', '0', '0');", UserSteam [ id ], szName )

                if ( !SQL_Execute ( szInsert ) )
                {
                    SQL_QueryError ( szInsert, szError, charsmax ( szError ) )
                    set_fail_state ( szError )
                }
                SQL_Player [ id ] = true
            }
        }
    }
    
    return PLUGIN_HANDLED
}

public cmdSave ( id )
{
    switch ( get_pcvar_num ( OptServer [ type ] ) )
    {
        case 0:
        {
            new s_SaveLvl [ 40 ], s_SaveExp [ 40 ], s_SaveBonus [ 40 ], s_Level [ 64 ], s_Exp [ 64 ], s_Bonus [ 64 ]

            format ( s_SaveLvl, charsmax ( s_SaveLvl ), "%sRANK", UserSteam [ id ] )
            format ( s_Level, charsmax ( s_Level ), "%d", UserData [ id ][ level ] )
    
            format ( s_SaveExp, charsmax ( s_SaveExp ) , "%sEXP", UserSteam [ id ] )
            format ( s_Exp, charsmax ( s_Exp ), "%d", UserData [ id ][ exp ] )
    
            format ( s_SaveBonus, charsmax ( s_SaveBonus ) , "%sBONUS", UserSteam [ id ] )
            format ( s_Bonus, charsmax ( s_Bonus ), "%d", UserData [ id ][ bonus ] )
    
            nvault_set ( OptServer [ nvault ], s_SaveLvl, s_Level )
            nvault_set ( OptServer [ nvault ], s_SaveExp, s_Exp )
            nvault_set ( OptServer [ nvault ], s_SaveBonus, s_Bonus )
        }
        case 1:
        {
            new szError [ 512 ]
            new Handle:szUpdate

            szUpdate = SQL_PrepareQuery ( MYSQL_Connect, "UPDATE `asystem` SET `level` = '%i', `exp` = '%i', `bonus` = '%i', `kills` = '%i', `deaths` = '%i' WHERE `asystem`.`steam` = '%s';", UserData [ id ][ level ], UserData [ id ][ exp ], UserData [ id ][ bonus ], UserData [ id ][ kills ], UserData [ id ][ deaths ], UserSteam [ id ] )

            if ( !SQL_Execute ( szUpdate ) )
            {
                SQL_QueryError ( szUpdate, szError, charsmax ( szError ) )
                set_fail_state ( szError )
            }
        }
    }
    
    return PLUGIN_HANDLED
}

public fwdPlayerPreThink ( id )
{
    new itarget, body
    get_user_aiming ( id, itarget, body, 9999 )

    if ( 0 < itarget <= get_maxplayers ( ) )
    {
        UserData [ id ][ target ] = itarget
    }
    
    return PLUGIN_HANDLED
}

public event_killing ( )
{
    new iKiller = read_data ( 1 )
    new iVictim = read_data ( 2 )
    new iHead = read_data ( 3 )
    
    if ( iHead && iKiller != iVictim && is_user_connected ( iKiller ) && is_user_connected ( iVictim ) && UserData [ iKiller ][ level ] <= 19 )
    {
        UserData [ iKiller ][ exp ] += get_pcvar_num ( OptServer [ head_exp ] )
        UserData [ iKiller ][ bonus ] += get_pcvar_num ( OptServer [ head_bonus ] )
    } else
    if ( iKiller != iVictim && is_user_connected ( iKiller ) && is_user_connected ( iVictim ) && UserData [ iKiller ][ level ] <= 19 )
    {
        UserData [ iKiller ][ exp ] += get_pcvar_num ( OptServer [ stand_exp ] )
        UserData [ iKiller ][ bonus ] += get_pcvar_num ( OptServer [ stand_bonus ] )
    }
    
    if ( get_pcvar_num ( OptServer [ minus_exp ] ) )
    {
        if ( UserData [ iVictim ][ exp ] > 0 )
            UserData [ iVictim ][ exp ]--
    }
    
    check_level ( iKiller )
    
    return PLUGIN_CONTINUE
}

public check_level ( id )
{
    if ( UserData [ id ][ level ] <= 0 )
        UserData [ id ][ level ] = 1
        
    if ( UserData [ id ][ exp ] < 0 )
        UserData [ id ][ exp ] = 0

    while ( UserData [ id ][ exp ] >= levels [ UserData [ id ][ level ] ] )
    {
        UserData [ id ][ level ]++
        static buffer [ 192 ]
        
        new szName [ 33 ]
        get_user_name ( id, szName, 32 )
        
        format ( buffer, charsmax ( buffer ), "%s %L %L", prefix [ 0 ], id, "DI_NEW_RANK", szName, id, rank_names [ UserData [ id ][ level ] ] )
        ShowMsg ( 0, buffer )
    }
}

public show_info ( )
{
    for ( new id = 0; id <= OptServer [ maxplayers ]; id++ )
    {
        if ( !is_user_bot ( id ) && is_user_connected ( id ) && UserData [ id ][ uhud ] )
        {
            static buffer [ 192 ], len
            
            set_hudmessage ( 100, 100, 100, 0.01, 0.20, 0, 15.0, 1.0, _, _, -1 )
            
            if ( !is_user_alive(id) )
            {
                new szName [ 33 ]
                get_user_name ( UserData [ id ][ target ], szName, charsmax ( szName ) )
                len = format ( buffer, charsmax ( buffer ), "%L", id, "DI_NAME", szName )
                len += format ( buffer [ len ], charsmax ( buffer ) - len, "^n%L %L", id, "DI_RANK", id, rank_names [ UserData [ UserData [ id ][ target ] ][ level ] ] )
                if ( UserData [ id ][ level ] <= 19)
                {
                    len += format ( buffer [ len ], charsmax ( buffer ) - len, "^n%L", id, "DI_EXP", UserData [ UserData [ id ][ target ] ][ exp ], levels [ UserData [ UserData [ id ][ target ] ][ level ] ] )
                } else {
                    len += format ( buffer [ len ], charsmax ( buffer ) - len, "^n%L", id, "DI_EXP_MAX" )
                }
            } else {
                len = format ( buffer, charsmax(buffer), "%L %L", id, "DI_RANK", id, rank_names [ UserData [ id ][ level ] ] )
                if(UserData[id][level] <= 19)
                {
                    len += format ( buffer [ len ], charsmax ( buffer ) - len, "^n%L", id, "DI_EXP", UserData [ id ][ exp ], levels [ UserData [ id ][ level ] ] )
                } else {
                    len += format ( buffer [ len ], charsmax ( buffer ) - len, "^n%L", id, "DI_EXP_MAX" )
                }
            }
            
            ShowSyncHudMsg ( id, OptServer [ hud ], buffer )
        }
    }
    
    return PLUGIN_CONTINUE
}

public plugin_natives ( )
{
    register_native ( "get_as_level", "native_get_as_level", 1 )
    register_native ( "set_as_level", "native_set_as_level", 1 )
    
    register_native ( "get_as_exp", "native_get_as_exp", 1 )
    register_native ( "set_as_exp", "native_set_as_exp", 1 )
    
    register_native ( "get_as_bonus", "native_get_as_bonus", 1 )
    register_native ( "set_as_bonus", "native_set_as_bonus", 1 )
}

public native_get_as_level ( id )
    return UserData [ id ][ level ]
    
public native_set_as_level ( id, num )
    UserData [ id ][ level ] = num
    
public native_get_as_exp ( id )
    return UserData [ id ][ exp ]
    
public native_set_as_exp ( id, num )
    UserData [ id ][ exp ] = num
    
public native_get_as_bonus ( id )
    return UserData [ id ][ bonus ]
    
public native_set_as_bonus ( id, num )
    UserData [ id ][ bonus ] = num

stock ShowMsg ( const id, const input [ ], any:... )
{
    new count = 1, players [ 32 ]
    static msg [ 188 ]
    vformat ( msg, 187, input, 3 )
    
    replace_all ( msg, 187, "!g", "^4" )
    replace_all ( msg, 187, "!y", "^1" )
    replace_all ( msg, 187, "!t", "^3" )
    
    if ( id ) players [ 0 ] = id; else get_players ( players, count, "ch" )
    {
        for ( new i = 0; i < count; i++ )
        {
            if ( is_user_connected ( players [ i ] ) )
            {
                message_begin ( MSG_ONE_UNRELIABLE, get_user_msgid ( "SayText" ), _, players [ i ] )
                write_byte ( players [ i ] )
                write_string ( msg )
                message_end ( )
            }
        }
    }
}

Заранее спасибо за помощь.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя cstriker
сообщение 18.2.2017, 0:29
Сообщение #2


Иконка группы

Стаж: 13 лет

Сообщений: 1233
Благодарностей: 586
Полезность: 869

Тема плагина Army System (EA) 3.0 Fix 1
Там есть обновления, возможно в них это исправлено. У вас 2.2.1

Отредактировал: cstriker, - 18.2.2017, 0:31
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Dillon
сообщение 18.2.2017, 20:16
Сообщение #3


Стаж: 13 лет
Город: Москва

Сообщений: 49
Благодарностей: 3
Полезность: 46

Цитата(cstriker @ 18.2.2017, 0:29) *
Тема плагина Army System (EA) 3.0 Fix 1
Там есть обновления, возможно в них это исправлено. У вас 2.2.1

Писал разработчику этого плагина в ВК он говорит что тех. поддержка прекращена и стал советовать использовать более новые версии. Я так понял что обновлений на данный плагин нет. Вот и хотел бы попросить у вас помощи о том что бы доработать его.
Я ознакомлюсь с темой которую вы прикрепили, если что то найду то будет очень хорошо.... Спасибо!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Dillon
сообщение 20.2.2017, 11:36
Сообщение #4


Стаж: 13 лет
Город: Москва

Сообщений: 49
Благодарностей: 3
Полезность: 46

Цитата(cstriker @ 18.2.2017, 0:29) *
Тема плагина Army System (EA) 3.0 Fix 1
Там есть обновления, возможно в них это исправлено. У вас 2.2.1

Появилось немного времени и ознакомился с данной темой. К сожалению ответа на свой вопрос не нашел... Как говорил ранее устанавливать новую версию что-то не охота. Может быть есть варианты исправить данный БАГ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: