AES: StatsX CStrike (0.5.8)

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
83
Реакции
42
Помог
1 раз(а)
Ошибка
Визуальный баг номера (ранга) игрока в топ 15.
ОС
Windows
Билд
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.4.0.639-dev
Build date: 17:47:13 Feb 21 2018 (1411)
Build from: https://github.com/dreamstalker/rehlds/commit/822df9a
ReGamedll
ReGameDLL version: 5.7.0.295-dev
Build date: 15:10:22 Feb 19 2018
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/aa329db
Список метамодулей
[  1] AMX Mod X        RUN   -    amxmodx_mm.dll          1.8.3-dev+5151       ini  Start ANY
[ 2] CSX RUN - csx_amxx.dll 1.8.3-dev+5151 pl1 ANY ANY
[ 3] Ham Sandwich RUN - hamsandwich_amxx.dll 1.8.3-dev+5151 pl1 ANY ANY
[ 4] MySQL RUN - mysql_amxx.dll 1.8.3-dev+5151 pl1 ANY ANY
[ 5] ReAPI RUN - reapi_amxx.dll v5.2.0.143-dev pl1 ANY Never
[ 6] Engine RUN - engine_amxx.dll 1.8.3-dev+5151 pl1 ANY ANY
Список плагинов
[  2] Advanced Experience Sy  0.5.8 Vega    serfreeman1337/s    aes_main.amxx    running  
[ 3] AES: CStrike Addon 0.5.8 Vega serfreeman1337/s aes_exp_cstrike running
[ 4] AES: Informer 0.5.8 Vega serfreeman1337/s aes_informer.am running
[ 5] AES: Admin Tools 0.5.8 Vega serfreeman1337/s aes_exp_editor. running
[ 6] AES: Bonus System 0.5.8 Vega serfreeman1337/s aes_bonus_syste running
[ 7] AES: Bonus CSTRIKE 0.5.8 Vega serfreeman1337/s aes_bonus_cstri running
Исходный код
Исходники стандартные с архива:
https://dev-cs.ru/resources/362/download
Визуальный баг номера (ранга) игрока в топ 15. Баг с отображением ранга проятвляется только в топ 15, во всех остальных случаях (/stats, /statsme, /rankstats) ранг показывается корректно.
Стандартный statsx показывает всё как надо, с первого и единственного игрока в топ 15 ранг начинается не с 0 а с 1.

См. скриншоты:
1.png
2.png
3.png
4.png
 
В этой теме было размещено решение! Перейти к решению.
Сообщения
1
Реакции
3
Помог
1 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Так всегда было с последним в таблице. В целом, никому и не мешало. :dntknw:
Надо смотреть функцию public SayTopFormer, именно в ней формируется HTML код для MOTD-окна top15.
Конкретно первый столбец ранга берётся из сформированного массива: https://github.com/s008nyx/aes/blob/master/scripting/aes_statsx_cstrike.sma#L1619

Возможно, не верно формируется сам массив?
8 Мар 2018
К сведению, собирается в временный динамический массив ранги в этом участке кода:
https://github.com/s008nyx/aes/blob/master/scripting/aes_statsx_cstrike.sma#L1438-L1518
8 Мар 2018
Скорее всего stats_info[STATSF_RANK] - уже имеет не верно сформированные данные из public SayTopHandler(id,Pos)
Можно попробовать прологировать эту функцию в указанных местах:

Код:
//
// Сбор статистики
//
public SayTopHandler(id,Pos)
{
    new Array:stats_array = ArrayCreate(stats_former_array)
    new stats_info[stats_former_array],last_rank
    
    #if defined CSSTATSX_SQL
        new size = min(get_statsnum_sql(),Pos)
    #else
        new size = min(get_statsnum(),Pos)
    #endif
    
    #if defined AES
        new Array:authids_array = ArrayCreate(sizeof stats_info[STATSF_AUTHID])
    #endif
    
    new rank,stats[8],stats2[4],bh[8],name[MAX_NAME_LENGTH],authid[30]
    
    for(new i = size - MAX_TOP < 0 ? 0 : size - MAX_TOP; i < size ; i++){
        #if defined CSSTATSX_SQL
+            rank = get_stats_sql(i,stats,bh,name,charsmax(name),authid,charsmax(authid))
            get_stats2_sql(i,stats2)
            get_stats_gametime(i,stats_info[STATSF_OT])
        #else
            rank = get_stats(i,stats,bh,name,charsmax(name),authid,charsmax(authid))
            get_stats2(i,stats2)
        #endif
        
        if(!rank)
            rank = last_rank
            
        for(new i ; i < 8 ; i++)
        {
            stats_info[STATSF_DATA][i] = stats[i]
            stats_info[STATSF_BH][i] = bh[i]
        }
        
        for(new i ; i < 4 ; i++)
        {
            stats_info[STATSF_DATA2][i] = stats2[i]
        }
        
        copy(stats_info[STATSF_NAME],
            charsmax(stats_info[STATSF_NAME]),
            name
        )
        
        copy(stats_info[STATSF_AUTHID],
            charsmax(stats_info[STATSF_AUTHID]),
            authid
        )
        
        last_rank = rank
+        stats_info[STATSF_RANK] = rank
        
        // формируем статистику
        ArrayPushArray(stats_array,stats_info)
        
        #if defined AES
            ArrayPushString(authids_array,authid)
        #endif
    }
    
    new stats_data[2]
    
    stats_data[0] = _:stats_array
    
    #if defined AES
        stats_data[1] = _:authids_array
        
        if(!ArraySize(authids_array) || !aes_find_stats_thread(id,authids_array,"SayTopFormer",stats_data,sizeof stats_data))
        {
            new Array:empty_aes_stats = ArrayCreate()
            SayTopFormer(id,empty_aes_stats,stats_data)
        }
    #else
        SayTopFormer(id,stats_data)
    #endif
}
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу