Removed tag system (bug 3751, r=fyren, a12=blocking).
authorDavid Anderson <dvander@alliedmods.net>
Wed Mar 25 03:27:32 2009 -0400 (2009-03-25)
changeset 2684a802f5cebe28
parent 2683 4007111ae5df
child 2685 aacf5c8b3ac2
Removed tag system (bug 3751, r=fyren, a12=blocking).
core/Makefile
core/TagsSystem.cpp
core/TagsSystem.h
core/msvc9/sourcemod_mm.vcproj
core/smn_console.cpp
plugins/include/console.inc
     1.1 --- a/core/Makefile	Wed Mar 18 18:50:20 2009 -0700
     1.2 +++ b/core/Makefile	Wed Mar 25 03:27:32 2009 -0400
     1.3 @@ -19,7 +19,7 @@
     1.4  	sourcemm_api.cpp sourcemod.cpp MenuStyle_Base.cpp MenuStyle_Valve.cpp MenuManager.cpp \
     1.5  	MenuStyle_Radio.cpp ChatTriggers.cpp ADTFactory.cpp MenuVoting.cpp sm_crc32.cpp \
     1.6  	frame_hooks.cpp concmd_cleaner.cpp Profiler.cpp PhraseCollection.cpp NextMap.cpp \
     1.7 -	NativeOwner.cpp TagsSystem.cpp
     1.8 +	NativeOwner.cpp
     1.9  OBJECTS += smn_admin.cpp smn_bitbuffer.cpp smn_console.cpp smn_core.cpp \
    1.10  	smn_datapacks.cpp smn_entities.cpp smn_events.cpp smn_fakenatives.cpp \
    1.11  	smn_filesystem.cpp smn_float.cpp smn_functions.cpp smn_gameconfigs.cpp smn_halflife.cpp \
     2.1 --- a/core/TagsSystem.cpp	Wed Mar 18 18:50:20 2009 -0700
     2.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.3 @@ -1,206 +0,0 @@
     2.4 -/**
     2.5 -* vim: set ts=4 :
     2.6 -* =============================================================================
     2.7 -* SourceMod
     2.8 -* Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved.
     2.9 -* =============================================================================
    2.10 -*
    2.11 -* This program is free software; you can redistribute it and/or modify it under
    2.12 -* the terms of the GNU General Public License, version 3.0, as published by the
    2.13 -* Free Software Foundation.
    2.14 -* 
    2.15 -* This program is distributed in the hope that it will be useful, but WITHOUT
    2.16 -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    2.17 -* FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
    2.18 -* details.
    2.19 -*
    2.20 -* You should have received a copy of the GNU General Public License along with
    2.21 -* this program.  If not, see <http://www.gnu.org/licenses/>.
    2.22 -*
    2.23 -* As a special exception, AlliedModders LLC gives you permission to link the
    2.24 -* code of this program (as well as its derivative works) to "Half-Life 2," the
    2.25 -* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
    2.26 -* by the Valve Corporation.  You must obey the GNU General Public License in
    2.27 -* all respects for all other code used.  Additionally, AlliedModders LLC grants
    2.28 -* this exception to all derivative works.  AlliedModders LLC defines further
    2.29 -* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
    2.30 -* or <http://www.sourcemod.net/license.php>.
    2.31 -*
    2.32 -* Version: $Id$
    2.33 -*/
    2.34 -
    2.35 -#include "TagsSystem.h"
    2.36 -#include "sourcemod.h"
    2.37 -#include "sourcemm_api.h"
    2.38 -#include "sm_stringutil.h"
    2.39 -#include "PluginSys.h"
    2.40 -#include "compat_wrappers.h"
    2.41 -
    2.42 -TagHandler g_Tags;
    2.43 -
    2.44 -TagHandler::TagHandler()
    2.45 -{
    2.46 -	m_SvTags = NULL;
    2.47 -}
    2.48 -
    2.49 -TagHandler::~TagHandler()
    2.50 -{
    2.51 -	SourceHook::List<char *>::iterator iter = m_TagList.begin();
    2.52 -
    2.53 -	while (iter != m_TagList.end())
    2.54 -	{
    2.55 -		g_pMemAlloc->Free(*iter);
    2.56 -		iter = m_TagList.erase(iter);
    2.57 -	}
    2.58 -}
    2.59 -
    2.60 -void TagHandler::OnSourceModAllInitialized_Post()
    2.61 -{
    2.62 -	g_PluginSys.AddPluginsListener(this);
    2.63 -
    2.64 -	m_SvTags = icvar->FindVar("sv_tags");
    2.65 -	AddTag("sourcemod");
    2.66 -}
    2.67 -
    2.68 -void TagHandler::OnSourceModLevelActivated()
    2.69 -{
    2.70 -	SourceHook::List<char *>::iterator iter = m_TagList.begin();
    2.71 -
    2.72 -	while (iter != m_TagList.end())
    2.73 -	{
    2.74 -		ApplyTag(*iter);
    2.75 -		iter++;
    2.76 -	}
    2.77 -}
    2.78 -
    2.79 -void TagHandler::OnSourceModShutdown()
    2.80 -{
    2.81 -	RemoveTag("sourcemod");
    2.82 -}
    2.83 -
    2.84 -void TagHandler::OnPluginDestroyed(IPlugin *plugin)
    2.85 -{
    2.86 -	SourceHook::List<char *> *pList = NULL;
    2.87 -
    2.88 -	if (!plugin->GetProperty("ServerTags", (void **)&pList, false) || !pList)
    2.89 -	{
    2.90 -		return;
    2.91 -	}
    2.92 -
    2.93 -	SourceHook::List<char *>::iterator iter = pList->begin();
    2.94 -
    2.95 -	while (iter != pList->end())
    2.96 -	{
    2.97 -		RemoveTag(*iter);
    2.98 -		g_pMemAlloc->Free(*iter);
    2.99 -		iter = pList->erase(iter);
   2.100 -	}
   2.101 -
   2.102 -	delete pList;
   2.103 -}
   2.104 -
   2.105 -bool TagHandler::AddTag(const char *addTag)
   2.106 -{
   2.107 -	SourceHook::List<char *>::iterator iter = m_TagList.begin();
   2.108 -
   2.109 -	while (iter != m_TagList.end())
   2.110 -	{
   2.111 -		if (strcmp(*iter, addTag) == 0)
   2.112 -		{
   2.113 -			return false;
   2.114 -		}
   2.115 -	}
   2.116 -
   2.117 -	m_TagList.push_back(strdup(addTag));
   2.118 -	ApplyTag(addTag);
   2.119 -
   2.120 -	return true;
   2.121 -}
   2.122 -
   2.123 -bool TagHandler::RemoveTag(const char *removeTag)
   2.124 -{
   2.125 -	SourceHook::List<char *>::iterator iter = m_TagList.begin();
   2.126 -
   2.127 -	while (iter != m_TagList.end())
   2.128 -	{
   2.129 -		if (strcmp(*iter, removeTag) == 0)
   2.130 -		{
   2.131 -			g_pMemAlloc->Free(*iter);
   2.132 -			m_TagList.erase(iter);
   2.133 -			StripTag(removeTag);
   2.134 -
   2.135 -			return true;
   2.136 -		}
   2.137 -	}
   2.138 -
   2.139 -	return false;
   2.140 -}
   2.141 -
   2.142 -void TagHandler::ApplyTag(const char *addTag)
   2.143 -{
   2.144 -	if (m_SvTags == NULL)
   2.145 -	{
   2.146 -		return;
   2.147 -	}
   2.148 -
   2.149 -	const char *curTags = m_SvTags->GetString();
   2.150 -
   2.151 -	if (strstr(curTags, addTag) != NULL)
   2.152 -	{
   2.153 -		/* Already tagged */
   2.154 -		return;
   2.155 -	}
   2.156 -
   2.157 -	if (curTags[0] == '\0')
   2.158 -	{
   2.159 -		m_SvTags->SetValue(addTag);
   2.160 -		return;
   2.161 -	}
   2.162 -
   2.163 -	/* New tags buffer (+2 for , and null char) */
   2.164 -	size_t newLen = strlen(curTags) + strlen(addTag) + 2;
   2.165 -	char *newTags = (char *)alloca(newLen);
   2.166 -
   2.167 -	g_SourceMod.Format(newTags, newLen, "%s,%s", curTags, addTag);
   2.168 -
   2.169 -	m_SvTags->SetValue(newTags);
   2.170 -}
   2.171 -
   2.172 -void TagHandler::StripTag(const char *removeTag)
   2.173 -{
   2.174 -	if (m_SvTags == NULL)
   2.175 -	{
   2.176 -		return;
   2.177 -	}
   2.178 -
   2.179 -	const char *curTags = m_SvTags->GetString();
   2.180 -
   2.181 -	if (strcmp(curTags, removeTag) == 0)
   2.182 -	{
   2.183 -		m_SvTags->SetValue("");
   2.184 -		return;
   2.185 -	}
   2.186 -
   2.187 -	char *newTags = strdup(curTags);
   2.188 -	size_t searchLen = strlen(removeTag) + 2;
   2.189 -	char *search = (char *)alloca(searchLen);
   2.190 -
   2.191 -	if (strncmp(curTags, removeTag, strlen(removeTag)) == 0)
   2.192 -	{
   2.193 -		strcpy(search, removeTag);
   2.194 -		search[searchLen-2] = ',';
   2.195 -		search[searchLen-1] = '\0';
   2.196 -	}
   2.197 -	else
   2.198 -	{
   2.199 -		strcpy(search+1, removeTag);
   2.200 -		search[0] = ',';
   2.201 -		search[searchLen-1] = '\0';
   2.202 -	}
   2.203 -
   2.204 -	UTIL_ReplaceAll(newTags, strlen(newTags) + 1, search, "" , true);
   2.205 -
   2.206 -	m_SvTags->SetValue(newTags);
   2.207 -
   2.208 -	g_pMemAlloc->Free(newTags);
   2.209 -}
     3.1 --- a/core/TagsSystem.h	Wed Mar 18 18:50:20 2009 -0700
     3.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.3 @@ -1,71 +0,0 @@
     3.4 -/**
     3.5 -* vim: set ts=4 :
     3.6 -* =============================================================================
     3.7 -* SourceMod
     3.8 -* Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved.
     3.9 -* =============================================================================
    3.10 -*
    3.11 -* This program is free software; you can redistribute it and/or modify it under
    3.12 -* the terms of the GNU General Public License, version 3.0, as published by the
    3.13 -* Free Software Foundation.
    3.14 -* 
    3.15 -* This program is distributed in the hope that it will be useful, but WITHOUT
    3.16 -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    3.17 -* FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
    3.18 -* details.
    3.19 -*
    3.20 -* You should have received a copy of the GNU General Public License along with
    3.21 -* this program.  If not, see <http://www.gnu.org/licenses/>.
    3.22 -*
    3.23 -* As a special exception, AlliedModders LLC gives you permission to link the
    3.24 -* code of this program (as well as its derivative works) to "Half-Life 2," the
    3.25 -* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
    3.26 -* by the Valve Corporation.  You must obey the GNU General Public License in
    3.27 -* all respects for all other code used.  Additionally, AlliedModders LLC grants
    3.28 -* this exception to all derivative works.  AlliedModders LLC defines further
    3.29 -* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
    3.30 -* or <http://www.sourcemod.net/license.php>.
    3.31 -*
    3.32 -* Version: $Id$
    3.33 -*/
    3.34 -
    3.35 -#ifndef _INCLUDE_SOURCEMOD_TAGSSYSTEM_H_
    3.36 -#define _INCLUDE_SOURCEMOD_TAGSSYSTEM_H_
    3.37 -
    3.38 -#include "sm_globals.h"
    3.39 -#include "sh_list.h"
    3.40 -#include "convar.h"
    3.41 -#include "IPluginSys.h"
    3.42 -
    3.43 -class TagHandler : 
    3.44 -	public SMGlobalClass,
    3.45 -	public IPluginsListener
    3.46 -{
    3.47 -public:
    3.48 -	TagHandler();
    3.49 -	~TagHandler();
    3.50 -
    3.51 -public: // SMGlobalClass
    3.52 -	void OnSourceModAllInitialized_Post();
    3.53 -	void OnSourceModLevelActivated();
    3.54 -	void OnSourceModShutdown();
    3.55 -
    3.56 -public: // IPluginsListener
    3.57 -	void OnPluginDestroyed(IPlugin *plugin);
    3.58 -
    3.59 -public:
    3.60 -	bool AddTag(const char *addTag);
    3.61 -	bool RemoveTag(const char *removeTag);
    3.62 -
    3.63 -private:
    3.64 -	void ApplyTag(const char *addTag);
    3.65 -	void StripTag(const char *removeTag);
    3.66 -
    3.67 -private:
    3.68 -	SourceHook::List<char *>m_TagList;
    3.69 -	ConVar *m_SvTags;
    3.70 -};
    3.71 -
    3.72 -extern TagHandler g_Tags;
    3.73 -
    3.74 -#endif // _INCLUDE_SOURCEMOD_TAGSSYSTEM_H_
     4.1 --- a/core/msvc9/sourcemod_mm.vcproj	Wed Mar 18 18:50:20 2009 -0700
     4.2 +++ b/core/msvc9/sourcemod_mm.vcproj	Wed Mar 25 03:27:32 2009 -0400
     4.3 @@ -1513,10 +1513,6 @@
     4.4  				>
     4.5  			</File>
     4.6  			<File
     4.7 -				RelativePath="..\TagsSystem.cpp"
     4.8 -				>
     4.9 -			</File>
    4.10 -			<File
    4.11  				RelativePath="..\TextParsers.cpp"
    4.12  				>
    4.13  			</File>
    4.14 @@ -1755,10 +1751,6 @@
    4.15  				>
    4.16  			</File>
    4.17  			<File
    4.18 -				RelativePath="..\TagsSystem.h"
    4.19 -				>
    4.20 -			</File>
    4.21 -			<File
    4.22  				RelativePath="..\TextParsers.h"
    4.23  				>
    4.24  			</File>
     5.1 --- a/core/smn_console.cpp	Wed Mar 18 18:50:20 2009 -0700
     5.2 +++ b/core/smn_console.cpp	Wed Mar 25 03:27:32 2009 -0400
     5.3 @@ -43,7 +43,6 @@
     5.4  #include <inetchannel.h>
     5.5  #include <bitbuf.h>
     5.6  #include <sm_trie_tpl.h>
     5.7 -#include "TagsSystem.h"
     5.8  
     5.9  #if SOURCE_ENGINE == SE_LEFT4DEAD
    5.10  #define NET_SETCONVAR	6
    5.11 @@ -1307,55 +1306,11 @@
    5.12  
    5.13  static cell_t AddServerTag(IPluginContext *pContext, const cell_t *params)
    5.14  {
    5.15 -	char *value;
    5.16 -	pContext->LocalToString(params[1], &value);
    5.17 -
    5.18 -	if (!g_Tags.AddTag(value))
    5.19 -	{
    5.20 -		return 0;
    5.21 -	}
    5.22 -
    5.23 -	IPlugin *pPlugin = g_PluginSys.FindPluginByContext(pContext->GetContext());
    5.24 -	SourceHook::List<char *> *pList = NULL;
    5.25 -
    5.26 -	if (!pPlugin->GetProperty("ServerTags", (void **)&pList, false) || !pList)
    5.27 -	{
    5.28 -		pList = new SourceHook::List<char *>;
    5.29 -		pPlugin->SetProperty("ServerTags", pList);
    5.30 -	}
    5.31 -
    5.32 -	pList->push_back(strdup(value));
    5.33 -
    5.34 -	return 1;
    5.35 +	return 0;
    5.36  }
    5.37  
    5.38  static cell_t RemoveServerTag(IPluginContext *pContext, const cell_t *params)
    5.39  {
    5.40 -	char *value;
    5.41 -	pContext->LocalToString(params[1], &value);
    5.42 -
    5.43 -	IPlugin *pPlugin = g_PluginSys.FindPluginByContext(pContext->GetContext());
    5.44 -	SourceHook::List<char *> *pList = NULL;
    5.45 -
    5.46 -	if (!pPlugin->GetProperty("ServerTags", (void **)&pList, false) || !pList)
    5.47 -	{
    5.48 -		pList = new SourceHook::List<char *>;
    5.49 -		pPlugin->SetProperty("ServerTags", pList);
    5.50 -	}
    5.51 -
    5.52 -	SourceHook::List<char *>::iterator iter = pList->begin();
    5.53 -
    5.54 -	while (iter != pList->end())
    5.55 -	{
    5.56 -		if (strcmp(*iter, value) == 0)
    5.57 -		{
    5.58 -			g_pMemAlloc->Free(*iter);
    5.59 -			pList->erase(iter);
    5.60 -
    5.61 -			return g_Tags.RemoveTag(value);
    5.62 -		}
    5.63 -	}
    5.64 -
    5.65  	return 0;
    5.66  }
    5.67  
     6.1 --- a/plugins/include/console.inc	Wed Mar 18 18:50:20 2009 -0700
     6.2 +++ b/plugins/include/console.inc	Wed Mar 25 03:27:32 2009 -0400
     6.3 @@ -817,9 +817,11 @@
     6.4  native bool:SendConVarValue(client, Handle:convar, const String:value[]);
     6.5  
     6.6  /**
     6.7 - * Appends a string to Valve's sv_tags convar and makes sure it remains after mapchanges.
     6.8 + * Adds an informational string to the server's public "tags".
     6.9 + * This string should be a short, unique identifier.
    6.10   *
    6.11 - * Note: Tags are automatically removed on plugin unload
    6.12 + * Note: Tags are automatically removed when a plugin unloads.
    6.13 + * Note: Currently, this function does nothing because of bugs in the Valve master.
    6.14   *
    6.15   * @param tag			Tag string to append.
    6.16   * @noreturn
    6.17 @@ -827,9 +829,7 @@
    6.18  native AddServerTag(const String:tag[]);
    6.19  
    6.20  /**
    6.21 - * Removes a string from valve's sv_tags convar.
    6.22 - *
    6.23 - * Note: You can only remove tags created by you.
    6.24 + * Removes a tag previously added by the calling plugin.
    6.25   *
    6.26   * @param tag			Tag string to remove.
    6.27   * @noreturn