This is what I use.
You still have to add logic to the below if you are concerned with something else clobbering your tag. This shouldn't be necessary as just manually changing cvars that add/remove tags should still leave it in tact.
By the way, if I'm not mistaken, I'm pretty sure sv_tags has a limit of 128 characters (inc. null).
Global
PHP Code:
new Handle:sv_tags;
in OnPluginStart
PHP Code:
sv_tags = FindConVar("sv_tags");
PHP Code:
stock MyAddServerTag(const String:tag[])
{
decl String:currtags[128];
if (sv_tags == INVALID_HANDLE)
{
return;
}
GetConVarString(sv_tags, currtags, sizeof(currtags));
if (StrContains(currtags, tag) > -1)
{
// already have tag
return;
}
decl String:newtags[128];
Format(newtags, sizeof(newtags), "%s%s%s", currtags, (currtags[0]!=0)?",":"", tag);
new flags = GetConVarFlags(sv_tags);
SetConVarFlags(sv_tags, flags & ~FCVAR_NOTIFY);
SetConVarString(sv_tags, newtags);
SetConVarFlags(sv_tags, flags);
}
stock MyRemoveServerTag(const String:tag[])
{
decl String:newtags[128];
if (sv_tags == INVALID_HANDLE)
{
return;
}
GetConVarString(sv_tags, newtags, sizeof(newtags));
if (StrContains(newtags, tag) == -1)
{
// tag isn't on here, just bug out
return;
}
ReplaceString(newtags, sizeof(newtags), tag, "");
ReplaceString(newtags, sizeof(newtags), ",,", "");
new flags = GetConVarFlags(sv_tags);
SetConVarFlags(sv_tags, flags & ~FCVAR_NOTIFY);
SetConVarString(sv_tags, newtags);
SetConVarFlags(sv_tags, flags);
}