Ejemplo n.º 1
0
        public static void GameMode_MiniGame_RoundThread(long RoundTime, NormalRoom room)
        {
            while (Utility.CurrentTimeMilliseconds() < RoundTime)
            {
                if (room.Survival == 0) //next round
                {
                    break;
                }
                //wait all gameover or time
            }

            int point = 100 + 50 * room.Round;

            if (room.PlayingMapNum != 40006)
            {
                room.Players.Where(w => w.Attribute != 3 && !w.GameOver)
                .Join(room.DropItem, p => p.UserNum, d => d.UserNum, (p, d) => new { p, d })
                .ToList().ForEach(f => f.d.MiniGamePoint += point);
            }

            int isnextround = 1;

            foreach (Account RoomPlayer in room.Players)
            {
                RoomPlayer.Connection.SendAsync(new GameRoom_MiniGame_RoundTime(RoomPlayer, room.Round, isnextround, 1, 0x1));
                RoomPlayer.Connection.SendAsync(new GameRoom_MiniGame_UpdatePoint(room, 0x1));
            }

            int nextround = room.Round + 1;
            int maxround  = room.PlayingMapNum == 40003 ? 1 : 3;

            if (nextround == maxround) //endgame
            {
                int laptime = 100;

                foreach (var p in room.Players.Where(p => p.Attribute != 3)
                         .Join(room.DropItem, p => p.UserNum, d => d.UserNum, (p, d) => new { p, d })
                         .OrderByDescending(o => o.d.MiniGamePoint).ThenBy(o => o.p.RoomPos))
                {
                    if (p.d.MiniGamePoint > 0)
                    {
                        p.d.Rank = room.Rank++;
                        int mylabtime = laptime++;
                        p.p.ServerLapTime     = mylabtime;
                        p.p.LapTime           = mylabtime;
                        p.d.MiniGameStarPoint = (int)Math.Round(p.d.MiniGamePoint / 4.5, MidpointRounding.AwayFromZero);
                        UpdateUserPoint(p.p.UserNum, 2400, p.d.MiniGameStarPoint);
                    }
                    else
                    {
                        p.d.Rank          = 98;
                        p.p.ServerLapTime = 100000;
                        p.p.LapTime       = 100000;
                    }
                }

                room.Result = GenResult_ForMiniGameMode(room, 0x1);
                room.RegisterItem(-1, -1, 2, 0x1049F00C, true);

                foreach (Account RoomPlayer in room.Players)
                {
                    RoomPlayer.Connection.SendAsync(new GameRoom_GameUpdateEXP(RoomPlayer, 0x1));
                }
                foreach (Account RoomPlayer in room.Players)
                {
                    RoomPlayer.Connection.SendAsync(new GameRoom_GameResult2(RoomPlayer, room.Result));
                    RoomPlayer.Connection.SendAsync(new GameRoom_Hex("FF0102", 0x1));
                    foreach (Account Player in room.Players)
                    {
                        RoomPlayer.Connection.SendAsync(new GameRoom_RoomPosReady(Player.RoomPos, false, 0x1));
                    }
                    RoomPlayer.Connection.SendAsync(new GameRoom_GoodsInfo(room, 0x1));
                }
                foreach (Account RoomPlayer in room.Players)
                {
                    //FF2D02A3220000C4C11400CB110000DB0800000E0C00001E0F0000
                    RoomPlayer.Connection.SendAsync(new GameRoom_UpdateIndividualGameRecord(RoomPlayer, 0x1));
                }
                Thread.Sleep(5000);
                foreach (Account RoomPlayer in room.Players)
                {
                    //MoveToGameRoom
                    RoomPlayer.Connection.SendAsync(new MoveToGameRoom(0x1)); //9704
                }

                room.GameEndSetNewRoomMaster();
                room.addMatchTime();
                room.StartAutoChangeRoomMaster();
                //reset
                room.GameEndReset();
            }
        }