public void TestBasicFunctionality() { Lua lua = new Lua(); //// //TestLuaFunctions testLuaFunctions = new TestLuaFunctions(); //lua.RegisterFunction("Say", testLuaFunctions, testLuaFunctions.GetType().GetMethod("Say")); //lua.RegisterFunction("CreateInstance", typeof(TestLuaFunctions).GetMethod("CreateInstance")); //lua.DoString("Say('pouet')"); //lua.DoString("instance = CreateInstance()"); //lua.DoString("instance:Say('woohoo')"); //TestLuaFunctions externalInstance = (TestLuaFunctions) lua["instance"]; //externalInstance.Say("using externally created instance to call Say"); // CreateWorld(); ITestCharacter testCharacter = TestCharacter.Create(); lua["testcharacter"] = testCharacter; lua.RegisterFunction("print", typeof(LuaOutput).GetMethod("Print")); //lua["this"] = bigBadMob; //lua["room"] = DependencyContainer.Instance.GetInstance<IWorld>().Rooms.First(); lua.RegisterFunction("getCharacter", this, GetType().GetMethod("GetCharacter")); lua.DoString( @"print('this is a debug message') local this = getCharacter() cName = this.DisplayName function luanet.each(o) local e = o:GetEnumerator() return function() if e:MoveNext() then return e.Current end end end local each = luanet.each; for c in each(this.Room.People) do local name = c == getCharacter() and 'me' or c.DisplayName; print('in room:'..name); end -- local globals = _G --for g in each(globals) do -- print('global:'..tostring(g)); --end"); //doesn't work lua.DoString("function this.pouet(s) print(s) end"); var cName = lua["cName"]; var luanet = lua["luanet"]; var globals = lua["_G"]; var testCharacter2 = lua["testcharacter"]; lua.Close(); }
public void TestIntegration() { CreateWorld(); Lua lua = new Lua(); lua.RegisterFunction("print", typeof(LuaOutput).GetMethod("Print")); //// Create Lua table for each blueprint script table name //foreach (CharacterBlueprint blueprint in DependencyContainer.Instance.GetInstance<IWorld>().CharacterBlueprints.Where(x => x.ScriptTableName != null)) //{ // if (lua.GetTable(blueprint.ScriptTableName) == null) // lua.NewTable(blueprint.ScriptTableName); //} // Read scripts from file/immediate string lua.DoString( @" mob1 = {} function mob1:OnTick() print('OnTick:'..self.DisplayName..' '..tostring(self)); --for n in pairs(_G) do print(n) end --for n in pairs(self) do print(n) end end function mob1:OnSay(actor, msg) print('OnSay:['..self.DisplayName..'] heard ['..actor.DisplayName..'] saying ['..msg..']'); end mob2 = {} function mob2:OnTick() print('OnTick:'..self.DebugName); end function mob2:OnGreet(actor, from) print('OnGreet: ['..self.DebugName..'] saw ['..actor.DebugName..'] entering room from ['..tostring(from)..']'); actor:GainExperience(10000000); -- <-- this should be forbidden, only a few information such as DisplayName, Room, ... should be available end"); // TODO: replace 'scripts' with parameter in ICharacter and initialize this in AddCharacter or in Character ctor List <CharacterScript> scripts = new List <CharacterScript>(); foreach (ICharacter character in DependencyContainer.Instance.GetInstance <IWorld>().Characters.Where(x => x.Blueprint.ScriptTableName != null)) { string scriptName = character.Blueprint.ScriptTableName; var mobScript = lua[scriptName]; if (mobScript != null) { CharacterScript script = new CharacterScript(lua, character, scriptName); scripts.Add(script); } } // Call script from appropriate functions in Server foreach (ICharacter character in DependencyContainer.Instance.GetInstance <IWorld>().Characters) { CharacterScript script = scripts.FirstOrDefault(x => x.Character == character); script?.OnTick(); script?.OnSay(DependencyContainer.Instance.GetInstance <IWorld>().Characters.Skip(1).First(), "woot"); } CharacterScript mob1 = scripts.FirstOrDefault(x => x.Character == DependencyContainer.Instance.GetInstance <IWorld>().Characters.First()); //mob1?.Pouet("tsekwa"); CharacterScript mob2 = scripts.FirstOrDefault(x => x.Character == DependencyContainer.Instance.GetInstance <IWorld>().Characters.Skip(1).First()); mob2?.OnGreet(DependencyContainer.Instance.GetInstance <IWorld>().Characters.First(), ExitDirections.SouthWest); var mob1InLua = lua["mob1"]; lua.Close(); }