コード例 #1
0
ファイル: User.cs プロジェクト: jkalter11/OpenSMO
        // Client requests to start the game.
        public void NSCGSR()
        {
            if (CurrentRoom == null)
            {
                ez.Discard();
                return;
            }

            if (!RequiresAuthentication())
            {
                return;
            }

            GameFeet       = ez.Read1() / 16;
            GameDifficulty = (NSDifficulty)(ez.Read1() / 16);

            Synced = ez.Read1() == 16;

            CurrentRoom.CurrentSong.Name     = ez.ReadNT();
            CurrentRoom.CurrentSong.SubTitle = ez.ReadNT();
            CurrentRoom.CurrentSong.Artist   = ez.ReadNT();

            this.CourseTitle = ez.ReadNT();
            this.SongOptions = ez.ReadNT();

            string newPlayerSettings = "";

            do
            {
                newPlayerSettings += ez.ReadNT() + " ";
            } while (ez.LastPacketSize > 0);
            GamePlayerSettings = newPlayerSettings.Trim();

            CurrentRoom.AllPlaying = true;
            User[] checkSyncPlayers = GetUsersInRoom();
            foreach (User user in checkSyncPlayers)
            {
                if (user.SyncNeeded && user.CanPlay && !user.Synced)
                {
                    CurrentRoom.AllPlaying = false;
                }
            }

            if (!Synced || CurrentRoom.AllPlaying)
            {
                ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCGSR));
                ez.SendPack();

                if (CurrentRoom.AllPlaying)
                {
                    SendSongStartTo(checkSyncPlayers);
                    CurrentRoom.AllPlaying = false;
                }
            }
        }
コード例 #2
0
ファイル: User.cs プロジェクト: Supermale/OpenSMO
        public void NSCGSR()
        {
            if (CurrentRoom == null) {
                ez.Discard();
                return;
            }

            if (!RequiresAuthentication()) return;

            GameFeet = ez.Read1() / 16;
            GameDifficulty = (NSDifficulty)(ez.Read1() / 16);

            Synced = ez.Read1() == 16;

            CurrentRoom.CurrentSong.Name = ez.ReadNT();
            CurrentRoom.CurrentSong.SubTitle = ez.ReadNT();
            CurrentRoom.CurrentSong.Artist = ez.ReadNT();

            this.CourseTitle = ez.ReadNT();
            this.SongOptions = ez.ReadNT();

            string newPlayerSettings = "";
            do {
                newPlayerSettings += ez.ReadNT() + " ";
            } while (ez.LastPacketSize > 0);
            GamePlayerSettings = newPlayerSettings.Trim();

            CurrentRoom.AllPlaying = true;
            User[] checkSyncPlayers = GetUsersInRoom();
            foreach (User user in checkSyncPlayers) {
                if (!user.Synced)
                    CurrentRoom.AllPlaying = false;
            }

            if (!Synced || CurrentRoom.AllPlaying) {
                ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCGSR));
                ez.SendPack();

                if (CurrentRoom.AllPlaying) {
                    foreach (User user in checkSyncPlayers) {
                        user.Synced = false;
                        user.SongTime.Restart();

                        user.ez.Write1((byte)(mainClass.ServerOffset + NSCommand.NSCGSR));
                        user.ez.SendPack();
                    }

                    CurrentRoom.AllPlaying = false;
                }
            }
        }
コード例 #3
0
ファイル: User.cs プロジェクト: SandonV/OpenSMO
        public void NSCGSR()
        {
            if (CurrentRoom == null)
            {
            ez.Discard();
            return;
            }

            if (!RequiresAuthentication()) return;

            GameFeet = ez.Read1() / 16;
            GameDifficulty = (NSDifficulty)(ez.Read1() / 16);

            Synced = ez.Read1() == 16;

            CurrentRoom.CurrentSong.Name = ez.ReadNT();
            CurrentRoom.CurrentSong.SubTitle = ez.ReadNT();
            CurrentRoom.CurrentSong.Artist = ez.ReadNT();

            this.CourseTitle = ez.ReadNT();
            this.SongOptions = ez.ReadNT();
            string[] options = this.SongOptions.Split(',');
            foreach (string option in options)
            {
            if (option.Contains("xMusic"))
            {
                string[] rate = option.Split('x');
                this.PlayerRate = (int)Math.Round( (float.Parse(rate[0]) * 100.0) );
                if (this.PlayerRate == 100)
                {
                    this.PlayerRate = 0;
                }
            }
            else
            {
                this.PlayerRate = 100;
            }
            }
            string newPlayerSettings = "";
            do
            {
            newPlayerSettings += ez.ReadNT() + " ";
            }
            while (ez.LastPacketSize > 0);
            GamePlayerSettings = newPlayerSettings.Trim();

            if (User_Protocol == 2)
            {
            GamePlayerSettings = GamePlayerSettings.Substring(0, GamePlayerSettings.LastIndexOf(" ")<0?0:GamePlayerSettings.LastIndexOf(" "));
            }

            //Remove non unique Entries:

            string[] settings = GamePlayerSettings.Replace(",", "").Split(' ');
            string[] uniquesettings = settings.Distinct().ToArray();
            GamePlayerSettings = string.Join(", ", uniquesettings);
            CurrentRoom.AllPlaying = true;
            User[] checkSyncPlayers = GetUsersInRoom();

            if (!gotstart)
            {
            MainClass.AddLog("SENT NSCGSR");
            // Waiting for other players to sync.
            SendSongStartTo(checkSyncPlayers);
            gotstart = true;
            }
            else
            {
            gotstart = false;
            waiting = true;
            MainClass.AddLog("SENT SYNC NSCGSR");
            skippacket = false;
            mSyncStart = new SyncStart(this);
            Thread syncstartT = new Thread(() => mSyncStart.StartWhenAllSynced(checkSyncPlayers));
            if (!syncstartT.IsAlive)
            {
                syncstartT.Start();
            }
            }
        }