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(); }
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);