From d03e4138f637027908b52764a2ce3669097947c6 Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Wed, 17 May 2023 23:27:05 +0100 Subject: Add some server entity code-crawling machinery --- src/ent.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/ent.h') diff --git a/src/ent.h b/src/ent.h index 0273d86..4d2ddd9 100644 --- a/src/ent.h +++ b/src/ent.h @@ -18,6 +18,7 @@ #define INC_ENT_H #include "engineapi.h" +#include "vcall.h" /* Returns a server-side edict pointer, or null if not found. */ struct edict *ent_getedict(int idx); @@ -25,6 +26,28 @@ struct edict *ent_getedict(int idx); /* Returns an opaque pointer to a server-side entity, or null if not found. */ void *ent_get(int idx); +struct CEntityFactory; // opaque for now, can move out of ent.c if needed later + +/* + * Returns the CEntityFactory for a given entity name, or null if not found or + * unavailable. This provides a means to create and destroy entities of that + * type on the server, as well as opportunities to dig through instructions to + * find useful stuff. + */ +const struct CEntityFactory *ent_getfactory(const char *name); + +/* + * Attempts to find the virtual table of an entity class given only its factory. + * Returns null if that couldn't be done. Can be used to hook things without + * having an instance of the class up-front, or perform further snooping to get + * even deeper into an entity's code. + * + * The classname parameter is used for error messages on failed instruction + * searches and isn't used for the search itself. + */ +void **ent_findvtable(const struct CEntityFactory *factory, + const char *classname); + #endif // vi: sw=4 ts=4 noet tw=80 cc=80 -- cgit v1.2.3