private void InitGameIfNecessary() { ModEntry.Log("InitGameIfNecessary(" + isDeepWoodsGameRunning + ")", StardewModdingAPI.LogLevel.Trace); // Make sure our interceptor is set. // E.g. MTN overrides Game1.multiplayer instead of wrapping. Game1MultiplayerAccessProvider.InterceptMultiplayerIfNecessary(); if (isDeepWoodsGameRunning) { return; } if (Game1.IsMasterGame) { DeepWoodsSettings.DoLoad(); DeepWoodsManager.Add(); EasterEggFunctions.RestoreAllEasterEggsInGame(); WoodsObelisk.RestoreAllInGame(); isDeepWoodsGameRunning = true; } else { DeepWoodsManager.Remove(); hasRequestedInitMessageFromServer = true; Game1.MasterPlayer.queueMessage(Settings.Network.DeepWoodsMessageId, Game1.player, new object[] { NETWORK_MESSAGE_DEEPWOODS_INIT }); } }
private void SaveEvents_BeforeSave(object sender, EventArgs args) { ModEntry.Log("SaveEvents_BeforeSave", StardewModdingAPI.LogLevel.Trace); isBeforeSaveCount++; if (isBeforeSaveCount > 1) { ModEntry.Log("BeforeSave event was called twice in a row. Ignoring second call.", StardewModdingAPI.LogLevel.Warn); return; } DeepWoodsManager.Remove(); EasterEggFunctions.RemoveAllEasterEggsFromGame(); WoodsObelisk.RemoveAllFromGame(); DeepWoodsSettings.DoSave(); foreach (var who in Game1.getAllFarmers()) { if (who.currentLocation is DeepWoods) { who.currentLocation = Game1.getLocationFromName("Woods"); who.Position = new Vector2(WOODS_WARP_LOCATION.X * 64, WOODS_WARP_LOCATION.Y * 64); } } }
private void GameEvents_UpdateTick(object sender, EventArgs args) { if (!isDeepWoodsGameRunning) { return; } WorkErrorMessageQueue(); Dictionary <long, GameLocation> newPlayerLocations = new Dictionary <long, GameLocation>(); foreach (Farmer farmer in Game1.getOnlineFarmers()) { newPlayerLocations.Add(farmer.UniqueMultiplayerID, farmer.currentLocation); } // Detect any farmer who left, joined or changed location. foreach (var playerLocation in playerLocations) { if (!newPlayerLocations.ContainsKey(playerLocation.Key)) { // player left PlayerWarped(Game1.getFarmer(playerLocation.Key), playerLocation.Value, null); } else if (playerLocation.Value?.Name != newPlayerLocations[playerLocation.Key]?.Name) { // player warped PlayerWarped(Game1.getFarmer(playerLocation.Key), playerLocation.Value, newPlayerLocations[playerLocation.Key]); } } foreach (var newPlayerLocation in newPlayerLocations) { if (!playerLocations.ContainsKey(newPlayerLocation.Key)) { // player joined PlayerWarped(Game1.getFarmer(newPlayerLocation.Key), null, newPlayerLocation.Value); } } // Update cache playerLocations = newPlayerLocations; // DeepWoodsManager.LocalTick(); // Fix lighting in Woods and DeepWoods DeepWoodsManager.FixLighting(); // Add woods obelisk to wizard shop if possible and necessary, // intercept Building.obeliskWarpForReal() calls. WoodsObelisk.InjectWoodsObeliskIntoGame(); }
private void SaveEvents_AfterSave(object sender, EventArgs args) { ModEntry.Log("SaveEvents_AfterSave", StardewModdingAPI.LogLevel.Trace); isBeforeSaveCount--; if (isBeforeSaveCount > 0) { ModEntry.Log("AfterSave event was called before save has finished. Ignoring.", StardewModdingAPI.LogLevel.Warn); return; } if (isBeforeSaveCount < 0) { ModEntry.Log("AfterSave event was called without previous BeforeSave call. Mod is now in unknown state, all hell might break lose.", StardewModdingAPI.LogLevel.Error); return; } DeepWoodsManager.Restore(); EasterEggFunctions.RestoreAllEasterEggsInGame(); WoodsObelisk.RestoreAllInGame(); }
private void InitGameIfNecessary() { ModEntry.Log("InitGameIfNecessary(" + isDeepWoodsGameRunning + ")", StardewModdingAPI.LogLevel.Trace); if (isDeepWoodsGameRunning) { return; } if (Game1.IsMasterGame) { DeepWoodsSettings.DoLoad(); DeepWoodsManager.Add(); EasterEggFunctions.RestoreAllEasterEggsInGame(); WoodsObelisk.RestoreAllInGame(); isDeepWoodsGameRunning = true; } else { DeepWoodsManager.Remove(); ModEntry.SendMessage(MessageId.RequestMetadata, Game1.MasterPlayer.UniqueMultiplayerID); } }