Beispiel #1
0
void AdminCache::AddGroupCommandOverride(GroupId id, const char *name, OverrideType type, OverrideRule rule)
{
	AdminGroup *pGroup = (AdminGroup *)m_pMemory->GetAddress(id);
	if (!pGroup || pGroup->magic != GRP_MAGIC_SET)
	{
		return;
	}

	Trie *pTrie = NULL;
	if (type == Override_Command)
	{
		if (pGroup->pCmdTable == NULL)
		{
			pGroup->pCmdTable = sm_trie_create();
		}
		pTrie = pGroup->pCmdTable;
	} else if (type == Override_CommandGroup) {
		if (pGroup->pCmdGrpTable == NULL)
		{
			pGroup->pCmdGrpTable = sm_trie_create();
		}
		pTrie = pGroup->pCmdGrpTable;
	} else {
		return;
	}

	sm_trie_insert(pTrie, name, (void *)(int)rule);
}
Beispiel #2
0
AdminCache::AdminCache()
{
	m_pCmdOverrides = sm_trie_create();
	m_pCmdGrpOverrides = sm_trie_create();
	m_pStrings = new BaseStringTable(1024);
	m_pMemory = m_pStrings->GetMemTable();
	m_FreeGroupList = m_FirstGroup = m_LastGroup = INVALID_GROUP_ID;
	m_FreeUserList = m_FirstUser = m_LastUser = INVALID_ADMIN_ID;
	m_pGroups = sm_trie_create();
	m_pCacheFwd = NULL;
	m_FirstGroup = -1;
	m_pAuthTables = sm_trie_create();
	m_InvalidatingAdmins = false;
	m_destroying = false;
	m_pLevelNames = sm_trie_create();
}
UserMessages::UserMessages() : m_InterceptBuffer(m_pBase, 2500)
{
	m_Names = sm_trie_create();
	m_HookCount = 0;
	m_InExec = false;
	m_InHook = false;
	m_CurFlags = 0;
	m_CurId = INVALID_MESSAGE_ID;
}
Beispiel #4
0
HandleSystem::HandleSystem()
{
    m_Handles = new QHandle[HANDLESYS_MAX_HANDLES + 1];
    memset(m_Handles, 0, sizeof(QHandle) * (HANDLESYS_MAX_HANDLES + 1));

    m_Types = new QHandleType[HANDLESYS_TYPEARRAY_SIZE];
    memset(m_Types, 0, sizeof(QHandleType) * HANDLESYS_TYPEARRAY_SIZE);

    m_TypeLookup = sm_trie_create();
    m_strtab = new BaseStringTable(512);

    m_TypeTail = 0;
}
Beispiel #5
0
void Translator::RebuildLanguageDatabase(const char *lang_header_file)
{
	/* Erase everything we have */
	sm_trie_destroy(m_pLCodeLookup);
	m_pLCodeLookup = sm_trie_create();
	m_pStringTab->Reset();

	for (size_t i=0; i<m_Languages.size(); i++)
	{
		delete m_Languages[i];
	}
	m_Languages.clear();

	/* Start anew */
	SMCError err;
	SMCStates states;
	if ((err=textparsers->ParseFile_SMC(lang_header_file, this, &states)) != SMCError_Okay)
	{
		const char *str_err = textparsers->GetSMCErrorString(err);
		if (!str_err)
		{
			str_err = m_CustomError.c_str();
		}

		g_Logger.LogError("[SM] Failed to parse language header file: \"%s\"", lang_header_file);
		g_Logger.LogError("[SM] Parse error (line %d, column %d): %s", states.line, states.col, str_err);
	}

	void *serverLang;

	if (!sm_trie_retrieve(m_pLCodeLookup, m_InitialLang, &serverLang))
	{
		g_Logger.LogError("Server language was set to bad language \"%s\" -- reverting to English", m_InitialLang);

		strncopy(m_InitialLang, "en", sizeof(m_InitialLang));
		m_ServerLang = SOURCEMOD_LANGUAGE_ENGLISH;
	}

	m_ServerLang = reinterpret_cast<unsigned int>(serverLang);

	if (!m_Languages.size())
	{
		g_Logger.LogError("[SM] Fatal error, no languages found! Translation will not work.");
	}

	for (size_t i=0; i<m_Files.size(); i++)
	{
		m_Files[i]->ReparseFile();
	}
}
Beispiel #6
0
void AdminCache::RegisterAuthIdentType(const char *name)
{
	if (sm_trie_retrieve(m_pAuthTables, name, NULL))
	{
		return;
	}

	Trie *pAuth = sm_trie_create();

	AuthMethod method;
	method.name.assign(name);
	method.table = pAuth;

	m_AuthMethods.push_back(method);

	sm_trie_insert(m_pAuthTables, name, pAuth);
}
typedescription_t *CHalfLife2::FindInDataMap(datamap_t *pMap, const char *offset)
{
	typedescription_t *td = NULL;
	DataMapTrie &val = m_Maps[pMap];

	if (!val.trie)
	{
		val.trie = sm_trie_create();
	}
	if (!sm_trie_retrieve(val.trie, offset, (void **)&td))
	{
		if ((td = UTIL_FindInDataMap(pMap, offset)) != NULL)
		{
			sm_trie_insert(val.trie, offset, td);
		}
	}

	return td;
}
CHalfLife2::CHalfLife2()
{
	m_pClasses = sm_trie_create();
}
RootConsoleMenu::RootConsoleMenu()
{
	m_pCommands = sm_trie_create();
	m_CfgExecDone = false;
}
Beispiel #10
0
ConCmdManager::ConCmdManager() : m_Strings(1024)
{
	m_pCmds = sm_trie_create();
	m_pCmdGrps = sm_trie_create();
	m_CmdClient = 0;
}
EventManager::EventManager() : m_EventType(0)
{
	/* Create an event lookup trie */
	m_EventHooks = sm_trie_create();
}
Beispiel #12
0
Translator::Translator() : m_ServerLang(SOURCEMOD_LANGUAGE_ENGLISH)
{
	m_pStringTab = new BaseStringTable(2048);
	m_pLCodeLookup = sm_trie_create();
	strncopy(m_InitialLang, "en", sizeof(m_InitialLang));
}
Beispiel #13
0
void CPhraseFile::ReparseFile()
{
	if (m_pPhraseLookup)
	{
		sm_trie_destroy(m_pPhraseLookup);
	}
	m_pPhraseLookup = sm_trie_create();

	m_LangCount = m_pTranslator->GetLanguageCount();

	if (!m_LangCount)
	{
		return;
	}

	SMCError err;
	char path[PLATFORM_MAX_PATH];
	g_SourceMod.BuildPath(Path_SM, path, PLATFORM_MAX_PATH, "translations/%s", m_File.c_str());

	//backwards compatibility shim
	/* :HACKHACK: Change .cfg/.txt and vice versa for compatibility */
	if (!g_LibSys.PathExists(path))
	{
		if (m_File.compare("common.cfg") == 0)
		{
			UTIL_ReplaceAll(path, sizeof(path), "common.cfg", "common.phrases.txt");
		} else if (strstr(path, ".cfg")) {
			UTIL_ReplaceAll(path, sizeof(path), ".cfg", ".txt");
		} else if (strstr(path, ".txt")) {
			UTIL_ReplaceAll(path, sizeof(path), ".txt", ".cfg");
		}
	}

	SMCStates states;

	if ((err=textparsers->ParseFile_SMC(path, this, &states)) != SMCError_Okay)
	{
		const char *msg = textparsers->GetSMCErrorString(err);
		if (!msg)
		{
			msg = m_ParseError.c_str();
		}

		g_Logger.LogError("[SM] Fatal error encountered parsing translation file \"%s\"", m_File.c_str());
		g_Logger.LogError("[SM] Error (line %d, column %d): %s", states.line, states.col, msg);
	}

	const char *code;
	for (unsigned int i = 1; i < m_LangCount; i++)
	{
		if (!m_pTranslator->GetLanguageInfo(i, &code, NULL))
		{
			continue;
		}

		g_SourceMod.BuildPath(Path_SM, 
			path,
			PLATFORM_MAX_PATH,
			"translations/%s/%s",
			code,
			m_File.c_str());

		/* Speculatively load these. */
		if (!g_LibSys.PathExists(path))
		{
			continue;
		}

		if ((err=textparsers->ParseFile_SMC(path, this, &states)) != SMCError_Okay)
		{
			const char *msg = textparsers->GetSMCErrorString(err);
			if (!msg)
			{
				msg = m_ParseError.c_str();
			}

			g_Logger.LogError("[SM] Fatal error encountered parsing translation file \"%s/%s\"", 
				code, 
				m_File.c_str());
			g_Logger.LogError("[SM] Error (line %d, column %d): %s",
				states.line,
				states.col,
				msg);
		}
	}
}