コード例 #1
0
        public static void LoadMapSettings(S server, Session.Global gs, Ruleset rules)
        {
            lock (server.LobbyInfo)
            {
                var options = rules.Actors["player"].TraitInfos <ILobbyOptions>()
                              .Concat(rules.Actors["world"].TraitInfos <ILobbyOptions>())
                              .SelectMany(t => t.LobbyOptions(rules));

                foreach (var o in options)
                {
                    var value          = o.DefaultValue;
                    var preferredValue = o.DefaultValue;
                    if (gs.LobbyOptions.TryGetValue(o.Id, out var state))
                    {
                        // Propagate old state on map change
                        if (!o.IsLocked)
                        {
                            if (o.Values.Keys.Contains(state.PreferredValue))
                            {
                                value = state.PreferredValue;
                            }
                            else if (o.Values.Keys.Contains(state.Value))
                            {
                                value = state.Value;
                            }
                        }

                        preferredValue = state.PreferredValue;
                    }
                    else
                    {
                        state = new Session.LobbyOptionState();
                    }

                    state.IsLocked        = o.IsLocked;
                    state.Value           = value;
                    state.PreferredValue  = preferredValue;
                    gs.LobbyOptions[o.Id] = state;

                    if (o.Id == "gamespeed")
                    {
                        var speed = server.ModData.Manifest.Get <GameSpeeds>().Speeds[value];
                        gs.Timestep     = speed.Timestep;
                        gs.OrderLatency = speed.OrderLatency;
                    }
                }
            }
        }
コード例 #2
0
        public static void LoadMapSettings(S server, Session.Global gs, MapPreview map)
        {
            lock (server.LobbyInfo)
            {
                var options = map.PlayerActorInfo.TraitInfos <ILobbyOptions>()
                              .Concat(map.WorldActorInfo.TraitInfos <ILobbyOptions>())
                              .SelectMany(t => t.LobbyOptions(map));

                foreach (var o in options)
                {
                    var value          = o.DefaultValue;
                    var preferredValue = o.DefaultValue;
                    if (gs.LobbyOptions.TryGetValue(o.Id, out var state))
                    {
                        // Propagate old state on map change
                        if (!o.IsLocked)
                        {
                            if (o.Values.Keys.Contains(state.PreferredValue))
                            {
                                value = state.PreferredValue;
                            }
                            else if (o.Values.Keys.Contains(state.Value))
                            {
                                value = state.Value;
                            }
                        }

                        preferredValue = state.PreferredValue;
                    }
                    else
                    {
                        state = new Session.LobbyOptionState();
                    }

                    state.IsLocked        = o.IsLocked;
                    state.Value           = value;
                    state.PreferredValue  = preferredValue;
                    gs.LobbyOptions[o.Id] = state;
                }
            }
        }