Esempio n. 1
0
        private void BotSelectTaunt(Player botPlayer, int botCount, HashList <Taunt> matchingTaunts, object args)
        {
            // Skip this bot if there are no matches
            if (matchingTaunts.Count == 0)
            {
                return;
            }

            // Get highest priority in taunt matches
            int 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 taunt probability
            double tauntChance = ((activeTaunt.ResponseChance / botCount) + activeTaunt.ResponseChance) * 0.5;

            // Check against probability and send message
            if (_rng.NextDouble() <= tauntChance)
            {
                var responses = activeTaunt.GetResponses().ToArray();
                SendBotChatMessage(botPlayer, responses[_rng.Next(responses.Length)], RantProgramArgs.CreateFrom(args));
            }
        }
Esempio n. 2
0
 public CardGameServer(CardGame game)
 {
     Game             = game ?? throw new ArgumentNullException(nameof(game));
     Game.RoundEnded += OnGameRoundEnded;
     Game.GameEnded  += OnGameEnded;
     _rng             = new Random(unchecked (Environment.TickCount * 7919));
     _rant            = new RantEngine();
     _spectators      = new HashList <SpectatorConnection>();
     _connections     = new HashList <ClientConnectionBase>();
     _addressTally    = new Tally <string, ClientConnectionBase>();
     _botTaunts       = game.GetPacks().Select(p => p.GetTaunts()).SelectMany(t => t).ToArray();
     _ws              = new WebSocketServer(game.Settings.WebSocketUrl);
     _ws.AddWebSocketService(ServerPlayDir, () => new PlayerConnection(this, Game));
     _ws.AddWebSocketService(ServerSpectateDir, () => new SpectatorConnection(this, Game));
 }
Esempio n. 3
0
        private void TriggerBotTaunts(object args, params Func <Player, IEnumerable <Taunt> >[] tauntSelectors)
        {
            if (Game.Settings.ChatEnabled && Game.Settings.BotTauntsEnabled && _botTaunts.Length > 0)
            {
                var bots = Game.GetPlayers().Where(p => p.IsAutonomous).ToArray();
                if (bots.Length == 0)
                {
                    return;
                }

                var matchingTaunts = new HashList <Taunt>();

                foreach (var bot in bots)
                {
                    matchingTaunts.Clear();

                    matchingTaunts.AddRange(tauntSelectors.SelectMany(selector => selector(bot)));

                    BotSelectTaunt(bot, bots.Length, matchingTaunts, args);
                }
            }
        }