public static void syncCounter(string id, int value) { if (Game1.IsMultiplayer) { PyNet.sendRequestToAllFarmers <bool>("PyTK.ModSavdDataCounterChangeReceiver", new ValueChangeRequest <string, int>(id, value, saveData.Counters[id]), null, SerializationType.JSON, -1); } }
private void messageTest() { PyNet.sendMessage("Platonymous.PyTK.Test", "TestMessage"); TimeEvents.TimeOfDayChanged += (s, e) => { foreach (MPMessage msg in PyNet.getNewMessages("Platonymous.PyTK.Test")) { string message = (string)msg.message; string sender = msg.sender.Name; //Do Something; } }; }
public override void Entry(IModHelper helper) { _helper = helper; _monitor = Monitor; harmonyFix(); FormatManager.Instance.RegisterMapFormat(new NewTiledTmxFormat()); SaveHandler.BeforeRebuilding += (a, b) => CustomObjectData.collection.useAll(k => k.Value.sdvId = k.Value.getNewSDVId()); initializeResponders(); startResponder(); registerConsoleCommands(); CustomTVMod.load(); PyLua.init(); registerTileActions(); SaveHandler.setUpEventHandlers(); CustomObjectData.CODSyncer.start(); ContentSync.ContentSyncHandler.initialize(); this.Helper.Events.Player.Warped += Player_Warped; this.Helper.Events.GameLoop.DayStarted += OnDayStarted; this.Helper.Events.Multiplayer.PeerContextReceived += (s, e) => { if (Game1.IsMasterGame && Game1.IsServer && CustomObjectData.collection.Values.Count > 0) { List <CODSync> list = new List <CODSync>(); foreach (CustomObjectData data in CustomObjectData.collection.Values) { list.Add(new CODSync(data.id, data.sdvId)); } PyNet.sendDataToFarmer(CustomObjectData.CODSyncerName, new CODSyncMessage(list), e.Peer.PlayerID, SerializationType.JSON); } }; Helper.Events.Multiplayer.ModMessageReceived += PyNet.Multiplayer_ModMessageReceived; }
private void registerConsoleCommands() { CcLocations.clearSpace().register(); CcSaveHandler.cleanup().register(); CcSaveHandler.savecheck().register(); CcTime.skip().register(); CcLua.runScript().register(); new ConsoleCommand("adjustWarps", "", (s, p) => { PyUtils.adjustWarps(p[0]); }).register(); new ConsoleCommand("rebuild_objects", "", (s, e) => { SaveHandler.RebuildAll(Game1.currentLocation.objects, Game1.currentLocation); SaveHandler.RebuildAll(Game1.currentLocation.terrainFeatures, Game1.currentLocation); }).register(); new ConsoleCommand("allready", "confirms all players for the current readydialogue", (s, p) => { if (!(Game1.activeClickableMenu is ReadyCheckDialog)) { Monitor.Log("No open ready check.", LogLevel.Alert); } else { OvGame.allready = true; } }).register(); new ConsoleCommand("send", "sends a message to all players: send [address] [message]", (s, p) => { if (p.Length < 2) { Monitor.Log("Missing address or message.", LogLevel.Alert); } else { string address = p[0]; List <string> parts = new List <string>(p); parts.Remove(p[0]); string message = String.Join(" ", p); PyNet.sendMessage(address, message); Monitor.Log("OK", LogLevel.Info); } }).register(); new ConsoleCommand("messages", "lists all new messages on a specified address: messages [address]", (s, p) => { if (p.Length == 0) { Monitor.Log("Missing address", LogLevel.Alert); } else { List <MPMessage> messages = PyNet.getNewMessages(p[0]).ToList(); foreach (MPMessage msg in messages) { Monitor.Log($"From {msg.sender.Name} : {msg.message}", LogLevel.Info); } Monitor.Log("OK", LogLevel.Info); } }).register(); new ConsoleCommand("getstamina", "lists the current stamina values of all players", (s, p) => { Monitor.Log(Game1.player.Name + ": " + Game1.player.Stamina, LogLevel.Info); foreach (Farmer farmer in Game1.otherFarmers.Values) { PyNet.sendRequestToFarmer <int>("PytK.StaminaRequest", -1, farmer, (getStamina) => Monitor.Log(farmer.Name + ": " + getStamina, LogLevel.Info)); } }).register(); new ConsoleCommand("setstamina", "changes the stamina of all or a specific player. use: setstamina [playername or all] [stamina]", (s, p) => { if (p.Length < 2) { Monitor.Log("Missing parameter", LogLevel.Alert); } Monitor.Log(Game1.player.Name + ": " + Game1.player.Stamina, LogLevel.Info); Farmer farmer = null; farmer = Game1.otherFarmers.Find(k => k.Value.Name.Equals(p[0])).Value; if (farmer == null) { Monitor.Log("Couldn't find Farmer", LogLevel.Alert); return; } int i = -1; int.TryParse(p[1], out i); PyNet.sendRequestToFarmer <int>("PytK.StaminaRequest", i, farmer, (setStamina) => Monitor.Log(farmer.Name + ": " + setStamina, LogLevel.Info)); }).register(); new ConsoleCommand("ping", "pings all other players", (s, p) => { foreach (Farmer farmer in Game1.otherFarmers.Values) { long t = Game1.currentGameTime.TotalGameTime.Milliseconds; PyNet.sendRequestToFarmer <bool>("PytK.Ping", t, farmer, (ping) => { long r = Game1.currentGameTime.TotalGameTime.Milliseconds; if (ping) { Monitor.Log(farmer.Name + ": " + (r - t) + "ms", LogLevel.Info); } else { Monitor.Log(farmer.Name + ": No Answer", LogLevel.Error); } }); } }).register(); new ConsoleCommand("syncmap", "Syncs map of a specified location to all clients. Exp.: syncmap Farm, syncmap BusStop, syncmao Town", (s, p) => { if (p.Length < 1) { Monitor.Log("No Location specified. "); } PyNet.syncLocationMapToAll(p[0]); }).register(); }
public override void Entry(IModHelper helper) { _instance = this; PostSerializer.Add(ModManifest, Rebuilder); PreSerializer.Add(ModManifest, Replacer); harmonyFix(); FormatManager.Instance.RegisterMapFormat(new TMXTile.TMXFormat(Game1.tileSize / Game1.pixelZoom, Game1.tileSize / Game1.pixelZoom, Game1.pixelZoom, Game1.pixelZoom)); initializeResponders(); startResponder(); registerConsoleCommands(); CustomTVMod.load(); PyLua.init(); registerTileActions(); registerEventPreconditions(); SaveHandler.setUpEventHandlers(); CustomObjectData.CODSyncer.start(); ContentSync.ContentSyncHandler.initialize(); helper.Events.GameLoop.DayStarted += (s, e) => { if (ReInjectCustomObjects) { ReInjectCustomObjects = false; CustomObjectData.injector.Invalidate(); CustomObjectData.injectorBig.Invalidate(); } }; this.Helper.Events.Player.Warped += Player_Warped; this.Helper.Events.GameLoop.DayStarted += OnDayStarted; this.Helper.Events.Multiplayer.PeerContextReceived += (s, e) => { if (Game1.IsMasterGame && Game1.IsServer) { if (CustomObjectData.collection.Values.Count > 0) { List <CODSync> list = new List <CODSync>(); foreach (CustomObjectData data in CustomObjectData.collection.Values) { list.Add(new CODSync(data.id, data.sdvId)); } PyNet.sendDataToFarmer(CustomObjectData.CODSyncerName, new CODSyncMessage(list), e.Peer.PlayerID, SerializationType.JSON); } PyNet.sendDataToFarmer("PyTK.ModSavdDataReceiver", saveData, e.Peer.PlayerID, SerializationType.JSON); } }; Helper.Events.Display.RenderingHud += (s, e) => { if (Game1.displayHUD && Context.IsWorldReady) { PyTK.PlatoUI.UIHelper.DrawHud(e.SpriteBatch, true); } }; Helper.Events.Display.RenderedHud += (s, e) => { if (Game1.displayHUD && Context.IsWorldReady) { PyTK.PlatoUI.UIHelper.DrawHud(e.SpriteBatch, false); } }; Helper.Events.Input.ButtonPressed += (s, e) => { if (Game1.displayHUD && Context.IsWorldReady) { if (e.Button == SButton.MouseLeft || e.Button == SButton.MouseRight) { PlatoUI.UIHelper.BaseHud.PerformClick(e.Cursor.ScreenPixels.toPoint(), e.Button == SButton.MouseRight, false, false); } } }; Helper.Events.Display.WindowResized += (s, e) => { PlatoUI.UIElement.Viewportbase.UpdateBounds(); PlatoUI.UIHelper.BaseHud.UpdateBounds(); }; Helper.Events.Multiplayer.ModMessageReceived += PyNet.Multiplayer_ModMessageReceived; helper.Events.GameLoop.Saving += (s, e) => { if (Game1.IsMasterGame) { try { helper.Data.WriteSaveData <PyTKSaveData>("PyTK.ModSaveData", saveData); } catch { } } }; helper.Events.GameLoop.ReturnedToTitle += (s, e) => { saveData = new PyTKSaveData(); }; helper.Events.GameLoop.SaveLoaded += (s, e) => { if (Game1.IsMasterGame) { try { saveData = helper.Data.ReadSaveData <PyTKSaveData>("PyTK.ModSaveData"); } catch { } if (saveData == null) { saveData = new PyTKSaveData(); } } }; helper.Events.GameLoop.OneSecondUpdateTicked += (s, e) => { if (Context.IsWorldReady && Game1.currentLocation is GameLocation location && location.Map is Map map) { PyUtils.checkDrawConditions(map); } }; helper.Events.GameLoop.GameLaunched += (s, e) => { if (!Helper.ModRegistry.IsLoaded("spacechase0.GenericModConfigMenu")) { return; } try { registerCPTokens(); } catch { } }; helper.Events.GameLoop.DayStarted += (s, e) => UpdateLuaTokens = true; }
public override void Entry(IModHelper helper) { _instance = this; if (xTile.Format.FormatManager.Instance.GetMapFormatByExtension("tmx") is TMXFormat tmxf) { tmxf.DrawImageLayer = PyMaps.drawImageLayer; } Game1.mapDisplayDevice = new PyDisplayDevice(Game1.content, Game1.graphics.GraphicsDevice); helper.Events.Display.RenderingWorld += (s, e) => { if (Game1.currentLocation is GameLocation location && location.Map is Map map && map.GetBackgroundColor() is TMXColor tmxColor) { Game1.graphics.GraphicsDevice.Clear(tmxColor.toColor()); } }; PostSerializer.Add(ModManifest, Rebuilder); PreSerializer.Add(ModManifest, Replacer); harmonyFix(); initializeResponders(); startResponder(); registerConsoleCommands(); CustomTVMod.load(); PyLua.init(); registerTileActions(); registerEventPreconditions(); SaveHandler.setUpEventHandlers(); CustomObjectData.CODSyncer.start(); ContentSync.ContentSyncHandler.initialize(); helper.Events.GameLoop.DayStarted += (s, e) => { if (ReInjectCustomObjects) { ReInjectCustomObjects = false; CustomObjectData.injector?.Invalidate(); CustomObjectData.injectorBig?.Invalidate(); } }; this.Helper.Events.Player.Warped += Player_Warped; this.Helper.Events.GameLoop.DayStarted += OnDayStarted; this.Helper.Events.Multiplayer.PeerContextReceived += (s, e) => { if (Game1.IsMasterGame && Game1.IsServer) { if (CustomObjectData.collection.Values.Count > 0) { List <CODSync> list = new List <CODSync>(); foreach (CustomObjectData data in CustomObjectData.collection.Values) { list.Add(new CODSync(data.id, data.sdvId)); } PyNet.sendDataToFarmer(CustomObjectData.CODSyncerName, new CODSyncMessage(list), e.Peer.PlayerID, SerializationType.JSON); } PyNet.sendDataToFarmer("PyTK.ModSavdDataReceiver", saveData, e.Peer.PlayerID, SerializationType.JSON); } }; Helper.Events.Display.RenderingHud += (s, e) => { if (Game1.displayHUD && Context.IsWorldReady) { PyTK.PlatoUI.UIHelper.DrawHud(e.SpriteBatch, true); } }; Helper.Events.Display.RenderedHud += (s, e) => { if (Game1.displayHUD && Context.IsWorldReady) { PyTK.PlatoUI.UIHelper.DrawHud(e.SpriteBatch, false); } }; Helper.Events.Input.ButtonPressed += (s, e) => { if (Game1.displayHUD && Context.IsWorldReady) { if (e.Button == SButton.MouseLeft || e.Button == SButton.MouseRight) { PlatoUI.UIHelper.BaseHud.PerformClick(e.Cursor.ScreenPixels.toPoint(), e.Button == SButton.MouseRight, false, false); } } }; Helper.Events.Display.WindowResized += (s, e) => { PlatoUI.UIElement.Viewportbase.UpdateBounds(); PlatoUI.UIHelper.BaseHud.UpdateBounds(); }; Helper.Events.Multiplayer.ModMessageReceived += PyNet.Multiplayer_ModMessageReceived; helper.Events.GameLoop.Saving += (s, e) => { if (Game1.IsMasterGame) { try { helper.Data.WriteSaveData <PyTKSaveData>("PyTK.ModSaveData", saveData); } catch { } } }; helper.Events.GameLoop.ReturnedToTitle += (s, e) => { saveData = new PyTKSaveData(); }; helper.Events.GameLoop.SaveLoaded += (s, e) => { CustomTVMod.reloadStrings(); if (Game1.IsMasterGame) { try { saveData = helper.Data.ReadSaveData <PyTKSaveData>("PyTK.ModSaveData"); } catch { } if (saveData == null) { saveData = new PyTKSaveData(); } } }; helper.Events.GameLoop.OneSecondUpdateTicked += (s, e) => { if (Context.IsWorldReady && Game1.currentLocation is GameLocation location && location.Map is Map map) { PyUtils.checkDrawConditions(map); } }; helper.Events.GameLoop.DayStarted += (s, e) => { if (Game1.currentLocation is GameLocation loc) { UpdateLuaTokens = true; } }; helper.Events.GameLoop.UpdateTicked += (s, e) => AnimatedTexture2D.ticked = e.Ticks; }
private void registerConsoleCommands() { CcLocations.clearSpace().register(); CcSaveHandler.cleanup().register(); CcSaveHandler.savecheck().register(); CcTime.skip().register(); CcLua.runScript().register(); new ConsoleCommand("send", "sends a message to all players: send [address] [message]", (s, p) => { if (p.Length < 2) { Monitor.Log("Missing address or message.", LogLevel.Alert); } else { string address = p[0]; List <string> parts = new List <string>(p); parts.Remove(p[0]); string message = String.Join(" ", p); PyNet.sendMessage(address, message); Monitor.Log("OK", LogLevel.Info); } }).register(); new ConsoleCommand("messages", "lists all new messages on a specified address: messages [address]", (s, p) => { if (p.Length == 0) { Monitor.Log("Missing address", LogLevel.Alert); } else { List <MPMessage> messages = PyNet.getNewMessages(p[0]).ToList(); foreach (MPMessage msg in messages) { Monitor.Log($"From {msg.sender.Name} : {msg.message}", LogLevel.Info); } Monitor.Log("OK", LogLevel.Info); } }).register(); new ConsoleCommand("getstamina", "lists the current stamina values of all players", (s, p) => { Monitor.Log(Game1.player.Name + ": " + Game1.player.Stamina, LogLevel.Info); foreach (Farmer farmer in Game1.otherFarmers.Values) { var getStamina = PyNet.sendRequestToFarmer <int>("PytK.StaminaRequest", -1, farmer); getStamina.Wait(); Monitor.Log(farmer.Name + ": " + getStamina.Result, LogLevel.Info); } }).register(); new ConsoleCommand("setstamina", "changes the stamina of all or a specific player. use: setstamina [playername or all] [stamina]", (s, p) => { if (p.Length < 2) { Monitor.Log("Missing parameter", LogLevel.Alert); } Monitor.Log(Game1.player.Name + ": " + Game1.player.Stamina, LogLevel.Info); Farmer farmer = null; try { farmer = Game1.otherFarmers.Find(k => k.Value.Name.Equals(p[0])).Value; } catch { } if (farmer == null) { Monitor.Log("Couldn't find Farmer", LogLevel.Alert); return; } int i = -1; int.TryParse(p[1], out i); var setStamina = PyNet.sendRequestToFarmer <int>("PytK.StaminaRequest", i, farmer); setStamina.Wait(); Monitor.Log(farmer.Name + ": " + setStamina.Result, LogLevel.Info); }).register(); new ConsoleCommand("ping", "pings all other players", (s, p) => { foreach (Farmer farmer in Game1.otherFarmers.Values) { long t = Game1.currentGameTime.TotalGameTime.Milliseconds; var ping = PyNet.sendRequestToFarmer <bool>("PytK.Ping", t, farmer); ping.Wait(); long r = Game1.currentGameTime.TotalGameTime.Milliseconds; if (ping.Result) { Monitor.Log(farmer.Name + ": " + (r - t) + "ms", LogLevel.Info); } else { Monitor.Log(farmer.Name + ": No Answer", LogLevel.Error); } } }).register(); new ConsoleCommand("syncmap", "Syncs map of a specified location to all clients. Exp.: syncmap Farm, syncmap BusStop, syncmao Town", (s, p) => { if (p.Length < 1) { Monitor.Log("No Location specified. "); } PyNet.syncLocationMapToAll(p[0]); }).register(); }
public static void syncMap(Map map, string mapName, Farmer farmer) { Dictionary <TileSheet, Texture2D> tilesheets = Helper.Reflection.GetField <Dictionary <TileSheet, Texture2D> >(Game1.mapDisplayDevice, "m_tileSheetTextures").GetValue(); string[] seasons = new[] { "spring", "summer", "fall", "winter" }; Monitor.Log("Syncing Map " + mapName + " with " + farmer.Name, LogLevel.Info); PyNet.sendGameContent <Map>(Path.Combine("Maps", mapName), map, farmer, (b) => Monitor.Log("Syncing " + mapName + " to " + farmer.Name + ": " + (b ? "successful" : "failed"), b ? LogLevel.Info : LogLevel.Warn)); foreach (TileSheet t in map.TileSheets) { if (t.Id.StartsWith("z")) { Texture2D texture = null; try { texture = Helper.Content.Load <Texture2D>(t.ImageSource, ContentSource.GameContent); } catch { try { texture = Helper.Content.Load <Texture2D>(Path.Combine("Maps", t.ImageSource), ContentSource.GameContent); } catch { } } if (texture == null) { Monitor.Log("Syncing Texture " + t.ImageSource + " failed. Could not load file.", LogLevel.Error); } string filename = Path.GetFileName(t.ImageSource); Monitor.Log("Syncing Texture " + filename + " with " + farmer.Name, LogLevel.Info); PyNet.sendGameContent(new[] { filename, Path.Combine("Maps", filename) }, texture, farmer, (b) => Monitor.Log("Syncing " + t.ImageSource + " to " + farmer.Name + ": " + (b ? "successful" : "failed"), b ? LogLevel.Info : LogLevel.Warn)); foreach (string season in seasons) { if (season is string cSeason && filename.Contains(season)) { foreach (string s in seasons.Where(cs => cs != cSeason)) { Texture2D seasonTexture = null; string sFilename = filename.Replace(cSeason, s); string sFilenameMaps = Path.Combine("Maps", sFilename); try { seasonTexture = Helper.Content.Load <Texture2D>(sFilename, ContentSource.GameContent); } catch { try { seasonTexture = Helper.Content.Load <Texture2D>(sFilenameMaps, ContentSource.GameContent); } catch { } } if (seasonTexture is Texture2D sTex) { Monitor.Log("Syncing Texture " + sFilename + " with " + farmer.Name, LogLevel.Info); PyNet.sendGameContent(new[] { sFilename, sFilenameMaps }, sTex, farmer, (b) => Monitor.Log("Syncing " + sFilename + " to " + farmer.Name + ": " + (b ? "successful" : "failed"), b ? LogLevel.Info : LogLevel.Warn)); } } break; } } } } }
public override void Entry(IModHelper helper) { _helper = helper; _monitor = Monitor; harmonyFix(); // Monitor.Log("Harmony Patching failed", LogLevel.Error); FormatManager.Instance.RegisterMapFormat(new NewTiledTmxFormat()); SaveHandler.BeforeRebuilding += (a, b) => CustomObjectData.collection.useAll(k => k.Value.sdvId = k.Value.getNewSDVId()); initializeResponders(); startResponder(); registerConsoleCommands(); CustomTVMod.load(); PyLua.init(); registerTileActions(); registerEventPreconditions(); SaveHandler.setUpEventHandlers(); CustomObjectData.CODSyncer.start(); ContentSync.ContentSyncHandler.initialize(); this.Helper.Events.Player.Warped += Player_Warped; this.Helper.Events.GameLoop.DayStarted += OnDayStarted; this.Helper.Events.Multiplayer.PeerContextReceived += (s, e) => { if (Game1.IsMasterGame && Game1.IsServer) { if (CustomObjectData.collection.Values.Count > 0) { List <CODSync> list = new List <CODSync>(); foreach (CustomObjectData data in CustomObjectData.collection.Values) { list.Add(new CODSync(data.id, data.sdvId)); } PyNet.sendDataToFarmer(CustomObjectData.CODSyncerName, new CODSyncMessage(list), e.Peer.PlayerID, SerializationType.JSON); } PyNet.sendDataToFarmer("PyTK.ModSavdDataReceiver", saveData, e.Peer.PlayerID, SerializationType.JSON); } }; Helper.Events.Display.RenderingHud += (s, e) => { if (Game1.displayHUD && Context.IsWorldReady) { PyTK.PlatoUI.UIHelper.DrawHud(e.SpriteBatch, true); } }; Helper.Events.Display.RenderedHud += (s, e) => { if (Game1.displayHUD && Context.IsWorldReady) { PyTK.PlatoUI.UIHelper.DrawHud(e.SpriteBatch, false); } }; Helper.Events.Input.ButtonPressed += (s, e) => { if (Game1.displayHUD && Context.IsWorldReady) { if (e.Button == SButton.MouseLeft || e.Button == SButton.MouseRight) { PlatoUI.UIHelper.BaseHud.PerformClick(e.Cursor.ScreenPixels.toPoint(), e.Button == SButton.MouseRight, false, false); } } }; Helper.Events.Display.WindowResized += (s, e) => { PlatoUI.UIElement.Viewportbase.UpdateBounds(); PlatoUI.UIHelper.BaseHud.UpdateBounds(); }; Helper.Events.Multiplayer.ModMessageReceived += PyNet.Multiplayer_ModMessageReceived; helper.Events.GameLoop.Saving += (s, e) => { if (Game1.IsMasterGame) { try { helper.Data.WriteSaveData <PyTKSaveData>("PyTK.ModSaveData", saveData); } catch { } } }; helper.Events.GameLoop.ReturnedToTitle += (s, e) => { saveData = new PyTKSaveData(); }; helper.Events.GameLoop.SaveLoaded += (s, e) => { if (Game1.IsMasterGame) { try { saveData = helper.Data.ReadSaveData <PyTKSaveData>("PyTK.ModSaveData"); } catch { } if (saveData == null) { saveData = new PyTKSaveData(); } } }; helper.Events.GameLoop.OneSecondUpdateTicked += (s, e) => { if (Context.IsWorldReady && Game1.currentLocation is GameLocation location && location.Map is Map map) { PyUtils.checkDrawConditions(map); } }; }