Beispiel #1
0
 public void EnterTree()
 {
     try
     {
         engine.Invoke("enterTree");
     }
     catch (Exception e)
     {
         GD.Print(e);
     }
 }
        public IActionResult VerifyTurn(TurnFieldsViewModel f)
        {
            // حذف موارد قبلی
            _repository.DeleteTurnDetails(f.Turn.ID);

            // اضافه کردن جزییات
            if (f.ExpertFields != null)
            {
                _repository.AddTurnDetails(f.Turn.ID, f.ExpertFields);
            }

            // دریافت فرمول و محاسبه
            {
                var formula = _repository.GetSetting(Settings.Formula);

                formula = Regex.Replace(formula, "\\[([-a-z0-9]+)\\]",
                                        m => _repository.GetTurnDetailsValue(f.Turn.ID, m.Groups[1].Value.ToLower()), RegexOptions.IgnoreCase);

                string func = @"function Func() {" + formula + "}";

                var GetResult = new Jint.Engine()
                                .Execute(func)
                                .GetValue("Func");

                var price = (long)(double)GetResult.Invoke().ToObject();

                f.Turn.Price = price;
            }

            _repository.UpdateTurnPrice(f.Turn.ID, f.Turn.Price);

            return(View(this.GetViewName("VerifyTurn"), f.Turn));
        }
Beispiel #3
0
        public void JintCanAccessGame()
        {
            // This is a less valid test now vs. when we were using Moonsharp/Lua.  Then,
            // we were testing that the classes were registered correctly in the script
            // engine, now, we're just sort of testing that Jint works.
            var script = new Jint.Engine();

            script.Execute(@"
                function fireGameEvent(events, game)
                {
                    events.RoundStart_Fire(game);
                }
            ");

            var  game  = new Game();
            bool fired = false;

            GameEvents.Instance.RoundStart += g =>
            {
                fired = true;
                Assert.AreEqual(game, g);
            };
            script.Invoke("fireGameEvent", GameEvents.Instance, game);
            Assert.IsTrue(fired);
        }
Beispiel #4
0
        /// <summary>
        /// 获取一淘的sign
        /// </summary>
        /// <param name="_m_h5_tk"> 第一个参数 是服务器产生的私钥-公钥 _m_h5_tk=8a1c196f9c4cc68b00b8e46858cef6d7_1499930011052;  8a开头_结束</param>
        /// <param name="timestnap">时间戳 ,通过js生成13位的时间戳</param>
        /// <param name="appkey">第三个是固定的key ,一淘的是 12574478</param>
        /// <param name="paraData">需要加密的参数字符串 ,比如:"{\"s\":0,\"n\":40,\"q\":\"植物\",\"needEncode\":false,\"sort\":\"sales_desc\",\"maxPrice\":10000000,\"minPrice\":0,\"serviceList\":\"\",\"navigator\":\"all\",\"urlType\":2}"</param>
        /// <returns></returns>
        public static string getEtaoJSSDKSign(string _m_h5_tk, string timestamp, string appkey, string paraData)
        {
            //方法1:
            //先打开etao  点击搜索框 触发热词检索。断网!!!!!在chrome中 即可发现 触发的位置;
            //点击进去,然后点击 下面的{}进行代码格式化
            //联网后,重新触发算法,断点调试进去;找到调用堆栈 u = r([n.cookie.replace(/.*?(?:\b|;)\s*_m_h5_tk=([^;]+).*$|.*/, "$1").split("_")[0], a, t.appKey, e].join("&"));
            //格式化的js 代码,查看r=function 的开始结束,即可找出算法!!!
            //从 一淘官方提取的 js 加密sign 方法 在 https://g.alicdn.com/etao/lego2-pc/0.1.0/app/??libs/crox-min.js,libs/pc-mtop-min.js,libs/include-min.js,libs/popupManager-min.js
            //方法2:
            //第一步 从js 文件中搜索 api 找到getSearchList:"mtop.etao.fe.search"
            //第二部 使用IE 在这里尝试打断点,触发事件 也可以尝试断网,让js 报错 逆向找出请求源
            // 从index.js  中  监听 renderMain:function(a){var t=this,r=e.Defer(),n=r.promise;i({api:g.getSearchList,v:"1.0",data:t.generateRequestParams(),callback:fun  按钮点击排序时间
            // 使用IE 11    F12进行跟踪断点调试  单步
            // 最后在 app js
            ///w=function(t){if(t.api){t=S(t,E.params),t.retry=parseInt(t.retry)||0;var e=c(t.data,!1),a=i(),u=r([n.cookie.replace(/.*?(?:\b|;)\s*_m_h5_tk=([^;]+).*$|.*/,"$1").split("_")[0],a,t.appKey,e].join("&")); o("//" + d + "." + g + "." + h + "." + m + "/h5/" + t.api + "/" + t.v + "/",{ type: "jsonp",api: t.api,v: t.v,appKey: t.appKey,data: e,t: a,sign: u},function(n){ n = n ||{ }; var e = (n.ret ||["UNKNOW::未知错误,请检查网络是否正常后重试"])[0], r = n.data ||{ }; if (/^ SUCCESS /.test(e)) "function" == typeof t.callback&& t.callback(r, null, n); else { e = e.split("::"); var o = e[0], a = e[1]; if (/ SESSION_EXPIRED /.test(o)) a = "未登录淘宝账号"; else if (/^ FAIL_SYS | TOKEN_EXOIRED | TOKEN_EMPTY | BIZ_UNAVAILABLE | NO_NETWORK |^ UNKNOW$/.test(o) && !/^ FAIL_SYS_(SERVICE_NOT_EXIST | API_NOT_FOUNDED | ILLEGAL_ACCESS)$/.test(o) && --t.retry >= 0)return E(t),!1; "function" == typeof t.callback&& t.callback(r,{ code: o,msg: a},n)} })}},
            //可以尝试把代码 格式化到 typesctipt 里进行在线代码调试
            //单步调试跟踪到签名算法----下面的是格式化后的

            string getSignScript = @"var r=function(t){function n(t,n){return t<<n|t>>>32-n}function e(t,n){var e,r,o,a,c;return o=2147483648&t,a=2147483648&n,e=1073741824&t,r=1073741824&n,c=(1073741823&t)+(1073741823&n),e&r?2147483648^c^o^a:e|r?1073741824&c?3221225472^c^o^a:1073741824^c^o^a:c^o^a}function r(t,n,e){return t&n|~t&e}function o(t,n,e){return t&e|n&~e}function a(t,n,e){return t^n^e}function c(t,n,e){return n^(t|~e)}function i(t,o,a,c,i,u,l){return t=e(t,e(e(r(o,a,c),i),l)),e(n(t,u),o)}function u(t,r,a,c,i,u,l){return t=e(t,e(e(o(r,a,c),i),l)),e(n(t,u),r)}function l(t,r,o,c,i,u,l){return t=e(t,e(e(a(r,o,c),i),l)),e(n(t,u),r)}function f(t,r,o,a,i,u,l){return t=e(t,e(e(c(r,o,a),i),l)),e(n(t,u),r)}function s(t){for(var n,e=t.length,r=e+8,o=(r-r%64)/64,a=16*(o+1),c=new Array(a-1),i=0,u=0;u<e;)n=(u-u%4)/4,i=u%4*8,c[n]=c[n]|t.charCodeAt(u)<<i,u++;return n=(u-u%4)/4,i=u%4*8,c[n]=c[n]|128<<i,c[a-2]=e<<3,c[a-1]=e>>>29,c}function p(t){var n,e,r='',o='';for(e=0;e<=3;e++)n=t>>>8*e&255,o='0'+n.toString(16),r+=o.substr(o.length-2,2);return r}function d(t){t=t.replace(/\r\n/g,'\n');for(var n='',e=0;e<t.length;e++){var r=t.charCodeAt(e);r<128?n+=String.fromCharCode(r):r>127&&r<2048?(n+=String.fromCharCode(r>>6|192),n+=String.fromCharCode(63&r|128)):(n+=String.fromCharCode(r>>12|224),n+=String.fromCharCode(r>>6&63|128),n+=String.fromCharCode(63&r|128))}return n}var g,h,m,v,b,y,C,S,w,E=[],_=7,I=12,N=17,j=22,A=5,k=9,O=14,L=20,T=4,U=11,K=16,R=23,F=6,$=10,x=15,D=21;for(t=d(t),E=s(t),y=1732584193,C=4023233417,S=2562383102,w=271733878,g=0;g<E.length;g+=16)h=y,m=C,v=S,b=w,y=i(y,C,S,w,E[g+0],_,3614090360),w=i(w,y,C,S,E[g+1],I,3905402710),S=i(S,w,y,C,E[g+2],N,606105819),C=i(C,S,w,y,E[g+3],j,3250441966),y=i(y,C,S,w,E[g+4],_,4118548399),w=i(w,y,C,S,E[g+5],I,1200080426),S=i(S,w,y,C,E[g+6],N,2821735955),C=i(C,S,w,y,E[g+7],j,4249261313),y=i(y,C,S,w,E[g+8],_,1770035416),w=i(w,y,C,S,E[g+9],I,2336552879),S=i(S,w,y,C,E[g+10],N,4294925233),C=i(C,S,w,y,E[g+11],j,2304563134),y=i(y,C,S,w,E[g+12],_,1804603682),w=i(w,y,C,S,E[g+13],I,4254626195),S=i(S,w,y,C,E[g+14],N,2792965006),C=i(C,S,w,y,E[g+15],j,1236535329),y=u(y,C,S,w,E[g+1],A,4129170786),w=u(w,y,C,S,E[g+6],k,3225465664),S=u(S,w,y,C,E[g+11],O,643717713),C=u(C,S,w,y,E[g+0],L,3921069994),y=u(y,C,S,w,E[g+5],A,3593408605),w=u(w,y,C,S,E[g+10],k,38016083),S=u(S,w,y,C,E[g+15],O,3634488961),C=u(C,S,w,y,E[g+4],L,3889429448),y=u(y,C,S,w,E[g+9],A,568446438),w=u(w,y,C,S,E[g+14],k,3275163606),S=u(S,w,y,C,E[g+3],O,4107603335),C=u(C,S,w,y,E[g+8],L,1163531501),y=u(y,C,S,w,E[g+13],A,2850285829),w=u(w,y,C,S,E[g+2],k,4243563512),S=u(S,w,y,C,E[g+7],O,1735328473),C=u(C,S,w,y,E[g+12],L,2368359562),y=l(y,C,S,w,E[g+5],T,4294588738),w=l(w,y,C,S,E[g+8],U,2272392833),S=l(S,w,y,C,E[g+11],K,1839030562),C=l(C,S,w,y,E[g+14],R,4259657740),y=l(y,C,S,w,E[g+1],T,2763975236),w=l(w,y,C,S,E[g+4],U,1272893353),S=l(S,w,y,C,E[g+7],K,4139469664),C=l(C,S,w,y,E[g+10],R,3200236656),y=l(y,C,S,w,E[g+13],T,681279174),w=l(w,y,C,S,E[g+0],U,3936430074),S=l(S,w,y,C,E[g+3],K,3572445317),C=l(C,S,w,y,E[g+6],R,76029189),y=l(y,C,S,w,E[g+9],T,3654602809),w=l(w,y,C,S,E[g+12],U,3873151461),S=l(S,w,y,C,E[g+15],K,530742520),C=l(C,S,w,y,E[g+2],R,3299628645),y=f(y,C,S,w,E[g+0],F,4096336452),w=f(w,y,C,S,E[g+7],$,1126891415),S=f(S,w,y,C,E[g+14],x,2878612391),C=f(C,S,w,y,E[g+5],D,4237533241),y=f(y,C,S,w,E[g+12],F,1700485571),w=f(w,y,C,S,E[g+3],$,2399980690),S=f(S,w,y,C,E[g+10],x,4293915773),C=f(C,S,w,y,E[g+1],D,2240044497),y=f(y,C,S,w,E[g+8],F,1873313359),w=f(w,y,C,S,E[g+15],$,4264355552),S=f(S,w,y,C,E[g+6],x,2734768916),C=f(C,S,w,y,E[g+13],D,1309151649),y=f(y,C,S,w,E[g+4],F,4149444226),w=f(w,y,C,S,E[g+11],$,3174756917),S=f(S,w,y,C,E[g+2],x,718787259),C=f(C,S,w,y,E[g+9],D,3951481745),y=e(y,h),C=e(C,m),S=e(S,v),w=e(w,b);var Y=p(y)+p(C)+p(S)+p(w);return Y.toLowerCase()}";


            var ck    = _m_h5_tk.Split('_')[0]; //"8a1c196f9c4cc68b00b8e46858cef6d7";
            var t     = timestamp;              // "1499931938374";////function () { var n = (new Date).getTime(); return n <= t && (n = t + 1), t = n }();
            var key   = appkey;                 // "12574478";
            var paras = paraData;               // "{\"s\":0,\"n\":40,\"q\":\"植物\",\"needEncode\":false,\"sort\":\"sales_desc\",\"maxPrice\":10000000,\"minPrice\":0,\"serviceList\":\"\",\"navigator\":\"all\",\"urlType\":2}";

            var paraSring = string.Join("&", ck, t, key, paras);
            var add       = new Jint.Engine()
                            .Execute(getSignScript)
                            .GetValue("r");

            var val = add.Invoke(paraSring);

            return(val.ToString());
        }
Beispiel #5
0
        /// <summary>
        /// 通过js脚本执行获取时间戳
        /// </summary>
        /// <returns></returns>
        public static string getUnixTimestamp()
        {
            string cmd    = "function timeToken(){var t=0; var n=(new Date).getTime();return n<=t&&(n=t+1),t=n};";
            var    engine = new Jint.Engine().Execute(cmd).GetValue("timeToken");
            string stamp  = engine.Invoke().ToString();

            return(stamp);
        }
Beispiel #6
0
 public void RunScrypt(Game g)
 {
     GameEvents.Instance.ActorActionsStart_Fire(g, this);
     if (jint != null)
     {
         jint.Invoke("actorActions", g, this);
     }
     GameEvents.Instance.ActorActionsEnd_Fire(g, this);
 }
Beispiel #7
0
        static void classAccess()
        {
            var engine = new Jint.Engine();

            engine.Execute(@"
            function test1(obj) {
                callback(obj.publicNum);
                callback(obj.publicString);
                callback(obj.someEnum);
                callback(obj.publicReadonlyString);

                obj.someList.Add(12345);
                callback(obj.someList[obj.someList.Count - 1]);
            }
            function test2(obj1, obj2) {
                obj1.SomeMethod(obj2);
            }
            function test3(obj) {
                return obj;
            }
            ");

            engine.SetValue("callback", new Action <string>(s => { Console.WriteLine($"callback from js: {s}"); }));

            // javascript access of class members
            var someObj = new SomeClass(21, "12");

            engine.Invoke("test1", someObj);

            // javascript calling a C# method, passing it a C# object
            var someOther = new SomeClass(22, "22");

            engine.Invoke("test2", someObj, someOther);

            // javascript returning a C# object
            var result = engine.Invoke("test3", someObj);

            Debug.Assert(result.ToObject() == someObj);
        }
        public void AttackTargetShouldClearTargetAfterAttack()
        {
            var test = new TestGameWithActors();

            test.ArmAlice();
            test.AggroAliceAndTargetCarly();

            var jint = new Jint.Engine();

            jint.Execute(ScryptUtil.attackTargets.body);
            jint.Invoke(ScryptUtil.attackTargets.name, test.game, test.playerAlice);

            Assert.IsFalse(test.mobCarly.Targeted);
        }
Beispiel #9
0
        public void JintCanAccessGame()
        {
            var testGame = new Game();

            var script = new Jint.Engine();

            script.Execute(@"
                function accessGame(game) {
                    game.PlayRound()
                }
            ");
            script.Invoke("accessGame", testGame);
            Assert.AreEqual(1, testGame.NumRounds);
        }
Beispiel #10
0
        public void AttackTargetShouldDealDamage()
        {
            var test = new TestGameWithActors();

            test.ArmAlice();
            test.mobCarly.Targeted = true;

            var jint = new Jint.Engine();

            jint.Execute(ScryptUtil.attackTargets.body);
            jint.Invoke(ScryptUtil.attackTargets.name, test.game, test.playerAlice);

            Assert.AreEqual(test.mobCarly.Health, test.mobCarly.baseHealth - test.playerAlice.Weapon.damage);
        }
Beispiel #11
0
        public void ChooseRandomLivingShouldNotChooseDead()
        {
            var test = new TestGameWithActors();

            test.playerBob.TakeDamage(test.mobCarly.baseHealth);
            test.playerAlice.TakeDamage(test.mobDenise.baseHealth);

            var jint = new Jint.Engine();

            jint.Execute(ScryptUtil.chooseRandom.body);

            var rng    = new RNG(0);
            var choice = jint.Invoke(ScryptUtil.chooseRandom.name, test.game.Players, rng);

            Assert.IsTrue(choice.IsNull());
        }
Beispiel #12
0
        public void ChooseRandomLivingShouldChoosePseudoRandomly()
        {
            var test = new TestGameWithActors();
            var jint = new Jint.Engine();

            jint.Execute(ScryptUtil.chooseRandom.body);

            var rng = new RNG(0);

            void TestChooseRandom(GameActor actor)
            {
                Assert.AreEqual(actor, jint.Invoke(ScryptUtil.chooseRandom.name, test.game.Players, rng).ToObject());
            }

            TestChooseRandom(test.playerBob);
            TestChooseRandom(test.playerAlice);
            TestChooseRandom(test.playerBob);
            TestChooseRandom(test.playerBob);
            TestChooseRandom(test.playerAlice);
        }
Beispiel #13
0
        public JsonElement Evaluate(string code, JsonElement input)
        {
            // Create a JS engine with some sandbox limits
            var engine = new Jint.Engine(options =>
            {
                options
                .LimitRecursion(1)
                .TimeoutInterval(new TimeSpan(0, 0, 3));
            });

            var jsonParser = new JsonParser(engine);
            var jintInput  = jsonParser.Parse(input.ToString());

            // Go!
            engine.Execute(code);
            var result = engine.Invoke("run", jintInput);

            // Parse engine result object into json
            var stringResult = engine.Json.Stringify(result, Jint.Runtime.Arguments.From(result)).ToString();

            return(JsonDocument.Parse(stringResult).RootElement);
        }
Beispiel #14
0
        public static JObject ExtractFinderPropertyFromFile(string fileName)
        {
            JObject result = default;

            try
            {
                using (var fileStream = File.Open(fileName, FileMode.Open))
                {
                    using (StreamReader reader = new StreamReader(fileStream))
                    {
                        var fileContent = reader.ReadToEnd();
                        fileContent = $"var jQuery = {{}};{fileContent}; function GetSg(){{return JSON.stringify(sg);}};";
                        var jIntEngine = new Jint.Engine();
                        jIntEngine.Execute(fileContent);
                        result = JsonConvert.DeserializeObject(jIntEngine.Invoke("GetSg").AsString()) as JObject;
                    }
                }
            }
            catch
            {
                //TODO log something here!!
            }
            return(result);
        }
Beispiel #15
0
        public void Awake()
        {
            // Loading
            var engine = new Jint.Engine();

            //var logic = new Interpreter();
            Registers   = new Dictionary <Type, Action <BlockBehaviour, KeyInputController> >();
            Unregisters = new Dictionary <Type, Action <BlockBehaviour> >();

            ModConsole.RegisterCommand("script", args => {
                var text = string.Join(" ", args);
                //var func = logic.PrepareScript(text);
                //logic.AddExtFunc(func, "print", (ctx, x) => { ModConsole.Log(x[0]?.ToString()); return null; }, true);
                //logic.SetScript(func);
                //var res = logic.ContinueScript(1000);
                Func <JsValue, JsValue[], JsValue> printCb = (thiz, x) => {
                    ModConsole.Log(x[0]?.ToObject().ToString());
                    return(x[0]);
                };

                JsValue curV = null;
                Func <JsValue, JsValue[], JsValue> irqv = (thiz, x) => {
                    curV = x[0];
                    return(null);
                };
                var script = new JavaScriptParser(text, Jint.Engine.DefaultParserOptions).ParseScript();
                engine.SetValue("print", printCb);
                engine.SetValue("irqv", irqv);
                engine.SetScript(script);
                engine.Executor.OnLog = (x) => ModConsole.Log(x?.ToString());
                bool cli = false;
                engine.Executor.OnNextStatement = () =>
                {
                    if (cli)
                    {
                        return;
                    }
                    cli = true;
                    try
                    {
                        if (curV != null)
                        {
                            engine.Invoke(curV);
                        }
                    }
                    finally
                    {
                        cli = false;
                    }
                };
                var res = engine.ContinueScript(1000);
                ModConsole.Log(res?.ToString());
            }, "exec script");

            ModConsole.RegisterCommand("cpuapi", args =>
            {
                foreach (var line in SingleInstance <Blocks.Api.CpuApi> .Instance.GetHelp())
                {
                    ModConsole.Log(line);
                }
            }, "print cpu api list");

            ModConsole.RegisterCommand("sensordbg", args =>
            {
                DrawSensorDebug = args.Length < 1 ? false : args[0] == "true";
            }, "print sensor debug points");

            CpuBlock.Create(this);
            // These creator functions find corresponding block in game prefabs
            // and replace it with inheritor
            ExtLogicGate.Create(this);
            ExtAltimeterBlock.Create(this);
            ExtSpeedometerBlock.Create(this);
            ExtAnglometerBlock.Create(this);
            ExtSensorBlock.Create(this);
            ModConsole.Log($"Logic mod Awake");

            Events.OnMachineSimulationToggle += Events_OnMachineSimulationToggle;
            LineMaterial           = new Material(Shader.Find("Hidden/Internal-Colored"));
            LineMaterial.hideFlags = HideFlags.HideAndDontSave;
            LineMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
            LineMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
            LineMaterial.SetInt("_Cull", (int)UnityEngine.Rendering.CullMode.Off);
            LineMaterial.SetInt("_ZWrite", 0);

            Camera.onPostRender += DrawConnectingLines;
            Events.OnBlockInit  += InitBlock;

            CpuInfoMessage = ModNetworking.CreateMessageType(new DataType[]
            {
                DataType.Block,
                DataType.ByteArray
            });

            CpuLogMessage = ModNetworking.CreateMessageType(new DataType[]
            {
                DataType.Block,
                DataType.String
            });

            ModNetworking.Callbacks[CpuInfoMessage] += (Action <Message>)((msg) =>
            {
                Player localPlayer = Player.GetLocalPlayer();
                if (msg == null || localPlayer == null || !localPlayer.IsHost)
                {
                    return;
                }

                var block = msg.GetData(0) as Modding.Blocks.Block;
                if (!(block?.BlockScript is CpuBlock cpu))
                {
                    return;
                }

                if (block.Machine == localPlayer.Machine)
                {
                    return; // don't read updates for MY machine!
                }
                cpu.AfterEdit_ServerRecv((byte[])msg.GetData(1));
            });

            ModNetworking.Callbacks[CpuLogMessage] += (Action <Message>)((msg) =>
            {
                if (msg == null)
                {
                    return;
                }

                var block = msg.GetData(0) as Modding.Blocks.Block;
                if (!(block?.BlockScript is CpuBlock cpu))
                {
                    return;
                }

                cpu.LogMessage((string)msg.GetData(1));
            });
        }
Beispiel #16
0
 public T CallFunction <T>(string function, params object[] arguments) where T : class
 {
     return(_engine.Invoke(function, arguments).ToObject() as T);
 }
Beispiel #17
0
 public static void SetBridge(BridgeInterceptor bridge)
 {
     engine.Invoke("BuildBridge", bridge);
 }
Beispiel #18
0
 public T CallFunction <T>(string function, params object[] arguments)
 {
     return((T)_engine.Invoke(function, arguments).ToObject());
 }