Lua接口不调用方法

本文关键字:方法 调用 接口 Lua | 更新日期: 2023-09-27 18:31:50

我正在尝试在我的C#.NET程序中实现lua脚本,但是当我执行代码时,其中一个方法没有执行。

这是类:

namespace Program1
{
    public class LuaFunctions
    {
        Client Client { get; set; }
        private Lua lua { get; set; }
        public LuaFunctions(Client c) {
            this.Client = c;
            this.lua = new Lua();
            registerFunctions();
        }
        public void ExecuteCode(string code)
        {
            this.lua.DoString(code);
        }
        private void registerFunctions()
        {
            lua.RegisterFunction("message", this, this.GetType().GetMethod("Message"));
            lua.RegisterFunction("pname", this, this.GetType().GetMethod("playername"));
        }
        public void Message(string s)
        {
            System.Windows.Forms.MessageBox.Show(s);
        }
        public string playername()
        {
            return Client.Player.Name;
        }
   }
}

当我执行这行lua代码"message(pname)"时,它甚至不会尝试执行方法"playername()"来返回一些值,所以它在DoString()行中崩溃,因为"pname"正在"返回"null。

Lua接口不调用方法

pname

注册为未设置为包含字符串值的变量的函数。

当执行message(pname)时,message函数被赋予pname函数的值,而不是被赋予一个字符串(或调用pname函数的结果)。

要将pname函数的结果传递给message,您需要使用 message(pname())

这取决于您尝试创建变量的确切位置。如果您尝试在 Lua 中设置一些变量,那么lua["somevariable"] = "value";就可以了。 一个更完整的示例可能是:

将原始值传递给状态:

double val = 12.0;
lua["x"] = val; // Create a global value 'x' 
var res = lua.DoString ("return 10 + x*(5 + 2)")[0] as double;

检索全局值:

lua.DoString ("y = 10 + x*(5 + 2)");
var y = lua["y"] as double; // Retrieve the value of y