diff options
-rw-r--r-- | StardewModdingAPI/Events.cs | 14 | ||||
-rw-r--r-- | StardewModdingAPI/Program.cs | 326 | ||||
-rw-r--r-- | StardewModdingAPI/StardewModdingAPI.csproj | 3 | ||||
-rw-r--r-- | StardewModdingAPI/obj/x86/Debug/StardewModdingAPI.csproj.FileListAbsolute.txt | 5 |
4 files changed, 311 insertions, 37 deletions
diff --git a/StardewModdingAPI/Events.cs b/StardewModdingAPI/Events.cs index 1ec5e74a..2009ed0f 100644 --- a/StardewModdingAPI/Events.cs +++ b/StardewModdingAPI/Events.cs @@ -10,11 +10,23 @@ namespace StardewModdingAPI { public delegate void BlankEventHandler(); - public static event BlankEventHandler GameLoaded = delegate {}; + public static event BlankEventHandler GameLoaded = delegate { }; + public static event BlankEventHandler UpdateInitialized = delegate { }; + public static event BlankEventHandler UpdateTick = delegate { }; public static void InvokeGameLoaded() { GameLoaded.Invoke(); } + + public static void InvokeUpdateInitialized() + { + UpdateInitialized.Invoke(); + } + + public static void InvokeUpdateTick() + { + UpdateTick.Invoke(); + } } } diff --git a/StardewModdingAPI/Program.cs b/StardewModdingAPI/Program.cs index fb6ce115..20a2eccd 100644 --- a/StardewModdingAPI/Program.cs +++ b/StardewModdingAPI/Program.cs @@ -32,8 +32,12 @@ namespace StardewModdingAPI public static Form StardewForm; public static Thread gameThread; + public static Thread updateThread; public static Thread consoleInputThread; + public static int frozenTime; + public static bool infHealth, infStamina, infMoney, freezeTime; + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// private static void Main(string[] args) @@ -69,6 +73,10 @@ namespace StardewModdingAPI LogInfo("Initializing Console Input Thread..."); consoleInputThread.Start(); + updateThread = new Thread(UpdateThread); + LogInfo("Starting Update Thread..."); + updateThread.Start(); + Events.UpdateTick += Events_UpdateTick; LogInfo("Applying Final SDV Tweaks..."); StardewInvoke(() => @@ -84,6 +92,8 @@ namespace StardewModdingAPI ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + public static void RunGame() { try @@ -105,6 +115,9 @@ namespace StardewModdingAPI { LogError("Game failed to start: " + ex); } + ready = false; + if (updateThread != null && updateThread.ThreadState == ThreadState.Running) + updateThread.Abort(); if (consoleInputThread != null && consoleInputThread.ThreadState == ThreadState.Running) consoleInputThread.Abort(); Log("Game Execution Finished"); @@ -147,6 +160,36 @@ namespace StardewModdingAPI } } + public static void UpdateThread() + { + Events.InvokeUpdateInitialized(); + while (ready) + { + Events.InvokeUpdateTick(); + Thread.Sleep(1000 / 60); + } + } + + static void Events_UpdateTick() + { + if (infHealth) + { + Game1.player.health = Game1.player.maxHealth; + } + if (infStamina) + { + Game1.player.stamina = Game1.player.MaxStamina; + } + if (infMoney) + { + Game1.player.money = 999999; + } + if (freezeTime) + { + Game1.timeOfDay = frozenTime; + } + } + static void KeyboardInput_KeyDown(object sender, StardewValley.KeyEventArgs e) { switch (e.KeyCode) @@ -187,15 +230,22 @@ namespace StardewModdingAPI Command.RegisterCommand("stop", "Closes the game | stop").CommandFired += exit_CommandFired; Command.RegisterCommand("player_setname", "Sets the player's name | player_setname <object> <value>", new[] { "(player, pet, farm)<object> (String)<value> The target name" }).CommandFired += player_setName; - Command.RegisterCommand("player_setmoney", "Sets the player's money | player_setmoney <value>", new[] { "(Int32)<value> The target money" }).CommandFired += player_setMoney; - Command.RegisterCommand("player_setenergy", "Sets the player's energy | player_setenergy <value>", new[] { "(Int32)<value> The target energy" }).CommandFired += player_setEnergy; - Command.RegisterCommand("player_setmaxenergy", "Sets the player's max energy | player_setmaxenergy <value>", new[] { "(Int32)<value> The target max energy" }).CommandFired += player_setMaxEnergy; + Command.RegisterCommand("player_setmoney", "Sets the player's money | player_setmoney <value>|inf", new[] { "(Int32)<value> The target money" }).CommandFired += player_setMoney; + Command.RegisterCommand("player_setenergy", "Sets the player's energy | player_setenergy <value>|inf", new[] { "(Int32)<value> The target energy" }).CommandFired += player_setStamina; + Command.RegisterCommand("player_setmaxenergy", "Sets the player's max energy | player_setmaxenergy <value>", new[] { "(Int32)<value> The target max energy" }).CommandFired += player_setMaxStamina; + Command.RegisterCommand("player_sethealth", "Sets the player's health | player_sethealth <value>|inf", new[] { "(Int32)<value> The target health" }).CommandFired += player_setHealth; + Command.RegisterCommand("player_setmaxhealth", "Sets the player's max health | player_setmaxhealth <value>", new[] { "(Int32)<value> The target max health" }).CommandFired += player_setMaxHealth; + Command.RegisterCommand("player_setimmunity", "Sets the player's immunity | player_setimmunity <value>", new[] { "(Int32)<value> The target immunity" }).CommandFired += player_setImmunity; Command.RegisterCommand("player_setlevel", "Sets the player's specified skill to the specified value | player_setlevel <skill> <value>", new[] { "(luck, mining, combat, farming, fishing, foraging)<skill> (1-10)<value> The target level" }).CommandFired += player_setLevel; - Command.RegisterCommand("player_setspeed", "Sets the player's speed to the specified value?", new[] {"(Int32:5)<value> The target speed"}).CommandFired += player_setSpeed; + Command.RegisterCommand("player_setspeed", "Sets the player's speed to the specified value?", new[] {"(Int32)<value> The target speed [0 is normal]"}).CommandFired += player_setSpeed; Command.RegisterCommand("player_changecolour", "Sets the player's colour of the specified object | player_changecolor <object> <colour>", new[] { "(hair, eyes, pants)<object> (r,g,b)<colour>" }).CommandFired += player_changeColour; Command.RegisterCommand("player_changestyle", "Sets the player's style of the specified object | player_changecolor <object> <value>", new[] { "(hair, shirt, skin, acc, shoe, swim, gender)<object> (Int32)<value>" }).CommandFired += player_changeStyle; + Command.RegisterCommand("world_settime", "Sets the time to the specified value | world_settime <value>", new[] { "(Int32)<value> The target time [06:00 AM is 600]" }).CommandFired += world_setTime; + Command.RegisterCommand("world_freezetime", "Freezes or thaws time | world_freezetime <value>", new[] { "(0 - 1)<value> Whether or not to freeze time. 0 is thawed, 1 is frozen" }).CommandFired += world_freezeTime; + Command.RegisterCommand("world_setday", "Sets the day to the specified value | world_setday <value>", new[] { "(Int32)<value> The target day [1-28]" }).CommandFired += world_setDay; + Command.RegisterCommand("world_setseason", "Sets the season to the specified value | world_setseason <value>", new[] { "(winter, spring, summer, fall)<value> The target season" }).CommandFired += world_setSeason; } static void help_CommandFired(Command cmd) @@ -266,12 +316,12 @@ namespace StardewModdingAPI } else { - LogError("<object> is invalid"); + LogObjectInvalid(); } } else { - LogError("<object> and <value> must be specified"); + LogObjectValueNotSpecified(); } } @@ -279,45 +329,61 @@ namespace StardewModdingAPI { if (cmd.CalledArgs.Length > 0) { - int ou = 0; - if (Int32.TryParse(cmd.CalledArgs[0], out ou)) + if (cmd.CalledArgs[0] == "inf") { - Game1.player.Money = ou; - LogInfo("Set {0}'s money to {1}", Game1.player.Name, Game1.player.Money); + infMoney = true; } else { - LogError("<value> must be a whole number (Int32)"); + infMoney = false; + int ou = 0; + if (Int32.TryParse(cmd.CalledArgs[0], out ou)) + { + Game1.player.Money = ou; + LogInfo("Set {0}'s money to {1}", Game1.player.Name, Game1.player.Money); + } + else + { + LogValueNotInt32(); + } } } else { - LogError("<value> must be specified"); + LogValueNotSpecified(); } } - static void player_setEnergy(Command cmd) + static void player_setStamina(Command cmd) { if (cmd.CalledArgs.Length > 0) { - int ou = 0; - if (Int32.TryParse(cmd.CalledArgs[0], out ou)) + if (cmd.CalledArgs[0] == "inf") { - Game1.player.Stamina = ou; - LogInfo("Set {0}'s energy to {1}", Game1.player.Name, Game1.player.Stamina); + infStamina = true; } else { - LogError("<value> must be a whole number (Int32)"); + infStamina = false; + int ou = 0; + if (Int32.TryParse(cmd.CalledArgs[0], out ou)) + { + Game1.player.Stamina = ou; + LogInfo("Set {0}'s stamina to {1}", Game1.player.Name, Game1.player.Stamina); + } + else + { + LogValueNotInt32(); + } } } else { - LogError("<value> must be specified"); + LogValueNotSpecified(); } } - static void player_setMaxEnergy(Command cmd) + static void player_setMaxStamina(Command cmd) { if (cmd.CalledArgs.Length > 0) { @@ -325,16 +391,16 @@ namespace StardewModdingAPI if (Int32.TryParse(cmd.CalledArgs[0], out ou)) { Game1.player.MaxStamina = ou; - LogInfo("Set {0}'s max energy to {1}", Game1.player.Name, Game1.player.MaxStamina); + LogInfo("Set {0}'s max stamina to {1}", Game1.player.Name, Game1.player.MaxStamina); } else { - LogError("<value> must be a whole number (Int32)"); + LogValueNotInt32(); } } else { - LogError("<value> must be specified"); + LogValueNotSpecified(); } } @@ -373,7 +439,7 @@ namespace StardewModdingAPI } else { - LogError("<value> must be a whole number (Int32)"); + LogValueNotInt32(); } } else @@ -393,21 +459,20 @@ namespace StardewModdingAPI { if (cmd.CalledArgs[0].IsInt32()) { - Game1.player.Speed = cmd.CalledArgs[0].AsInt32(); - LogInfo("Set {0}'s speed to {1}", Game1.player.Name, Game1.player.Speed); + Game1.player.addedSpeed = cmd.CalledArgs[0].AsInt32(); + LogInfo("Set {0}'s added speed to {1}", Game1.player.Name, Game1.player.addedSpeed); } else { - LogError("<value> must be a whole number (Int32)"); + LogValueNotInt32(); } } else { - LogError("<value> must be specified"); + LogValueNotSpecified(); } } - static void player_changeColour(Command cmd) { if (cmd.CalledArgs.Length > 1) @@ -440,7 +505,7 @@ namespace StardewModdingAPI } else { - LogError("<object> is invalid"); + LogObjectInvalid(); } } else @@ -497,20 +562,190 @@ namespace StardewModdingAPI } else { - LogError("<value> is invalid"); + LogValueInvalid(); } } else { - LogError("<object> is invalid"); + LogObjectInvalid(); } } else { - LogError("<object> and <value> must be specified"); + LogObjectValueNotSpecified(); } } + static void world_freezeTime(Command cmd) + { + if (cmd.CalledArgs.Length > 0) + { + if (cmd.CalledArgs[0].IsInt32()) + { + if (cmd.CalledArgs[0].AsInt32() == 0 || cmd.CalledArgs[0].AsInt32() == 1) + { + freezeTime = cmd.CalledArgs[0].AsInt32() == 1; + frozenTime = freezeTime ? Game1.timeOfDay : 0; + LogInfo("Time is now " + (freezeTime ? "frozen" : "thawed")); + } + else + { + LogError("<value> should be 0 or 1"); + } + } + else + { + LogValueNotInt32(); + } + } + else + { + LogValueNotSpecified(); + } + } + + static void world_setTime(Command cmd) + { + if (cmd.CalledArgs.Length > 0) + { + if (cmd.CalledArgs[0].IsInt32()) + { + if (cmd.CalledArgs[0].AsInt32() <= 2600 && cmd.CalledArgs[0].AsInt32() >= 600) + { + Game1.timeOfDay = cmd.CalledArgs[0].AsInt32(); + frozenTime = freezeTime ? Game1.timeOfDay : 0; + LogInfo("Time set to: " + Game1.timeOfDay); + } + else + { + LogError("<value> should be between 600 and 2600 (06:00 AM - 02:00 AM [NEXT DAY])"); + } + } + else + { + LogValueNotInt32(); + } + } + else + { + LogValueNotSpecified(); + } + } + + static void world_setDay(Command cmd) + { + if (cmd.CalledArgs.Length > 0) + { + if (cmd.CalledArgs[0].IsInt32()) + { + if (cmd.CalledArgs[0].AsInt32() <= 28 && cmd.CalledArgs[0].AsInt32() > 0) + { + Game1.dayOfMonth = cmd.CalledArgs[0].AsInt32(); + } + else + { + LogError("<value> must be between 1 and 28"); + } + } + else + { + LogValueNotInt32(); + } + } + else + { + LogValueNotSpecified(); + } + } + + static void world_setSeason(Command cmd) + { + if (cmd.CalledArgs.Length > 0) + { + string obj = cmd.CalledArgs[0]; + string[] objs = "winter,spring,summer,fall".Split(new []{','}); + if (objs.Contains(obj)) + { + Game1.currentSeason = obj; + } + else + { + LogValueInvalid(); + } + } + else + { + LogValueNotSpecified(); + } + } + + static void player_setHealth(Command cmd) + { + if (cmd.CalledArgs.Length > 0) + { + if (cmd.CalledArgs[0] == "inf") + { + infHealth = true; + } + else + { + infHealth = false; + if (cmd.CalledArgs[0].IsInt32()) + { + Game1.player.health = cmd.CalledArgs[0].AsInt32(); + } + else + { + LogValueNotInt32(); + } + } + } + else + { + LogValueNotSpecified(); + } + } + + static void player_setMaxHealth(Command cmd) + { + if (cmd.CalledArgs.Length > 0) + { + if (cmd.CalledArgs[0].IsInt32()) + { + Game1.player.maxHealth = cmd.CalledArgs[0].AsInt32(); + } + else + { + LogValueNotInt32(); + } + } + else + { + LogValueNotSpecified(); + } + } + + static void player_setImmunity(Command cmd) + { + if (cmd.CalledArgs.Length > 0) + { + if (cmd.CalledArgs[0].IsInt32()) + { + Game1.player.immunity = cmd.CalledArgs[0].AsInt32(); + } + else + { + LogValueNotInt32(); + } + } + else + { + LogValueNotSpecified(); + } + } + + static void blank_command(Command cmd) { } + #endregion @@ -547,6 +782,31 @@ namespace StardewModdingAPI Console.ForegroundColor = ConsoleColor.Gray; } + public static void LogValueNotSpecified() + { + LogError("<value> must be specified"); + } + + public static void LogObjectValueNotSpecified() + { + LogError("<object> and <value> must be specified"); + } + + public static void LogValueInvalid() + { + LogError("<value> is invalid"); + } + + public static void LogObjectInvalid() + { + LogError("<object> is invalid"); + } + + public static void LogValueNotInt32() + { + LogError("<value> must be a whole number (Int32)"); + } + #endregion } } diff --git a/StardewModdingAPI/StardewModdingAPI.csproj b/StardewModdingAPI/StardewModdingAPI.csproj index 3b9d4a39..35a7c01f 100644 --- a/StardewModdingAPI/StardewModdingAPI.csproj +++ b/StardewModdingAPI/StardewModdingAPI.csproj @@ -80,6 +80,9 @@ <Content Include="icon.ico" /> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <PropertyGroup> + <PostBuildEvent>copy /y "$(SolutionDir)$(ProjectName)\$(OutDir)StardewModdingAPI.exe" "$(SolutionDir)Release\"</PostBuildEvent> + </PropertyGroup> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. <Target Name="BeforeBuild"> diff --git a/StardewModdingAPI/obj/x86/Debug/StardewModdingAPI.csproj.FileListAbsolute.txt b/StardewModdingAPI/obj/x86/Debug/StardewModdingAPI.csproj.FileListAbsolute.txt index c9ca0a86..5896e9ec 100644 --- a/StardewModdingAPI/obj/x86/Debug/StardewModdingAPI.csproj.FileListAbsolute.txt +++ b/StardewModdingAPI/obj/x86/Debug/StardewModdingAPI.csproj.FileListAbsolute.txt @@ -24,12 +24,11 @@ C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Ste C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\WindowsGame1.pdb C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.csprojResolveAssemblyReference.cache C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.exe.config -C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.exe -C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.pdb C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.exe C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.pdb C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Stardew Valley.exe C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\xTile.dll C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Lidgren.Network.dll C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Steamworks.NET.dll -C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.csprojResolveAssemblyReference.cache +C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.exe +C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.pdb |