private void OnReceiveEvent(EventPacket packet, NetPeer peer) { if (!Servers.TryGetValue(peer, out NPServer server)) { return; } NetDataReader data = new NetDataReader(packet.Data); switch ((EventType)packet.Type) { case EventType.PlayerJoined: { string userId = data.GetString(); string nickname = data.GetString(); var newPlayer = new NPPlayer(server, userId, nickname); if (server.PlayersDictionary.ContainsKey(userId)) { break; } server.PlayersDictionary.Add(userId, newPlayer); foreach (var handler in DedicatedAddonHandlers.Values) { handler.InvokePlayerJoined(new PlayerJoinedEvent(newPlayer), server); } NetDataWriter writer = new NetDataWriter(); writer.Put(userId); PacketProcessor.Send <EventPacket>(peer, new EventPacket() { Type = (byte)EventType.PlayerJoined, Data = writer.Data }, DeliveryMethod.ReliableOrdered); } break; case EventType.PlayerLeft: { string userId = data.GetString(); if (!server.PlayersDictionary.TryGetValue(userId, out NPPlayer plr)) { break; } foreach (var handler in DedicatedAddonHandlers.Values) { handler.InvokePlayerLeft(new PlayerLeftEvent(plr), server); } server.PlayersDictionary.Remove(userId); } break; case EventType.PlayerLocalReport: { string userId = data.GetString(); string targetUserId = data.GetString(); string reason = data.GetString(); if (!server.PlayersDictionary.TryGetValue(userId, out NPPlayer plr)) { break; } if (!server.PlayersDictionary.TryGetValue(targetUserId, out NPPlayer target)) { break; } foreach (var handler in DedicatedAddonHandlers.Values) { handler.InvokePlayerLocalReport(new PlayerLocalReportEvent(plr, target, reason), server); } } break; case EventType.PreAuth: { string userid = data.GetString(); string ip = data.GetString(); string country = data.GetString(); byte flags = data.GetByte(); foreach (var handler in DedicatedAddonHandlers.Values) { handler.InvokePlayerPreAuth(new PlayerPreAuthEvent(server, userid, ip, country, flags), server); } } break; case EventType.WaitingForPlayers: { foreach (var handler in DedicatedAddonHandlers.Values) { handler.InvokeWaitingForPlayers(new WaitingForPlayersEvent(server), server); } } break; case EventType.RoundEnded: { foreach (var handler in DedicatedAddonHandlers.Values) { handler.InvokeRoundEnded(new RoundEndedEvent(server), server); } } break; } }
public PlayerLocalReportEvent(NPPlayer player, NPPlayer targetPlayer, string reason) { this.Player = player; this.TargetPlayer = targetPlayer; this.Reason = reason; }
public PlayerJoinedEvent(NPPlayer player) => Player = player;
public PlayerLeftEvent(NPPlayer player) => Player = player;
/// <inheritdoc/> public void Invoke(NPPlayer player, string[] arguments) { player.SendRAMessage("Test response"); }