コード例 #1
0
        /// <summary>Day ends (before save). This event is triggered *before* OnSaveLoaded for a new game.</summary>
        public static void OnDayEnding()
        {
            bool isNewGame = Game1.Date.TotalDays == -1;

            if (isNewGame)
            {
                SaveGameHelper.LoadFromFileOrInitialize();
                return;
            }

            // don't ever reset, just apply the gift taste
            if (ConfigHelper.Config.ResetEveryXDays == 0)
            {
                // apply gift taste changes at the end of day (and not immediately after gifting)
                // this way the social tab will show the reaction you actually got for that day
                SaveGameHelper.Apply();
                return;
            }

            int nextDay = Game1.Date.TotalDays + 1;

            if (nextDay % ConfigHelper.Config.ResetEveryXDays == 0)
            {
                SaveGameHelper.ResetSaveState();
                return;
            }

            SaveGameHelper.Apply();
        }
コード例 #2
0
 /// <summary>Just before a game is being saved.</summary>
 public static void OnSaving()
 {
     if (!Context.IsMainPlayer)
     {
         return;
     }
     SaveGameHelper.WriteToFile();
 }
コード例 #3
0
        /// <summary>Host notices a peer.</summary>
        /// <param name="e">Event data.</param>
        public static void OnPeerConnected(PeerConnectedEventArgs e)
        {
            if (!e.Peer.HasSmapi)
            {
                return;
            }

            ConfigHelper.SyncWithPeers();
            SaveGameHelper.SyncWithPeers();
        }
コード例 #4
0
        /// <summary>After save game got loaded (or new one is created).</summary>
        public static void OnSaveLoaded()
        {
            NpcHelper.StoreDefaultGiftTastes();

            if (!Context.IsMainPlayer)
            {
                return;
            }

            SaveGameHelper.LoadFromFileOrInitialize();
            SaveGameHelper.Apply();
        }
コード例 #5
0
        /// <summary>Host notices a peer.</summary>
        /// <param name="e">Event data.</param>
        public static void OnModMessageReceived(ModMessageReceivedEventArgs e)
        {
            if (e.FromModID != MultiplayerHelper.ModId)
            {
                return;
            }

            Logger.Trace("Receiving message from peer. Type = " + e.Type);

            if (e.Type == ConfigHelper.Key)
            {
                // Use configuration of the host to prevent potential de-syncs
                ConfigHelper.Config = e.ReadAs <ModConfig>();
            }
            else if (e.Type == SaveGameHelper.Key)
            {
                SaveGameHelper.SaveState = e.ReadAs <ModData>();
                SaveGameHelper.Apply();
            }
        }
コード例 #6
0
        private void OnItemRemoved(Item plainItem)
        {
            if (!this.isInDialog)
            {
                return;
            }

            if (!(plainItem is StardewValley.Object item))
            {
                return;
            }
            if (!item.canBeGivenAsGift())
            {
                return;                                       // e.g. Tools or any placable object
            }
            IEnumerator <NPC> enumerator = Game1.player.currentLocation.characters.GetEnumerator();

            while (enumerator.MoveNext())
            {
                NPC npc = enumerator.Current;
                if (NpcHelper.AcceptsGifts(npc) && NpcHelper.HasJustReceivedGift(npc, item))
                {
                    Logger.Trace(npc.Name + " received gift #" + item.ParentSheetIndex + " (" + item.Name + ")");
                    SaveGameHelper.HandleReceivedGift(npc, item);
                    return;
                }
            }

            foreach (ItemDeliveryQuest quest in QuestLogHelper.GetDailyItemDeliveryQuests())
            {
                if (quest.deliveryItem.Value.ParentSheetIndex == item.ParentSheetIndex && quest.hasReward())
                {
                    Logger.Trace("Handed over quest item");
                    return;
                }
            }

            Logger.Trace("It appears a gift has been given to someone, but I can't determine to whom :(");
            Logger.Trace("Maybe it was a non-daily quest item? (" + item.Name + ")");
        }
コード例 #7
0
        /// <summary>The mod entry point, called after the mod is first loaded.</summary>
        /// <param name="helper">Provides simplified APIs for writing mods.</param>
        public override void Entry(IModHelper helper)
        {
            Logger.Init(this.Monitor);
            MultiplayerHelper.Init(this.Helper.Multiplayer);
            SaveGameHelper.Init(this.Helper.Data);
            ConfigHelper.Init(this.Helper);

            SaveGameHelper.AddResetCommand(helper);

            helper.Events.Display.MenuChanged += (object sender, MenuChangedEventArgs e) =>
                                                 EventHandler.OnMenuChanged(ref this.isInDialog, e);

            helper.Events.Multiplayer.ModMessageReceived += (object sender, ModMessageReceivedEventArgs e) =>
                                                            EventHandler.OnModMessageReceived(e);

            helper.Events.Multiplayer.PeerConnected += (object sender, PeerConnectedEventArgs e) =>
                                                       EventHandler.OnPeerConnected(e);

            helper.Events.Player.InventoryChanged += (object sender, InventoryChangedEventArgs e) =>
                                                     EventHandler.OnInventoryChanged(this.OnItemRemoved, e);

            helper.Events.Player.Warped += (object sender, WarpedEventArgs e) =>
                                           EventHandler.OnWarped();

            helper.Events.GameLoop.DayEnding += (object sender, DayEndingEventArgs e) =>
                                                EventHandler.OnDayEnding();

            helper.Events.GameLoop.ReturnedToTitle += (object sender, ReturnedToTitleEventArgs e) =>
                                                      EventHandler.OnReturnedToTitle();

            helper.Events.GameLoop.Saving += (object sender, SavingEventArgs e) =>
                                             EventHandler.OnSaving();

            helper.Events.GameLoop.SaveLoaded += (object sender, SaveLoadedEventArgs e) =>
                                                 EventHandler.OnSaveLoaded();

            helper.Events.World.NpcListChanged += (object sender, NpcListChangedEventArgs e) =>
                                                  EventHandler.OnNpcListChanged(e);
        }
コード例 #8
0
 /// <summary>Quit game back to main menu screen.</summary>
 public static void OnReturnedToTitle()
 {
     SaveGameHelper.ResetSaveState();
     ConfigHelper.RestoreLocalConfig();
 }