diff options
author | Emma Miler <27428383+emma-miler@users.noreply.github.com> | 2022-02-07 00:28:10 +0100 |
---|---|---|
committer | Barichello <artur@barichello.me> | 2022-02-12 15:45:10 -0300 |
commit | 94f7f68bf9153d39fcdb38d614f1774cdb2fc33f (patch) | |
tree | 53fc9eff2ca3e294b0d19b11cd4a355203b7cdf7 | |
parent | 7e11339956c4e51a9d3901e963de0b8d5562f9d8 (diff) | |
download | NorthstarMods-94f7f68bf9153d39fcdb38d614f1774cdb2fc33f.tar.gz NorthstarMods-94f7f68bf9153d39fcdb38d614f1774cdb2fc33f.zip |
Server-side code for chathooks
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 |