public EnemyCreator(string scriptPath) { scriptAPI = new ScriptAPI(); var script = new Emugen.Script.Script <ScriptAPI>(scriptPath, scriptAPI); script.Run(); }
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())); } }
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); } }
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; }
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); }
/// <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); }
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; } }; } }
/// <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()); }