Exemple #1
0
 [HarmonyPatch("gil")] // private method
 public static bool gil_Prefix(StardewValley.Locations.AdventureGuild __instance)
 {
     try
     {
         Instance.GilRewards(__instance);
         return(false);
     }
     catch (Exception ex)
     {
         ModEntry.Log.Error($"Failed in {nameof(gil_Prefix)}:\n{ex}");
         return(true);
     }
 }
Exemple #2
0
 public static bool showMonsterKillList_Prefix(StardewValley.Locations.AdventureGuild __instance)
 {
     try
     {
         showMonsterKillList();
         return(false);
     }
     catch (Exception ex)
     {
         ModEntry.Log.Error($"Failed in {nameof(showMonsterKillList_Prefix)}:\n{ex}");
         return(true);
     }
 }
Exemple #3
0
 public static bool willThisKillCompleteAMonsterSlayerQuest_Prefix(StardewValley.Locations.AdventureGuild __instance, ref bool __result, string nameOfMonster)
 {
     try
     {
         __result = willThisKillCompleteAMonsterSlayerQuest(nameOfMonster);
         return(false);
     }
     catch (Exception ex)
     {
         ModEntry.Log.Error($"Failed in {nameof(willThisKillCompleteAMonsterSlayerQuest_Prefix)}:\n{ex}");
         return(true);
     }
 }
Exemple #4
0
 public static bool areAllMonsterSlayerQuestsComplete_Prefix(StardewValley.Locations.AdventureGuild __instance, ref bool __result)
 {
     try
     {
         __result = areAllMonsterSlayerQuestsComplete();
         return(false);
     }
     catch (Exception ex)
     {
         ModEntry.Log.Error($"Failed in {nameof(areAllMonsterSlayerQuestsComplete_Prefix)}:\n{ex}");
         return(true);
     }
 }
Exemple #5
0
        //significant copy of game code
        public void GilRewards(StardewValley.Locations.AdventureGuild __instance)
        {
            List <Item> rewards = new List <Item>();

            for (int i = 0; i < MonsterTable.Length; i++)
            {
                var player = Game1.player;
                var group  = MonsterTable[i];

                int killed = 0;
                foreach (string specificMonster in group.Monsters)
                {
                    if (player.stats.specificMonstersKilled.TryGetValue(specificMonster, out int thisKill))
                    {
                        killed += thisKill;
                    }
                }

                if ((killed >= group.KillsNeededNew) && !player.mailReceived.Contains(group.RewardName))
                {
                    switch ((MonsterType)i)
                    {
                    case MonsterType.Slime:
                        rewards.Add(new StardewValley.Objects.Ring(520));
                        break;

                    case MonsterType.VoidSpirit:
                        rewards.Add(new StardewValley.Objects.Ring(523));
                        break;

                    case MonsterType.Skeleton:
                        rewards.Add(new StardewValley.Objects.Hat(8));
                        break;

                    case MonsterType.DustSprite:
                        rewards.Add(new StardewValley.Objects.Ring(526));
                        break;

                    case MonsterType.Bat:
                        rewards.Add(new StardewValley.Objects.Ring(522));
                        break;

                    case MonsterType.Serpent:
                        rewards.Add(new StardewValley.Objects.Ring(811));
                        break;

                    case MonsterType.MagmaSprite:
                        var gilNpc = MyHelper.Reflection.GetField <StardewValley.NPC>(__instance, "Gil").GetValue();
                        Game1.addMail("Gil_Telephone", noLetter: true, sendToEveryone: true);
                        Game1.drawDialogue(gilNpc, Game1.content.LoadString("Strings\\Locations:Gil_Telephone"));
                        return;

                    case MonsterType.Insect:
                        rewards.Add(new StardewValley.Tools.MeleeWeapon(13));
                        break;

                    case MonsterType.Mummy:
                        rewards.Add(new StardewValley.Objects.Hat(60));
                        break;

                    case MonsterType.RockCrab:
                        rewards.Add(new StardewValley.Objects.Ring(810));
                        break;

                    case MonsterType.Dino:
                        rewards.Add(new StardewValley.Objects.Hat(50));
                        break;

                    case MonsterType.Duggy:
                        rewards.Add(new StardewValley.Objects.Hat(27));
                        break;

                    default:
                        break;
                    }
                }
            }

            foreach (Item i in rewards)
            {
                if (i is StardewValley.Object obj)
                {
                    obj.specialItem = true;
                }
            }
            if (rewards.Count > 0)
            {
                Game1.activeClickableMenu = new StardewValley.Menus.ItemGrabMenu(rewards, __instance)
                {
                    behaviorOnItemGrab = onRewardCollected
                };
                return;
            }

            var gil         = MyHelper.Reflection.GetField <StardewValley.NPC>(__instance, "Gil").GetValue();
            var talkedToGil = MyHelper.Reflection.GetField <bool>(__instance, "talkedToGil");

            if (talkedToGil.GetValue())
            {
                Game1.drawDialogue(gil, Game1.content.LoadString("Characters\\Dialogue\\Gil:Snoring"));
            }
            else
            {
                Game1.drawDialogue(gil, Game1.content.LoadString("Characters\\Dialogue\\Gil:ComeBackLater"));
            }
            talkedToGil.SetValue(true);
        }