public void Update(TimeSpan delta) { try { if (!(RoomManager?.Contains(this) ?? false)) { return; } if (Players.Count == 0 || !TeamManager.Players.Any()) { if (Master.Room == this && !Master.IsLoggedIn()) { RoomManager?.Remove(this); } return; } if (!(Master?.IsLoggedIn() ?? true) || Master?.Room != this) { ChangeMasterIfNeeded(GetPlayerWithLowestPing(), true); ChangeHostIfNeeded(GetPlayerWithLowestPing(), true); } if (IsChangingRules) { _changingRulesTimer += delta; if (_changingRulesTimer >= _changingRulesTime && IsChangingRulesCooldown != true) { RoomManager.Channel.BroadcastCencored(new RoomChangeRoomInfoAck2Message(GetRoomInfo())); Broadcast(new RoomChangeRuleAckMessage(Options.Map <RoomCreationOptions, ChangeRuleDto>())); Broadcast(new GameChangeStateAckMessage(GameState)); IsChangingRulesCooldown = true; } if (_changingRulesTimer >= _changingRulesTime.Add(TimeSpan.FromSeconds(3))) { IsChangingRules = false; IsChangingRulesCooldown = false; } } } catch (Exception e) { Logger.Error(e.ToString()); } GameRuleManager.Update(delta); }
public void Update(TimeSpan delta) { try { if (!(RoomManager?.Contains(this) ?? false)) { return; } if (Players.Count == 0 || !TeamManager.Players.Any()) { if (Master.Room == this && !Master.IsLoggedIn()) { RoomManager?.Remove(this); } return; } //if (Host != null) //{ // _hostUpdateTimer += delta; // if (_hostUpdateTimer >= _hostUpdateTime) // { // var lowest = GetPlayerWithLowestPing(); // if (Host != lowest) // { // var diff = Math.Abs(Host.Session.UnreliablePing - lowest.Session.UnreliablePing); // if (diff >= PingDifferenceForChange) // ChangeHostIfNeeded(lowest, true); // } // // _hostUpdateTimer = TimeSpan.Zero; // } //} if (IsChangingRules) { _changingRulesTimer += delta; if (_changingRulesTimer >= _changingRulesTime && IsChangingRulesCooldown != true) { GameRuleManager.MapInfo = GameServer.Instance.ResourceCache.GetMaps()[Options.MapID]; GameRuleManager.GameRule = RoomManager.GameRuleFactory.Get(Options.GameRule, this); Broadcast(new RoomChangeRuleAckMessage(Options.Map <RoomCreationOptions, ChangeRuleDto>())); Broadcast(new RoomChangeRuleFailAckMessage { Result = 0 }); BroadcastBriefing(); IsChangingRulesCooldown = true; } if (_changingRulesTimer >= _changingRulesTime.Add(TimeSpan.FromSeconds(3))) { IsChangingRules = false; IsChangingRulesCooldown = false; } } } catch (Exception e) { Logger.Error(e.ToString()); } GameRuleManager.Update(delta); }