improve error handling in Hook

This commit is contained in:
Evil Factory
2022-07-03 10:19:41 -03:00
parent 71b0410138
commit 316f1a5007
@@ -100,7 +100,10 @@ namespace Barotrauma
{ {
name = name.ToLower(); name = name.ToLower();
if (name == null || hookName == null || hook == null) throw new ArgumentNullException("Names and Hook must not be null"); if (name == null || hookName == null || hook == null)
{
throw new ScriptRuntimeException("Hook.Add: name, hookName and hook must not be null.");
}
if (!hookFunctions.ContainsKey(name)) if (!hookFunctions.ContainsKey(name))
{ {
@@ -112,12 +115,14 @@ namespace Barotrauma
public void Remove(string name, string hookName) public void Remove(string name, string hookName)
{ {
if (name == null || hookName == null) return; if (name == null || hookName == null) { return };
name = name.ToLower(); name = name.ToLower();
if (hookFunctions.ContainsKey(name) && hookFunctions[name].ContainsKey(hookName)) if (hookFunctions.ContainsKey(name) && hookFunctions[name].ContainsKey(hookName))
{
hookFunctions[name].Remove(hookName); hookFunctions[name].Remove(hookName);
}
} }
public void Clear() public void Clear()
@@ -145,7 +150,7 @@ namespace Barotrauma
public T Call<T>(string name, params object[] args) public T Call<T>(string name, params object[] args)
{ {
if (GameMain.LuaCs == null) { return default(T); } if (GameMain.LuaCs == null) { return default(T); }
if (name == null) { return default(T); } if (name == null) { throw new ScriptRuntimeException("Hook.Call: name must not be null."); }
if (args == null) { args = new object[] { }; } if (args == null) { args = new object[] { }; }
name = name.ToLower(); name = name.ToLower();
@@ -216,8 +221,7 @@ namespace Barotrauma
{ {
StringBuilder argsSb = new StringBuilder(); StringBuilder argsSb = new StringBuilder();
foreach (var arg in args) argsSb.Append(arg + " "); foreach (var arg in args) argsSb.Append(arg + " ");
GameMain.LuaCs.HandleException( GameMain.LuaCs.HandleException(e, $"Error in Hook '{name}'->'{key}', with args '{argsSb}':\n{e}", ExceptionType.Both);
e, $"Error in Hook '{name}'->'{key}', with args '{argsSb}':\n{e}", ExceptionType.Both);
} }
} }
foreach (var key in hooksToRemove) foreach (var key in hooksToRemove)