private static void Multiplayer_ModMessageReceived(object sender, StardewModdingAPI.Events.ModMessageReceivedEventArgs e)
        {
            if (!e.FromModID.Equals("Cherry.WarpPylons") || e.Type != "PylonChanged") return;

            _monitor.Log($"Player {e.FromPlayerID} changed the pylons list");
            Pylons = e.ReadAs<List<PylonData>>();
        }
Esempio n. 2
0
 private void Multiplayer_ModMessageReceived(object sender, StardewModdingAPI.Events.ModMessageReceivedEventArgs e)
 {
     if (e.FromModID == Helper.ModHelper.ModRegistry.ModID && e.Type == $"SharedChange:{ AssignedId }")
     {
         ParseChange(e.ReadAs <SharedDataChange>());
     }
 }
Esempio n. 3
0
 private static void Multiplayer_ModMessageReceived(object sender, StardewModdingAPI.Events.ModMessageReceivedEventArgs e)
 {
     if (e.FromModID == _manifest.UniqueID && e.Type == AchievementMessageType)
     {
         UnlockAchievement();
     }
 }
Esempio n. 4
0
        internal static void Multiplayer_ModMessageReceived(object sender, StardewModdingAPI.Events.ModMessageReceivedEventArgs e)
        {
            MPMessageSMAPI message = e.ReadAs <MPMessageSMAPI>();

            if (!messages.ContainsKey(e.Type))
            {
                messages.Add(e.Type, new List <MPMessage>());
            }

            object data = null;

            switch (message.DataType)
            {
            case 0: data = message.AsInt; break;

            case 1: data = message.AsString; break;

            case 2: data = message.AsBool; break;

            case 3: data = message.AsLong; break;

            case 4: data = message.AsDouble; break;

            default: data = message.AsString; break;
            }
            messages[e.Type].Add(new MPMessage(e.Type, Game1.getFarmer(e.FromPlayerID), data, message.MessageType, Game1.player.UniqueMultiplayerID));
        }
Esempio n. 5
0
        private void Multiplayer_ModMessageReceived(object sender, StardewModdingAPI.Events.ModMessageReceivedEventArgs e)
        {
            if (!string.Equals(e.FromModID, CurrentModId, StringComparison.OrdinalIgnoreCase))
            {
                return;
            }

            ISemanticVersion ver        = Helper.Multiplayer.GetConnectedPlayer(e.FromPlayerID)?.GetMod(CurrentModId)?.Version ?? null;
            bool             compatible = ver?.IsNewerThan(CurrentVersion) ?? false;

            if (!compatible)
            {
                Monitor.Log(string.Format("Cannot use this mod during this online session because the host is currently using a more recent version of the mod. Update this mod to enable it on this server. RemoteVer: {0}. LocalVer: {1}", ver?.ToString() ?? "Null", CurrentVersion));
                Settings.Remote = Settings.DefaultDisabled;
                return;
            }

            foreach (Farmer farmer in Game1.getAllFarmers())
            {
                if (farmer.UniqueMultiplayerID == e.FromPlayerID)
                {
                    if (farmer.IsMainPlayer)
                    {
                        // Message received from server
                        if (string.Equals(e.Type, MultiplayerSettingsMessageType, StringComparison.OrdinalIgnoreCase))
                        {
                            try
                            {
                                Settings data = e.ReadAs <Settings>();

                                if (data != null)
                                {
                                    Settings.Remote = data;
                                    Monitor.Log(string.Format("Remote settings updated from server. FarmerId: {0}.", e.FromPlayerID));
                                }
                            }
                            catch (Exception ex)
                            {
                                Monitor.Log(string.Format("Remote settings cannot be updated from server. FarmerId: {0}. Ex: {1}. Msg: {2}. InnerEx: {3}", e.FromPlayerID, ex.GetType().Name, ex.Message, ex.InnerException?.GetType().Name ?? "None"));
                            }
                        }
                        else
                        {
                            Monitor.Log(string.Format("Unknown mod message received from server. FarmerId: {0}. Type: {1}.", e.FromPlayerID, e.Type));
                        }
                    }
                    else
                    {
                        Monitor.Log(string.Format("Remote mod message received from a non-host farmer. FarmerId: {0}. Type: {1}.", e.FromPlayerID, e.Type));
                    }

                    return;
                }
            }

            Monitor.Log(string.Format("Remote mod message received from an unknown farmer. PlayerId: {0}. Type: {1}", e.FromPlayerID, e.Type));
        }
Esempio n. 6
0
 private void Multiplayer_ModMessageReceived(object sender, StardewModdingAPI.Events.ModMessageReceivedEventArgs e)
 {
     if (Util.IsValidMultiplayer)
     {
         if (e.FromModID == Util.ModManifest.UniqueID)
         {
             var message = e.ReadAs <Messages.BroadcastMessage>();
             broadcastActions[message.Type](message);
         }
     }
 }
Esempio n. 7
0
        private void ParseMessage(object sender, StardewModdingAPI.Events.ModMessageReceivedEventArgs e)
        {
            if (Game1.IsMasterGame)
            {
                return;
            }

            if (e.Type == "UpdateRain")
            {
                Array.Resize(ref Game1.rainDrops, e.ReadAs <DRWMessage>().RainAmt);
            }
        }
Esempio n. 8
0
 private static void Multiplayer_ModMessageReceived(object sender, StardewModdingAPI.Events.ModMessageReceivedEventArgs e)
 {
     if (e.FromModID == ItemBagsMod.ModUniqueId && e.Type == ForceResyncCommandType)
     {
         Dictionary <int, string> LatestItemData = e.ReadAs <Dictionary <int, string> >();
         foreach (KeyValuePair <int, string> KVP in LatestItemData)
         {
             int    InventoryIndex = KVP.Key;
             string Data           = KVP.Value;
             if (Game1.player.Items[InventoryIndex] is ItemBag IB)
             {
                 IB.TryDeserializeFromString(Data, out Exception Error);
             }
         }
     }
 }
Esempio n. 9
0
        private void OnModMessage(object sender, StardewModdingAPI.Events.ModMessageReceivedEventArgs e)
        {
            if (e.FromModID != iTile.ModID)
            {
                return;
            }

            SaveManager saveMng = CoreManager.Instance.saveManager;

            if (!Context.IsMainPlayer && e.Type == sessionDataKey)
            {
                SaveProfile session = e.ReadAs <SaveProfile>();
                if (session != null)
                {
                    saveMng.InitSessionExternal(session);
                }
            }
            else if (e.Type == pasteActionKey)
            {
                Packet data    = e.ReadAs <Packet>();
                string locName = data.LocationName;
                if (data == null || data.TileProfile == null || string.IsNullOrEmpty(locName))
                {
                    return;
                }

                if (saveMng.session != null)
                {
                    saveMng.session.GetLocationProfileSafe(locName).HandleTileReplacement(data.TileProfile, false);
                }
            }
            else if (e.Type == restoreActionKey)
            {
                Packet data    = e.ReadAs <Packet>();
                string locName = data.LocationName;
                if (data == null || data.LayerId == null || string.IsNullOrEmpty(locName))
                {
                    return;
                }

                if (saveMng.session != null)
                {
                    saveMng.session.GetLocationProfileSafe(locName).RestoreTile(data.Position, data.LayerId, false);
                }
            }
        }
        /*****               *****/
        /***** Internal Code *****/
        /*****               *****/

        private static void Multiplayer_ModMessageReceived(object sender, StardewModdingAPI.Events.ModMessageReceivedEventArgs e)
        {
            if (!Context.IsWorldReady || !Context.IsMainPlayer) //if the local player is NOT hosting a game session
            {
                return;
            }

            if (e.Type != nameof(DisableShadowAttacks)) //if this message is NOT for this specific class
            {
                return;
            }

            if (Game1.getLocationFromName(e.ReadAs <string>() ?? "") is GameLocation location) //if the message contains a valid location name, get the location
            {
                DisableShadowsHere(location);                                                  //disable shadow attacks at that location if necessary
            }
        }
Esempio n. 11
0
        private static void Multiplayer_ModMessageReceived(object sender, StardewModdingAPI.Events.ModMessageReceivedEventArgs e)
        {
            if (e.FromModID != Consts.ModUniqueID)
            {
                return;
            }

            switch (e.Type)
            {
            case Consts.MultiplayerLoadKey:
                ModData = e.ReadAs <Data.Data>();
                MapDataFromSave();
                InitializeAllUpgrades();
                break;

            case Consts.MultiplayerUpdate:
                UpgradeForTonight = e.ReadAs <string>();
                break;

            case Consts.MultiplayerJunimopointsKey:
                JunimoPoints = e.ReadAs <int>();
                break;
            }
        }
Esempio n. 12
0
        private void Multiplayer_ModMessageReceived(object sender, StardewModdingAPI.Events.ModMessageReceivedEventArgs e)
        {
            //ModMonitor.Log("Get messages from"+e.FromModID);
            //ModMonitor.Log("Message type: " + e.Type);

            if (e.FromModID == this.ModManifest.UniqueID)
            {
                if (e.Type == MultiplayerSupport.CleanUpModObjects)
                {
                    SerializationManager.cleanUpInventory();
                    SerializationManager.cleanUpWorld();
                    SerializationManager.cleanUpStorageContainers();
                }
                else if (e.Type == MultiplayerSupport.RestoreModObjects)
                {
                    if (Game1.eventUp)
                    {
                        return;                //Prevent item duplication.
                    }
                    //ModMonitor.Log("Restoring custom objects.");
                    SerializationManager.restoreAllModObjects(SerializationManager.trackedObjectList);
                }
            }
        }
Esempio n. 13
0
 /// <summary>
 /// Handles receiving mod messages.
 /// </summary>
 /// <param name="o"></param>
 /// <param name="e"></param>
 public static void GetModMessage(object o, StardewModdingAPI.Events.ModMessageReceivedEventArgs e)
 {
 }
        private void Multiplayer_ModMessageReceived(object?sender, StardewModdingAPI.Events.ModMessageReceivedEventArgs e)
        {
            if (e.FromModID == this.ModManifest.UniqueID && e.Type == "info")
            {
                if (config.DisplayVotePauseMessages)
                {
                    Game1.chatBox.addInfoMessage(e.ReadAs <string>());
                }

                return;
            }

            if (Context.IsMainPlayer)
            {
                if (e.FromModID == this.ModManifest.UniqueID)
                {
                    if (e.Type == "pauseTime")
                    {
                        pauseTimeAll[e.FromPlayerID] = e.ReadAs <string>();
                    }
                    else if (e.Type == "inSkull")
                    {
                        inSkullAll[e.FromPlayerID] = e.ReadAs <string>();
                    }
                    else if (e.Type == "votePause")
                    {
                        if (!config.EnableVotePause)
                        {
                            return;
                        }

                        votePauseAll[e.FromPlayerID] = e.ReadAs <bool>();
                        int votedYes = 0;
                        foreach (bool vote in votePauseAll.Values)
                        {
                            if (vote)
                            {
                                votedYes++;
                            }
                        }

                        if (e.ReadAs <bool>())
                        {
                            this.Helper.Multiplayer.SendMessage <string>($"{Game1.getFarmer(e.FromPlayerID).Name} voted to pause the game. ({votedYes}/{Game1.getOnlineFarmers().Count})", "info", new[] { this.ModManifest.UniqueID });
                            Game1.chatBox.addInfoMessage($"{Game1.getFarmer(e.FromPlayerID).Name} voted to pause the game. ({votedYes}/{Game1.getOnlineFarmers().Count})");
                        }
                        else
                        {
                            this.Helper.Multiplayer.SendMessage <string>($"{Game1.getFarmer(e.FromPlayerID).Name} voted to unpause the game. ({votedYes}/{Game1.getOnlineFarmers().Count})", "info", new[] { this.ModManifest.UniqueID });
                            Game1.chatBox.addInfoMessage($"{Game1.getFarmer(e.FromPlayerID).Name} voted to unpause the game. ({votedYes}/{Game1.getOnlineFarmers().Count})");
                        }
                    }
                    else if (e.Type == "eventUp")
                    {
                        eventStatus[e.FromPlayerID] = e.ReadAs <bool>();
                    }
                }
            }
            else
            {
                if (e.FromModID == this.ModManifest.UniqueID && e.Type == "pauseCommand")
                {
                    pauseCommand = e.ReadAs <string>();
                }
                else if (e.FromModID == this.ModManifest.UniqueID && e.Type == "lockMonsters")
                {
                    this.lockMonsters = e.ReadAs <string>() == "true" ? true : false;
                }
                else if (e.FromModID == this.ModManifest.UniqueID && e.Type == "setVotePause")
                {
                    this.votePause = e.ReadAs <bool>();
                }
            }
        }
Esempio n. 15
0
        /// <summary>
        /// Handles receiving mod messages.
        /// </summary>
        /// <param name="o"></param>
        /// <param name="e"></param>
        public static void GetModMessage(object o, StardewModdingAPI.Events.ModMessageReceivedEventArgs e)
        {
            //ModCore.log("Get a mod message: "+e.Type);
            if (e.Type.Equals(RequestGUIDMessage))
            {
                //ModCore.log("Send GUID Request");
                Guid request = Guid.Parse(e.ReadAs <string>());
                SendGuidObject(request);
            }

            if (e.Type.Equals(ReceieveGUIDMessage))
            {
                //ModCore.log("Receieve GUID Request");
                string       objStr = e.ReadAs <string>();
                CustomObject v      = (CustomObject)ModCore.Serializer.DeserializeFromJSONString <Item>(objStr);
                if (ModCore.CustomObjects.ContainsKey((v as CustomObject).guid) == false)
                {
                    ModCore.CustomObjects.Add((v as CustomObject).guid, v);
                    v.info.forceUpdate();
                    v.updateInfo();
                }
                else
                {
                    ModCore.CustomObjects[(v as CustomObject).guid] = v;
                    v.info.forceUpdate();
                    v.updateInfo();
                }
            }

            if (e.Type.Equals(RequestGUIDMessage_Tile))
            {
                //odCore.log("Send GUID Request FOR TILE");
                Guid request = Guid.Parse(e.ReadAs <string>());
                SendGuidObject_Tile(request);
            }
            if (e.Type.Equals(ReceieveGUIDMessage_Tile))
            {
                //ModCore.log("Receieve GUID Request FOR TILE");
                string       objStr = e.ReadAs <string>();
                CustomObject v      = (CustomObject)ModCore.Serializer.DeserializeFromJSONString <Item>(objStr);
                if (ModCore.CustomObjects.ContainsKey((v as CustomObject).guid) == false)
                {
                    ModCore.CustomObjects.Add((v as CustomObject).guid, v);
                    v.info.forceUpdate();
                    v.updateInfo();
                }
                else
                {
                    ModCore.CustomObjects[(v as CustomObject).guid] = v;
                    v.info.forceUpdate();
                    v.updateInfo();
                }
            }

            if (e.Type.Equals(RequestALLModObjects))
            {
                List <KeyValuePair <Guid, CustomObject> > list = ModCore.CustomObjects.ToList();
                foreach (var v in list)
                {
                    (v.Value).updateInfo();
                    SendGuidObject(v.Key);
                }
            }

            if (e.Type.Equals(RequestObjectUpdateSync))
            {
                string guidString = e.ReadAs <string>();
                Guid   guid       = Guid.Parse(guidString);
                if (ModCore.CustomObjects.ContainsKey(guid))
                {
                    ModCore.CustomObjects[guid].getUpdate();
                }
            }
        }