This commit is contained in:
Evil Factory
2021-02-12 19:26:18 -03:00
parent 05ea1d2a3a
commit ed2091a4ab
7 changed files with 116 additions and 19 deletions
@@ -124,6 +124,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="MoonSharp" Version="2.0.0" /> <PackageReference Include="MoonSharp" Version="2.0.0" />
<PackageReference Include="MoonSharp.Debugger.VsCode" Version="2.0.0" />
<PackageReference Include="NVorbis" Version="0.8.6" /> <PackageReference Include="NVorbis" Version="0.8.6" />
<PackageReference Include="RestSharp" Version="106.6.10" /> <PackageReference Include="RestSharp" Version="106.6.10" />
</ItemGroup> </ItemGroup>
@@ -12,6 +12,7 @@ using System.Reflection;
using System.Threading; using System.Threading;
using System.Xml.Linq; using System.Xml.Linq;
using MoonSharp.Interpreter; using MoonSharp.Interpreter;
using MoonSharp.VsCodeDebugger;
namespace Barotrauma namespace Barotrauma
{ {
@@ -135,6 +136,7 @@ namespace Barotrauma
CheckContentPackage(); CheckContentPackage();
Lua = new LuaSetup(); Lua = new LuaSetup();
} }
@@ -361,7 +363,7 @@ namespace Barotrauma
TaskPool.Update(); TaskPool.Update();
CoroutineManager.Update((float)Timing.Step, (float)Timing.Step); CoroutineManager.Update((float)Timing.Step, (float)Timing.Step);
GameMain.Lua.hook.Call("think", new DynValue[] { DynValue.NewNumber(elapsedTime) }); GameMain.Lua.hook.Call("think", new DynValue[] { DynValue.NewNumber(elapsedTime), DynValue.NewNumber(Timing.TotalTime) });
Timing.Accumulator -= Timing.Step; Timing.Accumulator -= Timing.Step;
} }
@@ -29,7 +29,22 @@ namespace Barotrauma
{ {
Console.WriteLine(s); Console.WriteLine(s);
script.DoFile(s); // i hate windows try
{
script.DoFile(s); // i hate windows
}
catch (Exception e)
{
if (e is InterpreterException)
{
Console.WriteLine(((InterpreterException)e).DecoratedMessage);
}
else
{
Console.WriteLine(e.ToString());
}
}
} }
} }
@@ -6,6 +6,7 @@ using Barotrauma.Networking;
using MoonSharp.Interpreter; using MoonSharp.Interpreter;
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using System.Threading.Tasks; using System.Threading.Tasks;
using MoonSharp.VsCodeDebugger;
namespace Barotrauma namespace Barotrauma
{ {
@@ -15,6 +16,7 @@ namespace Barotrauma
public Script lua; public Script lua;
public Hook hook; public Hook hook;
public bool overrideTraitors = false;
public void DoString(string code) public void DoString(string code)
{ {
@@ -24,7 +26,36 @@ namespace Barotrauma
} }
catch (Exception e) catch (Exception e)
{ {
Console.WriteLine(e.ToString()); if (e is InterpreterException)
{
Console.WriteLine(((InterpreterException)e).DecoratedMessage);
}
else
{
Console.WriteLine(e.ToString());
}
}
}
public void RunFunction(DynValue func)
{
try
{
lua.Call(func);
}
catch (Exception e)
{
if (e is InterpreterException)
{
Console.WriteLine(((InterpreterException)e).DecoratedMessage);
}
else
{
Console.WriteLine(e.ToString());
}
} }
} }
@@ -86,11 +117,23 @@ namespace Barotrauma
private class Game private class Game
{ {
LuaSetup env;
public Game(LuaSetup e)
{
env = e;
}
public static void SendMessage(string msg, int messageType = 0, Client sender = null, Character character = null) public static void SendMessage(string msg, int messageType = 0, Client sender = null, Character character = null)
{ {
GameMain.Server.SendChatMessage(msg, (ChatMessageType)messageType, sender, character); GameMain.Server.SendChatMessage(msg, (ChatMessageType)messageType, sender, character);
} }
public static void SendTraitorMessage(Client client, string msg, int type)
{
GameMain.Server.SendTraitorMessage(client, msg, "", (TraitorMessageType)type);
}
public static void SendDirectChatMessage(string sendername, string text, Character sender, int messageType = 0, Client client = null) public static void SendDirectChatMessage(string sendername, string text, Character sender, int messageType = 0, Client client = null)
{ {
@@ -100,6 +143,11 @@ namespace Barotrauma
} }
public void OverrideTraitors(bool o)
{
env.overrideTraitors = o;
}
public static void Log(string message, int type) public static void Log(string message, int type)
{ {
GameServer.Log(message, (ServerLog.MessageType)type); GameServer.Log(message, (ServerLog.MessageType)type);
@@ -128,16 +176,22 @@ namespace Barotrauma
private class LuaTimer private class LuaTimer
{ {
public Script env; public LuaSetup env;
public LuaTimer(Script e) public LuaTimer(LuaSetup e)
{ {
env = e; env = e;
} }
public void Simple(int time, DynValue function) public void Simple(int time, DynValue function)
{ {
Task.Delay(new TimeSpan(0, 0, 0, 0, time)).ContinueWith(o => { env.Call(function); });
Task.Delay(time).ContinueWith(o => { env.RunFunction(function); });
}
public static double GetTime()
{
return Timing.TotalTime;
} }
@@ -207,7 +261,7 @@ namespace Barotrauma
hookFunctions.Add(new HookFunction(name, hookName, function)); hookFunctions.Add(new HookFunction(name, hookName, function));
} }
public void Call(string name, DynValue[] args) public DynValue Call(string name, DynValue[] args)
{ {
foreach(HookFunction hf in hookFunctions) foreach(HookFunction hf in hookFunctions)
{ {
@@ -215,22 +269,31 @@ namespace Barotrauma
{ {
try try
{ {
env.Call(hf.function, args); return env.Call(hf.function, args);
}catch(Exception e) }
catch (Exception e)
{ {
Console.WriteLine(e.ToString()); if (e is InterpreterException)
{
Console.WriteLine(((InterpreterException)e).DecoratedMessage);
}
else
{
Console.WriteLine(e.ToString());
}
} }
} }
} }
return null;
} }
} }
public LuaSetup() public LuaSetup()
{ {
Console.WriteLine("Lua!"); Console.WriteLine("Lua!");
LuaCustomConverters.RegisterAll();
LuaScriptLoader luaScriptLoader = new LuaScriptLoader(); LuaScriptLoader luaScriptLoader = new LuaScriptLoader();
@@ -253,10 +316,10 @@ namespace Barotrauma
hook = new Hook(lua); hook = new Hook(lua);
lua.Globals["Player"] = new Player(); lua.Globals["Player"] = new Player();
lua.Globals["Game"] = new Game(); lua.Globals["Game"] = new Game(this);
lua.Globals["Hook"] = hook; lua.Globals["Hook"] = hook;
lua.Globals["Random"] = new LuaRandom(); lua.Globals["Random"] = new LuaRandom();
lua.Globals["Timer"] = new LuaTimer(lua); lua.Globals["Timer"] = new LuaTimer(this);
luaScriptLoader.RunFolder("Lua/autorun", lua); luaScriptLoader.RunFolder("Lua/autorun", lua);
@@ -127,6 +127,21 @@ namespace Barotrauma.Networking
return; return;
} }
var should = GameMain.Lua.hook.Call("chatMessage", new DynValue[] { DynValue.NewString(txt), UserData.Create(c) });
if(should != null)
{
if (should.CastToBool())
{
return;
}
else
{
}
}
if (type == ChatMessageType.Order) if (type == ChatMessageType.Order)
{ {
if (c.Character == null || c.Character.SpeechImpediment >= 100.0f || c.Character.IsDead) { return; } if (c.Character == null || c.Character.SpeechImpediment >= 100.0f || c.Character.IsDead) { return; }
@@ -178,9 +193,6 @@ namespace Barotrauma.Networking
} }
GameMain.Lua.hook.Call("chatMessage", new DynValue[] { DynValue.NewString(txt), UserData.Create(c) });
} }
public int EstimateLengthBytesServer(Client c) public int EstimateLengthBytesServer(Client c)
@@ -2345,8 +2345,11 @@ namespace Barotrauma.Networking
{ {
if (!(GameMain.GameSession?.GameMode is CampaignMode)) if (!(GameMain.GameSession?.GameMode is CampaignMode))
{ {
TraitorManager = new TraitorManager(); if (!GameMain.Lua.overrideTraitors)
TraitorManager.Start(this); {
TraitorManager = new TraitorManager();
TraitorManager.Start(this);
}
} }
} }
@@ -82,6 +82,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="MoonSharp" Version="2.0.0" /> <PackageReference Include="MoonSharp" Version="2.0.0" />
<PackageReference Include="MoonSharp.Debugger.VsCode" Version="2.0.0" />
</ItemGroup> </ItemGroup>
<!-- Sourced from https://stackoverflow.com/a/45248069 --> <!-- Sourced from https://stackoverflow.com/a/45248069 -->