示例#1
0
        private void PlayerHitMessage(InGamePlayer player, NetworkMessage msg)
        {
            if (!GameStarted || GameEnded)
            {
                return;
            }

            int   hitPlayerID = msg.GetInt();
            short damage      = msg.GetShort();

            InGamePlayer hitPlayer = PlayerList[hitPlayerID];

            if (!hitPlayer.IsAlive)
            {
                return;
            }

            if (PlayerTakeDamage(hitPlayer, damage, true))
            {
                Logger.WriteLine("Room {0} : Player {1} killed by Player {2}", Id, hitPlayer.Id, player.Id);
                player.KillCounter += 1;

                var writer = new NetworkWriter(InGameProtocol.TCPServerToClient.PlayerKill);
                writer.Put(hitPlayer.Id);
                writer.Put(player.Id);

                _server.SendAll(writer, DeliveryMethod.ReliableOrdered);
            }
        }
示例#2
0
        internal List <InGamePlayer> GetPlayers(string requesterPlayerHash)
        {
            List <InGamePlayer> players = new List <InGamePlayer>();

            foreach (var playerInfo in playersRoundInfo)
            {
                InGamePlayer igp = new InGamePlayer();
                if (requesterPlayerHash == playerInfo.Key)
                {
                    igp.nick = "You";
                }
                else
                {
                    igp.nick = "Anonymos";
                }
                igp.hash  = playerInfo.Key;
                igp.offer = playerInfo.Value.playerOffer.ToString();
                if (playerInfo.Value.isProposer == true)
                {
                    igp.role = "Proposer";
                }
                igp.weight = playerInfo.Value.weight.ToString();
                players.Add(igp);
            }
            return(players);
        }
示例#3
0
        private void TakeItemMessage(InGamePlayer player, NetworkMessage msg)
        {
            if (!GameStarted || GameEnded)
            {
                return;
            }

            int itemID   = msg.GetInt();
            int quantity = msg.GetInt();

            if (!_itemList.ContainsKey(itemID))
            {
                return;
            }

            var item = _itemList[itemID];

            if (player.TakeItem(ref item, quantity))
            {
                Logger.WriteLine("Room {0} : Remove item {1} because there is no more quantity.", Id, itemID);
                _itemList.Remove(itemID);
                quantity = item.Quantity;
            }

            var writer = new NetworkWriter(InGameProtocol.TCPServerToClient.TakeItem);

            writer.Put(player.Id);
            writer.Put(item.ID);
            writer.Put(quantity);
            _server.SendAll(writer, DeliveryMethod.ReliableOrdered);
        }
示例#4
0
    public void CreatePlayers()
    {
        for (int i = 0; i < currentPlayers.Length; i++)
        {
            if (currentPlayers[i] != null)
            {
                PlayerInput playerInstance = PlayerInput.Instantiate(currentPlayers[i].inputReader);
                currentPlayers[i] = new InGamePlayer(playerInstance, currentPlayers[i].inputSender, currentPlayers[i].emblem, currentPlayers[i].characterName, currentPlayers[i].teamNumber, currentPlayers[i].characterPreview, GameController.instance.gameModeUI.stockHandlers[i]);
                currentPlayers[i].inputReader.Init();
                currentPlayers[i].character.playerIndex = i;
                currentPlayers[i].character.teamNumber  = currentPlayers[i].teamNumber;
                currentPlayers[i].ConnectInput();

                playerInstance.gameObject.transform.position = level.startingSpawnPoints[i].position;
                playerInstance.gameObject.transform.rotation = Quaternion.identity;
                playerInstance.gameObject.layer = LayerMask.NameToLayer("Player " + (i + 1));

                if (GameController.instance.game.currentGameMode == Game.Mode.TEAMS)
                {
                    ResetTeamScores();
                }
                else
                {
                    GameController.instance.playerDisplays[i].emblem.enabled = true;
                    GameController.instance.playerDisplays[i].emblem.sprite  = currentPlayers[i].emblem;
                    GameController.instance.playerDisplays[i].scoreText.gameObject.SetActive(true);
                    //GameController.instance.playerDisplays[i].emblem.SetNativeSize();
                }

                GameController.instance.smashCam.AddTarget(currentPlayers[i].character.transform, currentPlayers[i].character.hat.transform);

                playerInstance.transform.parent = level.transform;

                int _skinIndex  = GameController.instance.playerDisplays[i].skinIndex;
                int _colorIndex = GameController.instance.playerDisplays[i].colorIndex;

                playerInstance.GetComponent <CharacterColorChanger> ().Init(_skinIndex, _colorIndex);

                currentPlayers[i].SetStockImages();
                SetScoreText(i);

                if (currentGameMode == Game.Mode.SURVIVAL)
                {
                    playerInstance.gameObject.layer = LayerMask.NameToLayer("Player 1");
                }

                if (currentGameMode == Game.Mode.TEAMS)
                {
                    playerInstance.gameObject.layer = LayerMask.NameToLayer("Player " + currentPlayers[i].teamNumber);
                }
            }
            else
            {
                GameController.instance.playerDisplays[i].emblem.enabled = false;
                GameController.instance.playerDisplays[i].scoreText.gameObject.SetActive(false);
            }
        }
    }
示例#5
0
 public void PlayerQuitRoom(InGamePlayer player, GameInstance room)
 {
     if (room.PlayerCount == 0 && Rooms.ContainsKey(room.Id))
     {
         Logger.WriteLine("Room instance {0} removed because all players quit.", room.Id);
         room.StopRoomInstance();
         Rooms.Remove(room.Id);
     }
 }
示例#6
0
        private void PlayerCrouchMessage(InGamePlayer player, NetworkMessage msg)
        {
            bool state = msg.GetBool();

            var writer = new NetworkWriter(InGameProtocol.TCPServerToClient.Crouch);

            writer.Put(player.Id);
            writer.Put(state);

            _server.SendAll(writer, DeliveryMethod.ReliableOrdered);
        }
示例#7
0
        private void PlayerJumpMessage(InGamePlayer player, NetworkMessage msg)
        {
            short state = msg.GetShort();

            var writer = new NetworkWriter(InGameProtocol.TCPServerToClient.Jump);

            writer.Put(player.Id);
            writer.Put(state);

            _server.SendAll(writer, DeliveryMethod.ReliableOrdered);
        }
示例#8
0
        private void SwitchKnifeMessage(InGamePlayer player, NetworkMessage msg)
        {
            if (!GameStarted || GameEnded)
            {
                return;
            }

            var writer = new NetworkWriter(InGameProtocol.TCPServerToClient.SwitchKnife);

            writer.Put(player.Id);
            _server.SendAll(writer, DeliveryMethod.ReliableOrdered);
        }
示例#9
0
        private void PlayerShootMessage(InGamePlayer player, NetworkMessage msg)
        {
            int  state      = msg.GetInt();
            bool isShooting = msg.GetBool();

            var writer = new NetworkWriter(InGameProtocol.TCPServerToClient.Shoot);

            writer.Put(player.Id);
            writer.Put(state);
            writer.Put(isShooting);

            _server.SendAll(writer, DeliveryMethod.ReliableOrdered);
        }
示例#10
0
        private void PlayerTurnMessage(InGamePlayer player, NetworkMessage msg)
        {
            Quaternion orientation = msg.GetQuaternion();

            player.Rotation = orientation;

            var writer = new NetworkWriter(InGameProtocol.UDPServerToClient.Turn);

            writer.Put(player.Id);
            writer.Put(orientation);

            _server.SendAll(writer, DeliveryMethod.Unreliable);
        }
示例#11
0
        private void StartThrowingMessage(InGamePlayer player, NetworkMessage msg)
        {
            if (!GameStarted || GameEnded)
            {
                return;
            }

            short type = msg.GetShort();

            var writer = new NetworkWriter(InGameProtocol.TCPServerToClient.StartThrowing);

            writer.Put(player.Id);
            writer.Put(type);
            _server.SendAll(writer, DeliveryMethod.ReliableOrdered);
        }
示例#12
0
        private void PlayerReloadingMessage(InGamePlayer player, NetworkMessage msg)
        {
            if (!GameStarted || GameEnded)
            {
                return;
            }

            bool state = msg.GetBool();

            var writer = new NetworkWriter(InGameProtocol.TCPServerToClient.Reloading);

            writer.Put(player.Id);
            writer.Put(state);

            _server.SendAll(writer, DeliveryMethod.ReliableOrdered);
        }
示例#13
0
        private void ConnectionConfirmMessage(InGamePlayer p, NetworkMessage msg)
        {
            int playerId = msg.GetInt();

            if (_expectedPlayers.ContainsKey(playerId))
            {
                var oldPlayer = _expectedPlayers[playerId];
                _expectedPlayers.Remove(playerId);
                var player = new InGamePlayer(msg.Peer, playerId);
                player.Name        = oldPlayer.Name;
                player.IsSpectator = oldPlayer.IsSpectator;

                if (!player.IsSpectator)
                {
                    var writerOther = new NetworkWriter(InGameProtocol.TCPServerToClient.ConectedToRoom);
                    writerOther.Put(player.Id);
                    writerOther.Put(player.Name);
                    _server.SendAll(writerOther, DeliveryMethod.ReliableOrdered);
                }

                var writerNew = new NetworkWriter(InGameProtocol.TCPServerToClient.ListConnectedPlayer);
                writerNew.Put(PlayerList.Count);

                foreach (var connectedPlayer in PlayerList)
                {
                    writerNew.Put(connectedPlayer.Value.Id);
                    writerNew.Put(connectedPlayer.Value.Name);
                    writerNew.Put(connectedPlayer.Value.Position);
                    writerNew.Put(connectedPlayer.Value.Rotation);
                }

                player.SendWriter(writerNew, DeliveryMethod.ReliableOrdered);

                writerNew = new NetworkWriter(InGameProtocol.TCPServerToClient.Registered);
                player.SendWriter(writerNew, DeliveryMethod.ReliableOrdered);
                _server.RegisterPlayer(player);

                if (!player.IsSpectator)
                {
                    PlayerList.Add(player.Id, player);
                }
                else
                {
                    SpectatorList.Add(player.Id, player);
                }
            }
        }
示例#14
0
        /*********************************************************************************/

        private void PlayerMovementMessage(InGamePlayer player, NetworkMessage msg)
        {
            Vector3 position = msg.GetVector3();
            float   speed_h  = msg.GetFloat();
            float   speed_v  = msg.GetFloat();

            player.Position = position;

            var writer = new NetworkWriter(InGameProtocol.UDPServerToClient.Movement);

            writer.Put(player.Id);
            writer.Put(position);
            writer.Put(speed_h);
            writer.Put(speed_v);

            _server.SendAll(writer, DeliveryMethod.Unreliable);
        }
示例#15
0
        private void SwitchItemMessage(InGamePlayer player, NetworkMessage msg)
        {
            if (!GameStarted || GameEnded)
            {
                return;
            }

            int itemID = msg.GetInt();

            player.SwitchCurrentItem(itemID);

            var writer = new NetworkWriter(InGameProtocol.TCPServerToClient.SwitchItem);

            writer.Put(player.Id);
            writer.Put(itemID);
            _server.SendAll(writer, DeliveryMethod.ReliableOrdered);
        }
示例#16
0
        /*************************************************************************************/

        private bool PlayerTakeDamage(InGamePlayer player, short damage, bool affectShield)
        {
            player.TakeDamage(damage, affectShield);

            var writer = new NetworkWriter(InGameProtocol.TCPServerToClient.HitPlayer);

            writer.Put(player.Id);
            writer.Put(damage);
            _server.SendAll(writer, DeliveryMethod.ReliableOrdered);
            if (!player.IsAlive)
            {
                foreach (var item in player.Inventory)
                {
                    writer = new NetworkWriter(InGameProtocol.TCPServerToClient.DropItem);
                    writer.Put(player.Id);
                    writer.Put(item.Value.ID);
                    writer.Put(item.Value.ID);
                    writer.Put(item.Value.Quantity);
                    _server.SendAll(writer, DeliveryMethod.ReliableOrdered);
                    _itemList.Add(item.Value.ID, item.Value);
                }

                player.Inventory.Clear();

                AlivePlayerList.Remove(player.Id);

                if (AlivePlayerList.Count == 1)
                {
                    var winPlayer = AlivePlayerList.First().Value;

                    writer = new NetworkWriter(InGameProtocol.TCPServerToClient.PlayerWin);
                    writer.Put(winPlayer.Id);
                    _server.SendAll(writer, DeliveryMethod.ReliableOrdered);

                    GameEnded = true;
                    Logger.WriteLine("Room {0} : Player {1} win the game", Id, winPlayer.Id);
                }

                return(true);
            }

            return(false);
        }
示例#17
0
        private void RocketEndMessage(InGamePlayer player, NetworkMessage msg)
        {
            if (!GameStarted || GameEnded)
            {
                return;
            }

            int index = msg.GetInt();

            player.RocketEnd(index);

            var writer = new NetworkWriter(InGameProtocol.TCPServerToClient.RocketEnd);

            writer.Put(player.Id);
            writer.Put(index);
            _server.SendAll(writer, DeliveryMethod.ReliableOrdered);

            Logger.WriteLine("Room {0} : Rocket {1} launch by Player {2} exploded.", Id, index, player.Id);
        }
示例#18
0
        private void RocketMoveMessage(InGamePlayer player, NetworkMessage msg)
        {
            if (!GameStarted || GameEnded)
            {
                return;
            }

            int        index = msg.GetInt();
            Vector3    pos   = msg.GetVector3();
            Quaternion rot   = msg.GetQuaternion();

            player.RocketMove(index, pos, rot);
            var writer = new NetworkWriter(InGameProtocol.UDPServerToClient.RocketMove);

            writer.Put(player.Id);
            writer.Put(index);
            writer.Put(pos);
            writer.Put(rot);
            _server.SendAll(writer, DeliveryMethod.Unreliable);
        }
示例#19
0
        private void EnigmaOpenedMessage(InGamePlayer player, NetworkMessage msg)
        {
            if (!GameStarted || GameEnded)
            {
                return;
            }

            int enigmaID = msg.GetInt();

            Logger.WriteLine("Room {0} : Player {1} open enigma {2}.", Id, player.Id, enigmaID);

            var enigmas = _enigmasList[enigmaID];

            enigmas.EnigmaOpened = true;

            var writer = new NetworkWriter(InGameProtocol.TCPServerToClient.EnigmaOpened);

            writer.Put(player.Id);
            writer.Put(enigmaID);
            _server.SendAll(writer, DeliveryMethod.ReliableOrdered);
        }
示例#20
0
        private void ThrowingMessage(InGamePlayer player, NetworkMessage msg)
        {
            if (!GameStarted || GameEnded)
            {
                return;
            }

            int   itemID = msg.GetInt();
            short type   = msg.GetShort();
            int   index  = msg.GetInt();

            player.Throwing(itemID, type, index);

            var writer = new NetworkWriter(InGameProtocol.TCPServerToClient.Throwing);

            writer.Put(player.Id);
            writer.Put(itemID);
            writer.Put(type);
            writer.Put(index);
            _server.SendAll(writer, DeliveryMethod.ReliableOrdered);

            Logger.WriteLine("Room {0} : Player {1} throw a grenade {2}.", Id, player.Id, index);
        }
示例#21
0
        private void OpenCrateMessage(InGamePlayer player, NetworkMessage msg)
        {
            if (!GameStarted || GameEnded)
            {
                return;
            }

            int crateID = msg.GetInt();

            Logger.WriteLine("Room {0} : Player {1} open crate {2}.", Id, player.Id, crateID);

            var itemList = ItemGenerator.GenerateCrateItem();

            var writer = new NetworkWriter(InGameProtocol.TCPServerToClient.OpenCrate);

            writer.Put(player.Id);
            writer.Put(crateID);
            writer.Put(itemList.Count);

            foreach (var item in itemList)
            {
                writer.Put(item.ID);
                writer.Put(item.Type);
                writer.Put(item.Rarity);
                writer.Put(item.Quantity);
                _itemList.Add(item.ID, item);

                Logger.WriteLine("Room {0} : Item generated on crate {1} -> id = {2}\tquantity = {3}\ttype = {4}",
                                 Id,
                                 crateID,
                                 item.ID,
                                 item.Quantity,
                                 (ItemTypes.ItemEnum)item.Type);
            }

            _server.SendAll(writer, DeliveryMethod.ReliableOrdered);
        }
示例#22
0
        private void DropItemMessage(InGamePlayer player, NetworkMessage msg)
        {
            if (!GameStarted || GameEnded)
            {
                return;
            }

            int itemID   = msg.GetInt();
            int quantity = msg.GetInt();

            var item = player.DropItem(itemID, quantity);

            _itemList.Add(item.ID, item);

            Logger.WriteLine("Room {0} : Player {1} drop item {2}", Id, player.Id, itemID);

            var writer = new NetworkWriter(InGameProtocol.TCPServerToClient.DropItem);

            writer.Put(player.Id);
            writer.Put(itemID);
            writer.Put(item.ID);
            writer.Put(quantity);
            _server.SendAll(writer, DeliveryMethod.ReliableOrdered);
        }
示例#23
0
 private void OnPlayerDisconnect(InGamePlayer player)
 {
     Logger.WriteLine("Room {0} : Player {1} disconnected to room", Id, player.Id);
     RemovePlayer(player.Id);
     _manager.PlayerDisconnected(player, this);
 }
示例#24
0
 private void QuitGameMessage(InGamePlayer player, NetworkMessage msg)
 {
     Logger.WriteLine("Room {0} : Player {1} quit.", Id, player.Id);
     RemovePlayer(player.Id);
     _manager.PlayerQuitRoom(player, this);
 }
示例#25
0
        public static InGamePlayer GeneratePlayer(int hero, int position)
        {
            var player = new InGamePlayer
            {
                Slot   = position,
                HeroID = hero
            };

            switch (hero)
            {
            case 1:
                player.AccountID   = 6543215;
                player.Kills       = 24;
                player.Assists     = 3;
                player.Deaths      = 8;
                player.Denies      = 55;
                player.Gold        = 15000;
                player.GoldPerMin  = 515;
                player.GoldSpent   = 13500;
                player.HeroDamage  = 25000;
                player.HeroHealing = 0;
                player.ItemID0     = 1;
                player.ItemID1     = 35;
                player.ItemID2     = 77;
                player.ItemID3     = 89;
                player.ItemID4     = 88;
                player.ItemID5     = 33;
                player.Level       = 25;
                player.LastHits    = 403;
                player.XpPerMin    = 750;
                //player.MatchID = 1654845;
                player.TowerDamage = 3500;
                player.HeroID      = 23;
                break;

            case 2:
                player.AccountID   = 735354;
                player.Kills       = 0;
                player.Assists     = 12;
                player.Deaths      = 7;
                player.Denies      = 5;
                player.Gold        = 1500;
                player.GoldPerMin  = 170;
                player.GoldSpent   = 1350;
                player.HeroDamage  = 3100;
                player.HeroHealing = 1000;
                player.ItemID0     = 1;
                player.ItemID1     = 8;
                player.ItemID2     = 38;
                player.ItemID3     = 12;
                player.ItemID4     = 98;
                player.ItemID5     = 88;
                player.Level       = 16;
                player.LastHits    = 103;
                player.XpPerMin    = 350;
                // player.MatchID = 1654845;
                player.TowerDamage = 800;
                player.HeroID      = 28;
                break;

            case 3:
                player.AccountID   = 1234;
                player.Kills       = 5;
                player.Assists     = 15;
                player.Deaths      = 2;
                player.Denies      = 150;
                player.Gold        = 23000;
                player.GoldPerMin  = 400;
                player.GoldSpent   = 13500;
                player.HeroDamage  = 17500;
                player.HeroHealing = 2500;
                player.ItemID0     = 1;
                player.ItemID1     = 8;
                player.ItemID2     = 56;
                player.ItemID3     = 35;
                player.ItemID4     = 83;
                player.ItemID5     = 75;
                player.Level       = 23;
                player.LastHits    = 250;
                player.XpPerMin    = 400;
                // player.MatchID = 1654845;
                player.TowerDamage = 950;
                player.HeroID      = 39;
                break;

            default:
                player.AccountID   = 2344965;
                player.Kills       = 17;
                player.Assists     = 8;
                player.Deaths      = 23;
                player.Denies      = 87;
                player.Gold        = 19507;
                player.GoldPerMin  = 435;
                player.GoldSpent   = 18008;
                player.HeroDamage  = 21478;
                player.HeroHealing = 1000;
                player.ItemID0     = 1;
                player.ItemID1     = 5;
                player.ItemID2     = 9;
                player.ItemID3     = 53;
                player.ItemID4     = 12;
                player.ItemID5     = 35;
                player.Level       = 19;
                player.LastHits    = 398;
                player.XpPerMin    = 469;
                //player.MatchID = 1654845;
                player.TowerDamage = 4589;
                player.HeroID      = 99;
                break;
            }
            player.AbilityUpgrades = new List <AbilityUpgrade>();
            for (int i = 0; i < player.Level; i++)
            {
                ((List <AbilityUpgrade>)player.AbilityUpgrades).Add(AbilitiesFactory.GenerateAbility(i % 5, i + 1, i * 10));
            }
            return(player);
        }
示例#26
0
 public void SetPlayer(int index, PlayerInput inputReader, InputController inputSender, Sprite emblem, string characterName, int teamNumber, Sprite characterPreview)
 {
     currentPlayers [index] = new InGamePlayer(inputReader, inputSender, emblem, characterName, teamNumber, characterPreview, GameController.instance.gameModeUI.stockHandlers[index]);
 }