示例#1
0
        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);
        }
示例#2
0
        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);
        }