Пример #1
0
 public void AddMudProg(MudProgData mprog)
 {
     if (!MudProgs.Contains(mprog))
     {
         _mudProgs.Add(mprog);
     }
 }
Пример #2
0
        public static bool Execute(this MudProgData mudProg, CharacterInstance mob, ILuaManager luaManager = null,
                                   ILogManager logManager = null)
        {
            if (mob.IsAffected(AffectedByTypes.Charm))
            {
                return(false);
            }

            if (mudProg.IsFileProg)
            {
                throw new NotImplementedException("File-based MudProgs are not currently implemented!");
            }

            try
            {
                (luaManager ?? LuaManager.Instance).DoLuaScript(mudProg.Script);
            }
            catch (Exception ex)
            {
                (logManager ?? LogManager.Instance).Error(ex);
                return(false);
            }

            return(true);
        }
        public void Execute_Successful_Test()
        {
            var actor = new CharacterInstance(1, "TestChar");

            var mprog = new MudProgData {
                Type = MudProgTypes.Act
            };

            Assert.That(mprog.Execute(actor, _mockedLuaManager.Object, _mockedLogManager.Object), Is.True);
        }
Пример #4
0
        public static MudProgData LuaCreateMudProg(string progType)
        {
            var newMudProg = new MudProgData
            {
                Type = EnumerationExtensions.GetEnumByName <MudProgTypes>(progType)
            };

            _luaManager.Proxy.CreateTable("mprog");
            AddLastObject(newMudProg);
            return(newMudProg);
        }
        public void Execute_IsFileProg_Test()
        {
            var actor = new CharacterInstance(1, "TestChar");

            var mprog = new MudProgData {
                Type = MudProgTypes.Act, IsFileProg = true
            };

            Assert.Throws <NotImplementedException>(
                () => mprog.Execute(actor, _mockedLuaManager.Object, _mockedLogManager.Object),
                "Unit test expected a NotImplementedException to be thrown!");
        }
        public void Execute_IsCharmed_Test()
        {
            var actor = new CharacterInstance(1, "TestChar");

            actor.AffectedBy.SetBit((int)AffectedByTypes.Charm);

            var mprog = new MudProgData {
                Type = MudProgTypes.Act
            };

            Assert.That(mprog.Execute(actor, _mockedLuaManager.Object, _mockedLogManager.Object), Is.False);
        }
Пример #7
0
        public void AddConversation(string keyword, string text)
        {
            if (string.IsNullOrEmpty(keyword) || string.IsNullOrEmpty(text))
            {
                return;
            }

            MudProgData mp = new MudProgData
            {
                Type    = MudProgTypes.Speech,
                ArgList = keyword,
                Script  = $"LMobEmote(\"{text}\");"
            };

            AddMudProg(mp);
        }
        public void Execute_CatchesAndLogsException_Test()
        {
            bool callback = false;

            var actor = new CharacterInstance(1, "TestChar");

            var mprog = new MudProgData {
                Type = MudProgTypes.Act
            };

            _mockedLuaManager.Setup(x => x.DoLuaScript(It.IsAny <string>())).Throws(new LuaException("Test Exception"));

            _mockedLogManager.Setup(x => x.Error(It.IsAny <LuaException>())).Callback(() => { callback = true; });

            Assert.That(mprog.Execute(actor, _mockedLuaManager.Object, _mockedLogManager.Object), Is.False);
            Assert.That(callback, Is.True);
        }
Пример #9
0
        public static void CheckIfExecuteText(MobileInstance mob, MudProgData mudProg, string txt)
        {
            if (mudProg.ArgList.StartsWith("p "))
            {
                if (txt.ContainsIgnoreCase(mudProg.ArgList))
                {
                    CheckIfExecute(mob, mudProg.Type);
                }
                return;
            }

            var words = mudProg.ArgList.Split(' ');

            foreach (var word in words.Where(txt.ContainsIgnoreCase))
            {
                CheckIfExecute(mob, mudProg.Type);
            }
        }
Пример #10
0
        public static void mudprog_read_programs(TextReaderProxy proxy, Template index)
        {
            for (; ;)
            {
                var letter = proxy.ReadNextLetter();
                if (letter == '|')
                {
                    return;
                }
                if (letter != '>')
                {
                    LogManager.Instance.Bug("Vnum {0} MudProg Char", index.ID);
                    throw new Exception();
                }

                var prog = new MudProgData();
                index.AddMudProg(prog);

                var type = (MudProgTypes)EnumerationFunctions.GetEnumByName <MudProgTypes>(proxy.ReadNextWord());
                if (type == MudProgTypes.Error)
                {
                    LogManager.Instance.Bug("Invalid mud prog type {0} for Index {1}", type, index.ID);
                    throw new Exception();
                }
                prog.Type = type;

                if (type == MudProgTypes.InFile)
                {
                    prog.IsFileProg = false;
                    prog.ArgList    = proxy.ReadString();
                    mudprog_file_read(index, prog.ArgList);
                }
                else
                {
                    // index.ProgTypes.SetBit((int)prog.Type);
                    prog.IsFileProg = false;
                    prog.ArgList    = proxy.ReadString();
                    prog.Script     = proxy.ReadString();
                }
            }
        }
Пример #11
0
        public static void mudprog_file_read(Template index, string filename)
        {
            var path = SystemConstants.GetSystemDirectory(SystemDirectoryTypes.Prog) + filename;

            using (var proxy = new TextReaderProxy(new StreamReader(path)))
            {
                do
                {
                    var line = proxy.ReadLine();
                    if (line.StartsWith("|"))
                    {
                        break;
                    }
                    if (line.StartsWith(">"))
                    {
                        continue;
                    }

                    var type = (MudProgTypes)EnumerationFunctions.GetEnumByName <MudProgTypes>(proxy.ReadNextWord());
                    if (type == MudProgTypes.Error ||
                        type == MudProgTypes.InFile)
                    {
                        LogManager.Instance.Bug("Invalid mud prog type {0} in file {1}", type, path);
                        continue;
                    }

                    var prog = new MudProgData
                    {
                        Type       = type,
                        ArgList    = proxy.ReadString(),
                        Script     = proxy.ReadString(),
                        IsFileProg = true
                    };

                    index.AddMudProg(prog);
                    break;
                } while (!proxy.EndOfStream);
            }
        }
Пример #12
0
 public static void mpedit(CharacterInstance ch, MudProgData mprg, int mptype, string arguments)
 {
     // TODO
 }
Пример #13
0
 public static void mpcopy(MudProgData source, MudProgData destination)
 {
     // TODO
 }
Пример #14
0
 public static void warn_in_prog(CharacterInstance ch, int low, int high, string where,
                                 int vnum, MudProgData mprog, renumber_areas r_area)
 {
     // TODO
 }