vio_line
Участник
- Сообщения
- 44
- Реакции
- 8
В логах:
L 06/12/2016 - 19:40:25: SourceMod error session started
L 06/12/2016 - 19:40:25: Info (map "$2000$") (file "errors_20160612.log")
L 06/12/2016 - 19:40:25: [SM] Native "Format" reported: Client index 10 is invalid
L 06/12/2016 - 19:40:25: [SM] Displaying call stack trace for plugin "rankme_hud_info.smx":
L 06/12/2016 - 19:40:25: [SM] [0] Line 104, E:\steampipe_server\css\cstrike\addons\sourcemod\scripting\rankme_hud_info.sp::RankCallback()
Код плагина:
L 06/12/2016 - 19:40:25: SourceMod error session started
L 06/12/2016 - 19:40:25: Info (map "$2000$") (file "errors_20160612.log")
L 06/12/2016 - 19:40:25: [SM] Native "Format" reported: Client index 10 is invalid
L 06/12/2016 - 19:40:25: [SM] Displaying call stack trace for plugin "rankme_hud_info.smx":
L 06/12/2016 - 19:40:25: [SM] [0] Line 104, E:\steampipe_server\css\cstrike\addons\sourcemod\scripting\rankme_hud_info.sp::RankCallback()
Код плагина:
C-подобный:
#include <sourcemod>
#include <rankme>
#define INTERVAL 1.0
#define TEXT_PLAYER "Игрок: "
#define TEXT_RANK "Позиция: "
#define TEXT_POINTS "Очки: "
#define TEXT_KDR "Уб. к смертям: "
#define TEXT_HEADSHOTS "Уб. в голову: "
#define TEXT_HITS "Попадания: "
new Handle:g_hUpdateHudTimer = INVALID_HANDLE;
new bool:g_bLoaded[MAXPLAYERS+1];
public Plugin:myinfo = {
name = "RankMe Hud Info",
author = "413th",
description = "Add-on for RankMe stats",
version = "1.3",
url = "n/a"
};
public OnMapStart()
{
if(g_hUpdateHudTimer == INVALID_HANDLE)
{
g_hUpdateHudTimer = CreateTimer(INTERVAL, Timer_UpdateHud, _, TIMER_REPEAT);
}
}
public Action:Timer_UpdateHud(Handle:timer)
{
new iObserverMode, iClientToShow;
for (new iClient = 1; iClient <= MaxClients; iClient++)
{
if(iClient == -1 || !IsClientInGame(iClient) || IsFakeClient(iClient) || !g_bLoaded[iClient])
{
continue;
}
iClientToShow = iClient;
if(!IsPlayerAlive(iClient) || IsClientObserver(iClient))
{
iObserverMode = GetEntProp(iClient, Prop_Send, "m_iObserverMode");
if(iObserverMode == 4 || iObserverMode == 5)
{
iClientToShow = GetEntPropEnt(iClient, Prop_Send, "m_hObserverTarget");
}
}
if(iClientToShow == -1 || !g_bLoaded[iClientToShow] || IsFakeClient(iClientToShow))
{
iClientToShow = iClient;
}
RankMe_GetRank(iClientToShow, RankCallback, iClient);
}
}
public RankCallback(iClientToShow, rank, any:iClient)
{
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), "%s%N\n%s%i\n%s%i (%s%i)\n%s", TEXT_PLAYER, iClientToShow, TEXT_RANK, rank, TEXT_POINTS, iPoints, (iScore > 0) ? "+" : "", iScore, TEXT_KDR);
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%s", sMessage, fKDR, TEXT_HEADSHOTS);
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%s", sMessage, fHSR, TEXT_HITS);
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();
}
public Action:RankMe_OnPlayerLoaded(client)
{
g_bLoaded[client] = true;
}
public OnClientDisconnect(client)
{
g_bLoaded[client] = false;
}
Последнее редактирование: