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(); } }
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)); }); } }
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); }
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)); }