summaryrefslogtreecommitdiff
path: root/StardewModdingAPI
diff options
context:
space:
mode:
Diffstat (limited to 'StardewModdingAPI')
-rw-r--r--StardewModdingAPI/Events/EventArgs.cs20
-rw-r--r--StardewModdingAPI/Events/Player.cs6
-rw-r--r--StardewModdingAPI/Extensions.cs2
-rw-r--r--StardewModdingAPI/Inheritance/SGame.cs46
4 files changed, 72 insertions, 2 deletions
diff --git a/StardewModdingAPI/Events/EventArgs.cs b/StardewModdingAPI/Events/EventArgs.cs
index 7f2e28c7..66d057a7 100644
--- a/StardewModdingAPI/Events/EventArgs.cs
+++ b/StardewModdingAPI/Events/EventArgs.cs
@@ -108,6 +108,26 @@ namespace StardewModdingAPI.Events
public List<ItemStackChange> QuantityChanged { get; private set; }
}
+ public class EventArgsLevelUp : EventArgs
+ {
+ public enum LevelType
+ {
+ Combat,
+ Farming,
+ Fishing,
+ Foraging,
+ Mining,
+ Luck
+ }
+ public EventArgsLevelUp(LevelType type, Int32 newLevel)
+ {
+ Type = type;
+ NewLevel = newLevel;
+ }
+ public LevelType Type { get; private set; }
+ public Int32 NewLevel { get; private set; }
+ }
+
public class EventArgsIntChanged : EventArgs
{
public EventArgsIntChanged(Int32 priorInt, Int32 newInt)
diff --git a/StardewModdingAPI/Events/Player.cs b/StardewModdingAPI/Events/Player.cs
index 47d21f63..f0547f87 100644
--- a/StardewModdingAPI/Events/Player.cs
+++ b/StardewModdingAPI/Events/Player.cs
@@ -12,6 +12,7 @@ namespace StardewModdingAPI.Events
{
public static event EventHandler<EventArgsFarmerChanged> FarmerChanged = delegate { };
public static event EventHandler<EventArgsInventoryChanged> InventoryChanged = delegate { };
+ public static event EventHandler<EventArgsLevelUp> LeveledUp = delegate { };
public static void InvokeFarmerChanged(Farmer priorFarmer, Farmer newFarmer)
{
@@ -22,5 +23,10 @@ namespace StardewModdingAPI.Events
{
InventoryChanged.Invoke(null, new EventArgsInventoryChanged(inventory, changedItems));
}
+
+ public static void InvokeLeveledUp(EventArgsLevelUp.LevelType type, int newLevel)
+ {
+ LeveledUp.Invoke(null, new EventArgsLevelUp(type, newLevel));
+ }
}
}
diff --git a/StardewModdingAPI/Extensions.cs b/StardewModdingAPI/Extensions.cs
index 1bd589db..7e849f12 100644
--- a/StardewModdingAPI/Extensions.cs
+++ b/StardewModdingAPI/Extensions.cs
@@ -50,7 +50,7 @@ namespace StardewModdingAPI
{
return Boolean.Parse(o.ToString());
}
-
+
public static int GetHash(this IEnumerable enumerable)
{
string s = string.Empty;
diff --git a/StardewModdingAPI/Inheritance/SGame.cs b/StardewModdingAPI/Inheritance/SGame.cs
index 366f3045..36f905f7 100644
--- a/StardewModdingAPI/Inheritance/SGame.cs
+++ b/StardewModdingAPI/Inheritance/SGame.cs
@@ -12,6 +12,7 @@ using StardewValley.Menus;
using StardewValley.Monsters;
using StardewValley.Quests;
using StardewValley.TerrainFeatures;
+using StardewModdingAPI.Events;
namespace StardewModdingAPI.Inheritance
{
@@ -48,6 +49,13 @@ namespace StardewModdingAPI.Inheritance
public int PreviousItems_ { get; private set; }
public Dictionary<Item, int> PreviousItems { get; private set; }
+ public int PreviousCombatLevel { get; private set; }
+ public int PreviousFarmingLevel { get; private set; }
+ public int PreviousFishingLevel { get; private set; }
+ public int PreviousForagingLevel { get; private set; }
+ public int PreviousMiningLevel { get; private set; }
+ public int PreviousLuckLevel { get; private set; }
+
public GameLocation PreviousGameLocation { get; private set; }
public IClickableMenu PreviousActiveMenu { get; private set; }
@@ -227,7 +235,7 @@ namespace StardewModdingAPI.Inheritance
foreach (Keys k in FramePressedKeys)
Events.ControlEvents.InvokeKeyPressed(k);
-
+
if (KStateNow != KStatePrior)
{
Events.ControlEvents.InvokeKeyboardChanged(KStatePrior, KStateNow);
@@ -264,6 +272,42 @@ namespace StardewModdingAPI.Inheritance
PreviousFarmer = player;
}
+ if (player != null && player.combatLevel != PreviousCombatLevel)
+ {
+ Events.PlayerEvents.InvokeLeveledUp(EventArgsLevelUp.LevelType.Combat, player.combatLevel);
+ PreviousCombatLevel = player.combatLevel;
+ }
+
+ if (player != null && player.farmingLevel != PreviousFarmingLevel)
+ {
+ Events.PlayerEvents.InvokeLeveledUp(EventArgsLevelUp.LevelType.Farming, player.farmingLevel);
+ PreviousFarmingLevel = player.farmingLevel;
+ }
+
+ if (player != null && player.fishingLevel != PreviousFishingLevel)
+ {
+ Events.PlayerEvents.InvokeLeveledUp(EventArgsLevelUp.LevelType.Fishing, player.fishingLevel);
+ PreviousFishingLevel = player.fishingLevel;
+ }
+
+ if (player != null && player.foragingLevel != PreviousForagingLevel)
+ {
+ Events.PlayerEvents.InvokeLeveledUp(EventArgsLevelUp.LevelType.Foraging, player.foragingLevel);
+ PreviousForagingLevel = player.foragingLevel;
+ }
+
+ if (player != null && player.miningLevel != PreviousMiningLevel)
+ {
+ Events.PlayerEvents.InvokeLeveledUp(EventArgsLevelUp.LevelType.Mining, player.miningLevel);
+ PreviousMiningLevel = player.miningLevel;
+ }
+
+ if (player != null && player.luckLevel != PreviousLuckLevel)
+ {
+ Events.PlayerEvents.InvokeLeveledUp(EventArgsLevelUp.LevelType.Luck, player.luckLevel);
+ PreviousLuckLevel = player.luckLevel;
+ }
+
List<ItemStackChange> changedItems;
if (player != null && HasInventoryChanged(player.items, out changedItems))
{