示例#1
0
        public override Result <Session> PerformCommand(Session session, string line)
        {
            if (!session.Sub.Kinks.Contains(Kink.CockTorture))
            {
                return(Result.Ok(session));
            }

            var workingSession = session.Clone();
            var getTaskData    = _lineService.GetParenData(line, Keyword.CustomTask);

            if (getTaskData.IsFailure)
            {
                return(Result.Fail <Session>(getTaskData.Error));
            }

            var fileName = getTaskData.Value[0] + (workingSession.Sub.BallsTortureCount == 0 ? "_First" : string.Empty) + ".txt";
            var waitTime = _randomNumberService.Roll(workingSession.MinimumTaskTime, workingSession.MaximumTaskTime);

            if (getTaskData.Value.Count > 1)
            {
                int.TryParse(getTaskData.Value[1], out waitTime);
            }

            var filePath = _pathsAccessor.GetPersonalityFolder(workingSession.Domme.PersonalityName)
                           + Path.DirectorySeparatorChar + "Custom"
                           + Path.DirectorySeparatorChar + "Tasks"
                           + Path.DirectorySeparatorChar + fileName;

            var lines   = File.ReadAllLines(filePath);
            var message = lines[_randomNumberService.Roll(0, lines.Count())];
            var smd     = new Script(new ScriptMetaData
            {
                Info      = "Custom Task Interrupt",
                IsEnabled = true,
                Key       = "CBT",
                Name      = "Ball Torture" + workingSession.Sub.BallsTortureCount.ToString()
            },
                                     new List <string>
            {
                message,
                Keyword.Wait + waitTime.ToString() + ")",
                Keyword.End,
            });

            workingSession.Scripts.Push(smd);

            OnCommandProcessed(workingSession, null);

            return(Result.Ok(workingSession));
        }
        public override Result <Session> PerformCommand(Session session, string line)
        {
            var personalityFolder = _pathsAccessor.GetPersonalityFolder(session.Domme.PersonalityName);

            return(_lineService.GetParenData(line, _keyword)
                   .Ensure(pData => pData.Count == 1, "@TauntFromFile(...) must have only one option")
                   .OnSuccess(pData => pData[0])
                   .OnSuccess(fileArg => personalityFolder + Path.DirectorySeparatorChar + fileArg)
                   .Ensure(file => File.Exists(file), "Unable to find the file specified in " + personalityFolder)
                   .OnSuccess(file => _lineCollectionFilter.FilterLines(session, file))
                   .OnSuccess(lines => lines[_randomNumberService.Roll(0, lines.Count() - 1)])
                   .OnSuccess(l => OnCommandProcessed(session, l))
                   .Map(l => session));
        }
示例#3
0
        public Result <List <ScriptMetaData> > GetAllScripts(string dommePersonalityName)
        {
            var checkList      = new List <ScriptMetaData>();
            var personalityDir = _pathsAccessor.GetPersonalityFolder(dommePersonalityName);
            var scriptDatas    = new List <Tuple <string, SessionPhase> >
            {
                Tuple.Create("stroke", SessionPhase.Start),
                Tuple.Create("Modules", SessionPhase.Modules),
                Tuple.Create("stroke", SessionPhase.Link),
                Tuple.Create("stroke", SessionPhase.End),
            };

            foreach (var scriptData in scriptDatas)
            {
                var cldFile    = _pathsAccessor.GetScriptCld(dommePersonalityName, scriptData.Item2);
                var scriptDir  = _pathsAccessor.GetScriptDir(dommePersonalityName, scriptData.Item1, scriptData.Item2);
                var getScripts = _cldAccessor.ReadCld(scriptDir, cldFile)
                                 .OnSuccess(clData =>
                {
                    clData.ForEach(cld =>
                    {
                        cld.SessionPhase = scriptData.Item2;
                        cld.Info         = GetScriptInfo(cld.Key);
                    });
                    checkList.AddRange(clData);
                });
                if (getScripts.IsFailure)
                {
                    return(getScripts);
                }
            }
            return(Result.Ok(checkList));
        }
        protected override Result ParseCommandSpecific(Script script, string personalityName, string line)
        {
            var cbtFolder = _pathsAccessor.GetPersonalityFolder(personalityName) + Path.DirectorySeparatorChar + "cbt" + Path.DirectorySeparatorChar;

            return(Result.Ok()
                   .Ensure(() => File.Exists(cbtFolder + "cbtball.txt"), "Ball torture script does not exist at " + cbtFolder + "cbtball.txt")
                   .Ensure(() => File.Exists(cbtFolder + "cbtball_first.txt"), "First ball torture script does not exist at " + cbtFolder + "cbtball_first.txt"));
        }