コード例 #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();
            }
        }
コード例 #2
0
        public static async Task Execute_GameEnd(NormalRoom room, long EndTime, byte last)
        {
            room.addMatchTime();
            while (Utility.CurrentTimeMilliseconds() < EndTime)
            {
                if (room.Players.Where(p => p.Attribute != 3).All(p => p.GameEndType > 0))
                {
                    foreach (Account player in room.Players.Where(p => p.GameEndType > 2 && p.Attribute != 3)
                             .OrderBy(o => o.GameEndType).ThenByDescending(o => o.RaceDistance))
                    {
                        if (player.GameEndType == 4)
                        {
                            player.Rank = 98;
                        }
                        else
                        {
                            player.Rank = 99;
                        }
                        Calc_DropItem(player, room, player.Rank, last);
                        //await Task.Run(() => Calc_DropItem(player, room, player.Rank, last));
                    }
                    break;
                }

                await Task.Delay(500);
            }
            ;
            await Task.Delay(4000);

            room.Result = GenResult(room, last);
            room.RegisterItem(-1, -1, 2, 0x1049F00C, true);
            try
            {
                foreach (Account RoomPlayer in room.Players) //更新自己EXP
                {
                    RoomPlayer.Connection.SendAsync(new GameRoom_GameUpdateEXP(RoomPlayer, last));
                }
                foreach (Account RoomPlayer in room.Players)
                {
                    RoomPlayer.Connection.SendAsync(new GameRoom_GameResult2(RoomPlayer, room.Result));
                    RoomPlayer.Connection.SendAsync(new GameRoom_Hex(RoomPlayer, "FF0102", last));
                    foreach (Account Player in room.Players)
                    {
                        RoomPlayer.Connection.SendAsync(new GameRoom_RoomPosReady(RoomPlayer, Player.RoomPos, false, last));
                    }
                    RoomPlayer.Connection.SendAsync(new GameRoom_GoodsInfo(RoomPlayer, room, last));
                }
                foreach (Account RoomPlayer in room.Players)
                {
                    //RoomPlayer.Connection.SendAsync(new GameRoom_Hex(RoomPlayer, "FF2D02000000000000000000000000000800000000000000000000", last)); //FF2D02A3220000C4C11400CB110000DB0800000E0C00001E0F0000
                    RoomPlayer.Connection.SendAsync(new GameRoom_UpdateIndividualGameRecord(RoomPlayer, last));
                }
                await Task.Delay(6000);

                foreach (Account RoomPlayer in room.Players)
                {
                    //MoveToGameRoom
                    RoomPlayer.Connection.SendAsync(new GameRoom_Hex(RoomPlayer, "FF9503", last)); //9704
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            //reset
            room.Rank   = 1;
            room.Result = null;
            room.DropItem.Clear();
            room.isPlaying = false;
            foreach (Account RoomPlayer in room.Players)
            {
                RoomPlayer.IsReady     = false;
                RoomPlayer.EndLoading  = false;
                RoomPlayer.GameEndType = 0;
            }
        }