public void SendChatToUser(ServerPlayer from, ServerPlayer to, string chat, bool action) { if (chat == string.Empty) { return; } ChatMessageEventArgs args = new ChatMessageEventArgs(); args.From = from; args.To = to; args.ToTeam = to.ActualTeam; args.MessageText = chat; args.Action = action; args.ChatType = from == null ? ChatMessageEventArgs.ChatMessageTypes.ServerPrivateMessage : ChatMessageEventArgs.ChatMessageTypes.PrivateMessage; if (args.To == null) { return; } MsgMessage msg = new MsgMessage(); msg.MessageText = chat; msg.From = from == null ? PlayerConstants.ServerPlayerID : from.PlayerID; msg.To = to.PlayerID; msg.MessageType = action ? MsgMessage.MessageTypes.ActionMessage : MsgMessage.MessageTypes.ChatMessage; to.SendMessage(true, msg); MessageSent?.Invoke(this, args); }
public virtual void SendToPlayerID(NetworkMessage message, bool useUDP, int playerID) { ServerPlayer player = GetPlayerByID(playerID); if (player == null) { return; } player.SendMessage(!useUDP, message); }
public virtual bool AddPlayer(ServerPlayer player) { player.Exited += Player_Exited; player.Disconnected += Player_Exited; ServerHost.PreAddPlayer(player); if (player.ActualTeam == TeamColors.NoTeam) { return(false); } player.Info = new PlayerInfo(); lock (PlayerList) PlayerList.Add(player); Logger.Log2("Player " + player.Callsign + " assigned to team " + player.ActualTeam.ToString()); lock (Teams) { if (!Teams.ContainsKey(player.ActualTeam)) { TeamInfo team = new TeamInfo(); team.Team = player.ActualTeam; team.PlayerAdded += Team_PlayerAdded; team.PlayerRemoved += Team_PlayerRemoved; Teams.Add(player.ActualTeam, team); } Teams[player.ActualTeam].Add(player); if (Teams[player.ActualTeam].Members.Count == 1) { TeamInited?.Invoke(this, Teams[player.ActualTeam]); } } Flags.SendInitialFlagUpdate(player); // tell them about everyone except them ServerPlayer[] locals = null; lock (PlayerList) locals = PlayerList.ToArray(); MsgPlayerInfo info = new MsgPlayerInfo(); foreach (ServerPlayer peer in locals) { if (peer == player) { continue; } player.SendMessage(true, BuildPlayerAdd(peer)); info.PlayerUpdates.Add(GetPlayerInfo(peer)); } player.SendMessage(true, info); TeamInfo[] teams = null; lock (Teams) teams = Teams.Values.ToArray(); MsgTeamUpdate tUpd = new MsgTeamUpdate(); foreach (var team in teams) { if (team.Team == player.ActualTeam) // the event already sent this { continue; } MsgTeamUpdate.TeamUpdate u = new MsgTeamUpdate.TeamUpdate(); u.TeamID = team.Team; u.Size = team.Size(); u.Wins = team.Wins; u.Losses = team.Losses; tUpd.TeamUpdates.Add(u); } player.SendMessage(tUpd); // tell everyone they joined SendToAll(BuildPlayerAdd(player), false); // send info bits to everyone info = new MsgPlayerInfo(); info.PlayerUpdates.Add(GetPlayerInfo(player)); SendToAll(info, false); ServerHost.PostAddPlayer(player); if (player.ActualTeam == TeamColors.ObserverTeam) { Chat.SendChatToUser(null, player, Resources.ObserverModeNotificatioMessage, false); } return(true); }