public PlayerController Spawn( Vector3 position, RavenNest.Models.Player playerDefinition, Player streamUser, StreamRaidInfo raidInfo) { lock (mutex) { if (activePlayers.Any(x => x.PlayerName == playerDefinition.Name)) { return(null); // player is already in game } var player = Instantiate(playerControllerPrefab); if (!player) { Debug.LogError("Player Prefab not found!!!"); return(null); } player.transform.position = position; return(Add(player.GetComponent <PlayerController>(), playerDefinition, streamUser, raidInfo)); } }
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 PlayerController Add( PlayerController player, RavenNest.Models.Player def, Player streamUser, StreamRaidInfo raidInfo) { player.SetPlayer(def, streamUser, raidInfo); activePlayers.Add(player); return(player); }
internal async Task <PlayerController> AddPlayerByUserIdAsync(string userId, StreamRaidInfo raiderInfo) { var playerInfo = await RavenNest.PlayerJoinAsync(userId, ""); if (playerInfo == null) { return(null); } return(SpawnPlayer(playerInfo, raidInfo: raiderInfo)); }
public void AnnounceRaid(StreamRaidInfo raidInfo, bool raidWar) { if (raidWar) { IsWar = true; AnnounceWarMessage($"<b>{raidInfo.RaiderUserName}</b> has declared war with an army of <b>{raidInfo.Players.Count}</b>!"); return; } AnnounceRaidMessage($"Friendly raid from <b>{raidInfo.RaiderUserName}</b> with <b>{raidInfo.Players.Count}</b> players!"); }
public PlayerController SpawnPlayer( RavenNest.Models.Player playerDefinition, Player streamUser = null, StreamRaidInfo raidInfo = null) { if (!chunkManager) { Debug.LogError("No chunk manager available!"); return(null); } var starter = chunkManager.GetStarterChunk(); if (starter == null) { Debug.LogError("No starter chunk available!"); return(null); } var spawnPoint = starter.GetPlayerSpawnPoint(); //var startIsland = playerDefinition?.State?.Island; //var island = Islands.Find(startIsland); //if (island != null) //{ // spawnPoint = island.SpawnPosition; //} var vector3 = Random.insideUnitSphere * 1f; var player = playerManager.Spawn(spawnPoint + vector3, playerDefinition, streamUser, raidInfo); if (!player) { Debug.LogError("Can't spawn player, player is already playing."); return(null); } playerList.AddPlayer(player); PlayerJoined(player); if (player && gameCamera && gameCamera.AllowJoinObserve) { gameCamera.ObservePlayer(player); } if (dropEventManager.IsActive) { player.BeginItemDropEvent(); } return(player); }
private PlayerController Add( PlayerController player, RavenNest.Models.Player def, Player streamUser, StreamRaidInfo raidInfo) { player.SetPlayer(def, streamUser, raidInfo); lock (mutex) { activePlayers.Add(player); gameManager.Village.TownHouses.InvalidateOwnershipOfHouses(); return(player); } }
public PlayerController SpawnPlayer( RavenNest.Models.Player playerDef, Player streamUser = null, StreamRaidInfo raidInfo = null) { if (!chunkManager) { Debug.LogError("No chunk manager available!"); return(null); } var starter = chunkManager.GetStarterChunk(); if (starter == null) { Debug.LogError("No starter chunk available!"); return(null); } var spawnPoint = starter.GetPlayerSpawnPoint(); var vector3 = Random.insideUnitSphere * 1f; var player = playerManager.Spawn(spawnPoint + vector3, playerDef, streamUser, raidInfo); if (!player) { Debug.LogError("Can't spawn player, player is already playing."); } playerList.AddPlayer(player); PlayerJoined(player); if (player && gameCamera && gameCamera.AllowJoinObserve) { gameCamera.ObservePlayer(player); } return(player); }
protected override void Handle(GameManager gameManager, StreamRaidInfo data) { OnStreamerRaid(gameManager, data, false); }