|
| 1 | +untyped |
| 2 | +#if !HAS_CLIENT && !HAS_CUSTOM && !HAS_CUSTOMSERVERS |
| 3 | + |
| 4 | +global function AddCallback_OnReceivedSayTextMessage |
| 5 | + |
| 6 | +// this is global due to squirrel bridge v3 making native not be able to find non-global funcs properly |
| 7 | +// temp fix (surely it will get replaced), do not use this function please (although there isnt rly a downside to it?) |
| 8 | +global function CHudChat_ProcessMessageStartThread |
| 9 | + |
| 10 | +global struct ClClient_MessageStruct { |
| 11 | + string message |
| 12 | + entity player |
| 13 | + string playerName |
| 14 | + bool isTeam |
| 15 | + bool isDead |
| 16 | + bool isWhisper |
| 17 | + bool shouldBlock |
| 18 | + bool noServerTag |
| 19 | +} |
| 20 | + |
| 21 | +struct { |
| 22 | + array< ClClient_MessageStruct functionref( ClClient_MessageStruct ) > OnReceivedSayTextMessageCallbacks |
| 23 | +} NsCustomCallbacksClient |
| 24 | + |
| 25 | +void function OnReceivedMessage(ClClient_MessageStruct localMessage) { |
| 26 | + |
| 27 | + if ( IsWatchingReplay() && localMessage.player == null ) |
| 28 | + return |
| 29 | + |
| 30 | + if (localMessage.player != null) |
| 31 | + { |
| 32 | + foreach (callbackFunc in NsCustomCallbacksClient.OnReceivedSayTextMessageCallbacks) |
| 33 | + { |
| 34 | + ClClient_MessageStruct returnStruct = callbackFunc(localMessage) |
| 35 | + localMessage.message = returnStruct.message |
| 36 | + localMessage.playerName = returnStruct.playerName |
| 37 | + localMessage.isTeam = returnStruct.isTeam |
| 38 | + localMessage.isDead = returnStruct.isDead |
| 39 | + localMessage.isWhisper = returnStruct.isWhisper |
| 40 | + localMessage.shouldBlock = localMessage.shouldBlock || returnStruct.shouldBlock |
| 41 | + localMessage.noServerTag = returnStruct.noServerTag |
| 42 | + } |
| 43 | + } |
| 44 | + |
| 45 | + if (localMessage.shouldBlock) |
| 46 | + { |
| 47 | + return |
| 48 | + } |
| 49 | + |
| 50 | + NSChatWriteRaw(1, "\n") |
| 51 | + |
| 52 | + if (localMessage.player == null) |
| 53 | + { |
| 54 | + if (!localMessage.noServerTag || localMessage.isWhisper) |
| 55 | + { |
| 56 | + NSChatWrite(1, "\x1b[95m") |
| 57 | + } |
| 58 | + } |
| 59 | + else |
| 60 | + { |
| 61 | + bool isFriendly = localMessage.player.GetTeam() == GetLocalClientPlayer().GetTeam() |
| 62 | + |
| 63 | + if (isFriendly) NSChatWrite(1, "\x1b[111m") |
| 64 | + else NSChatWrite(1, "\x1b[112m") |
| 65 | + } |
| 66 | + |
| 67 | + if (localMessage.isWhisper) NSChatWriteRaw(1, Localize("#HUD_CHAT_WHISPER_PREFIX")) |
| 68 | + if (localMessage.isDead) NSChatWriteRaw(1, Localize("#HUD_CHAT_DEAD_PREFIX")) |
| 69 | + if (localMessage.isTeam) NSChatWriteRaw(1, Localize("#HUD_CHAT_TEAM_PREFIX")) |
| 70 | + |
| 71 | + if (localMessage.player == null) |
| 72 | + { |
| 73 | + if (!localMessage.noServerTag) |
| 74 | + { |
| 75 | + NSChatWriteRaw(1, Localize("#HUD_CHAT_SERVER_PREFIX") + " ") |
| 76 | + } |
| 77 | + } |
| 78 | + else |
| 79 | + { |
| 80 | + NSChatWriteRaw(1, localMessage.playerName) |
| 81 | + NSChatWriteRaw(1, ": ") |
| 82 | + } |
| 83 | + |
| 84 | + if (localMessage.player != null || !localMessage.noServerTag || localMessage.isWhisper) NSChatWrite(1, "\x1b[0m") |
| 85 | + NSChatWrite(1, localMessage.message) |
| 86 | +} |
| 87 | + |
| 88 | +void function CHudChat_ProcessMessageStartThread(int playerIndex, string message, bool isTeam, bool isDead, int messageType) |
| 89 | +{ |
| 90 | + thread CHudChat_OnReceivedSayTextMessageCallback(playerIndex, message, isTeam, isDead, messageType) |
| 91 | +} |
| 92 | + |
| 93 | +void function CHudChat_OnReceivedSayTextMessageCallback(int fromPlayerIndex, string message, bool isTeam, bool isDead, int messageType) |
| 94 | +{ |
| 95 | + entity fromPlayer = null |
| 96 | + string fromPlayerName = "" |
| 97 | + |
| 98 | + if (fromPlayerIndex >= 0 && fromPlayerIndex <= 128) |
| 99 | + { |
| 100 | + fromPlayer = GetEntByIndex(fromPlayerIndex + 1) |
| 101 | + if (fromPlayer == null) { |
| 102 | + print("Ignored chat message from invalid player index " + fromPlayerIndex + ": " + message) |
| 103 | + return |
| 104 | + } |
| 105 | + |
| 106 | + fromPlayerName = fromPlayer.GetPlayerNameWithClanTag() |
| 107 | + } |
| 108 | + |
| 109 | + // Null player + isTeam == true: Server with no tag. |
| 110 | + |
| 111 | + if (messageType == 0 || messageType == 1) |
| 112 | + { |
| 113 | + ClClient_MessageStruct localMessage |
| 114 | + localMessage.message = message |
| 115 | + localMessage.player = fromPlayer |
| 116 | + localMessage.playerName = fromPlayerName |
| 117 | + localMessage.isTeam = fromPlayer != null && isTeam |
| 118 | + localMessage.isDead = isDead |
| 119 | + localMessage.isWhisper = false |
| 120 | + localMessage.shouldBlock = false |
| 121 | + localMessage.noServerTag = fromPlayer == null && isTeam |
| 122 | + OnReceivedMessage(localMessage) |
| 123 | + return |
| 124 | + } |
| 125 | + |
| 126 | + if (messageType == 2) |
| 127 | + { |
| 128 | + ClClient_MessageStruct localMessage |
| 129 | + localMessage.message = message |
| 130 | + localMessage.player = fromPlayer |
| 131 | + localMessage.playerName = fromPlayerName |
| 132 | + localMessage.isTeam = fromPlayer != null && isTeam |
| 133 | + localMessage.isDead = isDead |
| 134 | + localMessage.isWhisper = true |
| 135 | + localMessage.shouldBlock = false |
| 136 | + localMessage.noServerTag = fromPlayer == null && isTeam |
| 137 | + OnReceivedMessage(localMessage) |
| 138 | + return |
| 139 | + } |
| 140 | +} |
| 141 | + |
| 142 | +void function AddCallback_OnReceivedSayTextMessage( ClClient_MessageStruct functionref (ClClient_MessageStruct) callbackFunc ) |
| 143 | +{ |
| 144 | + NsCustomCallbacksClient.OnReceivedSayTextMessageCallbacks.append(callbackFunc) |
| 145 | +} |
| 146 | +#endif |
0 commit comments