aboutsummaryrefslogtreecommitdiff
path: root/Northstar.Client
diff options
context:
space:
mode:
authorTom Barham <me@cpdt.dev>2022-02-22 08:33:50 +1000
committerGitHub <noreply@github.com>2022-02-21 19:33:50 -0300
commitea9a2ed9b9698d891769fa8598b8262aad97ed77 (patch)
tree2bcac5590c8c12114b6a54febd7920506bbe66c4 /Northstar.Client
parent1fad39a0d753fa905520ee858f3aa4e8a3ad96a5 (diff)
downloadNorthstarMods-ea9a2ed9b9698d891769fa8598b8262aad97ed77.tar.gz
NorthstarMods-ea9a2ed9b9698d891769fa8598b8262aad97ed77.zip
Advanced chat: custom messages and client hooks (#217)
Co-authored-by: EmmaM <27428383+emma-miler@users.noreply.github.com>
Diffstat (limited to 'Northstar.Client')
-rw-r--r--Northstar.Client/mod.json11
-rw-r--r--Northstar.Client/mod/resource/northstar_client_localisation_english.txt6
-rw-r--r--Northstar.Client/mod/scripts/vscripts/_custom_codecallbacks_client.gnut126
-rw-r--r--Northstar.Client/mod/scripts/vscripts/chat.gnut18
4 files changed, 160 insertions, 1 deletions
diff --git a/Northstar.Client/mod.json b/Northstar.Client/mod.json
index 1a2b5c014..ad8507520 100644
--- a/Northstar.Client/mod.json
+++ b/Northstar.Client/mod.json
@@ -35,6 +35,17 @@
],
"Scripts": [
{
+ "Path": "_custom_codecallbacks_client.gnut",
+ "RunOn": "CLIENT",
+ "ClientCallback": {
+ "Before": "NSSetupChathooksClient"
+ }
+ },
+ {
+ "Path": "chat.gnut",
+ "RunOn": "CLIENT"
+ },
+ {
"Path": "ui/menu_ns_modmenu.nut",
"RunOn": "UI",
"UICallback": {
diff --git a/Northstar.Client/mod/resource/northstar_client_localisation_english.txt b/Northstar.Client/mod/resource/northstar_client_localisation_english.txt
index db83c6b79..fdda8bd81 100644
--- a/Northstar.Client/mod/resource/northstar_client_localisation_english.txt
+++ b/Northstar.Client/mod/resource/northstar_client_localisation_english.txt
@@ -299,8 +299,12 @@ Press Yes if you agree to this. This choice can be changed in the mods menu at a
"SHOW_ALL" "All"
"SHOW_ONLY_ENABLED" "Only Enabled"
"SHOW_ONLY_DISABLED" "Only Disabled"
-
+
// Maps menu
"HIDE_LOCKED" "Hide locked"
+
+ // In-game chat
+ "HUD_CHAT_WHISPER_PREFIX" "[WHISPER]"
+ "HUD_CHAT_SERVER_PREFIX" "[SERVER]"
}
}
diff --git a/Northstar.Client/mod/scripts/vscripts/_custom_codecallbacks_client.gnut b/Northstar.Client/mod/scripts/vscripts/_custom_codecallbacks_client.gnut
new file mode 100644
index 000000000..9241fcdf0
--- /dev/null
+++ b/Northstar.Client/mod/scripts/vscripts/_custom_codecallbacks_client.gnut
@@ -0,0 +1,126 @@
+untyped
+
+global function AddCallback_OnReceivedSayTextMessage
+global function NSSetupChathooksClient
+
+global struct ClClient_MessageStruct {
+ string message
+ entity player
+ string playerName
+ bool isTeam
+ bool isDead
+ bool isWhisper
+ bool shouldBlock
+}
+
+struct {
+ array< ClClient_MessageStruct functionref( ClClient_MessageStruct ) > OnReceivedSayTextMessageCallbacks
+} NsCustomCallbacksClient
+
+void function OnReceivedMessage(ClClient_MessageStruct localMessage) {
+ if (localMessage.player != null)
+ {
+ foreach (callbackFunc in NsCustomCallbacksClient.OnReceivedSayTextMessageCallbacks)
+ {
+ ClClient_MessageStruct returnStruct = callbackFunc(localMessage)
+ localMessage.message = returnStruct.message
+ localMessage.playerName = returnStruct.playerName
+ localMessage.isTeam = returnStruct.isTeam
+ localMessage.isDead = returnStruct.isDead
+ localMessage.isWhisper = returnStruct.isWhisper
+ localMessage.shouldBlock = localMessage.shouldBlock || returnStruct.shouldBlock
+ }
+ }
+
+ if (localMessage.shouldBlock)
+ {
+ return
+ }
+
+ NSChatWriteRaw(1, "\n")
+
+ if (localMessage.player == null) NSChatWrite(1, "\x1b[95m")
+ else
+ {
+ bool isFriendly = localMessage.player.GetTeam() == GetLocalClientPlayer().GetTeam()
+
+ if (isFriendly) NSChatWrite(1, "\x1b[111m")
+ else NSChatWrite(1, "\x1b[112m")
+ }
+
+ if (localMessage.isWhisper) NSChatWriteRaw(1, Localize("#HUD_CHAT_WHISPER_PREFIX"))
+ if (localMessage.isDead) NSChatWriteRaw(1, Localize("#HUD_CHAT_DEAD_PREFIX"))
+ if (localMessage.isTeam) NSChatWriteRaw(1, Localize("#HUD_CHAT_TEAM_PREFIX"))
+
+ if (localMessage.player == null)
+ {
+ NSChatWriteRaw(1, Localize("#HUD_CHAT_SERVER_PREFIX") + " ")
+ }
+ else {
+ NSChatWriteRaw(1, localMessage.playerName)
+ NSChatWriteRaw(1, ": ")
+ }
+
+ NSChatWrite(1, "\x1b[0m")
+
+ NSChatWrite(1, localMessage.message)
+}
+
+void function CHudChat_ProcessMessageStartThread(int playerIndex, string message, bool isTeam, bool isDead, int messageType)
+{
+ thread CHudChat_OnReceivedSayTextMessageCallback(playerIndex, message, isTeam, isDead, messageType)
+}
+
+void function CHudChat_OnReceivedSayTextMessageCallback(int fromPlayerIndex, string message, bool isTeam, bool isDead, int messageType)
+{
+ entity fromPlayer = null
+ string fromPlayerName = ""
+
+ if (fromPlayerIndex >= 0 && fromPlayerIndex < GetPlayerArray().len())
+ {
+ fromPlayer = GetEntByIndex(fromPlayerIndex + 1)
+ if (fromPlayer == null) {
+ print("Ignored chat message from invalid player index " + fromPlayerIndex + ": " + message)
+ return
+ }
+
+ fromPlayerName = fromPlayer.GetPlayerName()
+ }
+
+ if (messageType == 0 || messageType == 1)
+ {
+ ClClient_MessageStruct localMessage
+ localMessage.message = message
+ localMessage.player = fromPlayer
+ localMessage.playerName = fromPlayerName
+ localMessage.isTeam = isTeam
+ localMessage.isDead = isDead
+ localMessage.isWhisper = false
+ localMessage.shouldBlock = false
+ OnReceivedMessage(localMessage)
+ return
+ }
+
+ if (messageType == 2)
+ {
+ ClClient_MessageStruct localMessage
+ localMessage.message = message
+ localMessage.player = fromPlayer
+ localMessage.playerName = fromPlayerName
+ localMessage.isTeam = isTeam
+ localMessage.isDead = isDead
+ localMessage.isWhisper = true
+ localMessage.shouldBlock = false
+ OnReceivedMessage(localMessage)
+ return
+ }
+}
+
+void function AddCallback_OnReceivedSayTextMessage( ClClient_MessageStruct functionref (ClClient_MessageStruct) callbackFunc )
+{
+ NsCustomCallbacksClient.OnReceivedSayTextMessageCallbacks.append(callbackFunc)
+}
+
+void function NSSetupChathooksClient() {
+ getroottable().rawset("CHudChat_ProcessMessageStartThread", CHudChat_ProcessMessageStartThread)
+} \ No newline at end of file
diff --git a/Northstar.Client/mod/scripts/vscripts/chat.gnut b/Northstar.Client/mod/scripts/vscripts/chat.gnut
new file mode 100644
index 000000000..ce26434c2
--- /dev/null
+++ b/Northstar.Client/mod/scripts/vscripts/chat.gnut
@@ -0,0 +1,18 @@
+untyped
+globalize_all_functions
+
+void function Chat_NetworkWriteLine(string text) {
+ NSChatWriteLine(0, text)
+}
+
+void function Chat_GameWriteLine(string text) {
+ NSChatWriteLine(1, text)
+}
+
+void function Chat_NetworkWrite(string text) {
+ NSChatWrite(0, text)
+}
+
+void function Chat_GameWrite(string text) {
+ NSChatWrite(1, text)
+}