예제 #1
0
        private void SendModList(List <LocalModInfo> list)
        {
            ModListNotifyMessage msg = new ModListNotifyMessage();

            msg.entries = new ModListNotifyEntry[list.Count];
            for (int i = 0; i < list.Count; i++)
            {
                LocalModInfo lmod = list[i];
                msg.entries[i] = new ModListNotifyEntry()
                {
                    modName        = lmod.modName,
                    displayName    = lmod.displayName,
                    author         = lmod.author,
                    numericVersion = lmod.numericVersion,
                    displayVersion = lmod.displayVersion,
                };
            }

            NetworkTracker.ClientSendLobbyModsList(msg);
        }
        private void CombineLocalAndNetworkMods()
        {
            Dictionary <string, int> nameMap = new Dictionary <string, int>();

            allMods.Clear();

            ModNetworkStatus onlyMe    = localInfo.IsHost ? ModNetworkStatus.OnlyHost : ModNetworkStatus.OnlyClient;
            ModNetworkStatus onlyOther = localInfo.IsHost ? ModNetworkStatus.OnlyClient : ModNetworkStatus.OnlyHost;

            for (int i = 0; i < networkMods.Count; i++)
            {
                NetworkModInfo mod = networkMods[i];
                if (showNotLocalMods || mod.networkStatus != onlyOther)
                {
                    allMods.Add(new ComboModInfo()
                    {
                        filePath       = null,
                        modName        = mod.modName,
                        numericVersion = mod.numericVersion,
                        displayName    = mod.displayName,
                        displayVersion = mod.displayVersion,
                        author         = mod.author,
                        networkStatus  = mod.networkStatus,
                    });
                    nameMap[mod.modName] = allMods.Count - 1;
                }
            }

            for (int i = 0; i < localMods.Count; i++)
            {
                LocalModInfo local = localMods[i];
                int          index = 0;
                ComboModInfo mod;
                if (nameMap.TryGetValue(local.modName, out index))
                {
                    mod = allMods[index];
                    if (mod.numericVersion <= local.numericVersion)
                    {
                        mod.numericVersion = local.numericVersion;
                        mod.displayName    = local.displayName;
                        mod.displayVersion = local.displayVersion;
                        mod.author         = local.author;
                    }
                }
                else
                {
                    mod = new ComboModInfo()
                    {
                        modName        = local.modName,
                        numericVersion = local.numericVersion,
                        displayName    = local.displayName,
                        displayVersion = local.displayVersion,
                        author         = local.author,
                        networkStatus  = onlyMe,
                    };
                    allMods.Add(mod);
                }
                mod.filePath = local.filePath;
            }

            allMods.Sort(SortModList);

            if (pickedMod != null)
            {
                bool pickedNotModFound = true;
                for (int i = 0; i < allMods.Count; i++)
                {
                    ComboModInfo mod = allMods[i];
                    if (mod.modName == pickedMod.modName)
                    {
                        pickedNotModFound = false;
                        SetPickedMod(mod);
                        break;
                    }
                }
                if (pickedNotModFound)
                {
                    SetPickedMod(null);
                }
            }

            Unity.GameLink.NetMods = allMods;

            RefreshOtherPlayerPick();
        }
예제 #3
0
 IMod CreateLocalMod(LocalModInfo lm, ISupportModding game) => Game.Lists.Mods.FirstOrDefault(y => y.Name.Equals(lm.Name, StringComparison.OrdinalIgnoreCase))
 ?? Game.Lists.Mods.FirstOrDefault(y => y.Aliases.Contains(lm.Name, StringComparer.OrdinalIgnoreCase))
 ?? LocalMod.FromLocalModInfo(lm, game);