Example #1
0
        public EnemyCreator(string scriptPath)
        {
            scriptAPI = new ScriptAPI();
            var script = new Emugen.Script.Script <ScriptAPI>(scriptPath, scriptAPI);

            script.Run();
        }
Example #2
0
        public async Task <IActionResult> ExecuteAgent(string agent)
        {
            try
            {
                if (string.IsNullOrEmpty(agent))
                {
                    return(BadRequest("No agent specified"));
                }
                var agentPath = Path.GetFullPath(Path.Combine(WebHostEnvironment.ContentRootPath, "Agents/" + agent + ".txt"));
                if (!agentPath.StartsWith(WebHostEnvironment.ContentRootPath))
                {
                    return(Problem("Security issue! Path outside of web root! Agentname:" + agent));
                }
                var scriptContent = System.IO.File.ReadAllText(agentPath);
                var api           = new ScriptAPI(InputManager);
                var value         = await CSharpScript.EvaluateAsync <string>(scriptContent, globals : api);

                switch (api.ReturnValue.ValueType)
                {
                case ScriptReturnValue.ValueTypeEnum.Value:
                    return(Content(api.ReturnValue.Value));

                case ScriptReturnValue.ValueTypeEnum.Url:
                    return(Redirect(api.ReturnValue.Value));

                default:
                    return(Content(api.ReturnValue.Value));
                }
            }
            catch (Exception ex)
            {
                return(Problem("Could not execute agent:" + ex.ToString()));
            }
        }
Example #3
0
        public TalkScene(string talkScriptPath)
        {
            this.talkScriptPath = talkScriptPath;

            // 前回(今現在)の画面を取得
            {
                //var bmp = new System.Drawing.Bitmap("data/image/bg/酒場.png");
                var bmp     = WindowManager.ScreenShot();
                var texture = new Texture(bmp);
                var w       = 1600;
                var h       = (int)((double)bmp.Height / (double)bmp.Width * w);
                var sprite  = new ImageSprite(texture, new Rect(new Vector2D(0, 0), new Vector2D(w, h)), new Color(1, 1, 1, 1));
                layer.Add(sprite, 10000);

                sceneStartFadeImageSprite = sprite;
            }

            // 立ち絵のフェードで表示するための、イージングの数値を計算
            {
                fadeTimerSpline = new Emugen.Image.Animation.BSplineXtoY(
                    new Vector2D[] { new Vector2D(0, 0), new Vector2D(0, 1), new Vector2D(1, 1) },
                    100);
            }
            {
                slideTimerSpline = new Emugen.Image.Animation.BSplineXtoY(
                    new Vector2D[] { new Vector2D(0, 0), new Vector2D(0, 1), new Vector2D(1, 1) },
                    100);
            }

            // スクリプトの実行
            scriptAPI = new ScriptAPI();
            {
                var thread = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadScriptRun));
                scriptAPI.thread = thread;
                thread.Start();
            }

            {
                var bmp     = new System.Drawing.Bitmap(Config.MainConfig.TalkScene.NextWaitIcon);
                var texture = new Texture(bmp);
                var w       = 30;
                var h       = (int)((double)bmp.Height / (double)bmp.Width * w);
                var sprite  = new ImageSprite(texture, new Rect(new Vector2D(1400 + 50, 600), new Vector2D(w, h)), new Color(1, 1, 1, 1));
                layer.Add(sprite, 200);

                ImageSpriteWaitEnterIcon = sprite;
            }

            {
                var sprite = new PlaneSprite(new Rect(new Vector2D(100, 600), new Vector2D(300, 40)), new Color(0.5, 0, 0, 0));
                layer.Add(sprite, 150);
            }
            {
                var sprite = new PlaneSprite(new Rect(new Vector2D(100, 650), new Vector2D((1600 - 200), 40 + 50 * 3)), new Color(0.5, 0, 0, 0));
                layer.Add(sprite, 150);
            }
        }
Example #4
0
 private bool CallAPI(ScriptAPI code)
 {
     switch (code)
     {
         case ScriptAPI.API_BLOCKHEIGHT:
             if (Blockchain.Default == null) return false;
             stack.Push(Blockchain.Default.Height);
             break;
         case ScriptAPI.API_TIME:
             stack.Push(DateTime.Now.ToTimestamp());
             break;
         default:
             return false;
     }
     return true;
 }
Example #5
0
        private bool CallAPI(ScriptAPI code)
        {
            switch (code)
            {
            case ScriptAPI.API_BLOCKHEIGHT:
                if (Blockchain.Default == null)
                {
                    return(false);
                }
                stack.Push(Blockchain.Default.Height);
                break;

            case ScriptAPI.API_TIME:
                stack.Push(DateTime.Now.ToTimestamp());
                break;

            default:
                return(false);
            }
            return(true);
        }
Example #6
0
        /// <summary>
        /// Parses the API type information from the request
        /// </summary>
        protected ScriptAPI GetAPIFromRequest(string request)
        {
            ScriptAPI APICallType = ScriptAPI.Unknown;
            string    filename    = Path.GetFileNameWithoutExtension(request) ?? string.Empty;

            string[] tokens = filename.Split('.');

            //assume request will take the form Scripts.APIType
            if (tokens.Length > 1)
            {
                //get the requested API
                switch (tokens[1].ToUpper())
                {
                case "REST":
                    APICallType = ScriptAPI.REST;
                    break;
                }
            }

            return(APICallType);
        }
Example #7
0
        List <Data.Character> retrayPlayerCaracters; // リトライ時の記録・再現用

        public BattleScene(string scriptPath)
        {
            scriptAPI = new ScriptAPI();
            script    = new Emugen.Script.Script <ScriptAPI>(scriptPath, scriptAPI);
            script.Run();

            var data = Data.DataCreater.Instance;

            if (scriptAPI.__bgmPath != null)
            {
                var bgm = new Emugen.Sound.SoundPlayer(scriptAPI.__bgmPath, 0.20f, true, Emugen.Sound.SoundPlayer.SoundType.BGM);
            }

            SetupPlayers();
            SetupEnemys();

            {
                PlayerCards = new UI.PlayerCard.PlayerCards();
                layer.Add(PlayerCards, 30);
            }

            {
                EnemyCards = new UI.EnemyCard.EnemyCards();
                layer.Add(EnemyCards, 20);
            }

            {
                var bmp     = new System.Drawing.Bitmap(scriptAPI.__backGroundImagePath);
                var texture = new Texture(bmp);

                var w      = 1600;
                var h      = (int)((double)bmp.Height / (double)bmp.Width * w);
                var sprite = new ImageSprite(texture, new Rect(new Vector2D(0, 0), new Vector2D(w, h)), new Color(1, 1, 1, 1));
                layer.Add(sprite, 10);
            }
            {
                var skillCards = new UI.SkillCard.SkillCards();
                layer.Add(skillCards, 40);
                SkillCards = skillCards;
            }

            {
                var sprite = new PlaneSprite(new Rect(new Vector2D(20, 100), new Vector2D(200, 1)), new Color(0.5, 1, 1, 1));
                layer.Add(sprite, 10);
            }
            {
                foreach (var chara in data.playerCharacters)
                {
                    PlayerCards.Add(chara);
                }
                PlayerCards.SetupCardPos();
            }
            SetupEnemysCard();

            {
                PlayerCards.OnSelected += (selectCards) =>
                {
                    switch (uiStep)
                    {
                    case UIStep.None:
                    {
                        var i = (List <UI.PlayerCard.PlayerCard>)selectCards;
                        if (i[0].character.HP.Now == 0)
                        {
                            // 戦闘不能
                        }
                        else
                        {
                            SkillCards.SetStep(UI.SkillCard.SkillCards.Step.ShowPlayerCharacterSkills, i[0].character);
                            var soundPlayer = new Emugen.Sound.SoundPlayer(MainConfig.SoundEffect.UISelect01, 0.10f, false, Emugen.Sound.SoundPlayer.SoundType.SE);
                            uiStep           = UIStep.SkillSelect;
                            SelectPlayerCard = selectCards[0];
                        }
                    }
                    break;

                    case UIStep.SkillSelect:
                        break;

                    case UIStep.SkillTargetSelect:
                        if (!isInputEventNowFrame)
                        {
                            isInputEventNowFrame = true;
                            new Emugen.Sound.SoundPlayer(MainConfig.SoundEffect.UISelect01, 0.10f, false, Emugen.Sound.SoundPlayer.SoundType.SE);

                            uiStep = UIStep.None;
                            EnemyCards.uITargetSelectType  = UI.EnemyCard.EnemyCards.UITargetSelectType.None;
                            PlayerCards.uITargetSelectType = UI.PlayerCard.PlayerCards.UITargetSelectType.None;

                            var i = (List <UI.PlayerCard.PlayerCard>)selectCards;
                            //var i = (List<FafTk.UI.EnemyCard.EnemyCard>)selectCards;
                            var targetCharacters = new List <Data.Character>();
                            foreach (var j in i)
                            {
                                targetCharacters.Add(j.character);
                            }

                            SelectPlayerCard.character.Action(SelectSkillCard.actionSkill, targetCharacters);
                        }
                        break;
                    }
                };
            }
            {
                SkillCards.OnSelected += (selectCard) =>
                {
                    switch (uiStep)
                    {
                    case UIStep.None:
                        break;

                    case UIStep.SkillSelect:
                        if (!isInputEventNowFrame)
                        {
                            isInputEventNowFrame = true;
                            var soundPlayer = new Emugen.Sound.SoundPlayer(MainConfig.SoundEffect.UISelect01, 0.10f, false, Emugen.Sound.SoundPlayer.SoundType.SE);
                            uiStep          = UIStep.SkillTargetSelect;
                            SelectSkillCard = selectCard;

                            if (SelectSkillCard.actionSkill.Main.TargetWord.IndexOf("横列") == 0)
                            {
                                var command = SelectSkillCard.actionSkill.Main.TargetWord.Split(' ');

                                EnemyCards.uITargetSelectType        = UI.EnemyCard.EnemyCards.UITargetSelectType.LineHorizontal;
                                EnemyCards.uITargetSelectTypePalams  = new int[] { int.Parse(command[1]), int.Parse(command[2]), int.Parse(command[3]) };
                                PlayerCards.uITargetSelectType       = UI.PlayerCard.PlayerCards.UITargetSelectType.LineHorizontal;
                                PlayerCards.uITargetSelectTypePalams = new int[] { int.Parse(command[1]), int.Parse(command[2]), int.Parse(command[3]) };
                            }
                            else
                            {
                                var command = SelectSkillCard.actionSkill.Main.TargetWord.Split(' ');

                                EnemyCards.uITargetSelectType        = UI.EnemyCard.EnemyCards.UITargetSelectType.One;
                                EnemyCards.uITargetSelectTypePalams  = new int[] { int.Parse(command[1]) };
                                PlayerCards.uITargetSelectType       = UI.PlayerCard.PlayerCards.UITargetSelectType.One;
                                PlayerCards.uITargetSelectTypePalams = new int[] { int.Parse(command[1]) };
                            }
                        }
                        break;

                    case UIStep.SkillTargetSelect:
                        break;
                    }
                };

                SkillCards.OnClose += () =>
                {
                    switch (uiStep)
                    {
                    case UIStep.None:
                        break;

                    case UIStep.SkillSelect:
                        if (!isInputEventNowFrame)
                        {
                            isInputEventNowFrame = true;
                            var soundPlayer = new Emugen.Sound.SoundPlayer(MainConfig.SoundEffect.UICancel01, 0.15f, false, Emugen.Sound.SoundPlayer.SoundType.SE);

                            uiStep = UIStep.None;
                            EnemyCards.uITargetSelectType  = UI.EnemyCard.EnemyCards.UITargetSelectType.None;
                            PlayerCards.uITargetSelectType = UI.PlayerCard.PlayerCards.UITargetSelectType.None;
                        }
                        break;

                    case UIStep.SkillTargetSelect:
                        break;
                    }
                };
            }
            {
                EnemyCards.OnSelected += (selectCards) =>
                {
                    switch (uiStep)
                    {
                    case UIStep.None:
                        break;

                    case UIStep.SkillSelect:
                        break;

                    case UIStep.SkillTargetSelect:
                        if (!isInputEventNowFrame)
                        {
                            isInputEventNowFrame = true;

                            uiStep = UIStep.None;
                            EnemyCards.uITargetSelectType  = UI.EnemyCard.EnemyCards.UITargetSelectType.None;
                            PlayerCards.uITargetSelectType = UI.PlayerCard.PlayerCards.UITargetSelectType.None;

                            //var result = false;

                            var targetCharacters = new List <Character>();
                            var i = (List <UI.EnemyCard.EnemyCard>)selectCards;
                            foreach (var j in i)
                            {
                                targetCharacters.Add(j.character);
                            }
                            var result = SelectPlayerCard.character.Action(SelectSkillCard.actionSkill, targetCharacters);

                            if (result)
                            {
                                new Emugen.Sound.SoundPlayer(MainConfig.SoundEffect.UISelect01, 0.10f, false, Emugen.Sound.SoundPlayer.SoundType.SE);
                            }
                            else
                            {
                                new Emugen.Sound.SoundPlayer(MainConfig.SoundEffect.UICancel01, 0.10f, false, Emugen.Sound.SoundPlayer.SoundType.SE);
                            }
                        }

                        break;
                    }
                };
            }
        }
Example #8
0
        /// <summary>
        /// Loads the specified API and passes in the request to process
        /// </summary>
        public ScriptResult Process(string request)
        {
            try
            {
                ScriptAPI api = GetAPIFromRequest(request);

                if (api != ScriptAPI.Unknown)
                {
                    loadedScripts = new List <string>();
                    StringBuilder compiledScript = new StringBuilder();
                    string        apiFolder      = Path.Combine(ScriptsPath, "API");

                    //load Base API
                    string baseFile = Path.Combine(apiFolder, "BaseAPI.js");
                    compiledScript.Append(File.ReadAllText(baseFile));

                    string apiPrefix = String.Empty;

                    //set the appropriate api prefix
                    switch (api)
                    {
                    case ScriptAPI.REST:
                        //load main rest api file
                        apiPrefix = "REST";
                        break;
                    }

                    //load up the specified API
                    string apiFile = Path.Combine(apiFolder, String.Format("{0}API.js", apiPrefix));
                    compiledScript.Append(File.ReadAllText(apiFile));

                    //load extended api with any user defined custom methods etc if it exists
                    string extFile = Path.Combine(apiFolder, String.Format("{0}Ext.js", apiPrefix));
                    if (File.Exists(extFile))
                    {
                        compiledScript.Append(File.ReadAllText(extFile));
                    }


                    //instantiate the correct api to use
                    compiledScript.AppendLine(String.Format("var api = new {0}API();", apiPrefix));

                    //initialise the data
                    compiledScript.AppendLine("api.InitialiseData();");

                    //parse the request string
                    compiledScript.AppendLine("api.ParseRequest();");

                    //run generic request validation
                    compiledScript.AppendLine("api.RequestValidation();");

                    //call the process request
                    compiledScript.AppendLine("return api.ProcessRequest();");

                    //assign the Default External Functions
                    Instance.SetFunction("LoadScriptFile", new Jint.Delegates.Func <string, bool>(ScriptEngine.LoadScriptFile));
                    Instance.SetFunction("ConvertDictionaryToList", new Jint.Delegates.Func <Dictionary <string, object>, List <KeyValuePair <string, object> > >(ScriptEngine.ConvertDictionaryToList));
                    Instance.SetFunction("CurrentIPAddress", new Jint.Delegates.Func <string>(FocusOPEN.Business.BusinessHelper.GetCurrentIpAddress));
                    Instance.SetFunction("CurrentHttpRequest", new Jint.Delegates.Func <HttpRequest>(ScriptEngine.CurrentHttpRequest));

                    //disable security
                    Instance.DisableSecurity();

                    //execute the compiled script
                    object returnVal = Instance.Run(compiledScript.ToString());


                    //this should return a ScriptResponse object
                    if (returnVal is ScriptResult)
                    {
                        return((ScriptResult)returnVal);
                    }
                    else
                    {
                        //log problem
                        m_Logger.WarnFormat("The request {0} for the {1} API did not return a valid response object: {2}", request, api.ToString(), returnVal);
                    }
                }
            }catch (JintException jexp) {
                m_Logger.Error(String.Format("Script Error processing request {0}. Jint reported the following exception  - {1}", request, jexp.Message), jexp);
            }
            catch (Exception exp)
            {
                m_Logger.Error(String.Format("Error processing request {0} in the Script Engine", request), exp);
            }

            return(GetEmptyResults());
        }