View Single Post
paulo_crash
AlliedModders Donor
Join Date: May 2016
Location: Brazil
Old 04-18-2019 , 11:39   Re: Steam Works Group Manager
Reply With Quote #72

Quote:
Originally Posted by alphaearth View Post
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_OnJoinCheckg_hTimer;
int         g_iGroupID,                     g_iAccountID[MAXPLAYERS+1];
Status     g_iPlayerStatus[MAXPLAYERS+1];

public 
APLRes AskPluginLoad2(Handle myselfbool latechar[] sErrorint err_max)
{
    
g_hForward_OnLeaveCheck CreateGlobalForward("SWGM_OnLeaveGroup",     ET_IgnoreParam_Cell);
    
g_hForward_OnJoinCheck     CreateGlobalForward("SWGM_OnJoinGroup",     ET_IgnoreParam_CellParam_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<= 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_hTimerKillTimer(g_hTimer); g_hTimer null;
    
g_hTimer CreateTimer(convar.FloatValueCheck_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 iClientint args)
{
    
Check();
    
ReplyToCommand(iClient"[SWGM] All players have been checked.");
    return 
Plugin_Handled;
}

void Check()
{
    static 
int i;
    for (
1<= 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 1iClient <= MaxClientsiClient++)
    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 iOwnerAuthIDint iAccountID)
{
    
SteamWorks_GetUserGroupStatusAuthID(iAccountIDg_iGroupID);
}

public 
void SteamWorks_OnClientGroupStatus(int iAccountIDint iGroupIDbool bIsMemberbool 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 (
1<= 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 hPluginint iClient)
{
    return 
CheckClient((iClient GetNativeCell(1)), "InGroup") ? (g_iPlayerStatus[iClient] > LEAVER):false;
}

public 
int Native_InGroupOfficer(Handle hPluginint iClient)
{
    return 
CheckClient((iClient GetNativeCell(1)), "InGroupOfficer") ? (g_iPlayerStatus[iClient] == OFFICER):false;
}

public 
int Native_GetPlayerStatus(Handle hPluginint iClient)
{
    return 
CheckClient((iClient GetNativeCell(1)), "GetPlayerStatus"false) ? view_as<int>(g_iPlayerStatus[iClient]):-1;
}

public 
int Native_CheckPlayer(Handle hPluginint iClient)
{
    if (
CheckClient((iClient GetNativeCell(1)), "CheckPlayer"false))
    {
        
SteamWorks_GetUserGroupStatusAuthID(g_iAccountID[iClient], g_iGroupID);
    }
}

public 
int Native_IsPlayerValidated(Handle hPluginint iClient)
{
    return ((
iClient GetNativeCell(1)) > || 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[] sFunctionbool bCheckValidation true)
{
    static 
int iClientError;
    static const 
char sError[][] = {    "invalid"
                                        
"not validated"
                                        
"a bot"                };

    if((
iClientError Function_GetClientError(iClientbCheckValidation)) != 3)    
    {
                                        
ThrowNativeError(SP_ERROR_NATIVE
                                        
"[%s] Client index %i is %s."
                                        
sFunctioniClient
                                        
sError[iClientError]);
    }
    return 
true;
}

int Function_GetClientError(int iClientbool bCheckValidation)
{
    if (
iClient || 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.
paulo_crash is offline