/// <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);
         }
     }
 }
Пример #4
0
        /// <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);
        }
Пример #5
0
        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)));
            }
        }
Пример #6
0
        /// <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);
        }
Пример #7
0
        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);
            }
        }
Пример #8
0

        
Пример #9
0
 /*********
 ** 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);