View Single Post
alphaearth
Senior Member
Join Date: Feb 2018
Location: Turkey
Old 04-18-2019 , 09:11   Re: Steam Works Group Manager
Reply With Quote #71

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;

__________________

Last edited by alphaearth; 04-18-2019 at 09:46.
alphaearth is offline