Пример #1
0
        public void SendSetTime()
        {
            // started == true ? 0x80 : 0x00);
            McpeSetTime message = McpeSetTime.CreateObject();

            message.time    = (int)Level.CurrentWorldTime;
            message.started = (byte)(Level.IsWorldTimeStarted ? 0x80 : 0x00);
            SendPackage(message);
        }
Пример #2
0
        public string TimeSet(Player commander, DayNight time)
        {
            Level level = commander.Level;

            level.WorldTime = (int)time;

            McpeSetTime message = McpeSetTime.CreateObject();

            message.time = (int)level.WorldTime;
            level.RelayBroadcast(message);

            return($"{commander.Username} sets time to {time}");
        }
Пример #3
0
        public string Daylock(Player player, bool value)
        {
            Level level = player.Level;

            level.SetGameRule(GameRulesEnum.DoDaylightcycle, !value);
            level.BroadcastGameRules();

            level.WorldTime = 5000;

            McpeSetTime message = McpeSetTime.CreateObject();

            message.time = (int)level.WorldTime;
            level.RelayBroadcast(message);

            return($"{player.Username} set day to 5000 and locked time.");
        }
Пример #4
0
        public SimpleResponse TimeSet(Player commander, DayNight time)
        {
            Level level = commander.Level;

            level.CurrentWorldTime = (int)time;

            McpeSetTime message = McpeSetTime.CreateObject();

            message.time    = (int)level.CurrentWorldTime;
            message.started = level.IsWorldTimeStarted;

            level.RelayBroadcast(message);

            return(new SimpleResponse {
                Body = $"{commander.Username} sets time to {time}"
            });
        }
Пример #5
0
        private void LevelTick(object state)
        {
            if (m > 0)
            {
                //if (_tick%random.Next(1, 4) == 0)
                Level level = Context.LevelManager.Levels.FirstOrDefault();
                if (level == null)
                {
                    return;
                }

                Random random = level.Random;

                PlayerLocation point1 = level.SpawnPoint;
                PlayerLocation point2 = level.SpawnPoint;
                point2.X += 10;
                PlayerLocation point3 = level.SpawnPoint;
                point3.X -= 10;

                if (Math.Abs(m - 3) < 0.1)
                {
                    McpeSetTime timeDay = McpeSetTime.CreateObject();
                    timeDay.time = 0;
                    //timeDay.started = true;
                    level.RelayBroadcast(timeDay);

                    ThreadPool.QueueUserWorkItem(delegate(object o)
                    {
                        Thread.Sleep(100);

                        McpeSetTime timeReset = McpeSetTime.CreateObject();
                        timeReset.time        = (int)level.WorldTime;
                        level.RelayBroadcast(timeDay);

                        //Thread.Sleep(200);

                        //{
                        //	var mcpeExplode = McpeExplode.CreateObject();
                        //	mcpeExplode.position = point1.ToVector3();
                        //	mcpeExplode.radius = 100;
                        //	mcpeExplode.records = new Records();
                        //	level.RelayBroadcast(mcpeExplode);
                        //}

                        //Thread.Sleep(250);
                        //{
                        //	var mcpeExplode = McpeExplode.CreateObject();
                        //	mcpeExplode.position = point2.ToVector3();
                        //	mcpeExplode.radius = 100;
                        //	mcpeExplode.records = new Records();
                        //	level.RelayBroadcast(mcpeExplode);
                        //}
                        //Thread.Sleep(250);
                        //{
                        //	var mcpeExplode = McpeExplode.CreateObject();
                        //	mcpeExplode.position = point3.ToVector3();
                        //	mcpeExplode.radius = 100;
                        //	mcpeExplode.records = new Records();
                        //	level.RelayBroadcast(mcpeExplode);
                        //}
                    });
                }

                if (m < 0.4 || m > 3)
                {
                    for (int i = 0; i < 15 + (30 * m); i++)
                    {
                        GenerateParticles(random, level, point1, m < 0.6 ? 0 : 20, new Vector3(m * (m / 2), m + 10, m * (m / 2)), m);
                        GenerateParticles(random, level, point2, m < 0.4 ? 0 : 12, new Vector3(m, m + 6, m), m);
                        GenerateParticles(random, level, point3, m < 0.2 ? 0 : 9, new Vector3(m / 2, m / 2 + 6, m / 2), m);
                    }
                }
            }
            m += 0.1f;
            if (m > 3.8)
            {
                m = -5;
            }
        }
Пример #6
0
        private void LevelTick(object state)
        {
            if (m > 0)
            {
                //if (_tick%random.Next(1, 4) == 0)
                Level  level  = Context.LevelManager.Levels.First();
                Random random = level.Random;

                PlayerLocation point1 = level.SpawnPoint;
                PlayerLocation point2 = level.SpawnPoint;
                point2.X += 10;
                PlayerLocation point3 = level.SpawnPoint;
                point3.X -= 10;

                if (Math.Abs(m - 3) < 0.1)
                {
                    McpeSetTime timeDay = McpeSetTime.CreateObject();
                    timeDay.time    = 0;
                    timeDay.started = 0x80;
                    level.RelayBroadcast(timeDay, true);

                    ThreadPool.QueueUserWorkItem(delegate(object o)
                    {
                        Thread.Sleep(100);

                        McpeSetTime timeReset = McpeSetTime.CreateObject();
                        timeReset.time        = (int)level.CurrentWorldTime;
                        timeReset.started     = (byte)(level.IsWorldTimeStarted ? 1 : 0);
                        level.RelayBroadcast(timeDay, true);

                        Thread.Sleep(200);

                        {
                            var mcpeExplode     = McpeExplode.CreateObject();
                            mcpeExplode.x       = point1.X;
                            mcpeExplode.y       = point1.Y;
                            mcpeExplode.z       = point1.Z;
                            mcpeExplode.radius  = 100;
                            mcpeExplode.records = new Records();
                            level.RelayBroadcast(mcpeExplode, true);
                        }

                        Thread.Sleep(250);
                        {
                            var mcpeExplode     = McpeExplode.CreateObject();
                            mcpeExplode.x       = point2.X;
                            mcpeExplode.y       = point2.Y;
                            mcpeExplode.z       = point2.Z;
                            mcpeExplode.radius  = 100;
                            mcpeExplode.records = new Records();
                            level.RelayBroadcast(mcpeExplode, true);
                        }
                        Thread.Sleep(250);
                        {
                            var mcpeExplode     = McpeExplode.CreateObject();
                            mcpeExplode.x       = point3.X;
                            mcpeExplode.y       = point3.Y;
                            mcpeExplode.z       = point3.Z;
                            mcpeExplode.radius  = 100;
                            mcpeExplode.records = new Records();
                            level.RelayBroadcast(mcpeExplode, true);
                        }
                    });
                }

                if (m < 0.4 || m > 3)
                {
                    for (int i = 0; i < 15 + (30 * m); i++)
                    {
                        GenerateParticles(random, level, point1, m < 0.6 ? 0 : 20, new Vector3(m * (m / 2), m + 10, m * (m / 2)), m);
                        GenerateParticles(random, level, point2, m < 0.4 ? 0 : 12, new Vector3(m, m + 6, m), m);
                        GenerateParticles(random, level, point3, m < 0.2 ? 0 : 9, new Vector3(m / 2, m / 2 + 6, m / 2), m);
                    }
                }
            }
            m += 0.1;
            if (m > 3.8)
            {
                m = -5;
            }
        }
Пример #7
0
        //New GameLevel Method
        public void AddPlayer(SkyPlayer player)
        {
            if (player.Level != this && player.Level is GameLevel level)
            {
                level.RemovePlayer(player, true);         //Clear from old world
            }

            //Remove a player from _incomingPlayers only if it's non-empty.
            //Avoid claiming a lock for a useless check
            if (_incomingPlayers.Count > 0)
            {
                lock (_incomingPlayers)
                {
                    if (_incomingPlayers.ContainsKey(player.Username))
                    {
                        _incomingPlayers.Remove(player.Username);
                    }
                }
            }

            GameTeam defaultTeam = GetDefaultTeam();

            SetPlayerTeam(player, defaultTeam);
            //SkyUtil.log($"Added {player.Username} to team {defaultTeam.DisplayName} in game {GameId}");

            /*if (player.Level != this)
             * {
             *      //Only show the level transition screen to players changing games on this instance
             * //player.SpawnLevel(this, GameLevelInfo.LobbyLocation, !_incomingPlayers.ContainsKey(player.Username));
             * player.SpawnLevel(this, GameLevelInfo.LobbyLocation, false); //Remove loading screen to prevent 'building terrain' issue
             * }
             * else //Still teleport the player to the spawn location
             * {
             * player.Teleport(GameLevelInfo.LobbyLocation);
             * }*/

            //Fix for maps on first join to an instance
            player.SpawnLevel(this, GameLevelInfo.LobbyLocation, false);             //Remove loading screen to prevent 'building terrain' issue

            try
            {
                CurrentState.InitializePlayer(this, player);
            }
            catch (Exception e)
            {
                BugSnagUtil.ReportBug(e, this, CurrentState, player);
            }

            //Update Time
            McpeSetTime message = McpeSetTime.CreateObject();

            message.time = GameLevelInfo.WorldTime;
            player.SendPackage(message);

            //

            //Pending Tasks
            //Attempts to execute tasks like spawning NPCs in once a single player has loaded the world
            if (_shouldSchedule)
            {
                _shouldSchedule = false;

                if (_pendingTasks.Count > 0)
                {
                    foreach (SkyCoreAPI.PendingTask pendingTask in _pendingTasks)
                    {
                        RunnableTask.RunTaskLater(() =>
                        {
                            try
                            {
                                pendingTask.Invoke();
                            }
                            catch (Exception e)
                            {
                                BugSnagUtil.ReportBug(e, new AnonMetadatable((metadata) =>
                                {
                                    metadata.AddToTab("PendingTask", "Target", pendingTask.Target);
                                    metadata.AddToTab("PendingTask", "Method", pendingTask.Method);
                                }));
                            }
                        }, 250);                 //Small delay for the level to initialize
                    }

                    _pendingTasks.Clear();
                }
            }
        }