public void GetExists() { using (var lua = new NLua.Lua()) { lua.LoadCoroutineManager(); lua.DoString("function test() coroutine.yield(1) coroutine.yield(2) coroutine.yield(3) end " + "function test2() coroutine.yield(4) coroutine.yield(5) coroutine.yield(6) end"); lua.CreateCoroutine("test"); Assert.IsTrue(lua.ExistsCoroutine("test")); Assert.IsFalse(lua.ExistsCoroutine("test2")); lua.CreateCoroutine("test2"); Assert.IsTrue(lua.ExistsCoroutine("test")); Assert.IsTrue(lua.ExistsCoroutine("test2")); } }
public void GetStatus() { using (var lua = new NLua.Lua()) { lua.LoadCoroutineManager(); lua.DoString("function test() coroutine.yield() coroutine.yield() coroutine.yield() end"); lua.CreateCoroutine("test"); Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Suspended); bool isValid; lua.ResumeCoroutine("test", out isValid); Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Suspended); lua.ResumeCoroutine("test", out isValid); Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Suspended); lua.ResumeCoroutine("test", out isValid); Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Suspended); lua.ResumeCoroutine("test", out isValid); Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Dead); } }
public void ResumeCoroutine() { using (var lua = new NLua.Lua()) { lua.LoadCoroutineManager(); lua.DoString("function test() local x = 1; coroutine.yield(x); return 2 end"); lua.CreateCoroutine("test"); bool isValid; object[] results = lua.ResumeCoroutine("test", out isValid); Assert.IsTrue(isValid); Assert.IsTrue((int)(double)results[0] == 1); results = lua.ResumeCoroutine("test", out isValid); Assert.IsTrue(isValid); Assert.IsTrue((int)(double)results[0] == 2); results = lua.ResumeCoroutine("test", out isValid); Assert.IsFalse(isValid); Assert.IsTrue((string)results[0] == "cannot resume dead coroutine"); } }
public void CleanDeadCoroutines() { using (var lua = new NLua.Lua()) { lua.LoadCoroutineManager(); lua.DoString("function test() return 1 end " + "function test2() coroutine.yield(1) return 2 end"); lua.CreateCoroutine("test"); lua.CreateCoroutine("test2"); lua.UpdateCoroutines(); lua.CleanDeadCoroutines(); Assert.IsTrue(!lua.ExistsCoroutine("test")); Assert.IsTrue(lua.ExistsCoroutine("test2")); lua.UpdateCoroutines(); lua.CleanDeadCoroutines(); Assert.IsTrue(!lua.ExistsCoroutine("test")); Assert.IsTrue(!lua.ExistsCoroutine("test2")); } }
/// <summary> /// Registers this package to the given Lua state. /// </summary> /// <param name="state"></param> public void RegisterPackage(NLua.Lua state) { this.m_Lua = state; NLua.LuaLib.LuaNewTable(state.GetState()); this.m_FunctionDelegates.ForEach(f => state.RegisterTableFunction(f.Key, f.Value)); NLua.LuaLib.LuaSetGlobal(state.GetState(), "objhelper"); }
public (Action tritonAction, Action nluaAction) Benchmark_WriteObject(Triton.Lua triton, NLua.Lua nlua) { void Triton() => triton["test"] = new object(); void NLua() => nlua["test"] = new object(); return(Triton, NLua); }
public (Action tritonAction, Action nluaAction) Benchmark_WriteNumber(Triton.Lua triton, NLua.Lua nlua) { void Triton() => triton["test"] = 0.0; void NLua() => nlua["test"] = 0.0; return(Triton, NLua); }
public static void Test() { NLua.Lua state = new NLua.Lua(); NLua.Lua state2 = new NLua.Lua(); someData sd = new someData(); sd.ID = 25; sd.sList.AddRange(new String[] { "this", " is", " a", " test", " list" }); luaData ld = new luaData(sd); //var test = state.DoString("return 10 + 3*(5 + 2)")[0]; //var type = test.GetType(); //int value = 6; //state["test"] = value; //var result = state.DoString("return test*3+(test-3)")[0]; //state.DoString(@" // function ScriptFunc (val1, val2) // val1=val1+2 // val2=val2+3 // return val1, val2 // end"); //var scriptFunc = state["ScriptFunc"] as NLua.LuaFunction; //var res = scriptFunc.Call(3, 5); testClass tc = new testClass("Some test string here"); tc.list.Add(25); state["provision"] = "Random piece of information"; testClass tc2 = new testClass("Indirect summon"); tc2.data = ld; tc2.ProvideInfoToLua(state); //state["testObj"] = tc; state.LoadCLRPackage(); // state.DoString(@" import ('The betrayer', 'TBAGW.Utilities') // import ('System.Web') // import ('System')"); // var testStringFromObject = state.DoString("return TestObject.testList[0]")[0]; // var elementType = testStringFromObject.GetType(); // testClass testObjFromLUA = state.DoString("return TestObject")[0] as testClass; //bool bWhat = testObjFromLUA.GetType() == tc.GetType(); state.DoString("print(\"Hello World\")"); System.Windows.Forms.OpenFileDialog ofd = new System.Windows.Forms.OpenFileDialog(); ofd.Filter = "LUA files (*.lua)|*.lua"; ofd.InitialDirectory = Game1.rootContent; if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { state = new NLua.Lua(); state.LoadCLRPackage(); state.DoFile(ofd.FileName); var time = System.IO.File.GetLastWriteTime(ofd.FileName); } //var statsTest = ((state["generateSomeStats"] as NLua.LuaFunction).Call()[0] as LuaStatEdit).ExtractStatChart(); //BaseSprite bs = new BaseSprite(); //bs.position = new Vector2(136, 2556); //if (Scenes.Editor.MapBuilder.loadedMap != null) //{ // bs.UpdatePosition(); //} // List<List<Object>> luaStuff = new List<List<object>>(); //var ttt = (state["save"] as NLua.LuaFunction).Call()[0].GetType(); (state["save"] as NLua.LuaFunction).Call(); var st = LuaSaveData.getGlobalData("My Collection", "luaStuff"); (state["loadProcess"] as NLua.LuaFunction).Call(); //var dabdab = ((state["getShapeData"] as NLua.LuaFunction).Call(bs)); // NLua.LuaFunction savedFunction = state["e1.Test"] as NLua.LuaFunction; uic = ((state["createUI"] as NLua.LuaFunction).Call()[0] as LuaUICollection).ConvertFromLua(state); goto skip; var luaRect = ShapeAnimation.animFromLuaInfo(((state["generateAnimation"] as NLua.LuaFunction).Call()[0] as LuaShapeAnimationInfo)); var resldo = (state["returnLuaSpecificData"] as NLua.LuaFunction).Call()[0]; NLua.LuaTable lt = (state["returnLuaSpecificData"] as NLua.LuaFunction).Call()[0] as NLua.LuaTable; (state["GenerateSomeStuff"] as NLua.LuaFunction).Call(); ListDataProvider.setLuaData(state); (state["publicStaticCall"] as NLua.LuaFunction).Call(); (state["internalStaticCall"] as NLua.LuaFunction).Call(); state["testObj"] = tc; var ele2 = (state["attempt"] as NLua.LuaFunction).Call()[0]; var returnedData = (state["returnData"] as NLua.LuaFunction).Call()[0]; var oldProvision = state["provision"]; var value2 = state["testObj.i"]; var function = state["MyFunc"] as NLua.LuaFunction; var funcRes = function.Call(state["testObj.i"])[0]; var tableResult = (state["returnTable"] as NLua.LuaFunction).Call()[0]; var bCompare1 = tableResult.GetType() == typeof(NLua.LuaTable); var tableToList = LUAUtilities.LUATableToListUtility(typeof(testClass), tableResult as NLua.LuaTable).Cast <testClass>().ToList(); var tableToListGenericObject = LUAUtilities.LUATableToListUtility(typeof(testClass), tableResult as NLua.LuaTable); var listType = tableToList.GetType(); var listTypeGO = tableToListGenericObject.GetType(); state = new NLua.Lua(); state.LoadCLRPackage(); state.DoFile(ofd.FileName); List <testClass> tcl = new List <testClass>(); tcl.Add(new testClass("")); tcl.Last().i = 25; tcl.Add(new testClass("")); tcl.Last().i = 0; tcl.Add(new testClass("")); tcl.Last().i = 10; foreach (var item in tcl) { (state["setStuff"] as NLua.LuaFunction).Call(item); } tcl = LUAUtilities.LUATableToListUtility(typeof(testClass), (state["doStuff"] as NLua.LuaFunction).Call()[0] as NLua.LuaTable).Cast <testClass>().ToList(); skip : { } bDoTest = false; }
public (Action tritonAction, Action nluaAction) Benchmark_WriteInstance(Triton.Lua triton, NLua.Lua nlua) { triton["test"] = new TestClass(); nlua["test"] = new TestClass(); var tritonFunction = triton.CreateFunction("test.x = 0"); var nluaFunction = nlua.LoadString("test.x = 0", "test"); void Triton() => tritonFunction.Call(); void NLua() => nluaFunction.Call(); return(Triton, NLua); }
public (Action tritonAction, Action nluaAction) Benchmark_Results(Triton.Lua triton, NLua.Lua nlua) { void Triton() => triton.DoString("return 1, 2, 3, 4, 5"); void NLua() => nlua.DoString("return 1, 2, 3, 4, 5"); return(Triton, NLua); }
/// <summary> /// Initializes a new instance of the LuaPluginLoader class /// </summary> /// <param name="lua"></param> /// <param name="luaExtension"></param> public LuaPluginLoader(NLua.Lua lua, LuaExtension luaExtension) { LuaEnvironment = lua; LuaExtension = luaExtension; }
public CozyLuaCore() { mLua = new NLua.Lua(); }
public PoeCharacterModel ToCharacterModel(NLua.Lua luaState) { var entry = ladderEntry; string buildXml = PobUtils.GetBuildXmlByJsons(passivesJson, itemsJson, luaState); PathOfBuilding tryGetPob() { PathOfBuilding pob; try { pob = PobUtils.XmlToPob(buildXml); } catch (System.Exception e) { // TODO // Log entry and e if (e is System.InvalidOperationException || e is System.Xml.XmlException) { pob = null; System.Console.WriteLine(e.ToString()); } else { throw; } } return(pob); } PathOfBuilding pob = tryGetPob(); if (pob != null) { PoeItems items = JsonConvert.DeserializeObject <PoeItems>(itemsJson); PoePassives passives = JsonConvert.DeserializeObject <PoePassives>(passivesJson); string code = PobUtils.XmlToCode(buildXml); var poeChar = new PoeCharacterModel() { CharacterId = entry.Character.Id, CharacterName = entry.Character.Name, LeagueName = leagueName, Account = entry.Account, AccountName = entry.Account != null ? entry.Account.Name : null, Level = entry.Character.Level, Class = entry.Character.Class, Depth = entry.Character.Depth ?? new PoeDepth { Solo = 0, Default = 0 }, Dead = entry.Dead, Online = entry.Online, Rank = entry.Rank, Experience = entry.Character.Experience, LifeUnreserved = pob.GetStat("LifeUnreserved"), EnergyShield = pob.GetStat("EnergyShield"), Pob = pob, PobCode = code, Items = new List <PoeItem>() { }.Concat(items.items.Concat(passives.items.Select(i => i.ToPoeItem()))).ToList(), UpdatedAt = System.DateTime.UtcNow, }; return(poeChar); } else { return(null); } }
/// <summary> /// 初始化lua对象 /// </summary> /// <param name="lua"></param> /// <returns></returns> public static void Initial(NLua.Lua lua) { /////////////// //酷q类的接口// ////////////// lua.RegisterFunction("cqCode_At", null, typeof(LuaApi).GetMethod("CqCode_At")); //获取酷Q "At某人" 代码 lua.RegisterFunction("cqCqCode_Emoji", null, typeof(LuaApi).GetMethod("CqCode_Emoji")); //获取酷Q "emoji表情" 代码 lua.RegisterFunction("cqCqCode_Face", null, typeof(LuaApi).GetMethod("CqCode_Face")); //获取酷Q "表情" 代码 lua.RegisterFunction("cqCqCode_Shake", null, typeof(LuaApi).GetMethod("CqCode_Shake")); //获取酷Q "窗口抖动" 代码 lua.RegisterFunction("cqCqCode_Trope", null, typeof(LuaApi).GetMethod("CqCode_Trope")); //获取字符串的转义形式 lua.RegisterFunction("cqCqCode_UnTrope", null, typeof(LuaApi).GetMethod("CqCode_UnTrope")); //获取字符串的非转义形式 lua.RegisterFunction("cqCqCode_ShareLink", null, typeof(LuaApi).GetMethod("CqCode_ShareLink")); //获取酷Q "链接分享" 代码 lua.RegisterFunction("cqCqCode_ShareCard", null, typeof(LuaApi).GetMethod("CqCode_ShareCard")); //获取酷Q "名片分享" 代码 lua.RegisterFunction("cqCqCode_ShareGPS", null, typeof(LuaApi).GetMethod("CqCode_ShareGPS")); //获取酷Q "位置分享" 代码 lua.RegisterFunction("cqCqCode_Anonymous", null, typeof(LuaApi).GetMethod("CqCode_Anonymous")); //获取酷Q "匿名" 代码 lua.RegisterFunction("cqCqCode_Image", null, typeof(LuaApi).GetMethod("CqCode_Image")); //获取酷Q "图片" 代码 lua.RegisterFunction("cqCqCode_Music", null, typeof(LuaApi).GetMethod("CqCode_Music")); //获取酷Q "音乐" 代码 lua.RegisterFunction("cqCqCode_MusciDIY", null, typeof(LuaApi).GetMethod("CqCode_MusciDIY")); //获取酷Q "音乐自定义" 代码 lua.RegisterFunction("cqCqCode_Record", null, typeof(LuaApi).GetMethod("CqCode_Record")); //获取酷Q "语音" 代码 lua.RegisterFunction("cqSendGroupMessage", null, typeof(LuaApi).GetMethod("SendGroupMessage")); //发送群消息 lua.RegisterFunction("cqSendPrivateMessage", null, typeof(LuaApi).GetMethod("SendPrivateMessage")); //发送私聊消息 lua.RegisterFunction("cqSendDelyMessage", null, typeof(LuaApi).GetMethod("SendDelyMessage")); //发送延迟消息 lua.RegisterFunction("cqSendDiscussMessage", null, typeof(LuaApi).GetMethod("SendDiscussMessage")); //发送讨论组消息 lua.RegisterFunction("cqSendPraise", null, typeof(LuaApi).GetMethod("SendPraise")); //发送赞 lua.RegisterFunction("cqRepealMessage", null, typeof(LuaApi).GetMethod("RepealMessage")); //撤回消息 lua.RegisterFunction("cqGetLoginQQ", null, typeof(LuaApi).GetMethod("GetLoginQQ")); //取登录QQ lua.RegisterFunction("cqGetLoginNick", null, typeof(LuaApi).GetMethod("GetLoginNick")); //获取当前登录QQ的昵称 lua.RegisterFunction("cqAppDirectory", null, typeof(LuaApi).GetMethod("GetAppDirectory")); //取应用目录 lua.RegisterFunction("cqGetMemberInfo", null, typeof(LuaApi).GetMethod("GetMemberInfo")); //获取群成员信息 lua.RegisterFunction("cqGetMemberList", null, typeof(LuaApi).GetMethod("GetMemberList")); //获取全部群成员信息 lua.RegisterFunction("cqGetGroupList", null, typeof(LuaApi).GetMethod("GetGroupList")); //获取群列表 lua.RegisterFunction("cqAddLoger", null, typeof(LuaApi).GetMethod("AddLoger")); //添加日志 lua.RegisterFunction("cqAddFatalError", null, typeof(LuaApi).GetMethod("AddFatalError")); //添加致命错误提示 lua.RegisterFunction("cqSetGroupWholeBanSpeak", null, typeof(LuaApi).GetMethod("SetGroupWholeBanSpeak")); //置全群禁言 lua.RegisterFunction("cqSetGroupMemberNewCard", null, typeof(LuaApi).GetMethod("SetGroupMemberNewCard")); //置群成员名片 lua.RegisterFunction("cqSetGroupManager", null, typeof(LuaApi).GetMethod("SetGroupManager")); //置群管理员 lua.RegisterFunction("cqSetAnonymousStatus", null, typeof(LuaApi).GetMethod("SetAnonymousStatus")); //置群匿名设置 lua.RegisterFunction("cqSetGroupMemberRemove", null, typeof(LuaApi).GetMethod("SetGroupMemberRemove")); //置群员移除 lua.RegisterFunction("cqSetDiscussExit", null, typeof(LuaApi).GetMethod("SetDiscussExit")); //置讨论组退出 lua.RegisterFunction("cqSetGroupSpecialTitle", null, typeof(LuaApi).GetMethod("SetGroupSpecialTitle")); //置群成员专属头衔 lua.RegisterFunction("cqSetGroupAnonymousBanSpeak", null, typeof(LuaApi).GetMethod("SetGroupAnonymousBanSpeak")); //置匿名群员禁言 lua.RegisterFunction("cqSetGroupBanSpeak", null, typeof(LuaApi).GetMethod("SetGroupBanSpeak")); //置群员禁言 lua.RegisterFunction("cqSetFriendAddRequest", null, typeof(LuaApi).GetMethod("SetFriendAddRequest")); //置好友添加请求 lua.RegisterFunction("cqSetGroupAddRequest", null, typeof(LuaApi).GetMethod("SetGroupAddRequest")); //置群添加请求 lua.RegisterFunction("cqSetGroupExit", null, typeof(LuaApi).GetMethod("SetGroupExit")); //置群退出 ///////////// //工具类接口// ///////////// lua.RegisterFunction("apiGetPath", null, typeof(LuaApi).GetMethod("GetPath")); //获取程序运行目录 lua.RegisterFunction("apiGetAppName", null, typeof(LuaApi).GetMethod("GetAppName")); //获取插件包名 lua.RegisterFunction("apiGetBitmap", null, typeof(LuaApi).GetMethod("GetBitmap")); //获取图片对象 lua.RegisterFunction("apiPutText", null, typeof(LuaApi).GetMethod("PutText")); //摆放文字 lua.RegisterFunction("apiPutBlock", null, typeof(LuaApi).GetMethod("PutBlock")); //填充矩形 lua.RegisterFunction("apiSetImage", null, typeof(LuaApi).GetMethod("SetImage")); //摆放图片 lua.RegisterFunction("apiGetDir", null, typeof(LuaApi).GetMethod("GetDir")); //保存并获取图片路径 lua.RegisterFunction("apiGetImagePath", null, typeof(LuaApi).GetMethod("GetImagePath")); //获取qq消息中图片的网址 lua.RegisterFunction("apiHttpFileDownload", null, typeof(LuaApi).GetMethod("HttpFileDownload")); //下载文件 lua.RegisterFunction("apiHttpImageDownload", null, typeof(LuaApi).GetMethod("HttpImageDownload")); //爬取图片 lua.RegisterFunction("apiHttpGet", null, typeof(LuaApi).GetMethod("HttpGet")); //GET 请求与获取结果 lua.RegisterFunction("apiHttpPost", null, typeof(LuaApi).GetMethod("HttpPost")); //POST 请求与获取结果 lua.RegisterFunction("apiBase64File", null, typeof(LuaApi).GetMethod("Base64File")); //获取在线文件的base64结果 lua.RegisterFunction("apiGetPictureWidth", null, typeof(LuaApi).GetMethod("GetPictureWidth")); //获取在线文件的base64结果 lua.RegisterFunction("apiGetPictureHeight", null, typeof(LuaApi).GetMethod("GetPictureHeight")); //获取在线文件的base64结果 lua.RegisterFunction("apiSetVar", null, typeof(LuaApi).GetMethod("SetVar")); //设置某值存入ram lua.RegisterFunction("apiGetVar", null, typeof(LuaApi).GetMethod("GetVar")); //取出某缓存的值 lua.RegisterFunction("apiDirectoryList", null, typeof(LuaApi).GetMethod("DirectoryList")); //获取xml目录下的文件夹列表 lua.RegisterFunction("apiFileList", null, typeof(LuaApi).GetMethod("FileList")); //获取xml目录下的文件列表 lua.RegisterFunction("apiGetAsciiHex", null, typeof(LuaApi).GetMethod("GetAsciiHex")); //获取字符串ascii编码的hex串 lua.RegisterFunction("apiSetTimerScriptWait", null, typeof(LuaApi).GetMethod("SetTimerScriptWait")); //设置定时脚本运行间隔时间 lua.RegisterFunction("apiGetHardDiskFreeSpace", null, typeof(Tools).GetMethod("GetHardDiskFreeSpace")); //获取指定驱动器的剩余空间总大小(单位为MB) lua.RegisterFunction("apiMD5Encrypt", null, typeof(Tools).GetMethod("MD5Encrypt")); //计算MD5 lua.RegisterFunction("apiSandBox", null, typeof(LuaEnv).GetMethod("RunSandBox")); //沙盒环境 lua.RegisterFunction("apiOrderSearch", null, typeof(LuaApi).GetMethod("OrderSearch")); //单号识别 lua.RegisterFunction("apiNowSearch", null, typeof(LuaApi).GetMethod("NowSearch")); //快递查询 lua.RegisterFunction("apiOrderSub", null, typeof(LuaApi).GetMethod("OrderSub")); //快递订阅 lua.RegisterFunction("apiservice", null, typeof(TcpSer).GetMethod("service")); //开启tcp服务器 lua.RegisterFunction("apiclient", null, typeof(TcpSer).GetMethod("client")); //连接tcp服务器 lua.RegisterFunction("apiListenStart", null, typeof(HttpListenerPostParaHelper).GetMethod("ListenStart")); //开启httprequest监听 lua.RegisterFunction("apiGetResponseHeaders", null, typeof(LuaApi).GetMethod("GetResponseHeaders")); //获取response header头 lua.RegisterFunction("apiTimerStart", null, typeof(TimerRun).GetMethod("TimerStart")); //开启循环任务 lua.RegisterFunction("apiGeneralBasic", null, typeof(BaiDuApi).GetMethod("GeneralBasic")); //本地图片文字识别 lua.RegisterFunction("apiGeneralBasicUrl", null, typeof(BaiDuApi).GetMethod("GeneralBasicUrl")); //链接图片文字识别 lua.RegisterFunction("apiAdvancedGeneral", null, typeof(BaiDuApi).GetMethod("AdvancedGeneral")); //图像识别 lua.RegisterFunction("apiQREncode", null, typeof(QRCode).GetMethod("QREncode")); //二维码生成 lua.RegisterFunction("apiQRDecode", null, typeof(QRCode).GetMethod("QRDecode")); //二维码解码 lua.RegisterFunction("apiCombinImage", null, typeof(QRCode).GetMethod("CombinImage")); //二维码logo生成 /////////////// //XML操作接口// ////////////// lua.RegisterFunction("apiXmlReplayGet", null, typeof(XmlApi).GetMethod("replay_get")); //随机获取一条结果 lua.RegisterFunction("apiXmlListGet", null, typeof(XmlApi).GetMethod("alist_get")); //获取所有回复的列表 lua.RegisterFunction("apiXmlDelete", null, typeof(XmlApi).GetMethod("del")); //删除所有匹配的条目 lua.RegisterFunction("apiXmlRemove", null, typeof(XmlApi).GetMethod("remove")); //删除完全匹配的第一个条目 lua.RegisterFunction("apiXmlInsert", null, typeof(XmlApi).GetMethod("insert")); //插入一个词条 lua.RegisterFunction("apiXmlSet", null, typeof(XmlApi).GetMethod("set")); //更改某条的值 lua.RegisterFunction("apiXmlGet", null, typeof(XmlApi).GetMethod("xml_get")); //获取某条的结果 lua.RegisterFunction("apiXmlRow", null, typeof(XmlApi).GetMethod("xml_row")); //按结果查源头(反查) lua.RegisterFunction("apiXmlIdListGet", null, typeof(XmlApi).GetMethod("nlist_get")); //获取所有号码id列表 lua.DoFile(Common.AppDirectory + "lua/require/head.lua"); }
/// <summary> /// Initializes a new instance of the LuaPluginLoader class /// </summary> /// <param name="lua"></param> public LuaPluginLoader(NLua.Lua lua) { LuaEnvironment = lua; }
public static void SetupLuaUtils(Random r) { NLua.Lua L = new NLua.Lua(); L.DoFile(TBAGW.Game1.rootContent + "LUA\\" + "utils.lua"); }
public LoadingScreen(string LoaderScript, NLua.Lua LuaInstance) : base() { LuaInstance.GetFunction(LoaderScript).Call(this); }
public Control ParseFromJson(string json, NLua.Lua lua) { var description = JsonConvert.DeserializeObject <Dictionary <string, object> >(json); return(ParseFromDescription(description, lua)); }
/// <summary> /// Analyze 1 step, using femm window /// </summary> /// <param name="data"></param> /// <param name="step"></param> /// <param name="femm"></param> private void AnalyzeOne(int step, FEMM femm = null) { if (femm == null) { femm = FEMM.DefaultFEMM; } double t = Results.Times[step]; double rotorAngle = RotorSpeedDegreeSecond * t + StartAngle; // run script to update IA,IB,IC NLua.Lua lua_state = LuaHelper.GetLuaState(); String[] currentFormulas = { IA, IB, IC }; String[] circuitNames = { "A", "B", "C" }; Dictionary <String, double> currents = new Dictionary <string, double>(); try { lua_state["step"] = step; lua_state["time"] = t; lua_state["omega"] = RotorSpeedRadSecond; for (int i = 0; i < currentFormulas.Length; i++) { double Ix = (double)lua_state.DoString("return " + currentFormulas[i])[0]; currents[circuitNames[i]] = Ix; } } catch (Exception ex) { log.Error("Lua error :" + ex.Message); //TODO: maybe halt analysis since there maybe big problem } // open femm file femm.open(Motor.Path_FEMMFile); // clear the way (line-boundary conditional in airgap) Motor.Airgap.MakeWayInAirgapBeforeRotationInFEMM(femm); // normalize, make rotorAngle inside (-2alpha,2alpha) double xRotorAngle = rotorAngle; if (!Motor.GeneralParams.FullBuildFEMModel) { double alphax2 = 2 * Motor.Rotor.alphaDegree; if (xRotorAngle > alphax2 || xRotorAngle < -alphax2) { xRotorAngle = xRotorAngle - Math.Round(xRotorAngle / (2 * alphax2)) * 2 * alphax2; } } // rotate rotor Motor.Rotor.RotateRotorInFEMM(xRotorAngle, femm); // modify airgap (in case partial build) Motor.Airgap.ModifyAirgapAfterRotationInFEMM(xRotorAngle, femm); // modify stator currents using args passed from OnBeginAnalyzeOne Motor.Stator.SetStatorCurrentsInFEMM(currents, femm); // save as new file fem (temp only) String stepfileFEM = OutDir + "\\" + String.Format("{0:D4}.FEM", step); femm.mi_saveas(stepfileFEM); // analyze femm.mi_analyze(true); // close femm.mi_close(); // delete temp file //File.Delete(stepfileFEM); // open ans file to measure ? String stepfileANS = Path.GetDirectoryName(stepfileFEM) + "\\" + Path.GetFileNameWithoutExtension(stepfileFEM) + ".ans"; femm.open(stepfileANS); //String bmpFile = config.OutDir + "\\bmp\\" + Path.GetFileNameWithoutExtension(stepfileFEM) + ".bmp"; //femm.mo_savebitmap(bmpFile); // get circuits properties from stator TransientStepResult result = new TransientStepResult(); Dictionary <String, FEMM.CircuitProperties> cps = Motor.Stator.getCircuitsPropertiesInAns(femm); double torque = Motor.Rotor.getTorqueInAns(femm); result.Torque = torque; result.RotorAngle = rotorAngle; result.CircuitProperties = cps; Results[step] = result; OnFinishAnalyzeOneStep(this, result); log.Info(String.Format("Time {0:F5}: {1}", t, torque)); femm.mo_close(); }
public void RegisterLuaFunc(NLua.Lua lua, string luaName, object target, string rawFunc) { lua.RegisterFunction(luaName, target, target.GetType().GetMethod(rawFunc)); }
public (Action tritonAction, Action nluaAction) Benchmark_NoResults(Triton.Lua triton, NLua.Lua nlua) { void Triton() => triton.DoString("test = 0"); void NLua() => nlua.DoString("test = 0"); return(Triton, NLua); }
public void ResumeCoroutineBis() { using (var lua = new NLua.Lua()) { lua.LoadCoroutineManager(); lua.DoString("function test() x = 1; coroutine.yield(x); return 2 end"); lua.CreateCoroutine("test"); LuaCoroutineResult result = lua.ResumeCoroutine("test"); Assert.IsTrue(result.IsValid); Assert.IsTrue((int)(double)result.Results[0] == 1); Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Suspended); result = lua.ResumeCoroutine("test"); Assert.IsTrue(result.IsValid); Assert.IsTrue((int)(double)result.Results[0] == 2); Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Dead); result = lua.ResumeCoroutine("test"); Assert.IsFalse(result.IsValid); Assert.IsTrue(result.ErrorMessage == "cannot resume dead coroutine"); Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Dead); } }
public (Action tritonAction, Action nluaAction) Benchmark_CallInstance_Results(Triton.Lua triton, NLua.Lua nlua) { triton["test"] = new TestClass(); nlua["test"] = new TestClass(); var tritonFunction = triton.CreateFunction("x, y = test:y2()"); var nluaFunction = nlua.LoadString("x, y = test:y2()", "test"); void Triton() => tritonFunction.Call(); void NLua() => nluaFunction.Call(); return(Triton, NLua); }
public void RunCoroutine() { using (var lua = new NLua.Lua()) { lua.LoadCoroutineManager(); lua.DoString("function test() return 'truc', 2 end"); lua.CreateCoroutine("test"); bool isValid; object[] results = lua.ResumeCoroutine("test", out isValid); Assert.IsTrue(isValid); Assert.IsTrue((string)results[0] == "truc"); Assert.IsTrue((int)(double)results[1] == 2); } }
public (Action tritonAction, Action nluaAction) Benchmark_WriteStatic(Triton.Lua triton, NLua.Lua nlua) { triton.ImportType(typeof(TestClass)); nlua.DoString("TestClass = luanet.import_type('Triton.Benchmarks.Binding.FieldBenchmark+TestClass')"); var tritonFunction = triton.CreateFunction("TestClass.X = 0"); var nluaFunction = nlua.LoadString("TestClass.X = 0", "test"); void Triton() => tritonFunction.Call(); void NLua() => nluaFunction.Call(); return(Triton, NLua); }
public void SleepCoroutine() { using (var lua = new NLua.Lua()) { lua.LoadCLRPackage(); lua.LoadCoroutineManager(); lua.DoString("function test() coroutine.manager.sleep(10, 'stopped 1') return 'hi' end " + "function test2() coroutine.manager.sleep(20, 'stopped 2') return 'hello' end "); lua.CreateCoroutine("test"); lua.CreateCoroutine("test2"); Dictionary<string, LuaCoroutineResult> results = lua.UpdateCoroutines(); Assert.IsTrue(results["test"].IsValid); Assert.IsTrue((string)results["test"].Results[0] == "stopped 1"); Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Sleeping); Assert.IsTrue(results["test2"].IsValid); Assert.IsTrue((string)results["test2"].Results[0] == "stopped 2"); Assert.IsTrue(lua.StatusCoroutine("test2") == LuaCoroutineStatus.Sleeping); results = lua.UpdateCoroutines(10); Assert.IsTrue(results["test"].IsValid); Assert.IsTrue((string)results["test"].Results[0] == "hi"); Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Dead); Assert.IsTrue(results["test2"].IsValid); Assert.IsTrue(lua.StatusCoroutine("test2") == LuaCoroutineStatus.Sleeping); results = lua.UpdateCoroutines(10); Assert.IsFalse(results["test"].IsValid); Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Dead); Assert.IsTrue(results["test2"].IsValid); Assert.IsTrue((string)results["test2"].Results[0] == "hello"); Assert.IsTrue(lua.StatusCoroutine("test2") == LuaCoroutineStatus.Dead); } }
public (Action tritonAction, Action nluaAction) Benchmark_WriteBoolean(Triton.Lua triton, NLua.Lua nlua) { void Triton() => triton["test"] = false; void NLua() => nlua["test"] = false; return(Triton, NLua); }
public void UpdateCoroutines() { using (var lua = new NLua.Lua()) { lua.LoadCLRPackage(); lua.LoadCoroutineManager(); lua.DoString("function test() return 'hi' end " + "function test2() coroutine.yield() return true end " + "function test3() return 3,4 end"); lua.CreateCoroutine("test"); lua.CreateCoroutine("test2"); lua.CreateCoroutine("test3"); Dictionary<string, LuaCoroutineResult> results = lua.UpdateCoroutines(); Assert.IsTrue(results["test"].IsValid); Assert.IsTrue((string)results["test"].Results[0] == "hi"); Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Dead); Assert.IsTrue(results["test2"].IsValid); Assert.IsTrue(lua.StatusCoroutine("test2") == LuaCoroutineStatus.Suspended); Assert.IsTrue(results["test3"].IsValid); Assert.IsTrue((int)(double)results["test3"].Results[0] == 3); Assert.IsTrue((int)(double)results["test3"].Results[1] == 4); Assert.IsTrue(lua.StatusCoroutine("test3") == LuaCoroutineStatus.Dead); results = lua.UpdateCoroutines(); Assert.IsFalse(results["test"].IsValid); Assert.IsTrue(lua.StatusCoroutine("test") == LuaCoroutineStatus.Dead); Assert.IsTrue(results["test2"].IsValid); Assert.IsTrue((bool)results["test2"].Results[0]); Assert.IsTrue(lua.StatusCoroutine("test2") == LuaCoroutineStatus.Dead); Assert.IsFalse(results["test3"].IsValid); Assert.IsTrue(lua.StatusCoroutine("test3") == LuaCoroutineStatus.Dead); } }
public (Action tritonAction, Action nluaAction) Benchmark_WriteString(Triton.Lua triton, NLua.Lua nlua) { void Triton() => triton["test"] = "test"; void NLua() => nlua["test"] = "test"; return(Triton, NLua); }
public (Action tritonAction, Action nluaAction) Benchmark_ReadBoolean(Triton.Lua triton, NLua.Lua nlua) { triton["test"] = false; nlua["test"] = false; void Triton() { var t = triton["test"]; } void NLua() { var t = nlua["test"]; } return(Triton, NLua); }
public (Action tritonAction, Action nluaAction) Benchmark_WriteReference(Triton.Lua triton, NLua.Lua nlua) { var tritonFunction = triton.CreateFunction(""); var nluaFunction = nlua.LoadString("", "test"); void Triton() => triton["test"] = tritonFunction; void NLua() => nlua["test"] = nluaFunction; return(Triton, NLua); }
public (Action tritonAction, Action nluaAction) Benchmark_UnaryOperator(Triton.Lua triton, NLua.Lua nlua) { triton["c"] = new Complex(1, 1); nlua["c"] = new Complex(1, 1); var tritonFunction = triton.CreateFunction("x = -c"); var nluaFunction = nlua.LoadString("x = -c", "test"); void Triton() => tritonFunction.Call(); void NLua() => nluaFunction.Call(); return(Triton, NLua); }
public LuaScriptManager( NLua.Lua luaState ) { _lua = luaState; }
public (Action tritonAction, Action nluaAction) Benchmark_ReadReference(Triton.Lua triton, NLua.Lua nlua) { triton.DoString("test = function() end"); nlua.DoString("test = function() end"); void Triton() { var t = triton["test"]; } void NLua() { var t = nlua["test"]; } return(Triton, NLua); }
private Control ParseFromDescription(Dictionary <string, object> description, NLua.Lua lua) { object type; if (!description.TryGetValue("ControlType", out type)) { throw new Exception("Missing property ControlType"); } Func <BaseSpec> specCreator; if (!_specCreators.TryGetValue(type.ToString(), out specCreator)) { throw new Exception(string.Format("Creator for type \"{0}\" does not exists", type)); } var controlSpec = specCreator(); controlSpec.SetDescription(description); var control = controlSpec.CreateControl(); lua[controlSpec.Name] = control; controlSpec.SetEvents(control, lua); object children; if (!description.TryGetValue("Children", out children)) { return(control); } foreach (var childDescription in (IEnumerable <JToken>)description["Children"]) { var dict = childDescription.ToObject <Dictionary <string, object> >(); var childControl = ParseFromDescription(dict, lua); control.Controls.Add(childControl); } return(control); }
/// <summary> /// Register API functions with the Lua instance specified. /// </summary> /// <param name="lua">Lua instance</param> public void RegisterFunctions(NLua.Lua lua) { lua["Settings"] = _userSettings; lua["Application"] = _mainForm; }
/// <summary> /// 初始化lua对象 /// </summary> /// <param name="lua"></param> /// <returns></returns> public static void Initial(NLua.Lua lua) { /////////////// //酷q类的接口// ////////////// lua.RegisterFunction("cqCode_At", null, typeof(LuaApi).GetMethod("CqCode_At")); //获取酷Q "At某人" 代码 lua.RegisterFunction("cqCqCode_Emoji", null, typeof(LuaApi).GetMethod("CqCode_Emoji")); //获取酷Q "emoji表情" 代码 lua.RegisterFunction("cqCqCode_Face", null, typeof(LuaApi).GetMethod("CqCode_Face")); //获取酷Q "表情" 代码 lua.RegisterFunction("cqCqCode_Shake", null, typeof(LuaApi).GetMethod("CqCode_Shake")); //获取酷Q "窗口抖动" 代码 lua.RegisterFunction("cqCqCode_Trope", null, typeof(LuaApi).GetMethod("CqCode_Trope")); //获取字符串的转义形式 lua.RegisterFunction("cqCqCode_UnTrope", null, typeof(LuaApi).GetMethod("CqCode_UnTrope")); //获取字符串的非转义形式 lua.RegisterFunction("cqCqCode_ShareLink", null, typeof(LuaApi).GetMethod("CqCode_ShareLink")); //获取酷Q "链接分享" 代码 lua.RegisterFunction("cqCqCode_ShareCard", null, typeof(LuaApi).GetMethod("CqCode_ShareCard")); //获取酷Q "名片分享" 代码 lua.RegisterFunction("cqCqCode_ShareGPS", null, typeof(LuaApi).GetMethod("CqCode_ShareGPS")); //获取酷Q "位置分享" 代码 lua.RegisterFunction("cqCqCode_Anonymous", null, typeof(LuaApi).GetMethod("CqCode_Anonymous")); //获取酷Q "匿名" 代码 lua.RegisterFunction("cqCqCode_Image", null, typeof(LuaApi).GetMethod("CqCode_Image")); //获取酷Q "图片" 代码 lua.RegisterFunction("cqCqCode_Music", null, typeof(LuaApi).GetMethod("CqCode_Music")); //获取酷Q "音乐" 代码 lua.RegisterFunction("cqCqCode_MusciDIY", null, typeof(LuaApi).GetMethod("CqCode_MusciDIY")); //获取酷Q "音乐自定义" 代码 lua.RegisterFunction("cqCqCode_Record", null, typeof(LuaApi).GetMethod("CqCode_Record")); //获取酷Q "语音" 代码 lua.RegisterFunction("cqSendGroupMessage", null, typeof(LuaApi).GetMethod("SendGroupMessage")); //发送群消息 lua.RegisterFunction("cqSendPrivateMessage", null, typeof(LuaApi).GetMethod("SendPrivateMessage")); //发送私聊消息 lua.RegisterFunction("cqSendDiscussMessage", null, typeof(LuaApi).GetMethod("SendDiscussMessage")); //发送讨论组消息 lua.RegisterFunction("cqSendPraise", null, typeof(LuaApi).GetMethod("SendPraise")); //发送赞 lua.RegisterFunction("cqRepealMessage", null, typeof(LuaApi).GetMethod("RepealMessage")); //撤回消息 lua.RegisterFunction("cqGetLoginQQ", null, typeof(LuaApi).GetMethod("GetLoginQQ")); //取登录QQ lua.RegisterFunction("cqGetLoginNick", null, typeof(LuaApi).GetMethod("GetLoginNick")); //获取当前登录QQ的昵称 lua.RegisterFunction("cqAppDirectory", null, typeof(LuaApi).GetMethod("GetAppDirectory")); //取应用目录 lua.RegisterFunction("cqAddLoger", null, typeof(LuaApi).GetMethod("AddLoger")); //添加日志 lua.RegisterFunction("cqAddFatalError", null, typeof(LuaApi).GetMethod("AddFatalError")); //添加致命错误提示 lua.RegisterFunction("cqSetGroupWholeBanSpeak", null, typeof(LuaApi).GetMethod("SetGroupWholeBanSpeak")); //置全群禁言 lua.RegisterFunction("cqSetGroupMemberNewCard", null, typeof(LuaApi).GetMethod("SetGroupMemberNewCard")); //置群成员名片 lua.RegisterFunction("cqSetGroupManager", null, typeof(LuaApi).GetMethod("SetGroupManager")); //置群管理员 lua.RegisterFunction("cqSetAnonymousStatus", null, typeof(LuaApi).GetMethod("SetAnonymousStatus")); //置群匿名设置 lua.RegisterFunction("cqSetGroupMemberRemove", null, typeof(LuaApi).GetMethod("SetGroupMemberRemove")); //置群员移除 lua.RegisterFunction("cqSetDiscussExit", null, typeof(LuaApi).GetMethod("SetDiscussExit")); //置讨论组退出 lua.RegisterFunction("cqSetGroupSpecialTitle", null, typeof(LuaEnv).GetMethod("SetGroupSpecialTitle")); //置群成员专属头衔 lua.RegisterFunction("cqSetGroupAnonymousBanSpeak", null, typeof(LuaEnv).GetMethod("SetGroupAnonymousBanSpeak")); //置匿名群员禁言 lua.RegisterFunction("cqSetGroupBanSpeak", null, typeof(LuaEnv).GetMethod("SetGroupBanSpeak")); //置群员禁言 lua.RegisterFunction("cqSetFriendAddRequest", null, typeof(LuaApi).GetMethod("SetFriendAddRequest")); //置好友添加请求 lua.RegisterFunction("cqSetGroupAddRequest", null, typeof(LuaApi).GetMethod("SetGroupAddRequest")); //置群添加请求 ///////////// //工具类接口// ///////////// lua.RegisterFunction("apiGetPath", null, typeof(LuaApi).GetMethod("GetPath")); //获取程序运行目录 lua.RegisterFunction("apiGetBitmap", null, typeof(LuaApi).GetMethod("GetBitmap")); //获取图片对象 lua.RegisterFunction("apiPutText", null, typeof(LuaApi).GetMethod("PutText")); //摆放文字 lua.RegisterFunction("apiPutBlock", null, typeof(LuaApi).GetMethod("PutBlock")); //填充矩形 lua.RegisterFunction("apiSetImage", null, typeof(LuaApi).GetMethod("SetImage")); //摆放图片 lua.RegisterFunction("apiGetDir", null, typeof(LuaApi).GetMethod("GetDir")); //保存并获取图片路径 lua.RegisterFunction("apiGetImageUrl", null, typeof(LuaApi).GetMethod("GetImageUrl")); //获取qq消息中图片的网址 lua.RegisterFunction("apiHttpDownload", null, typeof(LuaApi).GetMethod("HttpDownload")); //下载文件 lua.RegisterFunction("apiHttpGet", null, typeof(LuaApi).GetMethod("HttpGet")); //GET 请求与获取结果 lua.RegisterFunction("apiHttpPost", null, typeof(LuaApi).GetMethod("HttpPost")); //POST 请求与获取结果 lua.RegisterFunction("apiBase64File", null, typeof(LuaApi).GetMethod("Base64File")); //获取在线文件的base64结果 lua.RegisterFunction("apiSetVar", null, typeof(LuaApi).GetMethod("SetVar")); //设置某值存入ram lua.RegisterFunction("apiGetVar", null, typeof(LuaApi).GetMethod("GetVar")); //取出某缓存的值 lua.RegisterFunction("apiGetAsciiHex", null, typeof(LuaApi).GetMethod("GetAsciiHex")); //获取字符串ascii编码的hex串 lua.RegisterFunction("apiGetHardDiskFreeSpace", null, typeof(Tools).GetMethod("GetHardDiskFreeSpace")); //获取指定驱动器的剩余空间总大小(单位为MB) lua.RegisterFunction("apiTcpSend", null, typeof(TcpServer).GetMethod("Send")); //发送tcp广播数据 lua.RegisterFunction("apiSandBox", null, typeof(LuaEnv).GetMethod("RunSandBox")); //沙盒环境 /////////////// //XML操作接口// ////////////// lua.RegisterFunction("apiXmlReplayGet", null, typeof(XmlApi).GetMethod("replay_get")); //随机获取一条结果 lua.RegisterFunction("apiXmlListGet", null, typeof(XmlApi).GetMethod("list_get")); //获取所有回复的列表 lua.RegisterFunction("apiXmlDelete", null, typeof(XmlApi).GetMethod("del")); //删除所有匹配的条目 lua.RegisterFunction("apiXmlRemove", null, typeof(XmlApi).GetMethod("remove")); //删除完全匹配的第一个条目 lua.RegisterFunction("apiXmlInsert", null, typeof(XmlApi).GetMethod("insert")); //插入一个词条 lua.RegisterFunction("apiXmlSet", null, typeof(XmlApi).GetMethod("set")); //更改某条的值 lua.RegisterFunction("apiXmlGet", null, typeof(XmlApi).GetMethod("xml_get")); //获取某条的结果 lua.DoFile(Common.AppDirectory + "lua/require/head.lua"); }
public (Action tritonAction, Action nluaAction) Benchmark_ReadString(Triton.Lua triton, NLua.Lua nlua) { triton["test"] = "test"; nlua["test"] = "test"; void Triton() { var t = triton["test"]; } void NLua() { var t = nlua["test"]; } return(Triton, NLua); }
public (Action tritonAction, Action nluaAction) Benchmark_WriteBoolean(Triton.Lua triton, NLua.Lua nlua) { var tritonTable = triton.CreateTable(); var nluaTable = (NLua.LuaTable)nlua.DoString("return {}")[0]; void Triton() => tritonTable["test"] = false; void NLua() => nluaTable["test"] = false; return(Triton, NLua); }
public (Action tritonAction, Action nluaAction) Benchmark_ReadObject(Triton.Lua triton, NLua.Lua nlua) { triton["test"] = new object(); nlua["test"] = new object(); void Triton() { var t = triton["test"]; } void NLua() { var t = nlua["test"]; } return(Triton, NLua); }