/// <summary> /// Displays an error message if a user does not have EqualMoneySplit installed properly /// </summary> /// <param name="newPlayerData"></param> /// <param name="newPlayerName"></param> private void CheckForValidModInstall(IMultiplayerPeer newPlayerData, string newPlayerName) { var currentPlayerMod = EqualMoneyMod.SMAPI.ModRegistry.Get(Models.Constants.ModId); var newPlayerModData = newPlayerData.GetMod(Models.Constants.ModId); string errorMessage = ""; if (!newPlayerData.HasSmapi) { errorMessage = $"Player {newPlayerName} does not have SMAPI installed! EqualMoneySplit will not function properly!"; } else if (newPlayerData.Mods.Count() == 0) { errorMessage = $"Player {newPlayerName} does not have any mods installed! EqualMoneySplit will not function properly!"; } else if (newPlayerModData == null) { errorMessage = $"Player {newPlayerName} does not have EqualMoneySplit installed! EqualMoneySplit will not function properly!"; } else if (newPlayerModData.Version.IsOlderThan(currentPlayerMod.Manifest.Version)) { errorMessage = $"Player {newPlayerName} has an older version ({newPlayerModData.Version.ToString()}) EqualMoneySplit than yours ({currentPlayerMod.Manifest.Version.ToString()})! EqualMoneySplit will not function properly!"; } else if (newPlayerModData.Version.IsNewerThan(currentPlayerMod.Manifest.Version)) { errorMessage = $"Player {newPlayerName} has a newer version ({newPlayerModData.Version.ToString()}) of EqualMoneySplit than yours ({currentPlayerMod.Manifest.Version.ToString()})! EqualMoneySplit will not function properly!"; } if (!string.IsNullOrEmpty(errorMessage)) { Game1.chatBox.addErrorMessage(errorMessage); } }
// Returns a list of mods that the connecting player has which are not on the server. private IEnumerable <string> GetExcessMods(IMultiplayerPeer peer) { foreach (var mod in peer.Mods) { if (!this.AllowedMods.Contains(mod.Name)) { yield return(mod.Name); } } }
// Returns a list of mods that the server has which the connecting player does not have private IEnumerable <string> GetNeededMods(IMultiplayerPeer peer) { foreach (var modName in this.AllowedMods) { if (!peer.Mods.Select(mod => mod.Name).Contains(modName)) { yield return(modName); } } }
/// <summary>Get whether the host player has Automate installed.</summary> private bool HostHasAutomate() { if (Context.IsMainPlayer) { return(true); } IMultiplayerPeer host = this.Helper.Multiplayer.GetConnectedPlayer(Game1.MasterPlayer.UniqueMultiplayerID); return(host?.Mods?.Any(p => string.Equals(p.ID, this.ModManifest.UniqueID, StringComparison.OrdinalIgnoreCase)) == true); }
private void UpdatePeers() { int peerHeight = StaticTextElement.HighlightWidth + SpriteText.getHeightOfString("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); int peerStart = ScreenHeight / 3; this.opponentList.Elements.Clear(); for (int index = 0; index < this.peers.Count; index++) { IMultiplayerPeer peer = this.peers[index]; // This is a dynamic element b/c when we add it here the farmer doesn't exist yet this.opponentList.Elements.Add(new DynamicTextElement(() => Game1.getFarmer(peer.PlayerID).Name, ScreenWidth / 2, peerStart + peerHeight * index, true, false, () => this.Challenge(peer.PlayerID))); } }
/// <summary>Get whether the host player has Automate installed.</summary> /// <param name="version">The installed version, if any.</param> private bool HostHasAutomate(out ISemanticVersion version) { if (Context.IsMainPlayer) { version = this.ModManifest.Version; return(true); } IMultiplayerPeer host = this.Helper.Multiplayer.GetConnectedPlayer(Game1.MasterPlayer.UniqueMultiplayerID); IMultiplayerPeerMod mod = host?.Mods?.SingleOrDefault(p => string.Equals(p.ID, this.ModManifest.UniqueID, StringComparison.OrdinalIgnoreCase)); version = mod?.Version; return(mod != null); }
private void MultiplayerEmotesAvailable(string command, string[] args) { if (!Context.IsMultiplayer) { this.Monitor.Log("You are not currently in a online session.", LogLevel.Info); return; } // Number of players excluding the host int numPlayers = Game1.getOnlineFarmers().Count - 1; if (numPlayers <= 0) { this.Monitor.Log("No players connected in the current session.", LogLevel.Info); return; } int playersWithMod = 0; StringBuilder sb = new StringBuilder(); foreach (Farmer farmer in Game1.getOnlineFarmers()) { // Check that is not the current player if (Game1.player.UniqueMultiplayerID != farmer.UniqueMultiplayerID) { IMultiplayerPeer peer = this.Helper.Multiplayer.GetConnectedPlayer(farmer.UniqueMultiplayerID); if (peer.HasSmapi && peer.GetMod(this.ModManifest.UniqueID) != null) { playersWithMod++; sb.Append($"{playersWithMod}: \"{Game1.getFarmer(peer.PlayerID).Name}\""); } } } if (playersWithMod > 0) { this.Monitor.Log($"From {numPlayers} player(s), {playersWithMod} have this mod:\n{sb}", LogLevel.Info); } else { this.Monitor.Log($"From {numPlayers} player(s), none has this mod.", LogLevel.Info); } }
/********* ** Public methods *********/ /// <summary>Construct an instance.</summary> /// <param name="peer">The peer whose metadata was received.</param> internal PeerContextReceivedEventArgs(IMultiplayerPeer peer) { this.Peer = peer; }
public static Farmer GetPlayer(this IMultiplayerPeer peer) => Game1.getAllFarmers().First(p => p.UniqueMultiplayerID == peer.PlayerID);