예제 #1
0
 public override void Handle(ReBornWarRock_PServer.GameServer.Virtual_Objects.User.virtualUser User)
 {
     try
     {
         User.Page = Convert.ToInt32(getNextBlock());
         User.send(new PACKET_ROOM_LIST(User, User.Page));
     }
     catch { }
 }
예제 #2
0
        public override void Handle(ReBornWarRock_PServer.GameServer.Virtual_Objects.User.virtualUser User)
        {
            virtualRoom currentRoom   = User.Room;
            int         num1          = Convert.ToInt32(getBlock(0));
            int         num2          = Convert.ToInt32(getBlock(1));
            int         num3          = Convert.ToInt32(getBlock(2));
            int         num4          = Convert.ToInt32(getBlock(3));
            int         num5          = Convert.ToInt32(getBlock(4));
            int         num6          = Convert.ToInt32(getBlock(5));
            int         ThisTimeStamp = 0;

            if (num2 == 1 && num3 == 6)
            {
                User.send(new PACKET_CHAT("SYSTEM", PACKET_CHAT.ChatType.Room_ToAll, "SYSTEM >> Vai CAzzo ;)!", 999, "NULL"));
                User.send(new PACKET_3(num4, currentRoom));
            }
            if (num1 == 0 && num2 == 0 && num3 == 0 || num3 == 1 && num5 != 0)
            {
                ThisTimeStamp = Structure.timestamp;
            }
            {
                if (num5 == 0 && ThisTimeStamp >= Structure.timestamp)
                {
                    currentRoom.InHacking = true;
                    User.send(new PACKET_HACKING_ESCAPE(0, currentRoom.EscapeHack, 0));
                    currentRoom.EscapeHack += 10;
                    ThisTimeStamp          += 2;
                    User.send(new PACKET_HACKING_ESCAPE(2, currentRoom.EscapeHack, 0));
                }
                else if (num5 == currentRoom.EscapeHack)
                {
                    if (currentRoom.HackingPause % 3 == 0)
                    {
                        currentRoom.EscapeHack += 10;
                    }
                    User.send(new PACKET_HACKING_ESCAPE(2, currentRoom.EscapeHack, 0));
                }
            }
        }
예제 #3
0
        public override void Handle(ReBornWarRock_PServer.GameServer.Virtual_Objects.User.virtualUser User)
        {
            try
            {
                if (User.Room != null)
                {
                    return;
                }
                int    RoomID   = Convert.ToInt32(getNextBlock());
                string Password = getNextBlock();
                int    Side     = Convert.ToInt32(getBlock(2));//FreeWar > 0 Derb/ 1 NIU/ 2 Random

                virtualRoom Room = RoomManager.getRoom(User.Channel, RoomID);

                if (Room != null)
                {
                    bool LevelLimit = true;
                    switch (Room.LevelLimit)
                    {
                    case 0: { LevelLimit = false; break; }

                    case 1: { if (LevelCalculator.getLevelforExp(User.Exp) <= 4)
                              {
                                  LevelLimit = false;
                              }
                              break; }

                    case 2: { if (LevelCalculator.getLevelforExp(User.Exp) > 5)
                              {
                                  LevelLimit = false;
                              }
                              break; }

                    case 3: { if (LevelCalculator.getLevelforExp(User.Exp) > 13)
                              {
                                  LevelLimit = false;
                              }
                              break; }

                    case 4: { if (LevelCalculator.getLevelforExp(User.Exp) > 23)
                              {
                                  LevelLimit = false;
                              }
                              break; }

                    case 5: { if (LevelCalculator.getLevelforExp(User.Exp) > 33)
                              {
                                  LevelLimit = false;
                              }
                              break; }
                    }

                    bool canJoinPing = false;
                    switch (Room.Ping)
                    {
                    case 0: if (User.Ping < 150)
                        {
                            canJoinPing = true;
                        }
                        else
                        {
                            canJoinPing = false;
                        } break;

                    case 1: if (User.Ping < 250)
                        {
                            canJoinPing = true;
                        }
                        else
                        {
                            canJoinPing = false;
                        } break;

                    case 2: canJoinPing = true; break;
                    }

                    if ((Room.Players.Count >= Room.MaxPlayers || Room.RoomType == 1 && (User.ClanRank == -1 || User.ClanRank == 9) || (Room.RoomType == 1 && (Room.getSideCount(0) > 0 && Room.getSideCount(1) > 0 && Room.isMyClan(User) == false)) || Room.RoomType == 1 && User.ClanID == -1 || canJoinPing == false && User.Rank < 2 || Room.UserLimit || Room.isJoinAble() == false || User.pingOK == false) && User.Rank < 2)
                    {
                        User.send(new PACKET_JOIN_ROOM(PACKET_JOIN_ROOM.ErrorCodes.GenericError));
                    }
                    else if (Password != "NULL" && (Password != Room.Password))
                    {
                        User.send(new PACKET_JOIN_ROOM(PACKET_JOIN_ROOM.ErrorCodes.InvalidPassword));
                    }
                    else if (LevelLimit == true)
                    {
                        User.send(new PACKET_JOIN_ROOM(PACKET_JOIN_ROOM.ErrorCodes.BadLevel));
                    }
                    else if (User.Premium == 0 && Room.PremiumOnly == 1)
                    {
                        User.send(new PACKET_JOIN_ROOM(PACKET_JOIN_ROOM.ErrorCodes.OnlyPremium));
                    }
                    else
                    {
                        if (User.Room != null)
                        {
                            return;
                        }
                        if (Room.joinUser(User, Side) == true)
                        {
                            ArrayList tempPlayers = new ArrayList();
                            User.isReady      = false;
                            User.isSpawned    = false;
                            User.BackedToRoom = false;
                            User.Health       = 0;
                            foreach (virtualUser RoomUser in Room.Players)
                            {
                                if (RoomUser.Equals(User) == false)
                                {
                                    tempPlayers.Add(RoomUser);
                                }
                            }
                            User.send(new PACKET_ROOM_UDP(User, tempPlayers));

                            foreach (virtualUser tempSpectator in Room.Spectators)
                            {
                                User.send(new PACKET_ROOM_UDP_SPECTATE(tempSpectator));
                            }

                            // User.send(new PACKET_JOIN_ROOM(User, Room));

                            tempPlayers.Clear();
                            tempPlayers.Add(User);

                            foreach (virtualUser RoomUser in Room.Players)
                            {
                                RoomUser.send(new PACKET_ROOM_UDP(RoomUser, tempPlayers));
                            }

                            foreach (virtualUser SpectatorUser in Room.Spectators)
                            {
                                SpectatorUser.send(new PACKET_ROOM_UDP(SpectatorUser, tempPlayers));
                            }

                            /* Send out changed Room Data */
                            foreach (virtualUser _User in UserManager.getUsersInChannel(Room.Channel, false))
                            {
                                if (_User.Page == Math.Floor(Convert.ToDecimal(Room.ID / 14)))
                                {
                                    _User.send(new PACKET_ROOMLIST_UPDATE(Room));
                                }
                            }
                        }
                        else
                        {
                            User.send(new PACKET_JOIN_ROOM(PACKET_JOIN_ROOM.ErrorCodes.GenericError));
                        }
                    }
                }
                else
                {
                    User.send(new PACKET_JOIN_ROOM(PACKET_JOIN_ROOM.ErrorCodes.GenericError));
                }
            }
            catch { User.send(new PACKET_JOIN_ROOM(PACKET_JOIN_ROOM.ErrorCodes.GenericError)); }
        }
예제 #4
0
        public override void Handle(ReBornWarRock_PServer.GameServer.Virtual_Objects.User.virtualUser User)
        {
            virtualRoom currentRoom = User.Room;
            int         value       = 0;
            int         totPerc     = (currentRoom.HackPercentageA + currentRoom.HackPercentageB);

            if (!currentRoom.GameActive || totPerc >= 100)
            {
                return;
            }

            //0 1 6 0 99 0
            User.hackingBase = Convert.ToInt32(getBlock(3));
            int sType = 2;

            if (getBlock(1) == "0" && getBlock(2) == "0" && (getBlock(3) == "0" || getBlock(3) == "1")) // Starting to hack send animation
            {
                User.send(new SP_RoomHackMission(User.RoomSlot, (User.hackingBase == 0 ? currentRoom.HackPercentageA : currentRoom.HackPercentageB), 0, User.hackingBase, value));
                return;
            }
            else if (getBlock(1) == "1" && getBlock(2) == "6" && getBlock(3) == "0" && currentRoom.PickuppedC4 == false) // Pickup the C4
            {
                if (currentRoom.MapID == 56)
                {
                    if (currentRoom.getSide(User) != (int)currentRoom.getSide(User))
                    {
                        return;
                    }
                    currentRoom.PickuppedC4 = true;
                    User.hasC4 = true;
                    currentRoom.send(new SP_Unknown(29985, 0, 0, 1, 6, 0, 0, -1, 0));                                              // Remove the C4 from table
                    currentRoom.send(new SP_Unknown(30000, 1, User.RoomSlot, User.UserID, 2, 155, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0)); // Switch to C4
                }
                else
                {
                    Log.AppendError("Tried to pickup C4 in room " + currentRoom.MapID);
                }
                return;
            }
            else if (getBlock(1) == "1" && getBlock(2) == "0" && getBlock(3) == "0") // Use the C4
            {
                if (currentRoom.MapID == 58)
                {
                    //30000 1 -1 4 2 104 0 1 1 0 0 92 0 92 -1 0 0 1333333 -1166666 1333333 0 2845.7510 205.0797 3374.0964 -70.9974 45.4165 -287.9179 0 0 DP05
                    currentRoom.PickuppedC4 = false;
                    User.hasC4 = false;
                    //currentRoom.SiegeWarC4User = User.UserID.ToString();
                    currentRoom.send(new SP_Unknown(29985, 0, 0, 1, 0, 0, 0, 0, 0)); // Remove C4 from the user
                    currentRoom.SiegeWarTime = 5;
                }
                else
                {
                    Log.AppendError("Tried to use C4 in room " + currentRoom.MapID);
                }
                return;
            }
            else if (Convert.ToInt32(getBlock(2)) == 3) // Stop to hack
            {
                User.isHacking = false;
                sType          = 3;
                currentRoom.send(new SP_RoomHackMission(User.RoomSlot, (User.hackingBase == 0 ? currentRoom.HackPercentageA : currentRoom.HackPercentageB), sType, User.hackingBase, value));
                return;
            }

            //if (currentRoom == null || User.LastHackTick > currentRoom.InitialTime && User.LastHackTick > 0) return;

            if (User.hackingBase != User.LastHackBase)
            {
                User.hackTick = 0;
            }

            if ((User.LastHackTick < currentRoom.InitialTime) || (User.LastHackTick == 0))
            {
                User.LastHackTick = 0;
                User.hackTick++;
                User.rPoints++;
                User.hackTick = 0;

                if (User.hackingBase == 0)
                {
                    currentRoom.HackPercentageA++;
                }
                else
                {
                    currentRoom.HackPercentageB++;
                }
            }

            int totalPercentage = (currentRoom.HackPercentageA + currentRoom.HackPercentageB);

            if (User.GodMode)
            {
                totalPercentage = 100;
            }

            User.LastHackBase = User.hackingBase;

            User.hackPercentage++;
            User.isHacking = true;

            if (totalPercentage >= 100)
            {
                if (currentRoom.MapID == 58)
                {
                    if (currentRoom.Mission1 == null)
                    {
                        currentRoom.Mission1 = User.Nickname;
                        User.rPoints        += 1;
                        currentRoom.send(new SP_Unknown(29985, 0, 0, 1, 1, 99, 0));         // Go to mission 2
                        currentRoom.send(new SP_Unknown(29985, 0, 0, 0, 4, 1, 100, -1, 0)); // Go to mission 2
                        currentRoom.send(new SP_Unknown(29985, 0, -1, 1, 5, -1, 0, -1, 0)); // Spawn the C4
                        currentRoom.Flags[2] = 1;
                        currentRoom.Flags[3] = 0;
                        currentRoom.Flags[0] = currentRoom.Flags[1] = -1;
                        currentRoom.send(new SP_Unknown(30000, 1, -1, currentRoom.ID, 2, 156, 0, 1, 2, 1, -1, 2, 0, 92, -1, 0, 0, 1333333, -1166666, 1333333, 0, 3689.6670, 969.9617, 4332.0752, 64.4469, 37.4174, -290.5969, 0, 0, "DU02"));
                        currentRoom.send(new SP_Unknown(30000, 1, -1, currentRoom.ID, 2, 156, 0, 1, 3, 0, -1, 2, 0, 92, -1, 0, 0, 1333333, -1166666, 1333333, 0, 3689.6670, 969.9617, 4332.0752, 64.4469, 37.4174, -290.5969, 0, 0, "DU02"));
                        currentRoom.send(new SP_Unknown(30000, 1, -1, currentRoom.ID, 2, 156, 0, 1, 0, -1, 0, 0, 0, 92, -1, 0, 0, 1333333, -1166666, 1333333, 0, 3689.6670, 969.9617, 4332.0752, 64.4469, 37.4174, -290.5969, 0, 0, "DU02"));
                        currentRoom.send(new SP_Unknown(30000, 1, -1, currentRoom.ID, 2, 156, 0, 1, 1, -1, 1, 1, 0, 92, -1, 0, 0, 1333333, -1166666, 1333333, 0, 3689.6670, 969.9617, 4332.0752, 64.4469, 37.4174, -290.5969, 0, 0, "DU02"));
                        currentRoom.PickuppedC4 = false;
                    }
                }
                else if (totalPercentage >= 100 && currentRoom.Mode == 11)
                {
                    currentRoom.InitialTime += 480000;
                    //S=> 250048643 29985 0 0 0 4 1 100 -1 0
                    sType = 4;
                    currentRoom.send(new SP_RoomHackMission(User.RoomSlot, totalPercentage, sType, User.hackingBase, value));

                    //250048643 30053 3 131487 0 100 -1 0
                    currentRoom.Stage2.Stop();
                    currentRoom.milliSec = currentRoom.Stage2.ElapsedMilliseconds;

                    //currentRoom.send(new PACKET_TIMEATTACK_ALL(0, 3, totalPercentage, -1, currentRoom.milliSec, 0));
                    currentRoom.send(new PACKET_SCORE_BOARD_AI_TIMEATTACK(currentRoom, User, currentRoom.milliSec));
                    currentRoom.milliSec      = 0;
                    currentRoom.freezeZombies = false;

                    //250048643 29985 0 -1 1 5 -1 0 -1 0
                    sType            = 5;
                    value            = 0;
                    totalPercentage  = 0;
                    User.hackingBase = -1;
                    currentRoom.send(new SP_RoomHackMission(User.RoomSlot, totalPercentage, sType, User.hackingBase, value));
                    //currentRoom.timeattack.PrepareNewStage(3);
                }
            }
            currentRoom.send(new SP_RoomHackMission(User.RoomSlot, (User.hackingBase == 0 ? currentRoom.HackPercentageA : currentRoom.HackPercentageB), sType, User.hackingBase, value));

            //currentRoom.send(new SP_RoomHackMission(User.RoomSlot, (User.hackingBase == 0 ? currentRoom.HackPercentageA : currentRoom.HackPercentageB), sType, User.hackingBase));
        }
예제 #5
0
        public override void Handle(ReBornWarRock_PServer.GameServer.Virtual_Objects.User.virtualUser User)
        {
            try
            {
                int ChatType = Convert.ToInt32(getBlock(0));
                int TargetID = Convert.ToInt32(getBlock(1));

                string TargetName = getBlock(2);
                string exMessage  = getBlock(3);
                string Message    = WordManager.GetBadWord(exMessage);

                string sMessage = Message.Split(new string[] { ">>" + Convert.ToChar(0x1D).ToString() }, StringSplitOptions.None)[1].Replace(Convert.ToChar(0x1D), Convert.ToChar(0x20));
                if (User.isCommand(sMessage))
                {
                    return;
                }

                int  MuteTime      = 60;
                long ChatTimeCheck = Structure.currTimeStamp;
                if (User.isMuted == true && User.MutedTime > ChatTimeCheck)
                {
                    User.send(new PACKET_CHAT("SERVER", PACKET_CHAT.ChatType.Whisper, "SERVER >> You are muted, please try it later again!", User.SessionID, User.Nickname));
                    return;
                }
                else
                {
                    User.isMuted = false; User.MutedTime = 0;
                }
                DB.runQuery("INSERT INTO chatlogs (`userid`, `roomid`, `message`, `timestamp`) VALUES ('" + User.UserID + "', '" + ((User.Room == null) ? -1 : User.Room.ID) + "', '" + DB.Stripslash(sMessage) + "', '" + Structure.currTimeStamp + "')");
                if (User.LastChatTick == 0)
                {
                    User.LastChatTick = Environment.TickCount;
                }

                long ChatTime = Environment.TickCount - User.LastChatTick;

                if (ChatTime != 0 && ChatTime < 1000)
                {
                    User.ChatWarnings++;
                    if (User.ChatWarnings >= 5 && User.Rank < 3)
                    {
                        User.MutedTime = Structure.currTimeStamp + MuteTime;
                        User.send(new PACKET_CHAT("SERVER", PACKET_CHAT.ChatType.Whisper, "SERVER >> You have been muted!", User.SessionID, User.Nickname));
                        User.isMuted = true;
                        return;
                    }
                }

                User.LastChatTick = Environment.TickCount;

                switch (ChatType)
                {
                case 2:
                {
                    ReBornWarRock_PServer.GameServer.Virtual_Objects.User.virtualUser Target = UserManager.getUser(TargetName);
                    if (Target is ReBornWarRock_PServer.GameServer.Virtual_Objects.User.virtualUser && Target.SessionID > 0)
                    {
                        User.send(new PACKET_CHAT(User, PACKET_CHAT.ChatType.Whisper, Message, Target.SessionID, Target.Nickname));
                        if (!User.Equals(Target))
                        {
                            Target.send(new PACKET_CHAT(User, PACKET_CHAT.ChatType.Whisper, Message, Target.SessionID, Target.Nickname));
                        }
                    }
                    else
                    {
                        User.send(new PACKET_CHAT(PACKET_CHAT.ErrorCodes.ErrorUser, TargetName + Convert.ToChar(0x1D)));
                    }
                    break;
                }

                case 3:     // Lobby2Channel
                {
                    if (User.ColorChat == System.Drawing.Color.Empty || User.Rank < 2)
                    {
                        if (User.Rank > 2)
                        {
                            TargetID = 999;
                        }
                        UserManager.sendToChannel(User.Channel, false, new PACKET_CHAT(User, PACKET_CHAT.ChatType.Lobby_ToChannel, Message, (User.Rank > 4) ? 999 : TargetID, TargetName));
                    }
                    else
                    {
                        UserManager.sendToChannel(User.Channel, false, new PACKET_CHAT_COLOR(Message, PACKET_CHAT_COLOR.ChatType.Normal, User.ColorChat));
                        //UserManager.sendToChannel(usr.channel, false, new SP_ColoredChat(message, SP_ColoredChat.ChatType.Normal, usr.chatColor));
                    }
                    break;
                }

                case 4:     // Room2All
                {
                    if (User.Room != null)
                    {
                        if (User.ColorChat != System.Drawing.Color.Empty && !User.Room.GameActive && User.Rank >= 2)
                        {
                            User.Room.send(new PACKET_CHAT_COLOR(Message, PACKET_CHAT_COLOR.ChatType.Normal, User.ColorChat));
                        }
                        else
                        {
                            if (User.hasItem("CC02") && User.Room.RoomStatus == 1 && User.RoomSlot == User.Room.RoomMasterSlot && User.Rank < 3)
                            {
                                TargetID = 998;
                            }
                            else if (User.Rank > 2)
                            {
                                TargetID = 999;
                            }

                            User.Room.send(new PACKET_CHAT(User, PACKET_CHAT.ChatType.Room_ToAll, Message, TargetID, TargetName));
                        }
                    }
                    else
                    {
                        User.disconnect();
                    }
                    break;
                }

                case 5:     // Room2Team
                {
                    if (User.Room != null)
                    {
                        foreach (ReBornWarRock_PServer.GameServer.Virtual_Objects.User.virtualUser RoomUser in User.Room.Players)
                        {
                            if (User.Room.getSide(User) == User.Room.getSide(RoomUser))
                            {
                                RoomUser.send(new PACKET_CHAT(User, PACKET_CHAT.ChatType.Room_ToTeam, Message, (User.Rank > 2) ? 999 : TargetID, TargetName));
                            }
                        }
                        foreach (ReBornWarRock_PServer.GameServer.Virtual_Objects.User.virtualUser SpectatorUser in User.Room.Spectators)
                        {
                            SpectatorUser.send(new PACKET_CHAT(User, PACKET_CHAT.ChatType.Room_ToTeam, Message, (User.Rank > 2) ? 999 : TargetID, TargetName));
                        }
                    }
                    else
                    {
                        User.disconnect();
                    }
                    break;
                }

                case 6:     // Whisper
                {
                    ReBornWarRock_PServer.GameServer.Virtual_Objects.User.virtualUser Target = UserManager.getUser(TargetName);
                    if (Target is ReBornWarRock_PServer.GameServer.Virtual_Objects.User.virtualUser && Target.SessionID > 0 && Target.GMMode == false)
                    {
                        User.send(new PACKET_CHAT(User, PACKET_CHAT.ChatType.Whisper, Message, Target.SessionID, Target.Nickname));
                        if (!User.Equals(Target))
                        {
                            Target.send(new PACKET_CHAT(User, PACKET_CHAT.ChatType.Whisper, Message, Target.SessionID, Target.Nickname));
                        }
                    }
                    else
                    {
                        User.send(new PACKET_CHAT(PACKET_CHAT.ErrorCodes.ErrorUser, TargetName + Convert.ToChar(0x1D)));
                    }
                    break;
                }

                case 8:     //Lobby2AllChannels
                {
                    UserManager.sendToChannel(1, false, new PACKET_CHAT(User, PACKET_CHAT.ChatType.Lobby_ToChannel, Message, TargetID, TargetName));
                    UserManager.sendToChannel(2, false, new PACKET_CHAT(User, PACKET_CHAT.ChatType.Lobby_ToChannel, Message, TargetID, TargetName));
                    UserManager.sendToChannel(3, false, new PACKET_CHAT(User, PACKET_CHAT.ChatType.Lobby_ToChannel, Message, TargetID, TargetName));
                    break;
                }

                case 9:     //RadioChat
                {
                    if (User.Room == null)
                    {
                        return;
                    }

                    //byte[] buffer = (new PACKET_CHAT(User, PACKET_CHAT.ChatType.RadioChat, Message, TargetID, TargetName)).GetBytes();

                    int mySide = User.Room.getSide(User);

                    foreach (virtualUser u in User.Room.Players)
                    {
                        if (User.Room.getSide(User) == User.Room.getSide(u))
                        {
                            u.send(new PACKET_CHAT(User, PACKET_CHAT.ChatType.RadioChat, Message, (User.Rank > 2) ? 999 : TargetID, TargetName));
                        }

                        // u.send(buffer);
                    }

                    break;
                }

                case 10:     // Clan
                {
                    if (User.ClanID != -1 && User.ClanRank != -1)
                    {
                        ClanManager.sendToClan(User, new PACKET_CHAT(User, PACKET_CHAT.ChatType.Clan, Message, TargetID, TargetName));
                    }
                    else
                    {
                        User.send(new PACKET_CHAT("SYSTEM", PACKET_CHAT.ChatType.Whisper, "SYSTEM >> Chat available after creating or get accepted from a clan", User.SessionID, User.Nickname));
                    }
                    break;
                }

                default:
                {
                    Log.WriteDebug("New unknow operation for chat: " + ChatType);
                    Log.WriteDebug("Blocks: " + string.Join(" ", getAllBlocks()));
                    break;
                }
                }
                string[] args = sMessage.Split(Convert.ToChar(0x20));
                if (args.Length >= 2)
                {
                    if (args[0] == "I" && args[1] == "Hate" && args[2] == "WarRock")
                    {
                        if (User.CheckForEvent(5) == false)
                        {
                            string ItemCode = "CB27";
                            User.AddItem(ItemCode, -1, 1);
                            User.send(new PACKET_CHAT_EVENT(User, ItemCode));
                            DB.runQuery("INSERT INTO users_events (userid, eventid) VALUES ('" + User.UserID + "', '5')");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log.AppendError(ex.Message);
            }
        }
예제 #6
0
        public override void Handle(ReBornWarRock_PServer.GameServer.Virtual_Objects.User.virtualUser User)
        {
            try
            {
                ArrayList Rooms = RoomManager.getRoomsInChannel(User.Channel, new Random().Next(0, RoomManager.RoomToPageCount(User.Channel)));
                foreach (virtualRoom Room in Rooms)
                {
                    if (User.Room != null)
                    {
                        return;
                    }
                    if (Room.Players.Count >= Room.MaxPlayers)
                    {
                        return;
                    }
                    if (Room.EnablePassword == 1)
                    {
                        return;
                    }
                    if (Room.UserLimit == true)
                    {
                        return;
                    }
                    if (Room.LevelLimit > 0)
                    {
                        return;
                    }
                    if (Room.RoomType == 1)
                    {
                        return;
                    }

                    int Side = Convert.ToInt32(getBlock(2));
                    if (Room.joinUser(User, Side) == true)
                    {
                        ArrayList tempPlayers = new ArrayList();
                        User.isReady      = false;
                        User.isSpawned    = false;
                        User.Health       = 0;
                        User.BackedToRoom = false;
                        foreach (virtualUser RoomUser in Room.Players)
                        {
                            if (RoomUser.Equals(User) == false)
                            {
                                tempPlayers.Add(RoomUser);
                            }
                        }
                        User.send(new PACKET_ROOM_UDP(User, tempPlayers));

                        foreach (virtualUser tempSpectator in Room.Spectators)
                        {
                            User.send(new PACKET_ROOM_UDP_SPECTATE(tempSpectator));
                        }

                        User.send(new PACKET_JOIN_ROOM(User, Room));

                        tempPlayers.Clear();
                        tempPlayers.Add(User);

                        foreach (virtualUser RoomUser in Room.Players)
                        {
                            RoomUser.send(new PACKET_ROOM_UDP(RoomUser, tempPlayers));
                        }

                        foreach (virtualUser SpectatorUser in Room.Spectators)
                        {
                            SpectatorUser.send(new PACKET_ROOM_UDP(SpectatorUser, tempPlayers));
                        }

                        /* Send out changed Room Data */

                        foreach (virtualUser _User in UserManager.getUsersInChannel(Room.Channel, false))
                        {
                            if (_User.Page == Math.Floor(Convert.ToDecimal(Room.ID / 14)))
                            {
                                _User.send(new PACKET_ROOMLIST_UPDATE(Room));
                            }
                        }
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                Log.AppendError("Error at QuickJoin: " + ex.Message);
            }
        }
예제 #7
0
        public override void Handle(ReBornWarRock_PServer.GameServer.Virtual_Objects.User.virtualUser User)
        {
            try
            {
                int ResultID = RoomManager.getOpenID(User.Channel);

                if (User.Channel != 3)
                {
                    if (ResultID >= 0 && (User.Channel >= 1 && User.Channel <= 3))
                    {
                        if (User.Room == null)
                        {
                            virtualRoom Room = new virtualRoom();
                            /*ToXiiC's Noob Stuff*/
                            Room.ID             = ResultID;
                            Room.Channel        = User.Channel;
                            Room.Name           = getBlock(0);
                            Room.EnablePassword = Convert.ToInt32(getBlock(1));
                            Room.Password       = getBlock(2);
                            Room.MaxPlayers     = (Convert.ToInt32(getBlock(3)) + 1);
                            Room.MapID          = Convert.ToInt32(getBlock(4));
                            Room.SuperMaster    = User.hasItem("CC02");

                            switch (Room.Channel)
                            {
                            case 1:
                            {
                                switch (Room.MaxPlayers)
                                {
                                case 1: Room.MaxPlayers = 8; break;

                                case 2: Room.MaxPlayers = 16; break;

                                case 3: Room.MaxPlayers = 20; break;

                                case 4: Room.MaxPlayers = 24; break;
                                }
                                break;
                            }

                            case 2:
                            {
                                switch (Room.MaxPlayers)
                                {
                                case 1: Room.MaxPlayers = 8; break;

                                case 2: Room.MaxPlayers = 16; break;

                                case 3: Room.MaxPlayers = 20; break;

                                case 4: Room.MaxPlayers = 24; break;

                                case 5: Room.MaxPlayers = 32; break;
                                }
                                break;
                            }
                            }
                            if (Room.MapID == 66)
                            {
                                Room.MaxPlayers = 32;
                            }
                            Room.Mode     = Convert.ToInt32(getBlock(5));
                            Room.RoomType = Convert.ToInt32(getBlock(7));

                            if (Room.Name.StartsWith("E|") && User.Rank > 2 && Room.Name.Length > 2)
                            {
                                Room.Name     = Room.Name.Substring(2);
                                Room.RoomType = 3;
                            }
                            Room.LevelLimit  = Convert.ToInt32(getBlock(8));
                            Room.PremiumOnly = Convert.ToInt32(getBlock(9));
                            Room.VoteKick    = Convert.ToInt32(getBlock(10));
                            if (Room.Mode == 0)
                            {
                                Room.Rounds = Convert.ToInt32(getBlock(12));
                            }
                            else
                            {
                                Room.Rounds = Convert.ToInt32(getBlock(11));
                            }
                            Room.TimeLimit = Convert.ToInt32(getBlock(14));
                            Room.Ping      = Convert.ToInt32(getBlock(15));

                            int isAutoStart = Convert.ToInt32(getBlock(16));
                            if (isAutoStart == 1)
                            {
                                Room.AutoStart = true;
                            }
                            if (Room.RoomType == 1 && Room.Mode == 1 && Room.Channel == 1)
                            {
                                Room.Mode = 0;
                            }
                            Room.NewMode    = Convert.ToInt32(getBlock(17));
                            Room.SubNewMode = Convert.ToInt32(getBlock(18));
                            if (Room.joinUser(User, 0))
                            {
                                if (RoomManager.addRoom(Room.Channel, Room.ID, Room))
                                {
                                    User.isReady  = User.isSpawned = false;
                                    User.RoomSlot = 0;
                                    User.send(new PACKET_CREATE_ROOM(Room));
                                    Room.UserLimitCount = Room.MaxPlayers;
                                    foreach (virtualUser _User in UserManager.getUsersInChannel(Room.Channel, false))
                                    {
                                        if (_User.Page == Math.Floor(Convert.ToDecimal(Room.ID / 14)))
                                        {
                                            _User.send(new PACKET_ROOMLIST_UPDATE(Room, 0));
                                            _User.send(new PACKET_ROOMLIST_UPDATE(Room));
                                        }
                                    }
                                }
                                else
                                {
                                    Log.AppendError("Couldn't Add Room" + Room.ID + ":" + Room.Name + " To the Room Pool");
                                    //Error Joining Room?
                                    User.disconnect();
                                }
                            }
                            else
                            {
                                Log.AppendError("Couldn't Join Room" + Room.ID + ":" + Room.Name + " As Master");
                                //Error Joining Room?
                                User.disconnect();
                            }
                        }
                    }
                }
                else
                {
                    if (ResultID >= 0 && User.Room == null)
                    {
                        virtualRoom Room = new virtualRoom()
                        {
                            ID             = ResultID,
                            Channel        = User.Channel,
                            Name           = getNextBlock(),
                            EnablePassword = Convert.ToInt32(getNextBlock()),
                            Password       = getNextBlock(),
                            MaxPlayers     = 4,
                            MapID          = Convert.ToInt32(getBlock(4)),
                        };

                        Room.Mode             = Convert.ToInt32(getBlock(5));
                        Room.LevelLimit       = Convert.ToInt32(getBlock(8));
                        Room.ZombieDifficulty = Convert.ToInt32(getBlock(13));
                        Room.Ping             = Convert.ToInt32(getBlock(15));
                        if (Room.Channel == 3 && Room.Mode != 12)
                        {
                            for (int i = 0; i < 26; i++)
                            {
                                Room.Zombies.Add(i + 4, new virtualZombie((i + 4), 0, 0, 0));
                            }
                        }
                        int isAutoStart = Convert.ToInt32(getBlock(16));
                        if (isAutoStart == 1)
                        {
                            Room.AutoStart = true;
                        }

                        if (Room.joinUser(User, 0))
                        {
                            if (RoomManager.addRoom(Room.Channel, Room.ID, Room))
                            {
                                User.send(new PACKET_CREATE_ROOM(Room));
                                Room.UserLimitCount = Room.MaxPlayers;
                                foreach (virtualUser _User in UserManager.getUsersInChannel(Room.Channel, false))
                                {
                                    if (_User.Page == Math.Floor(Convert.ToDecimal(Room.ID / 14)))
                                    {
                                        _User.send(new PACKET_ROOMLIST_UPDATE(Room, 0));
                                        _User.send(new PACKET_ROOMLIST_UPDATE(Room));
                                    }
                                }
                            }
                            else
                            {
                                Log.AppendError("Couldn't Add Room" + Room.ID + ":" + Room.Name + " To the Room Pool");
                                User.disconnect();
                            }
                        }
                        else
                        {
                            Log.AppendError("Couldn't Join Room" + Room.ID + ":" + Room.Name + " As Master");
                            User.disconnect();
                        }
                    }
                }
            }
            catch (Exception ex) { Log.AppendError(ex.Message); }
        }