public bool ServerAdminRead(IReadMessage incMsg, Client c) { if (!c.HasPermission(ClientPermissions.Ban)) { UInt16 removeCount = incMsg.ReadUInt16(); incMsg.BitPosition += removeCount * 4 * 8; UInt16 rangeBanCount = incMsg.ReadUInt16(); incMsg.BitPosition += rangeBanCount * 4 * 8; return(false); } else { UInt16 removeCount = incMsg.ReadUInt16(); for (int i = 0; i < removeCount; i++) { UInt16 id = incMsg.ReadUInt16(); BannedPlayer bannedPlayer = bannedPlayers.Find(p => p.UniqueIdentifier == id); if (bannedPlayer != null) { GameServer.Log(GameServer.ClientLogName(c) + " unbanned " + bannedPlayer.Name + " (" + bannedPlayer.EndPoint + ")", ServerLog.MessageType.ConsoleUsage); RemoveBan(bannedPlayer); } } Int16 rangeBanCount = incMsg.ReadInt16(); for (int i = 0; i < rangeBanCount; i++) { UInt16 id = incMsg.ReadUInt16(); BannedPlayer bannedPlayer = bannedPlayers.Find(p => p.UniqueIdentifier == id); if (bannedPlayer != null) { GameServer.Log(GameServer.ClientLogName(c) + " rangebanned " + bannedPlayer.Name + " (" + bannedPlayer.EndPoint + ")", ServerLog.MessageType.ConsoleUsage); RangeBan(bannedPlayer); } } return(removeCount > 0 || rangeBanCount > 0); } }
public void ClientRead(IReadMessage msg) { State = msg.ReadInt16(); }
public void ClientRead(IReadMessage inc) { AllowSubVoting = inc.ReadBoolean(); if (allowSubVoting) { UpdateVoteTexts(null, VoteType.Sub); int votableCount = inc.ReadByte(); for (int i = 0; i < votableCount; i++) { int votes = inc.ReadByte(); string subName = inc.ReadString(); List <SubmarineInfo> serversubs = new List <SubmarineInfo>(); foreach (GUIComponent item in GameMain.NetLobbyScreen?.SubList?.Content?.Children) { if (item.UserData != null && item.UserData is SubmarineInfo) { serversubs.Add(item.UserData as SubmarineInfo); } } SubmarineInfo sub = serversubs.FirstOrDefault(s => s.Name == subName); SetVoteText(GameMain.NetLobbyScreen.SubList, sub, votes); } } AllowModeVoting = inc.ReadBoolean(); if (allowModeVoting) { UpdateVoteTexts(null, VoteType.Mode); int votableCount = inc.ReadByte(); for (int i = 0; i < votableCount; i++) { int votes = inc.ReadByte(); string modeIdentifier = inc.ReadString(); GameModePreset mode = GameModePreset.List.Find(m => m.Identifier == modeIdentifier); SetVoteText(GameMain.NetLobbyScreen.ModeList, mode, votes); } } AllowEndVoting = inc.ReadBoolean(); if (AllowEndVoting) { GameMain.NetworkMember.EndVoteCount = inc.ReadByte(); GameMain.NetworkMember.EndVoteMax = inc.ReadByte(); } AllowVoteKick = inc.ReadBoolean(); byte subVoteStateByte = inc.ReadByte(); VoteState subVoteState = VoteState.None; try { subVoteState = (VoteState)subVoteStateByte; } catch (System.Exception e) { DebugConsole.ThrowError("Failed to cast vote type \"" + subVoteStateByte + "\"", e); } if (subVoteState != VoteState.None) { byte voteTypeByte = inc.ReadByte(); VoteType voteType = VoteType.Unknown; try { voteType = (VoteType)voteTypeByte; } catch (System.Exception e) { DebugConsole.ThrowError("Failed to cast vote type \"" + voteTypeByte + "\"", e); } if (voteType != VoteType.Unknown) { byte yesClientCount = inc.ReadByte(); for (int i = 0; i < yesClientCount; i++) { byte clientID = inc.ReadByte(); var matchingClient = GameMain.NetworkMember.ConnectedClients.Find(c => c.ID == clientID); matchingClient?.SetVote(voteType, 2); } byte noClientCount = inc.ReadByte(); for (int i = 0; i < noClientCount; i++) { byte clientID = inc.ReadByte(); var matchingClient = GameMain.NetworkMember.ConnectedClients.Find(c => c.ID == clientID); matchingClient?.SetVote(voteType, 1); } GameMain.NetworkMember.SubmarineVoteYesCount = yesClientCount; GameMain.NetworkMember.SubmarineVoteNoCount = noClientCount; GameMain.NetworkMember.SubmarineVoteMax = inc.ReadByte(); switch (subVoteState) { case VoteState.Started: Client myClient = GameMain.NetworkMember.ConnectedClients.Find(c => c.ID == GameMain.Client.ID); if (!myClient.InGame) { VoteRunning = true; return; } string subName1 = inc.ReadString(); SubmarineInfo info = GameMain.Client.ServerSubmarines.FirstOrDefault(s => s.Name == subName1); if (info == null) { DebugConsole.ThrowError("Failed to find a matching submarine, vote aborted"); return; } VoteRunning = true; byte starterID = inc.ReadByte(); Client starterClient = GameMain.NetworkMember.ConnectedClients.Find(c => c.ID == starterID); float timeOut = inc.ReadByte(); GameMain.Client.ShowSubmarineChangeVoteInterface(starterClient, info, voteType, timeOut); break; case VoteState.Running: // Nothing specific break; case VoteState.Passed: case VoteState.Failed: VoteRunning = false; bool passed = inc.ReadBoolean(); string subName2 = inc.ReadString(); SubmarineInfo subInfo = GameMain.Client.ServerSubmarines.FirstOrDefault(s => s.Name == subName2); if (subInfo == null) { DebugConsole.ThrowError("Failed to find a matching submarine, vote aborted"); return; } if (GameMain.Client.VotingInterface != null) { GameMain.Client.VotingInterface.EndVote(passed, yesClientCount, noClientCount); } else if (GameMain.Client.ConnectedClients.Count > 1) { GameMain.NetworkMember.AddChatMessage(VotingInterface.GetSubmarineVoteResultMessage(subInfo, voteType, yesClientCount.ToString(), noClientCount.ToString(), passed), ChatMessageType.Server); } if (passed) { int deliveryFee = inc.ReadInt16(); switch (voteType) { case VoteType.PurchaseAndSwitchSub: GameMain.GameSession.PurchaseSubmarine(subInfo); GameMain.GameSession.SwitchSubmarine(subInfo, 0); break; case VoteType.PurchaseSub: GameMain.GameSession.PurchaseSubmarine(subInfo); break; case VoteType.SwitchSub: GameMain.GameSession.SwitchSubmarine(subInfo, deliveryFee); break; } SubmarineSelection.ContentRefreshRequired = true; } break; } } } GameMain.NetworkMember.ConnectedClients.ForEach(c => c.SetVote(VoteType.StartRound, false)); byte readyClientCount = inc.ReadByte(); for (int i = 0; i < readyClientCount; i++) { byte clientID = inc.ReadByte(); var matchingClient = GameMain.NetworkMember.ConnectedClients.Find(c => c.ID == clientID); matchingClient?.SetVote(VoteType.StartRound, true); } UpdateVoteTexts(GameMain.NetworkMember.ConnectedClients, VoteType.StartRound); inc.ReadPadBits(); }
public virtual void ClientReadInitial(IReadMessage msg) { state = msg.ReadInt16(); }