LuaInterface не вызывает метод

Я пытаюсь реализовать сценарии lua в моей программе на C#.NET, но когда я выполняю код, один из методов не выполняется.

Вот класс:

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" "возвращает" ноль.

2 ответа

Это зависит от того, где именно вы пытаетесь создать переменную. Если вы пытаетесь установить некоторую переменную в 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

pname регистрируется как функция, не заданная как переменная, содержащая строковое значение.

когда message(pname) выполняется message функция получает значение pname функция вместо того, чтобы получить строку (или результат вызова pname) функция.

Чтобы передать результат pname функция к message вам нужно будет использовать message(pname()),

Другие вопросы по тегам