Removed tag system (bug 3751, r=fyren, a12=blocking).
This commit is contained in:
parent
3ee6bae4ba
commit
3ac9ecb4b7
@ -19,7 +19,7 @@ OBJECTS = AdminCache.cpp CDataPack.cpp ConCmdManager.cpp ConVarManager.cpp CoreC
|
|||||||
sourcemm_api.cpp sourcemod.cpp MenuStyle_Base.cpp MenuStyle_Valve.cpp MenuManager.cpp \
|
sourcemm_api.cpp sourcemod.cpp MenuStyle_Base.cpp MenuStyle_Valve.cpp MenuManager.cpp \
|
||||||
MenuStyle_Radio.cpp ChatTriggers.cpp ADTFactory.cpp MenuVoting.cpp sm_crc32.cpp \
|
MenuStyle_Radio.cpp ChatTriggers.cpp ADTFactory.cpp MenuVoting.cpp sm_crc32.cpp \
|
||||||
frame_hooks.cpp concmd_cleaner.cpp Profiler.cpp PhraseCollection.cpp NextMap.cpp \
|
frame_hooks.cpp concmd_cleaner.cpp Profiler.cpp PhraseCollection.cpp NextMap.cpp \
|
||||||
NativeOwner.cpp TagsSystem.cpp
|
NativeOwner.cpp
|
||||||
OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \
|
OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \
|
||||||
smn_datapacks.cpp smn_entities.cpp smn_events.cpp smn_fakenatives.cpp \
|
smn_datapacks.cpp smn_entities.cpp smn_events.cpp smn_fakenatives.cpp \
|
||||||
smn_filesystem.cpp smn_float.cpp smn_functions.cpp smn_gameconfigs.cpp smn_halflife.cpp \
|
smn_filesystem.cpp smn_float.cpp smn_functions.cpp smn_gameconfigs.cpp smn_halflife.cpp \
|
||||||
|
@ -1,206 +0,0 @@
|
|||||||
/**
|
|
||||||
* vim: set ts=4 :
|
|
||||||
* =============================================================================
|
|
||||||
* SourceMod
|
|
||||||
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
|
||||||
* =============================================================================
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
|
||||||
* the terms of the GNU General Public License, version 3.0, as published by the
|
|
||||||
* Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
* details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with
|
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* As a special exception, AlliedModders LLC gives you permission to link the
|
|
||||||
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
|
||||||
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
|
||||||
* by the Valve Corporation. You must obey the GNU General Public License in
|
|
||||||
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
|
||||||
* this exception to all derivative works. AlliedModders LLC defines further
|
|
||||||
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
|
||||||
* or <http://www.sourcemod.net/license.php>.
|
|
||||||
*
|
|
||||||
* Version: $Id$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "TagsSystem.h"
|
|
||||||
#include "sourcemod.h"
|
|
||||||
#include "sourcemm_api.h"
|
|
||||||
#include "sm_stringutil.h"
|
|
||||||
#include "PluginSys.h"
|
|
||||||
#include "compat_wrappers.h"
|
|
||||||
|
|
||||||
TagHandler g_Tags;
|
|
||||||
|
|
||||||
TagHandler::TagHandler()
|
|
||||||
{
|
|
||||||
m_SvTags = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
TagHandler::~TagHandler()
|
|
||||||
{
|
|
||||||
SourceHook::List<char *>::iterator iter = m_TagList.begin();
|
|
||||||
|
|
||||||
while (iter != m_TagList.end())
|
|
||||||
{
|
|
||||||
g_pMemAlloc->Free(*iter);
|
|
||||||
iter = m_TagList.erase(iter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void TagHandler::OnSourceModAllInitialized_Post()
|
|
||||||
{
|
|
||||||
g_PluginSys.AddPluginsListener(this);
|
|
||||||
|
|
||||||
m_SvTags = icvar->FindVar("sv_tags");
|
|
||||||
AddTag("sourcemod");
|
|
||||||
}
|
|
||||||
|
|
||||||
void TagHandler::OnSourceModLevelActivated()
|
|
||||||
{
|
|
||||||
SourceHook::List<char *>::iterator iter = m_TagList.begin();
|
|
||||||
|
|
||||||
while (iter != m_TagList.end())
|
|
||||||
{
|
|
||||||
ApplyTag(*iter);
|
|
||||||
iter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void TagHandler::OnSourceModShutdown()
|
|
||||||
{
|
|
||||||
RemoveTag("sourcemod");
|
|
||||||
}
|
|
||||||
|
|
||||||
void TagHandler::OnPluginDestroyed(IPlugin *plugin)
|
|
||||||
{
|
|
||||||
SourceHook::List<char *> *pList = NULL;
|
|
||||||
|
|
||||||
if (!plugin->GetProperty("ServerTags", (void **)&pList, false) || !pList)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
SourceHook::List<char *>::iterator iter = pList->begin();
|
|
||||||
|
|
||||||
while (iter != pList->end())
|
|
||||||
{
|
|
||||||
RemoveTag(*iter);
|
|
||||||
g_pMemAlloc->Free(*iter);
|
|
||||||
iter = pList->erase(iter);
|
|
||||||
}
|
|
||||||
|
|
||||||
delete pList;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TagHandler::AddTag(const char *addTag)
|
|
||||||
{
|
|
||||||
SourceHook::List<char *>::iterator iter = m_TagList.begin();
|
|
||||||
|
|
||||||
while (iter != m_TagList.end())
|
|
||||||
{
|
|
||||||
if (strcmp(*iter, addTag) == 0)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_TagList.push_back(strdup(addTag));
|
|
||||||
ApplyTag(addTag);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TagHandler::RemoveTag(const char *removeTag)
|
|
||||||
{
|
|
||||||
SourceHook::List<char *>::iterator iter = m_TagList.begin();
|
|
||||||
|
|
||||||
while (iter != m_TagList.end())
|
|
||||||
{
|
|
||||||
if (strcmp(*iter, removeTag) == 0)
|
|
||||||
{
|
|
||||||
g_pMemAlloc->Free(*iter);
|
|
||||||
m_TagList.erase(iter);
|
|
||||||
StripTag(removeTag);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TagHandler::ApplyTag(const char *addTag)
|
|
||||||
{
|
|
||||||
if (m_SvTags == NULL)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *curTags = m_SvTags->GetString();
|
|
||||||
|
|
||||||
if (strstr(curTags, addTag) != NULL)
|
|
||||||
{
|
|
||||||
/* Already tagged */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (curTags[0] == '\0')
|
|
||||||
{
|
|
||||||
m_SvTags->SetValue(addTag);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* New tags buffer (+2 for , and null char) */
|
|
||||||
size_t newLen = strlen(curTags) + strlen(addTag) + 2;
|
|
||||||
char *newTags = (char *)alloca(newLen);
|
|
||||||
|
|
||||||
g_SourceMod.Format(newTags, newLen, "%s,%s", curTags, addTag);
|
|
||||||
|
|
||||||
m_SvTags->SetValue(newTags);
|
|
||||||
}
|
|
||||||
|
|
||||||
void TagHandler::StripTag(const char *removeTag)
|
|
||||||
{
|
|
||||||
if (m_SvTags == NULL)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *curTags = m_SvTags->GetString();
|
|
||||||
|
|
||||||
if (strcmp(curTags, removeTag) == 0)
|
|
||||||
{
|
|
||||||
m_SvTags->SetValue("");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *newTags = strdup(curTags);
|
|
||||||
size_t searchLen = strlen(removeTag) + 2;
|
|
||||||
char *search = (char *)alloca(searchLen);
|
|
||||||
|
|
||||||
if (strncmp(curTags, removeTag, strlen(removeTag)) == 0)
|
|
||||||
{
|
|
||||||
strcpy(search, removeTag);
|
|
||||||
search[searchLen-2] = ',';
|
|
||||||
search[searchLen-1] = '\0';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
strcpy(search+1, removeTag);
|
|
||||||
search[0] = ',';
|
|
||||||
search[searchLen-1] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
UTIL_ReplaceAll(newTags, strlen(newTags) + 1, search, "" , true);
|
|
||||||
|
|
||||||
m_SvTags->SetValue(newTags);
|
|
||||||
|
|
||||||
g_pMemAlloc->Free(newTags);
|
|
||||||
}
|
|
@ -1,71 +0,0 @@
|
|||||||
/**
|
|
||||||
* vim: set ts=4 :
|
|
||||||
* =============================================================================
|
|
||||||
* SourceMod
|
|
||||||
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
|
|
||||||
* =============================================================================
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
|
||||||
* the terms of the GNU General Public License, version 3.0, as published by the
|
|
||||||
* Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
* details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with
|
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* As a special exception, AlliedModders LLC gives you permission to link the
|
|
||||||
* code of this program (as well as its derivative works) to "Half-Life 2," the
|
|
||||||
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
|
|
||||||
* by the Valve Corporation. You must obey the GNU General Public License in
|
|
||||||
* all respects for all other code used. Additionally, AlliedModders LLC grants
|
|
||||||
* this exception to all derivative works. AlliedModders LLC defines further
|
|
||||||
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
|
|
||||||
* or <http://www.sourcemod.net/license.php>.
|
|
||||||
*
|
|
||||||
* Version: $Id$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _INCLUDE_SOURCEMOD_TAGSSYSTEM_H_
|
|
||||||
#define _INCLUDE_SOURCEMOD_TAGSSYSTEM_H_
|
|
||||||
|
|
||||||
#include "sm_globals.h"
|
|
||||||
#include "sh_list.h"
|
|
||||||
#include "convar.h"
|
|
||||||
#include "IPluginSys.h"
|
|
||||||
|
|
||||||
class TagHandler :
|
|
||||||
public SMGlobalClass,
|
|
||||||
public IPluginsListener
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
TagHandler();
|
|
||||||
~TagHandler();
|
|
||||||
|
|
||||||
public: // SMGlobalClass
|
|
||||||
void OnSourceModAllInitialized_Post();
|
|
||||||
void OnSourceModLevelActivated();
|
|
||||||
void OnSourceModShutdown();
|
|
||||||
|
|
||||||
public: // IPluginsListener
|
|
||||||
void OnPluginDestroyed(IPlugin *plugin);
|
|
||||||
|
|
||||||
public:
|
|
||||||
bool AddTag(const char *addTag);
|
|
||||||
bool RemoveTag(const char *removeTag);
|
|
||||||
|
|
||||||
private:
|
|
||||||
void ApplyTag(const char *addTag);
|
|
||||||
void StripTag(const char *removeTag);
|
|
||||||
|
|
||||||
private:
|
|
||||||
SourceHook::List<char *>m_TagList;
|
|
||||||
ConVar *m_SvTags;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern TagHandler g_Tags;
|
|
||||||
|
|
||||||
#endif // _INCLUDE_SOURCEMOD_TAGSSYSTEM_H_
|
|
@ -1512,10 +1512,6 @@
|
|||||||
RelativePath="..\sourcemod.cpp"
|
RelativePath="..\sourcemod.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\TagsSystem.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\TextParsers.cpp"
|
RelativePath="..\TextParsers.cpp"
|
||||||
>
|
>
|
||||||
@ -1754,10 +1750,6 @@
|
|||||||
RelativePath="..\sourcemod.h"
|
RelativePath="..\sourcemod.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="..\TagsSystem.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="..\TextParsers.h"
|
RelativePath="..\TextParsers.h"
|
||||||
>
|
>
|
||||||
|
@ -43,7 +43,6 @@
|
|||||||
#include <inetchannel.h>
|
#include <inetchannel.h>
|
||||||
#include <bitbuf.h>
|
#include <bitbuf.h>
|
||||||
#include <sm_trie_tpl.h>
|
#include <sm_trie_tpl.h>
|
||||||
#include "TagsSystem.h"
|
|
||||||
|
|
||||||
#if SOURCE_ENGINE == SE_LEFT4DEAD
|
#if SOURCE_ENGINE == SE_LEFT4DEAD
|
||||||
#define NET_SETCONVAR 6
|
#define NET_SETCONVAR 6
|
||||||
@ -1307,55 +1306,11 @@ static cell_t SendConVarValue(IPluginContext *pContext, const cell_t *params)
|
|||||||
|
|
||||||
static cell_t AddServerTag(IPluginContext *pContext, const cell_t *params)
|
static cell_t AddServerTag(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
char *value;
|
return 0;
|
||||||
pContext->LocalToString(params[1], &value);
|
|
||||||
|
|
||||||
if (!g_Tags.AddTag(value))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
IPlugin *pPlugin = g_PluginSys.FindPluginByContext(pContext->GetContext());
|
|
||||||
SourceHook::List<char *> *pList = NULL;
|
|
||||||
|
|
||||||
if (!pPlugin->GetProperty("ServerTags", (void **)&pList, false) || !pList)
|
|
||||||
{
|
|
||||||
pList = new SourceHook::List<char *>;
|
|
||||||
pPlugin->SetProperty("ServerTags", pList);
|
|
||||||
}
|
|
||||||
|
|
||||||
pList->push_back(strdup(value));
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t RemoveServerTag(IPluginContext *pContext, const cell_t *params)
|
static cell_t RemoveServerTag(IPluginContext *pContext, const cell_t *params)
|
||||||
{
|
{
|
||||||
char *value;
|
|
||||||
pContext->LocalToString(params[1], &value);
|
|
||||||
|
|
||||||
IPlugin *pPlugin = g_PluginSys.FindPluginByContext(pContext->GetContext());
|
|
||||||
SourceHook::List<char *> *pList = NULL;
|
|
||||||
|
|
||||||
if (!pPlugin->GetProperty("ServerTags", (void **)&pList, false) || !pList)
|
|
||||||
{
|
|
||||||
pList = new SourceHook::List<char *>;
|
|
||||||
pPlugin->SetProperty("ServerTags", pList);
|
|
||||||
}
|
|
||||||
|
|
||||||
SourceHook::List<char *>::iterator iter = pList->begin();
|
|
||||||
|
|
||||||
while (iter != pList->end())
|
|
||||||
{
|
|
||||||
if (strcmp(*iter, value) == 0)
|
|
||||||
{
|
|
||||||
g_pMemAlloc->Free(*iter);
|
|
||||||
pList->erase(iter);
|
|
||||||
|
|
||||||
return g_Tags.RemoveTag(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -817,9 +817,11 @@ native bool:FindNextConCommand(Handle:search, String:buffer[], max_size, &bool:i
|
|||||||
native bool:SendConVarValue(client, Handle:convar, const String:value[]);
|
native bool:SendConVarValue(client, Handle:convar, const String:value[]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Appends a string to Valve's sv_tags convar and makes sure it remains after mapchanges.
|
* Adds an informational string to the server's public "tags".
|
||||||
|
* This string should be a short, unique identifier.
|
||||||
*
|
*
|
||||||
* Note: Tags are automatically removed on plugin unload
|
* Note: Tags are automatically removed when a plugin unloads.
|
||||||
|
* Note: Currently, this function does nothing because of bugs in the Valve master.
|
||||||
*
|
*
|
||||||
* @param tag Tag string to append.
|
* @param tag Tag string to append.
|
||||||
* @noreturn
|
* @noreturn
|
||||||
@ -827,9 +829,7 @@ native bool:SendConVarValue(client, Handle:convar, const String:value[]);
|
|||||||
native AddServerTag(const String:tag[]);
|
native AddServerTag(const String:tag[]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes a string from valve's sv_tags convar.
|
* Removes a tag previously added by the calling plugin.
|
||||||
*
|
|
||||||
* Note: You can only remove tags created by you.
|
|
||||||
*
|
*
|
||||||
* @param tag Tag string to remove.
|
* @param tag Tag string to remove.
|
||||||
* @noreturn
|
* @noreturn
|
||||||
|
Loading…
Reference in New Issue
Block a user