Пример #1
0
        private void BotSelectTaunt(Player botPlayer, int botCount, ICollection <Taunt> matchingTaunts, object args)
        {
            // Skip this bot if there are no matches
            if (matchingTaunts.Count == 0)
            {
                return;
            }

            // Get highest priority in taunt matches
            var maxTauntPriority = matchingTaunts.Max(t => t.Priority);

            // Get taunts matching highest priority
            var eligibleCardTaunts = matchingTaunts.Where(t => t.Priority == maxTauntPriority).ToArray();

            // Select a taunt
            var activeTaunt = eligibleCardTaunts[_rng.Next(eligibleCardTaunts.Length)];

            // Calculate probability
            var tauntChance = (activeTaunt.ResponseChance / botCount + activeTaunt.ResponseChance) * 0.5;

            // Check against probability and send message
            if (!(_rng.NextDouble() <= tauntChance))
            {
                return;
            }
            var responses = activeTaunt.GetResponses().ToArray();

            SendBotChatMessage(botPlayer, responses[_rng.Next(responses.Length)], RantProgramArgs.CreateFrom(args));
        }
Пример #2
0
        public void OneArgAnonymousType()
        {
            var args = new
            {
                msg = "Hello World"
            };

            Assert.AreEqual("Hello World", rant.Do(@"[in:msg]", 0, 0, RantProgramArgs.CreateFrom(args)).Main);
        }
Пример #3
0
        public void OneArg()
        {
            var args = new RantProgramArgs
            {
                ["foo"] = "Bar"
            };

            Assert.AreEqual("FooBar", rant.Do(@"Foo[in:foo]", 0, 0, args).Main);
        }
Пример #4
0
        public void SendBotChatMessage(Player p, LocalizedString message, RantProgramArgs args)
        {
            if (!Game.Settings.ChatEnabled || message == null)
            {
                return;
            }
            int seed = _rng.Next();
            var cfg  = Game.Settings.BotConfig;

            async void send(ClientConnectionBase connection, Random rng)
            {
                await Task.Delay(rng.Next(1500, 3000));

                RantProgram pgm;

                try
                {
                    pgm = RantProgram.CompileString(message[connection.ClientLanguage]);
                    var output = _rant.Do(pgm, seed: seed, charLimit: 0, timeout: -1, args: args).Main.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var msg in output)
                    {
                        int delay = rng.Next(cfg.MinTypingDelay, cfg.MaxTypingDelay + 1)
                                    + msg.Length * rng.Next(cfg.MinTypingInterval, cfg.MaxTypingInterval + 1);
                        await Task.Delay(delay);

                        connection.SendChatMessage(p, msg);
                        Console.WriteLine($"{p} says: \"{msg}\"");
                    }
                }
                catch (RantCompilerException ex)
                {
                    Console.WriteLine($"Rant compiler error: {ex}");
                    return;
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Rant failure: {ex}");
                    return;
                }
            }

            foreach (var connection in _connections.ToArray())
            {
                var rng = new Random(seed);
                send(connection, rng);
            }
        }
Пример #5
0
        public Sandbox(RantEngine engine, RantProgram pattern, RNG rng, int sizeLimit = 0, CarrierState carrierState = null,
                       RantProgramArgs args = null)
        {
            // Public members
            RNG         = rng;
            StartingGen = rng.Generation;
            Engine      = engine;
            Format      = engine.Format;
            SizeLimit   = new Limit(sizeLimit);
            Pattern     = pattern;
            PatternArgs = args;

            // Private members
            _blockManager = new BlockAttribManager();
            _stopwatch    = new Stopwatch();
            _carrierState = carrierState;

            // Output initialization
            BaseOutput = new OutputWriter(this);
            _outputs   = new Stack <OutputWriter>();
            _outputs.Push(BaseOutput);
        }
Пример #6
0
        public void CustomArgsClass()
        {
            var args = new TestCustomArgsClass
            {
                A = "Hello",
                B = "World"
            };

            Assert.AreEqual("Hello World!", rant.Do(@"[in:word-a] [in:word-b]!", 0, 0, RantProgramArgs.CreateFrom(args)).Main);
        }