158 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
| #pragma semicolon 1
 | |
| 
 | |
| #include <sourcemod>
 | |
| #include <steamcore>
 | |
| 
 | |
| #define PLUGIN_URL ""
 | |
| #define PLUGIN_VERSION "1.1"
 | |
| #define PLUGIN_NAME "Inviter"
 | |
| #define PLUGIN_AUTHOR "Statik"
 | |
| 
 | |
| public Plugin:myinfo =
 | |
| {
 | |
| 	name = PLUGIN_NAME,
 | |
| 	author = PLUGIN_AUTHOR,
 | |
| 	description = "Steam group invites via game commands.",
 | |
| 	version = PLUGIN_VERSION,
 | |
| 	url = PLUGIN_URL
 | |
| }
 | |
| 
 | |
| new Handle:cvarGroupID;
 | |
| new Handle:cvarAdminFlags;
 | |
| new Handle:cvarAllInviteThemselves;
 | |
| new Handle:cvarAllInviteOthers;
 | |
| new Handle:cvarTimeBetweenInvites;
 | |
| 
 | |
| new Handle:disabledClients;
 | |
| new ReplySource:sources[MAXPLAYERS + 1];
 | |
| 
 | |
| public OnPluginStart()
 | |
| {
 | |
| 	// Cvars
 | |
| 	CreateConVar("inviter_version", PLUGIN_VERSION, "Force Picker Version", FCVAR_SPONLY | FCVAR_DONTRECORD | FCVAR_NOTIFY);
 | |
| 	cvarGroupID = CreateConVar("in_steamgroupid", "", "Group id where people is going to be invited.", 0);
 | |
| 	cvarAdminFlags = CreateConVar("in_adminflags", "b", "Administrator flags to bypass the restrictions.", 0);
 | |
| 	cvarAllInviteThemselves = CreateConVar("in_allcaninvitethemselves.", "1", "Allows everybody to send invites to them themselves.", 0, true, 0.0, true, 1.0);
 | |
| 	cvarAllInviteOthers = CreateConVar("in_allcaninviteothers.", "0", "Allows everybody to send invites to other clients.", 0, true, 0.0, true, 1.0);
 | |
| 	cvarTimeBetweenInvites = CreateConVar("in_timebetweeninvites", "240", "Time between invites that non-admins must wait to send more invites.", 0, true, 0.0, true, 7200.0);
 | |
| 
 | |
| 	RegConsoleCmd("sm_invite", cmdInvite, "Sends a group invite");
 | |
| 	RegConsoleCmd("sm_join", cmdInvite, "Sends a group invite");
 | |
| 
 | |
| 	disabledClients = CreateArray();
 | |
| 
 | |
| 	LoadTranslations("common.phrases");
 | |
| 
 | |
| 	AutoExecConfig(true, "plugin.inviter");
 | |
| }
 | |
| 
 | |
| public Action:cmdInvite(client, args)
 | |
| {
 | |
| 	new bool:isAdmin = IsClientAdmin(client);
 | |
| 
 | |
| 	decl String:steamGroup[65];
 | |
| 	GetConVarString(cvarGroupID, steamGroup, sizeof(steamGroup));
 | |
| 	if (StrEqual(steamGroup, ""))
 | |
| 	{
 | |
| 		ReplyToCommand(client, "\x07FFF047Steam group is not configured.");
 | |
| 		return Plugin_Handled;
 | |
| 	}
 | |
| 
 | |
| 	if (!isAdmin)
 | |
| 	{
 | |
| 		new id = GetSteamAccountID(client);
 | |
| 		if (FindValueInArray(disabledClients, id) != -1)
 | |
| 		{
 | |
| 			ReplyToCommand(client, "\x07FFF047You must wait \x01%i \x07FFF047seconds or less to send another invite.", GetConVarInt(cvarTimeBetweenInvites));
 | |
| 			return Plugin_Handled;
 | |
| 		}
 | |
| 		new interval = GetConVarInt(cvarTimeBetweenInvites);
 | |
| 		PushArrayCell(disabledClients, id);
 | |
| 		CreateTimer(Float:interval, cooldown, id);
 | |
| 	}
 | |
| 
 | |
| 	if (args == 0)
 | |
| 	{
 | |
| 		if (client == 0)
 | |
| 		{
 | |
| 			ReplyToCommand(client, "You cannot invite a server to a Steam group.");
 | |
| 			return Plugin_Handled;
 | |
| 		}
 | |
| 		if (isAdmin || GetConVarBool(cvarAllInviteThemselves))
 | |
| 		{
 | |
| 			new String:steamID64[32];
 | |
| 			GetClientAuthId(client, AuthId_SteamID64, steamID64, sizeof steamID64);
 | |
| 			sources[client] = GetCmdReplySource();
 | |
| 			SteamGroupInvite(client, steamID64, steamGroup, callback);
 | |
| 			return Plugin_Handled;
 | |
| 		}
 | |
| 		ReplyToCommand(client, "\x07FFF047You do not have access to this command.");
 | |
| 		return Plugin_Handled;
 | |
| 	}
 | |
| 	else if (args == 1)
 | |
| 	{
 | |
| 		if (isAdmin || GetConVarBool(cvarAllInviteOthers))
 | |
| 		{
 | |
| 			decl String:arg[64];
 | |
| 			GetCmdArg(1, arg, sizeof arg);
 | |
| 			new target = FindTarget(client, arg, true, false);
 | |
| 			if (target == -1)
 | |
| 			{
 | |
| 				decl String:buffer[32];
 | |
| 				GetCmdArg(0, buffer, sizeof(buffer));
 | |
| 				ReplyToCommand(client, "\x07FFF047Incorrect target, usage: \x01%s [#userid|name]", buffer);
 | |
| 				return Plugin_Handled;
 | |
| 			}
 | |
| 			new String:steamID64[32];
 | |
| 			GetClientAuthId(target, AuthId_SteamID64, steamID64, sizeof steamID64);
 | |
| 			sources[client] = GetCmdReplySource();
 | |
| 			SteamGroupInvite(client, steamID64, steamGroup, callback);
 | |
| 			return Plugin_Handled;
 | |
| 		}
 | |
| 		ReplyToCommand(client, "\x07FFF047You are not allowed to invite other people.");
 | |
| 		return Plugin_Handled;
 | |
| 	}
 | |
| 	ReplyToCommand(client, "\x07FFF047Incorrect syntax, usage: \x01%s [#userid|name]");
 | |
| 	return Plugin_Handled;
 | |
| }
 | |
| 
 | |
| public Action:cooldown(Handle:timer, any:id)
 | |
| {
 | |
| 	new i;
 | |
| 	if ((i = FindValueInArray(disabledClients, id)) != -1)
 | |
| 		RemoveFromArray(disabledClients, i);
 | |
| }
 | |
| 
 | |
| public callback(client, bool:success, errorCode, any:data)
 | |
| {
 | |
| 	if (client != 0 && !IsClientInGame(client)) return;
 | |
| 
 | |
| 	SetCmdReplySource(sources[client]);
 | |
| 	if (success) ReplyToCommand(client, "\x07FFF047The group invite has been sent.");
 | |
| 	else
 | |
| 	{
 | |
| 		if (errorCode < 0x10 || errorCode == 0x23)
 | |
| 		{
 | |
| 			new id = GetSteamAccountID(client);
 | |
| 			new i;
 | |
| 			if ((i = FindValueInArray(disabledClients, id)) != -1)
 | |
| 				RemoveFromArray(disabledClients, i);
 | |
| 		}
 | |
| 		if (errorCode == 0x01) ReplyToCommand(client, "\x07FFF047Server is busy with another task at this time, try again in a few seconds.");
 | |
| 		else if (errorCode == 0x02) ReplyToCommand(client, "\x07FFF047There was a timeout in your request, try again.");
 | |
| 		else if (errorCode == 0x23) ReplyToCommand(client, "\x07FFF047Session expired, retry to reconnect.");
 | |
| 		else if (errorCode == 0x27) ReplyToCommand(client, "\x07FFF047Target has already received an invite or is already on the group.");
 | |
| 		else ReplyToCommand(client, "\x07FFF047There was an error \x010x%02x \x07FFF047while sending your invite :(", errorCode);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| public bool:IsClientAdmin(client)
 | |
| {
 | |
| 	decl String:strFlags[32];
 | |
| 	GetConVarString(cvarAdminFlags, strFlags, sizeof strFlags);
 | |
| 	new flags = ReadFlagString(strFlags);
 | |
| 	if (flags & GetUserFlagBits(client) || ADMFLAG_ROOT & GetUserFlagBits(client))
 | |
| 		return true;
 | |
| 	return false;
 | |
| }
 |