Ejemplo n.º 1
0
        public void OnBanchoRequest(ref List <BanchoPacket> plist)
        {
            for (var i = 0; i < plist.Count; i++)
            {
                BanchoPacket packet = plist[i];
                switch (packet.Type)
                {
                case PacketType.ClientChatMessagePublic:
                case PacketType.ClientChatMessagePrivate:
                    BanchoChatMessage msg = new BanchoChatMessage();
                    msg.Populate(packet.Data);
                    if (msg.Message.StartsWith(CommandPrefix)) //check if this message is a command for us
                    {
                        plist.RemoveAt(i);                     //remove this packet from packet list
                        HandleCommand(msg);                    //do stuff w/ it
                    }
                    break;

                case PacketType.ClientMultiScoreUpdate:
                    if (_mpScoreSpam)
                    {
                        var score = new BanchoScoreFrame();
                        score.Populate(packet.Data);
                        _mss.ModifyScorePacket(ref score);
                        plist[i].Data = score.Serialize();
                    }
                    break;

                case PacketType.ClientUserStatus:
                    if (_customAction)
                    {
                        var status = new BanchoUserStatus();
                        status.Populate(packet.Data);
                        status.Action     = BanchoAction.Submitting;
                        status.ActionText = "totally legit scores";
                        plist[i].Data     = status.Serialize();
                    }
                    break;

                case PacketType.ClientSpectateData:
                    if (_spectateCorrupt)
                    {
                        var frames = new BanchoReplayFrameBundle();
                        frames.Populate(packet.Data);
                        SpectatorCorrupter.ModifySpectatePacket(ref frames);
                        plist[i].Data = frames.Serialize();
                    }
                    break;
                }
            }

            while (_packetQueueSend.Count != 0)
            {
                plist.Add(_packetQueueSend.Dequeue());
            }
        }
Ejemplo n.º 2
0
        public void OnBanchoResponse(ref List <BanchoPacket> plist)
        {
            for (var i = 0; i < plist.Count; i++)
            {
                BanchoPacket packet = plist[i];
                switch (packet.Type)
                {
                case PacketType.ServerMultiMatchNew:
                case PacketType.ServerMultiMatchUpdate:
                    if (_mpInviteGenerator)
                    {
                        BanchoMultiplayerMatch match = new BanchoMultiplayerMatch();
                        match.Populate(packet.Data);
                        _mig.HandleNewMultiplayerMatch(match);
                    }
                    break;

                case PacketType.ServerChatMessage:
                    if (_peppy)
                    {
                        var msg = new BanchoChatMessage();
                        msg.Populate(packet.Data);
                        var rand = new Random((int)DateTime.Now.Ticks);
                        //yes, this is horrible and yes, it will stay
                        msg.Message = string.Join(" ", msg.Message.Split(' ').Select(a => new[] { "dick", "wang", "f**k a duck", "f**k a donkey", "cocks" }[rand.Next(5)]));
                        //msg.Message = "No quote found. Wow, talk more, losers. (Syntax: .quote [#|nick|add|remove] [\"quote\"|#] [- nick])";
                        packet.Data = msg.Serialize();
                    }
                    break;

                case PacketType.ServerUserPresence:
                    if (_peopleAreWeird)
                    {
                        var pr = new BanchoUserPresence();
                        pr.Populate(packet.Data);
                        if (pr.Username != "JustM3")
                        {
                            pr.Username = "******";                                 //bad hardcode, sorry
                        }
                        pr.Permissions |= UserPermissions.Peppy;
                        pr.Rank         = Int32.MinValue;
                        packet.Data     = pr.Serialize();
                    }
                    break;

                case PacketType.ServerUserData:
                    if (_peopleAreWeird)
                    {
                        var u = new BanchoUserData();
                        u.Populate(packet.Data);
                        u.Accuracy               = float.NegativeInfinity;
                        u.Performance            = short.MaxValue;
                        u.RankedScore            = 1;
                        u.TotalScore             = 1;
                        u.Rank                   = -1;
                        u.Playcount              = Int32.MaxValue;
                        u.Status.Action          = BanchoAction.Testing;
                        u.Status.ActionText      = "osu!HOPE";
                        u.Status.BeatmapId       = 0;
                        u.Status.BeatmapChecksum = "";
                        packet.Data              = u.Serialize();
                    }
                    break;

                case PacketType.ServerSpectateData:
                    if (_spectateCorrupt)
                    {
                        var frames = new BanchoReplayFrameBundle();
                        frames.Populate(packet.Data);
                        SpectatorCorrupter.ModifySpectatePacket(ref frames);
                        plist[i].Data = frames.Serialize();
                    }
                    break;
                }
            }

            while (_packetQueueReceive.Count != 0)
            {
                plist.Add(_packetQueueReceive.Dequeue());
            }
        }