aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmma Miler <27428383+emma-miler@users.noreply.github.com>2022-02-07 00:28:10 +0100
committerEmma Miler <27428383+emma-miler@users.noreply.github.com>2022-02-07 00:28:10 +0100
commitb64f47803efa4815edc124835905726782d3c99f (patch)
treef1ab4af43fbc42a2dc94ca5cd1f722c84d082b2a
parent1f89e6847d5a325788faf891c7bf7cf54ebdba80 (diff)
downloadNorthstarMods-b64f47803efa4815edc124835905726782d3c99f.tar.gz
NorthstarMods-b64f47803efa4815edc124835905726782d3c99f.zip
Server-side code for chathooks
-rw-r--r--Northstar.CustomServers/mod.json4
-rw-r--r--Northstar.CustomServers/mod/scripts/vscripts/_custom_codecallbacks.gnut44
-rw-r--r--Northstar.CustomServers/mod/scripts/vscripts/sh_utility_all.gnut15
3 files changed, 59 insertions, 4 deletions
diff --git a/Northstar.CustomServers/mod.json b/Northstar.CustomServers/mod.json
index 72c28625..c9bdd6c9 100644
--- a/Northstar.CustomServers/mod.json
+++ b/Northstar.CustomServers/mod.json
@@ -48,6 +48,10 @@
],
"Scripts": [
{
+ "Path": "_custom_codecallbacks.gnut",
+ "RunOn": "SERVER"
+ },
+ {
"Path": "_misc_stubs.gnut",
"RunOn": "SERVER && MP"
},
diff --git a/Northstar.CustomServers/mod/scripts/vscripts/_custom_codecallbacks.gnut b/Northstar.CustomServers/mod/scripts/vscripts/_custom_codecallbacks.gnut
new file mode 100644
index 00000000..b535f327
--- /dev/null
+++ b/Northstar.CustomServers/mod/scripts/vscripts/_custom_codecallbacks.gnut
@@ -0,0 +1,44 @@
+untyped
+
+globalize_all_functions
+
+global struct ClServer_MessageStruct {
+ string message
+ entity player
+ int channelId
+ bool shouldBlock
+}
+
+struct {
+ array< ClServer_MessageStruct functionref( ClServer_MessageStruct ) > OnRecievedSayTextMessageCallbacks
+} NsCustomCallbacks
+
+void function CServerGameDLL_ProcessMessageStartThread()
+{
+ thread CServerGameDLL_OnRecievedSayTextMessageCallback()
+}
+
+void function CServerGameDLL_OnRecievedSayTextMessageCallback()
+{
+ ClServer_MessageStruct localMessage
+ localMessage.message = NSChatGetCurrentMessage()
+ localMessage.player = GetPlayerByIndex(NSChatGetCurrentPlayer())
+ localMessage.channelId = NSChatGetCurrentChannel()
+ localMessage.shouldBlock = false
+
+ foreach ( callbackFunc in NsCustomCallbacks.OnRecievedSayTextMessageCallbacks )
+ {
+ ClServer_MessageStruct returnStruct = callbackFunc(localMessage)
+ localMessage.message = returnStruct.message
+ localMessage.player = returnStruct.player
+ localMessage.channelId = returnStruct.channelId
+ localMessage.shouldBlock = localMessage.shouldBlock || returnStruct.shouldBlock
+ }
+
+ NSSetMessage(localMessage.message, localMessage.player.GetPlayerIndex(), localMessage.channelId, localMessage.shouldBlock)
+}
+
+void function AddCallback_OnRecievedSayTextMessage( ClServer_MessageStruct functionref (ClServer_MessageStruct) callbackFunc )
+{
+ NsCustomCallbacks.OnRecievedSayTextMessageCallbacks.append(callbackFunc)
+} \ No newline at end of file
diff --git a/Northstar.CustomServers/mod/scripts/vscripts/sh_utility_all.gnut b/Northstar.CustomServers/mod/scripts/vscripts/sh_utility_all.gnut
index a6044762..1c509660 100644
--- a/Northstar.CustomServers/mod/scripts/vscripts/sh_utility_all.gnut
+++ b/Northstar.CustomServers/mod/scripts/vscripts/sh_utility_all.gnut
@@ -348,16 +348,23 @@ string function GetMapDisplayDesc( string mapname )
return "#" + mapname + "_CLASSIC_DESC"
}
-string function StringReplace( string baseString, string searchString, string replaceString )
+string function StringReplace( string baseString, string searchString, string replaceString, bool replaceAll = false, bool caseInsensitive = false )
{
- var findResult = baseString.find( searchString )
-
- if ( findResult != null )
+ bool loopedOnce = false
+ string source = caseInsensitive ? baseString.tolower() : baseString
+ var findResult = source.find( searchString )
+ while ( findResult != null && !(loopedOnce && !replaceAll))
{
string part1 = baseString.slice( 0, findResult )
string part2 = baseString.slice( findResult + searchString.len(), baseString.len() )
baseString = part1 + replaceString + part2
+ source = part1 + replaceString + part2
+
+ loopedOnce = true
+ findResult = source.find( searchString )
+ print("LOOPED ONCE")
+ print(findResult)
}
return baseString