public static void CorunMode_TriggerObjectEvent(ClientConnection Client, PacketReader reader, byte last)
        {
            //eRoom_CORUN_MODE_TRIGGER_OBJECT_EVENT_REQ RideCattle
            //FF C0 02 FF 5E 03 14 00 00 00 01 00 00 00 00 00 00 40
            //FF C0 02 FF 5E 03 08 00 00 00 01 02 DB 00 00 00 00 40
            int        unk     = reader.ReadLEInt32();
            byte       unk2    = reader.ReadByte();
            byte       isLeave = reader.ReadByte();
            int        unk3    = reader.ReadLEInt32();
            Account    User    = Client.CurrentAccount;
            NormalRoom room    = Rooms.GetRoom(User.CurrentRoomId);

            if (isLeave == 0)
            {
                room.RideCattlePlayer.Add(User);
            }
            else if (isLeave == 1)
            {
                room.RideCattlePlayer.Remove(User);
            }
            if (room.RideCattlePlayer.Count == room.PlayerCount() || isLeave == 2)
            {
                room.BroadcastToAll(new TriggerObjectEvent_Ack(unk, isLeave, unk3, last));
                room.RideCattlePlayer.Clear();
            }
        }
Exemple #2
0
        public static void Handle_GameStart(ClientConnection Client, PacketReader reader, byte last)
        {
            Account User = Client.CurrentAccount;
            //.sendStartGame(65), currentTick=0
            //FF C0 02 FF 13 03 41 00 00 00 60 6C 32 48 3B 04 00 00 C8 00 00 00 6E 00 00 00 80
            int iGameStartTick = reader.ReadLEInt32();

            reader.ReadLEInt32(); //unk1
            reader.ReadLEInt32(); //unk2
            int iNumberOfItem = reader.ReadLEInt32();

            reader.ReadLEInt32(); //unk3

            NormalRoom room = Rooms.GetRoom(User.CurrentRoomId);

            //onRecvStartGame: iGameStartTick=65, iNumberOfItem=200 (CurTick=2)
            //room.StartTime = Utility.CurrentTimeMilliseconds();
            room.Survival   = (byte)room.PlayerCount();
            room.CapsuleNum = iNumberOfItem;
            room.StartGame();
            room.Players.ForEach((RoomPlayer) => {
                RoomPlayer.Connection.SendAsync(new GameRoom_START_GAME_RES(RoomPlayer, iGameStartTick, iNumberOfItem, last));
                RoomPlayer.Connection.SendAsync(new GameRoom_Hex("FFA80500000000", last));
                RoomPlayer.GameEndType = 0;
                RoomPlayer.GameOver    = false;
            });
            if (room.PlayingMapNum == 1606)
            {
                for (byte i = 0; i <= 7; i++)
                {
                    Account Hare = room.Players.Find(p => p.RoomPos == i);
                    if (Hare.Partner > 7)
                    {
                        Account Tortoise = room.Players.Where(p => p.Team == Hare.Team && p.Partner > 7 && p.RoomPos != i).OrderBy(_ => Guid.NewGuid()).Take(1).ToArray()[0];
                        Hare.Animal         = 0;
                        Hare.Partner        = Tortoise.RoomPos;
                        Hare.TeamLeader     = true;
                        Tortoise.Animal     = 1;
                        Tortoise.Partner    = Hare.RoomPos;
                        Tortoise.TeamLeader = false;
                    }
                }
                room.BroadcastToAll(new AllocatePartner(room, last));
                room.StartHareAndTortoiseThread();
            }

            if (room.RuleType == 8)
            {
                int startlaptime = 100 * 1000;
                room.Players.ForEach((RoomPlayer) => {
                    RoomPlayer.CurrentLapTime = startlaptime;
                    RoomPlayer.LastLapTime    = 0;
                    RoomPlayer.Connection.SendAsync(new Amsan_LapTimeControl(0, startlaptime, startlaptime, false, last));
                });
            }
        }
Exemple #3
0
 public SendPlayerHP(NormalRoom room, byte last)
 {
     ns.Write((byte)0xFF);
     ns.Write((short)0x476);
     ns.Write(room.PlayerCount());
     foreach (Account User in room.PlayerList().OrderBy(p => p.RoomPos))
     {
         User.GetMyLevel();
         User.HP    = 100 + User.HealthPoint + User.Level * 2;
         User.MaxHP = User.HP;
         ns.Write((int)User.RoomPos);
         ns.Write(User.HP);
     }
     ns.Write(last);
 }
Exemple #4
0
 public GameRoom_MiniGame_UpdatePoint(NormalRoom room, byte last)
 {
     //FF 5D 05 02 00 00 00 00 00 00 00 00 01 00 00 00 00 08
     //FF 5D 05 02 00 00 00 00 00 00 00 00 02 00 00 00 00 08
     ns.Write((byte)0xFF);
     ns.Write((short)0x55D);
     ns.Write(room.PlayerCount());
     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 })
              .OrderBy(o => o.d.MiniGamePoint).ThenBy(o => o.p.RoomPos))
     {
         ns.Write(p.p.RoomPos);
         ns.Write(p.d.MiniGamePoint);
     }
     ns.Write(last);
 }
        public static void GameMode_MiniGame_RoundTime(ClientConnection Client, PacketReader reader, byte last)
        {
            //FF C0 02 FF 5E 05 00 00 00 00 00 00 00 00 00 00 A0 41 04
            //FF C0 02 FF 5E 05 02 00 00 00 00 00 00 00 00 00 20 42 01
            Account    User      = Client.CurrentAccount;
            int        round     = reader.ReadLEInt32(); //current round
            int        nextround = reader.ReadLEInt32(); //nextround?
            float      RoundTime = reader.ReadLESingle();
            NormalRoom room      = Rooms.GetRoom(User.CurrentRoomId);

            foreach (Account RoomPlayer in room.Players)
            {
                RoomPlayer.Connection.SendAsync(new GameRoom_MiniGame_RoundTime(RoomPlayer, round, nextround, RoundTime, last));
                RoomPlayer.GameOver = false;
            }
            room.Survival = (byte)room.PlayerCount();
            long RoundEndTime = Utility.CurrentTimeMilliseconds() + (long)(RoundTime * 1000);

            Task.Run(() => GameMode_MiniGame_RoundThread(RoundEndTime, room));
            //Console.WriteLine("room.Round: {0}", room.Round);
            Client.SendAsync(new GameRoom_MiniGame_55F(User, round, last));
            room.RespwanList.Clear();
        }
        public static void GameMode_RandomGameOver(ClientConnection Client, PacketReader reader, byte last)
        {
            //FF C0 02 FF 43 03 01 04
            Account    User = Client.CurrentAccount;
            NormalRoom room = Rooms.GetRoom(User.CurrentRoomId);

            if (room.recvRandGameOver)
            {
                return;
            }
            room.recvRandGameOver = true;
            //Console.WriteLine("Random_GameOver: {0}", Utility.ByteArrayToString(reader.Buffer));
            byte area = reader.ReadByte();

            //List<byte> dieranklist = new List<byte>();
            if (room.PlayerCount() > 7)
            {
                var r = Enumerable.Range(1, room.Survival)
                        .Select(i => (byte)i).OrderBy(_ => Guid.NewGuid()).Take(1).ToList();
                room.GameOverRank.AddRange(r);
                //dieranklist.AddRange(r);
            }
            room.BroadcastToAll(new RandomGameOver(area, User.RoomPos, room.GameOverRank, last));
        }