Ejemplo n.º 1
0
    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));
        }
    }
Ejemplo n.º 2
0
    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));
        }
    }
Ejemplo n.º 3
0
 private PlayerController Add(
     PlayerController player,
     RavenNest.Models.Player def,
     Player streamUser,
     StreamRaidInfo raidInfo)
 {
     player.SetPlayer(def, streamUser, raidInfo);
     activePlayers.Add(player);
     return(player);
 }
Ejemplo n.º 4
0
    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));
    }
Ejemplo n.º 5
0
    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!");
    }
Ejemplo n.º 6
0
    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);
    }
Ejemplo n.º 7
0
 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);
     }
 }
Ejemplo n.º 8
0
    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);
    }
Ejemplo n.º 9
0
 protected override void Handle(GameManager gameManager, StreamRaidInfo data)
 {
     OnStreamerRaid(gameManager, data, false);
 }