Exemple #1
0
        public static void Handle_GoalInData(ClientConnection Client, PacketReader reader, byte last)
        {
            Account    User = Client.CurrentAccount;
            NormalRoom room = Rooms.GetRoom(User.CurrentRoomId);

            if (room.GameMode == 38) //小遊戲
            {
                return;
            }
            int laptime = reader.ReadLEInt32();
            //User.LapTime = laptime;
            //FF C0 02 FF 52 03 11 31 02 00
            int servertime = room.GetCurrentTime();

            //User.ServerLapTime = servertime;
            //reader.ReadLEUInt32(); //54 6A 02 00
            //User.RaceDistance = reader.ReadLESingle(); //6F C3 DE 47 RaceDistance float 114054.867188
            //00 00 00 00 flag?
            //User.Rank = room.Rank++;
            room.GoalIn(User, laptime, servertime, last);

            /*
             * if (!room.isGoal)
             * {
             *  MapHolder.MapInfos.TryGetValue(room.PlayingMapNum, out MapInfo mapinfo);
             *  if (room.GameMode == 5)
             *  {
             *      if (room.CorunBossHP > 0)
             *          return; //hack
             *      if (room.Players.Any(a => a.GameEndType == 1))
             *          return;
             *  }
             *  if (mapinfo.GoalInLimitTime * 1000 < servertime)
             *  {
             *      Console.WriteLine("GoalInOK");
             *      room.isGoal = true;
             *      room.Players.ForEach((RoomPlayer) => {
             *          RoomPlayer.Connection.SendAsync(new GameRoom_GoalInData(User.RoomPos, User.LapTime, 0, last));
             *          RoomPlayer.Connection.SendAsync(new GameRoom_StartTimeOutCount(User.LapTime + 2000, last));
             *          //FF 7C 03 E1 38 02 00 0A
             *      });
             *      if (room.GameMode == 5)
             *      {
             *          int i = 0;
             *          foreach (var p in room.Players.OrderBy(o => o.RoomPos))
             *          {
             *              //p.GameEndType = 1;
             *              p.LapTime = laptime + i;
             *              p.ServerLapTime = servertime + i;
             *              i++;
             *              //Console.WriteLine("p {0}, {1}, {2}, {3}", p.NickName, p.ServerLapTime, p.LapTime, p.RoomPos);
             *          }
             *      }
             *      long EndTime = Utility.CurrentTimeMilliseconds() + 15000;
             *      Task.Run(() => GameRoomEvent.Execute_GameEnd(room, EndTime, last));
             *  }
             *  else
             *  {
             *      Console.WriteLine("GoalInError");
             *      Client.SendAsync(new DisconnectPacket(User, 258, last));
             *  }
             * }
             * else
             * {
             *  room.BroadcastToAll(new GameRoom_GoalInData(User.RoomPos, User.LapTime, 0, last));
             * }*/
        }