[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); } }
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); } }
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); } }
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); } }
//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); }