mirror of
https://github.com/dashr9230/SA-MP.git
synced 2025-09-19 20:26:14 +08:00
[server] Implement few CConsole functions
This commit is contained in:
178
server/console.cpp
Normal file
178
server/console.cpp
Normal file
@ -0,0 +1,178 @@
|
||||
|
||||
#include "main.h"
|
||||
|
||||
ConsoleVariable_s* CConsole::FindVariable(char* pVarName)
|
||||
{
|
||||
char VarName[256];
|
||||
strncpy(VarName, pVarName, 255);
|
||||
strlwr(VarName);
|
||||
|
||||
StringConvarMap::iterator itor;
|
||||
itor = ConsoleVariables.find(VarName);
|
||||
if (itor != ConsoleVariables.end())
|
||||
{
|
||||
return itor->second;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void CConsole::AddVariable(char* pVarName, CON_VARTYPE VarType, DWORD VarFlags, void* VarPtr,
|
||||
VARCHANGEFUNC VarChangeFunc)
|
||||
{
|
||||
char VarName[256];
|
||||
strncpy(VarName, pVarName, 255);
|
||||
strlwr(VarName);
|
||||
|
||||
if (FindVariable(VarName) != NULL)
|
||||
{
|
||||
logprintf("Unable to add console variable '%s'. Already exists.", VarName);
|
||||
return;
|
||||
}
|
||||
|
||||
ConsoleVariable_s* ConVar = new ConsoleVariable_s;
|
||||
ConVar->VarType = VarType;
|
||||
ConVar->VarFlags = VarFlags;
|
||||
ConVar->VarPtr = VarPtr;
|
||||
ConVar->VarChangeFunc = VarChangeFunc;
|
||||
|
||||
if (VarChangeFunc)
|
||||
VarChangeFunc();
|
||||
|
||||
ConsoleVariables.insert(StringConvarMap::value_type(VarName, ConVar));
|
||||
}
|
||||
|
||||
char* CConsole::AddStringVariable(char* pVarName, DWORD VarFlags, char* pInitStr,
|
||||
VARCHANGEFUNC VarChangeFunc)
|
||||
{
|
||||
char* str;
|
||||
if (!pInitStr)
|
||||
{
|
||||
// Empty string
|
||||
str = (char*)malloc(1);
|
||||
str[0] = 0;
|
||||
} else {
|
||||
str = (char*)malloc(strlen(pInitStr)+1);
|
||||
strcpy(str,pInitStr);
|
||||
}
|
||||
AddVariable(pVarName, CON_VARTYPE_STRING, VarFlags, (void*)str, VarChangeFunc);
|
||||
return str;
|
||||
}
|
||||
|
||||
void CConsole::RemoveVariable(char* pVarName)
|
||||
{
|
||||
ConsoleVariable_s* ConVar = FindVariable(pVarName);
|
||||
if (ConVar != NULL)
|
||||
{
|
||||
if (ConVar->VarType == CON_VARTYPE_STRING)
|
||||
{
|
||||
if (ConVar->VarPtr != NULL)
|
||||
free(ConVar->VarPtr);
|
||||
}
|
||||
char VarName[255];
|
||||
strncpy(VarName, pVarName, 255);
|
||||
strlwr(VarName);
|
||||
delete ConVar;
|
||||
ConsoleVariables.erase(VarName);
|
||||
}
|
||||
}
|
||||
|
||||
void CConsole::ModifyVariableFlags(char* pVarName, DWORD VarFlags)
|
||||
{
|
||||
ConsoleVariable_s* ConVar = FindVariable(pVarName);
|
||||
if (ConVar != NULL)
|
||||
{
|
||||
ConVar->VarFlags = VarFlags;
|
||||
}
|
||||
}
|
||||
|
||||
char* CConsole::GetStringVariable(char* pVarName)
|
||||
{
|
||||
ConsoleVariable_s* ConVar = FindVariable(pVarName);
|
||||
if (ConVar != NULL)
|
||||
{
|
||||
if (ConVar->VarType == CON_VARTYPE_STRING)
|
||||
return (char*)ConVar->VarPtr;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void CConsole::SetStringVariable(char* pVarName, char* pString)
|
||||
{
|
||||
ConsoleVariable_s* ConVar = FindVariable(pVarName);
|
||||
if (ConVar != NULL)
|
||||
{
|
||||
if (ConVar->VarType == CON_VARTYPE_STRING)
|
||||
{
|
||||
if (ConVar->VarPtr != NULL)
|
||||
free(ConVar->VarPtr);
|
||||
|
||||
char* str = (char*)malloc(strlen(pString)+1);
|
||||
strcpy(str, pString);
|
||||
ConVar->VarPtr = str;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float CConsole::GetFloatVariable(char* pVarName)
|
||||
{
|
||||
ConsoleVariable_s* ConVar = FindVariable(pVarName);
|
||||
if (ConVar != NULL)
|
||||
{
|
||||
if (ConVar->VarType == CON_VARTYPE_FLOAT)
|
||||
return *(float*)ConVar->VarPtr;
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
void CConsole::SetFloatVariable(char* pVarName, float fFloat)
|
||||
{
|
||||
ConsoleVariable_s* ConVar = FindVariable(pVarName);
|
||||
if (ConVar != NULL)
|
||||
{
|
||||
if (ConVar->VarType == CON_VARTYPE_FLOAT)
|
||||
*(float*)ConVar->VarPtr = fFloat;
|
||||
}
|
||||
}
|
||||
|
||||
int CConsole::GetIntVariable(char* pVarName)
|
||||
{
|
||||
ConsoleVariable_s* ConVar = FindVariable(pVarName);
|
||||
if (ConVar != NULL)
|
||||
{
|
||||
if (ConVar->VarType == CON_VARTYPE_INT)
|
||||
return *(int*)ConVar->VarPtr;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CConsole::SetIntVariable(char* pVarName, int iInt)
|
||||
{
|
||||
ConsoleVariable_s* ConVar = FindVariable(pVarName);
|
||||
if (ConVar != NULL)
|
||||
{
|
||||
if (ConVar->VarType == CON_VARTYPE_INT)
|
||||
*(int*)ConVar->VarPtr = iInt;
|
||||
}
|
||||
}
|
||||
|
||||
bool CConsole::GetBoolVariable(char* pVarName)
|
||||
{
|
||||
ConsoleVariable_s* ConVar = FindVariable(pVarName);
|
||||
if (ConVar != NULL)
|
||||
{
|
||||
if (ConVar->VarType == CON_VARTYPE_BOOL)
|
||||
return *(bool*)ConVar->VarPtr;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void CConsole::SetBoolVariable(char* pVarName, bool bBool)
|
||||
{
|
||||
ConsoleVariable_s* ConVar = FindVariable(pVarName);
|
||||
if (ConVar != NULL)
|
||||
{
|
||||
if (ConVar->VarType == CON_VARTYPE_BOOL)
|
||||
*(bool*)ConVar->VarPtr = bBool;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user