sm-plugins/SteamCore/scripting/inviter.sp
2017-02-26 00:25:51 +01:00

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;
}