Помогите исправить ошибку в rankme_hud_info

vio_line

Участник
Сообщения
44
Реакции
8
@Hejter, по прежнему ругается:
Оффтоп
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
@AlmazON, ясное дело что у функции баги. Сам плагин это один большой баг.
--- Добавлено позже ---
@inklesspen,

/*********************************************************
* Get rank of a player on the server
*
* @param client The client index of the player to get the rank
* @param callback The return Callback
* @param data Any data you would like that return on the callback
* @noreturn
*********************************************************/
native RankMe_GetRank(client,RankCallback:callback,any:data=0);
--- Добавлено позже ---
@vio_line, теперь то хоть не тонну ошибок. Сейчас попробую еще что нить прикрутить. Ошибки в логах эти не критичны: Игрока не было на сервере в момент обработки функции, ни че страшного.
 
Последнее редактирование:

Kailo

Участник
Сообщения
194
Реакции
896
Т.к. функция RankCallback вызывается спустя какое-то время после вызова RankMe_GetRank, то требуется удостовериться, что игрок которому мы собираемся показать худ еще в игре, и что игрок о котором мы хотим показать информацию еще в игре, следовательно, если хотя бы один из них не игре, прерываем выполнение.
P.S. Для оптимизации заменил передачу "дефайн фраз" как аргумент, на сочетание строк.
C-подобный:
public RankCallback(iClientToShow, rank, any:iClient)
{
    if (!IsClientInGame(iClient) || !IsClientInGame(iClientToShow))
        return;

    new stats[STATS_NAMES];
    new session[STATS_NAMES];
    RankMe_GetStats(iClientToShow, stats);
    RankMe_GetSession(iClientToShow, session);
    new iPoints = stats[SCORE];
    new iScore = session[SCORE];
    new iKills = stats[KILLS];
    new iDeaths = stats[DEATHS];
    new Float:fKDR;
    if(iDeaths == 0)
    {
        fKDR = 1.0*iKills;
    }
    else
    {
        fKDR = (1.0*iKills)/(1.0*iDeaths);
    }
    new Float:fAccuracy;
    new iShots = stats[SHOTS];
    new iHits = stats[HITS];
    if(iShots == 0)
    {
        fAccuracy = 1.0*iHits;
    }
    else
    {
        fAccuracy = (1.0*iHits)/(1.0*iShots);
    }
    new iHeadshots = stats[HEADSHOTS];
    new Float:fHSR;
    if(iKills == 0)
    {
        fHSR = 1.0*iHeadshots;
    }
    else
    {
        fHSR = (1.0*iHeadshots)/(1.0*iKills);
    }

    new String:sMessage[255];
    Format(sMessage, sizeof(sMessage), TEXT_PLAYER ... "%N\n" ... TEXT_RANK ... "%i\n" ... TEXT_POINTS ... "%i (%s%i)\n" ... TEXT_KDR, iClientToShow, rank, iPoints, (iScore > 0) ? "+" : "", iScore);
    if(iKills >= 1000000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iKK/", sMessage, iKills/1000/1000);
    }
    else if(iKills >= 1000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iK/", sMessage, iKills/1000);
    }
    else
    {
        Format(sMessage, sizeof(sMessage), "%s%i/", sMessage, iKills);
    }
    if(iDeaths >= 1000000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iKK", sMessage, iDeaths/1000/1000);
    }
    else if(iDeaths >= 1000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iK", sMessage, iDeaths/1000);
    }
    else
    {
        Format(sMessage, sizeof(sMessage), "%s%i", sMessage, iDeaths);
    }
    Format(sMessage, sizeof(sMessage), "%s (%.2f)\n" ... TEXT_HEADSHOTS, sMessage, fKDR);
    if(iHeadshots >= 1000000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iKK", sMessage, iHeadshots/1000/1000);
    }
    else if(iHeadshots >= 1000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iK", sMessage, iHeadshots/1000);
    }
    else
    {
        Format(sMessage, sizeof(sMessage), "%s%i", sMessage, iHeadshots);
    }
    Format(sMessage, sizeof(sMessage), "%s (%.2f)\n" ... TEXT_HITS, sMessage, fHSR);
    if(iHits >= 1000000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iKK/", sMessage, iHits/1000/1000);
    }
    else if(iHits >= 1000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iK/", sMessage, iHits/1000);
    }
    else
    {
        Format(sMessage, sizeof(sMessage), "%s%i/", sMessage, iHits);
    }
    if(iShots >= 1000000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iKK", sMessage, iShots/1000/1000);
    }
    else if(iShots >= 1000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iK", sMessage, iShots/1000);
    }
    else
    {
        Format(sMessage, sizeof(sMessage), "%s%i", sMessage, iShots);
    }
    Format(sMessage, sizeof(sMessage), "%s (%.2f)", sMessage, fAccuracy);

    new Handle:hBuffer = StartMessageOne("KeyHintText", iClient);
    BfWriteByte(hBuffer, 1);
    BfWriteString(hBuffer, sMessage);
    EndMessage();
}
 
Последнее редактирование:

vio_line

Участник
Сообщения
44
Реакции
8
Т.к. функция RankCallback вызывается спустя какое-то время после вызова RankMe_GetRank, то требуется удостовериться, что игрок которому мы собираемся показать худ еще в игре, и что игрок о котором мы хотим показать информацию еще в игре, следовательно, если хотя бы один из них не игре, прерываем выполнение.
P.S. Для оптимизации заменил передачу "дефайн фраз" как аргумент, на сочетание строк.
C-подобный:
public RankCallback(iClientToShow, rank, any:iClient)
{
    if (!IsClientInGame(iClient) || !IsClientInGame(iClientToShow))
        return;

    new stats[STATS_NAMES];
    new session[STATS_NAMES];
    RankMe_GetStats(iClientToShow, stats);
    RankMe_GetSession(iClientToShow, session);
    new iPoints = stats[SCORE];
    new iScore = session[SCORE];
    new iKills = stats[KILLS];
    new iDeaths = stats[DEATHS];
    new Float:fKDR;
    if(iDeaths == 0)
    {
        fKDR = 1.0*iKills;
    }
    else
    {
        fKDR = (1.0*iKills)/(1.0*iDeaths);
    }
    new Float:fAccuracy;
    new iShots = stats[SHOTS];
    new iHits = stats[HITS];
    if(iShots == 0)
    {
        fAccuracy = 1.0*iHits;
    }
    else
    {
        fAccuracy = (1.0*iHits)/(1.0*iShots);
    }
    new iHeadshots = stats[HEADSHOTS];
    new Float:fHSR;
    if(iKills == 0)
    {
        fHSR = 1.0*iHeadshots;
    }
    else
    {
        fHSR = (1.0*iHeadshots)/(1.0*iKills);
    }

    new String:sMessage[255];
    Format(sMessage, sizeof(sMessage), TEXT_PLAYER ... "%N\n" ... TEXT_RANK ... "%i\n" ... TEXT_POINTS ... "%i (%s%i)\n" ... TEXT_KDR, iClientToShow, rank, iPoints, (iScore > 0) ? "+" : "", iScore);
    if(iKills >= 1000000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iKK/", sMessage, iKills/1000/1000);
    }
    else if(iKills >= 1000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iK/", sMessage, iKills/1000);
    }
    else
    {
        Format(sMessage, sizeof(sMessage), "%s%i/", sMessage, iKills);
    }
    if(iDeaths >= 1000000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iKK", sMessage, iDeaths/1000/1000);
    }
    else if(iDeaths >= 1000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iK", sMessage, iDeaths/1000);
    }
    else
    {
        Format(sMessage, sizeof(sMessage), "%s%i", sMessage, iDeaths);
    }
    Format(sMessage, sizeof(sMessage), "%s (%.2f)\n" ... TEXT_HEADSHOTS, sMessage, fKDR);
    if(iHeadshots >= 1000000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iKK", sMessage, iHeadshots/1000/1000);
    }
    else if(iHeadshots >= 1000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iK", sMessage, iHeadshots/1000);
    }
    else
    {
        Format(sMessage, sizeof(sMessage), "%s%i", sMessage, iHeadshots);
    }
    Format(sMessage, sizeof(sMessage), "%s (%.2f)\n" ... TEXT_HITS, sMessage, fHSR);
    if(iHits >= 1000000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iKK/", sMessage, iHits/1000/1000);
    }
    else if(iHits >= 1000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iK/", sMessage, iHits/1000);
    }
    else
    {
        Format(sMessage, sizeof(sMessage), "%s%i/", sMessage, iHits);
    }
    if(iShots >= 1000000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iKK", sMessage, iShots/1000/1000);
    }
    else if(iShots >= 1000)
    {
        Format(sMessage, sizeof(sMessage), "%s%iK", sMessage, iShots/1000);
    }
    else
    {
        Format(sMessage, sizeof(sMessage), "%s%i", sMessage, iShots);
    }
    Format(sMessage, sizeof(sMessage), "%s (%.2f)", sMessage, fAccuracy);

    new Handle:hBuffer = StartMessageOne("KeyHintText", iClient);
    BfWriteByte(hBuffer, 1);
    BfWriteString(hBuffer, sMessage);
    EndMessage();
}

Те же ошибки:
Оффтоп
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
@AlmazON, можно попробовать FormatEx, но будет ли профит? Так же попробовать добавить две проверки на этот формат.
 

vio_line

Участник
Сообщения
44
Реакции
8
Помогите исправить ошибку в rankme_hud_info пробуй опять обновил пост. Последнее что могу предложить, если опять ошибки то придется писать с нуля.
И снова ошибки.
Оффтоп
Можешь попробовать написать с нуля. Странно что сам автор статы RankMe не впилил в плагин.
Думаю, если грамотно все написать, то будет пользоваться спросом.
 
Последнее редактирование:

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
плагин-то компилируешь?
--- Добавлено позже ---
говоришь, что ошибка на 169 строке, так ее там быть не может, это изначально там была, если брать плагин от хейтера, там функция на 172 строке, значит ты просто код свой вставляешь и все? хм, хм
 

vio_line

Участник
Сообщения
44
Реакции
8
Тааак! Чувствую это мой касяк!
Скомпилил smx файл и в логах сплошные:
Оффтоп
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
@vio_line, это вся ошибка? или есть еще. Сам плагин работает?
Совет: перекомпилить плагин под версию текущую используемую версию сорсмода.
Какая вообще у тебя версия SM стоит?
 

vio_line

Участник
Сообщения
44
Реакции
8
@Hejter, Версия на сервере sourcemod-1.8.0-git5912-linux
А компилировал sourcemod-1.8.0-git5912-windows
Плагин работает. Но из за того что логи бомбило дико,
пришлось его отключить. Может я неправильно скомпилил?
И да, ошибка только эта.
 

Вложения

  • rankme_hud_info.sp
    5.7 КБ · Просмотры: 15
  • rankme_hud_info.smx
    6.4 КБ · Просмотры: 4

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
@vio_line, не знаю крч в чем дело и в плагине ли дело? Я бы пока неиспользовал Sm 1.8.x. Почитал я на оленях, у многих плагинов так. Используй пока что SM 1.7.x.
По твоей ошибкe: Не запускается сервер
 

vio_line

Участник
Сообщения
44
Реакции
8
@Hejter, все равно благодарю за потраченное время. Попробую обратиться в заказы.
И можешь пояснить в чем здесь дело?
-UMP9X8Y8ZU.jpg
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
@vio_line, сам не знаю, но судя по всему ничего критичного. Ставь 1.7.x если хочешь избавиться от ошибки [SM] Exception reported: Plugin not runnable
--- Добавлено позже ---
Оффтоп
 
Последнее редактирование:

vio_line

Участник
Сообщения
44
Реакции
8
@Hejter, все отлично! Спасибо, тебе большое.
Логи чистые, плагин работает!
Скомпилировал на sourcemod-1.7.3
На сервере так же переустановил build 1.7.3
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
@vio_line, как я уже предположил. На SM 1.8.x нужен новый синтааксис, старый там работать уже не будет.
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
967
Это же просто переменная...
Оффтоп
Это может быть из-за транслита. Ищет транслит под клиент, а самого клиента нету. Это лишь мое предположение
--- Добавлено позже ---
@vio_line, как я уже предположил. На SM 1.8.x нужен новый синтааксис, старый там работать уже не будет.
Плагины под 1.7 ведь будут наработать на 1.8?
--- Добавлено позже ---
@Hejter, Версия на сервере sourcemod-1.8.0-git5912-linux
А компилировал sourcemod-1.8.0-git5912-windows
Плагин работает. Но из за того что логи бомбило дико,
пришлось его отключить. Может я неправильно скомпилил?
И да, ошибка только эта.
Без разницы на какой версии ОС компилить. На 1.7 проверено.
 
Последнее редактирование:
Сверху Снизу