예제 #1
0
        public bool HandlePacket(Peer peer, byte[] data, Game game)
        {
            if (game.IsStarted())
            {
                return(true);
            }

            game.IncrementReadyPlayers();
            if (game.GetReadyPlayers() == game.GetPlayers().Count)
            {
                var start = new StatePacket(PacketCmdS2C.PKT_S2C_StartGame);
                game.PacketHandlerManager.broadcastPacket(start, Channel.CHL_S2C);

                foreach (var player in game.GetPlayers())
                {
                    if (player.Item2.GetPeer() == peer && !player.Item2.IsVersionMatch())
                    {
                        var dm = new DebugMessage("Your client version does not match the server. Check the server log for more information.");
                        game.PacketHandlerManager.sendPacket(peer, dm, Channel.CHL_S2C);
                    }
                    game.PacketNotifier.notifyUpdatedStats(player.Item2.GetChampion(), false);
                }

                game.SetStarted(true);
            }

            if (game.IsStarted())
            {
                foreach (var p in game.GetPlayers())
                {
                    var map = game.GetMap();
                    map.AddObject(p.Item2.GetChampion());

                    // Send the initial game time sync packets, then let the map send another
                    float gameTime = map.GetGameTime() / 1000.0f;

                    var timer = new GameTimer(gameTime); // 0xC1
                    game.PacketHandlerManager.sendPacket(p.Item2.GetPeer(), timer, Channel.CHL_S2C);

                    var timer2 = new GameTimerUpdate(gameTime); // 0xC2
                    game.PacketHandlerManager.sendPacket(p.Item2.GetPeer(), timer2, Channel.CHL_S2C);
                }
            }

            return(true);
        }
        public bool HandlePacket(Peer peer, byte[] data)
        {
            if (_game.IsRunning)
            {
                return(true);
            }

            _game.IncrementReadyPlayers();
            if (_game.PlayersReady == _playerManager.GetPlayers().Count)
            {
                var start = new StatePacket(PacketCmdS2C.PKT_S2C_StartGame);
                _game.PacketHandlerManager.broadcastPacket(start, Channel.CHL_S2C);

                foreach (var player in _playerManager.GetPlayers())
                {
                    if (player.Item2.Peer == peer && !player.Item2.IsMatchingVersion)
                    {
                        var dm = new DebugMessage("Your client version does not match the server. Check the server log for more information.");
                        _game.PacketHandlerManager.sendPacket(peer, dm, Channel.CHL_S2C);
                    }
                    _game.PacketNotifier.notifyUpdatedStats(player.Item2.Champion, false);
                }

                _game.Start();
            }

            if (_game.IsRunning)
            {
                foreach (var p in _playerManager.GetPlayers())
                {
                    var map = _game.Map;
                    map.AddObject(p.Item2.Champion);

                    // Send the initial game time sync packets, then let the map send another
                    float gameTime = map.GameTime / 1000.0f;

                    var timer = new GameTimer(gameTime); // 0xC1
                    _game.PacketHandlerManager.sendPacket(p.Item2.Peer, timer, Channel.CHL_S2C);

                    var timer2 = new GameTimerUpdate(gameTime); // 0xC2
                    _game.PacketHandlerManager.sendPacket(p.Item2.Peer, timer2, Channel.CHL_S2C);
                }
            }

            return(true);
        }
예제 #3
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            game.IncrementReadyPlayers();
            if (game.getReadyPlayers() == game.getPlayers().Count)
            {
                var start = new StatePacket(PacketCmdS2C.PKT_S2C_StartGame);
                PacketHandlerManager.getInstace().broadcastPacket(start, Channel.CHL_S2C);

                foreach (var player in game.getPlayers())
                {
                    if (player.Item2.getPeer() == peer && !player.Item2.isVersionMatch())
                    {
                        var dm = new SpawnParticle.DebugMessage("Your client version does not match the server. Check the server log for more information.");
                        PacketHandlerManager.getInstace().sendPacket(peer, dm, Channel.CHL_S2C);
                    }
                }

                game.setStarted(true);
            }

            if (game.isStarted())
            {
                foreach (var p in game.getPlayers())
                {
                    var map = game.getMap();
                    map.addObject(p.Item2.getChampion());

                    // Send the initial game time sync packets, then let the map send another
                    float gameTime = map.getGameTime() / 1000.0f;

                    var timer = new GameTimer(gameTime); // 0xC1
                    PacketHandlerManager.getInstace().sendPacket(p.Item2.getPeer(), timer, Channel.CHL_S2C);

                    var timer2 = new GameTimerUpdate(gameTime); // 0xC2
                    PacketHandlerManager.getInstace().sendPacket(p.Item2.getPeer(), timer2, Channel.CHL_S2C);
                }
            }

            return(true);
        }
예제 #4
0
        public void NotifyGameTimerUpdate(int userId, float time)
        {
            var timer = new GameTimerUpdate(time / 1000.0f);

            _packetHandlerManager.SendPacket(userId, timer, Channel.CHL_S2C);
        }
예제 #5
0
        public bool HandlePacket(Peer peer, byte[] data)
        {
            var peerInfo = _playerManager.GetPeerInfo(peer);

            if (!peerInfo.IsDisconnected)
            {
                _game.IncrementReadyPlayers();
            }

            /* if (_game.IsRunning)
             *  return true; */

            if (_game.PlayersReady == _playerManager.GetPlayers().Count)
            {
                var start = new StatePacket(PacketCmd.PKT_S2C_StartGame);
                _game.PacketHandlerManager.broadcastPacket(start, Channel.CHL_S2C);

                foreach (var player in _playerManager.GetPlayers())
                {
                    if (player.Item2.Peer == peer && !player.Item2.IsMatchingVersion)
                    {
                        var dm = new DebugMessage("Your client version does not match the server. Check the server log for more information.");
                        _game.PacketHandlerManager.sendPacket(peer, dm, Channel.CHL_S2C);
                    }
                    _game.PacketNotifier.NotifySetHealth(player.Item2.Champion);
                    _game.PacketNotifier.NotifyUpdatedStats(player.Item2.Champion, false);
                }

                _game.Start();
            }

            if (_game.IsRunning)
            {
                var map = _game.Map;
                if (peerInfo.IsDisconnected)
                {
                    foreach (var player in _playerManager.GetPlayers())
                    {
                        if (player.Item2.Team == peerInfo.Team)
                        {
                            var heroSpawnPacket = new HeroSpawn2(player.Item2.Champion);
                            _game.PacketHandlerManager.sendPacket(peer, heroSpawnPacket, Channel.CHL_S2C);

                            /* This is probably not the best way
                             * of updating a champion's level, but it works */
                            var levelUpPacket = new LevelUp(player.Item2.Champion);
                            _game.PacketHandlerManager.sendPacket(peer, levelUpPacket, Channel.CHL_S2C);
                            if (_game.IsPaused)
                            {
                                var pausePacket = new PauseGame((int)_game.PauseTimeLeft, true);
                                _game.PacketHandlerManager.sendPacket(peer, pausePacket, Channel.CHL_S2C);
                            }
                        }
                    }
                    peerInfo.IsDisconnected = false;
                    _game.PacketNotifier.NotifyUnitAnnounceEvent(UnitAnnounces.SummonerReconnected, peerInfo.Champion);

                    // Send the initial game time sync packets, then let the map send another
                    float gameTime = map.GameTime / 1000.0f;

                    var timer = new GameTimer(gameTime); // 0xC1
                    _game.PacketHandlerManager.sendPacket(peer, timer, Channel.CHL_S2C);

                    var timer2 = new GameTimerUpdate(gameTime); // 0xC2
                    _game.PacketHandlerManager.sendPacket(peer, timer2, Channel.CHL_S2C);

                    return(true);
                }

                foreach (var p in _playerManager.GetPlayers())
                {
                    map.AddObject(p.Item2.Champion);

                    // Send the initial game time sync packets, then let the map send another
                    float gameTime = map.GameTime / 1000.0f;

                    var timer = new GameTimer(gameTime); // 0xC1
                    _game.PacketHandlerManager.sendPacket(p.Item2.Peer, timer, Channel.CHL_S2C);

                    var timer2 = new GameTimerUpdate(gameTime); // 0xC2
                    _game.PacketHandlerManager.sendPacket(p.Item2.Peer, timer2, Channel.CHL_S2C);
                }
            }

            return(true);
        }