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)); }
public void OneArgAnonymousType() { var args = new { msg = "Hello World" }; Assert.AreEqual("Hello World", rant.Do(@"[in:msg]", 0, 0, RantProgramArgs.CreateFrom(args)).Main); }
public void OneArg() { var args = new RantProgramArgs { ["foo"] = "Bar" }; Assert.AreEqual("FooBar", rant.Do(@"Foo[in:foo]", 0, 0, args).Main); }
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); } }
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); }
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); }