1 #include "CPlayerManager.h"
2 #include "sm_stringutil.h"
4 static cell_t sm_GetClientCount(IPluginContext *pCtx, const cell_t *params)
8 return g_PlayerManager.GetPlayerCount();
11 int maxplayers = g_PlayerManager.GetMaxClients();
13 for (int i=1; i<=maxplayers; ++i)
15 CPlayer *pPlayer = g_PlayerManager.GetPlayerByIndex(i);
16 if ((pPlayer->IsPlayerConnected()) && !(pPlayer->IsPlayerInGame()))
22 return (g_PlayerManager.GetPlayerCount() + count);
25 static cell_t sm_GetMaxClients(IPluginContext *pCtx, const cell_t *params)
27 return g_PlayerManager.GetMaxClients();
30 static cell_t sm_GetClientName(IPluginContext *pCtx, const cell_t *params)
32 int index = params[1];
33 if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
35 return pCtx->ThrowNativeError("Invalid client index %d.", index);
38 CPlayer *pPlayer = g_PlayerManager.GetPlayerByIndex(index);
39 if (!pPlayer->IsPlayerConnected())
41 return pCtx->ThrowNativeError("Client %d is not connected.", index);
44 pCtx->StringToLocalUTF8(params[2], static_cast<size_t>(params[3]), pPlayer->PlayerName(), NULL);
48 static cell_t sm_GetClientIP(IPluginContext *pCtx, const cell_t *params)
50 int index = params[1];
51 if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
53 return pCtx->ThrowNativeError("Invalid client index %d.", index);
56 CPlayer *pPlayer = g_PlayerManager.GetPlayerByIndex(index);
57 if (!pPlayer->IsPlayerConnected())
59 return pCtx->ThrowNativeError("Client %d is not connected.", index);
63 strcpy(buf, pPlayer->PlayerIP());
65 if (params[4] && (ptr = strchr(buf, ':')))
70 pCtx->StringToLocal(params[2], static_cast<size_t>(params[3]), buf);
74 static cell_t sm_GetClientAuthStr(IPluginContext *pCtx, const cell_t *params)
76 int index = params[1];
77 if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
79 return pCtx->ThrowNativeError("Invalid client index %d.", index);
82 CPlayer *pPlayer = g_PlayerManager.GetPlayerByIndex(index);
83 if (!pPlayer->IsPlayerConnected())
85 return pCtx->ThrowNativeError("Client %d is not connected.", index);
88 pCtx->StringToLocal(params[2], static_cast<size_t>(params[3]), pPlayer->PlayerAuthString());
92 static cell_t sm_IsPlayerConnected(IPluginContext *pCtx, const cell_t *params)
94 int index = params[1];
95 if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
97 return pCtx->ThrowNativeError("Invalid client index %d.", index);
100 return (g_PlayerManager.GetPlayerByIndex(index)->IsPlayerConnected()) ? 1 : 0;
103 static cell_t sm_IsPlayerIngame(IPluginContext *pCtx, const cell_t *params)
105 int index = params[1];
106 if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
108 return pCtx->ThrowNativeError("Invalid client index %d.", index);
111 return (g_PlayerManager.GetPlayerByIndex(index)->IsPlayerInGame()) ? 1 : 0;
114 static cell_t sm_IsPlayerAuthorized(IPluginContext *pCtx, const cell_t *params)
116 int index = params[1];
117 if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
119 return pCtx->ThrowNativeError("Invalid client index %d.", index);
122 return (g_PlayerManager.GetPlayerByIndex(index)->IsPlayerAuthorized()) ? 1 : 0;
125 static cell_t sm_IsPlayerFakeClient(IPluginContext *pCtx, const cell_t *params)
127 int index = params[1];
128 if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
130 return pCtx->ThrowNativeError("Invalid client index %d.", index);
133 CPlayer *pPlayer = g_PlayerManager.GetPlayerByIndex(index);
134 if (!pPlayer->IsPlayerConnected())
136 return pCtx->ThrowNativeError("Client %d is not connected.", index);
139 return (pPlayer->IsPlayerFakeClient()) ? 1 : 0;
142 static cell_t sm_PrintToServer(IPluginContext *pCtx, const cell_t *params)
148 pCtx->LocalToString(params[1], &fmt);
149 size_t res = atcprintf(buffer, sizeof(buffer)-2, fmt, pCtx, params, &arg);
151 buffer[res++] = '\n';
154 META_CONPRINT(buffer);
159 static cell_t sm_PrintToConsole(IPluginContext *pCtx, const cell_t *params)
161 int index = params[1];
162 if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
164 return pCtx->ThrowNativeError("Invalid client index %d.", index);
167 CPlayer *pPlayer = g_PlayerManager.GetPlayerByIndex(index);
168 if (!pPlayer->IsPlayerInGame())
170 return pCtx->ThrowNativeError("Client %d is not in game.", index);
177 pCtx->LocalToString(params[2], &fmt);
178 size_t res = atcprintf(buffer, sizeof(buffer)-2, fmt, pCtx, params, &arg);
180 buffer[res++] = '\n';
183 engine->ClientPrintf(pPlayer->GetPlayerEdict(), buffer);
188 REGISTER_NATIVES(playernatives)
190 {"GetMaxClients", sm_GetMaxClients},
191 {"GetClientCount", sm_GetClientCount},
192 {"GetClientName", sm_GetClientName},
193 {"GetClientIP", sm_GetClientIP},
194 {"GetClientAuthString", sm_GetClientAuthStr},
195 {"IsPlayerConnected", sm_IsPlayerConnected},
196 {"IsPlayerInGame", sm_IsPlayerIngame},
197 {"IsPlayerAuthorized", sm_IsPlayerAuthorized},
198 {"IsPlayerFakeClient", sm_IsPlayerFakeClient},
199 {"PrintToServer", sm_PrintToServer},
200 {"PrintToConsole", sm_PrintToConsole},