added some quick commands to dump te info
--HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401058
This commit is contained in:
parent
998c9dc574
commit
26f93c4b50
@ -61,6 +61,8 @@ bool SDKTools::SDK_OnLoad(char *error, size_t maxlength, bool late)
|
|||||||
|
|
||||||
g_CallHandle = handlesys->CreateType("ValveCall", this, 0, NULL, NULL, myself->GetIdentity(), NULL);
|
g_CallHandle = handlesys->CreateType("ValveCall", this, 0, NULL, NULL, myself->GetIdentity(), NULL);
|
||||||
|
|
||||||
|
ConCommandBaseMgr::OneTimeInit(this);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,3 +135,8 @@ void SDKTools::NotifyInterfaceDrop(SMInterface *pInterface)
|
|||||||
|
|
||||||
g_TEManager.Shutdown();
|
g_TEManager.Shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SDKTools::RegisterConCommandBase(ConCommandBase *pVar)
|
||||||
|
{
|
||||||
|
return g_SMAPI->RegisterConCmdBase(g_PLAPI, pVar);
|
||||||
|
}
|
||||||
|
@ -34,16 +34,20 @@
|
|||||||
#include <IPlayerHelpers.h>
|
#include <IPlayerHelpers.h>
|
||||||
#include <IGameHelpers.h>
|
#include <IGameHelpers.h>
|
||||||
#include <IEngineSound.h>
|
#include <IEngineSound.h>
|
||||||
|
#include <convar.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Implementation of the SDK Tools extension.
|
* @brief Implementation of the SDK Tools extension.
|
||||||
* Note: Uncomment one of the pre-defined virtual functions in order to use it.
|
* Note: Uncomment one of the pre-defined virtual functions in order to use it.
|
||||||
*/
|
*/
|
||||||
class SDKTools : public SDKExtension, public IHandleTypeDispatch
|
class SDKTools :
|
||||||
|
public SDKExtension,
|
||||||
|
public IHandleTypeDispatch,
|
||||||
|
public IConCommandBaseAccessor
|
||||||
{
|
{
|
||||||
public:
|
public: //public IHandleTypeDispatch
|
||||||
void OnHandleDestroy(HandleType_t type, void *object);
|
void OnHandleDestroy(HandleType_t type, void *object);
|
||||||
public:
|
public: //public SDKExtension
|
||||||
virtual bool SDK_OnLoad(char *error, size_t maxlength, bool late);
|
virtual bool SDK_OnLoad(char *error, size_t maxlength, bool late);
|
||||||
virtual void SDK_OnUnload();
|
virtual void SDK_OnUnload();
|
||||||
virtual void SDK_OnAllLoaded();
|
virtual void SDK_OnAllLoaded();
|
||||||
@ -57,6 +61,8 @@ public:
|
|||||||
//virtual bool SDK_OnMetamodUnload(char *error, size_t maxlen);
|
//virtual bool SDK_OnMetamodUnload(char *error, size_t maxlen);
|
||||||
//virtual bool SDK_OnMetamodPauseChange(bool paused, char *error, size_t maxlen);
|
//virtual bool SDK_OnMetamodPauseChange(bool paused, char *error, size_t maxlen);
|
||||||
#endif
|
#endif
|
||||||
|
public: //IConCommandBaseAccessor
|
||||||
|
bool RegisterConCommandBase(ConCommandBase *pVar);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern IServerGameEnts *gameents;
|
extern IServerGameEnts *gameents;
|
||||||
|
@ -26,6 +26,42 @@
|
|||||||
TempEntityManager g_TEManager;
|
TempEntityManager g_TEManager;
|
||||||
ICallWrapper *g_GetServerClass = NULL;
|
ICallWrapper *g_GetServerClass = NULL;
|
||||||
|
|
||||||
|
CON_COMMAND(sm_print_telist, "Prints the temp entity list")
|
||||||
|
{
|
||||||
|
if (!g_TEManager.IsAvailable())
|
||||||
|
{
|
||||||
|
META_CONPRINT("The tempent portion of SDKTools failed to load.\n");
|
||||||
|
META_CONPRINT("Check that you have the latest sdktools.games.txt file!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
g_TEManager.DumpList();
|
||||||
|
}
|
||||||
|
|
||||||
|
CON_COMMAND(sm_dump_teprops, "Dumps tempentity props to a file")
|
||||||
|
{
|
||||||
|
if (!g_TEManager.IsAvailable())
|
||||||
|
{
|
||||||
|
META_CONPRINT("The tempent portion of SDKTools failed to load.\n");
|
||||||
|
META_CONPRINT("Check that you have the latest sdktools.games.txt file!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int argc = engine->Cmd_Argc();
|
||||||
|
if (argc < 2)
|
||||||
|
{
|
||||||
|
META_CONPRINT("Usage: sm_dump_teprops <file>\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const char *arg = engine->Cmd_Argv(1);
|
||||||
|
FILE *fp = NULL;
|
||||||
|
if (!arg || arg[0] == '\0' || ((fp = fopen(arg, "wt")) == NULL))
|
||||||
|
{
|
||||||
|
META_CONPRINTF("Could not open file \"%s\"\n", arg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
g_TEManager.DumpProps(fp);
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
|
||||||
/*************************
|
/*************************
|
||||||
* *
|
* *
|
||||||
* Temp Entities Wrappers *
|
* Temp Entities Wrappers *
|
||||||
@ -44,6 +80,11 @@ const char *TempEntityInfo::GetName()
|
|||||||
return m_Name.c_str();
|
return m_Name.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ServerClass *TempEntityInfo::GetServerClass()
|
||||||
|
{
|
||||||
|
return m_Sc;
|
||||||
|
}
|
||||||
|
|
||||||
bool TempEntityInfo::IsValidProp(const char *name)
|
bool TempEntityInfo::IsValidProp(const char *name)
|
||||||
{
|
{
|
||||||
return (g_pGameHelpers->FindInSendTable(m_Sc->GetName(), name)) ? true : false;
|
return (g_pGameHelpers->FindInSendTable(m_Sc->GetName(), name)) ? true : false;
|
||||||
@ -263,3 +304,95 @@ TempEntityInfo *TempEntityManager::GetTempEntityInfo(const char *name)
|
|||||||
|
|
||||||
return te;
|
return te;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TempEntityManager::DumpList()
|
||||||
|
{
|
||||||
|
unsigned int index = 0;
|
||||||
|
META_CONPRINT("Listing temp entities:\n");
|
||||||
|
void *iter = m_ListHead;
|
||||||
|
while (iter)
|
||||||
|
{
|
||||||
|
const char *realname = *(const char **)((unsigned char *)iter + m_NameOffs);
|
||||||
|
if (!realname)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
TempEntityInfo *info = GetTempEntityInfo(realname);
|
||||||
|
if (!info)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ServerClass *sc = info->GetServerClass();
|
||||||
|
META_CONPRINTF("[%02d] %s (%s)\n", index++, realname, sc->GetName());
|
||||||
|
iter = *(void **)((unsigned char *)iter + m_NextOffs);
|
||||||
|
}
|
||||||
|
META_CONPRINTF("%d tempent%s found.\n", index, (index == 1) ? " was" : "s were");
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *SendPropTypeToString(SendPropType type)
|
||||||
|
{
|
||||||
|
if (type == DPT_Int)
|
||||||
|
{
|
||||||
|
return "int";
|
||||||
|
} else if (type == DPT_Float) {
|
||||||
|
return "float";
|
||||||
|
} else if (type == DPT_Vector) {
|
||||||
|
return "vector";
|
||||||
|
} else if (type == DPT_String) {
|
||||||
|
return "string";
|
||||||
|
} else if (type == DPT_Array) {
|
||||||
|
return "array";
|
||||||
|
} else if (type == DPT_DataTable) {
|
||||||
|
return "datatable";
|
||||||
|
} else {
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _DumpProps(FILE *fp, SendTable *pTable)
|
||||||
|
{
|
||||||
|
SendTable *pOther;
|
||||||
|
for (int i=0; i<pTable->GetNumProps(); i++)
|
||||||
|
{
|
||||||
|
SendProp *prop = pTable->GetProp(i);
|
||||||
|
if ((pOther = prop->GetDataTable()) != NULL)
|
||||||
|
{
|
||||||
|
_DumpProps(fp, pOther);
|
||||||
|
} else {
|
||||||
|
fprintf(fp, "\t\t\t\"%s\"\t\t\"%s\"\n",
|
||||||
|
prop->GetName() ? prop->GetName() : "unknown",
|
||||||
|
SendPropTypeToString(prop->GetType()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TempEntityManager::DumpProps(FILE *fp)
|
||||||
|
{
|
||||||
|
unsigned int index = 0;
|
||||||
|
void *iter = m_ListHead;
|
||||||
|
fprintf(fp, "\"TempEnts\"\n{\n");
|
||||||
|
while (iter)
|
||||||
|
{
|
||||||
|
const char *realname = *(const char **)((unsigned char *)iter + m_NameOffs);
|
||||||
|
if (!realname)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
TempEntityInfo *info = GetTempEntityInfo(realname);
|
||||||
|
if (!info)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ServerClass *sc = info->GetServerClass();
|
||||||
|
fprintf(fp, "\t\"%s\"\n", sc->GetName());
|
||||||
|
fprintf(fp, "\t{\n");
|
||||||
|
fprintf(fp, "\t\t\"name\"\t\t\"%s\"\n", realname);
|
||||||
|
fprintf(fp, "\t\t\"index\"\t\t\"%d\"\n", index++);
|
||||||
|
fprintf(fp, "\t\t\"SendTable\"\n\t\t{\n");
|
||||||
|
_DumpProps(fp, sc->m_pTable);
|
||||||
|
fprintf(fp, "\t\t}\n\t}\n");
|
||||||
|
iter = *(void **)((unsigned char *)iter + m_NextOffs);
|
||||||
|
}
|
||||||
|
fprintf(fp, "}\n");
|
||||||
|
META_CONPRINTF("%d tempent%s written to file.\n", index, (index == 1) ? " was" : "s were");
|
||||||
|
}
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include <irecipientfilter.h>
|
#include <irecipientfilter.h>
|
||||||
#include <sh_list.h>
|
#include <sh_list.h>
|
||||||
#include <sh_string.h>
|
#include <sh_string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
using namespace SourceHook;
|
using namespace SourceHook;
|
||||||
|
|
||||||
@ -37,6 +38,7 @@ public:
|
|||||||
TempEntityInfo(const char *name, void *me);
|
TempEntityInfo(const char *name, void *me);
|
||||||
public:
|
public:
|
||||||
const char *GetName();
|
const char *GetName();
|
||||||
|
ServerClass *GetServerClass();
|
||||||
bool IsValidProp(const char *name);
|
bool IsValidProp(const char *name);
|
||||||
bool TE_SetEntData(const char *name, int value);
|
bool TE_SetEntData(const char *name, int value);
|
||||||
bool TE_SetEntDataFloat(const char *name, float value);
|
bool TE_SetEntDataFloat(const char *name, float value);
|
||||||
@ -61,6 +63,9 @@ public:
|
|||||||
void Shutdown();
|
void Shutdown();
|
||||||
public:
|
public:
|
||||||
TempEntityInfo *GetTempEntityInfo(const char *name);
|
TempEntityInfo *GetTempEntityInfo(const char *name);
|
||||||
|
public:
|
||||||
|
void DumpList();
|
||||||
|
void DumpProps(FILE *fp);
|
||||||
private:
|
private:
|
||||||
List<TempEntityInfo *> m_TEList;
|
List<TempEntityInfo *> m_TEList;
|
||||||
IBasicTrie *m_TempEntInfo;
|
IBasicTrie *m_TempEntInfo;
|
||||||
|
Loading…
Reference in New Issue
Block a user