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