private async void OnStreamerRaid(StreamRaidInfo raidInfo, bool raidWar) { var players = Players.GetAllPlayers(); if (raidInfo.Players.Count == 0) { Server.Client?.SendCommand("", "message", raidInfo.RaiderUserName + " raided but without any players. Kappa"); return; } // only one active raid war at a time. raidWar = raidWar && !StreamRaid.Started && !StreamRaid.IsWar; StreamRaid.AnnounceRaid(raidInfo, raidWar && players.Count > 0); if (players.Count == 0 && raidWar) { Server.Client?.SendCommand("", "message", raidInfo.RaiderUserName + " raided with intent of war but we don't have any players. FeelsBadMan"); } StreamRaid.ClearTeams(); if (!StreamRaid.Started && raidWar) { foreach (var player in players) { if (raidInfo.Players.Contains(player.UserId)) { continue; } StreamRaid.AddToStreamerTeam(player); } } var raiders = new List <PlayerController>(); foreach (var user in raidInfo.Players) { var existingPlayer = Players.GetPlayerByUserId(user); if (existingPlayer) { RemovePlayer(existingPlayer); } var player = await AddPlayerByUserIdAsync(user, raidInfo); if (player && raidWar) { raiders.Add(player); } } if (raidWar) { StartCoroutine(StartRaidWar(raiders)); } }
private IEnumerator StartRaidWar(IReadOnlyList <PlayerController> raiders) { yield return(new WaitForEndOfFrame()); foreach (var raider in raiders) { StreamRaid.AddToRaiderTeam(raider); yield return(new WaitForEndOfFrame()); } StreamRaid.StartRaidWar(); }