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

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

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

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

MOTD обрезка по макс.длине строки

, как обойти?
Статус пользователя Metal Messiah
сообщение 15.12.2012, 22:27
Сообщение #1


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

Стаж: 13 лет

Сообщений: 2457
Благодарностей: 1482
Полезность: 770

HostGame.cf
Ниже кусок из ps3stats
Задача была сделать красивый читаемый топ (не <pre> а html)
Уперся в то что код обрезается примерно на середине 7го игрока при том что лимит в запросе - топ 15.
Поставил MAX_BUFFER_LENGTH 4095 (в исходном был 2048) и получил ошибку типа Function table><tr> not found (т.е. тупое переполнение буффера в AMXX). Далее накопал инфу что нельзя ставить больше 3072. Поставил. Все равно обрезает на середине 7го игрока.
Как сделать то что я хочу?

Код
public PrintTop15Data(Handle:query, id)
{
    new iRank
    new sName[32]
    new rowcolor[8]
    new rowcolori
    new iKills, iDeaths, iHits, iShots, iHeadshotkills
    new Float:fSkill, Float:fAccuracy, Float:fOnlinetime
    
    new iLen = 0
    new sBuffer[MAX_BUFFER_LENGTH + 1]
    debug_sql_thread(query)
    iLen = format(sBuffer, MAX_BUFFER_LENGTH, "<body style='margin:0px;' bgcolor=#eeeeee><font color=#FFB000><table border=0 cellpadding=2 cellspacing=0 style='font-size:x-small;'>")
    iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "<tr bgcolor=#ffffff><td>#</td><td>NICK</td><td>KILLS</td><td>DEATHS</td><td>HITS</td><td>SHOTS</td><td>HS</td><td>SKILL</td><td>ACC</td><td>ONLINE</td></tr>^n")

    rowcolori=1
    while ((SQL_MoreResults(query)) && (MAX_BUFFER_LENGTH - iLen > 0))
    {
        iRank = SQL_ReadResult(query, 0)
        SQL_ReadResult(query, 1, sName, 31)
        iKills = SQL_ReadResult(query, 2)
        iDeaths = SQL_ReadResult(query, 3)
        iHits = SQL_ReadResult(query, 4)
        iShots = SQL_ReadResult(query, 5)
        iHeadshotkills = SQL_ReadResult(query, 6)
        SQL_ReadResult(query, 7, fSkill)
        SQL_ReadResult(query, 8, fAccuracy)
        SQL_ReadResult(query, 9, fOnlinetime)
        if (rowcolori==1)
        {
            rowcolor="#FFFFAA"
            rowcolori=2
        } else
        {
            rowcolori=1
            rowcolor="#FFAAFF"
        }
        iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "<tr bgColor=%s><td>%2d</td><td>%-22.22s</td><td>%6d</td><td>%6d</td><td>%6d</td><td>%6d</td><td>%4d</td><td>%3.0f%</td><td>%3.0f%%</td><td>%3.0fh</td></tr>^n", rowcolor, iRank, sName, iKills,
                        iDeaths, iHits, iShots, iHeadshotkills, fSkill, fAccuracy, fOnlinetime)                        
        SQL_NextRow(query)
    }
    show_motd(id, sBuffer, "Top 15")
#if defined PSDEBUG
    log_amx(sBuffer)
#endif        
}


Полезные публикации - ссылки у меня в профиле. Ссылка на плагин против спама на сервере StopServerSpam там же.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Safety1st
сообщение 15.12.2012, 23:18
Сообщение #2
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Ограничение MOTD-контента 1536 байт. Это не изменить.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Metal Messiah
сообщение 16.12.2012, 11:26
Сообщение #3


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

Стаж: 13 лет

Сообщений: 2457
Благодарностей: 1482
Полезность: 770

HostGame.cf
Проблему решил.

Вынес sql запрос отображения топа в php скрипт, который все выводит с форматированием и кешированием, а результат подгружается в MOTD через IFRAME, адрес с параметром начальной позиции, итого /top50 выводит начиная с 51го...


Полезные публикации - ссылки у меня в профиле. Ссылка на плагин против спама на сервере StopServerSpam там же.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: