summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMichael Smith <mikesmiffy128@gmail.com>2024-08-29 23:03:11 +0100
committerMichael Smith <mikesmiffy128@gmail.com>2024-08-29 23:08:03 +0100
commiteb41c78c9ff23429f054d9cc280c41917acc2736 (patch)
tree7808c171d80e60fe1f55ac07396c5ee7ce9c98f1
parent2d46ad68b0a6759ad3e84d35b87cfb4f4027ec77 (diff)
Add very basic client console messaging for L4D2
This isn't totally ideal - it'd be nice to have a way to get colours working, at least for errors/warnings. But it might not really be possible to do that without custom networking stuff, so this will do for the forseeable future. The main goal is just to be able to have CON_SERVERSIDE commands actually give output to the relevant player.
-rwxr-xr-xcompile1
-rw-r--r--compile.bat1
-rw-r--r--gamedata/engine.txt7
-rw-r--r--src/clientcon.c41
-rw-r--r--src/clientcon.h33
-rw-r--r--src/engineapi.c3
-rw-r--r--src/sst.c2
7 files changed, 84 insertions, 4 deletions
diff --git a/compile b/compile
index 328c08b..b61bd3d 100755
--- a/compile
+++ b/compile
@@ -56,6 +56,7 @@ src="\
bind.c
chunklets/fastspin.c
chunklets/msg.c
+ clientcon.c
con_.c
crypto.c
democustom.c
diff --git a/compile.bat b/compile.bat
index a4a6a10..fe96d29 100644
--- a/compile.bat
+++ b/compile.bat
@@ -66,6 +66,7 @@ setlocal DisableDelayedExpansion
:+ alias.c
:+ autojump.c
:+ bind.c
+:+ clientcon.c
:+ con_.c
:+ chunklets/fastspin.c
:+ chunklets/msg.c
diff --git a/gamedata/engine.txt b/gamedata/engine.txt
index 87a9620..d0d57ae 100644
--- a/gamedata/engine.txt
+++ b/gamedata/engine.txt
@@ -68,8 +68,11 @@ vtidx_DispatchAllStoredGameMessages 16
# VEngineServer
vtidx_PEntityOfEntIndex
OrangeBoxbased 19 # probably OE too but ??
-vtidx_ServerCommand
- OrangeBoxbased 36
+#vtidx_ServerCommand # unused currently
+# OrangeBoxbased 36
+vtidx_ClientPrintf
+ L4D1 45 # same in other engines, probably, but we don't need those for now
+ L4D2 46
sz_edict 20
L4Dbased 16
diff --git a/src/clientcon.c b/src/clientcon.c
new file mode 100644
index 0000000..29a4208
--- /dev/null
+++ b/src/clientcon.c
@@ -0,0 +1,41 @@
+/*
+ * Copyright © 2024 Michael Smith <mikesmiffy128@gmail.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "con_.h"
+#include "engineapi.h"
+#include "ent.h"
+#include "feature.h"
+#include "gamedata.h"
+
+FEATURE("")
+REQUIRE(ent)
+REQUIRE_GAMEDATA(vtidx_ClientPrintf)
+REQUIRE_GLOBAL(engserver)
+
+DECL_VFUNC_DYN(void, ClientPrintf, struct edict *, const char *)
+
+void clientcon_msg(struct edict *e, const char *s) {
+ ClientPrintf(engserver, e, s);
+}
+
+void clientcon_reply(const char *s) {
+ struct edict *e = ent_getedict(con_cmdclient + 1);
+ if (e) { clientcon_msg(e, s); return; }
+}
+
+INIT { return true; }
+
+// vi: sw=4 ts=4 noet tw=80 cc=80
diff --git a/src/clientcon.h b/src/clientcon.h
new file mode 100644
index 0000000..1b00c01
--- /dev/null
+++ b/src/clientcon.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright © 2024 Michael Smith <mikesmiffy128@gmail.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef INC_CLIENTCON_H
+#define INC_CLIENTCON_H
+
+struct edict;
+
+/* Prints a message to a specific player's console. */
+void clientcon_msg(struct edict *e, const char *s);
+
+/*
+ * Prints a message in the console of whoever invoked the current command - only
+ * valid when called in the context of a CON_SERVERSIDE command.
+ */
+void clientcon_reply(const char *s);
+
+#endif
+
+// vi: sw=4 ts=4 noet tw=80 cc=80
diff --git a/src/engineapi.c b/src/engineapi.c
index 6489d53..785245d 100644
--- a/src/engineapi.c
+++ b/src/engineapi.c
@@ -70,6 +70,9 @@ bool engineapi_init(int pluginver) {
if (engserver = factory_engine("VEngineServer021", 0)) {
_gametype_tag |= _gametype_tag_Server021;
}
+ else if (engserver = factory_engine("VEngineServer022", 0)) {
+ //_gametype_tag |= _gametype_tag_Server022; // not needed yet
+ }
// else if (engserver = others as needed...) {
// }
diff --git a/src/sst.c b/src/sst.c
index d580a30..ba0ba1f 100644
--- a/src/sst.c
+++ b/src/sst.c
@@ -498,8 +498,6 @@ static const char *VCALLCONV GetPluginDescription(void *this) {
return LONGNAME " v" VERSION;
}
-DECL_VFUNC_DYN(void, ServerCommand, const char *)
-
DEF_EVENT(ClientActive, struct edict */*player*/)
DEF_EVENT(Tick, bool /*simulating*/)