summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Finlay <jtfinlay@ualberta.ca>2016-03-04 22:32:04 -0800
committerJames Finlay <jtfinlay@ualberta.ca>2016-03-04 22:55:47 -0800
commita5a32e148b44b406d131b11a0aeadebed6d496cb (patch)
treeae8134fd5aedac7f9e5da992f3b691e4079d62aa
parent9420dfb0719d7f00c36607a210c50dc4537a9626 (diff)
downloadSMAPI-a5a32e148b44b406d131b11a0aeadebed6d496cb.tar.gz
SMAPI-a5a32e148b44b406d131b11a0aeadebed6d496cb.tar.bz2
SMAPI-a5a32e148b44b406d131b11a0aeadebed6d496cb.zip
Pulled Logs into new Log object
- Greatly simplifies Program.cs - Removed the 'Colour' method so that logging is more consistent for users - willing to discuss this change. I believe it is beneficial. - Added uses of #DEBUG
-rw-r--r--StardewInjector/StardewHooker.cs6
-rw-r--r--StardewInjector/StardewInjector.cs6
-rw-r--r--StardewModdingAPI.sln8
-rw-r--r--StardewModdingAPI/Command.cs11
-rw-r--r--StardewModdingAPI/Events/Game.cs6
-rw-r--r--StardewModdingAPI/Events/Graphics.cs2
-rw-r--r--StardewModdingAPI/Inheritance/Menus/SGameMenu.cs2
-rw-r--r--StardewModdingAPI/Inheritance/SGame.cs25
-rw-r--r--StardewModdingAPI/Inheritance/SGameLocation.cs4
-rw-r--r--StardewModdingAPI/Inheritance/SObject.cs6
-rw-r--r--StardewModdingAPI/Log.cs172
-rw-r--r--StardewModdingAPI/Program.cs399
-rw-r--r--StardewModdingAPI/StardewModdingAPI.csproj1
-rw-r--r--TrainerMod/TrainerMod.cs123
14 files changed, 403 insertions, 368 deletions
diff --git a/StardewInjector/StardewHooker.cs b/StardewInjector/StardewHooker.cs
index a92b96c1..dbf1c5ef 100644
--- a/StardewInjector/StardewHooker.cs
+++ b/StardewInjector/StardewHooker.cs
@@ -29,7 +29,7 @@ namespace StardewInjector
}
catch (Exception ex)
{
- Program.LogError(ex);
+ Log.Error(ex);
return false;
}
}
@@ -57,7 +57,7 @@ namespace StardewInjector
}
catch (Exception ex)
{
- Program.LogError(ex);
+ Log.Error(ex);
return false;
}
}
@@ -97,7 +97,7 @@ namespace StardewInjector
}
catch (Exception ex)
{
- Program.LogError(ex);
+ Log.Error(ex);
}
}
diff --git a/StardewInjector/StardewInjector.cs b/StardewInjector/StardewInjector.cs
index 055a79f9..b67a8bc9 100644
--- a/StardewInjector/StardewInjector.cs
+++ b/StardewInjector/StardewInjector.cs
@@ -39,16 +39,16 @@ namespace StardewInjector
hooker.ApplyHooks();
hooker.Finalize();
- Program.LogInfo("INJECTOR ENTERED");
+ Log.Verbose("INJECTOR ENTERED");
}
else if (objects.Length > 0 && objects[0].AsBool() == true)
{
- Program.LogInfo("INJECTOR LAUNCHING");
+ Log.Verbose("INJECTOR LAUNCHING");
hooker.Run();
}
else
{
- Program.LogError("INVALID PARAMETERS FOR INJECTOR");
+ Log.Verbose("INVALID PARAMETERS FOR INJECTOR");
}
}
}
diff --git a/StardewModdingAPI.sln b/StardewModdingAPI.sln
index 7f30da48..4c7a44c4 100644
--- a/StardewModdingAPI.sln
+++ b/StardewModdingAPI.sln
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.21005.1
+# Visual Studio 14
+VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrainerMod", "TrainerMod\TrainerMod.csproj", "{28480467-1A48-46A7-99F8-236D95225359}"
EndProject
@@ -41,8 +41,8 @@ Global
{C9388F35-68D2-431C-88BB-E26286272256}.Release|x86.ActiveCfg = Release|Any CPU
{F1A573B0-F436-472C-AE29-0B91EA6B9F8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F1A573B0-F436-472C-AE29-0B91EA6B9F8F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F1A573B0-F436-472C-AE29-0B91EA6B9F8F}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
- {F1A573B0-F436-472C-AE29-0B91EA6B9F8F}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {F1A573B0-F436-472C-AE29-0B91EA6B9F8F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {F1A573B0-F436-472C-AE29-0B91EA6B9F8F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{F1A573B0-F436-472C-AE29-0B91EA6B9F8F}.Debug|x86.ActiveCfg = Debug|x86
{F1A573B0-F436-472C-AE29-0B91EA6B9F8F}.Debug|x86.Build.0 = Debug|x86
{F1A573B0-F436-472C-AE29-0B91EA6B9F8F}.Release|Any CPU.ActiveCfg = Release|Any CPU
diff --git a/StardewModdingAPI/Command.cs b/StardewModdingAPI/Command.cs
index 4bfc7564..71a2483b 100644
--- a/StardewModdingAPI/Command.cs
+++ b/StardewModdingAPI/Command.cs
@@ -1,9 +1,6 @@
using StardewModdingAPI.Events;
using System;
using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
namespace StardewModdingAPI
{
@@ -44,7 +41,7 @@ namespace StardewModdingAPI
}
else
{
- Program.LogError("Unknown Command");
+ Log.Error("Unknown Command");
}
}
@@ -60,12 +57,12 @@ namespace StardewModdingAPI
Command c = new Command(command, cdesc, args);
if (RegisteredCommands.Contains(c))
{
- Program.LogError("Command already registered! [{0}]", c.CommandName);
+ Log.Error("Command already registered! [{0}]", c.CommandName);
return RegisteredCommands.Find(x => x.Equals(c));
}
RegisteredCommands.Add(c);
- Program.LogColour(ConsoleColor.Cyan, "Registered command: " + command);
+ Log.Verbose(ConsoleColor.Cyan, "Registered command: " + command);
return c;
}
@@ -102,7 +99,7 @@ namespace StardewModdingAPI
{
if (CommandFired == null)
{
- Program.LogError("Command failed to fire because it's fire event is null: " + CommandName);
+ Log.Error("Command failed to fire because it's fire event is null: " + CommandName);
return;
}
CommandFired.Invoke(this, new EventArgsCommand(this));
diff --git a/StardewModdingAPI/Events/Game.cs b/StardewModdingAPI/Events/Game.cs
index d155ba2e..6290d2c7 100644
--- a/StardewModdingAPI/Events/Game.cs
+++ b/StardewModdingAPI/Events/Game.cs
@@ -26,7 +26,7 @@ namespace StardewModdingAPI.Events
}
catch (Exception ex)
{
- Program.LogError("An exception occured in XNA Initialize: " + ex.ToString());
+ Log.Error("An exception occured in XNA Initialize: " + ex.ToString());
}
}
@@ -38,7 +38,7 @@ namespace StardewModdingAPI.Events
}
catch (Exception ex)
{
- Program.LogError("An exception occured in XNA LoadContent: " + ex.ToString());
+ Log.Error("An exception occured in XNA LoadContent: " + ex.ToString());
}
}
@@ -50,7 +50,7 @@ namespace StardewModdingAPI.Events
}
catch (Exception ex)
{
- Program.LogError("An exception occured in XNA UpdateTick: " + ex.ToString());
+ Log.Error("An exception occured in XNA UpdateTick: " + ex.ToString());
}
}
}
diff --git a/StardewModdingAPI/Events/Graphics.cs b/StardewModdingAPI/Events/Graphics.cs
index 62bffe82..60ee7a74 100644
--- a/StardewModdingAPI/Events/Graphics.cs
+++ b/StardewModdingAPI/Events/Graphics.cs
@@ -19,7 +19,7 @@ namespace StardewModdingAPI.Events
}
catch (Exception ex)
{
- Program.LogError("An exception occured in XNA DrawTick: " + ex.ToString());
+ Log.Error("An exception occured in XNA DrawTick: " + ex.ToString());
}
}
diff --git a/StardewModdingAPI/Inheritance/Menus/SGameMenu.cs b/StardewModdingAPI/Inheritance/Menus/SGameMenu.cs
index 8b883fb6..721e04d8 100644
--- a/StardewModdingAPI/Inheritance/Menus/SGameMenu.cs
+++ b/StardewModdingAPI/Inheritance/Menus/SGameMenu.cs
@@ -39,7 +39,7 @@ namespace StardewModdingAPI.Inheritance.Menus
{
if (pages[currentTab] is InventoryPage)
{
- Program.LogInfo("INV SCREEN");
+ Log.Verbose("INV SCREEN");
}
else
{
diff --git a/StardewModdingAPI/Inheritance/SGame.cs b/StardewModdingAPI/Inheritance/SGame.cs
index 69439209..c7b07c43 100644
--- a/StardewModdingAPI/Inheritance/SGame.cs
+++ b/StardewModdingAPI/Inheritance/SGame.cs
@@ -75,9 +75,8 @@ namespace StardewModdingAPI.Inheritance
{
instance = this;
- if (Program.debug)
- {
- SaveGame.serializer = new XmlSerializer(typeof (SaveGame), new Type[28]
+#if DEBUG
+ SaveGame.serializer = new XmlSerializer(typeof (SaveGame), new Type[28]
{
typeof (Tool),
typeof (GameLocation),
@@ -108,12 +107,12 @@ namespace StardewModdingAPI.Inheritance
typeof (TerrainFeature),
typeof (SObject)
});
- }
+#endif
}
protected override void Initialize()
{
- Program.Log("XNA Initialize");
+ Log.Verbose("XNA Initialize");
ModItems = new Dictionary<Int32, SObject>();
PreviouslyPressedKeys = new Keys[0];
base.Initialize();
@@ -122,7 +121,7 @@ namespace StardewModdingAPI.Inheritance
protected override void LoadContent()
{
- Program.Log("XNA LoadContent");
+ Log.Verbose("XNA LoadContent");
base.LoadContent();
Events.GameEvents.InvokeLoadContent();
}
@@ -137,7 +136,7 @@ namespace StardewModdingAPI.Inheritance
}
catch (Exception ex)
{
- Program.LogError("An error occured in the base update loop: " + ex);
+ Log.Error("An error occured in the base update loop: " + ex);
Console.ReadKey();
}
@@ -169,7 +168,7 @@ namespace StardewModdingAPI.Inheritance
{
if (modItem.HasBeenRegistered)
{
- Program.LogError("The item {0} has already been registered with ID {1}", modItem.Name, modItem.RegisteredId);
+ Log.Error("The item {0} has already been registered with ID {1}", modItem.Name, modItem.RegisteredId);
return modItem.RegisteredId;
}
Int32 newId = LowestModItemID;
@@ -189,14 +188,14 @@ namespace StardewModdingAPI.Inheritance
{
return ModItems.ElementAt(id).Value.Clone();
}
- Program.LogError("ModItem Dictionary does not contain index: " + id.ToString());
+ Log.Error("ModItem Dictionary does not contain index: " + id.ToString());
return null;
}
if (ModItems.ContainsKey(id))
{
return ModItems[id].Clone();
}
- Program.LogError("ModItem Dictionary does not contain ID: " + id.ToString());
+ Log.Error("ModItem Dictionary does not contain ID: " + id.ToString());
return null;
}
@@ -212,7 +211,7 @@ namespace StardewModdingAPI.Inheritance
GameLocation gl = locations.FirstOrDefault(x => x.name == name);
if (gl != null)
{
- Program.LogDebug("A custom location was created for the new name: " + name);
+ Log.Debug("A custom location was created for the new name: " + name);
SGameLocation s = SGameLocation.ConstructFromBaseClass(gl);
ModLocations.Add(s);
return s;
@@ -220,13 +219,13 @@ namespace StardewModdingAPI.Inheritance
if (currentLocation != null && currentLocation.name == name)
{
gl = currentLocation;
- Program.LogDebug("A custom location was created from the current location for the new name: " + name);
+ Log.Debug("A custom location was created from the current location for the new name: " + name);
SGameLocation s = SGameLocation.ConstructFromBaseClass(gl);
ModLocations.Add(s);
return s;
}
- Program.LogDebug("A custom location could not be created for: " + name);
+ Log.Debug("A custom location could not be created for: " + name);
return null;
}
diff --git a/StardewModdingAPI/Inheritance/SGameLocation.cs b/StardewModdingAPI/Inheritance/SGameLocation.cs
index 0787c0e1..437b0bfa 100644
--- a/StardewModdingAPI/Inheritance/SGameLocation.cs
+++ b/StardewModdingAPI/Inheritance/SGameLocation.cs
@@ -25,7 +25,7 @@ namespace StardewModdingAPI.Inheritance
s.BaseGameLocation = baseClass;
s.name = baseClass.name;
- Program.LogDebug("CONSTRUCTED: " + s.name);
+ Log.Debug("CONSTRUCTED: " + s.name);
if (copyAllData)
{
@@ -42,7 +42,7 @@ namespace StardewModdingAPI.Inheritance
}
catch (Exception ex)
{
- Program.LogError(ex);
+ Log.Error(ex);
}
}
}
diff --git a/StardewModdingAPI/Inheritance/SObject.cs b/StardewModdingAPI/Inheritance/SObject.cs
index 25cdb26e..28254c24 100644
--- a/StardewModdingAPI/Inheritance/SObject.cs
+++ b/StardewModdingAPI/Inheritance/SObject.cs
@@ -78,7 +78,7 @@ namespace StardewModdingAPI.Inheritance
public override void draw(SpriteBatch spriteBatch, int xNonTile, int yNonTile, float layerDepth, float alpha = 1)
{
- Program.LogInfo("THIS DRAW FUNCTION IS NOT IMPLEMENTED I WANT TO KNOW WHERE IT IS CALLED");
+ Log.Debug("THIS DRAW FUNCTION IS NOT IMPLEMENTED I WANT TO KNOW WHERE IT IS CALLED");
return;
try
{
@@ -105,7 +105,7 @@ namespace StardewModdingAPI.Inheritance
}
catch (Exception ex)
{
- Program.LogError(ex.ToString());
+ Log.Error(ex.ToString());
Console.ReadKey();
}
}
@@ -249,7 +249,7 @@ namespace StardewModdingAPI.Inheritance
s.boundingBox = new Rectangle(x / Game1.tileSize * Game1.tileSize, y / Game1.tileSize * Game1.tileSize, this.boundingBox.Width, this.boundingBox.Height);
location.objects.Add(key, s);
- Program.LogInfo("{0} - {1}", this.GetHashCode(), s.GetHashCode());
+ Log.Verbose("{0} - {1}", this.GetHashCode(), s.GetHashCode());
return true;
}
diff --git a/StardewModdingAPI/Log.cs b/StardewModdingAPI/Log.cs
new file mode 100644
index 00000000..2784b709
--- /dev/null
+++ b/StardewModdingAPI/Log.cs
@@ -0,0 +1,172 @@
+using System;
+using System.IO;
+using System.Threading;
+
+namespace StardewModdingAPI
+{
+
+ /// <summary>
+ /// Class to organize logging calls.
+ /// </summary>
+ public class Log
+ {
+ private static StreamWriter _logStream;
+ private static string _logPath;
+
+ /// <summary>
+ /// Set up the logging stream
+ /// </summary>
+ /// <param name="logPath"></param>
+ public static void Initialize(string logPath)
+ {
+ _logPath = logPath;
+ var logFile = string.Format("{0}\\MODDED_ProgramLog.Log_LATEST.txt", logPath);
+ try
+ {
+ _logStream = new StreamWriter(logFile, false);
+ }
+ catch (Exception)
+ {
+ // TODO: not use general exception
+ Log.Error("Could not initialize LogStream - Logging is disabled");
+ }
+ }
+
+ /// <summary>
+ /// Print provided parameters to the console/file as applicable
+ /// </summary>
+ /// <param name="message">Desired message</param>
+ /// <param name="suppressMessage">When true, writes to ONLY console and not the log file.</param>
+ /// <param name="values">Additional params to be added to the message</param>
+ private static void PrintLog(object message, bool disableLogging, params object[] values)
+ {
+ string logOutput = string.Format("[{0}] {1}", System.DateTime.Now.ToLongTimeString(), String.Format(message.ToString(), values));
+ Console.WriteLine(logOutput);
+
+ if (_logStream != null && !disableLogging)
+ {
+ _logStream.WriteLine(logOutput);
+ _logStream.Flush();
+ }
+ }
+
+ /// <summary>
+ /// Successful message to display to console and logging.
+ /// </summary>
+ /// <param name="message"></param>
+ /// <param name="values"></param>
+ public static void Success(object message, params object[] values)
+ {
+ Console.ForegroundColor = ConsoleColor.Green;
+ Log.PrintLog(message?.ToString(), false, values);
+ Console.ForegroundColor = ConsoleColor.Gray;
+ }
+
+ /// <summary>
+ /// Generic comment to display to console and logging.
+ /// </summary>
+ /// <param name="message"></param>
+ /// <param name="values"></param>
+ public static void Verbose(object message, params object[] values)
+ {
+ Log.PrintLog(message?.ToString(), false, values);
+ }
+
+ /// <summary>
+ /// Additional comment to display to console and logging.
+ /// </summary>
+ /// <param name="message"></param>
+ /// <param name="values"></param>
+ public static void Comment(object message, params object[] values)
+ {
+ Console.ForegroundColor = ConsoleColor.Yellow;
+ Log.PrintLog(message?.ToString(), false, values);
+ Console.ForegroundColor = ConsoleColor.Gray;
+ }
+
+ /// <summary>
+ /// Message for only console. Does not appear in logging.
+ /// </summary>
+ /// <param name="message"></param>
+ /// <param name="values"></param>
+ public static void Info(object message, params object[] values)
+ {
+ Log.PrintLog(message.ToString(), true, values);
+ }
+
+ /// <summary>
+ /// Important message indicating an error.
+ /// </summary>
+ /// <param name="message"></param>
+ /// <param name="values"></param>
+ public static void Error(object message, params object[] values)
+ {
+ Console.ForegroundColor = ConsoleColor.Red;
+ Log.PrintLog(message.ToString(), false, values);
+ Console.ForegroundColor = ConsoleColor.Gray;
+ }
+
+ /// <summary>
+ /// A message displayed only while in DEBUG mode
+ /// </summary>
+ /// <param name="message"></param>
+ /// <param name="values"></param>
+ public static void Debug(object message, params object[] values)
+ {
+#if DEBUG
+ Console.ForegroundColor = ConsoleColor.Yellow;
+ Log.PrintLog(message.ToString(), false, values);
+ Console.ForegroundColor = ConsoleColor.Gray;
+#endif
+ }
+
+ /// <summary>
+ /// Catch unhandled exception from the application
+ /// </summary>
+ /// <remarks>Should be moved out of here if we do more than just log the exception.</remarks>
+ public static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
+ {
+ Console.WriteLine("An exception has been caught");
+ File.WriteAllText(_logPath + "\\MODDED_ErrorLog.Log_" + Extensions.Random.Next(100000000, 999999999) + ".txt", e.ExceptionObject.ToString());
+ }
+
+ /// <summary>
+ /// Catch thread exception from the application
+ /// </summary>
+ /// <remarks>Should be moved out of here if we do more than just log the exception.</remarks>
+ public static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
+ {
+ Console.WriteLine("A thread exception has been caught");
+ File.WriteAllText(_logPath + "\\MODDED_ErrorLog.Log_" + Extensions.Random.Next(100000000, 999999999) + ".txt", e.Exception.ToString());
+ }
+
+ // I'm including the following for now because they have a lot of references with different uses.
+ // They should be removed since they do not provide any insight into actual problems, and other log methods should be used.
+
+ public static void LogValueNotSpecified()
+ {
+ Error("<value> must be specified");
+ }
+
+ public static void LogObjectValueNotSpecified()
+ {
+ Error("<object> and <value> must be specified");
+ }
+
+ public static void LogValueInvalid()
+ {
+ Error("<value> is invalid");
+ }
+
+ public static void LogObjectInvalid()
+ {
+ Error("<object> is invalid");
+ }
+
+ public static void LogValueNotInt32()
+ {
+ Error("<value> must be a whole number (Int32)");
+ }
+
+ }
+}
diff --git a/StardewModdingAPI/Program.cs b/StardewModdingAPI/Program.cs
index 000ddab0..3e267af5 100644
--- a/StardewModdingAPI/Program.cs
+++ b/StardewModdingAPI/Program.cs
@@ -1,29 +1,18 @@
-using System;
-using System.CodeDom.Compiler;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using StardewModdingAPI.Events;
+using StardewModdingAPI.Inheritance;
+using StardewModdingAPI.Inheritance.Menus;
+using StardewValley;
+using StardewValley.Menus;
+using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Reflection;
-using System.Reflection.Emit;
-using System.Text;
using System.Threading;
-using System.Threading.Tasks;
using System.Windows.Forms;
-using Microsoft.CSharp;
-using Microsoft.Xna.Framework;
-using Microsoft.Xna.Framework.Graphics;
-using Microsoft.Xna.Framework.Input;
-using StardewModdingAPI.Inheritance;
-using StardewModdingAPI.Inheritance.Menus;
-using StardewValley;
-using StardewValley.Menus;
-using StardewValley.Minigames;
-using StardewValley.Network;
-using StardewValley.Tools;
-using Keys = Microsoft.Xna.Framework.Input.Keys;
-using Object = StardewValley.Object;
-using StardewModdingAPI.Events;
namespace StardewModdingAPI
{
@@ -32,7 +21,7 @@ namespace StardewModdingAPI
public static string ExecutionPath { get; private set; }
public static string DataPath = Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley"));
public static List<string> ModPaths = new List<string>();
- public static List<string> ModContentPaths = new List<string>();
+ public static List<string> ModContentPaths = new List<string>();
public static string LogPath = Path.Combine(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley")), "ErrorLogs");
public static string CurrentLog { get; private set; }
public static StreamWriter LogStream { get; private set; }
@@ -51,25 +40,22 @@ namespace StardewModdingAPI
public static Thread consoleInputThread;
public const string Version = "0.36 Alpha";
- public const bool debug = false;
- public static bool disableLogging { get; private set; }
public static bool StardewInjectorLoaded { get; private set; }
public static Mod StardewInjectorMod { get; private set; }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
private static void Main(string[] args)
{
Console.Title = "Stardew Modding API Console";
- Console.Title += " - Version " + Version;
- if (debug)
- Console.Title += " - DEBUG IS NOT FALSE, AUTHOUR NEEDS TO REUPLOAD THIS VERSION";
-
- //TODO: Have an app.config and put the paths inside it so users can define locations to load mods from
+ Console.Title += " - Version " + Version;
+#if DEBUG
+ Console.Title += " - DEBUG IS NOT FALSE, AUTHOUR NEEDS TO REUPLOAD THIS VERSION";
+#endif
+
+ //TODO: Have an app.config and put the paths inside it so users can define locations to load mods from
ExecutionPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
ModPaths.Add(Path.Combine(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley")), "Mods"));
ModPaths.Add(Path.Combine(ExecutionPath, "Mods"));
@@ -88,7 +74,7 @@ namespace StardewModdingAPI
}
catch (Exception ex)
{
- LogError("Could not create a missing ModPath: " + ModPath + "\n\n" + ex);
+ Log.Error("Could not create a missing ModPath: " + ModPath + "\n\n" + ex);
}
}
//Same for content
@@ -101,7 +87,7 @@ namespace StardewModdingAPI
}
catch (Exception ex)
{
- LogError("Could not create a missing ModContentPath: " + ModContentPath + "\n\n" + ex);
+ Log.Error("Could not create a missing ModContentPath: " + ModContentPath + "\n\n" + ex);
}
}
//And then make sure we have an errorlog dir
@@ -112,32 +98,15 @@ namespace StardewModdingAPI
}
catch (Exception ex)
{
- LogError("Could not create the missing ErrorLogs path: " + LogPath + "\n\n" + ex);
- }
-
- //Define the path to the current log file
- CurrentLog = LogPath + "\\MODDED_ProgramLog_LATEST"/* + System.DateTime.Now.Ticks + */ + ".txt";
-
- Log(ExecutionPath, false);
-
- //Create a writer to the log file
- try
- {
- LogStream = new StreamWriter(CurrentLog, false);
- }
- catch (Exception ex)
- {
- disableLogging = true;
- LogError("Could not initialize LogStream - Logging is disabled");
+ Log.Error("Could not create the missing ErrorLogs path: " + LogPath + "\n\n" + ex);
}
-
- LogInfo("Initializing SDV Assembly...");
+ Log.Info("Initializing SDV Assembly...");
if (!File.Exists(ExecutionPath + "\\Stardew Valley.exe"))
{
//If the api isn't next to SDV.exe then terminate. Though it'll crash before we even get here w/o sdv.exe. Perplexing.
- LogError("Could not find: " + ExecutionPath + "\\Stardew Valley.exe");
- LogError("The API will now terminate.");
+ Log.Error("Could not find: " + ExecutionPath + "\\Stardew Valley.exe");
+ Log.Error("The API will now terminate.");
Console.ReadKey();
Environment.Exit(-4);
}
@@ -153,16 +122,16 @@ namespace StardewModdingAPI
{
foreach (String s in Directory.GetFiles(ModPath, "StardewInjector.dll"))
{
- LogColour(ConsoleColor.Green, "Found Stardew Injector DLL: " + s);
+ Log.Success(ConsoleColor.Green, "Found Stardew Injector DLL: " + s);
try
{
Assembly mod = Assembly.UnsafeLoadFrom(s); //to combat internet-downloaded DLLs
- if (mod.DefinedTypes.Count(x => x.BaseType == typeof (Mod)) > 0)
+ if (mod.DefinedTypes.Count(x => x.BaseType == typeof(Mod)) > 0)
{
- LogColour(ConsoleColor.Green, "Loading Injector DLL...");
- TypeInfo tar = mod.DefinedTypes.First(x => x.BaseType == typeof (Mod));
- Mod m = (Mod) mod.CreateInstance(tar.ToString());
+ Log.Success("Loading Injector DLL...");
+ TypeInfo tar = mod.DefinedTypes.First(x => x.BaseType == typeof(Mod));
+ Mod m = (Mod)mod.CreateInstance(tar.ToString());
Console.WriteLine("LOADED: {0} by {1} - Version {2} | Description: {3}", m.Name, m.Authour, m.Version, m.Description);
m.Entry(false);
StardewInjectorLoaded = true;
@@ -170,12 +139,12 @@ namespace StardewModdingAPI
}
else
{
- LogError("Invalid Mod DLL");
+ Log.Error("Invalid Mod DLL");
}
}
catch (Exception ex)
{
- LogError("Failed to load mod '{0}'. Exception details:\n" + ex, s);
+ Log.Error("Failed to load mod '{0}'. Exception details:\n" + ex, s);
}
}
}
@@ -190,7 +159,7 @@ namespace StardewModdingAPI
{
//Stardew_Injector Mode
StardewInjectorLoaded = true;
- Program.LogInfo("STARDEW_INJECTOR DETECTED, LAUNCHING USING INJECTOR CALLS");
+ Program.Log.LogInfo("STARDEW_INJECTOR DETECTED, LAUNCHING USING INJECTOR CALLS");
Assembly inj = Assembly.UnsafeLoadFrom(ExecutionPath + "\\Stardew_Injector.exe");
Type prog = inj.GetType("Stardew_Injector.Program", true);
FieldInfo hooker = prog.GetField("hooker", BindingFlags.NonPublic | BindingFlags.Static);
@@ -221,27 +190,27 @@ namespace StardewModdingAPI
#endregion
//Change the game's version
- LogInfo("Injecting New SDV Version...");
+ Log.Info("Injecting New SDV Version...");
Game1.version += "-Z_MODDED | SMAPI " + Version;
//Create the thread for the game to run in.
gameThread = new Thread(RunGame);
- LogInfo("Starting SDV...");
+ Log.Info("Starting SDV...");
gameThread.Start();
//I forget.
- SGame.GetStaticFields();
-
+ SGame.GetStaticFields();
+
while (!ready)
{
//Wait for the game to load up
}
//SDV is running
- Log("SDV Loaded Into Memory");
+ Log.Comment("SDV Loaded Into Memory");
//Create definition to listen for input
- LogInfo("Initializing Console Input Thread...");
+ Log.Verbose("Initializing Console Input Thread...");
consoleInputThread = new Thread(ConsoleInputThread);
//The only command in the API (at least it should be, for now)\
@@ -251,29 +220,29 @@ namespace StardewModdingAPI
//Subscribe to events
Events.ControlEvents.KeyPressed += Events_KeyPressed;
- Events.GameEvents.LoadContent += Events_LoadContent;
- //Events.MenuChanged += Events_MenuChanged; //Idk right now
- if (debug)
- {
- //Experimental
- //Events.LocationsChanged += Events_LocationsChanged;
- //Events.CurrentLocationChanged += Events_CurrentLocationChanged;
- }
+ Events.GameEvents.LoadContent += Events_LoadContent;
+ //Events.MenuChanged += Events_MenuChanged; //Idk right now
+
+#if DEBUG
+ //Experimental
+ //Events.LocationsChanged += Events_LocationsChanged;
+ //Events.CurrentLocationChanged += Events_CurrentLocationChanged;
+#endif
//Do tweaks using winforms invoke because I'm lazy
- LogInfo("Applying Final SDV Tweaks...");
+ Log.Verbose("Applying Final SDV Tweaks...");
StardewInvoke(() =>
- {
- gamePtr.IsMouseVisible = false;
- gamePtr.Window.Title = "Stardew Valley - Version " + Game1.version;
- StardewForm.Resize += Events.GraphicsEvents.InvokeResize;
+ {
+ gamePtr.IsMouseVisible = false;
+ gamePtr.Window.Title = "Stardew Valley - Version " + Game1.version;
+ StardewForm.Resize += Events.GraphicsEvents.InvokeResize;
});
//Game's in memory now, send the event
- LogInfo("Game Loaded");
+ Log.Verbose("Game Loaded");
Events.GameEvents.InvokeGameLoaded();
- LogColour(ConsoleColor.Cyan, "Type 'help' for help, or 'help <cmd>' for a command's usage");
+ Log.Comment(ConsoleColor.Cyan, "Type 'help' for help, or 'help <cmd>' for a command's usage");
//Begin listening to input
consoleInputThread.Start();
@@ -288,8 +257,8 @@ namespace StardewModdingAPI
if (consoleInputThread != null && consoleInputThread.ThreadState == ThreadState.Running)
consoleInputThread.Abort();
- LogInfo("Game Execution Finished");
- LogInfo("Shutting Down...");
+ Log.Verbose("Game Execution Finished");
+ Log.Verbose("Shutting Down...");
Thread.Sleep(100);
/*
int time = 0;
@@ -307,26 +276,22 @@ namespace StardewModdingAPI
}
*/
Environment.Exit(0);
- }
-
-
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
+ }
+
+
+
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public static void RunGame()
{
- //Does this even do anything???
- Application.ThreadException += Application_ThreadException;
+ Application.ThreadException += Log.Application_ThreadException;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
- AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
- //I've yet to see it called :|
+ AppDomain.CurrentDomain.UnhandledException += Log.CurrentDomain_UnhandledException;
try
{
gamePtr = new SGame();
- LogInfo("Patching SDV Graphics Profile...");
+ Log.Verbose("Patching SDV Graphics Profile...");
Game1.graphics.GraphicsProfile = GraphicsProfile.HiDef;
LoadMods();
@@ -356,7 +321,7 @@ namespace StardewModdingAPI
}
catch (Exception ex)
{
- LogError("Game failed to start: " + ex);
+ Log.Error("Game failed to start: " + ex);
}
}
@@ -375,7 +340,7 @@ namespace StardewModdingAPI
public static void LoadMods()
{
- LogColour(ConsoleColor.Green, "LOADING MODS");
+ Log.Verbose("LOADING MODS");
int loadedMods = 0;
foreach (string ModPath in ModPaths)
{
@@ -383,32 +348,32 @@ namespace StardewModdingAPI
{
if (s.Contains("StardewInjector"))
continue;
- LogColour(ConsoleColor.Green, "Found DLL: " + s);
+ Log.Success("Found DLL: " + s);
try
{
Assembly mod = Assembly.UnsafeLoadFrom(s); //to combat internet-downloaded DLLs
- if (mod.DefinedTypes.Count(x => x.BaseType == typeof (Mod)) > 0)
+ if (mod.DefinedTypes.Count(x => x.BaseType == typeof(Mod)) > 0)
{
- LogColour(ConsoleColor.Green, "Loading Mod DLL...");
- TypeInfo tar = mod.DefinedTypes.First(x => x.BaseType == typeof (Mod));
- Mod m = (Mod) mod.CreateInstance(tar.ToString());
+ Log.Verbose("Loading Mod DLL...");
+ TypeInfo tar = mod.DefinedTypes.First(x => x.BaseType == typeof(Mod));
+ Mod m = (Mod)mod.CreateInstance(tar.ToString());
Console.WriteLine("LOADED MOD: {0} by {1} - Version {2} | Description: {3}", m.Name, m.Authour, m.Version, m.Description);
loadedMods += 1;
m.Entry();
}
else
{
- LogError("Invalid Mod DLL");
+ Log.Error("Invalid Mod DLL");
}
}
catch (Exception ex)
{
- LogError("Failed to load mod '{0}'. Exception details:\n" + ex, s);
+ Log.Error("Failed to load mod '{0}'. Exception details:\n" + ex, s);
}
}
}
- LogColour(ConsoleColor.Green, "LOADED {0} MODS", loadedMods);
+ Log.Success("LOADED {0} MODS", loadedMods);
}
public static void ConsoleInputThread()
@@ -423,190 +388,92 @@ namespace StardewModdingAPI
static void Events_LoadContent(object o, EventArgs e)
{
- LogInfo("Initializing Debug Assets...");
+ Log.Info("Initializing Debug Assets...");
DebugPixel = new Texture2D(Game1.graphics.GraphicsDevice, 1, 1);
- DebugPixel.SetData(new Color[] { Color.White });
-
- if (debug)
- {
- LogColour(ConsoleColor.Magenta, "REGISTERING BASE CUSTOM ITEM");
- SObject so = new SObject();
- so.Name = "Mario Block";
- so.CategoryName = "SMAPI Test Mod";
- so.Description = "It's a block from Mario!\nLoaded in realtime by SMAPI.";
- so.Texture = Texture2D.FromStream(Game1.graphics.GraphicsDevice, new FileStream(ModContentPaths[0] + "\\Test.png", FileMode.Open));
- so.IsPassable = true;
- so.IsPlaceable = true;
- LogColour(ConsoleColor.Cyan, "REGISTERED WITH ID OF: " + SGame.RegisterModItem(so));
-
- LogColour(ConsoleColor.Magenta, "REGISTERING SECOND CUSTOM ITEM");
- SObject so2 = new SObject();
- so2.Name = "Mario Painting";
- so2.CategoryName = "SMAPI Test Mod";
- so2.Description = "It's a painting of a creature from Mario!\nLoaded in realtime by SMAPI.";
- so2.Texture = Texture2D.FromStream(Game1.graphics.GraphicsDevice, new FileStream(ModContentPaths[0] + "\\PaintingTest.png", FileMode.Open));
- so2.IsPassable = true;
- so2.IsPlaceable = true;
- LogColour(ConsoleColor.Cyan, "REGISTERED WITH ID OF: " + SGame.RegisterModItem(so2));
- }
-
- if (debug)
- Command.CallCommand("load");
+ DebugPixel.SetData(new Color[] { Color.White });
+
+#if DEBUG
+ Log.Verbose("REGISTERING BASE CUSTOM ITEM");
+ SObject so = new SObject();
+ so.Name = "Mario Block";
+ so.CategoryName = "SMAPI Test Mod";
+ so.Description = "It's a block from Mario!\nLoaded in realtime by SMAPI.";
+ so.Texture = Texture2D.FromStream(Game1.graphics.GraphicsDevice, new FileStream(ModContentPaths[0] + "\\Test.png", FileMode.Open));
+ so.IsPassable = true;
+ so.IsPlaceable = true;
+ Log.Verbose("REGISTERED WITH ID OF: " + SGame.RegisterModItem(so));
+
+ Log.Verbose("REGISTERING SECOND CUSTOM ITEM");
+ SObject so2 = new SObject();
+ so2.Name = "Mario Painting";
+ so2.CategoryName = "SMAPI Test Mod";
+ so2.Description = "It's a painting of a creature from Mario!\nLoaded in realtime by SMAPI.";
+ so2.Texture = Texture2D.FromStream(Game1.graphics.GraphicsDevice, new FileStream(ModContentPaths[0] + "\\PaintingTest.png", FileMode.Open));
+ so2.IsPassable = true;
+ so2.IsPlaceable = true;
+ Log.Verbose("REGISTERED WITH ID OF: " + SGame.RegisterModItem(so2));
+
+ Command.CallCommand("load");
+#endif
}
static void Events_KeyPressed(object o, EventArgsKeyPressed e)
- {
-
+ {
+
}
static void Events_MenuChanged(IClickableMenu newMenu)
{
- LogInfo("NEW MENU: " + newMenu.GetType());
+ Log.Verbose("NEW MENU: " + newMenu.GetType());
if (newMenu is GameMenu)
{
Game1.activeClickableMenu = SGameMenu.ConstructFromBaseClass(Game1.activeClickableMenu as GameMenu);
}
}
+
static void Events_LocationsChanged(List<GameLocation> newLocations)
- {
- if (debug)
- {
- SGame.ModLocations = SGameLocation.ConstructFromBaseClasses(Game1.locations);
- }
+ {
+#if DEBUG
+ SGame.ModLocations = SGameLocation.ConstructFromBaseClasses(Game1.locations);
+#endif
}
static void Events_CurrentLocationChanged(GameLocation newLocation)
- {
- //SGame.CurrentLocation = null;
- //System.Threading.Thread.Sleep(10);
- if (debug)
- {
- Console.WriteLine(newLocation.name);
- SGame.CurrentLocation = SGame.LoadOrCreateSGameLocationFromName(newLocation.name);
- }
+ {
+ //SGame.CurrentLocation = null;
+ //System.Threading.Thread.Sleep(10);
+#if DEBUG
+ Console.WriteLine(newLocation.name);
+ SGame.CurrentLocation = SGame.LoadOrCreateSGameLocationFromName(newLocation.name);
+#endif
//Game1.currentLocation = SGame.CurrentLocation;
- //LogInfo(((SGameLocation) newLocation).name);
- //LogInfo("LOC CHANGED: " + SGame.currentLocation.name);
+ //Log.LogComment(((SGameLocation) newLocation).name);
+ //Log.LogComment("LOC CHANGED: " + SGame.currentLocation.name);
}
public static void StardewInvoke(Action a)
{
StardewForm.Invoke(a);
- }
-
- static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
- {
- Console.WriteLine("An exception has been caught");
- File.WriteAllText(Program.LogPath + "\\MODDED_ErrorLog_" + Extensions.Random.Next(100000000, 999999999) + ".txt", e.ExceptionObject.ToString());
- }
-
- static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
- {
- Console.WriteLine("A thread exception has been caught");
- File.WriteAllText(Program.LogPath + "\\MODDED_ErrorLog_" + Extensions.Random.Next(100000000, 999999999) + ".txt", e.Exception.ToString());
- }
-
- static void help_CommandFired(object o, EventArgsCommand e)
- {
- if (e.Command.CalledArgs.Length > 0)
- {
- Command fnd = Command.FindCommand(e.Command.CalledArgs[0]);
- if (fnd == null)
- LogError("The command specified could not be found");
- else
- {
- if (fnd.CommandArgs.Length > 0)
- LogInfo("{0}: {1} - {2}", fnd.CommandName, fnd.CommandDesc, fnd.CommandArgs.ToSingular());
- else
- LogInfo("{0}: {1}", fnd.CommandName, fnd.CommandDesc);
- }
- }
- else
- LogInfo("Commands: " + Command.RegisteredCommands.Select(x => x.CommandName).ToSingular());
- }
-
- #region Logging
-
- public static void Log(object o, params object[] format)
- {
- if (format.Length > 0)
- {
- if (format[0] is bool)
- {
- if ((bool)format[0] == false)
- {
- //suppress logging to file
- Console.WriteLine("[{0}] {1}", System.DateTime.Now.ToLongTimeString(), String.Format(o.ToString(), format));
- return;
- }
- }
- }
- string toLog = string.Format("[{0}] {1}", System.DateTime.Now.ToLongTimeString(), String.Format(o.ToString(), format));
- Console.WriteLine(toLog);
-
- if (!disableLogging)
- {
- LogStream.WriteLine(toLog);
- LogStream.Flush();
- }
- }
-
- public static void LogColour(ConsoleColor c, object o, params object[] format)
- {
- Console.ForegroundColor = c;
- Log(o.ToString(), format);
- Console.ForegroundColor = ConsoleColor.Gray;
- }
-
- public static void LogInfo(object o, params object[] format)
- {
- Console.ForegroundColor = ConsoleColor.Yellow;
- Log(o.ToString(), format);
- Console.ForegroundColor = ConsoleColor.Gray;
- }
-
- public static void LogError(object o, params object[] format)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Log(o.ToString(), format);
- Console.ForegroundColor = ConsoleColor.Gray;
- }
-
- public static void LogDebug(object o, params object[] format)
- {
- if (!debug)
- return;
- Console.ForegroundColor = ConsoleColor.DarkYellow;
- Log(o.ToString(), format);
- 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
+ }
+
+ static void help_CommandFired(object o, EventArgsCommand e)
+ {
+ if (e.Command.CalledArgs.Length > 0)
+ {
+ Command fnd = Command.FindCommand(e.Command.CalledArgs[0]);
+ if (fnd == null)
+ Log.Error("The command specified could not be found");
+ else
+ {
+ if (fnd.CommandArgs.Length > 0)
+ Log.Info("{0}: {1} - {2}", fnd.CommandName, fnd.CommandDesc, fnd.CommandArgs.ToSingular());
+ else
+ Log.Info("{0}: {1}", fnd.CommandName, fnd.CommandDesc);
+ }
+ }
+ else
+ Log.Info("Commands: " + Command.RegisteredCommands.Select(x => x.CommandName).ToSingular());
+ }
}
} \ No newline at end of file
diff --git a/StardewModdingAPI/StardewModdingAPI.csproj b/StardewModdingAPI/StardewModdingAPI.csproj
index 3248a3a5..5cc37c84 100644
--- a/StardewModdingAPI/StardewModdingAPI.csproj
+++ b/StardewModdingAPI/StardewModdingAPI.csproj
@@ -110,6 +110,7 @@
<Compile Include="Inheritance\Minigames\SMinigameBase.cs" />
<Compile Include="Inheritance\SGameLocation.cs" />
<Compile Include="Inheritance\SObject.cs" />
+ <Compile Include="Log.cs" />
<Compile Include="Mod.cs" />
<Compile Include="ModItem.cs" />
<Compile Include="Program.cs" />
diff --git a/TrainerMod/TrainerMod.cs b/TrainerMod/TrainerMod.cs
index 238872c2..9f918ce4 100644
--- a/TrainerMod/TrainerMod.cs
+++ b/TrainerMod/TrainerMod.cs
@@ -113,7 +113,7 @@ namespace TrainerMod
static void types_CommandFired(object sender, EventArgsCommand e)
{
- Program.LogInfo("[Int32: {0} - {1}], [Int64: {2} - {3}], [String: \"raw text\"], [Colour: r,g,b (EG: 128, 32, 255)]", Int32.MinValue, Int32.MaxValue, Int64.MinValue, Int64.MaxValue);
+ Log.Verbose("[Int32: {0} - {1}], [Int64: {2} - {3}], [String: \"raw text\"], [Colour: r,g,b (EG: 128, 32, 255)]", Int32.MinValue, Int32.MaxValue, Int64.MinValue, Int64.MaxValue);
}
static void hide_CommandFired(object sender, EventArgsCommand e)
@@ -156,7 +156,7 @@ namespace TrainerMod
Game1.player.Name = e.Command.CalledArgs[1];
break;
case "pet":
- Program.LogError("Pets cannot currently be renamed.");
+ Log.Error("Pets cannot currently be renamed.");
break;
case "farm":
Game1.player.farmName = e.Command.CalledArgs[1];
@@ -165,12 +165,12 @@ namespace TrainerMod
}
else
{
- Program.LogObjectInvalid();
+ Log.LogObjectInvalid();
}
}
else
{
- Program.LogObjectValueNotSpecified();
+ Log.LogObjectValueNotSpecified();
}
}
@@ -189,17 +189,17 @@ namespace TrainerMod
if (Int32.TryParse(e.Command.CalledArgs[0], out ou))
{
Game1.player.Money = ou;
- Program.LogInfo("Set {0}'s money to {1}", Game1.player.Name, Game1.player.Money);
+ Log.Verbose("Set {0}'s money to {1}", Game1.player.Name, Game1.player.Money);
}
else
{
- Program.LogValueNotInt32();
+ Log.LogValueNotInt32();
}
}
}
else
{
- Program.LogValueNotSpecified();
+ Log.LogValueNotSpecified();
}
}
@@ -218,17 +218,17 @@ namespace TrainerMod
if (Int32.TryParse(e.Command.CalledArgs[0], out ou))
{
Game1.player.Stamina = ou;
- Program.LogInfo("Set {0}'s stamina to {1}", Game1.player.Name, Game1.player.Stamina);
+ Log.Verbose("Set {0}'s stamina to {1}", Game1.player.Name, Game1.player.Stamina);
}
else
{
- Program.LogValueNotInt32();
+ Log.LogValueNotInt32();
}
}
}
else
{
- Program.LogValueNotSpecified();
+ Log.LogValueNotSpecified();
}
}
@@ -240,16 +240,16 @@ namespace TrainerMod
if (Int32.TryParse(e.Command.CalledArgs[0], out ou))
{
Game1.player.MaxStamina = ou;
- Program.LogInfo("Set {0}'s max stamina to {1}", Game1.player.Name, Game1.player.MaxStamina);
+ Log.Verbose("Set {0}'s max stamina to {1}", Game1.player.Name, Game1.player.MaxStamina);
}
else
{
- Program.LogValueNotInt32();
+ Log.LogValueNotInt32();
}
}
else
{
- Program.LogValueNotSpecified();
+ Log.LogValueNotSpecified();
}
}
@@ -288,17 +288,17 @@ namespace TrainerMod
}
else
{
- Program.LogValueNotInt32();
+ Log.LogValueNotInt32();
}
}
else
{
- Program.LogError("<skill> is invalid");
+ Log.Error("<skill> is invalid");
}
}
else
{
- Program.LogError("<skill> and <value> must be specified");
+ Log.Error("<skill> and <value> must be specified");
}
}
@@ -309,16 +309,16 @@ namespace TrainerMod
if (e.Command.CalledArgs[0].IsInt32())
{
Game1.player.addedSpeed = e.Command.CalledArgs[0].AsInt32();
- Program.LogInfo("Set {0}'s added speed to {1}", Game1.player.Name, Game1.player.addedSpeed);
+ Log.Verbose("Set {0}'s added speed to {1}", Game1.player.Name, Game1.player.addedSpeed);
}
else
{
- Program.LogValueNotInt32();
+ Log.LogValueNotInt32();
}
}
else
{
- Program.LogValueNotSpecified();
+ Log.LogValueNotSpecified();
}
}
@@ -349,17 +349,17 @@ namespace TrainerMod
}
else
{
- Program.LogError("<colour> is invalid");
+ Log.Error("<colour> is invalid");
}
}
else
{
- Program.LogObjectInvalid();
+ Log.LogObjectInvalid();
}
}
else
{
- Program.LogError("<object> and <colour> must be specified");
+ Log.Error("<object> and <colour> must be specified");
}
}
@@ -397,7 +397,7 @@ namespace TrainerMod
else if (i == 1)
Game1.player.changeIntoSwimsuit();
else
- Program.LogError("<value> must be 0 or 1 for this <object>");
+ Log.Error("<value> must be 0 or 1 for this <object>");
break;
case "gender":
if (i == 0)
@@ -405,23 +405,23 @@ namespace TrainerMod
else if (i == 1)
Game1.player.changeGender(false);
else
- Program.LogError("<value> must be 0 or 1 for this <object>");
+ Log.Error("<value> must be 0 or 1 for this <object>");
break;
}
}
else
{
- Program.LogValueInvalid();
+ Log.LogValueInvalid();
}
}
else
{
- Program.LogObjectInvalid();
+ Log.LogObjectInvalid();
}
}
else
{
- Program.LogObjectValueNotSpecified();
+ Log.LogObjectValueNotSpecified();
}
}
@@ -435,21 +435,21 @@ namespace TrainerMod
{
freezeTime = e.Command.CalledArgs[0].AsInt32() == 1;
frozenTime = freezeTime ? Game1.timeOfDay : 0;
- Program.LogInfo("Time is now " + (freezeTime ? "frozen" : "thawed"));
+ Log.Verbose("Time is now " + (freezeTime ? "frozen" : "thawed"));
}
else
{
- Program.LogError("<value> should be 0 or 1");
+ Log.Error("<value> should be 0 or 1");
}
}
else
{
- Program.LogValueNotInt32();
+ Log.LogValueNotInt32();
}
}
else
{
- Program.LogValueNotSpecified();
+ Log.LogValueNotSpecified();
}
}
@@ -463,21 +463,21 @@ namespace TrainerMod
{
Game1.timeOfDay = e.Command.CalledArgs[0].AsInt32();
frozenTime = freezeTime ? Game1.timeOfDay : 0;
- Program.LogInfo("Time set to: " + Game1.timeOfDay);
+ Log.Verbose("Time set to: " + Game1.timeOfDay);
}
else
{
- Program.LogError("<value> should be between 600 and 2600 (06:00 AM - 02:00 AM [NEXT DAY])");
+ Log.Error("<value> should be between 600 and 2600 (06:00 AM - 02:00 AM [NEXT DAY])");
}
}
else
{
- Program.LogValueNotInt32();
+ Log.LogValueNotInt32();
}
}
else
{
- Program.LogValueNotSpecified();
+ Log.LogValueNotSpecified();
}
}
@@ -493,17 +493,17 @@ namespace TrainerMod
}
else
{
- Program.LogError("<value> must be between 1 and 28");
+ Log.Verbose("<value> must be between 1 and 28");
}
}
else
{
- Program.LogValueNotInt32();
+ Log.LogValueNotInt32();
}
}
else
{
- Program.LogValueNotSpecified();
+ Log.LogValueNotSpecified();
}
}
@@ -519,12 +519,12 @@ namespace TrainerMod
}
else
{
- Program.LogValueInvalid();
+ Log.LogValueInvalid();
}
}
else
{
- Program.LogValueNotSpecified();
+ Log.LogValueNotSpecified();
}
}
@@ -545,13 +545,13 @@ namespace TrainerMod
}
else
{
- Program.LogValueNotInt32();
+ Log.LogValueNotInt32();
}
}
}
else
{
- Program.LogValueNotSpecified();
+ Log.LogValueNotSpecified();
}
}
@@ -565,12 +565,12 @@ namespace TrainerMod
}
else
{
- Program.LogValueNotInt32();
+ Log.LogValueNotInt32();
}
}
else
{
- Program.LogValueNotSpecified();
+ Log.LogValueNotSpecified();
}
}
@@ -584,12 +584,12 @@ namespace TrainerMod
}
else
{
- Program.LogValueNotInt32();
+ Log.LogValueNotInt32();
}
}
else
{
- Program.LogValueNotSpecified();
+ Log.LogValueNotSpecified();
}
}
@@ -610,7 +610,7 @@ namespace TrainerMod
}
else
{
- Program.LogError("[count] is invalid");
+ Log.Error("[count] is invalid");
return;
}
@@ -622,7 +622,7 @@ namespace TrainerMod
}
else
{
- Program.LogError("[quality] is invalid");
+ Log.Error("[quality] is invalid");
return;
}
@@ -636,12 +636,12 @@ namespace TrainerMod
}
else
{
- Program.LogError("<item> is invalid");
+ Log.Error("<item> is invalid");
}
}
else
{
- Program.LogObjectValueNotSpecified();
+ Log.LogObjectValueNotSpecified();
}
}
@@ -654,16 +654,16 @@ namespace TrainerMod
MeleeWeapon toAdd = new MeleeWeapon(e.Command.CalledArgs[0].AsInt32());
Game1.player.addItemByMenuIfNecessary(toAdd);
- Program.LogInfo("Given {0} to {1}", toAdd.Name, Game1.player.Name);
+ Log.Verbose("Given {0} to {1}", toAdd.Name, Game1.player.Name);
}
else
{
- Program.LogError("<item> is invalid");
+ Log.Error("<item> is invalid");
}
}
else
{
- Program.LogObjectValueNotSpecified();
+ Log.LogObjectValueNotSpecified();
}
}
@@ -676,16 +676,16 @@ namespace TrainerMod
Ring toAdd = new Ring(e.Command.CalledArgs[0].AsInt32());
Game1.player.addItemByMenuIfNecessary(toAdd);
- Program.LogInfo("Given {0} to {1}", toAdd.Name, Game1.player.Name);
+ Log.Verbose("Given {0} to {1}", toAdd.Name, Game1.player.Name);
}
else
{
- Program.LogError("<item> is invalid");
+ Log.Error("<item> is invalid");
}
}
else
{
- Program.LogObjectValueNotSpecified();
+ Log.LogObjectValueNotSpecified();
}
}
@@ -748,12 +748,12 @@ namespace TrainerMod
}
else
{
- Program.LogValueNotInt32();
+ Log.LogValueNotInt32();
}
}
else
{
- Program.LogValueNotSpecified();
+ Log.LogValueNotSpecified();
}
}
@@ -761,11 +761,10 @@ namespace TrainerMod
static void RegisterNewItem(object sender, EventArgsCommand e)
{
- if (!Program.debug)
- {
- Program.LogError("Experimental code cannot be run in user mode.");
+#if DEBUG
+ Log.Error("Experimental code cannot be run in user mode.");
return;
- }
+#endif
SObject s = SGame.PullModItemFromDict(0, true);
s.Stack = 999;
Game1.player.addItemToInventory(s);