AlliedModders Donor
Join Date: May 2016
Location: Brazil
|
04-18-2019
, 11:39
Re: Steam Works Group Manager
|
#72
|
Quote:
Originally Posted by alphaearth
I want only steam group members to enter the server. I adjusted it this way. there are these errors.
I've added codes starting with this line:
public void OnClientPutInServer(int iClient)
PHP Code:
// C:\Users\User\Desktop\yazēlēm\SM+++\addons\sourcemod\scripting\SWGM.sp(99) : warning 219: local variable "iClient" shadows a variable at a preceding level
PHP Code:
#include <steamworks>
#include <swgm>
#pragma semicolon 1
#pragma newdecls required
public Plugin myinfo =
{
name = "Steam Works Group Manager",
author = "Someone",
description = "Steam group membership check features for plugins",
version = "1.9",
url = "http://hlmod.ru | https://discord.gg/UfD3dSa"
};
Handle g_hForward_OnLeaveCheck, g_hForward_OnJoinCheck, g_hTimer;
int g_iGroupID, g_iAccountID[MAXPLAYERS+1];
Status g_iPlayerStatus[MAXPLAYERS+1];
public APLRes AskPluginLoad2(Handle myself, bool late, char[] sError, int err_max)
{
g_hForward_OnLeaveCheck = CreateGlobalForward("SWGM_OnLeaveGroup", ET_Ignore, Param_Cell);
g_hForward_OnJoinCheck = CreateGlobalForward("SWGM_OnJoinGroup", ET_Ignore, Param_Cell, Param_Cell);
CreateNative("SWGM_InGroup", Native_InGroup);
CreateNative("SWGM_InGroupOfficer", Native_InGroupOfficer);
CreateNative("SWGM_GetPlayerStatus", Native_GetPlayerStatus);
CreateNative("SWGM_CheckPlayer", Native_CheckPlayer);
CreateNative("SWGM_IsPlayerValidated", Native_IsPlayerValidated);
RegPluginLibrary("SWGM");
return APLRes_Success;
}
public void OnPluginStart()
{
ConVar CVAR;
(CVAR = CreateConVar("sm_swgm_groupid", "4150535", "Steam Group ID.", _, true, 0.0)).AddChangeHook(OnGroupChange);
g_iGroupID = CVAR.IntValue;
(CVAR = CreateConVar("sm_swgm_timer", "120.0", "Interval beetwen steam group checks.", _, true, 0.0)).AddChangeHook(OnTimeChange);
g_hTimer = CreateTimer(CVAR.FloatValue, Check_Timer, _, TIMER_REPEAT );
RegAdminCmd("sm_swgm_check", CMD_Check, ADMFLAG_ROOT);
AutoExecConfig(true, "swgm", "sourcemod/swgm");
}
public void OnGroupChange(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_iGroupID = convar.IntValue;
for(int i = 1; i <= MaxClients; ++i) if(IsClientInGame(i) && !IsFakeClient(i))
{
SteamWorks_GetUserGroupStatusAuthID(GetSteamAccountID(i), g_iGroupID);
}
}
public void OnTimeChange(ConVar convar, const char[] oldValue, const char[] newValue)
{
if(g_hTimer) KillTimer(g_hTimer); g_hTimer = null;
g_hTimer = CreateTimer(convar.FloatValue, Check_Timer, _, TIMER_REPEAT);
}
public Action Check_Timer(Handle hTimer)
{
Check();
return Plugin_Continue;
}
public void OnConfigsExecuted()
{
if(g_iGroupID == 0)
{
LogError("[SWGM] Set yours Steam group ID. Group ID `0` is default value. Example: sm_swgm_groupid `ID`.");
}
}
public Action CMD_Check(int iClient, int args)
{
Check();
ReplyToCommand(iClient, "[SWGM] All players have been checked.");
return Plugin_Handled;
}
void Check()
{
static int i;
for (i = 1; i <= MaxClients; ++i) if(g_iPlayerStatus[i] != UNASSIGNED && g_iPlayerStatus[i] != LEAVER)
{
SteamWorks_GetUserGroupStatusAuthID(g_iAccountID[i], g_iGroupID);
}
}
public void OnClientPutInServer(int iClient)
{
for (int iClient = 1; iClient <= MaxClients; iClient++)
if(IsClientInGame(iClient))
{
if(SWGM_IsPlayerValidated(iClient) && !SWGM_InGroup(iClient))
{
Check();
KickClient(iClient, "Sunucuda oynayabilmek icin steam grubumuza uye olmalisiniz.");
}
}
}
public void OnClientDisconnect(int iClient)
{
g_iAccountID[iClient] = 0;
g_iPlayerStatus[iClient] = UNASSIGNED;
}
public void SteamWorks_OnValidateClient(int iOwnerAuthID, int iAccountID)
{
SteamWorks_GetUserGroupStatusAuthID(iAccountID, g_iGroupID);
}
public void SteamWorks_OnClientGroupStatus(int iAccountID, int iGroupID, bool bIsMember, bool bIsOfficer)
{
static int iClient;
if(iGroupID == g_iGroupID && (iClient = GetUserFromAccountID(iAccountID)) != -1)
{
if(!bIsMember && g_iPlayerStatus[iClient] > LEAVER)
{
g_iPlayerStatus[iClient] = LEAVER;
Call_StartForward(g_hForward_OnLeaveCheck);
Call_PushCell(iClient);
Call_Finish();
}
else if(bIsMember && (g_iPlayerStatus[iClient] == NO_GROUP || g_iPlayerStatus[iClient] == UNASSIGNED))
{
g_iPlayerStatus[iClient] = bIsOfficer ? OFFICER:MEMBER;
Call_StartForward(g_hForward_OnJoinCheck);
Call_PushCell(iClient);
Call_PushCell(bIsOfficer);
Call_Finish();
}
}
}
public int GetUserFromAccountID(int iAccountID)
{
static int i;
for (i = 1; i <= MaxClients; ++i) if(IsClientInGame(i) && !IsFakeClient(i))
{
if(g_iAccountID[i] == 0)
{
g_iPlayerStatus[i] = NO_GROUP;
if((g_iAccountID[i] = GetSteamAccountID(i)) == iAccountID)
{
return i;
}
}
else if(g_iAccountID[i] == iAccountID)
{
return i;
}
}
return -1;
}
public int Native_InGroup(Handle hPlugin, int iClient)
{
return CheckClient((iClient = GetNativeCell(1)), "InGroup") ? (g_iPlayerStatus[iClient] > LEAVER):false;
}
public int Native_InGroupOfficer(Handle hPlugin, int iClient)
{
return CheckClient((iClient = GetNativeCell(1)), "InGroupOfficer") ? (g_iPlayerStatus[iClient] == OFFICER):false;
}
public int Native_GetPlayerStatus(Handle hPlugin, int iClient)
{
return CheckClient((iClient = GetNativeCell(1)), "GetPlayerStatus", false) ? view_as<int>(g_iPlayerStatus[iClient]):-1;
}
public int Native_CheckPlayer(Handle hPlugin, int iClient)
{
if (CheckClient((iClient = GetNativeCell(1)), "CheckPlayer", false))
{
SteamWorks_GetUserGroupStatusAuthID(g_iAccountID[iClient], g_iGroupID);
}
}
public int Native_IsPlayerValidated(Handle hPlugin, int iClient)
{
return ((iClient = GetNativeCell(1)) > 0 || iClient <= MaxClients) ? view_as<int>((g_iPlayerStatus[iClient] != UNASSIGNED)):
ThrowNativeError(SP_ERROR_NATIVE,
"[IsPlayerValidated] Client index %i is invalid.",
iClient);
}
bool CheckClient(int iClient, const char[] sFunction, bool bCheckValidation = true)
{
static int iClientError;
static const char sError[][] = { "invalid",
"not validated",
"a bot" };
if((iClientError = Function_GetClientError(iClient, bCheckValidation)) != 3)
{
ThrowNativeError(SP_ERROR_NATIVE,
"[%s] Client index %i is %s.",
sFunction, iClient,
sError[iClientError]);
}
return true;
}
int Function_GetClientError(int iClient, bool bCheckValidation)
{
if (iClient < 1 || iClient > MaxClients) return 0;
else if (bCheckValidation && g_iPlayerStatus[iClient] == UNASSIGNED) return 1;
else if (IsFakeClient(iClient)) return 2;
return 3;
}
|
So I understand that you leave your private server only for those who are in the steam group, if this is the case, this plugin does not do this, it lets the players only use such commands that you configure only if you are in the steam group.
To deprive the server to let only players from the steam group enter the server I believe just another plugin.
|
|