Skip to content

Commit f5c919f

Browse files
committed
Adding cheat usage to message feed
1 parent ecce2ac commit f5c919f

File tree

5 files changed

+82
-25
lines changed

5 files changed

+82
-25
lines changed

Assets/BossRoom/Prefabs/Game/StaticNetworkObjects/GlobalStaticNetworkObjects.prefab

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,14 @@ PrefabInstance:
9999
propertyPath: m_RuntimeNetworkObjectsSeparator
100100
value:
101101
objectReference: {fileID: 0}
102+
- target: {fileID: 5762482089640033414, guid: 8b9c63e7d70c5ff48a03aad51e17103c, type: 3}
103+
propertyPath: m_GameObjectsThatWillBeInjectedAutomatically.Array.size
104+
value: 1
105+
objectReference: {fileID: 0}
106+
- target: {fileID: 5762482089640033414, guid: 8b9c63e7d70c5ff48a03aad51e17103c, type: 3}
107+
propertyPath: m_GameObjectsThatWillBeInjectedAutomatically.Array.data[0]
108+
value:
109+
objectReference: {fileID: 8528489606206953337}
102110
m_RemovedComponents: []
103111
m_SourcePrefab: {fileID: 100100000, guid: 8b9c63e7d70c5ff48a03aad51e17103c, type: 3}
104112
--- !u!4 &6803673045227533488 stripped
@@ -167,6 +175,11 @@ PrefabInstance:
167175
objectReference: {fileID: 0}
168176
m_RemovedComponents: []
169177
m_SourcePrefab: {fileID: 100100000, guid: d026428052f506a4a99ce1b7c94c4d45, type: 3}
178+
--- !u!1 &8528489606206953337 stripped
179+
GameObject:
180+
m_CorrespondingSourceObject: {fileID: 776943915682426285, guid: d026428052f506a4a99ce1b7c94c4d45, type: 3}
181+
m_PrefabInstance: {fileID: 8976529767578041044}
182+
m_PrefabAsset: {fileID: 0}
170183
--- !u!4 &6432827414648884918 stripped
171184
Transform:
172185
m_CorrespondingSourceObject: {fileID: 2726635115303138402, guid: d026428052f506a4a99ce1b7c94c4d45, type: 3}

Assets/BossRoom/Scripts/Client/UI/UIMessageFeed.cs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Collections;
32
using System.Collections.Generic;
43
using Unity.Multiplayer.Samples.BossRoom.Shared.Infrastructure;
54
using UnityEngine;
@@ -28,16 +27,31 @@ public class UIMessageFeed : MonoBehaviour
2827
DisposableGroup m_Subscriptions;
2928

3029
[Inject]
31-
void InjectDependencies(ISubscriber<DoorStateChangedEventMessage> doorStateChangedSubscriber,
30+
void InjectDependencies(
31+
#if UNITY_EDITOR || DEVELOPMENT_BUILD
32+
ISubscriber<CheatUsedMessage> cheatUsedMessageSubscriber,
33+
#endif
34+
ISubscriber<DoorStateChangedEventMessage> doorStateChangedSubscriber,
3235
ISubscriber<ConnectionEventMessage> connectionEventSubscriber,
33-
ISubscriber<LifeStateChangedEventMessage> lifeStateChangedEventSubscriber)
36+
ISubscriber<LifeStateChangedEventMessage> lifeStateChangedEventSubscriber
37+
)
3438
{
3539
m_Subscriptions = new DisposableGroup();
40+
#if UNITY_EDITOR || DEVELOPMENT_BUILD
41+
m_Subscriptions.Add(cheatUsedMessageSubscriber.Subscribe(OnCheatUsedEvent));
42+
#endif
3643
m_Subscriptions.Add(doorStateChangedSubscriber.Subscribe(OnDoorStateChangedEvent));
3744
m_Subscriptions.Add(connectionEventSubscriber.Subscribe(OnConnectionEvent));
3845
m_Subscriptions.Add(lifeStateChangedEventSubscriber.Subscribe(OnLifeStateChangedEvent));
3946
}
4047

48+
#if UNITY_EDITOR || DEVELOPMENT_BUILD
49+
void OnCheatUsedEvent(CheatUsedMessage eventMessage)
50+
{
51+
DisplayMessage($"Cheat {eventMessage.CheatUsed} used by {eventMessage.CheaterName}");
52+
}
53+
#endif
54+
4155
void OnDoorStateChangedEvent(DoorStateChangedEventMessage eventMessage)
4256
{
4357
DisplayMessage(eventMessage.IsDoorOpen ? "The Door has been opened!" : "The Door is closing.");

Assets/BossRoom/Scripts/DebugCheats/DebugCheatsManager.cs

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using Unity.Multiplayer.Samples.BossRoom.Server;
3+
using Unity.Multiplayer.Samples.BossRoom.Shared.Infrastructure;
34
using Unity.Multiplayer.Samples.Utilities;
45
using Unity.Netcode;
56
using UnityEngine;
@@ -46,6 +47,14 @@ ServerSwitchedDoor ServerSwitchedDoor
4647

4748
bool m_DestroyPortalsOnNextToggle = true;
4849

50+
IPublisher<CheatUsedMessage> m_CheatUsedMessagePublisher;
51+
52+
[Inject]
53+
void InjectDependencies(IPublisher<CheatUsedMessage> publisher)
54+
{
55+
m_CheatUsedMessagePublisher = publisher;
56+
}
57+
4958
void Update()
5059
{
5160
if (Input.touchCount == k_NbTouchesToOpenWindow && AnyTouchDown() ||
@@ -127,15 +136,15 @@ void SpawnEnemyServerRpc(ServerRpcParams serverRpcParams = default)
127136
{
128137
var newEnemy = Instantiate(m_EnemyPrefab);
129138
newEnemy.SpawnWithOwnership(NetworkManager.Singleton.LocalClientId, true);
130-
LogCheatUsedClientRPC(serverRpcParams.Receive.SenderClientId, "SpawnEnemy");
139+
PublishCheatUsedMessage(serverRpcParams.Receive.SenderClientId, "SpawnEnemy");
131140
}
132141

133142
[ServerRpc(RequireOwnership = false)]
134143
void SpawnBossServerRpc(ServerRpcParams serverRpcParams = default)
135144
{
136145
var newEnemy = Instantiate(m_BossPrefab);
137146
newEnemy.SpawnWithOwnership(NetworkManager.Singleton.LocalClientId, true);
138-
LogCheatUsedClientRPC(serverRpcParams.Receive.SenderClientId, "SpawnBoss");
147+
PublishCheatUsedMessage(serverRpcParams.Receive.SenderClientId, "SpawnBoss");
139148
}
140149

141150
[ServerRpc(RequireOwnership = false)]
@@ -152,7 +161,7 @@ void KillTargetServerRpc(ServerRpcParams serverRpcParams = default)
152161
if (damageable != null && damageable.IsDamageable())
153162
{
154163
damageable.ReceiveHP(playerServerCharacter, int.MinValue);
155-
LogCheatUsedClientRPC(serverRpcParams.Receive.SenderClientId, "KillTarget");
164+
PublishCheatUsedMessage(serverRpcParams.Receive.SenderClientId, "KillTarget");
156165
}
157166
else
158167
{
@@ -176,7 +185,7 @@ void KillAllEnemiesServerRpc(ServerRpcParams serverRpcParams = default)
176185
}
177186
}
178187
}
179-
LogCheatUsedClientRPC(serverRpcParams.Receive.SenderClientId, "KillAllEnemies");
188+
PublishCheatUsedMessage(serverRpcParams.Receive.SenderClientId, "KillAllEnemies");
180189
}
181190

182191
[ServerRpc(RequireOwnership = false)]
@@ -187,7 +196,7 @@ void ToggleGodModeServerRpc(ServerRpcParams serverRpcParams = default)
187196
if (playerServerCharacter != null)
188197
{
189198
playerServerCharacter.NetState.NetworkLifeState.IsGodMode.Value = !playerServerCharacter.NetState.NetworkLifeState.IsGodMode.Value;
190-
LogCheatUsedClientRPC(clientId, "ToggleGodMode");
199+
PublishCheatUsedMessage(clientId, "ToggleGodMode");
191200
}
192201
}
193202

@@ -210,7 +219,7 @@ void HealPlayerServerRpc(ServerRpcParams serverRpcParams = default)
210219
damageable.ReceiveHP(null, baseHp);
211220
}
212221
}
213-
LogCheatUsedClientRPC(serverRpcParams.Receive.SenderClientId, "HealPlayer");
222+
PublishCheatUsedMessage(serverRpcParams.Receive.SenderClientId, "HealPlayer");
214223
}
215224
}
216225

@@ -226,7 +235,7 @@ void ToggleSuperSpeedServerRpc(ServerRpcParams serverRpcParams = default)
226235
break;
227236
}
228237
}
229-
LogCheatUsedClientRPC(clientId, "ToggleSuperSpeed");
238+
PublishCheatUsedMessage(clientId, "ToggleSuperSpeed");
230239
}
231240

232241
[ServerRpc(RequireOwnership = false)]
@@ -241,7 +250,7 @@ void ToggleTeleportModeServerRpc(ServerRpcParams serverRpcParams = default)
241250
break;
242251
}
243252
}
244-
LogCheatUsedClientRPC(serverRpcParams.Receive.SenderClientId, "ToggleTeleportMode");
253+
PublishCheatUsedMessage(serverRpcParams.Receive.SenderClientId, "ToggleTeleportMode");
245254
}
246255

247256
[ServerRpc(RequireOwnership = false)]
@@ -250,7 +259,7 @@ void ToggleDoorServerRpc(ServerRpcParams serverRpcParams = default)
250259
if (ServerSwitchedDoor != null)
251260
{
252261
ServerSwitchedDoor.ForceOpen = !ServerSwitchedDoor.ForceOpen;
253-
LogCheatUsedClientRPC(serverRpcParams.Receive.SenderClientId, "ToggleDoor");
262+
PublishCheatUsedMessage(serverRpcParams.Receive.SenderClientId, "ToggleDoor");
254263
}
255264
else
256265
{
@@ -277,20 +286,23 @@ void TogglePortalsServerRpc(ServerRpcParams serverRpcParams = default)
277286
}
278287

279288
m_DestroyPortalsOnNextToggle = !m_DestroyPortalsOnNextToggle;
280-
LogCheatUsedClientRPC(serverRpcParams.Receive.SenderClientId, "TogglePortals");
289+
PublishCheatUsedMessage(serverRpcParams.Receive.SenderClientId, "TogglePortals");
281290
}
282291

283292
[ServerRpc(RequireOwnership = false)]
284293
void GoToPostGameServerRpc(ServerRpcParams serverRpcParams = default)
285294
{
286295
SceneLoaderWrapper.Instance.LoadScene("PostGame", useNetworkSceneManager: true);
287-
LogCheatUsedClientRPC(serverRpcParams.Receive.SenderClientId, "GoToPostGame");
296+
PublishCheatUsedMessage(serverRpcParams.Receive.SenderClientId, "GoToPostGame");
288297
}
289298

290-
[ClientRpc]
291-
void LogCheatUsedClientRPC(ulong clientId, string cheatUsed)
299+
void PublishCheatUsedMessage(ulong clientId, string cheatUsed)
292300
{
293-
UnityEngine.Debug.Log($"Cheat {cheatUsed} used by client {clientId}");
301+
var playerData = SessionManager<SessionPlayerData>.Instance.GetPlayerData(clientId);
302+
if (playerData.HasValue)
303+
{
304+
m_CheatUsedMessagePublisher.Publish(new CheatUsedMessage(cheatUsed, playerData.Value.PlayerName));
305+
}
294306
}
295307

296308
static void LogCheatNotImplemented(string cheat)

Assets/BossRoom/Scripts/Shared/ApplicationController.cs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,20 +47,18 @@ private void Awake()
4747
scope.BindAsSingle<LocalLobbyUser>();
4848
scope.BindAsSingle<LocalLobby>();
4949

50-
//this message channel is essential and persists for the lifetime of the lobby and relay services
50+
//these message channels are essential and persist for the lifetime of the lobby and relay services
5151
scope.BindMessageChannelInstance<UnityServiceErrorMessage>();
52-
53-
//this message channel is essential and persists for the lifetime of the lobby and relay services
5452
scope.BindMessageChannelInstance<ConnectStatus>();
55-
56-
//this message channel is essential and persists for the lifetime of the lobby and relay services
5753
scope.BindMessageChannelInstance<DoorStateChangedEventMessage>();
5854

59-
//this message channel is essential and persists for the lifetime of the lobby and relay services
55+
//these message channels are essential and persist for the lifetime of the lobby and relay services
56+
//they are networked so that the clients can subscribe to those messages that are published by the server
6057
scope.BindNetworkedMessageChannelInstance<LifeStateChangedEventMessage>();
61-
62-
//this message channel is essential and persists for the lifetime of the lobby and relay services
6358
scope.BindNetworkedMessageChannelInstance<ConnectionEventMessage>();
59+
#if UNITY_EDITOR || DEVELOPMENT_BUILD
60+
scope.BindNetworkedMessageChannelInstance<CheatUsedMessage>();
61+
#endif
6462

6563
//buffered message channels hold the latest received message in buffer and pass to any new subscribers
6664
scope.BindBufferedMessageChannelInstance<LobbyListFetchedMessage>();

Assets/BossRoom/Scripts/Shared/Game/GameEventMessage.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
using Unity.Collections;
2+
13
namespace Unity.Multiplayer.Samples.BossRoom
24
{
35
public struct LifeStateChangedEventMessage
@@ -17,4 +19,22 @@ public struct ConnectionEventMessage
1719
public ConnectStatus ConnectStatus;
1820
public FixedPlayerName PlayerName;
1921
}
22+
23+
24+
#if UNITY_EDITOR || DEVELOPMENT_BUILD
25+
public struct CheatUsedMessage
26+
{
27+
FixedString32Bytes m_CheatUsed;
28+
FixedPlayerName m_CheaterName;
29+
30+
public string CheatUsed => m_CheatUsed.ToString();
31+
public string CheaterName => m_CheaterName.ToString();
32+
33+
public CheatUsedMessage(string cheatUsed, string cheaterName)
34+
{
35+
m_CheatUsed = cheatUsed;
36+
m_CheaterName = cheaterName;
37+
}
38+
}
39+
#endif
2040
}

0 commit comments

Comments
 (0)