Gameconfs now support descriptions to identify games with '!' at the beginning of the string

--HG--
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401070
This commit is contained in:
Scott Ehlert 2007-07-08 09:34:20 +00:00
parent b3eb0d8631
commit da8399c870
2 changed files with 23 additions and 20 deletions

View File

@ -32,7 +32,8 @@
GameConfigManager g_GameConfigs; GameConfigManager g_GameConfigs;
IGameConfig *g_pGameConf = NULL; IGameConfig *g_pGameConf = NULL;
char g_mod[255]; char g_Game[256];
char g_GameDesc[256] = {'!', '\0'};
#define PSTATE_NONE 0 #define PSTATE_NONE 0
#define PSTATE_GAMES 1 #define PSTATE_GAMES 1
@ -106,10 +107,11 @@ SMCParseResult CGameConfig::ReadSMC_NewSection(const char *name, bool opt_quotes
{ {
if ((strcmp(name, "*") == 0) if ((strcmp(name, "*") == 0)
|| (strcmp(name, "#default") == 0) || (strcmp(name, "#default") == 0)
|| (strcmp(name, g_mod) == 0)) || (strcasecmp(name, g_Game) == 0)
|| (strcasecmp(name, g_GameDesc) == 0))
{ {
m_ParseState = PSTATE_GAMEDEFS; m_ParseState = PSTATE_GAMEDEFS;
strncopy(m_mod, name, sizeof(m_mod)); strncopy(m_Game, name, sizeof(m_Game));
} else { } else {
m_IgnoreLevel++; m_IgnoreLevel++;
} }
@ -126,7 +128,7 @@ SMCParseResult CGameConfig::ReadSMC_NewSection(const char *name, bool opt_quotes
m_ParseState = PSTATE_GAMEDEFS_KEYS; m_ParseState = PSTATE_GAMEDEFS_KEYS;
} }
else if ((strcmp(name, "#supported") == 0) else if ((strcmp(name, "#supported") == 0)
&& (strcmp(m_mod, "#default") == 0)) && (strcmp(m_Game, "#default") == 0))
{ {
m_ParseState = PSTATE_GAMEDEFS_SUPPORTED; m_ParseState = PSTATE_GAMEDEFS_SUPPORTED;
/* Ignore this section unless we get a game. */ /* Ignore this section unless we get a game. */
@ -144,8 +146,8 @@ SMCParseResult CGameConfig::ReadSMC_NewSection(const char *name, bool opt_quotes
} }
case PSTATE_GAMEDEFS_OFFSETS: case PSTATE_GAMEDEFS_OFFSETS:
{ {
m_prop[0] = '\0'; m_Prop[0] = '\0';
m_class[0] = '\0'; m_Class[0] = '\0';
strncopy(m_offset, name, sizeof(m_offset)); strncopy(m_offset, name, sizeof(m_offset));
m_ParseState = PSTATE_GAMEDEFS_OFFSETS_OFFSET; m_ParseState = PSTATE_GAMEDEFS_OFFSETS_OFFSET;
break; break;
@ -185,9 +187,9 @@ SMCParseResult CGameConfig::ReadSMC_KeyValue(const char *key, const char *value,
{ {
if (strcmp(key, "class") == 0) if (strcmp(key, "class") == 0)
{ {
strncopy(m_class, value, sizeof(m_class)); strncopy(m_Class, value, sizeof(m_Class));
} else if (strcmp(key, "prop") == 0) { } else if (strcmp(key, "prop") == 0) {
strncopy(m_prop, value, sizeof(m_prop)); strncopy(m_Prop, value, sizeof(m_Prop));
} else if (strcmp(key, PLATFORM_NAME) == 0) { } else if (strcmp(key, PLATFORM_NAME) == 0) {
int val = atoi(value); int val = atoi(value);
sm_trie_replace(m_pOffsets, m_offset, (void *)val); sm_trie_replace(m_pOffsets, m_offset, (void *)val);
@ -197,7 +199,7 @@ SMCParseResult CGameConfig::ReadSMC_KeyValue(const char *key, const char *value,
sm_trie_replace(m_pKeys, key, (void *)id); sm_trie_replace(m_pKeys, key, (void *)id);
} else if (m_ParseState == PSTATE_GAMEDEFS_SUPPORTED) { } else if (m_ParseState == PSTATE_GAMEDEFS_SUPPORTED) {
if (strcmp(key, "game") == 0 if (strcmp(key, "game") == 0
&& strcmp(value, g_mod) == 0) && (strcasecmp(value, g_Game) == 0 || strcasecmp(value, g_GameDesc) == 0))
{ {
bShouldBeReadingDefault = true; bShouldBeReadingDefault = true;
} }
@ -242,10 +244,10 @@ SMCParseResult CGameConfig::ReadSMC_LeavingSection()
case PSTATE_GAMEDEFS_OFFSETS_OFFSET: case PSTATE_GAMEDEFS_OFFSETS_OFFSET:
{ {
/* Parse the offset... */ /* Parse the offset... */
if (m_class[0] != '\0' if (m_Class[0] != '\0'
&& m_prop[0] != '\0') && m_Prop[0] != '\0')
{ {
SendProp *pProp = g_HL2.FindInSendTable(m_class, m_prop); SendProp *pProp = g_HL2.FindInSendTable(m_Class, m_Prop);
if (pProp) if (pProp)
{ {
int val = pProp->GetOffset(); int val = pProp->GetOffset();
@ -253,14 +255,14 @@ SMCParseResult CGameConfig::ReadSMC_LeavingSection()
sm_trie_replace(m_pProps, m_offset, pProp); sm_trie_replace(m_pProps, m_offset, pProp);
} else { } else {
/* Check if it's a non-default game and no offsets exist */ /* Check if it's a non-default game and no offsets exist */
if (((strcmp(m_mod, "*") != 0) && strcmp(m_mod, "#default") != 0) if (((strcmp(m_Game, "*") != 0) && strcmp(m_Game, "#default") != 0)
&& (!sm_trie_retrieve(m_pOffsets, m_offset, NULL))) && (!sm_trie_retrieve(m_pOffsets, m_offset, NULL)))
{ {
g_Logger.LogError("[SM] Unable to find property %s.%s (file \"%s\") (mod \"%s\")", g_Logger.LogError("[SM] Unable to find property %s.%s (file \"%s\") (mod \"%s\")",
m_class, m_Class,
m_prop, m_Prop,
m_pFile, m_pFile,
m_mod); m_Game);
} }
} }
} }
@ -491,7 +493,8 @@ void GameConfigManager::OnSourceModStartup(bool late)
{ {
LoadGameConfigFile("core.games", &g_pGameConf, NULL, 0); LoadGameConfigFile("core.games", &g_pGameConf, NULL, 0);
strncopy(g_mod, g_SourceMod.GetGameFolderName(), sizeof(g_mod)); strncopy(g_Game, g_SourceMod.GetGameFolderName(), sizeof(g_Game));
strncopy(g_GameDesc + 1, SERVER_CALL(GetGameDescription)(), sizeof(g_GameDesc) - 1);
} }
void GameConfigManager::OnSourceModAllInitialized() void GameConfigManager::OnSourceModAllInitialized()

View File

@ -60,10 +60,10 @@ private:
/* Parse states */ /* Parse states */
int m_ParseState; int m_ParseState;
unsigned int m_IgnoreLevel; unsigned int m_IgnoreLevel;
char m_class[64]; char m_Class[64];
char m_prop[64]; char m_Prop[64];
char m_offset[64]; char m_offset[64];
char m_mod[255]; char m_Game[256];
bool bShouldBeReadingDefault; bool bShouldBeReadingDefault;
}; };