public override bool Start(FieldUser target, FieldNPC self) { var script = self.Template.Scripts.FirstOrDefault()?.Script; if (target.ConversationContext != null) { return(false); } if (script == null) { return(false); } script = Path.Combine(_options.ScriptPath, $"{script}.lua"); if (!File.Exists(script)) { return(false); } var context = new ConversationContext(new CancellationTokenSource(), target.Socket); var conversation = new ScriptedConversation <FieldUserSpeaker, FieldNPCSpeaker>(script); target.ConversationContext = context; conversation.Start( context, new FieldUserSpeaker(context, target), new FieldNPCSpeaker(context, self) ).ContinueWith(t => { target.ConversationContext = null; target.ModifyStats(exclRequest: true); }); return(true); }
public override Task Start(ConversationContext context, T target, S self) { var script = new Script(); script.Globals["target"] = UserData.Create(target); script.Globals["self"] = UserData.Create(self); return(Task.Run(() => { try { script.DoFile(_scriptPath); } catch (Exception e) { Logger.Error(e.ToString); } }, context.TokenSource.Token)); }
public abstract Task Start(ConversationContext context, T target, S self);