public Task StartReadyCheck() { ReadyCheck = new List <Player>() { Leader }; BroadcastPacketParty(PartyPacket.StartReadyCheck(Leader, Members, ReadyCheck.Count)); return(Task.Run(async() => { await Task.Delay(20000); if (Members.Count == ReadyCheck.Count || ReadyCheck.Count == 0) // Cancel this. Ready check was successfully responded by each player { return; } foreach (Player member in Members) { if (!ReadyCheck.Contains(member)) { BroadcastPacketParty(PartyPacket.ReadyCheck(member, 0)); // Force player who did not respond to respond with 'not ready' } } BroadcastPacketParty(PartyPacket.EndReadyCheck()); ReadyCheck.Clear(); })); }
private static void HandleReadyCheckUpdate(GameSession session, PacketReader packet) { int checkNum = packet.ReadInt() + 1; //+ 1 is because the ReadyChecks variable is always 1 ahead byte response = packet.ReadByte(); Party party = session.Player.Party; if (party == null) { return; } party.BroadcastPacketParty(PartyPacket.ReadyCheck(session.Player, response)); party.ReadyCheck.Add(session.Player); if (party.ReadyCheck.Count == party.Members.Count) { party.BroadcastPacketParty(PartyPacket.EndReadyCheck()); party.ReadyCheck.Clear(); } }
private void HandleReadyCheckUpdate(GameSession session, PacketReader packet) { int checkNum = packet.ReadInt() + 1; //+ 1 is because the ReadyChecks variable is always 1 ahead byte accept = packet.ReadByte(); Party party = GameServer.PartyManager.GetPartyById(session.Player.PartyId); if (party == null) { return; } if (checkNum != party.ReadyChecks) { return; } party.BroadcastPacketParty(PartyPacket.ReadyCheck(session.Player, accept)); party.RemainingMembers -= 1; if (party.RemainingMembers == 0) { party.BroadcastPacketParty(PartyPacket.EndReadyCheck()); } }