diff options
| -rw-r--r-- | gamedata/engine.kv | 1 | ||||
| -rw-r--r-- | src/sst.c | 24 | 
2 files changed, 25 insertions, 0 deletions
| diff --git a/gamedata/engine.kv b/gamedata/engine.kv index 80caa74..840f9a1 100644 --- a/gamedata/engine.kv +++ b/gamedata/engine.kv @@ -40,6 +40,7 @@ vtidx_GetEngineBuildNumber {  // VEngineServer  vtidx_PEntityOfEntIndex { OrangeBox 19 } // probably OE too but??? +vtidx_ServerCommand { OrangeBoxbased 36 }  sz_edict {  	default 20 @@ -385,11 +385,35 @@ static const char *VCALLCONV GetPluginDescription(void *this) {  	return LONGNAME " v" VERSION;  } +DECL_VFUNC_DYN(void, ServerCommand, const char *) + +// XXX: quick hack requested by Portal people for some timeboxed IL grind +// challenge they want to do. I think this is a terribly sad way to do this but +// at the same time it's easy and low-impact so put it in as hidden for now +// until we come up with something better later. +DEF_CVAR(_sst_onload_echo, "EXPERIMENTAL! Don't rely on this existing!", "", +		CON_HIDDEN) +  static void VCALLCONV ClientActive(void *this, struct edict *player) {  	// XXX: it's kind of dumb that we get handed the edict here then go look it  	// up again in fov.c but I can't be bothered refactoring any further now  	// that this finally works, do something later lol  	if (has_fov) fov_onload(); + +	// continuing dumb portal hack. didn't even seem worth adding a feature for +	if (has_vtidx_ServerCommand && con_getvarstr(_sst_onload_echo)[0]) { +		char *s = malloc(8 + _sst_onload_echo->strlen); // dumb lol +		if (s) { // if not, game probably exploded already +			memcpy(s, "echo \"", 6); +			// note: assume there's no quotes in the variable, because there +			// should be no way to do this at least via console +			memcpy(s + 6, con_getvarstr(_sst_onload_echo), +					_sst_onload_echo->strlen); +			memcpy(s + 6 + _sst_onload_echo->strlen - 1, "\"\n", 3); +			VCALL(engserver, ServerCommand, s); +			free(s); +		} +	}  }  #define MAX_VTABLE_FUNCS 21 | 
