diff --git a/GeneralMods/HappyBirthday/BirthdayMessages.cs b/GeneralMods/HappyBirthday/BirthdayMessages.cs index 145c76a5..63ab9804 100644 --- a/GeneralMods/HappyBirthday/BirthdayMessages.cs +++ b/GeneralMods/HappyBirthday/BirthdayMessages.cs @@ -2034,6 +2034,7 @@ namespace Omegasis.HappyBirthday public static string GetTranslatedString(string key) { StardewValley.LocalizedContentManager.LanguageCode code = HappyBirthday.Config.translationInfo.TranslationCodes[HappyBirthday.Config.translationInfo.CurrentTranslation]; + if (string.IsNullOrEmpty(key)) return ""; string value = HappyBirthday.Instance.messages.translatedStrings[code][key]; if (string.IsNullOrEmpty(value)) { diff --git a/GeneralMods/HappyBirthday/HappyBirthday.cs b/GeneralMods/HappyBirthday/HappyBirthday.cs index 425f2c2b..1f5218e9 100644 --- a/GeneralMods/HappyBirthday/HappyBirthday.cs +++ b/GeneralMods/HappyBirthday/HappyBirthday.cs @@ -115,69 +115,57 @@ namespace Omegasis.HappyBirthday { if (e.NewLocation == Game1.getLocationFromName("CommunityCenter")) { - EventHelper eve=this.eventManager.getEvent("CommunityCenterBirthday"); - eve.startEventAtLocationifPossible(); + this.eventManager.startEventAtLocationIfPossible("CommunityCenterBirthday"); } if (e.NewLocation == Game1.getLocationFromName("Trailer")) { - EventHelper eve = this.eventManager.getEvent("BirthdayDating:Penny"); - eve.startEventAtLocationifPossible(); + this.eventManager.startEventAtLocationIfPossible("BirthdayDating:Penny"); } if (e.NewLocation == Game1.getLocationFromName("Trailer_Big")) { - EventHelper eve = this.eventManager.getEvent("BirthdayDating:Penny_BigHome"); - eve.startEventAtLocationifPossible(); + this.eventManager.startEventAtLocationIfPossible("BirthdayDating:Penny_BigHome"); } if (e.NewLocation == Game1.getLocationFromName("ScienceHouse")) { - EventHelper eve = this.eventManager.getEvent("BirthdayDating:Maru"); - eve.startEventAtLocationifPossible(); - EventHelper eve2 = this.eventManager.getEvent("BirthdayDating:Sebastian"); - eve2.startEventAtLocationifPossible(); + this.eventManager.startEventAtLocationIfPossible("BirthdayDating:Maru"); + this.eventManager.startEventAtLocationIfPossible("BirthdayDating:Sebastian"); } if (e.NewLocation == Game1.getLocationFromName("LeahHouse")) { - EventHelper eve = this.eventManager.getEvent("BirthdayDating:Leah"); - eve.startEventAtLocationifPossible(); + this.eventManager.startEventAtLocationIfPossible("BirthdayDating:Leah"); } if (e.NewLocation == Game1.getLocationFromName("SeedShop")) { - EventHelper eve = this.eventManager.getEvent("BirthdayDating:Abigail"); - eve.startEventAtLocationifPossible(); + this.eventManager.startEventAtLocationIfPossible("BirthdayDating:Abigail"); } if (e.NewLocation == Game1.getLocationFromName("HaleyHouse")) { - EventHelper eve = this.eventManager.getEvent("BirthdayDating:Emily"); - eve.startEventAtLocationifPossible(); - EventHelper eve2 = this.eventManager.getEvent("BirthdayDating:Haley"); - eve2.startEventAtLocationifPossible(); + this.eventManager.startEventAtLocationIfPossible("BirthdayDating:Emily"); + this.eventManager.startEventAtLocationIfPossible("BirthdayDating:Haley"); } if (e.NewLocation == Game1.getLocationFromName("HarveyRoom")) { - EventHelper eve = this.eventManager.getEvent("BirthdayDating:Harvey"); - eve.startEventAtLocationifPossible(); + this.eventManager.startEventAtLocationIfPossible("BirthdayDating:Harvey"); } if (e.NewLocation == Game1.getLocationFromName("ElliottHouse")) { - EventHelper eve = this.eventManager.getEvent("BirthdayDating:Elliott"); - eve.startEventAtLocationifPossible(); + this.eventManager.startEventAtLocationIfPossible("BirthdayDating:Elliott"); } if (e.NewLocation == Game1.getLocationFromName("SamHouse")) { - EventHelper eve = this.eventManager.getEvent("BirthdayDating:Sam"); - eve.startEventAtLocationifPossible(); + this.eventManager.startEventAtLocationIfPossible("BirthdayDating:Sam"); } if (e.NewLocation == Game1.getLocationFromName("JoshHouse")) { - EventHelper eve = this.eventManager.getEvent("BirthdayDating:Alex"); - eve.startEventAtLocationifPossible(); + this.eventManager.startEventAtLocationIfPossible("BirthdayDating:Alex"); } if (e.NewLocation == Game1.getLocationFromName("AnimalShop")) { - EventHelper eve = this.eventManager.getEvent("BirthdayDating:Shane"); - eve.startEventAtLocationifPossible(); + this.eventManager.startEventAtLocationIfPossible("BirthdayDating:Shane"); + } + } private void GameLoop_GameLaunched(object sender, GameLaunchedEventArgs e) @@ -601,58 +589,6 @@ namespace Omegasis.HappyBirthday this.eventManager.addEvent(birthdayDating_Sam); this.eventManager.addEvent(birthdayDating_Alex); this.eventManager.addEvent(birthdayDating_Shane); - if (Game1.player.eventsSeen.Contains(communityCenterJunimoBirthday.getEventID())) - { - Game1.player.eventsSeen.Remove(communityCenterJunimoBirthday.getEventID()); //Repeat the event. - } - if (Game1.player.eventsSeen.Contains(birthdayDating_Penny.getEventID())) - { - Game1.player.eventsSeen.Remove(birthdayDating_Penny.getEventID()); //Repeat the event. - } - if (Game1.player.eventsSeen.Contains(birthdayDating_Maru.getEventID())) - { - Game1.player.eventsSeen.Remove(birthdayDating_Maru.getEventID()); //Repeat the event. - } - if (Game1.player.eventsSeen.Contains(birthdayDating_Sebastian.getEventID())) - { - Game1.player.eventsSeen.Remove(birthdayDating_Sebastian.getEventID()); //Repeat the event. - } - if (Game1.player.eventsSeen.Contains(birthdayDating_Leah.getEventID())) - { - Game1.player.eventsSeen.Remove(birthdayDating_Leah.getEventID()); //Repeat the event. - } - if (Game1.player.eventsSeen.Contains(birthdayDating_Abigail.getEventID())) - { - Game1.player.eventsSeen.Remove(birthdayDating_Abigail.getEventID()); //Repeat the event. - } - if (Game1.player.eventsSeen.Contains(birthdayDating_Emily.getEventID())) - { - Game1.player.eventsSeen.Remove(birthdayDating_Emily.getEventID()); //Repeat the event. - } - if (Game1.player.eventsSeen.Contains(birthdayDating_Haley.getEventID())) - { - Game1.player.eventsSeen.Remove(birthdayDating_Haley.getEventID()); //Repeat the event. - } - if (Game1.player.eventsSeen.Contains(birthdayDating_Harvey.getEventID())) - { - Game1.player.eventsSeen.Remove(birthdayDating_Harvey.getEventID()); //Repeat the event. - } - if (Game1.player.eventsSeen.Contains(birthdayDating_Elliott.getEventID())) - { - Game1.player.eventsSeen.Remove(birthdayDating_Elliott.getEventID()); //Repeat the event. - } - if (Game1.player.eventsSeen.Contains(birthdayDating_Sam.getEventID())) - { - Game1.player.eventsSeen.Remove(birthdayDating_Sam.getEventID()); //Repeat the event. - } - if (Game1.player.eventsSeen.Contains(birthdayDating_Alex.getEventID())) - { - Game1.player.eventsSeen.Remove(birthdayDating_Alex.getEventID()); //Repeat the event. - } - if (Game1.player.eventsSeen.Contains(birthdayDating_Shane.getEventID())) - { - Game1.player.eventsSeen.Remove(birthdayDating_Shane.getEventID()); //Repeat the event. - } } /// Raised before the game begins writes data to the save file (except the initial save creation). @@ -683,6 +619,13 @@ namespace Omegasis.HappyBirthday } return; } + else + { + if (this.eventManager != null) + { + this.eventManager.update(); + } + } if (!this.HasChosenBirthday && Game1.activeClickableMenu == null && Game1.player.Name.ToLower() != "unnamed farmhand") { diff --git a/GeneralMods/HappyBirthday/manifest.json b/GeneralMods/HappyBirthday/manifest.json index 6a20a114..c737a32d 100644 --- a/GeneralMods/HappyBirthday/manifest.json +++ b/GeneralMods/HappyBirthday/manifest.json @@ -1,7 +1,7 @@ { "Name": "Happy Birthday", "Author": "Alpha_Omegasis", - "Version": "1.10.4", + "Version": "1.10.5", "Description": "Adds the farmer's birthday to the game.", "UniqueID": "Omegasis.HappyBirthday", "EntryDll": "HappyBirthday.dll", diff --git a/GeneralMods/SaveAnywhere/Framework/NewSaveGameMenu.cs b/GeneralMods/SaveAnywhere/Framework/NewSaveGameMenu.cs index 6a5523c1..803bf2dd 100644 --- a/GeneralMods/SaveAnywhere/Framework/NewSaveGameMenu.cs +++ b/GeneralMods/SaveAnywhere/Framework/NewSaveGameMenu.cs @@ -94,7 +94,7 @@ namespace Omegasis.SaveAnywhere.Framework } else { - NewSaveGameMenu.saveClientOptions(); + NewSaveGameMenuV2.saveClientOptions(); this.complete(); } } @@ -118,7 +118,7 @@ namespace Omegasis.SaveAnywhere.Framework } } - private static void saveClientOptions() + public static void saveClientOptions() { StartupPreferences startupPreferences = new StartupPreferences(); int num1 = 0; diff --git a/GeneralMods/SaveAnywhere/Framework/NewSaveGameMenuV2.cs b/GeneralMods/SaveAnywhere/Framework/NewSaveGameMenuV2.cs new file mode 100644 index 00000000..ee7718a1 --- /dev/null +++ b/GeneralMods/SaveAnywhere/Framework/NewSaveGameMenuV2.cs @@ -0,0 +1,260 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using StardewValley; +using StardewValley.BellsAndWhistles; +using StardewValley.Menus; + +namespace Omegasis.SaveAnywhere.Framework +{ + /// + /// This is a modified version of the stardew valley save game menu made by ConcernedApe with modifications made by myself.. All rights go to him. + /// + public class NewSaveGameMenuV2:IClickableMenu + { + public event EventHandler SaveComplete; + + private int completePause = -1; + private int margin = 500; + private StringBuilder _stringBuilder = new StringBuilder(); + private float _ellipsisDelay = 0.5f; + private Stopwatch stopwatch; + private IEnumerator loader; + public bool quit; + public bool hasDrawn; + private SparklingText saveText; + private int _ellipsisCount; + protected bool _hasSentFarmhandData; + + public Multiplayer multiplayer; + + public NewSaveGameMenuV2() + { + this.saveText = new SparklingText(Game1.dialogueFont, Game1.content.LoadString("Strings\\StringsFromCSFiles:SaveGameMenu.cs.11378"), Color.LimeGreen, Color.Black * (1f / 1000f), false, 0.1, 1500, 32, 500, 1f); + this._hasSentFarmhandData = false; + + Type type = typeof(Game1); + FieldInfo info = type.GetField("multiplayer", BindingFlags.NonPublic | BindingFlags.Static); + this.multiplayer = (Multiplayer)info.GetValue(StardewValley.Program.gamePtr); + + //this.multiplayer = SaveAnywhere.ModHelper.Reflection.GetField(, "multiplayer", true).GetValue(); + } + + public override void receiveRightClick(int x, int y, bool playSound = true) + { + } + + public void complete() + { + Game1.playSound("money"); + this.completePause = 1500; + this.loader = (IEnumerator)null; + Game1.game1.IsSaving = false; + if (!Game1.IsMasterGame || Game1.newDaySync == null || Game1.newDaySync.hasSaved()) + return; + Game1.newDaySync.flagSaved(); + + SaveComplete.Invoke(this, EventArgs.Empty); + } + + public override bool readyToClose() + { + return false; + } + + public override void update(GameTime time) + { + if (this.quit) + { + if (!Game1.activeClickableMenu.Equals((object)this) || !Game1.PollForEndOfNewDaySync()) + return; + Game1.exitActiveMenu(); + } + else + { + base.update(time); + if (Game1.client != null && Game1.client.timedOut) + { + this.quit = true; + if (!Game1.activeClickableMenu.Equals((object)this)) + return; + Game1.exitActiveMenu(); + } + else + { + double ellipsisDelay = (double)this._ellipsisDelay; + TimeSpan elapsedGameTime = time.ElapsedGameTime; + double totalSeconds = elapsedGameTime.TotalSeconds; + this._ellipsisDelay = (float)(ellipsisDelay - totalSeconds); + if ((double)this._ellipsisDelay <= 0.0) + { + this._ellipsisDelay += 0.75f; + ++this._ellipsisCount; + if (this._ellipsisCount > 3) + this._ellipsisCount = 1; + } + if (this.loader != null) + { + this.loader.MoveNext(); + if (this.loader.Current >= 100) + { + int margin = this.margin; + elapsedGameTime = time.ElapsedGameTime; + int milliseconds = elapsedGameTime.Milliseconds; + this.margin = margin - milliseconds; + if (this.margin <= 0) + this.complete(); + } + } + else if (this.hasDrawn && this.completePause == -1) + { + if (Game1.IsMasterGame) + { + if (Game1.saveOnNewDay) + { + Game1.player.team.endOfNightStatus.UpdateState("ready"); + if (Game1.newDaySync != null) + { + if (Game1.newDaySync.readyForSave()) + { + this.multiplayer.saveFarmhands(); + Game1.game1.IsSaving = true; + this.loader = SaveGame.Save(); + } + } + else + { + this.multiplayer.saveFarmhands(); + Game1.game1.IsSaving = true; + this.loader = SaveGame.Save(); + } + } + else + { + this.margin = -1; + if (Game1.newDaySync != null) + { + if (Game1.newDaySync.readyForSave()) + { + Game1.game1.IsSaving = true; + this.complete(); + } + } + else + { + this.complete(); + } + } + } + else + { + if (!this._hasSentFarmhandData) + { + this._hasSentFarmhandData = true; + this.multiplayer.sendFarmhand(); + } + this.multiplayer.UpdateLate(false); + Program.sdk.Update(); + this.multiplayer.UpdateEarly(); + if (Game1.newDaySync != null) + { + Game1.newDaySync.readyForSave(); + } + Game1.player.team.endOfNightStatus.UpdateState("ready"); + if (Game1.newDaySync != null) + { + if (Game1.newDaySync.hasSaved()) + { + //SaveGameMenu.saveClientOptions(); + this.complete(); + } + } + else + { + this.complete(); + } + } + } + if (this.completePause < 0) + return; + int completePause = this.completePause; + elapsedGameTime = time.ElapsedGameTime; + int milliseconds1 = elapsedGameTime.Milliseconds; + this.completePause = completePause - milliseconds1; + this.saveText.update(time); + if (this.completePause >= 0) + return; + this.quit = true; + this.completePause = -9999; + } + } + } + + public static void saveClientOptions() + { + StartupPreferences startupPreferences = new StartupPreferences(); + startupPreferences.loadPreferences(false, true); + startupPreferences.clientOptions = Game1.options; + startupPreferences.savePreferences(false); + } + + public override void draw(SpriteBatch b) + { + base.draw(b); + Vector2 vector2 = Utility.makeSafe(new Vector2(64f, (float)(Game1.viewport.Height - 64)), new Vector2(64f, 64f)); + bool flag = false; + if (this.completePause >= 0) + { + if (Game1.saveOnNewDay) + this.saveText.draw(b, vector2); + } + else if (this.margin < 0 || Game1.IsClient) + { + if (Game1.IsMultiplayer) + { + this._stringBuilder.Clear(); + this._stringBuilder.Append(Game1.content.LoadString("Strings\\UI:ReadyCheck", (object)Game1.newDaySync.numReadyForSave(), (object)Game1.getOnlineFarmers().Count())); + for (int index = 0; index < this._ellipsisCount; ++index) + this._stringBuilder.Append("."); + b.DrawString(Game1.dialogueFont, this._stringBuilder, vector2, Color.White); + flag = true; + } + } + else if (!Game1.IsMultiplayer) + { + this._stringBuilder.Clear(); + this._stringBuilder.Append(Game1.content.LoadString("Strings\\StringsFromCSFiles:SaveGameMenu.cs.11381")); + for (int index = 0; index < this._ellipsisCount; ++index) + this._stringBuilder.Append("."); + b.DrawString(Game1.dialogueFont, this._stringBuilder, vector2, Color.White); + } + else + { + this._stringBuilder.Clear(); + this._stringBuilder.Append(Game1.content.LoadString("Strings\\UI:ReadyCheck", (object)Game1.newDaySync.numReadyForSave(), (object)Game1.getOnlineFarmers().Count())); + for (int index = 0; index < this._ellipsisCount; ++index) + this._stringBuilder.Append("."); + b.DrawString(Game1.dialogueFont, this._stringBuilder, vector2, Color.White); + flag = true; + } + if (this.completePause > 0) + flag = false; + if (Game1.newDaySync != null && Game1.newDaySync.hasSaved()) + flag = false; + if (Game1.IsMultiplayer & flag && Game1.options.showMPEndOfNightReadyStatus) + Game1.player.team.endOfNightStatus.Draw(b, vector2 + new Vector2(0.0f, -32f), 4f, 0.99f, PlayerStatusList.HorizontalAlignment.Left, PlayerStatusList.VerticalAlignment.Bottom); + this.hasDrawn = true; + } + + public void Dispose() + { + Game1.game1.IsSaving = false; + } + } +} diff --git a/GeneralMods/SaveAnywhere/Framework/NewShippingMenu.cs b/GeneralMods/SaveAnywhere/Framework/NewShippingMenu.cs index d66b3681..9a5f8027 100644 --- a/GeneralMods/SaveAnywhere/Framework/NewShippingMenu.cs +++ b/GeneralMods/SaveAnywhere/Framework/NewShippingMenu.cs @@ -26,6 +26,40 @@ namespace Omegasis.SaveAnywhere.Framework : base(items) { this.SavedYet = reflection.GetField(this, "savedYet"); + + + NetCollection shippingBin = Game1.getFarm().getShippingBin(Game1.player); + if (Game1.player.useSeparateWallets || !Game1.player.useSeparateWallets && Game1.player.IsMainPlayer) + { + int num = 0; + foreach (Item obj in shippingBin) + { + if (obj is Object) + num += (obj as Object).sellToStorePrice(-1L) * obj.Stack; + } + Game1.player.Money += num; + Game1.getFarm().getShippingBin(Game1.player).Clear(); + } + + if (Game1.player.useSeparateWallets && Game1.player.IsMainPlayer) + { + foreach (Farmer allFarmhand in Game1.getAllFarmhands()) + { + if (!allFarmhand.isActive() && !allFarmhand.isUnclaimedFarmhand) + { + int num = 0; + foreach (Item obj in Game1.getFarm().getShippingBin(allFarmhand)) + { + if (obj is Object) + num += (obj as Object).sellToStorePrice(allFarmhand.UniqueMultiplayerID) * obj.Stack; + } + Game1.player.team.AddIndividualMoney(allFarmhand, num); + Game1.getFarm().getShippingBin(allFarmhand).Clear(); + } + } + } + + } /// Overrides some base functionality of the shipping menu to enable proper closing. diff --git a/GeneralMods/SaveAnywhere/Framework/NewShippingMenuV2.cs b/GeneralMods/SaveAnywhere/Framework/NewShippingMenuV2.cs new file mode 100644 index 00000000..ef8aa7e2 --- /dev/null +++ b/GeneralMods/SaveAnywhere/Framework/NewShippingMenuV2.cs @@ -0,0 +1,832 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using Netcode; +using StardewValley; +using StardewValley.BellsAndWhistles; +using StardewValley.Menus; + +namespace Omegasis.SaveAnywhere.Framework +{ + /// + /// The stardew valley shipping menu that has been stripped of date changing features and the default saving menu. + /// + /// Credits for the original code go to ConcernedApe with the edits made by me Omegasis. + /// + public class NewShippingMenuV2 : IClickableMenu + { + public int itemsPerCategoryPage = 9; + public int currentPage = -1; + public List categories = new List(); + private List categoryTotals = new List(); + private List categoryDials = new List(); + private Dictionary itemValues = new Dictionary(); + private List> categoryItems = new List>(); + private int introTimer = 3500; + private int moonShake = -1; + public List animations = new List(); + public const int region_okbutton = 101; + public const int region_forwardButton = 102; + public const int region_backButton = 103; + public const int farming_category = 0; + public const int foraging_category = 1; + public const int fishing_category = 2; + public const int mining_category = 3; + public const int other_category = 4; + public const int total_category = 5; + public const int timePerIntroCategory = 500; + public const int outroFadeTime = 800; + public const int smokeRate = 100; + public const int categorylabelHeight = 25; + public int currentTab; + public ClickableTextureComponent okButton; + public ClickableTextureComponent forwardButton; + public ClickableTextureComponent backButton; + private int categoryLabelsWidth; + private int plusButtonWidth; + private int itemSlotWidth; + private int itemAndPlusButtonWidth; + private int totalWidth; + private int centerX; + private int centerY; + private int outroFadeTimer; + private int outroPauseBeforeDateChange; + private int finalOutroTimer; + private int smokeTimer; + private int dayPlaqueY; + private int timesPokedMoon; + private float weatherX; + private bool outro; + private bool newDayPlaque; + private bool savedYet; + protected bool _hasFinished; + + + + public NewShippingMenuV2(IList items) + : base(0, 0, Game1.viewport.Width, Game1.viewport.Height, false) + { + Game1.player.team.endOfNightStatus.UpdateState("shipment"); + this.parseItems(items); + if (!Game1.wasRainingYesterday) + Game1.changeMusicTrack(Game1.currentSeason.Equals("summer") ? "nightTime" : "none", false, Game1.MusicContext.Default); + this.categoryLabelsWidth = 512; + this.plusButtonWidth = 40; + this.itemSlotWidth = 96; + this.itemAndPlusButtonWidth = this.plusButtonWidth + this.itemSlotWidth + 8; + this.totalWidth = this.categoryLabelsWidth + this.itemAndPlusButtonWidth; + this.centerX = Game1.viewport.Width / 2; + this.centerY = Game1.viewport.Height / 2; + this._hasFinished = false; + int num = -1; + for (int index = 0; index < 6; ++index) + { + List categories = this.categories; + ClickableTextureComponent textureComponent = new ClickableTextureComponent("", new Rectangle(this.centerX + this.totalWidth / 2 - this.plusButtonWidth, this.centerY - 300 + index * 27 * 4, this.plusButtonWidth, 44), "", this.getCategoryName(index), Game1.mouseCursors, new Rectangle(392, 361, 10, 11), 4f, false); + textureComponent.visible = index < 5 && this.categoryItems[index].Count > 0; + textureComponent.myID = index; + textureComponent.downNeighborID = index < 4 ? index + 1 : 101; + textureComponent.upNeighborID = index > 0 ? num : -1; + textureComponent.upNeighborImmutable = true; + categories.Add(textureComponent); + num = index >= 5 || this.categoryItems[index].Count <= 0 ? num : index; + } + this.dayPlaqueY = this.categories[0].bounds.Y - 128; + Rectangle bounds = new Rectangle(this.centerX + this.totalWidth / 2 - this.itemAndPlusButtonWidth + 32, this.centerY + 300 - 64, 64, 64); + ClickableTextureComponent textureComponent1 = new ClickableTextureComponent(Game1.content.LoadString("Strings\\StringsFromCSFiles:ShippingMenu.cs.11382"), bounds, (string)null, Game1.content.LoadString("Strings\\StringsFromCSFiles:ShippingMenu.cs.11382"), Game1.mouseCursors, new Rectangle(128, 256, 64, 64), 1f, false); + textureComponent1.myID = 101; + textureComponent1.upNeighborID = num; + this.okButton = textureComponent1; + if (Game1.options.gamepadControls) + { + Mouse.SetPosition(bounds.Center.X, bounds.Center.Y); + Game1.InvalidateOldMouseMovement(); + Game1.lastCursorMotionWasMouse = false; + } + ClickableTextureComponent textureComponent2 = new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen + 32, this.yPositionOnScreen + this.height - 64, 48, 44), (string)null, "", Game1.mouseCursors, new Rectangle(352, 495, 12, 11), 4f, false); + textureComponent2.myID = 103; + textureComponent2.rightNeighborID = -7777; + this.backButton = textureComponent2; + ClickableTextureComponent textureComponent3 = new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen + this.width - 32 - 48, this.yPositionOnScreen + this.height - 64, 48, 44), (string)null, "", Game1.mouseCursors, new Rectangle(365, 495, 12, 11), 4f, false); + textureComponent3.myID = 102; + textureComponent3.leftNeighborID = 103; + this.forwardButton = textureComponent3; + if (Game1.dayOfMonth == 25 && Game1.currentSeason.Equals("winter")) + this.animations.Add(new TemporaryAnimatedSprite("LooseSprites\\Cursors", new Rectangle(640, 800, 32, 16), 80f, 2, 1000, new Vector2((float)Game1.viewport.Width, (float)Game1.random.Next(0, 200)), false, false, 0.01f, 0.0f, Color.White, 4f, 0.0f, 0.0f, 0.0f, true) + { + motion = new Vector2(-4f, 0.0f), + delayBeforeAnimationStart = 3000 + }); + Game1.stats.checkForShippingAchievements(); + if (!Game1.player.achievements.Contains(34) && Utility.hasFarmerShippedAllItems()) + Game1.getAchievement(34, true); + this.RepositionItems(); + this.populateClickableComponentList(); + if (!Game1.options.SnappyMenus) + return; + this.snapToDefaultClickableComponent(); + } + + public void RepositionItems() + { + this.centerX = Game1.viewport.Width / 2; + this.centerY = Game1.viewport.Height / 2; + for (int index = 0; index < 6; ++index) + this.categories[index].bounds = new Rectangle(this.centerX + this.totalWidth / 2 - this.plusButtonWidth, this.centerY - 300 + index * 27 * 4, this.plusButtonWidth, 44); + this.dayPlaqueY = this.categories[0].bounds.Y - 128; + if (this.dayPlaqueY < 0) + this.dayPlaqueY = -64; + this.backButton.bounds.X = this.xPositionOnScreen + 32; + this.backButton.bounds.Y = this.yPositionOnScreen + this.height - 64; + this.forwardButton.bounds.X = this.xPositionOnScreen + this.width - 32 - 48; + this.forwardButton.bounds.Y = this.yPositionOnScreen + this.height - 64; + this.okButton.bounds = new Rectangle(this.centerX + this.totalWidth / 2 - this.itemAndPlusButtonWidth + 32, this.centerY + 300 - 64, 64, 64); + this.itemsPerCategoryPage = (int)((double)(this.yPositionOnScreen + this.height - 64 - (this.yPositionOnScreen + 32)) / 68.0); + if (this.currentPage < 0) + return; + this.currentTab = Utility.Clamp(this.currentTab, 0, (this.categoryItems[this.currentPage].Count - 1) / this.itemsPerCategoryPage); + } + + protected override void customSnapBehavior(int direction, int oldRegion, int oldID) + { + if (oldID != 103 || direction != 1 || !this.showForwardButton()) + return; + this.currentlySnappedComponent = this.getComponentWithID(102); + this.snapCursorToCurrentSnappedComponent(); + } + + public override void snapToDefaultClickableComponent() + { + if (this.currentPage != -1) + this.currentlySnappedComponent = this.getComponentWithID(103); + else + this.currentlySnappedComponent = this.getComponentWithID(101); + this.snapCursorToCurrentSnappedComponent(); + } + + public void parseItems(IList items) + { + Utility.consolidateStacks(items); + for (int index = 0; index < 6; ++index) + { + this.categoryItems.Add(new List()); + this.categoryTotals.Add(0); + this.categoryDials.Add(new MoneyDial(7, index == 5)); + } + foreach (Item index in (IEnumerable)items) + { + if (index is StardewValley.Object) + { + StardewValley.Object o = index as StardewValley.Object; + int categoryIndexForObject = this.getCategoryIndexForObject(o); + this.categoryItems[categoryIndexForObject].Add((Item)o); + int num = o.sellToStorePrice(-1L) * o.Stack; + this.categoryTotals[categoryIndexForObject] += num; + this.itemValues[index] = num; + Game1.stats.itemsShipped += (uint)o.Stack; + if (o.Category == -75 || o.Category == -79) + Game1.stats.CropsShipped += (uint)o.Stack; + if (o.countsForShippedCollection()) + Game1.player.shippedBasic(o.ParentSheetIndex, o.Stack); + } + } + for (int index = 0; index < 5; ++index) + { + this.categoryTotals[5] += this.categoryTotals[index]; + this.categoryItems[5].AddRange((IEnumerable)this.categoryItems[index]); + this.categoryDials[index].currentValue = this.categoryTotals[index]; + this.categoryDials[index].previousTargetValue = this.categoryDials[index].currentValue; + } + this.categoryDials[5].currentValue = this.categoryTotals[5]; + Game1.setRichPresence("earnings", (object)this.categoryTotals[5]); + } + + public int getCategoryIndexForObject(StardewValley.Object o) + { + switch ((o.ParentSheetIndex)) + { + case 296: + case 396: + case 402: + case 406: + case 410: + case 414: + case 418: + return 1; + default: + switch (o.Category) + { + case -81: + case -27: + case -23: + return 1; + case -80: + case -79: + case -75: + case -26: + case -14: + case -6: + case -5: + return 0; + case -20: + case -4: + return 2; + case -15: + case -12: + case -2: + return 3; + default: + return 4; + } + } + } + + public string getCategoryName(int index) + { + switch (index) + { + case 0: + return Game1.content.LoadString("Strings\\StringsFromCSFiles:ShippingMenu.cs.11389"); + case 1: + return Game1.content.LoadString("Strings\\StringsFromCSFiles:ShippingMenu.cs.11390"); + case 2: + return Game1.content.LoadString("Strings\\StringsFromCSFiles:ShippingMenu.cs.11391"); + case 3: + return Game1.content.LoadString("Strings\\StringsFromCSFiles:ShippingMenu.cs.11392"); + case 4: + return Game1.content.LoadString("Strings\\StringsFromCSFiles:ShippingMenu.cs.11393"); + case 5: + return Game1.content.LoadString("Strings\\StringsFromCSFiles:ShippingMenu.cs.11394"); + default: + return ""; + } + } + + public override void update(GameTime time) + { + base.update(time); + if (this._hasFinished) + { + //if (!Game1.PollForEndOfNewDaySync()) + //return; + this.shipItems(); + + this.exitThisMenu(false); + } + else + { + /* + if (this.saveGameMenu != null) + { + this.saveGameMenu.update(time); + if (this.saveGameMenu.quit) + { + this.saveGameMenu = (SaveGameMenu)null; + this.savedYet = true; + } + } + */ + this.weatherX += (float)time.ElapsedGameTime.Milliseconds * 0.03f; + for (int index = this.animations.Count - 1; index >= 0; --index) + { + if (this.animations[index].update(time)) + this.animations.RemoveAt(index); + } + if (this.outro) + { + //this._hasFinished = true; + //return; + + if (this.outroFadeTimer > 0) + this.outroFadeTimer -= time.ElapsedGameTime.Milliseconds; + else if (this.outroFadeTimer <= 0 && this.dayPlaqueY < this.centerY - 64) + { + if (this.animations.Count > 0) + this.animations.Clear(); + this.dayPlaqueY += (int)Math.Ceiling((double)time.ElapsedGameTime.Milliseconds * 0.349999994039536); + if (this.dayPlaqueY >= this.centerY - 64) + this.outroPauseBeforeDateChange = 700; + } + else if (this.outroPauseBeforeDateChange > 0) + { + this.outroPauseBeforeDateChange -= time.ElapsedGameTime.Milliseconds; + if (this.outroPauseBeforeDateChange <= 0) + { + //this.newDayPlaque = true; + Game1.playSound("newRecipe"); + + /* + if (!Game1.currentSeason.Equals("winter")) + DelayedAction.playSoundAfterDelay(Game1.isRaining ? "rainsound" : "rooster", 1500, (GameLocation)null, -1); + */ + this.finalOutroTimer = 2000; + this.animations.Clear(); + if (!this.savedYet) + { + this.savedYet = true; + /* + if (this.saveGameMenu != null) + return; + this.saveGameMenu = new SaveGameMenu(); + return; + */ + } + } + } + else if (this.finalOutroTimer > 0 && this.savedYet) + { + this.finalOutroTimer -= time.ElapsedGameTime.Milliseconds; + if (this.finalOutroTimer <= 0) + this._hasFinished = true; + } + } + if (this.introTimer >= 0) + { + int introTimer = this.introTimer; + this.introTimer -= time.ElapsedGameTime.Milliseconds * (Game1.oldMouseState.LeftButton == ButtonState.Pressed ? 3 : 1); + if (introTimer % 500 < this.introTimer % 500 && this.introTimer <= 3000) + { + int which = 4 - this.introTimer / 500; + if (which < 6 && which > -1) + { + if (this.categoryItems[which].Count > 0) + { + Game1.playSound(this.getCategorySound(which)); + this.categoryDials[which].currentValue = 0; + this.categoryDials[which].previousTargetValue = 0; + } + else + Game1.playSound("stoneStep"); + } + } + if (this.introTimer < 0) + { + if (Game1.options.SnappyMenus) + this.snapToDefaultClickableComponent(); + Game1.playSound("money"); + this.categoryDials[5].currentValue = 0; + this.categoryDials[5].previousTargetValue = 0; + } + } + else if (Game1.dayOfMonth != 28 && !this.outro) + { + if (!Game1.wasRainingYesterday) + { + Vector2 position = new Vector2((float)Game1.viewport.Width, (float)Game1.random.Next(200)); + Rectangle sourceRect = new Rectangle(640, 752, 16, 16); + int num = Game1.random.Next(1, 4); + if (Game1.random.NextDouble() < 0.001) + { + bool flipped = Game1.random.NextDouble() < 0.5; + if (Game1.random.NextDouble() < 0.5) + this.animations.Add(new TemporaryAnimatedSprite("LooseSprites\\Cursors", new Rectangle(640, 826, 16, 8), 40f, 4, 0, new Vector2((float)Game1.random.Next(this.centerX * 2), (float)Game1.random.Next(this.centerY)), false, flipped) + { + rotation = 3.141593f, + scale = 4f, + motion = new Vector2(flipped ? -8f : 8f, 8f), + local = true + }); + else + this.animations.Add(new TemporaryAnimatedSprite("LooseSprites\\Cursors", new Rectangle(258, 1680, 16, 16), 40f, 4, 0, new Vector2((float)Game1.random.Next(this.centerX * 2), (float)Game1.random.Next(this.centerY)), false, flipped) + { + scale = 4f, + motion = new Vector2(flipped ? -8f : 8f, 8f), + local = true + }); + } + else if (Game1.random.NextDouble() < 0.0002) + { + position = new Vector2((float)Game1.viewport.Width, (float)Game1.random.Next(4, 256)); + this.animations.Add(new TemporaryAnimatedSprite("", new Rectangle(0, 0, 1, 1), 9999f, 1, 10000, position, false, false, 0.01f, 0.0f, Color.White * (0.25f + (float)Game1.random.NextDouble()), 4f, 0.0f, 0.0f, 0.0f, true) + { + motion = new Vector2(-0.25f, 0.0f) + }); + } + else if (Game1.random.NextDouble() < 5E-05) + { + position = new Vector2((float)Game1.viewport.Width, (float)(Game1.viewport.Height - 192)); + for (int index = 0; index < num; ++index) + { + this.animations.Add(new TemporaryAnimatedSprite("LooseSprites\\Cursors", sourceRect, (float)Game1.random.Next(60, 101), 4, 100, position + new Vector2((float)((index + 1) * Game1.random.Next(15, 18)), (float)((index + 1) * -20)), false, false, 0.01f, 0.0f, Color.Black, 4f, 0.0f, 0.0f, 0.0f, true) + { + motion = new Vector2(-1f, 0.0f) + }); + this.animations.Add(new TemporaryAnimatedSprite("LooseSprites\\Cursors", sourceRect, (float)Game1.random.Next(60, 101), 4, 100, position + new Vector2((float)((index + 1) * Game1.random.Next(15, 18)), (float)((index + 1) * 20)), false, false, 0.01f, 0.0f, Color.Black, 4f, 0.0f, 0.0f, 0.0f, true) + { + motion = new Vector2(-1f, 0.0f) + }); + } + } + else if (Game1.random.NextDouble() < 1E-05) + { + sourceRect = new Rectangle(640, 784, 16, 16); + this.animations.Add(new TemporaryAnimatedSprite("LooseSprites\\Cursors", sourceRect, 75f, 4, 1000, position, false, false, 0.01f, 0.0f, Color.White, 4f, 0.0f, 0.0f, 0.0f, true) + { + motion = new Vector2(-3f, 0.0f), + yPeriodic = true, + yPeriodicLoopTime = 1000f, + yPeriodicRange = 8f, + shakeIntensity = 0.5f + }); + } + } + this.smokeTimer -= time.ElapsedGameTime.Milliseconds; + if (this.smokeTimer <= 0) + { + this.smokeTimer = 50; + this.animations.Add(new TemporaryAnimatedSprite("LooseSprites\\Cursors", new Rectangle(684, 1075, 1, 1), 1000f, 1, 1000, new Vector2(188f, (float)(Game1.viewport.Height - 128 + 20)), false, false) + { + color = Game1.wasRainingYesterday ? Color.SlateGray : Color.White, + scale = 4f, + scaleChange = 0.0f, + alphaFade = 1f / 400f, + motion = new Vector2(0.0f, (float)((double)-Game1.random.Next(25, 75) / 100.0 / 4.0)), + acceleration = new Vector2(-1f / 1000f, 0.0f) + }); + } + } + if (this.moonShake <= 0) + return; + this.moonShake -= time.ElapsedGameTime.Milliseconds; + } + } + + public string getCategorySound(int which) + { + switch (which) + { + case 0: + return !(this.categoryItems[0][0] as StardewValley.Object).isAnimalProduct() ? "harvest" : "cluck"; + case 1: + return "leafrustle"; + case 2: + return "button1"; + case 3: + return "hammer"; + case 4: + return "coin"; + case 5: + return "money"; + default: + return "stoneStep"; + } + } + + public override void applyMovementKey(int direction) + { + if (!this.CanReceiveInput()) + return; + base.applyMovementKey(direction); + } + + public override void performHoverAction(int x, int y) + { + if (!this.CanReceiveInput()) + return; + base.performHoverAction(x, y); + if (this.currentPage == -1) + { + this.okButton.tryHover(x, y, 0.1f); + foreach (ClickableTextureComponent category in this.categories) + category.sourceRect.X = !category.containsPoint(x, y) ? 392 : 402; + } + else + { + this.backButton.tryHover(x, y, 0.5f); + this.forwardButton.tryHover(x, y, 0.5f); + } + } + + public bool CanReceiveInput() + { + return this.introTimer <= 0 && !this.outro; + } + + public override void receiveKeyPress(Keys key) + { + if (!this.CanReceiveInput()) + return; + if (this.introTimer <= 0 && !Game1.options.gamepadControls && (key.Equals((object)Keys.Escape) || Game1.options.doesInputListContain(Game1.options.menuButton, key))) + { + this.receiveLeftClick(this.okButton.bounds.Center.X, this.okButton.bounds.Center.Y, true); + } + else + { + if (this.introTimer > 0 || Game1.options.gamepadControls && Game1.options.doesInputListContain(Game1.options.menuButton, key)) + return; + base.receiveKeyPress(key); + } + } + + public override void receiveGamePadButton(Buttons b) + { + if (!this.CanReceiveInput()) + return; + base.receiveGamePadButton(b); + if (b == Buttons.B && this.currentPage != -1) + { + if (this.currentTab == 0) + { + if (Game1.options.SnappyMenus) + { + this.currentlySnappedComponent = this.getComponentWithID(this.currentPage); + this.snapCursorToCurrentSnappedComponent(); + } + this.currentPage = -1; + } + else + --this.currentTab; + Game1.playSound("shwip"); + } + else + { + if (b != Buttons.Start && b != Buttons.B || (this.currentPage != -1 || this.outro)) + return; + if (this.introTimer <= 0) + this.okClicked(); + else + this.introTimer -= Game1.currentGameTime.ElapsedGameTime.Milliseconds * 2; + } + } + + private void okClicked() + { + this.outro = true; + this.outroFadeTimer = 800; + Game1.playSound("bigDeSelect"); + Game1.changeMusicTrack("none", false, Game1.MusicContext.Default); + } + + public override void receiveLeftClick(int x, int y, bool playSound = true) + { + if (!this.CanReceiveInput()) + return; + if (this.outro && !this.savedYet) + { + this.savedYet = true; + //SaveGameMenu saveGameMenu = this.saveGameMenu; + } + else + { + base.receiveLeftClick(x, y, playSound); + if (this.currentPage == -1 && this.introTimer <= 0 && this.okButton.containsPoint(x, y)) + this.okClicked(); + if (this.currentPage == -1) + { + for (int index = 0; index < this.categories.Count; ++index) + { + if (this.categories[index].visible && this.categories[index].containsPoint(x, y)) + { + this.currentPage = index; + Game1.playSound("shwip"); + if (Game1.options.SnappyMenus) + { + this.currentlySnappedComponent = this.getComponentWithID(103); + this.snapCursorToCurrentSnappedComponent(); + break; + } + break; + } + } + if (Game1.dayOfMonth != 28 || this.timesPokedMoon > 10 || !new Rectangle(Game1.viewport.Width - 176, 4, 172, 172).Contains(x, y)) + return; + this.moonShake = 100; + ++this.timesPokedMoon; + if (this.timesPokedMoon > 10) + Game1.playSound("shadowDie"); + else + Game1.playSound("thudStep"); + } + else if (this.backButton.containsPoint(x, y)) + { + if (this.currentTab == 0) + { + if (Game1.options.SnappyMenus) + { + this.currentlySnappedComponent = this.getComponentWithID(this.currentPage); + this.snapCursorToCurrentSnappedComponent(); + } + this.currentPage = -1; + } + else + --this.currentTab; + Game1.playSound("shwip"); + } + else + { + if (!this.showForwardButton() || !this.forwardButton.containsPoint(x, y)) + return; + ++this.currentTab; + Game1.playSound("shwip"); + } + } + } + + public override void receiveRightClick(int x, int y, bool playSound = true) + { + } + + public bool showForwardButton() + { + return this.categoryItems[this.currentPage].Count > this.itemsPerCategoryPage * (this.currentTab + 1); + } + + public override void gameWindowSizeChanged(Rectangle oldBounds, Rectangle newBounds) + { + this.initialize(0, 0, Game1.viewport.Width, Game1.viewport.Height, false); + this.RepositionItems(); + } + + public override void draw(SpriteBatch b) + { + if (Game1.wasRainingYesterday) + { + b.Draw(Game1.mouseCursors, new Rectangle(0, 0, Game1.viewport.Width, Game1.viewport.Height), new Rectangle?(new Rectangle(639, 858, 1, 184)), Game1.currentSeason.Equals("winter") ? Color.LightSlateGray : Color.SlateGray * (float)(1.0 - (double)this.introTimer / 3500.0)); + b.Draw(Game1.mouseCursors, new Rectangle(2556, 0, Game1.viewport.Width, Game1.viewport.Height), new Rectangle?(new Rectangle(639, 858, 1, 184)), Game1.currentSeason.Equals("winter") ? Color.LightSlateGray : Color.SlateGray * (float)(1.0 - (double)this.introTimer / 3500.0)); + for (int index = -244; index < Game1.viewport.Width + 244; index += 244) + b.Draw(Game1.mouseCursors, new Vector2((float)index + (float)((double)this.weatherX / 2.0 % 244.0), 32f), new Rectangle?(new Rectangle(643, 1142, 61, 53)), Color.DarkSlateGray * 1f * (float)(1.0 - (double)this.introTimer / 3500.0), 0.0f, Vector2.Zero, 4f, SpriteEffects.None, 1f); + b.Draw(Game1.mouseCursors, new Vector2(0.0f, (float)(Game1.viewport.Height - 192)), new Rectangle?(new Rectangle(0, Game1.currentSeason.Equals("winter") ? 1034 : 737, 639, 48)), (Game1.currentSeason.Equals("winter") ? Color.White * 0.25f : new Color(30, 62, 50)) * (float)(0.5 - (double)this.introTimer / 3500.0), 0.0f, Vector2.Zero, 4f, SpriteEffects.FlipHorizontally, 1f); + b.Draw(Game1.mouseCursors, new Vector2(2556f, (float)(Game1.viewport.Height - 192)), new Rectangle?(new Rectangle(0, Game1.currentSeason.Equals("winter") ? 1034 : 737, 639, 48)), (Game1.currentSeason.Equals("winter") ? Color.White * 0.25f : new Color(30, 62, 50)) * (float)(0.5 - (double)this.introTimer / 3500.0), 0.0f, Vector2.Zero, 4f, SpriteEffects.FlipHorizontally, 1f); + b.Draw(Game1.mouseCursors, new Vector2(0.0f, (float)(Game1.viewport.Height - 128)), new Rectangle?(new Rectangle(0, Game1.currentSeason.Equals("winter") ? 1034 : 737, 639, 32)), (Game1.currentSeason.Equals("winter") ? Color.White * 0.5f : new Color(30, 62, 50)) * (float)(1.0 - (double)this.introTimer / 3500.0), 0.0f, Vector2.Zero, 4f, SpriteEffects.None, 1f); + b.Draw(Game1.mouseCursors, new Vector2(2556f, (float)(Game1.viewport.Height - 128)), new Rectangle?(new Rectangle(0, Game1.currentSeason.Equals("winter") ? 1034 : 737, 639, 32)), (Game1.currentSeason.Equals("winter") ? Color.White * 0.5f : new Color(30, 62, 50)) * (float)(1.0 - (double)this.introTimer / 3500.0), 0.0f, Vector2.Zero, 4f, SpriteEffects.None, 1f); + b.Draw(Game1.mouseCursors, new Vector2(160f, (float)(Game1.viewport.Height - 128 + 16 + 8)), new Rectangle?(new Rectangle(653, 880, 10, 10)), Color.White * (float)(1.0 - (double)this.introTimer / 3500.0), 0.0f, Vector2.Zero, 4f, SpriteEffects.None, 1f); + for (int index = -244; index < Game1.viewport.Width + 244; index += 244) + b.Draw(Game1.mouseCursors, new Vector2((float)index + this.weatherX % 244f, -32f), new Rectangle?(new Rectangle(643, 1142, 61, 53)), Color.SlateGray * 0.85f * (float)(1.0 - (double)this.introTimer / 3500.0), 0.0f, Vector2.Zero, 4f, SpriteEffects.None, 0.9f); + foreach (TemporaryAnimatedSprite animation in this.animations) + animation.draw(b, true, 0, 0, 1f); + for (int index = -244; index < Game1.viewport.Width + 244; index += 244) + b.Draw(Game1.mouseCursors, new Vector2((float)index + (float)((double)this.weatherX * 1.5 % 244.0), (float)sbyte.MinValue), new Rectangle?(new Rectangle(643, 1142, 61, 53)), Color.LightSlateGray * (float)(1.0 - (double)this.introTimer / 3500.0), 0.0f, Vector2.Zero, 4f, SpriteEffects.None, 0.9f); + } + else + { + b.Draw(Game1.mouseCursors, new Rectangle(0, 0, Game1.viewport.Width, Game1.viewport.Height), new Rectangle?(new Rectangle(639, 858, 1, 184)), Color.White * (float)(1.0 - (double)this.introTimer / 3500.0)); + b.Draw(Game1.mouseCursors, new Rectangle(2556, 0, Game1.viewport.Width, Game1.viewport.Height), new Rectangle?(new Rectangle(639, 858, 1, 184)), Color.White * (float)(1.0 - (double)this.introTimer / 3500.0)); + b.Draw(Game1.mouseCursors, new Vector2(0.0f, 0.0f), new Rectangle?(new Rectangle(0, 1453, 639, 195)), Color.White * (float)(1.0 - (double)this.introTimer / 3500.0), 0.0f, Vector2.Zero, 4f, SpriteEffects.None, 1f); + b.Draw(Game1.mouseCursors, new Vector2(2556f, 0.0f), new Rectangle?(new Rectangle(0, 1453, 639, 195)), Color.White * (float)(1.0 - (double)this.introTimer / 3500.0), 0.0f, Vector2.Zero, 4f, SpriteEffects.None, 1f); + if (Game1.dayOfMonth == 28) + { + b.Draw(Game1.mouseCursors, new Vector2((float)(Game1.viewport.Width - 176), 4f) + (this.moonShake > 0 ? new Vector2((float)Game1.random.Next(-1, 2), (float)Game1.random.Next(-1, 2)) : Vector2.Zero), new Rectangle?(new Rectangle(642, 835, 43, 43)), Color.White * (float)(1.0 - (double)this.introTimer / 3500.0), 0.0f, Vector2.Zero, 4f, SpriteEffects.None, 1f); + if (this.timesPokedMoon > 10) + { + SpriteBatch spriteBatch = b; + Texture2D mouseCursors = Game1.mouseCursors; + Vector2 position = new Vector2((float)(Game1.viewport.Width - 136), 48f) + (this.moonShake > 0 ? new Vector2((float)Game1.random.Next(-1, 2), (float)Game1.random.Next(-1, 2)) : Vector2.Zero); + int num; + if (Game1.currentGameTime.TotalGameTime.TotalMilliseconds % 4000.0 >= 200.0) + { + TimeSpan totalGameTime = Game1.currentGameTime.TotalGameTime; + if (totalGameTime.TotalMilliseconds % 8000.0 > 7600.0) + { + totalGameTime = Game1.currentGameTime.TotalGameTime; + if (totalGameTime.TotalMilliseconds % 8000.0 < 7800.0) + goto label_21; + } + num = 0; + goto label_22; + } + label_21: + num = 21; + label_22: + Rectangle? sourceRectangle = new Rectangle?(new Rectangle(685, 844 + num, 19, 21)); + Color color = Color.White * (float)(1.0 - (double)this.introTimer / 3500.0); + Vector2 zero = Vector2.Zero; + spriteBatch.Draw(mouseCursors, position, sourceRectangle, color, 0.0f, zero, 4f, SpriteEffects.None, 1f); + } + } + b.Draw(Game1.mouseCursors, new Vector2(0.0f, (float)(Game1.viewport.Height - 192)), new Rectangle?(new Rectangle(0, Game1.currentSeason.Equals("winter") ? 1034 : 737, 639, 48)), (Game1.currentSeason.Equals("winter") ? Color.White * 0.25f : new Color(0, 20, 40)) * (float)(0.649999976158142 - (double)this.introTimer / 3500.0), 0.0f, Vector2.Zero, 4f, SpriteEffects.FlipHorizontally, 1f); + b.Draw(Game1.mouseCursors, new Vector2(2556f, (float)(Game1.viewport.Height - 192)), new Rectangle?(new Rectangle(0, Game1.currentSeason.Equals("winter") ? 1034 : 737, 639, 48)), (Game1.currentSeason.Equals("winter") ? Color.White * 0.25f : new Color(0, 20, 40)) * (float)(0.649999976158142 - (double)this.introTimer / 3500.0), 0.0f, Vector2.Zero, 4f, SpriteEffects.FlipHorizontally, 1f); + b.Draw(Game1.mouseCursors, new Vector2(0.0f, (float)(Game1.viewport.Height - 128)), new Rectangle?(new Rectangle(0, Game1.currentSeason.Equals("winter") ? 1034 : 737, 639, 32)), (Game1.currentSeason.Equals("winter") ? Color.White * 0.5f : new Color(0, 32, 20)) * (float)(1.0 - (double)this.introTimer / 3500.0), 0.0f, Vector2.Zero, 4f, SpriteEffects.None, 1f); + b.Draw(Game1.mouseCursors, new Vector2(2556f, (float)(Game1.viewport.Height - 128)), new Rectangle?(new Rectangle(0, Game1.currentSeason.Equals("winter") ? 1034 : 737, 639, 32)), (Game1.currentSeason.Equals("winter") ? Color.White * 0.5f : new Color(0, 32, 20)) * (float)(1.0 - (double)this.introTimer / 3500.0), 0.0f, Vector2.Zero, 4f, SpriteEffects.None, 1f); + b.Draw(Game1.mouseCursors, new Vector2(160f, (float)(Game1.viewport.Height - 128 + 16 + 8)), new Rectangle?(new Rectangle(653, 880, 10, 10)), Color.White * (float)(1.0 - (double)this.introTimer / 3500.0), 0.0f, Vector2.Zero, 4f, SpriteEffects.None, 1f); + } + if (!this.outro && !Game1.wasRainingYesterday) + { + foreach (TemporaryAnimatedSprite animation in this.animations) + animation.draw(b, true, 0, 0, 1f); + } + if (this.currentPage == -1) + { + int y = this.categories[0].bounds.Y - 128; + if (y >= 0) + SpriteText.drawStringWithScrollCenteredAt(b, Utility.getDateString(), Game1.viewport.Width / 2, y, "", 1f, -1, 0, 0.88f, false); + int num = -20; + int index1 = 0; + foreach (ClickableTextureComponent category in this.categories) + { + if (this.introTimer < 2500 - index1 * 500) + { + Vector2 vector2 = category.getVector2() + new Vector2(12f, -8f); + if (category.visible) + { + category.draw(b); + b.Draw(Game1.mouseCursors, vector2 + new Vector2(-104f, (float)(num + 4)), new Rectangle?(new Rectangle(293, 360, 24, 24)), Color.White, 0.0f, Vector2.Zero, 4f, SpriteEffects.None, 0.88f); + this.categoryItems[index1][0].drawInMenu(b, vector2 + new Vector2(-88f, (float)(num + 16)), 1f, 1f, 0.9f, StackDrawType.Hide); + } + IClickableMenu.drawTextureBox(b, Game1.mouseCursors, new Rectangle(384, 373, 18, 18), (int)((double)vector2.X + (double)-this.itemSlotWidth - (double)this.categoryLabelsWidth - 12.0), (int)((double)vector2.Y + (double)num), this.categoryLabelsWidth, 104, Color.White, 4f, false); + SpriteText.drawString(b, category.hoverText, (int)vector2.X - this.itemSlotWidth - this.categoryLabelsWidth + 8, (int)vector2.Y + 4, 999999, -1, 999999, 1f, 0.88f, false, -1, "", -1, SpriteText.ScrollTextAlignment.Left); + for (int index2 = 0; index2 < 6; ++index2) + b.Draw(Game1.mouseCursors, vector2 + new Vector2((float)(-this.itemSlotWidth - 192 - 24 + index2 * 6 * 4), 12f), new Rectangle?(new Rectangle(355, 476, 7, 11)), Color.White, 0.0f, Vector2.Zero, 4f, SpriteEffects.None, 0.88f); + this.categoryDials[index1].draw(b, vector2 + new Vector2((float)(-this.itemSlotWidth - 192 - 48 + 4), 20f), this.categoryTotals[index1]); + b.Draw(Game1.mouseCursors, vector2 + new Vector2((float)(-this.itemSlotWidth - 64 - 4), 12f), new Rectangle?(new Rectangle(408, 476, 9, 11)), Color.White, 0.0f, Vector2.Zero, 4f, SpriteEffects.None, 0.88f); + } + ++index1; + } + if (this.introTimer <= 0) + this.okButton.draw(b); + } + else + { + IClickableMenu.drawTextureBox(b, 0, 0, Game1.viewport.Width, Game1.viewport.Height, Color.White); + Vector2 location = new Vector2((float)(this.xPositionOnScreen + 32), (float)(this.yPositionOnScreen + 32)); + for (int index1 = this.currentTab * this.itemsPerCategoryPage; index1 < this.currentTab * this.itemsPerCategoryPage + this.itemsPerCategoryPage; ++index1) + { + if (this.categoryItems[this.currentPage].Count > index1) + { + Item index2 = this.categoryItems[this.currentPage][index1]; + index2.drawInMenu(b, location, 1f, 1f, 1f, StackDrawType.Draw); + if (LocalizedContentManager.CurrentLanguageLatin) + { + SpriteText.drawString(b, index2.DisplayName + (index2.Stack > 1 ? " x" + (object)index2.Stack : ""), (int)location.X + 64 + 12, (int)location.Y + 12, 999999, -1, 999999, 1f, 0.88f, false, -1, "", -1, SpriteText.ScrollTextAlignment.Left); + string s = "."; + for (int index3 = 0; index3 < this.width - 96 - SpriteText.getWidthOfString(index2.DisplayName + (index2.Stack > 1 ? " x" + (object)index2.Stack : "") + Game1.content.LoadString("Strings\\StringsFromCSFiles:LoadGameMenu.cs.11020", (object)this.itemValues[index2]), 999999); index3 += SpriteText.getWidthOfString(" .", 999999)) + s += " ."; + SpriteText.drawString(b, s, (int)location.X + 80 + SpriteText.getWidthOfString(index2.DisplayName + (index2.Stack > 1 ? " x" + (object)index2.Stack : ""), 999999), (int)location.Y + 8, 999999, -1, 999999, 1f, 0.88f, false, -1, "", -1, SpriteText.ScrollTextAlignment.Left); + SpriteText.drawString(b, Game1.content.LoadString("Strings\\StringsFromCSFiles:LoadGameMenu.cs.11020", (object)this.itemValues[index2]), (int)location.X + this.width - 64 - SpriteText.getWidthOfString(Game1.content.LoadString("Strings\\StringsFromCSFiles:LoadGameMenu.cs.11020", (object)this.itemValues[index2]), 999999), (int)location.Y + 12, 999999, -1, 999999, 1f, 0.88f, false, -1, "", -1, SpriteText.ScrollTextAlignment.Left); + } + else + { + string s1 = index2.DisplayName + (index2.Stack > 1 ? " x" + (object)index2.Stack : "."); + string s2 = Game1.content.LoadString("Strings\\StringsFromCSFiles:LoadGameMenu.cs.11020", (object)this.itemValues[index2]); + int x = (int)location.X + this.width - 64 - SpriteText.getWidthOfString(Game1.content.LoadString("Strings\\StringsFromCSFiles:LoadGameMenu.cs.11020", (object)this.itemValues[index2]), 999999); + SpriteText.getWidthOfString(s1 + s2, 999999); + while (SpriteText.getWidthOfString(s1 + s2, 999999) < 1123) + s1 += " ."; + if (SpriteText.getWidthOfString(s1 + s2, 999999) >= 1155) + s1 = s1.Remove(s1.Length - 1); + SpriteText.drawString(b, s1, (int)location.X + 64 + 12, (int)location.Y + 12, 999999, -1, 999999, 1f, 0.88f, false, -1, "", -1, SpriteText.ScrollTextAlignment.Left); + SpriteText.drawString(b, s2, x, (int)location.Y + 12, 999999, -1, 999999, 1f, 0.88f, false, -1, "", -1, SpriteText.ScrollTextAlignment.Left); + } + location.Y += 68f; + } + } + this.backButton.draw(b); + if (this.showForwardButton()) + this.forwardButton.draw(b); + } + if (this.outro) + { + b.Draw(Game1.mouseCursors, new Rectangle(0, 0, Game1.viewport.Width, Game1.viewport.Height), new Rectangle?(new Rectangle(639, 858, 1, 184)), Color.Black * (float)(1.0 - (double)this.outroFadeTimer / 800.0)); + SpriteText.drawStringWithScrollCenteredAt(b, this.newDayPlaque ? Utility.getDateString(0) : Utility.getDateString(), Game1.viewport.Width / 2, this.dayPlaqueY, "", 1f, -1, 0, 0.88f, false); + foreach (TemporaryAnimatedSprite animation in this.animations) + animation.draw(b, true, 0, 0, 1f); + if (this.finalOutroTimer > 0 || this._hasFinished) + b.Draw(Game1.staminaRect, new Rectangle(0, 0, Game1.viewport.Width, Game1.viewport.Height), new Rectangle?(new Rectangle(0, 0, 1, 1)), Color.Black * (float)(1.0 - (double)this.finalOutroTimer / 2000.0)); + } + if (Game1.options.SnappyMenus && (this.introTimer > 0 || this.outro)) + return; + this.drawMouse(b); + } + + + public void shipItems() + { + NetCollection shippingBin = Game1.getFarm().getShippingBin(Game1.player); + if (Game1.player.useSeparateWallets || !Game1.player.useSeparateWallets && Game1.player.IsMainPlayer) + { + int num = 0; + foreach (Item obj in shippingBin) + { + if (obj is StardewValley.Object) + num += (obj as StardewValley.Object).sellToStorePrice(-1L) * obj.Stack; + } + Game1.player.Money += num; + Game1.getFarm().getShippingBin(Game1.player).Clear(); + } + + if (Game1.player.useSeparateWallets && Game1.player.IsMainPlayer) + { + foreach (Farmer allFarmhand in Game1.getAllFarmhands()) + { + if (!allFarmhand.isActive() && !allFarmhand.isUnclaimedFarmhand) + { + int num = 0; + foreach (Item obj in Game1.getFarm().getShippingBin(allFarmhand)) + { + if (obj is StardewValley.Object) + num += (obj as StardewValley.Object).sellToStorePrice(allFarmhand.UniqueMultiplayerID) * obj.Stack; + } + Game1.player.team.AddIndividualMoney(allFarmhand, num); + Game1.getFarm().getShippingBin(allFarmhand).Clear(); + } + } + } + } + + } + +} diff --git a/GeneralMods/SaveAnywhere/Framework/SaveAnywhereAPI.cs b/GeneralMods/SaveAnywhere/Framework/SaveAnywhereAPI.cs index 2c105023..58e0c41f 100644 --- a/GeneralMods/SaveAnywhere/Framework/SaveAnywhereAPI.cs +++ b/GeneralMods/SaveAnywhere/Framework/SaveAnywhereAPI.cs @@ -6,24 +6,119 @@ using System.Threading.Tasks; namespace Omegasis.SaveAnywhere.Framework { + /// + /// Interface for the Save Anywhere API + /// Other mods can use this interface to get the + /// API from the SMAPI helper + /// public class SaveAnywhereAPI { + + /********* +** Events +*********/ + /// + /// Event that fires before game save + /// + public event EventHandler BeforeSave + { + add + { + SaveAnywhere.Instance.SaveManager.beforeSave += value; + } + remove + { + SaveAnywhere.Instance.SaveManager.beforeSave -= value; + } + } + /// + /// Event that fires after game save + /// + public event EventHandler AfterSave + { + add + { + SaveAnywhere.Instance.SaveManager.afterSave += value; + } + remove + { + SaveAnywhere.Instance.SaveManager.afterSave -= value; + } + } + /// + /// Event that fires after game load + /// + public event EventHandler AfterLoad + { + add + { + SaveAnywhere.Instance.SaveManager.afterLoad += value; + } + remove + { + SaveAnywhere.Instance.SaveManager.afterLoad -= value; + } + } + + public SaveAnywhereAPI() { } + /// + /// Add in an event that can trigger before saving begins. + /// + /// + /// public void addBeforeSaveEvent(string ID, Action BeforeSave) { SaveAnywhere.Instance.SaveManager.beforeCustomSavingBegins.Add(ID, BeforeSave); } - public void addAfterSaveEvent(string ID, Action BeforeSave) + /// + /// Remove an event that can trigger before saving begins. + /// + /// + /// + public void removeBeforeSaveEvent(string ID, Action BeforeSave) { - SaveAnywhere.Instance.SaveManager.afterCustomSavingCompleted.Add(ID, BeforeSave); + SaveAnywhere.Instance.SaveManager.beforeCustomSavingBegins.Remove(ID); } - public void addAfterLoadEvent(string ID, Action BeforeSave) + /// + /// Add an event that tiggers after saving has finished. + /// + /// + /// + public void addAfterSaveEvent(string ID, Action AfterSave) { - SaveAnywhere.Instance.SaveManager.afterSaveLoaded.Add(ID, BeforeSave); + SaveAnywhere.Instance.SaveManager.afterCustomSavingCompleted.Add(ID, AfterSave); + } + /// + ///Remove an event that triggers after saving has occured. + /// + /// + /// + public void removeAfterSaveEvent(string ID, Action AfterSave) + { + SaveAnywhere.Instance.SaveManager.afterCustomSavingCompleted.Remove(ID); + } + /// + /// Add in an event that triggers afer loading has occured. + /// + /// + /// + public void addAfterLoadEvent(string ID, Action AfterLoad) + { + SaveAnywhere.Instance.SaveManager.afterSaveLoaded.Add(ID, AfterLoad); + } + /// + /// Remove an event that occurs after loading has occured. + /// + /// + /// + public void removeAfterLoadEvent(string ID, Action AfterLoad) + { + SaveAnywhere.Instance.SaveManager.afterSaveLoaded.Remove(ID); } } diff --git a/GeneralMods/SaveAnywhere/Framework/SaveManager.cs b/GeneralMods/SaveAnywhere/Framework/SaveManager.cs index 0fe7aaad..7f951a6d 100644 --- a/GeneralMods/SaveAnywhere/Framework/SaveManager.cs +++ b/GeneralMods/SaveAnywhere/Framework/SaveManager.cs @@ -33,12 +33,17 @@ namespace Omegasis.SaveAnywhere.Framework private bool WaitingToSave; /// Currently displayed save menu (null if no menu is displayed) - private NewSaveGameMenu currentSaveMenu; + private NewSaveGameMenuV2 currentSaveMenu; public Dictionary beforeCustomSavingBegins; + public event EventHandler beforeSave; + public Dictionary afterCustomSavingCompleted; + public event EventHandler afterSave; + public Dictionary afterSaveLoaded; + public event EventHandler afterLoad; /********* ** Public methods @@ -67,7 +72,7 @@ namespace Omegasis.SaveAnywhere.Framework // perform passive save if (this.WaitingToSave && Game1.activeClickableMenu == null) { - this.currentSaveMenu = new NewSaveGameMenu(); + this.currentSaveMenu = new NewSaveGameMenuV2(); this.currentSaveMenu.SaveComplete += this.CurrentSaveMenu_SaveComplete; Game1.activeClickableMenu = this.currentSaveMenu; this.WaitingToSave = false; @@ -82,7 +87,11 @@ namespace Omegasis.SaveAnywhere.Framework this.currentSaveMenu.SaveComplete -= this.CurrentSaveMenu_SaveComplete; this.currentSaveMenu = null; SaveAnywhere.RestoreMonsters(); - //AfterSave.Invoke(this, EventArgs.Empty); + if (this.afterSave != null) + { + this.afterSave.Invoke(this, EventArgs.Empty); + } + foreach (var v in this.afterCustomSavingCompleted) { v.Value.Invoke(); @@ -111,25 +120,31 @@ namespace Omegasis.SaveAnywhere.Framework /// Initiate a game save. public void BeginSaveData() { - + if (this.beforeSave != null) + { + this.beforeSave.Invoke(this, EventArgs.Empty); + } foreach(var v in this.beforeCustomSavingBegins) { v.Value.Invoke(); } + SaveAnywhere.Instance.cleanMonsters(); + // save game data Farm farm = Game1.getFarm(); if (farm.getShippingBin(Game1.player)!=null) { - Game1.activeClickableMenu = new NewShippingMenu(farm.getShippingBin(Game1.player), this.Reflection); - farm.getShippingBin(Game1.player).Clear(); + //Game1.activeClickableMenu = new NewShippingMenu(farm.getShippingBin(Game1.player), this.Reflection); + Game1.activeClickableMenu = new NewShippingMenuV2(farm.getShippingBin(Game1.player)); + //farm.getShippingBin(Game1.player).Clear(); farm.lastItemShipped = null; this.WaitingToSave = true; } else { - this.currentSaveMenu = new NewSaveGameMenu(); + this.currentSaveMenu = new NewSaveGameMenuV2(); this.currentSaveMenu.SaveComplete += this.CurrentSaveMenu_SaveComplete; Game1.activeClickableMenu = this.currentSaveMenu; } @@ -161,6 +176,10 @@ namespace Omegasis.SaveAnywhere.Framework this.ResumeSwimming(data); this.SetPositions(data.Characters); this.OnLoaded?.Invoke(); + if (this.afterLoad != null) + { + this.afterLoad.Invoke(this, EventArgs.Empty); + } foreach (var v in this.afterSaveLoaded) { v.Value.Invoke(); diff --git a/GeneralMods/SaveAnywhere/SaveAnywhere.cs b/GeneralMods/SaveAnywhere/SaveAnywhere.cs index e078836f..95c7a125 100644 --- a/GeneralMods/SaveAnywhere/SaveAnywhere.cs +++ b/GeneralMods/SaveAnywhere/SaveAnywhere.cs @@ -128,7 +128,7 @@ namespace Omegasis.SaveAnywhere } if (Game1.activeClickableMenu != null) { - if (Game1.activeClickableMenu.GetType() == typeof(NewSaveGameMenu)) + if (Game1.activeClickableMenu.GetType() == typeof(NewSaveGameMenuV2)) { this.customMenuOpen = true; } @@ -136,7 +136,7 @@ namespace Omegasis.SaveAnywhere } /// Saves all monsters from the game world. - private void cleanMonsters() + public void cleanMonsters() { this.monsters = new Dictionary>(); @@ -230,7 +230,7 @@ namespace Omegasis.SaveAnywhere if (Game1.isFestival()) return; if (Game1.client == null) { - this.cleanMonsters(); + // validate: community center Junimos can't be saved if (Game1.player.currentLocation.getCharacters().OfType().Any()) diff --git a/GeneralMods/SaveAnywhere/SaveAnywhere.csproj b/GeneralMods/SaveAnywhere/SaveAnywhere.csproj index cec68590..0fa017e3 100644 --- a/GeneralMods/SaveAnywhere/SaveAnywhere.csproj +++ b/GeneralMods/SaveAnywhere/SaveAnywhere.csproj @@ -84,6 +84,8 @@ + + diff --git a/GeneralMods/SaveAnywhere/manifest.json b/GeneralMods/SaveAnywhere/manifest.json index 394cd544..e57df190 100644 --- a/GeneralMods/SaveAnywhere/manifest.json +++ b/GeneralMods/SaveAnywhere/manifest.json @@ -1,7 +1,7 @@ { "Name": "Save Anywhere", "Author": "Alpha_Omegasis", - "Version": "2.12.0", + "Version": "2.12.3", "Description": "Lets you save almost anywhere.", "UniqueID": "Omegasis.SaveAnywhere", "EntryDll": "SaveAnywhere.dll", diff --git a/GeneralMods/StardustCore/Events/EventHelper.cs b/GeneralMods/StardustCore/Events/EventHelper.cs index 125e6fdd..fb926bbf 100644 --- a/GeneralMods/StardustCore/Events/EventHelper.cs +++ b/GeneralMods/StardustCore/Events/EventHelper.cs @@ -230,13 +230,15 @@ namespace StardustCore.Events /// /// Checks to see if all of the event preconditions have been met and starts the event if so. /// - public virtual void startEventAtLocationifPossible() + public virtual bool startEventAtLocationifPossible() { if (this.canEventOccur()) { //Game1.player.currentLocation.currentEvent = this.getEvent(); Game1.player.currentLocation.startEvent(this.getEvent()); + return true; } + return false; } diff --git a/GeneralMods/StardustCore/Events/EventManager.cs b/GeneralMods/StardustCore/Events/EventManager.cs index 0f5aac6d..2906aa7f 100644 --- a/GeneralMods/StardustCore/Events/EventManager.cs +++ b/GeneralMods/StardustCore/Events/EventManager.cs @@ -22,11 +22,14 @@ namespace StardustCore.Events public Dictionary concurrentEventActions; + public Dictionary> seenEvents; + public EventManager() { this.events = new Dictionary(); this.customEventLogic = new Dictionary>(); this.concurrentEventActions = new Dictionary(); + this.seenEvents = new Dictionary>(); this.customEventLogic.Add("Omegasis.EventFramework.AddObjectToPlayersInventory", ExtraEventActions.addObjectToPlayerInventory); this.customEventLogic.Add("Omegasis.EventFramework.ViewportLerp", ExtraEventActions.ViewportLerp); @@ -67,7 +70,7 @@ namespace StardustCore.Events /// public virtual void update() { - if (Game1.CurrentEvent == null) + if (Game1.eventUp == false) { if (this.concurrentEventActions.Count > 0) { @@ -128,11 +131,51 @@ namespace StardustCore.Events /// public virtual void startEventAtLocationIfPossible(string EventName) { + StardustCore.ModCore.ModMonitor.Log("Try to start event!"); + if (this.events.ContainsKey(EventName)) { - if (Game1.eventUp == true) return; + if (this.seenEvents.ContainsKey(Game1.player)){ + if (this.seenEvents[Game1.player].Contains(this.events[EventName])) + { + return; + } + } + if (Game1.eventUp == true) + { + if (this.events[EventName].getEventID() == Game1.CurrentEvent.id) + { + this.concurrentEventActions.Clear(); //Clean all old parallel actions before starting a new event. + bool started2=this.events[EventName].startEventAtLocationifPossible(); + if (started2) + { + if (this.seenEvents.ContainsKey(Game1.player)) + { + this.seenEvents[Game1.player].Add(this.events[EventName]); + } + else + { + this.seenEvents.Add(Game1.player, new HashSet() { this.events[EventName] }); + } + } + } + else + { + return; + } + } this.concurrentEventActions.Clear(); //Clean all old parallel actions before starting a new event. - this.events[EventName].startEventAtLocationifPossible(); + bool started=this.events[EventName].startEventAtLocationifPossible(); + if (started) + { + if(this.seenEvents.ContainsKey(Game1.player)){ + this.seenEvents[Game1.player].Add(this.events[EventName]); + } + else + { + this.seenEvents.Add(Game1.player,new HashSet() { this.events[EventName] }); + } + } } } @@ -145,7 +188,11 @@ namespace StardustCore.Events this.events.TryGetValue(EventName, out EventHelper e); if (e == null) return; - Game1.player.eventsSeen.Remove(e.getEventID()); + if (this.seenEvents.ContainsKey(Game1.player)) + { + this.seenEvents[Game1.player].Remove(e); + } + //Game1.player.eventsSeen.Remove(e.getEventID()); } /// diff --git a/GeneralMods/StardustCore/manifest.json b/GeneralMods/StardustCore/manifest.json index 2abd5ea3..feee8e05 100644 --- a/GeneralMods/StardustCore/manifest.json +++ b/GeneralMods/StardustCore/manifest.json @@ -1,7 +1,7 @@ { "Name": "StardustCore", "Author": "Alpha_Omegasis", - "Version": "2.4.0", + "Version": "2.4.2", "Description": "A core mod that allows for other mods of mine to be run.", "UniqueID": "Omegasis.StardustCore", "EntryDll": "StardustCore.dll",