local COLOR = 1 local COLOR1 = 2 local COLOR2 = 3 local COMBOBOX = 4 local TOGGLE = 5 local KEYBIND = 6 local DROPBOX = 7 local COLORPICKER = 8 local DOUBLE_COLORPICKERS = 9 local SLIDER = 10 local BUTTON = 11 local LIST = 12 local IMAGE = 13 local TEXTBOX = 14 if not BBOT then BBOT = { username = "dev" } end local menu local MenuName = isfile("bitchbot/menuname.txt") and readfile("bitchbot/menuname.txt") or nil local loadstart = tick() local customChatSpam = {} local customKillSay = {} local placeholderImage = "iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAJOgAACToAYJjBRwAADAPSURBVHhe7Z0HeFRV+sZDCyEJCQRICJA6k4plddddXf/KLrgurg1EXcXdZV0bVlCqDRQVAQstNKVJ0QVcAelIDz0UaSGBQChJII10Orz/9ztzJ5kk00lC2vs833NTZs69c85vvvOdc8/5rgvqVa9KUD1Y9aoU1YNVr0pRPVj1qhTVg1WvSlE9WPWqFNWDZUaFubk4sf8g9q5egw2zv8eKid/g5y9GY9HIr7FkzASsmjwVWxcsxMFNsUhPPqG9q16mqrNgpRxJwtKxEzFhQD+8fV8nPOzqiXtdXPBMx2gM/HMnjHm6B/7bsxfWvPk24t4fggOEKjFmMo5OnoKjM2ZiPy1u5iys/m425nw5FuMHD8Lc0ePx/Vdj8MOnIzC93yDsWb5KO1vdU50Ba93MOfj6tVfRw8sP0QToWdpnLk0wr4k3dvkG4Pzv7wVuuwvwaosrnn4436w1Cpq1Qp57a+TymOvmg5ymLXHOlcb35DRqjtwGHshzcaM1Rl7zNii6615cffFVXKV3w4qVSN2zGz9O+w7zYyZh8aRv8MPQYSjKy9euqHar1oKVknAEE/v2RTf3VriTEA12aYiFbq2Q7BcMhEYDQZG4FBCOwvZ65LXTI9svBFn+ocji72LZ9liHsBJjGVm+wchq2R5ZhDPL1RvZLk2Rw/MW/t+fceWjT4E9e7Bl7TosmDgF80d9ja3z/6ddbe1TrQIrKzUVY3u/hD8QpB60mU1a4GRbghQSjStB4cgPDMO5gDBkdtAjM0AsDFkClTloKsI06LJ8g5Dl3RaZDT0JmwsK/tgJ1whXXkoK5o2biAXsPncvX6l9itqhWgHWopgYPNTAHX9lo81hV5VPcBASicLA8BKQpIEFpDJmgEtnHozKMCNonr7I4vXmEvDrY8cjMy0NcyQ+o2e7dvWq9slqrmosWNevX8eInj0Rxcb5xMWVXVwQEByBAvFEbMAMwmQOJHNW5XAZTTxaW3bBjOky+TkK7+sCbNyIJf9biFlDPsHp+MPap615qnFgFZ7LwcAuD+IO8U5uLRkrRTBWki6HMLXXKaDEQ8nPcjQHkjkTuLL9bwJcRhNP1oaerJEXchp6ADETsWfHTswcNhzxGzZpn77mqMaAdfXSZfTv1Bl3Eajl7EakqytgzJROD5XBhjF0d6WtxsFlNHpP6SolHrv23hAc3r8fUwa8h1P7D2q1Uf1VI8D6rNuTuI2VvFgDSuKS9A46BZUCS0Big5QFS8wpuG5Gt2jWeE3e/ioWwyfDsW1jLL7+9wu4cvGiVjPVV9UarFXTp6kYanITbwVUXmAJUBkmVhlw3ZSYy5JJN9m8LT1YQ2DpUsybMRsz3x6g1VL1VLUE60J+Ph7z9MHzhKooKBzntS6vLFCmVrs9V4llNvZCQbsQXE5Oxif/7IWk7XFarVUvVTuwZg8dio4EKtanA71URAk0dlhdgSvbP1SNIvHG21i/ZRNGP/Mvrfaqj6oVWE/4+OFlqTDp9gQUdnvmALJmFQ6XTAlUR7ike/Rui9wmzXHt1Em81+0JZJ86rdXkzVe1ACtx53YVSy1r0RYIjUC6xFIaIObgsWWVBpfRyjbyzbR2/DzyZRw+AtPHjMfqWbO0Wr25uulgxbz4sroFk0WYCmhnBSrjUQPEHDy2zCZcclTQ8NguFBltg5DpF4hs30DktglAXusOKPBph0K/IBS2D0Eh4ZL7ioX+wSjk//Nb+COvZTvk+HDU5tMeWa06GGbU24ZUPXzivZr64PKdf8C+LZsx7C+PaLV783RTwXpJF6kCdEMspcOZDqE4y6PyWJUEl3grgUgBRHAuEaprt98DdHoYebQDd3TC6oi78EPI7YgJvxXjwm/HpPDfYcpt92Lq7f+Habf8EdPCf4u5tNW3/R8O3PNXFHR9Cuj6JC7d8wAKI+9APsE759UWma0InF9wlYEmYOe4NMaF48fRt+tDWi3fHN00sLq4NsOXjbwIVTjOBBiAEjMLl5N8Qlc6YQnizCJF7oSFAHc1xUJBGhmSDTe89dj2B/+jBGv9MaEIUOwbuFiHD9+DJe067SmQlpCYiKWz/sRcz/6DIsHD8XCp3phwe33Ialzd+DRZ3H+zvuQR7iyvH2R1YYesQogU4H9gX3o0/kBnM/LM1xsFavKwbpYUKhuxyz28sfVYEKlgWRqFQGXCvw5LM9r3R6IvgM5dz+AWcFReM27HQY+0g2zR41CekaGdlUVr8TkZPz01VisfHMQfv79A8h7/J+49Cd6RX6OrOaEjF2sOSgqxNg1qrhrzDi898TfcfrAIe2qqk5VClZ+RqZaZLeTLrswKByprIA0QnDWxGNZg8ueLjG9fSiH40G4yuP5uztjakAEerq2wEcv/geJe/dpV1L12hobi9UffoLl9/0NF3o8j6I/dMY5bz8Vm1WKF5O4y8UD6P0Gvnh7IBI2btaupGpUZWDlpp1FJKE6JF4kUEeo9IQqDKm0NAWT855LdXcEKadtgPJOcZF3oZdLE7zZ9a/YF1u1FWqPNv+yBuv7DEJ8lydxhfFZjnSVHAhUBmBZbj7Ak89iwmcjcHDdOu0KKl9VAlZ+RpaC6gg/aA7hSCVEacpK4DqjYHLcc0mXl9s2EOh4J5YFd0QXnmd037e1M1dvZV+7grWfjMKuLj1w9bHncE4A44CiogHLcm8DPNYDEz75HAmbquaLVulgXSwoUt3fIX96lEB2f5qHMoDlPFziubLp/RB2K1YFdcQfeY7pn36qnbVm6TJtw9cx2P/Xp3H5b08jq0VbQ6BvBhJnTcH1VE+MeLMfTh+s/Jir0sGSQH0HY6q8YqiMdgNw8f/XaIlRd6ITy//ixZe0s9VsFdE2fjQcpx/5B4rueQCZHq0q1HupbvHVNzHob91xIb/AcNJKUqWC1dnVTY3+Cjj6MwTqZa08XCk0w/SDebhyO4TgetRv8KZLMzyrj1ArSWubzuTmIPZfr+LS31/GOZkqac0A3wwozlhWAwb0Y8fjtc5dtLNVjioNrJd0UWqe6jKhSgkkMDTH4BKYSuASqEBvtSkgUq3N2rZsqXam2qtdi5ci+fF/c3TbBRmyEcMMKA6bcSri0EG83rmzdqaKV6WAFfPSy/g3L/56SBROM7hOITCpDsJl6BYNYGUIVAS1j0tTPBPAuKoOKTU7E5u/mojzX3ylFv2ZhcVR0+DKPxSPoZ0e1M5UsapwsI7s3I67edFXQjriZIdwnCIgKU7CJZ4rl79nBUeqJcmzPvxQO0vdkKwUHf0GR7izZiHTpZF5SG7Acl1csWvrZvzyw/faGStOFQ6WrFJIC4wgFAJVOE6qY3m40szCJVAZABP4LrCcbX4hqsyUGrxjxRkJVF+/3geYPZtQNVBexhwcN2Jyb/Ha7+/Fl+8MRt6Zs9qZK0YVClYPH18s8m6HLAJhAKoErtOEyl64Utn1XQsOw1wPX7Xy4eole+7c1R4pT/V6X3oqgcqlUqAymqyKwKiv8NajFbsiosLAmj1kqFqkdyU4il1gWDFUjsKVwt8REoYxDPy7enprpdcdXb5wAWPefEeDqnI8VSlj+bJZI3//fox67EntKm5cFQKWrFG/hRdXFBpt8FQqtipvtuBK6aAHGE+NbOiFHm38tNLrjgSqsW/102KqKoDKaO30KGjWEgsWL8Kpvfu1q7kxVQhYj3u2xLrWATgTFI4TgQTIAlhiluCSe4fXCNWYxt54oo5CNa5P/6qHSjNJZIK3B6LvI49qV3RjumGwVk6fpqYWLoZE4wS9zkmCZQuuEzRTuASs8yHhmMOYqqunl1Zy3ZFANb7vAA2qyo2pLJrWJWbu3ImpAwdrV+a8bhgs6QIzgiMIk14BI2DZA5fRc8k8Vw7B2tgmUAXqdU2Xzp9HzDsDge9ujqcyNUnjdEnXEcN7v6VdnfO6oZYc3u1JjHdtgcygCCTTWyU7CJe8VmbYJdiXKYW6NvoTqCb0G1SxUMm9xRtIzSS5IxC7Ee8+eGNLm50GS3Ip/IYwnNdFI4mxVTIBEq9lDi5LwbzYeXahUk5KfIJWct3QpaLzmNj/XQ2qiun+strqkK+PVGvtzf3fXstzaYIfZs5E5nHn86s6DdaAP3XBvOZ+SGU3eJxgHXMQLvFS1wjVc6zUOUOGaqXWDV0qKsKkge9VMFShuKKLwjx3d1zrPRhZ7j5mX2ePZbFdMXos3u3WQ7tix+UUWJJKSOKhi/poHGN8JGCVhyvMIlwSX2UHRmC2py96BYdppdYNXSRUkwd9QKi+Q7pLQ2SyXm50aYxAdTk0Ej81aYwzPMeUzg8Df+luWPZs5vU2jaDnsn1/otc6te+A4cIdlFNgDeryIH4k1adNoCoPl07FXSrOKgPXaYKVGhChttLXJSmoBn9YDFUW66PUhlhzjWzDjFAtJFRJ53LVec5dvYLlv+uMQtazs8lN5IY3Rn6B97o/pcp0VA63rKx/+i2BKNJH4WiQHkkc2TkGl6ELfJhlxK1crpVa+3WxsBBT3hsCzCwNVbnd1mYa2ZIZoVpkApVRP8+chdwnnkeWLBY08157LNelEeZMmODUfUSHwRrZ81lMd2uF08HhBCtM2bEO9sOVzhHkfO+2eCnyVq3E2i/Z8vbtBx9pUDUoB1UJXGxQO+Eqhsq1CY5ll4bKqNH3Pgh0edTpZc5ZHr7AnO/xIUf/jsphsG6lp8nRRSKJnieJUIk5AldRSFSd6gIVVB9+TKhmmvVUZU3BZSOroBGqxVagEqXl5mDNXZ2RK6NEZ7pEvqeQg4CR/R3PxeVQCy+OicEQl6ZI0xm8VSm4+LMluE4QrmTCdS44Ep+4eGBi79e0Emu3LhQUYOqQYcAM+6AymjXPZS9URo3u9SLQvZdhe5mZ8mxaE28UzP8Rk/oP1Eq0Tw6B9UiDZtjbLgRJHMkl0AQmI1iW4BKw5CgjwTTGZLKsuC5IQTX0UwXVWX7mDDMAWTKVUdAMXAaoIvCznVAZNS3styhkec4E8tKN4tEe+OCZ57TS7JPdrZyVkoaurKD8sCgkEpAjjsDFv2XzW/aeiyvmjRiplVh7daEgH9M+/oxQzVBQGbPaSEIScyCZs7JwGT3Vz00dg0o0acBgXO/+L+e8lpp6aIBFY8Ygec9erUTbshusca+8jG+btsSJkHAkEigByxpcSSZwJdPSGLTfXge8lSwhmjZsuAZVg5JUSZo5A1expxKoyoz+7NWEkNtRRFCc8lrNJYj/L4Y4EMTb3dLyZCyBJpHQCFimcMnPpnAVx18aXOnBERjZwBPTBg7SSqudupCXjxmffF7OU5U1h+Bqp8clDpaWNnUtN6XgiL5+mXHto885NWkqOb8uRd6Oob1f10qzLbvASkk8giekovSRiA/WI8FBuAr10bV+JKig+nSEguoMP2s6P7+lpG9i9sAlUF1knS9lTJV07sbSEclDVKbrbke+jxP3Edkd5nHQtmz0GBzetMVQoA3Z1dqT+/bFRNcWOM5uMJ4AiR22E65TtPkebTC0W3ettNqn84Rq5vBRbDkDVBmsA2OyEmfhUp6KUC1TUDnvqUw14qlngD8/4lQKJdUdzpyNYc+yDDtkF1g93H2wq12wAuewZvbAdTRQj3y6cXkS19EdO7XSapcksdmsz7/QoGpQDFVx0hIn4DJ6qoqESrR17Trs/v1fkOPd1iw81kxGh9cf7oYPuz2tlWZddoH1e4KRHR6NeI4GjWDZgku6wWPiuVixEp/VRp3PzcXskV8SqumlPFVZcwQuI1TLZUqhAqEyaljYbbgUEq0W9ZkDyKKxOyxwaYwxQ4bCnqQGNlt8/cw56Mdv4qnQcBwgKAomE7MGVwoD98nsQie8XvsmRIsI1ZxRX9uEymj2wGWEakUlQSX67PkXgAefcOo2T25THxwaOx4Lh9ND25BNsMa+/iq+a+aDI4yvDhGWg7RycBG4snDJXFcOK0mC/tO1bBGfgurL0cA0+6AymjW4MuhBLjBsWFnB3V9ZHdq7F6uj70a+E3Naklce4ybig7/bjrNsgvV3Lz9s9w9S3aCAZQ2uBLpyU7hSg8Pxu1rWDRbl5KoHihugKh9T2TLJ61UWrgx/HS6ERmClmlKo/GS0HwRG4CLP6+iclpqFf+QJvP+Q7YGYzVaXSc2MsCjsD9bhoANwJYeE4X9evhjWw/lViNVNhYTqh9HjcN3O7s+SmXquYqjcbmyeyhEN7c4A/L6HDKnCy8Bjy867NMPQ99/VSrIsq2ClHknCM6zAFH049hOq/UF2wEVLIGApjMk+dHHFknExWmk1W0XncvDDmPG4PnUa0lgnZ/kZnc0/L6ZyqWpQrXJrWmVQib4bNQrJv++CnDYBZuGxaBLAN/bCj/3fxZEd1h8OZRWsZWPZnxKO46Fh9Fh6HKDZBRf/f47xwkNsgMK8fK20mitZij1v3ARcmzpVQSWTnypdpUDiJFzp7IbO6yOwmlAdq4Luz1SZWVmYwZFhoROTpTnubZA4YhTmvm89849VsCYN6Idv3FqoLu4Au0IBy1640kIiVJrImq7Cc+cwf/xEBVUqP88ZAUozZ+ESqIp0EfhFQVV1nspU/RgvXeZ1OBxnebXF9bEx+PiVl7WSzMtqy/e//09Y3ao9QQrDrwTJXrgkcN/YpgNeruGrRAWqBTGTCdW3CioByZhd0Fm4jFCtaVb1nspUA267G7jjXnUf0BxAliyTo0kMfA/97/2zVpJ5WQWru0crNW3wK4PUvTRTuFTXaAYuASuJgfssdx/E9HlTK6nmqYBQ/ThxSjmojGDJ0VG4iqFSMdXNg0o09LXeuPbHvzh8e0dyauGBv2HAX6zneLAK1n3i+jki3MuK+5Vey164ToaE4zMXd/z4+QitpJqlguxs/DjpG1xloH7apQHBKUmwawqXI57L1FPdbKhE0z4ahvhb7kGugyND6TovE8Z+ct/RiqyC9TjBSmZl7JGuUEFlHi7TbvEgX3Oa73mN7927eq1WUs1RQRahmjwVV7/9llA1RFpgOCR15dmAELNwydEWXNUNKtHWZSuwJCAKBfRA5gCyaBwZnqfT+Ki/9Yc0WATr/IWLKpFaEofDewiMNbhMYy7xWGf0UWrGPTtNtk/WHAlUP30zjVB9Q6gk5WVJot1UJ+EyQrW2GkElSjt9GhP8g1Hk6K0dglXUyAuj+/VFfmaWVlp5WQTr9NFjeJeVG894aa+ARdtrAtceHmVuyxxcGQRLEvvXJEn399O303BFeaoGhMqYbLcELoPnKkkRbgsuI1TrbnKgbknvt/LHZYKVZQ4gS8YvTKGrD777z0s4ttfyUmWLrX9o6w58zgo+EKLHbkJjDi7xXKZwGbvFrLDoGrUMWXmqqTPoqaaW6v7S6KGchqu9DoUClTuhyq5+UIle8vDBVXaFDoFFK2jmg4WvvI49K1ZrJZWXxdbfvmQ5xjVyxT7CtJvgWILL4LlMvBZfm8oKrSn3CAuysrBo6kx6KlOoDKkrDUCVThFuD1wCVYE+Auurqacy6p8uzQAntuHnN2uFVa+/jQ1zftBKKi+Lrb9hwU/4poEb9mkea5cDcB0LDcP9NQCsAsYIi2Z8h8vs/k4SqlTZ9MEYogQsJ+BqF6Kg2lDNoRL1dGkOhEQ5DpZbK2wY8C5WMR61JIutv2bWD5jRxAO7Q8KLoZLjHitwydSDgJXIuOyBag6WBJ6S3+DyN9/iBLt8WYmhcqEKNBbhkq7RFC6BqQQuBZUuHBuk+6vmUImeaegF6G91GKw8grXpvSFYNmaCVlJ5WQHre8xo7IE9IRHYSYiM3aFNuBj0Ho8yPDewukqgWvrdbFwkVMfpqVIYE0nKyuJEuwKNnXAZn/ljhGpjDYFK9KSLJxB2G8FybDWpeKyNAz/A8rFOgLVh/k+Y3tgduwlMHL/NdsMllf6bO6vtcmQF1ey5CqpjhOpUYAQkKW8K4XAWrjQ2TH4Ng0rUzcUVCI12IsZqjV/6DMDqb6ZrJZWXxdbfyuD9mwZNCRGhYiXaC9de6RLuuEutk69ukmdSL5vzPS5O+YZQNVJQFWcYJCCOwWWIuVLbsWvQRSLW3Y1Q3Zwbys7qEWmj4EiHwSrwaIOfe72ITd/P00oqL4utf2DrdsQ0bIRdDGh3EJod7C5swiVg8bUnWemdGzTRSqoeEqhWzP0vLpmBqjRcutJwlQNLTHveT7tg5IVGYJN7sxoHlehRAYtfDjXd4ABchR6tMbvHs9i3xvKdFYtgnTyShFE88W4G4jsIzY4gPXYSmhK4Qi16rhOMN3q0aKmVdPOloOK367yCytD9lYXKAJYc7YMrld1fXmg4Yj1qJlSif3DQgg56w1Z+gcYeuPj6IrfWGNfzaZzcf1ArqbwsglV44QKGCFi6MGwnOObhKu+5dtOOtg3C64GByDh5Sivt5imPUK3873xcIFRJhOpkkPYAqQ6loTIHV+knZ5hCxe6Pnkq6v+M1FKqM1DT0dWmMqxpY9sIlr7nMGGvI44+i0MpntwiW6C2CtZfxw9ZQvRW4TD0XPRYt3rcDht9xO3YvXamVdHOUl5GBVfN+pKeagqPs/hRUgZIITgPIFlz0WmWf+SNQ5YYypqKnqqlQiXat/AXDmzRXmyoUVHbCJf+/5t4aL3ax/nRWq2C9QLAO6gWscItwxSm4TD1XGPb7B+L7e/+MuUM/1kqqeuWlZ2D1gv8VQ3UiRI9kgUagchKu06xUgWpzDe7+jPr+s88xu7kfCgiWcbNsMVz88liCSza6QheN7u15tCKrYL3q5Y+ksHBsYZy1jXBtM4FruxW4fmVQu+WxJ/Bl71e0kqpWAtWaH39C0eQpSGT3d1weyUJvY0hZ6Rhc6pk/EnOxImWf5BaPmjf6M6ev33oDG1oFIk+CdxOwiuFqT7AEsLJgtQkCejyDh92sP/PIKlhv3Hs/UsIYS7BBthIu8VymcMlI0Rxccf4ByHj5FfRs20ErqeqkoPrfQhTRUxmhUlkFBSRWmDNwneS395x4bdX91Zx5Kmv6d3i0+nznynisUnCZ8VrnfINw9sGH8frd92glmZdVsL7o9w72dQhELLuRrfRQ4rUMcIUqj7XdAly7AkNxLPoWPMtGrUoJVGt/WozCyZORoEFlTP6mEu2awqWBZQuuE+1Ywez+ttXwmKqsVMpO/S1qb6M5sMQUXGUS7eb7hWDjb+7GmLf7aCWZl1WwFnw1Hiu8WxGmMGymx9piAtd2wiXzWwLXdg2unYRrl4JLj/2eLTHs6SdxjqOPqlDe2XSsXfQzCghVPIfRxwiL6VMzzMJFcErBVQYsgSqbo7/aBlVBbi66C1iBEQZ4rJj835jFWQL3C77BGN8+GEvIhjVZBet4QiImNWiEbQIV4ZJYqzRcOnosA1w72Fcb4YojWHtb+WHpv1/AfAaJlS0F1eKlKJg0GYcJVRKvwZgi3CxcAg0rzBpcBk9FqDxrF1SiJWNj8LmLGy7x89oCS0zBxW5RwALteUKZknBUK828rIIl6s9CtgtU4rXMwlXiueTWjxGunb7tkfHxMPS5/z6tpMqRQLXuZ0JFT3VQg8o08ZstuCRNeNln/pxozwpl97ddoMqpHTGVqT56sgdWe/oycC8PkSVTABIuBNmXp9/mK95q2R5HwsOxISTUClz0XGXh4vHYb36LV+7ppJVU8colVOuXLCNUkxRUkhHniEBFkGzBpR6FJ3CxGzd9WlkyocrURWBHLQrUy0oe43dBYJHUSVZirLJ2jnbCNxA9vGw/WtkmWB/3fgXHORLcwKB8E4/m4ZLpiNJwxYVEIK6JF74bPAiJsVu10ipOuenp2ECo8gjVASNUPLfKdOMIXOz6jHAdN4WqFnoqkaSUelI8Dgc2GQRLzF648ll/C9188PXrr2qlWZZNsJZOm4XlzVtiU1AENnJ0aA2uUp6LDbWjVTucmTgFQ56quMfui8RTbVy2ArmTJmE/R38JhErSggtYjsJl7BaPd2Al68Kxo3kzJNdSTyWKeeM1zGjSEgX88stOIpXxxg645CFSV1hXg/klXjdzrlaaZdnuLKnPSPgmwrOJ8cvGEPs91/Z2wUju1AVv//VvWkk3rtyzZ7Fp+UpCNRH7+CEPEyqVPknMSbiSWGkZukjEMaaqzVCJ7mZbysI+yR8vMBnNFlzyP4RE40474iuRXa96x9sfCeERWE+INrEhNjJgtwoX4RO4drDRt7m4Yum4sdi1cKlWmvMSqGJXrkaOCVTGJCQOwcVvqylUZ/Xstpu713qoEnfEGbpB9j5GkEzNGlwqvvILRjd3H60067ILrOFvvIljDN4FrA3iuRyAa2ubdiiMmYhBXR/WSnNOAtXmlb8oqPYSqoMmUNmCS2AqC5ck3ZUc9ALVrlre/Rk1pFt3LPZorW7jWExZSbjKQiUjwkIObGY2boFJfftqpVmXXWAdjU/EnEaNsF66QoKzgY1qhCvWFC424pZgk5iLMCrP5e6N8UM+Bq5d00p0TALVllVrkD1pgoLqEM8vO65lS38psORIgOyBK5GVeJbdX12BShQl3iok0rBT2wJYYmXhkr/J+2R3e0qi9fkro+wCSzSQQfIuvQEqgWujCVybrcHFmGurZyucW7wEwx97XCvNfuWcOYutv6xD9sSJ2MUPtp8DiEMEw5iAxGG4aEdYUWn6SOypQ1DJ42a+buCB86wbtUvbAbiyafn8mzwH3F7Z/cqPX3gBp3R6rGYXp7yWDbjkpnVxtxgUjAMRt2Dky7aHqabKOXMG29YKVBMUVAdYpspwE6hTQFmFi5VhDi7xVGns/hRUtXRKwZxuYf0VcKSeKUBpZi9c0g3ObeqDsTaSrZnKbrBOnTyNOQ0b4Bc2zhp6obJwbSgDl9y0NoUr1s0duRs2Yuw/e2klWpdAtWPdBmRNmIjt9Jb7WVbJbmv74Cr7zJ/DrMgUQrVXRn91CKr/jhih8sHKdEG6TKuUgctW/nnZ1PpXgpnlwH1f+30b1b+ZDw6FR2ING3ltObgksLcM17agUPzasSPG9x2slWZZ0v3tWL8RmRMmYAeh+pWxncoTEWy6ld8xuOJZgakCFUd/J+oQVCLxVnL7xtRb2QuXrHE/7heErg3dtdLsk0NgTRs9FvHt22M1G2odwXEUro1unriyZxdGPP6EVmJ55aadxc4NmxRU2wjVXpZr3LMocJXKbkM7aAdch1g5p8Mi8Ktn3YNqQu/X8LmLBy6x/lSm5jJQGc0cXDKBeolAfkJvtyjG8uZUc3IILNFw0r9RT6gIiyW4JObaYg4u/n+LpxfWrlqFM2ZGF9L9xW3ajPQJMYSqgYLKuPPHEbhUjKXZQVbYKXqqfTJPVcegEqmRoNy+MYHIkpmDS+a8VBkOyuF3DHnyGaSFh2EVwbENFwP5MnBtbtUWGV9/hS97Pq+VaJBAtSt2C9JjYrCFH2QXX1t2z6KA5QhcpaGq+WnBHdWLkbdikaxrZ9CuAnU7zAiXeKtCequ5bi0x8rmeWon2y2Gw8i9fwVQ2/C8cHa7RESxH4eL/1/L92SdPYOFno1SZCqrNhIrdX6xLI7WXsWRzhv1wmcZc+1lBJ/WRCqoTdRCquJXLDTudZd6qTMBuyxSEErQHR6qVEHY97quMHPdx1LudH8SZyAisptdao9MruNYSnHX8vRguBtyb2MBm4SIAu2+5DbGr1uDotu34dUcczrD728SYSlZFWN0QawdcAtUJeqr9dRQqkXRfchvGUsBuzQSsXHq55Z6+GNjlQa1Ex+QUWKkZmfiBF76KDbmWXqsELh4Jj024+LdNzX2QOmY0fj0QT6gmYAOhknuLxvXzlvYsytEYb5mDa29AqILqQB2Gqhfr5QfPNijisWyiXXtMPBxCo3AX27gwJ0cr1TE5BZbo3U5dcDY6EqtCbMAVRLj493JwEaJ1Lo1xYuRIrG/QSEFVdltZ+d3W1uH6NUCH4/pwQuVR50Z/Rs0ZMhT/kO4rNMKQt4uexxG4xFvl8T2LCWb/P3XRSnVcToN1rugCvuMH+IUgCVil4dLZCRePvu2xTRfB2Mu+PYuW4NrNyhOoDnq542QdhSo1PkHlfr3GL6kxF6rKhyrQ2AlXOmGUCVHZxXP10mWtZMflNFiiD/7WHRmR4Vipea0SuBig2wMXf99KYAQw4xLn4j2L/JD2wrWLlZZEOA961V1PdfXiJUQShjR2Y5mEQ/KhOgqXeKsLrM9JTbzxWfcbW5x5Q2CJRvDDbAsLx5pynqs8XHLrxyxc9FCGWz+GzRnGPYvG9fPm4BKwxOL4GoHqUB32VCLJR7a5dQDyOXgxZBl0Dq5CguXMvFVZ3XAJMyZNQXJbXyxlYxvBKgvXeofhoudiRQhc1jzXLlbe0TCBygMnc+suVF09vTHXozUus56KMzc7CJcK2IMj1NauVdMtJ621VzeOJtW3jR9OdYxW0w/m4JKb1hvKwSXzXqXhKlkoWNpzme5Z3EWoBK4drLRExlTxdRyqJ1j3Yxq1wDVCURYqe+EyBuyxPgF4zLNi8ppVCFipWTn4nqSv09FDmYBlGy6Z9zLAJcF86VWoBriKN2eYwGWE6rC3J07V4e6vO6Ea2VBSakciRVIssY7MpQgvC5e5Z/7IZGg02/BCfoFW+o2pQsASfTVgMC++PZYGle4SbcFl2JyhswKXyc4fVsBWVsphfSQSvD3qNFRdPb0wprEXgQhXqZaMSeEk5ZIjcKkuMCQCrxAqmaqoKFUYWKI+7Tvg7C3RpUaJxXCxmzTGXObhMlkoaAYu6Ra3CFT0igJVXQ3UZfQngfpcD1/V/aUQFkOi3RK4JOmu2YcbaF2lKVwSrC/39kd3H9ubUB1RhYKVfx0Yxw+9KyKy1PyWAkuOGlzmPZfsWbTkucIQGxKCQ/RUiXXYU6UeOqymFGJbB+IC68yQvtI0i7MBLsn2bM/TyjJpWQRLyqxoVXiJ6zZvxg7PpsUz8pbgEs8lYNnjuTazG4yPjMZRf1/UrAfVVZykm5JJy9OEJjeQUBV7JyNckntewCqBy+C5LMMFXaTyfkd27tDOUnGqeFSpT557HplBHbAkKNQGXIab1gou/m5tQ6zAlX9bNPbffz+cu3tVc9WLn/05AnAlNJLdl8RRhEZ5K1OzH640ggXWt0wtxLxk/zp2R1QpYIn6RnREflQEg3lbcJl4LoFLPFdomT2LrFjZ+bOOrvtYGCvLqxnily7TzlR7JUtfJLPLHE8/XGeAbd/DDQQuw8MNSsNl8FLira6zPr9q5IUXdVHamSpelQaWqH/Lljh7azSWl5k8dRYuuf0TSw8mt4AK/dtgd6f7kXn5ina22qWXIm/Fw4QqLSAC2fJYFkJ0mmA4+uQMU7gEqgv0/j97+aGzazPtTJWjSgXrPE3yPhzr2NH8SLEYLjmah8vcnkUZKa4L1CEpnBXn7orNb7+DC4ZT1nhN7P2q8lLzm7ell4omTOGGNJbqKN2gvXCV91x5fP3ONoGGxXuVrEo/w6lzuZjED5LQMcohuAyrUM3DpdbP8zWbxYMFhyJLp8N+j2ZY9VnNfGq+aN6IESo4/9TFA+eDo5BBL3WSwJimrlSZBgmI/XAZPJeMEHMY8B/yD1WToBcLCrWzVp4qH10q4XQqZvIDHYy2MMel498IjcBVfs+ijW1l/D2WcZzMc+XrQ7DR1RX/7TcIRdq5q7tkh7IA9Z6LK84GRSAnOFIlgLOUxdlg9sOVSrBy6N2PtNeraQV5/EtVqErAEh08fgqz+cHioy15LoHL4LnWOQGXJCGJZUXv5N8LwvRYzXNNe+ppbIrdpl1B9VHi9p34qFt31eWNdGmOdHphAeoUgRKPpFJWCkAW4FIpwvk6W3DJPJd0f4f8gxVUsrWuqlRlYInEc8lGjKRbOloI6AmXAou/OwHXdsK1na/bzAqXG9fpYXT/3t4Y1cwdn7/SG4cPJmhXUvU6FZ+ACa+/pp7j2IM2z7MNCnXRSOdoTxLqSi7UZA0qo1mDS8zao/BSO+hRyFBih2+wAjg/I0u7kqpRlYIlOpmdg6/4QdNuibYwFWEdLsNNa0tw6QmX3nBvkbaNFb6NlR3P9+bSiy1s2gRv89wDuvfA/NHjkJdXeWviC/PysGRcDIb16KEevC6ZWia7tsBxaXAO808Hl2QUlOMJSVkZVDqLs7Nwyf3Cq/SAi738cQfPWxUxVVlVOVgiuX/+kY8P8qMj8LMFuAxdojW4GMjbgEtMUlbuZMNtZ4XvlliDr8/Q67DCq5V6ulk3Wq+IWzC6z1uYx+B/7+q1yDpj//x+dtoZ7F21BguGj0BMnzfxcsStqjEfokm+hIXNfZHG8+fqIg0w8TokL5cx8ZsRLslL7wxchhGjwGToFgUs2QjxZSMvdHF1066y6nVTwDLq/ahbURASgBUEwXQFanm4TLaV2QGXWj9fDFfJQkHZnLGLDRdH20OT/Yen9ZHqAU6rfPwwpYkXBhMImeWWh6ULILJTpZP2uzznWp7OLx5I1pbL3yUR/2u04S7umOXmg1jfDkgPZRDOctN4Lcd5TZKX6ygBlzRKxXm6zMClHstiBi57HssicMmM+/WQSDWj/iJBvpm6qWCJRvV8AYe93LE1LKJcUG+Ey6E9i6ZwBWvr58vAVWr9PP8nto9/P8jXHOFrkkPpXdgwGWFRSNGz0VlmAl97hA1+gtCk6aOQRcukSe7SVF0E4QxHEl8nqSklCUkCy0xU5Rl+L5dRsALhkmmJrEBeF01yWFXWbRpHdNPBEq3btAmLWCGnOkaV6xpLw1WyIkLBxb87D5f5PYuylWwvvYuYPJXfNMONMnanahs/yztAO0STFJXGfBHqyPeZpk8ywnXUDFzmsjgb4AqzCZfBU4XjSkgUFnu3U3NUR3Zu12r15qpagCXKuHoNXwYEoiA0AKsIhuky5xK4eDSFi43gCFyObiszJiOxlj7pAM00CYktuMp7LvMpwm3BJV7qLH+WydSXCFSPCl5PdaOqNmAZNeWdd7GzkQsSoyKxhJWqZuatwCWz80a4BCoFF383biszBPQl28qcgcvSVn5bcCUw7rEHrqMcxVmFS01FmIBFu0Qvtc4n0HCTemjFrfysKFU7sERJGdmY7B+A/KD2WEegJLi3BddG/n2Tqefi77LcRuCSe4s3ApcCzAxc1tInGeGy23Mx3rIIFwE1zHOFIzsoAllBkfg3gXrcs2WFrVGvaFVLsIyaP34CfmEFZkSFYxnhKp2EpPyeRYGrVLcoUBEiQ5dYsvNHxVxqGsIIl2Hnj224BCpTuHQq1rIKF99nzCpoBEtMcqOWhcvSkzMErjPipThQGO/aUnmpldOna7VUPVWtwRLJqoUZTz6D+MYNkRQepvYvrhKoOAoTuBzfs+jYhlibnovdtV1wifHnUnDxb9Y8lxxl7uuSPhoLPP3UqoTh3Sr28TGVpWoPllEn84vwY9eHkOzWBIkEbBkbVxLtSrdobVuZEa7SmzMs7Vm0F64ynssGXOpnvs8cXDIlYc5zpfJzXNR3xE/N/dQUQv9OnW8ol0JVq8aAZVRCWjqWPPIYjjZuhORwPVaxcZYHGZ6aYQkuFdSXg0u2lZX2XKYbYq3BJV7rV763IuBSXST/JhOox3lMpyfOCY3EdLdW+C2BGtTlQadTCd1M1TiwjDp98TJW9PoPdjZsgGxdMAHSYQUbVu4zigczxFyO7Vk0B1ecKVz8vyW41EjRDFxGsMzBlcjXHuXxBK8rXx+Ffe1CMMTFVWU5Htmzp1OZ9KqLaixYRl2i/TJ6HNaEhCKjpReS9YSJjSxJ4daz8TfIcppQk4WCpeCS6YjScEm8ZRUumrNwqYlU/k+6vxM8R7bcTuJ7prr5qDzqDzd0x+KYGMMHq+Gq8WCZ6sDxE9j4Rh+sb9kC59r44LgulCNABvts7LU8ytP4N9MELpnnMgsXuySbcPG11uAydosClRzFU8ltoRSeLyc8GnHtgjHRtYVa8fBH2rhXXkZWStU8lL2qVKvAMtXu/YcQO2AgNnXsiMMcUZ4L7oAjISHYRc+2gY2/ng2+MVBnCOwFNA0umYowhUugMlqpmEvg0qwYLgGKr0ugyc3nNF0EssOisdM/GLPcfdDPpYG6qd3DvRUm9+2LlMQj2tXWPtVasEwlz6Bf991cbOvTFxtvvRWb2biZfq2RGRzI+CYY8ewuxTPt4FFyQ8hW/q0cmclSm60B9GQB9HyBNB7jCOMe/l9m5PfTDvH/R4IiVNx0kh5pZ9sAzGjmg/cZK/2d55Flx3/38sOY117F+plzDBdUB1QnwDKnOHq0NTGTsaH/QKx59HGsiorCksauWEcQ4tya4XALbxxv3Qopbf1wpn07pHVoh1Pt/ZHg54u4lj5Y08wD3zdogi/5+rdoMhPe07MN+tzXCZP6v4NlYycg9UiSdra6pzoLljWlFRRif3wiYjdswYqflmDR3AX437TZ+GnaHCz9YQHWLFqKuNhtSDpyFPnnL2rvqpep6sGqV6WoHqx6VYrqwapXpagerHpViurBqlelqB6selWCgP8H0vxXZO18UWEAAAAASUVORK5CYII=" local PingStat = game:service("Stats").PerformanceStats.Ping local function GetLatency() return PingStat:GetValue() / 1000 end placeholderImage = syn.crypt.base64.decode(placeholderImage) getupvalue(getconnections(game.ReplicatedStorage.RemoteEvent.OnClientEvent)[1].Function, 1).correctposition = function() end local function map(N, OldMin, OldMax, Min, Max) return (N - OldMin) / (OldMax - OldMin) * (Max - Min) + Min end local function reverse_table(tbl) local new_tbl = {} for i = 1, #tbl do new_tbl[#tbl + 1 - i] = tbl[i] end return new_tbl end local NotifLogs = {} local CreateNotification do local notes = {} local function DrawingObject(t, col) local d = Drawing.new(t) d.Visible = true d.Transparency = 1 d.Color = col return d end local function Rectangle(sizex, sizey, fill, col) local s = DrawingObject("Square", col) s.Filled = fill s.Thickness = 1 s.Position = Vector2.new() s.Size = Vector2.new(sizex, sizey) return s end local function Text(text) local s = DrawingObject("Text", Color3.new(1, 1, 1)) s.Text = text s.Size = 13 s.Center = false s.Outline = true s.Position = Vector2.new() s.Font = 2 return s end CreateNotification = function(t, customcolor) table.insert(NotifLogs, string.format("[%s]: %s", os.date("%X"), t)) local gap = 25 local width = 18 local alpha = 255 local time = 0 local estep = 0 local eestep = 0.02 local insety = 0 local Note = { enabled = true, targetPos = Vector2.new(50, 33), size = Vector2.new(200, width), drawings = { outline = Rectangle(202, width + 2, false, Color3.new(0, 0, 0)), fade = Rectangle(202, width + 2, false, Color3.new(0, 0, 0)), }, Remove = function(self, d) if d.Position.x < d.Size.x then for k, drawing in pairs(self.drawings) do drawing:Remove() drawing = false end self.enabled = false end end, Update = function(self, num, listLength, dt) local pos = self.targetPos local indexOffset = (listLength - num) * gap if insety < indexOffset then insety -= (insety - indexOffset) * 0.2 else insety = indexOffset end local size = self.size local tpos = Vector2.new(pos.x - size.x / time - map(alpha, 0, 255, size.x, 0), pos.y + insety) self.pos = tpos local locRect = { x = math.ceil(tpos.x), y = math.ceil(tpos.y), w = math.floor(size.x - map(255 - alpha, 0, 255, 0, 70)), h = size.y, } local fade = math.min(time * 12, alpha) fade = fade > 255 and 255 or fade < 0 and 0 or fade if self.enabled then local linenum = 1 for i, drawing in pairs(self.drawings) do drawing.Transparency = fade / 255 if type(i) == "number" then drawing.Position = Vector2.new(locRect.x + 1, locRect.y + i) drawing.Size = Vector2.new(locRect.w - 2, 1) elseif i == "text" then drawing.Position = tpos + Vector2.new(6, 2) elseif i == "outline" then drawing.Position = Vector2.new(locRect.x, locRect.y) drawing.Size = Vector2.new(locRect.w, locRect.h) elseif i == "fade" then drawing.Position = Vector2.new(locRect.x - 1, locRect.y - 1) drawing.Size = Vector2.new(locRect.w + 2, locRect.h + 2) local t = (200 - fade) / 255 / 3 drawing.Transparency = t < 0.4 and 0.4 or t elseif i:find("line") then drawing.Position = Vector2.new(locRect.x + linenum, locRect.y + 1) if menu then local mencol = customcolor or (menu:GetVal("Settings", "Cheat Settings", "Menu Accent") and Color3.fromRGB(unpack(menu:GetVal("Settings", "Cheat Settings", "Menu Accent", COLOR))) or Color3.fromRGB(100, 100, 225)) local color = linenum == 1 and mencol or Color3.fromRGB(mencol.R * 255 - 40, mencol.G * 255 - 40, mencol.B * 255 - 40) if drawing.Color ~= color then drawing.Color = color end end linenum += 1 end end time += estep * dt * 128 -- TODO need to do the duration estep += eestep * dt * 64 end end, Fade = function(self, num, len, dt) if self.pos.x > self.targetPos.x - 0.2 * len or self.fading then if not self.fading then estep = 0 end self.fading = true alpha -= estep / 4 * len * dt * 50 eestep += 0.01 * dt * 100 end if alpha <= 0 then self:Remove(self.drawings[1]) end end, } for i = 1, Note.size.y - 2 do local c = 0.28 - i / 80 Note.drawings[i] = Rectangle(200, 1, true, Color3.new(c, c, c)) end local color = (menu and menu.GetVal) and customcolor or menu:GetVal("Settings", "Cheat Settings", "Menu Accent") and Color3.fromRGB(unpack(menu:GetVal("Settings", "Cheat Settings", "Menu Accent", COLOR))) or Color3.fromRGB(100, 100, 225) Note.drawings.text = Text(t) if Note.drawings.text.TextBounds.x + 7 > Note.size.x then -- expand the note size to fit if it's less than the default size Note.size = Vector2.new(Note.drawings.text.TextBounds.x + 7, Note.size.y) end Note.drawings.line = Rectangle(1, Note.size.y - 2, true, color) Note.drawings.line1 = Rectangle(1, Note.size.y - 2, true, color) notes[#notes + 1] = Note end renderStepped = game.RunService.RenderStepped:Connect(function(dt) Camera = workspace.CurrentCamera local smallest = math.huge for k = 1, #notes do local v = notes[k] if v and v.enabled then smallest = k < smallest and k or smallest else table.remove(notes, k) end end local length = #notes for k = 1, #notes do local note = notes[k] note:Update(k, length, dt) if k <= math.ceil(length / 10) or note.fading then note:Fade(k, length, dt) end end end) --ANCHOR how to create notification --CreateNotification("Loading...") end local menuWidth, menuHeight = 500, 600 menu = { -- this is for menu stuffs n shi w = menuWidth, h = menuHeight, x = 0, y = 0, columns = { width = math.floor((menuWidth - 40) / 2), left = 17, right = math.floor((menuWidth - 20) / 2) + 13, }, activetab = 1, open = true, fadestart = 0, fading = false, mousedown = false, postable = {}, options = {}, clrs = { norm = {}, dark = {}, togz = {}, }, mc = { 155, 155, 255 }, watermark = {}, connections = {}, list = {}, unloaded = false, copied_clr = nil, game = "none", tabnames = {}, -- its used to change the tab num to the string (did it like this so its dynamic if u add or remove tabs or whatever :D) friends = {}, priority = {}, muted = {}, spectating = false, stat_menu = false, load_time = 0, log_multi = nil, mgrouptabz = {}, backspaceheld = false, backspacetime = -1, backspaceflags = 0, selectall = false, modkeys = { alt = { direction = nil, }, shift = { direction = nil, }, }, modkeydown = function(self, key, direction) local keydata = self.modkeys[key] return keydata.direction and keydata.direction == direction or false end, keybinds = {}, values = {} } local function round(num, numDecimalPlaces) local mult = 10 ^ (numDecimalPlaces or 0) return math.floor(num * mult + 0.5) / mult end local function average(t) local sum = 0 for _, v in pairs(t) do -- Get the sum of all numbers in t sum = sum + v end return sum / #t end local function clamp(a, lowerNum, higher) -- DONT REMOVE this clamp is better then roblox's because it doesnt error when its not lower or heigher if a > higher then return higher elseif a < lowerNum then return lowerNum else return a end end local function CreateThread(func, ...) -- improved... yay. local thread = coroutine.create(func) coroutine.resume(thread, ...) return thread end local function MultiThreadList(obj, ...) local n = #obj if n > 0 then for i = 1, n do local t = obj[i] if type(t) == "table" then local d = #t assert(d ~= 0, "table inserted was not an array or was empty") assert(d < 3, ("invalid number of arguments (%d)"):format(d)) local thetype = type(t[1]) assert( thetype == "function", ("invalid argument #1: expected 'function', got '%s'"):format(tostring(thetype)) ) CreateThread(t[1], unpack(t[2])) else CreateThread(t, ...) end end else for i, v in pairs(obj) do CreateThread(v, ...) end end end local DeepRestoreTableFunctions, DeepCleanupTable DeepRestoreTableFunctions = function(tbl) for k, v in next, tbl do if type(v) == "function" and is_synapse_function(v) then for k1, v1 in next, getupvalues(v) do if type(v1) == "function" and islclosure(v1) and not is_synapse_function(v1) then tbl[k] = v1 end end end if type(v) == "table" then DeepRestoreTableFunctions(v) end end end DeepCleanupTable = function(tbl) local numTable = #tbl local isTableArray = numTable > 0 if isTableArray then for i = 1, numTable do local entry = tbl[i] local entryType = type(entry) if entryType == "table" then DeepCleanupTable(tbl) end tbl[i] = nil entry = nil entryType = nil end else for k, v in next, tbl do if type(v) == "table" then DeepCleanupTable(tbl) end end tbl[k] = nil end numTable = nil isTableArray = nil end local event = {} local allevent = {} function event.new(eventname, eventtable, requirename) -- fyi you can put in a table of choice to make the table you want an "event" pretty cool its like doing & in c lol! if eventname then assert( allevent[eventname] == nil, ("the event '%s' already exists in the event table"):format(eventname) ) end local newevent = eventtable or {} local funcs = {} local disconnectlist = {} function newevent:fire(...) allevent[eventname].fire(...) end function newevent:connect(func) funcs[#funcs + 1] = func local disconnected = false local function disconnect() if not disconnected then disconnected = true disconnectlist[func] = true end end return disconnect end local function fire(...) local n = #funcs local j = 0 for i = 1, n do local func = funcs[i] if disconnectlist[func] then disconnectlist[func] = nil else j = j + 1 funcs[j] = func end end for i = j + 1, n do funcs[i] = nil end for i = 1, j do CreateThread(function(...) pcall(funcs[i], ...) end, ...) end end if eventname then allevent[eventname] = { event = newevent, fire = fire, } end return newevent, fire end local function FireEvent(eventname, ...) if allevent[eventname] then return allevent[eventname].fire(...) else --warn(("Event %s does not exist!"):format(eventname)) end end local function GetEvent(eventname) return allevent[eventname] end local BBOT_IMAGES = {} MultiThreadList({ function() BBOT_IMAGES[1] = game:HttpGet("https://i.imgur.com/9NMuFcQ.png") end, function() BBOT_IMAGES[2] = game:HttpGet("https://i.imgur.com/jG3NjxN.png") end, function() BBOT_IMAGES[3] = game:HttpGet("https://i.imgur.com/2Ty4u2O.png") end, function() BBOT_IMAGES[4] = game:HttpGet("https://i.imgur.com/kNGuTlj.png") end, function() BBOT_IMAGES[5] = game:HttpGet("https://i.imgur.com/OZUR3EY.png") end, function() BBOT_IMAGES[6] = game:HttpGet("https://i.imgur.com/3HGuyVa.png") end, }) local loaded = {} do local function Loopy_Image_Checky() for i = 1, 6 do local v = BBOT_IMAGES[i] if v == nil then return true elseif not loaded[i] then loaded[i] = true end end return false end while Loopy_Image_Checky() do wait(0) end end if game.PlaceId == 292439477 or game.PlaceId == 299659045 or game.PlaceId == 5281922586 or game.PlaceId == 3568020459 then menu.game = "Phantom Forces" do local net repeat local gc = getgc(true) for i = 1, #gc do local garbage = gc[i] local garbagetype = type(garbage) if garbagetype == "table" then net = rawget(garbage, "fetch") if net then break end end end gc = nil game.RunService.RenderStepped:Wait() until net net = nil local annoyingFuckingMusic = workspace:FindFirstChild("memes") if annoyingFuckingMusic then annoyingFuckingMusic:Destroy() end end end loadstart = tick() local NETWORK = game:service("NetworkClient") local NETWORK_SETTINGS = settings().Network NETWORK:SetOutgoingKBPSLimit(0) setfpscap(getgenv().maxfps or 144) if not isfolder("bitchbot") then makefolder("bitchbot") end do -- Files if not isfile("bitchbot/relations.bb") then writefile("bitchbot/relations.bb", "friends:\npriority:") end if not isfile("bitchbot/chatspam.bb") then writefile("bitchbot/chatspam.bb", [[BEACH BOAT ON TOP BBOT NEW UPDATE 2058 ةشساشممشا ؤقهحلاخف خهى فخح غثشا ةغ لاقخ beach boat does not miss]]) end if not isfile("bitchbot/killsay.bb") then writefile("bitchbot/killsay.bb", [[Imagine Dying To Me [name] So bad [name] [name] how is your [hitbox] feeling? sucks to suck [name] [name] how do you die to a [weapon], so bad [name] get better]]) end if not isfolder("bitchbot/" .. menu.game) then makefolder("bitchbot/" .. menu.game) end if not isfile("bitchbot/" .. menu.game .. "/Default.bb") then writefile("bitchbot/" .. menu.game .. "/Default.bb", "") end end do local customtxt = readfile("bitchbot/chatspam.bb") for s in customtxt:gmatch("[^\n]+") do table.insert(customChatSpam, s) end customtxt = readfile("bitchbot/killsay.bb") for s in customtxt:gmatch("[^\n]+") do table.insert(customKillSay, s) end end local configs = {} local function GetConfigs() local result = {} local directory = "bitchbot\\" .. menu.game for k, v in pairs(listfiles(directory)) do local clipped = v:sub(#directory + 2) if clipped:sub(#clipped - 2) == ".bb" then clipped = clipped:sub(0, #clipped - 3) result[k] = clipped configs[k] = v end end if #result <= 0 then writefile("bitchbot/" .. menu.game .. "/Default.bb", "") end return result end local PathfindingService = game:GetService("PathfindingService") local Players = game:GetService("Players") local LIGHTING = game:GetService("Lighting") local stats = game:GetService("Stats") local function UnpackRelations() local str = isfile("bitchbot/relations.bb") and readfile("bitchbot/relations.bb") or nil local final = { friends = {}, priority = {}, } if str then if str:find("bb:{{") then writefile("bitchbot/relations.bb", "friends:\npriority:") return end local friends, frend = str:find("friends:") local priority, priend = str:find("\npriority:") local friendslist = str:sub(frend + 1, priority - 1) local prioritylist = str:sub(priend + 1) for i in friendslist:gmatch("[^,]+") do if not table.find(final.friends, i) then table.insert(final.friends, i) end end for i in prioritylist:gmatch("[^,]+") do if not table.find(final.priority, i) then table.insert(final.priority, i) end end end if not menu then repeat game.RunService.Heartbeat:Wait() until menu end menu.friends = final.friends if not table.find(menu.friends, Players.LocalPlayer.Name) then table.insert(menu.friends, Players.LocalPlayer.Name) end menu.priority = final.priority end local function WriteRelations() local str = "friends:" for k, v in next, menu.friends do local playerobj local userid local pass, ret = pcall(function() playerobj = Players[v] end) if not pass then local newpass, newret = pcall(function() userid = v end) end if userid then str ..= tostring(userid) .. "," else str ..= tostring(playerobj.Name) .. "," end end str ..= "\npriority:" for k, v in next, menu.priority do local playerobj local userid local pass, ret = pcall(function() playerobj = Players[v] end) if not pass then local newpass, newret = pcall(function() userid = v end) end if userid then str ..= tostring(userid) .. "," else str ..= tostring(playerobj.Name) .. "," end end writefile("bitchbot/relations.bb", str) end CreateThread(function() if (not menu or not menu.GetVal) then repeat game.RunService.Heartbeat:Wait() until (menu and menu.GetVal) end wait(2) UnpackRelations() WriteRelations() end) local LOCAL_PLAYER = Players.LocalPlayer local LOCAL_MOUSE = LOCAL_PLAYER:GetMouse() local TEAMS = game:GetService("Teams") local INPUT_SERVICE = game:GetService("UserInputService") local TELEPORT_SERVICE = game:GetService("TeleportService") local GAME_SETTINGS = UserSettings():GetService("UserGameSettings") local CACHED_VEC3 = Vector3.new() local Camera = workspace.CurrentCamera local SCREEN_SIZE = Camera.ViewportSize local ButtonPressed = event.new("bb_buttonpressed") local TogglePressed = event.new("bb_togglepressed") local MouseMoved = event.new("bb_mousemoved") --local PATHFINDING = game:GetService("PathfindingService") local GRAVITY = Vector3.new(0, -192.6, 0) menu.x = math.floor((SCREEN_SIZE.x / 2) - (menu.w / 2)) menu.y = math.floor((SCREEN_SIZE.y / 2) - (menu.h / 2)) local Lerp = function(delta, from, to) -- wtf why were these globals thats so exploitable! if (delta > 1) then return to end if (delta < 0) then return from end return from + (to - from) * delta end local ColorRange = function(value, ranges) -- ty tony for dis function u a homie if value <= ranges[1].start then return ranges[1].color end if value >= ranges[#ranges].start then return ranges[#ranges].color end local selected = #ranges for i = 1, #ranges - 1 do if value < ranges[i + 1].start then selected = i break end end local minColor = ranges[selected] local maxColor = ranges[selected + 1] local lerpValue = (value - minColor.start) / (maxColor.start - minColor.start) return Color3.new( Lerp(lerpValue, minColor.color.r, maxColor.color.r), Lerp(lerpValue, minColor.color.g, maxColor.color.g), Lerp(lerpValue, minColor.color.b, maxColor.color.b) ) end local bVector2 = {} do -- vector functions function bVector2:getRotate(Vec, Rads) local vec = Vec.Unit --x2 = cos β x1 − sin β y1 --y2 = sin β x1 + cos β y1 local sin = math.sin(Rads) local cos = math.cos(Rads) local x = (cos * vec.x) - (sin * vec.y) local y = (sin * vec.x) + (cos * vec.y) return Vector2.new(x, y).Unit * Vec.Magnitude end end local bColor = {} do -- color functions function bColor:Mult(col, mult) return Color3.new(col.R * mult, col.G * mult, col.B * mult) end function bColor:Add(col, num) return Color3.new(col.R + num, col.G + num, col.B + num) end end local function string_cut(s1, num) return num == 0 and s1 or string.sub(s1, 1, num) end local textBoxLetters = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", } local keyNames = { One = "1", Two = "2", Three = "3", Four = "4", Five = "5", Six = "6", Seven = "7", Eight = "8", Nine = "9", Zero = "0", LeftBracket = "[", RightBracket = "]", Semicolon = ";", BackSlash = "\\", Slash = "/", Minus = "-", Equals = "=", Return = "Enter", Backquote = "`", CapsLock = "Caps", LeftShift = "LShift", RightShift = "RShift", LeftControl = "LCtrl", RightControl = "RCtrl", LeftAlt = "LAlt", RightAlt = "RAlt", Backspace = "Back", Plus = "+", Multiplaye = "x", PageUp = "PgUp", PageDown = "PgDown", Delete = "Del", Insert = "Ins", NumLock = "NumL", Comma = ",", Period = ".", } local colemak = { E = "F", R = "P", T = "G", Y = "J", U = "L", I = "U", O = "Y", P = ";", S = "R", D = "S", F = "T", G = "D", J = "N", K = "E", L = "I", [";"] = "O", N = "K", } local keymodifiernames = { ["`"] = "~", ["1"] = "!", ["2"] = "@", ["3"] = "#", ["4"] = "$", ["5"] = "%", ["6"] = "^", ["7"] = "&", ["8"] = "*", ["9"] = "(", ["0"] = ")", ["-"] = "_", ["="] = "+", ["["] = "{", ["]"] = "}", ["\\"] = "|", [";"] = ":", ["'"] = '"', [","] = "<", ["."] = ".", ["/"] = "?", } local function KeyEnumToName(key) -- did this all in a function cuz why not if key == nil then return "None" end local _key = tostring(key) .. "." local _key = _key:gsub("%.", ",") local keyname = nil local looptime = 0 for w in _key:gmatch("(.-),") do looptime = looptime + 1 if looptime == 3 then keyname = w end end if string.match(keyname, "Keypad") then keyname = string.gsub(keyname, "Keypad", "") end if keyname == "Unknown" or key.Value == 27 then return "None" end if keyNames[keyname] then keyname = keyNames[keyname] end return keyname end local invalidfilekeys = { ["\\"] = true, ["/"] = true, [":"] = true, ["*"] = true, ["?"] = true, ['"'] = true, ["<"] = true, [">"] = true, ["|"] = true, } local function KeyModifierToName(key, filename) if keymodifiernames[key] ~= nil then if filename then if invalidfilekeys[keymodifiernames[key]] then return "" else return keymodifiernames[key] end else return keymodifiernames[key] end else return "" end end local allrender = {} local RGB = Color3.fromRGB local Draw = {} do function Draw:UnRender() for k, v in pairs(allrender) do for k1, v1 in pairs(v) do --warn(k1, v1) -- ANCHOR WHAT THE FUCK IS GOING ON WITH THIS WHY IS THIS ERRORING BECAUSE OF NUMBER if v1 and type(v1) ~= "number" and v1.__OBJECT_EXISTS then v1:Remove() else --rconsolewarn(tostring(k),tostring(v),tostring(k1),tostring(v1)) end end end end function Draw:OutlinedRect(visible, pos_x, pos_y, width, height, clr, tablename) local temptable = Drawing.new("Square") temptable.Visible = visible temptable.Position = Vector2.new(pos_x, pos_y) temptable.Size = Vector2.new(width, height) temptable.Color = RGB(clr[1], clr[2], clr[3]) temptable.Filled = false temptable.Thickness = 0 temptable.Transparency = clr[4] / 255 table.insert(tablename, temptable) if not table.find(allrender, tablename) then table.insert(allrender, tablename) end end function Draw:FilledRect(visible, pos_x, pos_y, width, height, clr, tablename) local temptable = Drawing.new("Square") temptable.Visible = visible temptable.Position = Vector2.new(pos_x, pos_y) temptable.Size = Vector2.new(width, height) temptable.Color = RGB(clr[1], clr[2], clr[3]) temptable.Filled = true temptable.Thickness = 0 temptable.Transparency = clr[4] / 255 table.insert(tablename, temptable) if not table.find(allrender, tablename) then table.insert(allrender, tablename) end end function Draw:Line(visible, thickness, start_x, start_y, end_x, end_y, clr, tablename) temptable = Drawing.new("Line") temptable.Visible = visible temptable.Thickness = thickness temptable.From = Vector2.new(start_x, start_y) temptable.To = Vector2.new(end_x, end_y) temptable.Color = RGB(clr[1], clr[2], clr[3]) temptable.Transparency = clr[4] / 255 table.insert(tablename, temptable) if not table.find(allrender, tablename) then table.insert(allrender, tablename) end end function Draw:Image(visible, imagedata, pos_x, pos_y, width, height, transparency, tablename) local temptable = Drawing.new("Image") temptable.Visible = visible temptable.Position = Vector2.new(pos_x, pos_y) temptable.Size = Vector2.new(width, height) temptable.Transparency = transparency temptable.Data = imagedata or placeholderImage table.insert(tablename, temptable) if not table.find(allrender, tablename) then table.insert(allrender, tablename) end end function Draw:Text(text, font, visible, pos_x, pos_y, size, centered, clr, tablename) local temptable = Drawing.new("Text") temptable.Text = text temptable.Visible = visible temptable.Position = Vector2.new(pos_x, pos_y) temptable.Size = size temptable.Center = centered temptable.Color = RGB(clr[1], clr[2], clr[3]) temptable.Transparency = clr[4] / 255 temptable.Outline = false temptable.Font = font table.insert(tablename, temptable) if not table.find(allrender, tablename) then table.insert(allrender, tablename) end end function Draw:OutlinedText(text, font, visible, pos_x, pos_y, size, centered, clr, clr2, tablename) local temptable = Drawing.new("Text") temptable.Text = text temptable.Visible = visible temptable.Position = Vector2.new(pos_x, pos_y) temptable.Size = size temptable.Center = centered temptable.Color = RGB(clr[1], clr[2], clr[3]) temptable.Transparency = clr[4] / 255 temptable.Outline = true temptable.OutlineColor = RGB(clr2[1], clr2[2], clr2[3]) temptable.Font = font if not table.find(allrender, tablename) then table.insert(allrender, tablename) end if tablename then table.insert(tablename, temptable) end return temptable end function Draw:Triangle(visible, filled, pa, pb, pc, clr, tablename) clr = clr or { 255, 255, 255, 1 } local temptable = Drawing.new("Triangle") temptable.Visible = visible temptable.Transparency = clr[4] or 1 temptable.Color = RGB(clr[1], clr[2], clr[3]) temptable.Thickness = 2.1 if pa and pb and pc then temptable.PointA = Vector2.new(pa[1], pa[2]) temptable.PointB = Vector2.new(pb[1], pb[2]) temptable.PointC = Vector2.new(pc[1], pc[2]) end temptable.Filled = filled table.insert(tablename, temptable) if tablename and not table.find(allrender, tablename) then table.insert(allrender, tablename) end end function Draw:Circle(visible, pos_x, pos_y, size, thickness, sides, clr, tablename) local temptable = Drawing.new("Circle") temptable.Position = Vector2.new(pos_x, pos_y) temptable.Visible = visible temptable.Radius = size temptable.Thickness = thickness temptable.NumSides = sides temptable.Transparency = clr[4] temptable.Filled = false temptable.Color = RGB(clr[1], clr[2], clr[3]) table.insert(tablename, temptable) if not table.find(allrender, tablename) then table.insert(allrender, tablename) end end function Draw:FilledCircle(visible, pos_x, pos_y, size, thickness, sides, clr, tablename) local temptable = Drawing.new("Circle") temptable.Position = Vector2.new(pos_x, pos_y) temptable.Visible = visible temptable.Radius = size temptable.Thickness = thickness temptable.NumSides = sides temptable.Transparency = clr[4] temptable.Filled = true temptable.Color = RGB(clr[1], clr[2], clr[3]) table.insert(tablename, temptable) if not table.find(allrender, tablename) then table.insert(allrender, tablename) end end --ANCHOR MENU ELEMENTS function Draw:MenuOutlinedRect(visible, pos_x, pos_y, width, height, clr, tablename) Draw:OutlinedRect(visible, pos_x + menu.x, pos_y + menu.y, width, height, clr, tablename) table.insert(menu.postable, { tablename[#tablename], pos_x, pos_y }) if menu.log_multi ~= nil then table.insert(menu.mgrouptabz[menu.log_multi[1]][menu.log_multi[2]], tablename[#tablename]) end end function Draw:MenuFilledRect(visible, pos_x, pos_y, width, height, clr, tablename) Draw:FilledRect(visible, pos_x + menu.x, pos_y + menu.y, width, height, clr, tablename) table.insert(menu.postable, { tablename[#tablename], pos_x, pos_y }) if menu.log_multi ~= nil then table.insert(menu.mgrouptabz[menu.log_multi[1]][menu.log_multi[2]], tablename[#tablename]) end end function Draw:MenuImage(visible, imagedata, pos_x, pos_y, width, height, transparency, tablename) Draw:Image(visible, imagedata, pos_x + menu.x, pos_y + menu.y, width, height, transparency, tablename) table.insert(menu.postable, { tablename[#tablename], pos_x, pos_y }) if menu.log_multi ~= nil then table.insert(menu.mgrouptabz[menu.log_multi[1]][menu.log_multi[2]], tablename[#tablename]) end end function Draw:MenuBigText(text, visible, centered, pos_x, pos_y, tablename) local text = Draw:OutlinedText( text, 2, visible, pos_x + menu.x, pos_y + menu.y, 13, centered, { 255, 255, 255, 255 }, { 0, 0, 0 }, tablename ) table.insert(menu.postable, { tablename[#tablename], pos_x, pos_y }) if menu.log_multi ~= nil then table.insert(menu.mgrouptabz[menu.log_multi[1]][menu.log_multi[2]], tablename[#tablename]) end return text end function Draw:CoolBox(name, x, y, width, height, tab) Draw:MenuOutlinedRect(true, x, y, width, height, { 0, 0, 0, 255 }, tab) Draw:MenuOutlinedRect(true, x + 1, y + 1, width - 2, height - 2, { 20, 20, 20, 255 }, tab) Draw:MenuOutlinedRect(true, x + 2, y + 2, width - 3, 1, { 155, 155, 255, 255 }, tab) table.insert(menu.clrs.norm, tab[#tab]) Draw:MenuOutlinedRect(true, x + 2, y + 3, width - 3, 1, { 87, 32, 123, 255 }, tab) table.insert(menu.clrs.dark, tab[#tab]) Draw:MenuOutlinedRect(true, x + 2, y + 4, width - 3, 1, { 20, 20, 20, 255 }, tab) for i = 0, 7 do Draw:MenuFilledRect(true, x + 2, y + 5 + (i * 2), width - 4, 2, { 45, 45, 45, 255 }, tab) tab[#tab].Color = ColorRange( i, { [1] = { start = 0, color = RGB(45, 45, 45) }, [2] = { start = 7, color = RGB(35, 35, 35) } } ) end Draw:MenuBigText(name, true, false, x + 6, y + 5, tab) end function Draw:CoolMultiBox(names, x, y, width, height, tab) Draw:MenuOutlinedRect(true, x, y, width, height, { 0, 0, 0, 255 }, tab) Draw:MenuOutlinedRect(true, x + 1, y + 1, width - 2, height - 2, { 20, 20, 20, 255 }, tab) Draw:MenuOutlinedRect(true, x + 2, y + 2, width - 3, 1, { 155, 155, 255, 255 }, tab) table.insert(menu.clrs.norm, tab[#tab]) Draw:MenuOutlinedRect(true, x + 2, y + 3, width - 3, 1, { 87, 32, 123, 255 }, tab) table.insert(menu.clrs.dark, tab[#tab]) Draw:MenuOutlinedRect(true, x + 2, y + 4, width - 3, 1, { 20, 20, 20, 255 }, tab) --{35, 35, 35, 255} Draw:MenuFilledRect(true, x + 2, y + 5, width - 4, 18, { 30, 30, 30, 255 }, tab) Draw:MenuFilledRect(true, x + 2, y + 21, width - 4, 2, { 20, 20, 20, 255 }, tab) local selected = {} for i = 0, 8 do Draw:MenuFilledRect(true, x + 2, y + 5 + (i * 2), width - 159, 2, { 45, 45, 45, 255 }, tab) tab[#tab].Color = ColorRange( i, { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 8, color = RGB(35, 35, 35) } } ) table.insert(selected, { postable = #menu.postable, drawn = tab[#tab] }) end local length = 2 local selected_pos = {} local click_pos = {} local nametext = {} for i, v in ipairs(names) do Draw:MenuBigText(v, true, false, x + 4 + length, y + 5, tab) if i == 1 then tab[#tab].Color = RGB(255, 255, 255) else tab[#tab].Color = RGB(170, 170, 170) end table.insert(nametext, tab[#tab]) Draw:MenuFilledRect(true, x + length + tab[#tab].TextBounds.X + 8, y + 5, 2, 16, { 20, 20, 20, 255 }, tab) table.insert(selected_pos, { pos = x + length, length = tab[#tab - 1].TextBounds.X + 8 }) table.insert(click_pos, { x = x + length, y = y + 5, width = tab[#tab - 1].TextBounds.X + 8, height = 18, name = v, num = i, }) length += tab[#tab - 1].TextBounds.X + 10 end local settab = 1 for k, v in pairs(selected) do menu.postable[v.postable][2] = selected_pos[settab].pos v.drawn.Size = Vector2.new(selected_pos[settab].length, 2) end return { bar = selected, barpos = selected_pos, click_pos = click_pos, nametext = nametext } --Draw:MenuBigText(str, true, false, x + 6, y + 5, tab) end function Draw:Toggle(name, value, unsafe, x, y, tab) Draw:MenuOutlinedRect(true, x, y, 12, 12, { 30, 30, 30, 255 }, tab) Draw:MenuOutlinedRect(true, x + 1, y + 1, 10, 10, { 0, 0, 0, 255 }, tab) local temptable = {} for i = 0, 3 do Draw:MenuFilledRect(true, x + 2, y + 2 + (i * 2), 8, 2, { 0, 0, 0, 255 }, tab) table.insert(temptable, tab[#tab]) if value then tab[#tab].Color = ColorRange(i, { [1] = { start = 0, color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) }, [2] = { start = 3, color = RGB(menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40) }, }) else tab[#tab].Color = ColorRange(i, { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 3, color = RGB(30, 30, 30) }, }) end end Draw:MenuBigText(name, true, false, x + 16, y - 1, tab) if unsafe == true then tab[#tab].Color = RGB(245, 239, 120) end table.insert(temptable, tab[#tab]) return temptable end function Draw:Keybind(key, x, y, tab) local temptable = {} Draw:MenuFilledRect(true, x, y, 44, 16, { 25, 25, 25, 255 }, tab) Draw:MenuBigText(KeyEnumToName(key), true, true, x + 22, y + 1, tab) table.insert(temptable, tab[#tab]) Draw:MenuOutlinedRect(true, x, y, 44, 16, { 30, 30, 30, 255 }, tab) table.insert(temptable, tab[#tab]) Draw:MenuOutlinedRect(true, x + 1, y + 1, 42, 14, { 0, 0, 0, 255 }, tab) return temptable end function Draw:ColorPicker(color, x, y, tab) local temptable = {} Draw:MenuOutlinedRect(true, x, y, 28, 14, { 30, 30, 30, 255 }, tab) Draw:MenuOutlinedRect(true, x + 1, y + 1, 26, 12, { 0, 0, 0, 255 }, tab) Draw:MenuFilledRect(true, x + 2, y + 2, 24, 10, { color[1], color[2], color[3], 255 }, tab) table.insert(temptable, tab[#tab]) Draw:MenuOutlinedRect(true, x + 2, y + 2, 24, 10, { color[1] - 40, color[2] - 40, color[3] - 40, 255 }, tab) table.insert(temptable, tab[#tab]) Draw:MenuOutlinedRect(true, x + 3, y + 3, 22, 8, { color[1] - 40, color[2] - 40, color[3] - 40, 255 }, tab) table.insert(temptable, tab[#tab]) return temptable end function Draw:Slider(name, stradd, value, minvalue, maxvalue, customvals, rounded, x, y, length, tab) Draw:MenuBigText(name, true, false, x, y - 3, tab) for i = 0, 3 do Draw:MenuFilledRect(true, x + 2, y + 14 + (i * 2), length - 4, 2, { 0, 0, 0, 255 }, tab) tab[#tab].Color = ColorRange( i, { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 3, color = RGB(30, 30, 30) } } ) end local temptable = {} for i = 0, 3 do Draw:MenuFilledRect( true, x + 2, y + 14 + (i * 2), (length - 4) * ((value - minvalue) / (maxvalue - minvalue)), 2, { 0, 0, 0, 255 }, tab ) table.insert(temptable, tab[#tab]) tab[#tab].Color = ColorRange(i, { [1] = { start = 0, color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) }, [2] = { start = 3, color = RGB(menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40) }, }) end Draw:MenuOutlinedRect(true, x, y + 12, length, 12, { 30, 30, 30, 255 }, tab) Draw:MenuOutlinedRect(true, x + 1, y + 13, length - 2, 10, { 0, 0, 0, 255 }, tab) local textstr = "" if stradd == nil then stradd = "" end local decplaces = rounded and string.rep("0", math.log(1 / rounded) / math.log(10)) or 1 if rounded and value == math.floor(value * decplaces) then textstr = tostring(value) .. "." .. decplaces .. stradd else textstr = tostring(value) .. stradd end Draw:MenuBigText(customvals[value] or textstr, true, true, x + (length * 0.5), y + 11, tab) table.insert(temptable, tab[#tab]) table.insert(temptable, stradd) return temptable end function Draw:Dropbox(name, value, values, x, y, length, tab) local temptable = {} Draw:MenuBigText(name, true, false, x, y - 3, tab) for i = 0, 7 do Draw:MenuFilledRect(true, x + 2, y + 14 + (i * 2), length - 4, 2, { 0, 0, 0, 255 }, tab) tab[#tab].Color = ColorRange( i, { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 7, color = RGB(35, 35, 35) } } ) end Draw:MenuOutlinedRect(true, x, y + 12, length, 22, { 30, 30, 30, 255 }, tab) Draw:MenuOutlinedRect(true, x + 1, y + 13, length - 2, 20, { 0, 0, 0, 255 }, tab) Draw:MenuBigText(tostring(values[value]), true, false, x + 6, y + 16, tab) table.insert(temptable, tab[#tab]) Draw:MenuBigText("-", true, false, x - 17 + length, y + 16, tab) table.insert(temptable, tab[#tab]) return temptable end function Draw:Combobox(name, values, x, y, length, tab) local temptable = {} Draw:MenuBigText(name, true, false, x, y - 3, tab) for i = 0, 7 do Draw:MenuFilledRect(true, x + 2, y + 14 + (i * 2), length - 4, 2, { 0, 0, 0, 255 }, tab) tab[#tab].Color = ColorRange( i, { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 7, color = RGB(35, 35, 35) } } ) end Draw:MenuOutlinedRect(true, x, y + 12, length, 22, { 30, 30, 30, 255 }, tab) Draw:MenuOutlinedRect(true, x + 1, y + 13, length - 2, 20, { 0, 0, 0, 255 }, tab) local textthing = "" for k, v in pairs(values) do if v[2] then if textthing == "" then textthing = v[1] else textthing ..= ", " .. v[1] end end end textthing = string_cut(textthing, 25) textthing = textthing ~= "" and textthing or "None" Draw:MenuBigText(textthing, true, false, x + 6, y + 16, tab) table.insert(temptable, tab[#tab]) Draw:MenuBigText("...", true, false, x - 27 + length, y + 16, tab) table.insert(temptable, tab[#tab]) return temptable end function Draw:Button(name, x, y, length, tab) local temptable = {} for i = 0, 8 do Draw:MenuFilledRect(true, x + 2, y + 2 + (i * 2), length - 4, 2, { 0, 0, 0, 255 }, tab) tab[#tab].Color = ColorRange( i, { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 8, color = RGB(35, 35, 35) } } ) table.insert(temptable, tab[#tab]) end Draw:MenuOutlinedRect(true, x, y, length, 22, { 30, 30, 30, 255 }, tab) Draw:MenuOutlinedRect(true, x + 1, y + 1, length - 2, 20, { 0, 0, 0, 255 }, tab) temptable.text = Draw:MenuBigText(name, true, true, x + math.floor(length * 0.5), y + 4, tab) return temptable end function Draw:List(name, x, y, length, maxamount, columns, tab) local temptable = { uparrow = {}, downarrow = {}, liststuff = { rows = {}, words = {} } } for i, v in ipairs(name) do Draw:MenuBigText( v, true, false, (math.floor(length / columns) * i) - math.floor(length / columns) + 30, y - 3, tab ) end Draw:MenuOutlinedRect(true, x, y + 12, length, 22 * maxamount + 4, { 30, 30, 30, 255 }, tab) Draw:MenuOutlinedRect(true, x + 1, y + 13, length - 2, 22 * maxamount + 2, { 0, 0, 0, 255 }, tab) Draw:MenuFilledRect(true, x + length - 7, y + 16, 1, 1, { menu.mc[1], menu.mc[2], menu.mc[3], 255 }, tab) table.insert(temptable.uparrow, tab[#tab]) table.insert(menu.clrs.norm, tab[#tab]) Draw:MenuFilledRect(true, x + length - 8, y + 17, 3, 1, { menu.mc[1], menu.mc[2], menu.mc[3], 255 }, tab) table.insert(temptable.uparrow, tab[#tab]) table.insert(menu.clrs.norm, tab[#tab]) Draw:MenuFilledRect(true, x + length - 9, y + 18, 5, 1, { menu.mc[1], menu.mc[2], menu.mc[3], 255 }, tab) table.insert(temptable.uparrow, tab[#tab]) table.insert(menu.clrs.norm, tab[#tab]) Draw:MenuFilledRect( true, x + length - 7, y + 16 + (22 * maxamount + 4) - 9, 1, 1, { menu.mc[1], menu.mc[2], menu.mc[3], 255 }, tab ) table.insert(temptable.downarrow, tab[#tab]) table.insert(menu.clrs.norm, tab[#tab]) Draw:MenuFilledRect( true, x + length - 8, y + 16 + (22 * maxamount + 4) - 10, 3, 1, { menu.mc[1], menu.mc[2], menu.mc[3], 255 }, tab ) table.insert(temptable.downarrow, tab[#tab]) table.insert(menu.clrs.norm, tab[#tab]) Draw:MenuFilledRect( true, x + length - 9, y + 16 + (22 * maxamount + 4) - 11, 5, 1, { menu.mc[1], menu.mc[2], menu.mc[3], 255 }, tab ) table.insert(temptable.downarrow, tab[#tab]) table.insert(menu.clrs.norm, tab[#tab]) for i = 1, maxamount do temptable.liststuff.rows[i] = {} if i ~= maxamount then Draw:MenuOutlinedRect(true, x + 4, (y + 13) + (22 * i), length - 8, 2, { 20, 20, 20, 255 }, tab) table.insert(temptable.liststuff.rows[i], tab[#tab]) end if columns ~= nil then for i1 = 1, columns - 1 do Draw:MenuOutlinedRect( true, x + math.floor(length / columns) * i1, (y + 13) + (22 * i) - 18, 2, 16, { 20, 20, 20, 255 }, tab ) table.insert(temptable.liststuff.rows[i], tab[#tab]) end end temptable.liststuff.words[i] = {} if columns ~= nil then for i1 = 1, columns do Draw:MenuBigText( "", true, false, (x + math.floor(length / columns) * i1) - math.floor(length / columns) + 5, (y + 13) + (22 * i) - 16, tab ) table.insert(temptable.liststuff.words[i], tab[#tab]) end else Draw:MenuBigText("", true, false, x + 5, (y + 13) + (22 * i) - 16, tab) table.insert(temptable.liststuff.words[i], tab[#tab]) end end return temptable end function Draw:ImageWithText(size, image, text, x, y, tab) local temptable = {} Draw:MenuOutlinedRect(true, x, y, size + 4, size + 4, { 30, 30, 30, 255 }, tab) Draw:MenuOutlinedRect(true, x + 1, y + 1, size + 2, size + 2, { 0, 0, 0, 255 }, tab) Draw:MenuFilledRect(true, x + 2, y + 2, size, size, { 40, 40, 40, 255 }, tab) Draw:MenuBigText(text, true, false, x + size + 8, y, tab) table.insert(temptable, tab[#tab]) Draw:MenuImage(true, BBOT_IMAGES[5], x + 2, y + 2, size, size, 1, tab) table.insert(temptable, tab[#tab]) return temptable end function Draw:TextBox(name, text, x, y, length, tab) for i = 0, 8 do Draw:MenuFilledRect(true, x + 2, y + 2 + (i * 2), length - 4, 2, { 0, 0, 0, 255 }, tab) tab[#tab].Color = ColorRange( i, { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 8, color = RGB(35, 35, 35) } } ) end Draw:MenuOutlinedRect(true, x, y, length, 22, { 30, 30, 30, 255 }, tab) Draw:MenuOutlinedRect(true, x + 1, y + 1, length - 2, 20, { 0, 0, 0, 255 }, tab) Draw:MenuBigText(text, true, false, x + 6, y + 4, tab) return tab[#tab] end end --funny graf local networkin = { incoming = {}, outgoing = {}, } for i = 1, 21 do networkin.incoming[i] = 20 networkin.outgoing[i] = 2 end local lasttick = tick() local infopos = 400 local graphs = { incoming = { pos = { x = 35, y = infopos, }, sides = {}, graph = {}, }, outgoing = { pos = { x = 35, y = infopos + 97, }, sides = {}, graph = {}, }, other = {}, } --- incoming Draw:OutlinedText( "incoming kbps: 20", 2, false, graphs.incoming.pos.x - 1, graphs.incoming.pos.y - 15, 13, false, { 255, 255, 255, 255 }, { 10, 10, 10 }, graphs.incoming.sides ) Draw:OutlinedText( "80", 2, false, graphs.incoming.pos.x - 21, graphs.incoming.pos.y - 7, 13, false, { 255, 255, 255, 255 }, { 10, 10, 10 }, graphs.incoming.sides ) Draw:FilledRect( false, graphs.incoming.pos.x - 1, graphs.incoming.pos.y - 1, 222, 82, { 10, 10, 10, 50 }, graphs.incoming.sides ) Draw:Line( false, 3, graphs.incoming.pos.x, graphs.incoming.pos.y - 1, graphs.incoming.pos.x, graphs.incoming.pos.y + 82, { 20, 20, 20, 225 }, graphs.incoming.sides ) Draw:Line( false, 3, graphs.incoming.pos.x, graphs.incoming.pos.y + 80, graphs.incoming.pos.x + 221, graphs.incoming.pos.y + 80, { 20, 20, 20, 225 }, graphs.incoming.sides ) Draw:Line( false, 3, graphs.incoming.pos.x, graphs.incoming.pos.y, graphs.incoming.pos.x - 6, graphs.incoming.pos.y, { 20, 20, 20, 225 }, graphs.incoming.sides ) Draw:Line( false, 1, graphs.incoming.pos.x, graphs.incoming.pos.y, graphs.incoming.pos.x, graphs.incoming.pos.y + 80, { 255, 255, 255, 225 }, graphs.incoming.sides ) Draw:Line( false, 1, graphs.incoming.pos.x, graphs.incoming.pos.y + 80, graphs.incoming.pos.x + 220, graphs.incoming.pos.y + 80, { 255, 255, 255, 225 }, graphs.incoming.sides ) Draw:Line( false, 1, graphs.incoming.pos.x, graphs.incoming.pos.y, graphs.incoming.pos.x - 5, graphs.incoming.pos.y, { 255, 255, 255, 225 }, graphs.incoming.sides ) for i = 1, 20 do Draw:Line(false, 1, 10, 10, 10, 10, { 255, 255, 255, 225 }, graphs.incoming.graph) end Draw:Line(false, 1, 10, 10, 10, 10, { 68, 255, 0, 255 }, graphs.incoming.graph) Draw:OutlinedText("avg: 20", 2, false, 20, 20, 13, false, { 68, 255, 0, 255 }, { 10, 10, 10 }, graphs.incoming.graph) --- outgoing Draw:OutlinedText( "outgoing kbps: 5", 2, false, graphs.outgoing.pos.x - 1, graphs.outgoing.pos.y - 15, 13, false, { 255, 255, 255, 255 }, { 10, 10, 10 }, graphs.outgoing.sides ) Draw:OutlinedText( "10", 2, false, graphs.outgoing.pos.x - 21, graphs.outgoing.pos.y - 7, 13, false, { 255, 255, 255, 255 }, { 10, 10, 10 }, graphs.outgoing.sides ) Draw:FilledRect( false, graphs.outgoing.pos.x - 1, graphs.outgoing.pos.y - 1, 222, 82, { 10, 10, 10, 50 }, graphs.outgoing.sides ) Draw:Line( false, 3, graphs.outgoing.pos.x, graphs.outgoing.pos.y - 1, graphs.outgoing.pos.x, graphs.outgoing.pos.y + 82, { 20, 20, 20, 225 }, graphs.outgoing.sides ) Draw:Line( false, 3, graphs.outgoing.pos.x, graphs.outgoing.pos.y + 80, graphs.outgoing.pos.x + 221, graphs.outgoing.pos.y + 80, { 20, 20, 20, 225 }, graphs.outgoing.sides ) Draw:Line( false, 3, graphs.outgoing.pos.x, graphs.outgoing.pos.y, graphs.outgoing.pos.x - 6, graphs.outgoing.pos.y, { 20, 20, 20, 225 }, graphs.outgoing.sides ) Draw:Line( false, 1, graphs.outgoing.pos.x, graphs.outgoing.pos.y, graphs.outgoing.pos.x, graphs.outgoing.pos.y + 80, { 255, 255, 255, 225 }, graphs.outgoing.sides ) Draw:Line( false, 1, graphs.outgoing.pos.x, graphs.outgoing.pos.y + 80, graphs.outgoing.pos.x + 220, graphs.outgoing.pos.y + 80, { 255, 255, 255, 225 }, graphs.outgoing.sides ) Draw:Line( false, 1, graphs.outgoing.pos.x, graphs.outgoing.pos.y, graphs.outgoing.pos.x - 5, graphs.outgoing.pos.y, { 255, 255, 255, 225 }, graphs.outgoing.sides ) for i = 1, 20 do Draw:Line(false, 1, 10, 10, 10, 10, { 255, 255, 255, 225 }, graphs.outgoing.graph) end Draw:Line(false, 1, 10, 10, 10, 10, { 68, 255, 0, 255 }, graphs.outgoing.graph) Draw:OutlinedText("avg: 20", 2, false, 20, 20, 13, false, { 68, 255, 0, 255 }, { 10, 10, 10 }, graphs.outgoing.graph) -- the fuckin fps and stuff i think xDDDDDd Draw:OutlinedText( "loading...", 2, false, 35, infopos + 180, 13, false, { 255, 255, 255, 255 }, { 10, 10, 10 }, graphs.other ) Draw:OutlinedText( "[DEBUG LOGS]", 2, false, 35, infopos - 200, 13, false, { 255, 255, 255, 255 }, { 10, 10, 10 }, graphs.other ) -- finish local loadingthing = Draw:OutlinedText( "Loading...", 2, true, math.floor(SCREEN_SIZE.x / 16), math.floor(SCREEN_SIZE.y / 16), 13, true, { 255, 50, 200, 255 }, { 0, 0, 0 } ) function menu.Initialize(menutable) local bbmenu = {} -- this one is for the rendering n shi do Draw:MenuOutlinedRect(true, 0, 0, menu.w, menu.h, { 0, 0, 0, 255 }, bbmenu) -- first gradent or whatever Draw:MenuOutlinedRect(true, 1, 1, menu.w - 2, menu.h - 2, { 20, 20, 20, 255 }, bbmenu) Draw:MenuOutlinedRect(true, 2, 2, menu.w - 3, 1, { 155, 155, 255, 255 }, bbmenu) table.insert(menu.clrs.norm, bbmenu[#bbmenu]) Draw:MenuOutlinedRect(true, 2, 3, menu.w - 3, 1, { 87, 32, 123, 255 }, bbmenu) table.insert(menu.clrs.dark, bbmenu[#bbmenu]) Draw:MenuOutlinedRect(true, 2, 4, menu.w - 3, 1, { 20, 20, 20, 255 }, bbmenu) for i = 0, 19 do Draw:MenuFilledRect(true, 2, 5 + i, menu.w - 4, 1, { 20, 20, 20, 255 }, bbmenu) bbmenu[6 + i].Color = ColorRange( i, { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 20, color = RGB(35, 35, 35) } } ) end Draw:MenuFilledRect(true, 2, 25, menu.w - 4, menu.h - 27, { 35, 35, 35, 255 }, bbmenu) Draw:MenuBigText(MenuName or "Bitch Bot", true, false, 6, 6, bbmenu) Draw:MenuOutlinedRect(true, 8, 22, menu.w - 16, menu.h - 30, { 0, 0, 0, 255 }, bbmenu) -- all this shit does the 2nd gradent Draw:MenuOutlinedRect(true, 9, 23, menu.w - 18, menu.h - 32, { 20, 20, 20, 255 }, bbmenu) Draw:MenuOutlinedRect(true, 10, 24, menu.w - 19, 1, { 155, 155, 255, 255 }, bbmenu) table.insert(menu.clrs.norm, bbmenu[#bbmenu]) Draw:MenuOutlinedRect(true, 10, 25, menu.w - 19, 1, { 87, 32, 123, 255 }, bbmenu) table.insert(menu.clrs.dark, bbmenu[#bbmenu]) Draw:MenuOutlinedRect(true, 10, 26, menu.w - 19, 1, { 20, 20, 20, 255 }, bbmenu) for i = 0, 14 do Draw:MenuFilledRect(true, 10, 27 + (i * 2), menu.w - 20, 2, { 45, 45, 45, 255 }, bbmenu) bbmenu[#bbmenu].Color = ColorRange( i, { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 15, color = RGB(35, 35, 35) } } ) end Draw:MenuFilledRect(true, 10, 57, menu.w - 20, menu.h - 67, { 35, 35, 35, 255 }, bbmenu) end -- ok now the cool part :D --ANCHOR menu stuffz local tabz = {} for i = 1, #menutable do tabz[i] = {} end local tabs = {} -- i like tabby catz 🐱🐱🐱 menu.multigroups = {} for k, v in pairs(menutable) do Draw:MenuFilledRect( true, 10 + ((k - 1) * ((menu.w - 20) / #menutable)), 27, ((menu.w - 20) / #menutable), 32, { 30, 30, 30, 255 }, bbmenu ) Draw:MenuOutlinedRect( true, 10 + ((k - 1) * ((menu.w - 20) / #menutable)), 27, ((menu.w - 20) / #menutable), 32, { 20, 20, 20, 255 }, bbmenu ) Draw:MenuBigText( v.name, true, true, math.floor(10 + ((k - 1) * ((menu.w - 20) / #menutable)) + (((menu.w - 20) / #menutable) * 0.5)), 35, bbmenu ) table.insert(tabs, { bbmenu[#bbmenu - 2], bbmenu[#bbmenu - 1], bbmenu[#bbmenu] }) table.insert(menu.tabnames, v.name) menu.options[v.name] = {} menu.multigroups[v.name] = {} menu.mgrouptabz[v.name] = {} local y_offies = { left = 66, right = 66 } if v.content ~= nil then for k1, v1 in pairs(v.content) do if v1.autopos ~= nil then v1.width = menu.columns.width if v1.autopos == "left" then v1.x = menu.columns.left v1.y = y_offies.left elseif v1.autopos == "right" then v1.x = menu.columns.right v1.y = y_offies.right end end local groups = {} if type(v1.name) == "table" then groups = v1.name else table.insert(groups, v1.name) end local y_pos = 24 for g_ind, g_name in ipairs(groups) do menu.options[v.name][g_name] = {} if type(v1.name) == "table" then menu.mgrouptabz[v.name][g_name] = {} menu.log_multi = { v.name, g_name } end local content = nil if type(v1.name) == "table" then y_pos = 28 content = v1[g_ind].content else y_pos = 24 content = v1.content end if content ~= nil then for k2, v2 in pairs(content) do if v2.type == TOGGLE then menu.options[v.name][g_name][v2.name] = {} local unsafe = false if v2.unsafe then unsafe = true end menu.options[v.name][g_name][v2.name][4] = Draw:Toggle(v2.name, v2.value, unsafe, v1.x + 8, v1.y + y_pos, tabz[k]) menu.options[v.name][g_name][v2.name][1] = v2.value menu.options[v.name][g_name][v2.name][7] = v2.value menu.options[v.name][g_name][v2.name][2] = v2.type menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1 } menu.options[v.name][g_name][v2.name][6] = unsafe menu.options[v.name][g_name][v2.name].tooltip = v2.tooltip or nil if v2.extra ~= nil then if v2.extra.type == KEYBIND then menu.options[v.name][g_name][v2.name][5] = {} menu.options[v.name][g_name][v2.name][5][4] = Draw:Keybind( v2.extra.key, v1.x + v1.width - 52, y_pos + v1.y - 2, tabz[k] ) menu.options[v.name][g_name][v2.name][5][1] = v2.extra.key menu.options[v.name][g_name][v2.name][5][2] = v2.extra.type menu.options[v.name][g_name][v2.name][5][3] = { v1.x + v1.width - 52, y_pos + v1.y - 2 } menu.options[v.name][g_name][v2.name][5][5] = false menu.options[v.name][g_name][v2.name][5].toggletype = v2.extra.toggletype == nil and 1 or v2.extra.toggletype menu.options[v.name][g_name][v2.name][5].relvalue = false local event = event.new(("%s %s %s"):format(v.name, g_name, v2.name)) event:connect(function(newval) if menu:GetVal("Visuals", "Interface" ,"Log Keybinds") then CreateNotification(("%s %s %s has been set to %s"):format(v.name, g_name, v2.name, newval and "true" or "false")) end end) menu.options[v.name][g_name][v2.name][5].event = event menu.options[v.name][g_name][v2.name][5].bind = table.insert(menu.keybinds, { menu.options[v.name][g_name][v2.name], tostring(v2.name), tostring(g_name), tostring(v.name), }) elseif v2.extra.type == COLORPICKER then menu.options[v.name][g_name][v2.name][5] = {} menu.options[v.name][g_name][v2.name][5][4] = Draw:ColorPicker( v2.extra.color, v1.x + v1.width - 38, y_pos + v1.y - 1, tabz[k] ) menu.options[v.name][g_name][v2.name][5][1] = v2.extra.color menu.options[v.name][g_name][v2.name][5][2] = v2.extra.type menu.options[v.name][g_name][v2.name][5][3] = { v1.x + v1.width - 38, y_pos + v1.y - 1 } menu.options[v.name][g_name][v2.name][5][5] = false menu.options[v.name][g_name][v2.name][5][6] = v2.extra.name elseif v2.extra.type == DOUBLE_COLORPICKER then menu.options[v.name][g_name][v2.name][5] = {} menu.options[v.name][g_name][v2.name][5][1] = {} menu.options[v.name][g_name][v2.name][5][1][1] = {} menu.options[v.name][g_name][v2.name][5][1][2] = {} menu.options[v.name][g_name][v2.name][5][2] = v2.extra.type for i = 1, 2 do menu.options[v.name][g_name][v2.name][5][1][i][4] = Draw:ColorPicker( v2.extra.color[i], v1.x + v1.width - 38 - ((i - 1) * 34), y_pos + v1.y - 1, tabz[k] ) menu.options[v.name][g_name][v2.name][5][1][i][1] = v2.extra.color[i] menu.options[v.name][g_name][v2.name][5][1][i][3] = { v1.x + v1.width - 38 - ((i - 1) * 34), y_pos + v1.y - 1 } menu.options[v.name][g_name][v2.name][5][1][i][5] = false menu.options[v.name][g_name][v2.name][5][1][i][6] = v2.extra.name[i] end end end y_pos += 18 elseif v2.type == SLIDER then menu.options[v.name][g_name][v2.name] = {} menu.options[v.name][g_name][v2.name][4] = Draw:Slider( v2.name, v2.stradd, v2.value, v2.minvalue, v2.maxvalue, v2.custom or {}, v2.decimal, v1.x + 8, v1.y + y_pos, v1.width - 16, tabz[k] ) menu.options[v.name][g_name][v2.name][1] = v2.value menu.options[v.name][g_name][v2.name][2] = v2.type menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1, v1.width - 16 } menu.options[v.name][g_name][v2.name][5] = false menu.options[v.name][g_name][v2.name][6] = { v2.minvalue, v2.maxvalue } menu.options[v.name][g_name][v2.name][7] = { v1.x + 7 + v1.width - 38, v1.y + y_pos - 1 } menu.options[v.name][g_name][v2.name].decimal = v2.decimal == nil and nil or v2.decimal menu.options[v.name][g_name][v2.name].stepsize = v2.stepsize menu.options[v.name][g_name][v2.name].shift_stepsize = v2.shift_stepsize menu.options[v.name][g_name][v2.name].custom = v2.custom or {} y_pos += 30 elseif v2.type == DROPBOX then menu.options[v.name][g_name][v2.name] = {} menu.options[v.name][g_name][v2.name][1] = v2.value menu.options[v.name][g_name][v2.name][2] = v2.type menu.options[v.name][g_name][v2.name][5] = false menu.options[v.name][g_name][v2.name][6] = v2.values if v2.x == nil then menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1, v1.width - 16 } menu.options[v.name][g_name][v2.name][4] = Draw:Dropbox( v2.name, v2.value, v2.values, v1.x + 8, v1.y + y_pos, v1.width - 16, tabz[k] ) y_pos += 40 else menu.options[v.name][g_name][v2.name][3] = { v2.x + 7, v2.y - 1, v2.w } menu.options[v.name][g_name][v2.name][4] = Draw:Dropbox(v2.name, v2.value, v2.values, v2.x + 8, v2.y, v2.w, tabz[k]) end elseif v2.type == COMBOBOX then menu.options[v.name][g_name][v2.name] = {} menu.options[v.name][g_name][v2.name][4] = Draw:Combobox( v2.name, v2.values, v1.x + 8, v1.y + y_pos, v1.width - 16, tabz[k] ) menu.options[v.name][g_name][v2.name][1] = v2.values menu.options[v.name][g_name][v2.name][2] = v2.type menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1, v1.width - 16 } menu.options[v.name][g_name][v2.name][5] = false y_pos += 40 elseif v2.type == BUTTON then menu.options[v.name][g_name][v2.name] = {} menu.options[v.name][g_name][v2.name][1] = false menu.options[v.name][g_name][v2.name][2] = v2.type menu.options[v.name][g_name][v2.name].name = v2.name menu.options[v.name][g_name][v2.name].groupbox = g_name menu.options[v.name][g_name][v2.name].tab = v.name -- why is it all v, v1, v2 so ugly menu.options[v.name][g_name][v2.name].doubleclick = v2.doubleclick if v2.x == nil then menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1, v1.width - 16 } menu.options[v.name][g_name][v2.name][4] = Draw:Button(v2.name, v1.x + 8, v1.y + y_pos, v1.width - 16, tabz[k]) y_pos += 28 else menu.options[v.name][g_name][v2.name][3] = { v2.x + 7, v2.y - 1, v2.w } menu.options[v.name][g_name][v2.name][4] = Draw:Button(v2.name, v2.x + 8, v2.y, v2.w, tabz[k]) end elseif v2.type == TEXTBOX then menu.options[v.name][g_name][v2.name] = {} menu.options[v.name][g_name][v2.name][4] = Draw:TextBox(v2.name, v2.text, v1.x + 8, v1.y + y_pos, v1.width - 16, tabz[k]) menu.options[v.name][g_name][v2.name][1] = v2.text menu.options[v.name][g_name][v2.name][2] = v2.type menu.options[v.name][g_name][v2.name][3] = { v1.x + 7, v1.y + y_pos - 1, v1.width - 16 } menu.options[v.name][g_name][v2.name][5] = false menu.options[v.name][g_name][v2.name][6] = v2.file and true or false y_pos += 28 elseif v2.type == "list" then menu.options[v.name][g_name][v2.name] = {} menu.options[v.name][g_name][v2.name][4] = Draw:List( v2.multiname, v1.x + 8, v1.y + y_pos, v1.width - 16, v2.size, v2.columns, tabz[k] ) menu.options[v.name][g_name][v2.name][1] = nil menu.options[v.name][g_name][v2.name][2] = v2.type menu.options[v.name][g_name][v2.name][3] = 1 menu.options[v.name][g_name][v2.name][5] = {} menu.options[v.name][g_name][v2.name][6] = v2.size menu.options[v.name][g_name][v2.name][7] = v2.columns menu.options[v.name][g_name][v2.name][8] = { v1.x + 8, v1.y + y_pos, v1.width - 16 } y_pos += 22 + (22 * v2.size) elseif v2.type == IMAGE then menu.options[v.name][g_name][v2.name] = {} menu.options[v.name][g_name][v2.name][1] = Draw:ImageWithText(v2.size, nil, v2.text, v1.x + 8, v1.y + y_pos, tabz[k]) menu.options[v.name][g_name][v2.name][2] = v2.type end end end menu.log_multi = nil end y_pos += 2 if type(v1.name) ~= "table" then if v1.autopos == nil then Draw:CoolBox(v1.name, v1.x, v1.y, v1.width, v1.height, tabz[k]) else if v1.autofill then y_pos = (menu.h - 17) - v1.y elseif v1.size ~= nil then y_pos = v1.size end Draw:CoolBox(v1.name, v1.x, v1.y, v1.width, y_pos, tabz[k]) y_offies[v1.autopos] += y_pos + 6 end else if v1.autofill then y_pos = (menu.h - 17) - v1.y y_offies[v1.autopos] += y_pos + 6 elseif v1.size ~= nil then y_pos = v1.size y_offies[v1.autopos] += y_pos + 6 end local drawn if v1.autopos == nil then drawn = Draw:CoolMultiBox(v1.name, v1.x, v1.y, v1.width, v1.height, tabz[k]) else drawn = Draw:CoolMultiBox(v1.name, v1.x, v1.y, v1.width, y_pos, tabz[k]) end local group_vals = {} for _i, _v in ipairs(v1.name) do if _i == 1 then group_vals[_v] = true else group_vals[_v] = false end end table.insert(menu.multigroups[v.name], { vals = group_vals, drawn = drawn }) end end end end menu.list.addval = function(list, option) table.insert(list[5], option) end menu.list.removeval = function(list, optionnum) if list[1] == optionnum then list[1] = nil end table.remove(list[5], optionnum) end menu.list.removeall = function(list) list[5] = {} for k, v in pairs(list[4].liststuff) do for i, v1 in ipairs(v) do for i1, v2 in ipairs(v1) do v2.Visible = false end end end end menu.list.setval = function(list, value) list[1] = value end Draw:MenuOutlinedRect(true, 10, 59, menu.w - 20, menu.h - 69, { 20, 20, 20, 255 }, bbmenu) Draw:MenuOutlinedRect(true, 11, 58, ((menu.w - 20) / #menutable) - 2, 2, { 35, 35, 35, 255 }, bbmenu) local barguy = { bbmenu[#bbmenu], menu.postable[#menu.postable] } local function setActiveTab(slot) barguy[1].Position = Vector2.new( (menu.x + 11 + ((((menu.w - 20) / #menutable) - 2) * (slot - 1))) + ((slot - 1) * 2), menu.y + 58 ) barguy[2][2] = (11 + ((((menu.w - 20) / #menutable) - 2) * (slot - 1))) + ((slot - 1) * 2) barguy[2][3] = 58 for k, v in pairs(tabs) do if k == slot then v[1].Visible = false v[3].Color = RGB(255, 255, 255) else v[3].Color = RGB(170, 170, 170) v[1].Visible = true end end for k, v in pairs(tabz) do if k == slot then for k1, v1 in pairs(v) do v1.Visible = true end else for k1, v1 in pairs(v) do v1.Visible = false end end end for k, v in pairs(menu.multigroups) do if menu.tabnames[menu.activetab] == k then for k1, v1 in pairs(v) do for k2, v2 in pairs(v1.vals) do for k3, v3 in pairs(menu.mgrouptabz[k][k2]) do v3.Visible = v2 end end end end end end setActiveTab(menu.activetab) local plusminus = {} Draw:OutlinedText("_", 1, false, 10, 10, 14, false, { 225, 225, 225, 255 }, { 20, 20, 20 }, plusminus) Draw:OutlinedText("+", 1, false, 10, 10, 14, false, { 225, 225, 225, 255 }, { 20, 20, 20 }, plusminus) function menu:SetPlusMinus(value, x, y) for i, v in ipairs(plusminus) do if value == 0 then v.Visible = false else v.Visible = true end end if value ~= 0 then plusminus[1].Position = Vector2.new(x + 3 + menu.x, y - 5 + menu.y) plusminus[2].Position = Vector2.new(x + 13 + menu.x, y - 1 + menu.y) if value == 1 then for i, v in ipairs(plusminus) do v.Color = RGB(225, 225, 225) v.OutlineColor = RGB(20, 20, 20) end else for i, v in ipairs(plusminus) do if i + 1 == value then v.Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) else v.Color = RGB(255, 255, 255) end v.OutlineColor = RGB(0, 0, 0) end end end end menu:SetPlusMinus(0, 20, 20) --DROP BOX THINGY local dropboxthingy = {} local dropboxtexty = {} Draw:OutlinedRect(false, 20, 20, 100, 22, { 20, 20, 20, 255 }, dropboxthingy) Draw:OutlinedRect(false, 21, 21, 98, 20, { 0, 0, 0, 255 }, dropboxthingy) Draw:FilledRect(false, 22, 22, 96, 18, { 45, 45, 45, 255 }, dropboxthingy) for i = 1, 30 do Draw:OutlinedText("", 2, false, 20, 20, 13, false, { 255, 255, 255, 255 }, { 0, 0, 0 }, dropboxtexty) end function menu:SetDropBox(visible, x, y, length, value, values) for k, v in pairs(dropboxthingy) do v.Visible = visible end local size = Vector2.new(length, 21 * (#values + 1) + 3) -- if y + size.y > SCREEN_SIZE.y then -- y = SCREEN_SIZE.y - size.y -- end -- if x + size.x > SCREEN_SIZE.x then -- x = SCREEN_SIZE.x - size.x -- end -- if y < 0 then -- y = 0 -- end -- if x < 0 then -- x = 0 -- end local pos = Vector2.new(x, y) dropboxthingy[1].Position = pos dropboxthingy[2].Position = Vector2.new(x + 1, y + 1) dropboxthingy[3].Position = Vector2.new(x + 2, y + 22) dropboxthingy[1].Size = size dropboxthingy[2].Size = Vector2.new(length - 2, (21 * (#values + 1)) + 1) dropboxthingy[3].Size = Vector2.new(length - 4, (21 * #values) + 1 - 1) if visible then for i = 1, #values do dropboxtexty[i].Position = Vector2.new(x + 6, y + 26 + ((i - 1) * 21)) dropboxtexty[i].Visible = true dropboxtexty[i].Text = values[i] if i == value then dropboxtexty[i].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) else dropboxtexty[i].Color = RGB(255, 255, 255) end end else for k, v in pairs(dropboxtexty) do v.Visible = false end end return pos end local function set_comboboxthingy(visible, x, y, length, values) for k, v in pairs(dropboxthingy) do v.Visible = visible end local size = Vector2.new(length, 22 * (#values + 1) + 2) if y + size.y > SCREEN_SIZE.y then y = SCREEN_SIZE.y - size.y end if x + size.x > SCREEN_SIZE.x then x = SCREEN_SIZE.x - size.x end if y < 0 then y = 0 end if x < 0 then x = 0 end local pos = Vector2.new(x,y) dropboxthingy[1].Position = pos dropboxthingy[2].Position = Vector2.new(x + 1, y + 1) dropboxthingy[3].Position = Vector2.new(x + 2, y + 22) dropboxthingy[1].Size = size dropboxthingy[2].Size = Vector2.new(length - 2, (22 * (#values + 1))) dropboxthingy[3].Size = Vector2.new(length - 4, (22 * #values)) if visible then for i = 1, #values do dropboxtexty[i].Position = Vector2.new(x + 6, y + 26 + ((i - 1) * 22)) dropboxtexty[i].Visible = true dropboxtexty[i].Text = values[i][1] if values[i][2] then dropboxtexty[i].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) else dropboxtexty[i].Color = RGB(255, 255, 255) end end else for k, v in pairs(dropboxtexty) do v.Visible = false end end return pos end menu:SetDropBox(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" }) --MODE SELECT THING local modeselect = {} Draw:OutlinedRect(false, 20, 20, 100, 22, { 20, 20, 20, 255 }, modeselect) Draw:OutlinedRect(false, 21, 21, 98, 20, { 0, 0, 0, 255 }, modeselect) Draw:FilledRect(false, 22, 22, 96, 18, { 45, 45, 45, 255 }, modeselect) local modeselecttext = { "Hold", "Toggle", "Hold Off", "Always" } for i = 1, 4 do Draw:OutlinedText( modeselecttext[i], 2, false, 20, 20, 13, false, { 255, 255, 255, 255 }, { 0, 0, 0 }, modeselect ) end function menu:SetKeybindSelect(visible, x, y, value) for k, v in pairs(modeselect) do v.Visible = visible end if visible then modeselect[1].Position = Vector2.new(x, y) modeselect[2].Position = Vector2.new(x + 1, y + 1) modeselect[3].Position = Vector2.new(x + 2, y + 2) modeselect[1].Size = Vector2.new(70, 22 * 4 - 1) modeselect[2].Size = Vector2.new(70 - 2, 22 * 4 - 3) modeselect[3].Size = Vector2.new(70 - 4, 22 * 4 - 5) for i = 1, 4 do modeselect[i + 3].Position = Vector2.new(x + 6, y + 4 + ((i - 1) * 21)) if value == i then modeselect[i + 3].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) else modeselect[i + 3].Color = RGB(255, 255, 255) end end end end menu:SetKeybindSelect(false, 200, 400, 1) --COLOR PICKER local cp = { x = 400, y = 40, w = 280, h = 211, alpha = false, dragging_m = false, dragging_r = false, dragging_b = false, hsv = { h = 0, s = 0, v = 0, a = 0, }, postable = {}, drawings = {}, } local function ColorpickerOutline(visible, pos_x, pos_y, width, height, clr, tablename) -- doing all this shit to make it easier for me to make this beat look nice and shit ya fell dog :dog_head: Draw:OutlinedRect(visible, pos_x + cp.x, pos_y + cp.y, width, height, clr, tablename) table.insert(cp.postable, { tablename[#tablename], pos_x, pos_y }) end local function ColorpickerRect(visible, pos_x, pos_y, width, height, clr, tablename) Draw:FilledRect(visible, pos_x + cp.x, pos_y + cp.y, width, height, clr, tablename) table.insert(cp.postable, { tablename[#tablename], pos_x, pos_y }) end local function ColorpickerImage(visible, imagedata, pos_x, pos_y, width, height, transparency, tablename) Draw:Image(visible, imagedata, pos_x, pos_y, width, height, transparency, tablename) table.insert(cp.postable, { tablename[#tablename], pos_x, pos_y }) end local function ColorpickerText(text, visible, centered, pos_x, pos_y, tablename) Draw:OutlinedText( text, 2, visible, pos_x + cp.x, pos_y + cp.y, 13, centered, { 255, 255, 255, 255 }, { 0, 0, 0 }, tablename ) table.insert(cp.postable, { tablename[#tablename], pos_x, pos_y }) end ColorpickerRect(false, 1, 1, cp.w, cp.h, { 35, 35, 35, 255 }, cp.drawings) ColorpickerOutline(false, 1, 1, cp.w, cp.h, { 0, 0, 0, 255 }, cp.drawings) ColorpickerOutline(false, 2, 2, cp.w - 2, cp.h - 2, { 20, 20, 20, 255 }, cp.drawings) ColorpickerOutline(false, 3, 3, cp.w - 3, 1, { 155, 155, 255, 255 }, cp.drawings) table.insert(menu.clrs.norm, cp.drawings[#cp.drawings]) ColorpickerOutline(false, 3, 4, cp.w - 3, 1, { 87, 32, 123, 255 }, cp.drawings) table.insert(menu.clrs.dark, cp.drawings[#cp.drawings]) ColorpickerOutline(false, 3, 5, cp.w - 3, 1, { 20, 20, 20, 255 }, cp.drawings) ColorpickerText("color picker :D", false, false, 7, 6, cp.drawings) ColorpickerText("x", false, false, 268, 4, cp.drawings) ColorpickerOutline(false, 10, 23, 160, 160, { 30, 30, 30, 255 }, cp.drawings) ColorpickerOutline(false, 11, 24, 158, 158, { 0, 0, 0, 255 }, cp.drawings) ColorpickerRect(false, 12, 25, 156, 156, { 0, 0, 0, 255 }, cp.drawings) local maincolor = cp.drawings[#cp.drawings] ColorpickerImage(false, BBOT_IMAGES[1], 12, 25, 156, 156, 1, cp.drawings) --https://i.imgur.com/jG3NjxN.png local alphabar = {} ColorpickerOutline(false, 10, 189, 160, 14, { 30, 30, 30, 255 }, cp.drawings) table.insert(alphabar, cp.drawings[#cp.drawings]) ColorpickerOutline(false, 11, 190, 158, 12, { 0, 0, 0, 255 }, cp.drawings) table.insert(alphabar, cp.drawings[#cp.drawings]) ColorpickerImage(false, BBOT_IMAGES[2], 12, 191, 159, 10, 1, cp.drawings) table.insert(alphabar, cp.drawings[#cp.drawings]) ColorpickerOutline(false, 176, 23, 14, 160, { 30, 30, 30, 255 }, cp.drawings) ColorpickerOutline(false, 177, 24, 12, 158, { 0, 0, 0, 255 }, cp.drawings) --https://i.imgur.com/2Ty4u2O.png ColorpickerImage(false, BBOT_IMAGES[3], 178, 25, 10, 156, 1, cp.drawings) ColorpickerText("New Color", false, false, 198, 23, cp.drawings) ColorpickerOutline(false, 197, 37, 75, 40, { 30, 30, 30, 255 }, cp.drawings) ColorpickerOutline(false, 198, 38, 73, 38, { 0, 0, 0, 255 }, cp.drawings) ColorpickerImage(false, BBOT_IMAGES[4], 199, 39, 71, 36, 1, cp.drawings) ColorpickerRect(false, 199, 39, 71, 36, { 255, 0, 0, 255 }, cp.drawings) local newcolor = cp.drawings[#cp.drawings] ColorpickerText("copy", false, true, 198 + 36, 41, cp.drawings) ColorpickerText("paste", false, true, 198 + 37, 56, cp.drawings) local newcopy = { cp.drawings[#cp.drawings - 1], cp.drawings[#cp.drawings] } ColorpickerText("Old Color", false, false, 198, 77, cp.drawings) ColorpickerOutline(false, 197, 91, 75, 40, { 30, 30, 30, 255 }, cp.drawings) ColorpickerOutline(false, 198, 92, 73, 38, { 0, 0, 0, 255 }, cp.drawings) ColorpickerImage(false, BBOT_IMAGES[4], 199, 93, 71, 36, 1, cp.drawings) ColorpickerRect(false, 199, 93, 71, 36, { 255, 0, 0, 255 }, cp.drawings) local oldcolor = cp.drawings[#cp.drawings] ColorpickerText("copy", false, true, 198 + 36, 103, cp.drawings) local oldcopy = { cp.drawings[#cp.drawings] } --ColorpickerRect(false, 197, cp.h - 25, 75, 20, {30, 30, 30, 255}, cp.drawings) ColorpickerText("[ Apply ]", false, true, 235, cp.h - 23, cp.drawings) local applytext = cp.drawings[#cp.drawings] local function set_newcolor(r, g, b, a) newcolor.Color = RGB(r, g, b) if a ~= nil then newcolor.Transparency = a / 255 else newcolor.Transparency = 1 end end local function set_oldcolor(r, g, b, a) oldcolor.Color = RGB(r, g, b) cp.oldcolor = oldcolor.Color cp.oldcoloralpha = a if a ~= nil then oldcolor.Transparency = a / 255 else oldcolor.Transparency = 1 end end -- all this color picker shit is disgusting, why can't it be in it's own fucking scope. these are all global local dragbar_r = {} Draw:OutlinedRect(true, 30, 30, 16, 5, { 0, 0, 0, 255 }, cp.drawings) table.insert(dragbar_r, cp.drawings[#cp.drawings]) Draw:OutlinedRect(true, 31, 31, 14, 3, { 255, 255, 255, 255 }, cp.drawings) table.insert(dragbar_r, cp.drawings[#cp.drawings]) local dragbar_b = {} Draw:OutlinedRect(true, 30, 30, 5, 16, { 0, 0, 0, 255 }, cp.drawings) table.insert(dragbar_b, cp.drawings[#cp.drawings]) table.insert(alphabar, cp.drawings[#cp.drawings]) Draw:OutlinedRect(true, 31, 31, 3, 14, { 255, 255, 255, 255 }, cp.drawings) table.insert(dragbar_b, cp.drawings[#cp.drawings]) table.insert(alphabar, cp.drawings[#cp.drawings]) local dragbar_m = {} Draw:OutlinedRect(true, 30, 30, 5, 5, { 0, 0, 0, 255 }, cp.drawings) table.insert(dragbar_m, cp.drawings[#cp.drawings]) Draw:OutlinedRect(true, 31, 31, 3, 3, { 255, 255, 255, 255 }, cp.drawings) table.insert(dragbar_m, cp.drawings[#cp.drawings]) function menu:SetDragBarR(x, y) dragbar_r[1].Position = Vector2.new(x, y) dragbar_r[2].Position = Vector2.new(x + 1, y + 1) end function menu:SetDragBarB(x, y) dragbar_b[1].Position = Vector2.new(x, y) dragbar_b[2].Position = Vector2.new(x + 1, y + 1) end function menu:SetDragBarM(x, y) dragbar_m[1].Position = Vector2.new(x, y) dragbar_m[2].Position = Vector2.new(x + 1, y + 1) end function menu:SetColorPicker(visible, color, value, alpha, text, x, y) for k, v in pairs(cp.drawings) do v.Visible = visible end cp.oldalpha = alpha if visible then cp.x = clamp(x, 0, SCREEN_SIZE.x - cp.w) cp.y = clamp(y, 0, SCREEN_SIZE.y - cp.h) for k, v in pairs(cp.postable) do v[1].Position = Vector2.new(cp.x + v[2], cp.y + v[3]) end local tempclr = RGB(color[1], color[2], color[3]) local h, s, v = tempclr:ToHSV() cp.hsv.h = h cp.hsv.s = s cp.hsv.v = v menu:SetDragBarR(cp.x + 175, cp.y + 23 + math.floor((1 - h) * 156)) menu:SetDragBarM(cp.x + 9 + math.floor(s * 156), cp.y + 23 + math.floor((1 - v) * 156)) if not alpha then set_newcolor(color[1], color[2], color[3]) set_oldcolor(color[1], color[2], color[3]) cp.alpha = false for k, v in pairs(alphabar) do v.Visible = false end cp.h = 191 for i = 1, 2 do cp.drawings[i].Size = Vector2.new(cp.w, cp.h) end cp.drawings[3].Size = Vector2.new(cp.w - 2, cp.h - 2) else cp.hsv.a = color[4] cp.alpha = true set_newcolor(color[1], color[2], color[3], color[4]) set_oldcolor(color[1], color[2], color[3], color[4]) cp.h = 211 for i = 1, 2 do cp.drawings[i].Size = Vector2.new(cp.w, cp.h) end cp.drawings[3].Size = Vector2.new(cp.w - 2, cp.h - 2) menu:SetDragBarB(cp.x + 12 + math.floor(156 * (color[4] / 255)), cp.y + 188) end applytext.Position = Vector2.new(235 + cp.x, cp.y + cp.h - 23) maincolor.Color = Color3.fromHSV(h, 1, 1) cp.drawings[7].Text = text end end menu:SetColorPicker(false, { 255, 0, 0 }, nil, false, "", 0, 0) --TOOL TIP local tooltip = { x = 0, y = 0, time = 0, active = false, text = "This does this and that i guess\npooping 24/7", drawings = {}, postable = {}, } local function ttOutline(visible, pos_x, pos_y, width, height, clr, tablename) Draw:OutlinedRect(visible, pos_x + tooltip.x, pos_y + tooltip.y, width, height, clr, tablename) table.insert(tooltip.postable, { tablename[#tablename], pos_x, pos_y }) end local function ttRect(visible, pos_x, pos_y, width, height, clr, tablename) Draw:FilledRect(visible, pos_x + tooltip.x, pos_y + tooltip.y, width, height, clr, tablename) table.insert(tooltip.postable, { tablename[#tablename], pos_x, pos_y }) end local function ttText(text, visible, centered, pos_x, pos_y, tablename) Draw:OutlinedText( text, 2, visible, pos_x + tooltip.x, pos_y + tooltip.y, 13, centered, { 255, 255, 255, 255 }, { 0, 0, 0 }, tablename ) table.insert(tooltip.postable, { tablename[#tablename], pos_x, pos_y }) end ttRect( false, tooltip.x + 1, tooltip.y + 1, 1, 28, { menu.mc[1], menu.mc[2], menu.mc[3], 255 }, tooltip.drawings ) ttRect( false, tooltip.x + 2, tooltip.y + 1, 1, 28, { menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40, 255 }, tooltip.drawings ) ttOutline(false, tooltip.x, tooltip.y, 4, 30, { 20, 20, 20, 255 }, tooltip.drawings) ttRect(false, tooltip.x + 4, tooltip.y, 100, 30, { 40, 40, 40, 255 }, tooltip.drawings) ttOutline(false, tooltip.x - 1, tooltip.y - 1, 102, 32, { 0, 0, 0, 255 }, tooltip.drawings) ttOutline(false, tooltip.x + 3, tooltip.y, 102, 30, { 20, 20, 20, 255 }, tooltip.drawings) ttText(tooltip.text, false, false, tooltip.x + 7, tooltip.y + 1, tooltip.drawings) local bbmouse = {} function menu:SetToolTip(x, y, text, visible, dt) dt = dt or 0 x = x or tooltip.x y = y or tooltip.y tooltip.x = x tooltip.y = y if tooltip.time < 1 and visible then if tooltip.time < -1 then tooltip.time = -1 end tooltip.time += dt else tooltip.time -= dt if tooltip.time < -1 then tooltip.time = -1 end end if not visible and tooltip.time < 0 then tooltip.time = -1 end if tooltip.time > 1 then tooltip.time = 1 end for k, v in ipairs(tooltip.drawings) do v.Visible = tooltip.time > 0 end tooltip.active = visible if text then tooltip.drawings[7].Text = text end for k, v in pairs(tooltip.postable) do v[1].Position = Vector2.new(x + v[2], y + v[3]) v[1].Transparency = math.min((0.3 + tooltip.time) ^ 3 - 1, menu.fade_amount or 1) end tooltip.drawings[1].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) tooltip.drawings[2].Color = RGB(menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40) local tb = tooltip.drawings[7].TextBounds tooltip.drawings[1].Size = Vector2.new(1, tb.Y + 3) tooltip.drawings[2].Size = Vector2.new(1, tb.Y + 3) tooltip.drawings[3].Size = Vector2.new(4, tb.Y + 5) tooltip.drawings[4].Size = Vector2.new(tb.X + 6, tb.Y + 5) tooltip.drawings[5].Size = Vector2.new(tb.X + 12, tb.Y + 7) tooltip.drawings[6].Size = Vector2.new(tb.X + 7, tb.Y + 5) if bbmouse[#bbmouse] then bbmouse[#bbmouse].Visible = visible bbmouse[#bbmouse].Transparency = 1 - tooltip.time end end menu:SetToolTip(500, 500, "", false) -- mouse shiz local mousie = { x = 100, y = 240, } Draw:Triangle( true, true, { mousie.x, mousie.y }, { mousie.x, mousie.y + 15 }, { mousie.x + 10, mousie.y + 10 }, { 155, 155, 255, 255 }, bbmouse ) table.insert(menu.clrs.norm, bbmouse[#bbmouse]) Draw:Triangle( true, false, { mousie.x, mousie.y }, { mousie.x, mousie.y + 15 }, { mousie.x + 10, mousie.y + 10 }, { 0, 0, 0, 255 }, bbmouse ) Draw:OutlinedText("", 2, false, 0, 0, 13, false, { 255, 255, 255, 255 }, { 15, 15, 15 }, bbmouse) Draw:OutlinedText("?", 2, false, 0, 0, 13, false, { 255, 255, 255, 255 }, { 15, 15, 15 }, bbmouse) local lastMousePos = Vector2.new() function menu:SetMousePosition(x, y) FireEvent("bb_mousemoved", lastMousePos ~= Vector2.new(x, y)) for k = 1, #bbmouse do local v = bbmouse[k] if k ~= #bbmouse and k ~= #bbmouse - 1 then v.PointA = Vector2.new(x, y + 36) v.PointB = Vector2.new(x, y + 36 + 15) v.PointC = Vector2.new(x + 10, y + 46) else v.Position = Vector2.new(x + 10, y + 46) end end lastMousePos = Vector2.new(x, y) end function menu:SetColor(r, g, b) menu.watermark.rect[1].Color = RGB(r - 40, g - 40, b - 40) menu.watermark.rect[2].Color = RGB(r, g, b) for k, v in pairs(menu.clrs.norm) do v.Color = RGB(r, g, b) end for k, v in pairs(menu.clrs.dark) do v.Color = RGB(r - 40, g - 40, b - 40) end local menucolor = { r, g, b } for k, v in pairs(menu.options) do for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == TOGGLE then if not v2[1] then for i = 0, 3 do v2[4][i + 1].Color = ColorRange(i, { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 3, color = RGB(30, 30, 30) }, }) end else for i = 0, 3 do v2[4][i + 1].Color = ColorRange(i, { [1] = { start = 0, color = RGB(menucolor[1], menucolor[2], menucolor[3]) }, [2] = { start = 3, color = RGB(menucolor[1] - 40, menucolor[2] - 40, menucolor[3] - 40), }, }) end end elseif v2[2] == SLIDER then for i = 0, 3 do v2[4][i + 1].Color = ColorRange(i, { [1] = { start = 0, color = RGB(menucolor[1], menucolor[2], menucolor[3]) }, [2] = { start = 3, color = RGB(menucolor[1] - 40, menucolor[2] - 40, menucolor[3] - 40), }, }) end end end end end end local function UpdateConfigs() local configthing = menu.options["Settings"]["Configuration"]["Configs"] configthing[6] = GetConfigs() if configthing[1] > #configthing[6] then configthing[1] = #configthing[6] end configthing[4][1].Text = configthing[6][configthing[1]] end menu.keybind_open = nil menu.dropbox_open = nil menu.colorPickerOpen = false menu.textboxopen = nil local shooties = {} local isPlayerScoped = false local keyz = {} for k, v in pairs(Enum.KeyCode:GetEnumItems()) do keyz[v.Value] = v end function menu:InputBeganMenu(key) --ANCHOR menu input -- if key.KeyCode == (menu:GetVal("Settings", "Cheat Settings", "Custom Menu Key") and keyz[tonumber(menu.options["Settings"]["Cheat Settings"]["Custom Menu Key"][5][1].Value)] or Enum.KeyCode.RightShift) and not loadingthing.Visible then cp.dragging_m = false cp.dragging_r = false cp.dragging_b = false customChatSpam = {} customKillSay = {} local customtxt = readfile("bitchbot/chatspam.bb") for s in customtxt:gmatch("[^\n]+") do -- I'm Love String:Match table.insert(customChatSpam, s) end customtxt = readfile("bitchbot/killsay.bb") for s in customtxt:gmatch("[^\n]+") do -- I'm Love String:Match table.insert(customKillSay, s) end UpdateConfigs() if menu.open and not menu.fading then for k = 1, #menu.options do local v = menu.options[k] for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == SLIDER and v2[5] then v2[5] = false elseif v2[2] == DROPBOX and v2[5] then v2[5] = false elseif v2[2] == COMBOBOX and v2[5] then v2[5] = false elseif v2[2] == TOGGLE then if v2[5] ~= nil then if v2[5][2] == KEYBIND and v2[5][5] then v2[5][4][2].Color = RGB(30, 30, 30) v2[5][5] = false elseif v2[5][2] == COLORPICKER and v2[5][5] then v2[5][5] = false end end elseif v2[2] == BUTTON then if v2[1] then for i = 0, 8 do v2[4][i + 1].Color = ColorRange(i, { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 8, color = RGB(35, 35, 35) }, }) end v2[1] = false end end end end end menu.keybind_open = nil menu:SetKeybindSelect(false, 20, 20, 1) menu.dropbox_open = nil menu:SetDropBox(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" }) menu.colorPickerOpen = nil menu:SetToolTip(nil, nil, nil, false) menu:SetColorPicker(false, { 255, 0, 0 }, nil, false, "hahaha", 400, 200) end if not menu.fading then menu.fading = true menu.fadestart = tick() end end if menu == nil then return end if menu.textboxopen then if key.KeyCode == Enum.KeyCode.Delete or key.KeyCode == Enum.KeyCode.Return then for k, v in pairs(menu.options) do for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == TEXTBOX then if v2[5] then v2[5] = false v2[4].Color = RGB(255, 255, 255) menu.textboxopen = false v2[4].Text = v2[1] end end end end end end end if menu.open and not menu.fading then for k, v in pairs(menu.options) do for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == TOGGLE then if v2[5] ~= nil then if v2[5][2] == KEYBIND and v2[5][5] and key.KeyCode.Value ~= 0 then v2[5][4][2].Color = RGB(30, 30, 30) v2[5][4][1].Text = KeyEnumToName(key.KeyCode) if KeyEnumToName(key.KeyCode) == "None" then v2[5][1] = nil else v2[5][1] = key.KeyCode end v2[5][5] = false end end elseif v2[2] == TEXTBOX then --ANCHOR TEXTBOXES if v2[5] then if not INPUT_SERVICE:IsKeyDown(Enum.KeyCode.LeftControl) then if string.len(v2[1]) <= 28 then if table.find(textBoxLetters, KeyEnumToName(key.KeyCode)) then if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.LeftShift) then v2[1] ..= string.upper(KeyEnumToName(key.KeyCode)) else v2[1] ..= string.lower(KeyEnumToName(key.KeyCode)) end elseif KeyEnumToName(key.KeyCode) == "Space" then v2[1] ..= " " elseif keymodifiernames[KeyEnumToName(key.KeyCode)] ~= nil then if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.LeftShift) then v2[1] ..= KeyModifierToName(KeyEnumToName(key.KeyCode), v2[6]) else v2[1] ..= KeyEnumToName(key.KeyCode) end elseif KeyEnumToName(key.KeyCode) == "Back" and v2[1] ~= "" then v2[1] = string.sub(v2[1], 0, #v2[1] - 1) end end v2[4].Text = v2[1] .. "|" end end end end end end end end function menu:InputBeganKeybinds(key) -- this is super shit because once we add mouse we need to change all this shit to be the contextaction stuff if INPUT_SERVICE:GetFocusedTextBox() or menu.textboxopen then return end for i = 1, #self.keybinds do local value = self.keybinds[i][1] if key.KeyCode == value[5][1] then value[5].lastvalue = value[5].relvalue if value[5].toggletype == 2 then value[5].relvalue = not value[5].relvalue elseif value[5].toggletype == 1 then value[5].relvalue = true elseif value[5].toggletype == 3 then value[5].relvalue = false end elseif value[5].toggletype == 4 then value[5].relvalue = true end if value[5].lastvalue ~= value[5].relvalue then value[5].event:fire(value[5].relvalue) end end end function menu:InputEndedKeybinds(key) for i = 1, #self.keybinds do local value = self.keybinds[i][1] value[5].lastvalue = value[5].relvalue if key.KeyCode == value[5][1] then if value[5].toggletype == 1 then value[5].relvalue = false elseif value[5].toggletype == 3 then value[5].relvalue = true end end if value[5].lastvalue ~= value[5].relvalue then value[5].event:fire(value[5].relvalue) end end end function menu:SetMenuPos(x, y) for k, v in pairs(menu.postable) do if v[1].Visible then v[1].Position = Vector2.new(x + v[2], y + v[3]) end end end function menu:MouseInArea(x, y, width, height) return LOCAL_MOUSE.x > x and LOCAL_MOUSE.x < x + width and LOCAL_MOUSE.y > 36 + y and LOCAL_MOUSE.y < 36 + y + height end function menu:MouseInMenu(x, y, width, height) return LOCAL_MOUSE.x > menu.x + x and LOCAL_MOUSE.x < menu.x + x + width and LOCAL_MOUSE.y > menu.y - 36 + y and LOCAL_MOUSE.y < menu.y - 36 + y + height end function menu:MouseInColorPicker(x, y, width, height) return LOCAL_MOUSE.x > cp.x + x and LOCAL_MOUSE.x < cp.x + x + width and LOCAL_MOUSE.y > cp.y - 36 + y and LOCAL_MOUSE.y < cp.y - 36 + y + height end function menu:GetVal(tab, groupbox, name, ...) local args = { ... } local option = menu.options[tab][groupbox][name] if not option then print(tab, groupbox, name) end if args[1] == nil then if option[2] == TOGGLE then local lastval = option[7] option[7] = option[1] return option[1], lastval elseif option[2] ~= COMBOBOX then return option[1] else local temptable = {} for k = 1, #option[1] do local v = option[1][k] table.insert(temptable, v[2]) end return temptable end else if args[1] == KEYBIND or args[1] == COLOR then if args[2] then return RGB(option[5][1][1], option[5][1][2], option[5][1][3]) else return option[5][1] end elseif args[1] == COLOR1 then if args[2] then return RGB(option[5][1][1][1][1], option[5][1][1][1][2], option[5][1][1][1][3]) else return option[5][1][1][1] end elseif args[1] == COLOR2 then if args[2] then return RGB(option[5][1][2][1][1], option[5][1][2][1][2], option[5][1][2][1][3]) else return option[5][1][2][1] end end end end function menu:GetKey(tab, groupbox, name) local option = self.options[tab][groupbox][name][5] local return1, return2, return3 if self:GetVal(tab, groupbox, name) then if option.toggletype ~= 0 then if option.lastvalue == nil then option.lastvalue = option.relvalue end return1, return2, return3 = option.relvalue, option.lastvalue, option.event option.lastvalue = option.relvalue end end return return1, return2, return3 end function menu:SetKey(tab, groupbox, name, val) val = val or false local option = menu.options[tab][groupbox][name][5] if option.toggletype ~= 0 then option.lastvalue = option.relvalue option.relvalue = val if option.lastvalue ~= option.relvalue then option.event:fire(option.relvalue) end end end local menuElementTypes = { [TOGGLE] = "toggle", [SLIDER] = "slider", [DROPBOX] = "dropbox", [TEXTBOX] = "textbox" } local doubleclickDelay = 1 local buttonsInQue = {} local function SaveCurSettings() local figgy = "bitchbot v2\n\n" for k, v in next, menuElementTypes do figgy ..= v .. "s {\n" for k1, v1 in pairs(menu.options) do for k2, v2 in pairs(v1) do for k3, v3 in pairs(v2) do if v3[2] == k and k3 ~= "Configs" and k3 ~= "Player Status" and k3 ~= "ConfigName" then figgy ..= k1 .. "|" .. k2 .. "|" .. k3 .. "|" .. tostring(v3[1]) .. "\n" end end end end figgy = figgy .. "}\n" end figgy = figgy .. "comboboxes {\n" for k, v in pairs(menu.options) do for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == COMBOBOX then local boolz = "" for k3, v3 in pairs(v2[1]) do boolz = boolz .. tostring(v3[2]) .. ", " end figgy = figgy .. k .. "|" .. k1 .. "|" .. k2 .. "|" .. boolz .. "\n" end end end end figgy = figgy .. "}\n" figgy = figgy .. "keybinds {\n" for k, v in pairs(menu.options) do for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == TOGGLE then if v2[5] ~= nil then if v2[5][2] == KEYBIND then local toggletype = "|" .. tostring(v2[5].toggletype) if v2[5][1] == nil then figgy = figgy .. k .. "|" .. k1 .. "|" .. k2 .. "|nil" .. "|" .. tostring(v2[5].toggletype) .. "\n" else figgy = figgy .. k .. "|" .. k1 .. "|" .. k2 .. "|" .. tostring(v2[5][1].Value) .. "|" .. tostring(v2[5].toggletype) .. "\n" end end end end end end end figgy = figgy .. "}\n" figgy = figgy .. "colorpickers {\n" for k, v in pairs(menu.options) do for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == TOGGLE then if v2[5] ~= nil then if v2[5][2] == COLORPICKER then local clrz = "" for k3, v3 in pairs(v2[5][1]) do clrz = clrz .. tostring(v3) .. ", " end figgy = figgy .. k .. "|" .. k1 .. "|" .. k2 .. "|" .. clrz .. "\n" end end end end end end figgy = figgy .. "}\n" figgy = figgy .. "double colorpickers {\n" for k, v in pairs(menu.options) do for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == TOGGLE then if v2[5] ~= nil then if v2[5][2] == DOUBLE_COLORPICKER then local clrz1 = "" for k3, v3 in pairs(v2[5][1][1][1]) do clrz1 = clrz1 .. tostring(v3) .. ", " end local clrz2 = "" for k3, v3 in pairs(v2[5][1][2][1]) do clrz2 = clrz2 .. tostring(v3) .. ", " end figgy = figgy .. k .. "|" .. k1 .. "|" .. k2 .. "|" .. clrz1 .. "|" .. clrz2 .. "\n" end end end end end end figgy = figgy .. "}\n" return figgy end local function LoadConfig(loadedcfg) local lines = {} for s in loadedcfg:gmatch("[^\r\n]+") do table.insert(lines, s) end if lines[1] == "bitchbot v2" then local start = nil for i, v in next, lines do if v == "toggles {" then start = i break end end local end_ = nil for i, v in next, lines do if i > start and v == "}" then end_ = i break end end for i = 1, end_ - start - 1 do local tt = string.split(lines[i + start], "|") if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil then if tt[4] == "true" then menu.options[tt[1]][tt[2]][tt[3]][1] = true else menu.options[tt[1]][tt[2]][tt[3]][1] = false end end end local start = nil for i, v in next, lines do if v == "sliders {" then start = i break end end local end_ = nil for i, v in next, lines do if i > start and v == "}" then end_ = i break end end for i = 1, end_ - start - 1 do local tt = string.split(lines[i + start], "|") if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil then menu.options[tt[1]][tt[2]][tt[3]][1] = tonumber(tt[4]) end end local start = nil for i, v in next, lines do if v == "dropboxs {" then start = i break end end local end_ = nil for i, v in next, lines do if i > start and v == "}" then end_ = i break end end for i = 1, end_ - start - 1 do local tt = string.split(lines[i + start], "|") if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil then local num = tonumber(tt[4]) if num > #menu.options[tt[1]][tt[2]][tt[3]][6] then num = #menu.options[tt[1]][tt[2]][tt[3]][6] elseif num < 0 then num = 1 end menu.options[tt[1]][tt[2]][tt[3]][1] = num end end local start = nil for i, v in next, lines do if v == "textboxs {" then start = i break end end if start ~= nil then local end_ = nil for i, v in next, lines do if i > start and v == "}" then end_ = i break end end for i = 1, end_ - start - 1 do local tt = string.split(lines[i + start], "|") if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil then menu.options[tt[1]][tt[2]][tt[3]][1] = tostring(tt[4]) end end end local start = nil for i, v in next, lines do if v == "comboboxes {" then start = i break end end local end_ = nil for i, v in next, lines do if i > start and v == "}" then end_ = i break end end for i = 1, end_ - start - 1 do local tt = string.split(lines[i + start], "|") if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil then local subs = string.split(tt[4], ",") for i, v in ipairs(subs) do local opt = string.gsub(v, " ", "") if opt == "true" then menu.options[tt[1]][tt[2]][tt[3]][1][i][2] = true else menu.options[tt[1]][tt[2]][tt[3]][1][i][2] = false end if i == #subs - 1 then break end end end end local start = nil for i, v in next, lines do if v == "keybinds {" then start = i break end end local end_ = nil for i, v in next, lines do if i > start and v == "}" then end_ = i break end end for i = 1, end_ - start - 1 do local tt = string.split(lines[i + start], "|") if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]][5] ~= nil then if tt[5] ~= nil then local toggletype = clamp(tonumber(tt[5]), 1, 4) if menu.options[tt[1]][tt[2]][tt[3]][5].toggletype ~= 0 then menu.options[tt[1]][tt[2]][tt[3]][5].toggletype = toggletype end end if tt[4] == "nil" then menu.options[tt[1]][tt[2]][tt[3]][5][1] = nil else menu.options[tt[1]][tt[2]][tt[3]][5][1] = keyz[tonumber(tt[4])] end end end local start = nil for i, v in next, lines do if v == "colorpickers {" then start = i break end end local end_ = nil for i, v in next, lines do if i > start and v == "}" then end_ = i break end end for i = 1, end_ - start - 1 do local tt = string.split(lines[i + start], "|") if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil then local subs = string.split(tt[4], ",") if type(menu.options[tt[1]][tt[2]][tt[3]][5][1][1]) == "table" then continue end for i, v in ipairs(subs) do if menu.options[tt[1]][tt[2]][tt[3]][5][1][i] == nil then break end local opt = string.gsub(v, " ", "") menu.options[tt[1]][tt[2]][tt[3]][5][1][i] = tonumber(opt) if i == #subs - 1 then break end end end end local start = nil for i, v in next, lines do if v == "double colorpickers {" then start = i break end end local end_ = nil for i, v in next, lines do if i > start and v == "}" then end_ = i break end end for i = 1, end_ - start - 1 do local tt = string.split(lines[i + start], "|") if menu.options[tt[1]] ~= nil and menu.options[tt[1]][tt[2]] ~= nil and menu.options[tt[1]][tt[2]][tt[3]] ~= nil then local subs = { string.split(tt[4], ","), string.split(tt[5], ",") } for i, v in ipairs(subs) do if type(menu.options[tt[1]][tt[2]][tt[3]][5][1][i]) == "number" then break end for i1, v1 in ipairs(v) do if menu.options[tt[1]][tt[2]][tt[3]][5][1][i][1][i1] == nil then break end local opt = string.gsub(v1, " ", "") menu.options[tt[1]][tt[2]][tt[3]][5][1][i][1][i1] = tonumber(opt) if i1 == #v - 1 then break end end end end end for k, v in pairs(menu.options) do for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == TOGGLE then if not v2[1] then for i = 0, 3 do v2[4][i + 1].Color = ColorRange(i, { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 3, color = RGB(30, 30, 30) }, }) end else for i = 0, 3 do v2[4][i + 1].Color = ColorRange(i, { [1] = { start = 0, color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) }, [2] = { start = 3, color = RGB(menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40), }, }) end end if v2[5] ~= nil then if v2[5][2] == KEYBIND then v2[5][4][2].Color = RGB(30, 30, 30) v2[5][4][1].Text = KeyEnumToName(v2[5][1]) elseif v2[5][2] == COLORPICKER then v2[5][4][1].Color = RGB(v2[5][1][1], v2[5][1][2], v2[5][1][3]) for i = 2, 3 do v2[5][4][i].Color = RGB(v2[5][1][1] - 40, v2[5][1][2] - 40, v2[5][1][3] - 40) end elseif v2[5][2] == DOUBLE_COLORPICKER then if type(v2[5][1][1]) == "table" then for i, v3 in ipairs(v2[5][1]) do v3[4][1].Color = RGB(v3[1][1], v3[1][2], v3[1][3]) for i1 = 2, 3 do v3[4][i1].Color = RGB(v3[1][1] - 40, v3[1][2] - 40, v3[1][3] - 40) end end end end end elseif v2[2] == SLIDER then if v2[1] < v2[6][1] then v2[1] = v2[6][1] elseif v2[1] > v2[6][2] then v2[1] = v2[6][2] end local decplaces = v2.decimal and string.rep("0", math.log(1 / v2.decimal) / math.log(10)) if decplaces and math.abs(v2[1]) < v2.decimal then v2[1] = 0 end v2[4][5].Text = v2.custom[v2[1]] or (v2[1] == math.floor(v2[1]) and v2.decimal) and tostring(v2[1]) .. "." .. decplaces .. v2[4][6] or tostring(v2[1]) .. v2[4][6] -- v2[4][5].Text = tostring(v2[1]).. v2[4][6] for i = 1, 4 do v2[4][i].Size = Vector2.new((v2[3][3] - 4) * ((v2[1] - v2[6][1]) / (v2[6][2] - v2[6][1])), 2) end elseif v2[2] == DROPBOX then if v2[6][v2[1]] == nil then v2[1] = 1 end v2[4][1].Text = v2[6][v2[1]] elseif v2[2] == COMBOBOX then local textthing = "" for k3, v3 in pairs(v2[1]) do if v3[2] then if textthing == "" then textthing = v3[1] else textthing = textthing .. ", " .. v3[1] end end end textthing = textthing ~= "" and textthing or "None" textthing = string_cut(textthing, 25) v2[4][1].Text = textthing elseif v2[2] == TEXTBOX then v2[4].Text = v2[1] end end end end end end function menu.saveconfig() local figgy = SaveCurSettings() writefile("bitchbot/".. menu.game.. "/".. menu.options["Settings"]["Configuration"]["ConfigName"][1].. ".bb", figgy) CreateNotification('Saved "' .. menu.options["Settings"]["Configuration"]["ConfigName"][1] .. '.bb"!') UpdateConfigs() end function menu.loadconfig() local configname = "bitchbot/".. menu.game.. "/".. menu.options["Settings"]["Configuration"]["ConfigName"][1].. ".bb" if not isfile(configname) then CreateNotification('"'.. menu.options["Settings"]["Configuration"]["ConfigName"][1].. '.bb" is not a valid config.') return end local curcfg = SaveCurSettings() local loadedcfg = readfile(configname) if pcall(LoadConfig, loadedcfg) then CreateNotification('Loaded "' .. menu.options["Settings"]["Configuration"]["ConfigName"][1] .. '.bb"!') else LoadConfig(curcfg) CreateNotification( 'There was an issue loading "' .. menu.options["Settings"]["Configuration"]["ConfigName"][1] .. '.bb"' ) end end local function buttonpressed(bp) if bp.doubleclick then if buttonsInQue[bp] and tick() - buttonsInQue[bp] < doubleclickDelay then buttonsInQue[bp] = 0 else for button, time in next, buttonsInQue do buttonsInQue[button] = 0 end buttonsInQue[bp] = tick() return end end FireEvent("bb_buttonpressed", bp.tab, bp.groupbox, bp.name) --ButtonPressed:Fire(bp.tab, bp.groupbox, bp.name) if bp == menu.options["Settings"]["Cheat Settings"]["Unload Cheat"] then menu.fading = true wait() menu:unload() elseif bp == menu.options["Settings"]["Cheat Settings"]["Set Clipboard Game ID"] then setclipboard(game.JobId) CreateNotification("Set Clipboard Game ID! (".. tostring(game.JobId)..")") elseif bp == menu.options["Settings"]["Configuration"]["Save Config"] then menu.saveconfig() elseif bp == menu.options["Settings"]["Configuration"]["Delete Config"] then delfile("bitchbot/".. menu.game.. "/".. menu.options["Settings"]["Configuration"]["ConfigName"][1].. ".bb") CreateNotification('Deleted "' .. menu.options["Settings"]["Configuration"]["ConfigName"][1] .. '.bb"!') UpdateConfigs() elseif bp == menu.options["Settings"]["Configuration"]["Load Config"] then menu.loadconfig() end end local function MouseButton2Event() if menu.colorPickerOpen or menu.dropbox_open then return end for k, v in pairs(menu.options) do if menu.tabnames[menu.activetab] == k then for k1, v1 in pairs(v) do local pass = true for k3, v3 in pairs(menu.multigroups) do if k == k3 then for k4, v4 in pairs(v3) do for k5, v5 in pairs(v4.vals) do if k1 == k5 then pass = v5 end end end end end if pass then for k2, v2 in pairs(v1) do --ANCHOR more menu bs if v2[2] == TOGGLE then if v2[5] ~= nil then if v2[5][2] == KEYBIND then if menu:MouseInMenu(v2[5][3][1], v2[5][3][2], 44, 16) then if menu.keybind_open ~= v2 and v2[5].toggletype ~= 0 then menu.keybind_open = v2 menu:SetKeybindSelect( true, v2[5][3][1] + menu.x, v2[5][3][2] + 16 + menu.y, v2[5].toggletype ) else menu.keybind_open = nil menu:SetKeybindSelect(false, 20, 20, 1) end end end end end end end end end end end local function menucolor() if menu.open then if menu:GetVal("Settings", "Cheat Settings", "Menu Accent") then local clr = menu:GetVal("Settings", "Cheat Settings", "Menu Accent", COLOR, true) menu.mc = { clr.R * 255, clr.G * 255, clr.B * 255 } else menu.mc = { 155, 155, 255 } end menu:SetColor(menu.mc[1], menu.mc[2], menu.mc[3]) local wme = menu:GetVal("Visuals", "Interface", "Watermark") for k, v in pairs(menu.watermark.rect) do v.Visible = wme end menu.watermark.text[1].Visible = wme end end local function MouseButton1Event() --ANCHOR menu mouse down func menu.dropbox_open = nil menu.textboxopen = false menu:SetKeybindSelect(false, 20, 20, 1) if menu.keybind_open then local key = menu.keybind_open local foundkey = false for i = 1, 4 do if menu:MouseInMenu(key[5][3][1], key[5][3][2] + 16 + ((i - 1) * 21), 70, 21) then foundkey = true menu.keybind_open[5].toggletype = i menu.keybind_open[5].relvalue = false end end menu.keybind_open = nil if foundkey then return end end for k, v in pairs(menu.options) do for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == DROPBOX and v2[5] then if not menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 24 * (#v2[6] + 1) + 3) then menu:SetDropBox(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" }) v2[5] = false else menu.dropbox_open = v2 end end if v2[2] == COMBOBOX and v2[5] then if not menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 24 * (#v2[1] + 1) + 3) then menu:SetDropBox(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" }) v2[5] = false else menu.dropbox_open = v2 end end if v2[2] == TOGGLE then if v2[5] ~= nil then if v2[5][2] == KEYBIND then if v2[5][5] == true then v2[5][4][2].Color = RGB(30, 30, 30) v2[5][5] = false end elseif v2[5][2] == COLORPICKER then if v2[5][5] == true then if not menu:MouseInColorPicker(0, 0, cp.w, cp.h) then if menu.colorPickerOpen then local tempclr = cp.oldcolor menu.colorPickerOpen[4][1].Color = tempclr for i = 2, 3 do menu.colorPickerOpen[4][i].Color = RGB( math.floor(tempclr.R * 255) - 40, math.floor(tempclr.G * 255) - 40, math.floor(tempclr.B * 255) - 40 ) end if cp.alpha then menu.colorPickerOpen[1] = { math.floor(tempclr.R * 255), math.floor(tempclr.G * 255), math.floor(tempclr.B * 255), cp.oldcoloralpha, } else menu.colorPickerOpen[1] = { math.floor(tempclr.R * 255), math.floor(tempclr.G * 255), math.floor(tempclr.B * 255), } end end menu:SetColorPicker(false, { 255, 0, 0 }, nil, false, "hahaha", 400, 200) v2[5][5] = false menu.colorPickerOpen = nil -- close colorpicker end end elseif v2[5][2] == DOUBLE_COLORPICKER then for k3, v3 in pairs(v2[5][1]) do if v3[5] == true then if not menu:MouseInColorPicker(0, 0, cp.w, cp.h) then if menu.colorPickerOpen then local tempclr = cp.oldcolor menu.colorPickerOpen[4][1].Color = tempclr for i = 2, 3 do menu.colorPickerOpen[4][i].Color = RGB( math.floor(tempclr.R * 255) - 40, math.floor(tempclr.G * 255) - 40, math.floor(tempclr.B * 255) - 40 ) end if cp.alpha then menu.colorPickerOpen[1] = { math.floor(tempclr.R * 255), math.floor(tempclr.G * 255), math.floor(tempclr.B * 255), cp.oldcoloralpha, } else menu.colorPickerOpen[1] = { math.floor(tempclr.R * 255), math.floor(tempclr.G * 255), math.floor(tempclr.B * 255), } end end menu:SetColorPicker(false, { 255, 0, 0 }, nil, false, "hahaha", 400, 200) v3[5] = false menu.colorPickerOpen = nil -- close colorpicker end end end end end end if v2[2] == TEXTBOX and v2[5] then v2[4].Color = RGB(255, 255, 255) v2[5] = false v2[4].Text = v2[1] end end end end for i = 1, #menutable do if menu:MouseInMenu( 10 + ((i - 1) * math.floor((menu.w - 20) / #menutable)), 27, math.floor((menu.w - 20) / #menutable), 32 ) then menu.activetab = i setActiveTab(menu.activetab) menu:SetMenuPos(menu.x, menu.y) menu:SetToolTip(nil, nil, nil, false) end end if menu.colorPickerOpen then if menu:MouseInColorPicker(197, cp.h - 25, 75, 20) then --apply newcolor to oldcolor local tempclr = Color3.fromHSV(cp.hsv.h, cp.hsv.s, cp.hsv.v) menu.colorPickerOpen[4][1].Color = tempclr for i = 2, 3 do menu.colorPickerOpen[4][i].Color = RGB( math.floor(tempclr.R * 255) - 40, math.floor(tempclr.G * 255) - 40, math.floor(tempclr.B * 255) - 40 ) end if cp.alpha then menu.colorPickerOpen[1] = { math.floor(tempclr.R * 255), math.floor(tempclr.G * 255), math.floor(tempclr.B * 255), cp.hsv.a, } else menu.colorPickerOpen[1] = { math.floor(tempclr.R * 255), math.floor(tempclr.G * 255), math.floor(tempclr.B * 255), } end menu.colorPickerOpen = nil menu:SetColorPicker(false, { 255, 0, 0 }, nil, false, "hahaha", 400, 200) end if menu:MouseInColorPicker(264, 2, 14, 14) then -- x out local tempclr = cp.oldcolor menu.colorPickerOpen[4][1].Color = tempclr for i = 2, 3 do menu.colorPickerOpen[4][i].Color = RGB( math.floor(tempclr.R * 255) - 40, math.floor(tempclr.G * 255) - 40, math.floor(tempclr.B * 255) - 40 ) end if cp.alpha then menu.colorPickerOpen[1] = { math.floor(tempclr.R * 255), math.floor(tempclr.G * 255), math.floor(tempclr.B * 255), cp.oldcoloralpha, } else menu.colorPickerOpen[1] = { math.floor(tempclr.R * 255), math.floor(tempclr.G * 255), math.floor(tempclr.B * 255), } end menu.colorPickerOpen = nil menu:SetColorPicker(false, { 255, 0, 0 }, nil, false, "hahaha", 400, 200) end if menu:MouseInColorPicker(10, 23, 160, 160) then cp.dragging_m = true --set value and saturation elseif menu:MouseInColorPicker(176, 23, 14, 160) then cp.dragging_r = true --set hue elseif menu:MouseInColorPicker(10, 189, 160, 14) and cp.alpha then cp.dragging_b = true --set transparency end if menu:MouseInColorPicker(197, 37, 75, 20) then menu.copied_clr = newcolor.Color --copy newcolor elseif menu:MouseInColorPicker(197, 57, 75, 20) then --paste newcolor if menu.copied_clr ~= nil then local cpa = false local clrtable = { menu.copied_clr.R * 255, menu.copied_clr.G * 255, menu.copied_clr.B * 255 } if menu.colorPickerOpen[1][4] ~= nil then cpa = true table.insert(clrtable, menu.colorPickerOpen[1][4]) end menu:SetColorPicker(true, clrtable, menu.colorPickerOpen, cpa, menu.colorPickerOpen[6], cp.x, cp.y) cp.oldclr = menu.colorPickerOpen[4][1].Color local oldclr = cp.oldclr if menu.colorPickerOpen[1][4] ~= nil then set_oldcolor(oldclr.R * 255, oldclr.G * 255, oldclr.B * 255, menu.colorPickerOpen[1][4]) else set_oldcolor(oldclr.R * 255, oldclr.G * 255, oldclr.B * 255) end end end if menu:MouseInColorPicker(197, 91, 75, 40) then menu.copied_clr = oldcolor.Color --copy oldcolor end else for k, v in pairs(menu.multigroups) do if menu.tabnames[menu.activetab] == k then for k1, v1 in pairs(v) do local c_pos = v1.drawn.click_pos --local selected = v1.drawn.bar local selected_pos = v1.drawn.barpos for k2, v2 in pairs(v1.drawn.click_pos) do if menu:MouseInMenu(v2.x, v2.y, v2.width, v2.height) then for _k, _v in pairs(v1.vals) do if _k == v2.name then v1.vals[_k] = true else v1.vals[_k] = false end end local settab = v2.num for _k, _v in pairs(v1.drawn.bar) do menu.postable[_v.postable][2] = selected_pos[settab].pos _v.drawn.Size = Vector2.new(selected_pos[settab].length, 2) end for i, v in pairs(v1.drawn.nametext) do if i == v2.num then v.Color = RGB(255, 255, 255) else v.Color = RGB(170, 170, 170) end end menu:setMenuVisible(true) setActiveTab(menu.activetab) menu:SetMenuPos(menu.x, menu.y) end end end end end local newdropbox_open for k, v in pairs(menu.options) do if menu.tabnames[menu.activetab] == k then for k1, v1 in pairs(v) do local pass = true for k3, v3 in pairs(menu.multigroups) do if k == k3 then for k4, v4 in pairs(v3) do for k5, v5 in pairs(v4.vals) do if k1 == k5 then pass = v5 end end end end end if pass then for k2, v2 in pairs(v1) do if v2[2] == TOGGLE and not menu.dropbox_open then if menu:MouseInMenu(v2[3][1], v2[3][2], 30 + v2[4][5].TextBounds.x, 16) then if v2[6] then if menu:GetVal( "Settings", "Cheat Settings", "Allow Unsafe Features" ) and v2[1] == false then v2[1] = true else v2[1] = false end else v2[1] = not v2[1] end if not v2[1] then for i = 0, 3 do v2[4][i + 1].Color = ColorRange(i, { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 3, color = RGB(30, 30, 30) }, }) end else for i = 0, 3 do v2[4][i + 1].Color = ColorRange(i, { [1] = { start = 0, color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]), }, [2] = { start = 3, color = RGB( menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40 ), }, }) end end --TogglePressed:Fire(k1, k2, v2) FireEvent("bb_togglepressed", k1, k2, v2) end if v2[5] ~= nil then if v2[5][2] == KEYBIND then if menu:MouseInMenu(v2[5][3][1], v2[5][3][2], 44, 16) then v2[5][4][2].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) v2[5][5] = true end elseif v2[5][2] == COLORPICKER then if menu:MouseInMenu(v2[5][3][1], v2[5][3][2], 28, 14) then v2[5][5] = true menu.colorPickerOpen = v2[5] menu.colorPickerOpen = v2[5] if v2[5][1][4] ~= nil then menu:SetColorPicker( true, v2[5][1], v2[5], true, v2[5][6], LOCAL_MOUSE.x, LOCAL_MOUSE.y + 36 ) else menu:SetColorPicker( true, v2[5][1], v2[5], false, v2[5][6], LOCAL_MOUSE.x, LOCAL_MOUSE.y + 36 ) end end elseif v2[5][2] == DOUBLE_COLORPICKER then for k3, v3 in pairs(v2[5][1]) do if menu:MouseInMenu(v3[3][1], v3[3][2], 28, 14) then v3[5] = true menu.colorPickerOpen = v3 menu.colorPickerOpen = v3 if v3[1][4] ~= nil then menu:SetColorPicker( true, v3[1], v3, true, v3[6], LOCAL_MOUSE.x, LOCAL_MOUSE.y + 36 ) else menu:SetColorPicker( true, v3[1], v3, false, v3[6], LOCAL_MOUSE.x, LOCAL_MOUSE.y + 36 ) end end end end end elseif v2[2] == SLIDER and not menu.dropbox_open then if menu:MouseInMenu(v2[7][1], v2[7][2], 22, 13) then local stepval = 1 if v2.stepsize then stepval = v2.stepsize end if menu:modkeydown("shift", "left") then stepval = v2.shift_stepsize or 0.1 end if menu:MouseInMenu(v2[7][1], v2[7][2], 11, 13) then v2[1] -= stepval elseif menu:MouseInMenu(v2[7][1] + 11, v2[7][2], 11, 13) then v2[1] += stepval end if v2[1] < v2[6][1] then v2[1] = v2[6][1] elseif v2[1] > v2[6][2] then v2[1] = v2[6][2] end local decplaces = v2.decimal and string.rep("0", math.log(1 / v2.decimal) / math.log(10)) if decplaces and math.abs(v2[1]) < v2.decimal then v2[1] = 0 end v2[4][5].Text = v2.custom[v2[1]] or (v2[1] == math.floor(v2[1]) and v2.decimal) and tostring(v2[1]) .. "." .. decplaces .. v2[4][6] or tostring(v2[1]) .. v2[4][6] for i = 1, 4 do v2[4][i].Size = Vector2.new( (v2[3][3] - 4) * ((v2[1] - v2[6][1]) / (v2[6][2] - v2[6][1])), 2 ) end elseif menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 28) then v2[5] = true end elseif v2[2] == DROPBOX then if menu.dropbox_open then if v2 ~= menu.dropbox_open then continue end end if menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 36) then if not v2[5] then v2[5] = menu:SetDropBox( true, v2[3][1] + menu.x + 1, v2[3][2] + menu.y + 13, v2[3][3], v2[1], v2[6] ) newdropbox_open = v2 else menu:SetDropBox(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" }) v2[5] = false newdropbox_open = nil end elseif menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 24 * (#v2[6] + 1) + 3) and v2[5] then for i = 1, #v2[6] do if menu:MouseInMenu( v2[3][1], v2[3][2] + 36 + ((i - 1) * 21), v2[3][3], 21 ) then v2[4][1].Text = v2[6][i] v2[1] = i menu:SetDropBox(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" }) v2[5] = false newdropbox_open = nil end end if v2 == menu.options["Settings"]["Configuration"]["Configs"] then local textbox = menu.options["Settings"]["Configuration"]["ConfigName"] local relconfigs = GetConfigs() textbox[1] = relconfigs[menu.options["Settings"]["Configuration"]["Configs"][1]] textbox[4].Text = textbox[1] end end elseif v2[2] == COMBOBOX then if menu.dropbox_open then if v2 ~= menu.dropbox_open then continue end end if menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 36) then if not v2[5] then v2[5] = set_comboboxthingy( true, v2[3][1] + menu.x + 1, v2[3][2] + menu.y + 13, v2[3][3], v2[1], v2[6] ) newdropbox_open = v2 else menu:SetDropBox(false, 400, 200, 160, 1, { "HI q", "HI q", "HI q" }) v2[5] = false newdropbox_open = nil end elseif menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 24 * (#v2[1] + 1) + 3) and v2[5] then for i = 1, #v2[1] do if menu:MouseInMenu( v2[3][1], v2[3][2] + 36 + ((i - 1) * 22), v2[3][3], 23 ) then v2[1][i][2] = not v2[1][i][2] local textthing = "" for k, v in pairs(v2[1]) do if v[2] then if textthing == "" then textthing = v[1] else textthing = textthing .. ", " .. v[1] end end end textthing = textthing ~= "" and textthing or "None" textthing = string_cut(textthing, 25) v2[4][1].Text = textthing set_comboboxthingy( true, v2[3][1] + menu.x + 1, v2[3][2] + menu.y + 13, v2[3][3], v2[1], v2[6] ) end end end elseif v2[2] == BUTTON and not menu.dropbox_open then if menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 22) then if not v2[1] then buttonpressed(v2) if k2 == "Unload Cheat" then return end for i = 0, 8 do v2[4][i + 1].Color = ColorRange(i, { [1] = { start = 0, color = RGB(35, 35, 35) }, [2] = { start = 8, color = RGB(50, 50, 50) }, }) end v2[1] = true end end elseif v2[2] == TEXTBOX and not menu.dropbox_open then if menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 22) then if not v2[5] then menu.textboxopen = v2 v2[4].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) v2[5] = true end end elseif v2[2] == "list" then if #v2[5] > v2[6] then for i = 1, v2[6] do if menu:MouseInMenu(v2[8][1], v2[8][2] + (i * 22) - 5, v2[8][3], 22) then if v2[1] == tostring(v2[5][i + v2[3] - 1][1][1]) then v2[1] = nil else v2[1] = tostring(v2[5][i + v2[3] - 1][1][1]) end end end else for i = 1, #v2[5] do if menu:MouseInMenu(v2[8][1], v2[8][2] + (i * 22) - 5, v2[8][3], 22) then if v2[1] == tostring(v2[5][i + v2[3] - 1][1][1]) then v2[1] = nil else v2[1] = tostring(v2[5][i + v2[3] - 1][1][1]) end end end end end end end end end end menu.dropbox_open = newdropbox_open end for k, v in pairs(menu.options) do for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == TOGGLE then if v2[6] then if not menu:GetVal("Settings", "Cheat Settings", "Allow Unsafe Features") then v2[1] = false for i = 0, 3 do v2[4][i + 1].Color = ColorRange(i, { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 3, color = RGB(30, 30, 30) }, }) end end end end end end end menucolor() end local function mousebutton1upfunc() cp.dragging_m = false cp.dragging_r = false cp.dragging_b = false for k, v in pairs(menu.options) do if menu.tabnames[menu.activetab] == k then for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == SLIDER and v2[5] then v2[5] = false end if v2[2] == BUTTON and v2[1] then for i = 0, 8 do v2[4][i + 1].Color = ColorRange(i, { [1] = { start = 0, color = RGB(50, 50, 50) }, [2] = { start = 8, color = RGB(35, 35, 35) }, }) end v2[1] = false end end end end end end local clickspot_x, clickspot_y, original_menu_x, original_menu_y = 0, 0, 0, 0 menu.connections.mwf = LOCAL_MOUSE.WheelForward:Connect(function() if menu.open then for k, v in pairs(menu.options) do if menu.tabnames[menu.activetab] == k then for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == "list" then if v2[3] > 1 then v2[3] -= 1 end end end end end end end end) menu.connections.mwb = LOCAL_MOUSE.WheelBackward:Connect(function() if menu.open then for k, v in pairs(menu.options) do if menu.tabnames[menu.activetab] == k then for k1, v1 in pairs(v) do for k2, v2 in pairs(v1) do if v2[2] == "list" then if v2[5][v2[3] + v2[6]] ~= nil then v2[3] += 1 end end end end end end end end) function menu:setMenuAlpha(transparency) for k, v in pairs(bbmouse) do v.Transparency = transparency end for k, v in pairs(bbmenu) do v.Transparency = transparency end for k, v in pairs(tabz[menu.activetab]) do v.Transparency = transparency end end function menu:setMenuVisible(visible) for k, v in pairs(bbmouse) do v.Visible = visible end for k, v in pairs(bbmenu) do v.Visible = visible end for k, v in pairs(tabz[menu.activetab]) do v.Visible = visible end if visible then for k, v in pairs(menu.multigroups) do if menu.tabnames[menu.activetab] == k then for k1, v1 in pairs(v) do for k2, v2 in pairs(v1.vals) do for k3, v3 in pairs(menu.mgrouptabz[k][k2]) do v3.Visible = v2 end end end end end end end menu:setMenuAlpha(0) menu:setMenuVisible(false) menu.lastActive = true menu.open = false menu.windowactive = true menu.connections.mousemoved = MouseMoved:connect(function(b) menu.windowactive = iswindowactive() or b end) local function renderSteppedMenu(fdt) if cp.dragging_m or cp.dragging_r or cp.dragging_b then menucolor() end menu.dt = fdt if menu.unloaded then return end SCREEN_SIZE = Camera.ViewportSize if bbmouse[#bbmouse-1] then if menu.inmenu and not menu.inmiddlemenu and not menu.intabs then bbmouse[#bbmouse-1].Visible = true bbmouse[#bbmouse-1].Transparency = 1 else bbmouse[#bbmouse-1].Visible = false end end menu.lastActive = menu.windowactive for button, time in next, buttonsInQue do if time and tick() - time < doubleclickDelay then button[4].text.Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) button[4].text.Text = "Confirm?" else button[4].text.Color = Color3.new(1, 1, 1) button[4].text.Text = button.name end end if menu.open then if menu.backspaceheld then local dt = tick() - menu.backspacetime if dt > 0.4 then menu.backspaceflags += 1 if menu.backspaceflags % 5 == 0 then local textbox = menu.textboxopen textbox[1] = string.sub(textbox[1], 0, #textbox[1] - 1) textbox[4].Text = textbox[1] .. "|" end end end end if menu.fading then if menu.open then menu.timesincefade = tick() - menu.fadestart menu.fade_amount = 1 - (menu.timesincefade * 10) menu:SetPlusMinus(0, 20, 20) menu:setMenuAlpha(menu.fade_amount) if menu.fade_amount <= 0 then menu.open = false menu.fading = false menu:setMenuAlpha(0) menu:setMenuVisible(false) else menu:setMenuAlpha(menu.fade_amount) end else menu:setMenuVisible(true) setActiveTab(menu.activetab) menu.timesincefade = tick() - menu.fadestart menu.fade_amount = (menu.timesincefade * 10) menu.fadeamount = menu.fade_amount menu:setMenuAlpha(menu.fade_amount) if menu.fade_amount >= 1 then menu.open = true menu.fading = false menu:setMenuAlpha(1) else menu:setMenuAlpha(menu.fade_amount) end end end menu:SetMousePosition(LOCAL_MOUSE.x, LOCAL_MOUSE.y) local settooltip = true if menu.open or menu.fading then menu:SetPlusMinus(0, 20, 20) for k, v in pairs(menu.options) do if menu.tabnames[menu.activetab] == k then for k1, v1 in pairs(v) do local pass = true for k3, v3 in pairs(menu.multigroups) do if k == k3 then for k4, v4 in pairs(v3) do for k5, v5 in pairs(v4.vals) do if k1 == k5 then pass = v5 end end end end end if pass then for k2, v2 in pairs(v1) do if v2[2] == TOGGLE then if not menu.dropbox_open and not menu.colorPickerOpen then if menu.open and menu:MouseInMenu(v2[3][1], v2[3][2], 30 + v2[4][5].TextBounds.x, 16) then if v2.tooltip and settooltip then menu:SetToolTip( menu.x + v2[3][1], menu.y + v2[3][2] + 18, v2.tooltip, true, fdt ) settooltip = false end end end elseif v2[2] == SLIDER then if v2[5] then local new_val = (v2[6][2] - v2[6][1]) * ( ( LOCAL_MOUSE.x - menu.x - v2[3][1] ) / v2[3][3] ) v2[1] = ( not v2.decimal and math.floor(new_val) or math.floor(new_val / v2.decimal) * v2.decimal ) + v2[6][1] if v2[1] < v2[6][1] then v2[1] = v2[6][1] elseif v2[1] > v2[6][2] then v2[1] = v2[6][2] end local decplaces = v2.decimal and string.rep("0", math.log(1 / v2.decimal) / math.log(10)) if decplaces and math.abs(v2[1]) < v2.decimal then v2[1] = 0 end v2[4][5].Text = v2.custom[v2[1]] or (v2[1] == math.floor(v2[1]) and v2.decimal) and tostring(v2[1]) .. "." .. decplaces .. v2[4][6] or tostring(v2[1]) .. v2[4][6] for i = 1, 4 do v2[4][i].Size = Vector2.new( (v2[3][3] - 4) * ((v2[1] - v2[6][1]) / (v2[6][2] - v2[6][1])), 2 ) end menu:SetPlusMinus(1, v2[7][1], v2[7][2]) else if not menu.dropbox_open then if menu:MouseInMenu(v2[3][1], v2[3][2], v2[3][3], 28) then if menu:MouseInMenu(v2[7][1], v2[7][2], 22, 13) then if menu:MouseInMenu(v2[7][1], v2[7][2], 11, 13) then menu:SetPlusMinus(2, v2[7][1], v2[7][2]) elseif menu:MouseInMenu(v2[7][1] + 11, v2[7][2], 11, 13) then menu:SetPlusMinus(3, v2[7][1], v2[7][2]) end else menu:SetPlusMinus(1, v2[7][1], v2[7][2]) end end end end elseif v2[2] == "list" then for k3, v3 in pairs(v2[4].liststuff) do for i, v4 in ipairs(v3) do for i1, v5 in ipairs(v4) do v5.Visible = false end end end for i = 1, v2[6] do if v2[5][i + v2[3] - 1] ~= nil then for i1 = 1, v2[7] do v2[4].liststuff.words[i][i1].Text = v2[5][i + v2[3] - 1][i1][1] v2[4].liststuff.words[i][i1].Visible = true if v2[5][i + v2[3] - 1][i1][1] == v2[1] and i1 == 1 then if menu.options["Settings"]["Cheat Settings"]["Menu Accent"][1] then local clr = menu.options["Settings"]["Cheat Settings"]["Menu Accent"][5][1] v2[4].liststuff.words[i][i1].Color = RGB(clr[1], clr[2], clr[3]) else v2[4].liststuff.words[i][i1].Color = RGB(menu.mc[1], menu.mc[2], menu.mc[3]) end else v2[4].liststuff.words[i][i1].Color = v2[5][i + v2[3] - 1][i1][2] end end for k3, v3 in pairs(v2[4].liststuff.rows[i]) do v3.Visible = true end elseif v2[3] > 1 then v2[3] -= 1 end end if v2[3] == 1 then for k3, v3 in pairs(v2[4].uparrow) do if v3.Visible then v3.Visible = false end end else for k3, v3 in pairs(v2[4].uparrow) do if not v3.Visible then v3.Visible = true menu:SetMenuPos(menu.x, menu.y) end end end if v2[5][v2[3] + v2[6]] == nil then for k3, v3 in pairs(v2[4].downarrow) do if v3.Visible then v3.Visible = false end end else for k3, v3 in pairs(v2[4].downarrow) do if not v3.Visible then v3.Visible = true menu:SetMenuPos(menu.x, menu.y) end end end end end end end end end menu.inmenu = LOCAL_MOUSE.x > menu.x and LOCAL_MOUSE.x < menu.x + menu.w and LOCAL_MOUSE.y > menu.y - 32 and LOCAL_MOUSE.y < menu.y + menu.h - 34 menu.intabs = LOCAL_MOUSE.x > menu.x + 9 and LOCAL_MOUSE.x < menu.x + menu.w - 9 and LOCAL_MOUSE.y > menu.y - 9 and LOCAL_MOUSE.y < menu.y + 24 menu.inmiddlemenu = LOCAL_MOUSE.x > menu.x + 18 and LOCAL_MOUSE.x < menu.x + menu.w - 18 and LOCAL_MOUSE.y > menu.y + 33 and LOCAL_MOUSE.y < menu.y + menu.h - 56 if ( ( menu.inmenu and not menu.intabs and not menu.inmiddlemenu ) or menu.dragging ) and not menu.dontdrag then if menu.mousedown and not menu.colorPickerOpen and not dropbox_open then if not menu.dragging then clickspot_x = LOCAL_MOUSE.x clickspot_y = LOCAL_MOUSE.y - 36 original_menu_X = menu.x original_menu_y = menu.y menu.dragging = true end menu.x = (original_menu_X - clickspot_x) + LOCAL_MOUSE.x menu.y = (original_menu_y - clickspot_y) + LOCAL_MOUSE.y - 36 if menu.y < 0 then menu.y = 0 end if menu.x < -menu.w / 4 * 3 then menu.x = -menu.w / 4 * 3 end if menu.x + menu.w / 4 > SCREEN_SIZE.x then menu.x = SCREEN_SIZE.x - menu.w / 4 end if menu.y > SCREEN_SIZE.y - 20 then menu.y = SCREEN_SIZE.y - 20 end menu:SetMenuPos(menu.x, menu.y) else menu.dragging = false end elseif menu.mousedown then menu.dontdrag = true elseif not menu.mousedown then menu.dontdrag = false end if menu.colorPickerOpen then if cp.dragging_m then menu:SetDragBarM( clamp(LOCAL_MOUSE.x, cp.x + 12, cp.x + 167) - 2, clamp(LOCAL_MOUSE.y + 36, cp.y + 25, cp.y + 180) - 2 ) cp.hsv.s = (clamp(LOCAL_MOUSE.x, cp.x + 12, cp.x + 167) - cp.x - 12) / 155 cp.hsv.v = 1 - ((clamp(LOCAL_MOUSE.y + 36, cp.y + 23, cp.y + 178) - cp.y - 23) / 155) newcolor.Color = Color3.fromHSV(cp.hsv.h, cp.hsv.s, cp.hsv.v) local tempclr = Color3.fromHSV(cp.hsv.h, cp.hsv.s, cp.hsv.v) menu.colorPickerOpen[4][1].Color = tempclr for i = 2, 3 do menu.colorPickerOpen[4][i].Color = RGB( math.floor(tempclr.R * 255) - 40, math.floor(tempclr.G * 255) - 40, math.floor(tempclr.B * 255) - 40 ) end if cp.alpha then menu.colorPickerOpen[1] = { math.floor(tempclr.R * 255), math.floor(tempclr.G * 255), math.floor(tempclr.B * 255), cp.hsv.a, } else menu.colorPickerOpen[1] = { math.floor(tempclr.R * 255), math.floor(tempclr.G * 255), math.floor(tempclr.B * 255), } end elseif cp.dragging_r then menu:SetDragBarR(cp.x + 175, clamp(LOCAL_MOUSE.y + 36, cp.y + 23, cp.y + 178)) maincolor.Color = Color3.fromHSV( 1 - ((clamp(LOCAL_MOUSE.y + 36, cp.y + 23, cp.y + 178) - cp.y - 23) / 155), 1, 1 ) cp.hsv.h = 1 - ((clamp(LOCAL_MOUSE.y + 36, cp.y + 23, cp.y + 178) - cp.y - 23) / 155) newcolor.Color = Color3.fromHSV(cp.hsv.h, cp.hsv.s, cp.hsv.v) local tempclr = Color3.fromHSV(cp.hsv.h, cp.hsv.s, cp.hsv.v) menu.colorPickerOpen[4][1].Color = tempclr for i = 2, 3 do menu.colorPickerOpen[4][i].Color = RGB( math.floor(tempclr.R * 255) - 40, math.floor(tempclr.G * 255) - 40, math.floor(tempclr.B * 255) - 40 ) end if cp.alpha then menu.colorPickerOpen[1] = { math.floor(tempclr.R * 255), math.floor(tempclr.G * 255), math.floor(tempclr.B * 255), cp.hsv.a, } else menu.colorPickerOpen[1] = { math.floor(tempclr.R * 255), math.floor(tempclr.G * 255), math.floor(tempclr.B * 255), } end elseif cp.dragging_b then local tempclr = Color3.fromHSV(cp.hsv.h, cp.hsv.s, cp.hsv.v) menu.colorPickerOpen[4][1].Color = tempclr for i = 2, 3 do menu.colorPickerOpen[4][i].Color = RGB( math.floor(tempclr.R * 255) - 40, math.floor(tempclr.G * 255) - 40, math.floor(tempclr.B * 255) - 40 ) end if cp.alpha then menu.colorPickerOpen[1] = { math.floor(tempclr.R * 255), math.floor(tempclr.G * 255), math.floor(tempclr.B * 255), cp.hsv.a, } else menu.colorPickerOpen[1] = { math.floor(tempclr.R * 255), math.floor(tempclr.G * 255), math.floor(tempclr.B * 255), } end menu:SetDragBarB(clamp(LOCAL_MOUSE.x, cp.x + 10, cp.x + 168), cp.y + 188) newcolor.Transparency = (clamp(LOCAL_MOUSE.x, cp.x + 10, cp.x + 168) - cp.x - 10) / 158 cp.hsv.a = math.floor(((clamp(LOCAL_MOUSE.x, cp.x + 10, cp.x + 168) - cp.x - 10) / 158) * 255) else local setvisnew = menu:MouseInColorPicker(197, 37, 75, 40) for i, v in ipairs(newcopy) do v.Visible = setvisnew end local setvisold = menu:MouseInColorPicker(197, 91, 75, 40) for i, v in ipairs(oldcopy) do v.Visible = setvisold end end end else menu.dragging = false end if settooltip then menu:SetToolTip(nil, nil, nil, false, fdt) end end menu.connections.inputstart = INPUT_SERVICE.InputBegan:Connect(function(input) if menu then if input.UserInputType == Enum.UserInputType.MouseButton1 then menu.mousedown = true if menu.open and not menu.fading then MouseButton1Event() end elseif input.UserInputType == Enum.UserInputType.MouseButton2 then if menu.open and not menu.fading then MouseButton2Event() end end if input.UserInputType == Enum.UserInputType.Keyboard then if input.KeyCode.Name:match("Shift") then local kcn = input.KeyCode.Name local direction = kcn:split("Shift")[1] menu.modkeys.shift.direction = direction:lower() end if input.KeyCode.Name:match("Alt") then local kcn = input.KeyCode.Name local direction = kcn:split("Alt")[1] menu.modkeys.alt.direction = direction:lower() end end if not menu then return end -- this fixed shit with unload menu:InputBeganMenu(input) menu:InputBeganKeybinds(input) if menu.open then if menu.tabnames[menu.activetab] == "Settings" then local menutext = menu:GetVal("Settings", "Cheat Settings", "Custom Menu Name") and menu:GetVal("Settings", "Cheat Settings", "MenuName") or "Bitch Bot" bbmenu[27].Text = menutext menu.watermark.text[1].Text = menutext.. menu.watermark.textString for i, v in ipairs(menu.watermark.rect) do local len = #menu.watermark.text[1].Text * 7 + 10 if i == #menu.watermark.rect then len += 2 end v.Size = Vector2.new(len, v.Size.y) end end end if input.KeyCode == Enum.KeyCode.F2 then menu.stat_menu = not menu.stat_menu for k, v in pairs(graphs) do if k ~= "other" then for k1, v1 in pairs(v) do if k1 ~= "pos" then for k2, v2 in pairs(v1) do v2.Visible = menu.stat_menu end end end end end for k, v in pairs(graphs.other) do v.Visible = menu.stat_menu end end end end) menu.connections.inputended = INPUT_SERVICE.InputEnded:Connect(function(input) menu:InputEndedKeybinds(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then menu.mousedown = false if menu.open and not menu.fading then mousebutton1upfunc() end end if input.UserInputType == Enum.UserInputType.Keyboard then if input.KeyCode.Name:match("Shift") then menu.modkeys.shift.direction = nil end if input.KeyCode.Name:match("Alt") then menu.modkeys.alt.direction = nil end end end) menu.connections.renderstepped = game.RunService.RenderStepped:Connect(renderSteppedMenu) -- fucking asshole 🖕🖕🖕 function menu:unload() self.unloaded = true for k, conn in next, self.connections do if not getrawmetatable(conn) then conn() else conn:Disconnect() end self.connections[k] = nil end game:service("ContextActionService"):UnbindAction("BB Keycheck") game:service("ContextActionService"):UnbindAction("BB PF check") local mt = getrawmetatable(game) setreadonly(mt, false) local oldmt = menu.oldmt if oldmt then for k, v in next, mt do if oldmt[k] then mt[k] = oldmt[k] end end end setreadonly(mt, true) if menu.pfunload then menu:pfunload() end Draw:UnRender() CreateNotification = nil allrender = nil menu = nil Draw = nil self.unloaded = true end end local avgfps = 100 -- I STOLE THE FPS COUNTER FROM https://devforum.roblox.com/t/get-client-fps-trough-a-script/282631/14 😿😿😿😢😭 -- fixed ur shitty fps counter local StatMenuRendered = event.new("StatMenuRendered") menu.connections.heartbeatmenu = game.RunService.Heartbeat:Connect(function() --ANCHOR MENU HEARTBEAT if menu.open then if menu.y < 0 then menu.y = 0 menu:SetMenuPos(menu.x, 0) end if menu.x < -menu.w / 4 * 3 then menu.x = -menu.w / 4 * 3 menu:SetMenuPos(-menu.w / 4 * 3, menu.y) end if menu.x + menu.w / 4 > SCREEN_SIZE.x then menu.x = SCREEN_SIZE.x - menu.w / 4 menu:SetMenuPos(SCREEN_SIZE.x - menu.w / 4, menu.y) end if menu.y > SCREEN_SIZE.y - 20 then menu.y = SCREEN_SIZE.y - 20 menu:SetMenuPos(menu.x, SCREEN_SIZE.y - 20) end end if menu.stat_menu == false then return end local fps = 1 / (menu.dt or 1) avgfps = (fps + avgfps * 49) / 50 local CurrentFPS = math.floor(avgfps) if tick() > lasttick + 0.25 then table.remove(networkin.incoming, 1) table.insert(networkin.incoming, stats.DataReceiveKbps) table.remove(networkin.outgoing, 1) table.insert(networkin.outgoing, stats.DataSendKbps) --incoming local biggestnum = 80 for i = 1, 21 do if math.ceil(networkin.incoming[i]) > biggestnum - 10 then biggestnum = (math.ceil(networkin.incoming[i] / 10) + 1) * 10 --graphs.incoming.pos.x - 21, graphs.incoming.pos.y - 7, end end local numstr = tostring(biggestnum) graphs.incoming.sides[2].Text = numstr graphs.incoming.sides[2].Position = Vector2.new(graphs.incoming.pos.x - ((#numstr + 1) * 7), graphs.incoming.pos.y - 7) for i = 1, 20 do local line = graphs.incoming.graph[i] line.From = Vector2.new( ((i - 1) * 11) + graphs.incoming.pos.x, graphs.incoming.pos.y + 80 - math.floor(networkin.incoming[i] / biggestnum * 80) ) line.To = Vector2.new( (i * 11) + graphs.incoming.pos.x, graphs.incoming.pos.y + 80 - math.floor(networkin.incoming[i + 1] / biggestnum * 80) ) end local avgbar_h = average(networkin.incoming) local avg_color = menu:GetVal("Settings", "Cheat Settings", "Menu Accent") and RGB(unpack(menu.mc)) or RGB(55, 55, 255) graphs.incoming.graph[21].From = Vector2.new( graphs.incoming.pos.x + 1, graphs.incoming.pos.y + 80 - math.floor(avgbar_h / biggestnum * 80) ) graphs.incoming.graph[21].To = Vector2.new( graphs.incoming.pos.x + 220, graphs.incoming.pos.y + 80 - math.floor(avgbar_h / biggestnum * 80) ) graphs.incoming.graph[21].Color = avg_color graphs.incoming.graph[21].Thickness = 2 graphs.incoming.graph[22].Position = Vector2.new( graphs.incoming.pos.x + 222, graphs.incoming.pos.y + 80 - math.floor(avgbar_h / biggestnum * 80) - 8 ) graphs.incoming.graph[22].Text = "avg: " .. tostring(round(avgbar_h, 2)) graphs.incoming.graph[22].Color = avg_color graphs.incoming.sides[1].Text = "incoming kbps: " .. tostring(round(networkin.incoming[21], 2)) -- outgoing local biggestnum = 10 for i = 1, 21 do if math.ceil(networkin.outgoing[i]) > biggestnum - 5 then biggestnum = (math.ceil(networkin.outgoing[i] / 5) + 1) * 5 end end local numstr = tostring(biggestnum) graphs.outgoing.sides[2].Text = numstr graphs.outgoing.sides[2].Position = Vector2.new(graphs.outgoing.pos.x - ((#numstr + 1) * 7), graphs.outgoing.pos.y - 7) for i = 1, 20 do local line = graphs.outgoing.graph[i] line.From = Vector2.new( ((i - 1) * 11) + graphs.outgoing.pos.x, graphs.outgoing.pos.y + 80 - math.floor(networkin.outgoing[i] / biggestnum * 80) ) line.To = Vector2.new( (i * 11) + graphs.outgoing.pos.x, graphs.outgoing.pos.y + 80 - math.floor(networkin.outgoing[i + 1] / biggestnum * 80) ) end local avgbar_h = average(networkin.outgoing) graphs.outgoing.graph[21].From = Vector2.new( graphs.outgoing.pos.x + 1, graphs.outgoing.pos.y + 80 - math.floor(avgbar_h / biggestnum * 80) ) graphs.outgoing.graph[21].To = Vector2.new( graphs.outgoing.pos.x + 220, graphs.outgoing.pos.y + 80 - math.floor(avgbar_h / biggestnum * 80) ) graphs.outgoing.graph[21].Color = avg_color graphs.outgoing.graph[21].Thickness = 2 graphs.outgoing.graph[22].Position = Vector2.new( graphs.outgoing.pos.x + 222, graphs.outgoing.pos.y + 80 - math.floor(avgbar_h / biggestnum * 80) - 8 ) graphs.outgoing.graph[22].Text = "avg: " .. tostring(round(avgbar_h, 2)) graphs.outgoing.graph[22].Color = avg_color graphs.outgoing.sides[1].Text = "outgoing kbps: " .. tostring(round(networkin.outgoing[21], 2)) local drawnobjects = 0 for k, v in pairs(allrender) do drawnobjects += #v end graphs.other[1].Text = string.format( "initiation time: %d ms\ndrawn objects: %d\ntick: %d\nfps: %d\nlatency: %d", menu.load_time, drawnobjects, tick(), CurrentFPS, math.ceil(GetLatency() * 1000) ) lasttick = tick() StatMenuRendered:fire(graphs.other[1]) local logsstr = "[DEBUG LOGS]\n" for i, v in ipairs(reverse_table(NotifLogs)) do logsstr = logsstr.. v.. "\n" if i >= 13 then break end end graphs.other[2].Text = logsstr end end) local function keycheck(actionName, inputState, inputObject) if actionName == "BB Keycheck" then if menu.open then if menu.textboxopen then if inputObject.KeyCode == Enum.KeyCode.Backspace then if menu.selectall then menu.textboxopen[1] = "" menu.textboxopen[4].Text = "|" menu.textboxopen[4].Color = RGB(unpack(menu.mc)) menu.selectall = false end local on = inputState == Enum.UserInputState.Begin menu.backspaceheld = on menu.backspacetime = on and tick() or -1 if not on then menu.backspaceflags = 0 end end if inputObject.KeyCode ~= Enum.KeyCode.A and (not inputObject.KeyCode.Name:match("^Left") and not inputObject.KeyCode.Name:match("^Right")) and inputObject.KeyCode ~= Enum.KeyCode.Delete then if menu.selectall then menu.textboxopen[4].Color = RGB(unpack(menu.mc)) menu.selectall = false end end if inputObject.KeyCode == Enum.KeyCode.A then if inputState == Enum.UserInputState.Begin and INPUT_SERVICE:IsKeyDown(Enum.KeyCode.LeftControl) then menu.selectall = true local textbox = menu.textboxopen textbox[4].Color = RGB(menu.mc[3], menu.mc[2], menu.mc[1]) end end return Enum.ContextActionResult.Sink end end return Enum.ContextActionResult.Pass end end game:service("ContextActionService"):BindAction("BB Keycheck", keycheck, false, Enum.UserInputType.Keyboard) if menu.game == "Phantom Forces" then --SECTION PF BEGIN local client = {} local legitbot = {} local misc = { adornments = {} } local ragebot = { flip = false, teleportpath = {path = nil, last = tick(), current = 1}} local camera = {} menu.crosshair = { outline = {}, inner = {} } for i, v in pairs(menu.crosshair) do for i = 1, 2 do Draw:FilledRect(false, 20, 20, 20, 20, { 10, 10, 10, 215 }, v) end end local gunicons = { ["1858 CARBINE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABHUlEQVR4nNXUTyuEURQG8N/LSEiSv7GzseMjkI/B3sqSvY/hYxBJsZCVwUIRamRnMyl/R2ia1+K+Y2YxmsHL5Knbvfd07j3Pec7pRHEcSwkjGMVSla0dByhW2frQg1sU8JZC7IkoxURacY1BRImtiEwN3wfcIMYmnn8avFaQr6IFk5jDkIrCbVjAPHI4w4lQiWPcpRD7A9UV6cAAhpO9v+pePndiJSE1jRlMoVdQN48dvGAVu3hKk/BniOI4XsQyur75Rw6H2BKUvhd6/9UfJUFIJMI5xht8k8cG9oRe30/2Arrx+As86yIjtEShjt8p1pOVRSmxtwvKl9GUJAgVGcOlyqQp4UIgnMU2rppDr3FkMIs1Yd5ncSS0yr/CO58sURmvjH21AAAAAElFTkSuQmCC", 50, 9}, ["1858 NEW ARMY"] = {"iVBORw0KGgoAAAANSUhEUgAAACkAAAAPCAYAAAB5lebdAAABhUlEQVR4nM3VPWsVQRTG8d9efAVFBG0kpBIFtRRsAgpWphAsLIKVIH4E/Qo2phU7LawUG8HCSlEUJOlEsVKITUgUBV8iV3ksZoV1c+PdEO/FPwwMZ2bOPDzn7GyVxBCOYg7b8RST+Njasw378BDPEXxGf1jyIZzF7aqDyFM4j9NYwa4NXrxuuoiEuzgzYi2/+YL7zcCmDoe24sCQPfN18in0Oorp4yreDMg13wx0EXkDh+v5N6U329zBFSxhT2ttCU/wAm/xCR/wEosd7l+z3JO4hOM40ogHX+vkuxvxR1hWXF/GPcWp93jVRch6Rc7gmm4fyBwe1CIfK07/e5I0x4kkP7OafpLXSWaTTCU5mOR6kqp1fiSj2ZM7cdOfjb+CC3iGY1hQ+kvtXqenYaM0RV5UerHJLG7V85PYj73YoTT+eKgt3ZJkYUCZp1vWT9R7R17iQeU+h4m2fqXMTd6N3LUBVEkq5Q071Fr7gc3jl7SanvJPbgukPLr/BT1cXmPt+ziF/I1fmt1T3HjM+CIAAAAASUVORK5CYII=", 41, 15}, ["AA-12"] = {"iVBORw0KGgoAAAANSUhEUgAAACcAAAAPCAYAAABnXNZuAAABdElEQVR4nM3Vv0odQRQG8J9iKgXjDQQ7DVgknU1ICKkkWFmk0MoulT5BCh8hL5A8gyDYpEkr5A9RbIKVhSIIFjfR/FFvNJNizoXNYszuXgl+MMyZmbNnvv327DlSSmqOuymlzQbPVRlLxXW/+niAhYq+Qxiv6HsHU8WNATxDH44qBBjBQxzjZwX/OXTwDoP/8H2Mm8WNvpRSqnDJ/8JnWcFDsnLXCaeY7i6um3In+NRdVFXuGz5iD0/lRL8M51iX87iD73HxcdgdfMWZ/AnP8SXiv+0GuUi5s2D/Hh9i3ooAMIvlsNewH/YUboX9CzdibowB7AaBLpmNeLu/ofhXz4jkxRs8Cbsfw3KC90RurIb/MF6F/RqjaOERyl+g1Su5uhX8Rco4TCndLp29TH/ifq8do26HmC+odlA6a5fWrUZqFVCX3Cp2sH3B2ZWTq1uEF2OexHO5na3IZaOMkea0Mpp2iM0YE7gnV/U1/JAVbMu1sSf8Bjx4QyzAKlIYAAAAAElFTkSuQmCC", 39, 15}, ["AG-3"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAALCAYAAAA9St7UAAABjUlEQVR4nL3UPU8VURDG8d/CqqgJ+BJDwLcYOqJiiDbGQkyM34HCxljYWNlY+Q38CDZWVBAa6NTE2kKlI6iFmqDeoBEJKK7FmRvXl724dyP/ZLNzzj5zzszsnJMVRaEmp7Efj+o6NuAhLnYS5DUWu46zuIw+fEQ/spKmXZXy3DqmauxTZhOfMIbDeF0lzIqimMQ8Wh0WHMMchroMqAmfsQs3pC74Xvo2JBVvR1ak3prBcofFRnGhQTAF3kkVfo9hrOILDmEldPtCtwd78QZHY+5V6MpnYQAv0Z/jHq5tEchB3MH52GykRhLHpBY8gw2p1XZHUptStddDuzM0vVLbf42E7v+WwB/kfv1VVXzAzbAP4DZuxXgxNm5FgKs4V/L9hoV4/hu5dJjq0MKsn4lcwXE8wEmsScm1GcTbZmFuTQ/uduE3Ee92P2cYj/GS1B5tBpsE+K/kOlxpFWS4GvY8nv9Fs4wjYW9LIj1d+JzCibAfV2jKN+C2/ZG6PJVuokuYrtC8kG6ZZ3jSXWj1+AH54FX7iZqi9gAAAABJRU5ErkJggg==", 50, 11}, ["AK103"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAAB0ElEQVR4nLXVPWuUQRAH8N+d52sQTUS4gGinZSpBBBsb0SLkQwg2gljoZ7ASsbCxEbGSCDYWWogWCr5Uoo0h0eRAFCHxDaMk3ljsJvfk4fBevPvDMjuzs7vPzPyf2UpE6AN7cQFbOvhVstyTRw1/8AKbS77zmCnZFvC2ZLuMO3iy4aKIuNThYz7iBr5kfRI3savDvn/hK5ol2yM0sJz13TiIKXwr+E1hVQp6Ze28SnRXkh9SFnfiUJaDxmNslyqzhglsxfOs78M46tiWbVew3G0g3WLFRsrM4o2UiFGclKj1EO9Ke1/jXpsz6xIrSJRexA6pIj/XvaIzmhHxISKeRcR0RJyJiPnC+t2IOB4RIuJaRKwW1s5lu4ioRsRoRIwUbAMbNfySytmQfq4FvM+ykcfvUpYmsT9n+zo+54zfwgGcyn7jhT1NLLXJ+EBQk8rUC7024UieT9tIh6d4qRXIxP9+YLeo6i0IOIyxPL/fZv1VYX5M4vXQUe1jz4ksl7S6SREPtCg0gvN93NEz+glkTmrFM1IHKuM7rhb0s1LLHioqg+2+6xiTGsbaezOHo/g0jMvoryLdYBGntV7vWa1XeCioDfHs21IrruOi9jQcGP4COQMMvMuv7DoAAAAASUVORK5CYII=", 50, 13}, ["AK105"] = {"iVBORw0KGgoAAAANSUhEUgAAAC4AAAAPCAYAAACbSf2kAAABwElEQVR4nL3Wu2sUURTH8c9uooKFIOIjguCrEJQ0NjY2RtIoQQTBzjJ/gjbWgoKt/gPaidiImKiF2gVtxCeSqPho4iNGjWKyFmcGbsZxM86sfmHYc7nn3vubMz/O3Van01GT1TiOBbTQh3yzhSRuZ/NtrMNXbMA87mJ5yd5X8QUrsQKnMIrJPKEfRyqIvI13yXgE57CxwtpuHBIvXGREvCCswit8TxNanWoln8NFPBBij2FtTbEpM6LyKX2isvfxIzvnAL6JLzmDW1WF/29O4AlmhVX2ZDF8wmRd4dNYk4zf4CkeYT0OF/IPCqvNYhC7hRWu4GUhd15UtSvdhM/hBaaS57X4jBOZ0E1Z7gVcxiXsF7ZKrbQdz5cS8zf0YywTM1V43i6xNvfmTZzEMmzFM5zGmSR3l38gfLjGui3YnMXjkjaVcacw3its0TPaNdcNJfF4yfyExT4dKslpRF3h+7Lfj7hXMv9T9P6cQc17/iLqCm8Jjz/0ex/OuV4452jNs8oFNLzytwlblDEgbrz8ZnyMneISaUzdisMHfxZNdKWxZLxD9POe0ER4Fc4m8XvxJ6snNLFKVa7hBs7jc682/QW/sHjrCuQ/hgAAAABJRU5ErkJggg==", 46, 15}, ["AK12"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABtUlEQVR4nL3Vz4tOURzH8dczHiNqhAgbaWpsxXL+ASmSlWyYrZ34I5Riwx/AwkZJSZSm2MgkC81GslGkZkZjZsiP0eNrcc7tua7b47mTO+/6ds+93/Pj+z3fzzm3ExEaMIbrWMYrfPlH/07lfQ/mULfovdz/54B5H+AqpquOLg7nCfZic8U/X5l0EmcGx75mlvQT/IavmKj0eYZe3eBORCxie0vBNeGaFHzBFO7jkxT8KE7hjbTBBS/xriuVukjkFxawG++zzWZfYD+O5PceXmfr4jh+YFP2z2JGqvYw+n0oyapgGgdy0EvYKFXqMxZL/VawLCKeROJxRFyMiJ0RMR4RYxGhYhPR53tEHI2IbRGxIX97WvLfqRnfmhUVgUfSYfqYrY6yBG/jBbbk3ZrKFZvM/oNDVOG/MYK3kg53STfRIE6W2jckGX7Iz5tSYgXj0gWyPjQs4UyWTS8idtT4t0bEakleZ9dLWiMN8z6Hy7jrzwNXsCJdkQUn1ri/jelEsx/iMFzAldxexT79c9gaTSsyDLf0r9FRnG9hjb9oI5E5KZmCY1JCrdJGInAJz3EahySJtcpvOtqVG6/0I4sAAAAASUVORK5CYII=", 50, 13}, ["AK12BR"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABoElEQVR4nL3VO2tVQRTF8d+N9xLwGXyAIrEI2AhWwc4PIXZ+AEH8BlaaJpZWWtha2ViJoIKvSkNIq/gqjPiKmqeFSLIszhw8Xm/IjYn+YThzZs8e1qy9OaeVxDrYhktYxCSW0H1Aqzx7rR/EByz3OLuFlVXOqjmHMdzuTm5jtMz3Y2tXfKaIrjmO0z1EbAbxp/BuruNHr0AryRx2bbKomn7E1VwsOs7gvMrUASyoKtjBWTzHp0beU7xv46PfL7KIHZgt8yeN2AFVVWo+4y224Ci+Y7DEFvAY34qItZgsOfcxj504jOmisY1rKmO+NPJmMCvJo1RMJRlPMpxkNMm+JLrGkSQrZf9yklNJOklaZW0iv3jWI/+fjXajTDdwtzgwvYprzVa5h4cYLk6OYQ+OlfhIcXWhj2psmAFV2RRBE2vsP9GYX8Y7vFa12AXV5Wo6OLkZIvsiye4kI0mG+ijhg0brHOoR355kvrHnZZLB/9FaA/haXJ3r495XcAcv8KZHfAlXG++vsHdjVvdHK+v7IdZ0rPI9xxBuYhy3/k7W+vkJAjiOxDLReeUAAAAASUVORK5CYII=", 50, 10}, ["AK12C"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB2ElEQVR4nM3Wv2tUQRDA8c/lzh9JwB8giIWFooKVINiLhZUI6l8g2NgIYm8rForaCDYi2FpIChUhplAwQkQDghaKP/BHjBBOg54kYSx2jzwvOfLu4YFfWNiZN7Mzsztv36tFhApcwU+0MJF1xYVqhfly+hp24iPms65esH2JyY6Yx3EYR5ZLqIHteb4xj07eYaEgr8PJ7Nsv5gvrz6KJOdzr5lCLiGZO7n9iHDekDQwM4SheSBtb5BN+NPBF90Ja0k5MF3Q1bOshqZBaaA5rrNx2MCB1SrsTBjGFQ3jVsf5DzDTwFbvyouM4i73ZaATvpeNtsznrVmf5Al7javabwCgO5Oe/sXXleksxJL2bS2ifCIzhGu7n0Y0pqZAdWf6OJ3newlN8KNivxRZ87j3vJSxbBOkIp/L8kb9bqBu7LRYxiXN4I10U09iHxx0+e3pIthIN6SZYJbXKWAmf4vX3TOr9mQ6b5x3yQdytlGFZIqLXcT0WOd3FZjAivhXsZiNiU4VYpcdAhdpPYD8u4k4Xm1+4XJCHcaZCrNLUKn7Zy7Aeb7Ehyws4htv9CFblRMrSxKWCXMdNi38S/5Z+9m1E1CNiJL8ncxFxql+x+tlabYZxC+fxoF9B/gAcy5p3z7j4hwAAAABJRU5ErkJggg==", 50, 14}, ["AK47"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB4klEQVR4nLXWzYvNURzH8dcdkyyIwZSVEE1CWUnyUGZjYaE8LVAaf4O1v0GZYmWhPGwkDytFVsxGDTbKU0kieahhPN6Pxe9MruvOg3vvvOt0Tud8v+d8P+f77fc7tSTaZBm2ojZD+35sLOMVeIFFLex+4iJeNcx9xNMWtoM4iiO9Mwyimc04h9Vt+kNdFexbDJT+AzZgG76X1ot52I7nTXssxA2oJTkzzYHvcRdfsBjrsB9rOxAxwTi+YgG+lcAX4h3uNNitVIm9Unwm2FX6kVo6qK0uUscnRFVGwxhrWO/FfHxWZW6C5arSvt1Oab3GiOo25pW56yWA+ziAPtUNTnAZx1VZ3YmluIWXRUDHTCekjicYxT3cxMOydg27y/gCHuEB1qvSvwY9ZX0VnpXx+W4E/g/5m3qSB0lOJtmTpC+JSdrp4nMjyeJi25dkSZI5Sc427T0wxV4dN0lGkwwn2Zekf4aOPUlelQB3TWIz2CTk6mwLaadtKcF9SDJ3CrGjTWKGZktIz/TF15JNpX+k+mS2oo4h/GiYO4UdbZ45NR3cwrIka2Zgd6IpK+NJDnY7I7Vk1n8jc3AJexvm3qheBWMtPdqg3dL6H37hkD+f3eCYLopg+v9It/iGw3is4X3UTX4DquzM63GDCPgAAAAASUVORK5CYII=", 50, 14}, ["AK74"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB6ElEQVR4nL3VO2tUQRTA8d+G+CZiwGJFfKGRFIJgI0QFG7USQQQVIb2fwMavIIidhZ1WKmIrGjExvg1YKBqSRgxEUBIf+CDosZhZdt24N8lu1j8Md+bMmTmvuTOliNAES3ASy+epX85tDdZhDJv/oXcPj+pkbzFaJzuK3ThTEZSaCGQVruPQQhfWMYRl2IEH2IQNUpA/a2w9RX/d2mOYwc2KoBQRF9FdYHAML9CB7ejDwRaDKGJINZAuqXJP8CPLVmCPlISp7NtAKSJG0dNGxyr8lpIBgeks+4Rf+IxnuJvlsrPl/K0cr30YRwkf8AWTCw1kCgPYgl1ZNozn0tk+jiN1a/pxA99xAu9xXzXDi0LnHPPvpCyN4A4eS9k7gFtZ5yXOSz/lRnzLDpfy/FZ8zf0ri+T3bCJiNKp8jIhrEXE6InoiQoPWl/UnImJtRHTntjoilkbEcM2egwX7LFrrlG6MSznjI6rns4jD+XtVOqf1DEqXAuyVqjLeUsbnoskMvMrZ3t9gvjf+5nK7K9Ixd6iz6FJ9CN800HmN2zXjU6pVbAvNPIgVypgsmN8m3fEr83hCevymmzVYRDMVqVAUBOkhPVszXo9zLdgrpJVA5sMFPMz9GSn4UmP1FvgPV2NvRAxFxM522vkDiYU2tM7CwnkAAAAASUVORK5CYII=", 50, 14}, ["AKM"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAByklEQVR4nL3VzYuNYRgG8N9hRPIxvhL5iBkLSoxiNdmyUKLE0s6S8gfM/yDZoFmwkIkpJVmPBcIkUcwsqJlYTONjfEeXxXnV22nmOM6cM1fdvb33fT3PdV/389RTSaJJdGMX5jXI78IGdGIdXmHVNLz3GKjJPcfbabgXcRN3OhpsohYHcAVrmlwPvapmfmArXmO+6oAO4XvB+6xq4nDBLeMJvkAlySX8riP4EQ/wVXWSO3BcdbqzxVSh3VnoVLAMT1VN/sX+ouHHpVwHjmAY5yqZxd1qIabwS/UURnG1pr4QSzFSylXQg/sYa8bICJ7haCk3gHd4ibNFU9tK9b6iuU+qpzmBexj/T+2ZkX9jPMm1JKeSbEkiSSXJoxKnN0lXURtKcr5mj8tFrW0xnZHRJP1JTibprrP4dsG/kKQzyYoiVhdGH5b2nEiyqN1GhosJnkiyvsGFS5J8K5rcPgPnTM2A+tptpJk4VjT3og5nZZLJkpGfSfa0y0ijj1kt9hbf4TqcSZwu/S/AIDY1qVkfs5jCxiSbG+AN1lyxsSQ9rT6RStL2Z2Q5hrCzlLuLg60UmQsjsBa3sA8fsBtvWikwV0ZgMfpxA9dbvfkfBORvDGB21QAAAAAASUVORK5CYII=", 50, 14}, ["AKU12"] = {"iVBORw0KGgoAAAANSUhEUgAAAC0AAAAPCAYAAABwfkanAAAB6UlEQVR4nLXWz4uNURgH8M+duSYjl+GGMikWUpIkCwtloUw2FjYWs7CzsPc/2FhZUFYskDJFyUKmLJUoGwkzSiPSNIQZLuaxOOc2r7d7x7g/vnV6z3nO8zzn+XnOW4kIHeA8fuIXHqGopJK/rWhF+g7MZD1l/nlMYg4H8Lp4eLUDg9fjDFZ3ILtSfMcURlptViUPZ/Emzz9hQ4FnEZ/zvJYV9dNg2Z4n2I2zeIcGFjBdiYgGxqVULGd0HZektPYb3/AcG7ENqzJ9DrOViFjAcBvhYRyXnNqHu1Kt3Szw3MErXMMm3MPbfFgTu/BRcnwxDxi0VO+/paA119P5uyfvNTL/lIhYiAiFMRgRRyPiSkTMRMTViBjL9CbP41jCxYg4FhFDETGSaRPxNw6WzuhqVCLiR/amjpM4gWc5crelTi5iXY7akFRKh/E17w1gLXaWsnEal9tk879RzYdP5nTcwH6pEdphLMvAC8nBMsqOHtJjo0fx3lKd/QtHCvOnbXheSh2/tYVM1xjIyldqMEzgvvSwPGzDE3hQWI9ibycGttbeeUPUI6K2zP54qRnP9bIRexaAEmpS2a3J6w/YLr12XWGgWwXL4AtuFdZbcKoXivtpNOnHqpnKeWzuhdJ+lkcT16Xb5IJ0v3eNPxBaj7M/EmAxAAAAAElFTkSuQmCC", 45, 15}, ["AN-94"] = {"iVBORw0KGgoAAAANSUhEUgAAADEAAAAPCAYAAABN7CfBAAAB00lEQVR4nMXWv2sUQRTA8c/FOz2jIIrBgNgKIqiIoILYWdj5q7NRRERs0/gf2NiksbCyTyOCheRiYaeCgoLgryKiiPE3Mf4ieRY7kmPdu9tL9vALw86bN+/Ne7tvZ6YWEUrSwD7sxhN8KGtYwBr8TP0aIj0X8BwfO9idxdX8YL2Pha/gTB/zl8op3CkYX4uT2IMd+IYNGKtFxDWs7uG4gSOVhdmdB/79ygfQxCP8wjDeYhPe1CJiTu8kBslvzFksq9f43qbfKgt6AufwJe+gnpx0S+IpLmMXzreNT+AWPuM0DufsxjEq+4+GMYOXspp/gWepPy17u53YidlkU0xEzEYx9yPiREQMRYSIGEvjXyPiQkRsi4i9STceEfM5++NJN/AmIuZyi7ci4lDB5JtJfyPJIxGxPrUtEXHxfyXxt5xW4Tou4W7BB1uJg6nfSs+ZNv0n/MjZrOtSIpVSx1G8ktVoJ/bL9nYWk8jzLiePLC+08tQxVWJeA/ewGY87zMknMbqMuPqi7GE3mVpTtg0WMZ2Tty81qH6pRflrRy9WyLbCZpLfyw6jhaoW6MRQhb7m8bBN3ijb4wdOlUmQlVw7xyr2X0g/F8AyTMnuWK3Ublfsv5A/SBySI+YtT1UAAAAASUVORK5CYII=", 49, 15}, ["ARM PISTOL-ALT"] = {"iVBORw0KGgoAAAANSUhEUgAAAC4AAAAPCAYAAACbSf2kAAABtklEQVR4nNXWPWgUQRjG8d9eLgYRFawEFSUoNjZ+FCksFKy0UXvRxt5GQVMKQoqUgq2lhTa2WtgkNrGxMKJEERsJSoKcBj94LWZP7ta53O3lRPzDsLvvvDPvs8/ODFtExH280p8Wbg6QV+U8HmAf3g4xHiZwHI/bgSIiVrFtyAlzPMeH8n4vDmAFr/Gm5lyBAg3cwaN2x98QXpeQXqx6D2vYhP24gLl2RxERa9Kn+B9oYRGbm/jm3woPLOl2+qvkNhzEHmmZLOMzxoqImMfUCAQ8LIs9wyfJjGvY3WfcF2xZp/8uDpVz/d6cImIqIlZjY8xExHhEqLTZTO6liLgdEUfLdiYzrm9r4ikO47p0ZPWigZPSLu/kI27gZx9n2yziBRbK58kBx3XRLK9LuDxA/gq2Z2I50RM4W4ktY4d0nk+W9ccHEVql2T+li7FMrJfTV3S72cIxvKtZM0ujZn5O+I9MbCemK7EZIxJNfeG5L5QTfgtbO57fY7ZmrXXZqOPfpXXbyRFcrMSuSsfeyKi7xuelH7IF6WR44k/Hp3Ub8hL3hhXYiyIiRj3nLpzDaZyQ/i9OjbrIL+XD/twN05nXAAAAAElFTkSuQmCC", 46, 15}, ["ARM PISTOL"] = {"iVBORw0KGgoAAAANSUhEUgAAACsAAAAPCAYAAAB9YDbgAAABmklEQVR4nL3Vv2sUURAH8M95hyIo0UKDwVIQLCQBC8HKv8BCYmVh6R8REAVtLCwtFETQ1l7FX6hFtBAiClrZaIJVTM7EcNw9i7eLy97e5d5u8AsDM/PmzXxneDvbCiHMmwyPsTZhLNzAQxzEV/QS7ub4g83caIUQ1rC/RiJYxo8RZ8cwVTNvjmu4khudhsmOZFIHP3FPnHi34F/HFu7iEGbRJk52C7trFvwfCFhFuyN20YTsLwwy/QBaE95bxdNM7/r3pgfiRM/jGZ7kOTt4jnMNyH7CmUxfwD5M49I2977hwoizU3iPN3ibO1shhBNYzIqkoouj4nSLmMWHku+quE1eYY/Y4M2UYh18xlncwsyY2MOGG/pYQXQv7pd865jDCo6jL661NIQQJpUHYRivK+Jul2K+hxBOJtQZKbsS+mpX+AYlex6XC3YfF7GUOMNKNCXbL+hTuFM6v44XqaRGIYVsVWyRbE/ciUU8SmY0Bil/sO2ewYb4Ec7htLgrv9SnNoymZJdLdg/vMtlxpJD9LU7qZUFWdpzRGPwFoGrg1hC6LbEAAAAASUVORK5CYII=", 43, 15}, ["AS VAL"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAAB/klEQVR4nLXWzYvNURgH8M9ljPFOyk7IAiVNFmpQNBYWykZZWFlY2vMH2LCgrGZDyD9gIUpWRhQ1SixFSCJvM8Zr92txfpo7v5lp7tyZ+dbp/s5zznOe1+85t5HELLAZ+/EbS6pfWIRRLKtkP7BxEv0tWI5VGMLpDnw4hv7GLALZhzuK09PhuxJUHU0sqMmG8XcGfnRjWRc24YuSwV/VwRvwBn+q+Rqsxlpsw8FKr50goGsKeT0IWNHmmRMMPMB7xWloYAfe4hMW4nM1RpVSwsPaWSMtZ6ww3vnFLd+/8BSP8dHEZHRUEUleJGkkUY31Sd4lOVnN1yU5k+RJkqEk95PcSHI5STMFf5OcT9Jb6QxkPJpJTlTri1pszdnownO0EuU1XmI7LqAfF9GnkLY1E0eV3h/BT6VFu5XK/URPtbeBm3g3g0zPCAuwsibbpNwkB/AIO3HJ+CBgjzECX8cAvlayqzhb279xrpyeFEk+J9ma5FCSa0keJjmepGeacp5taZ3dtbXFlawVx+ajpf6PRpJBpeSvcAt328zBoFKVpvIOjNTWe/DNGJnP4dRsEz8VurC3Q93/Dr40MQgKR56ht5r3dWinLUx1v7eDKwqJPyhca06y556xQHYp1/LwLGxOjfns2ySHazw5Mp8cmZcEVViqPH6Dyt+Z28ojOOf4ByC7Nc+GCt/WAAAAAElFTkSuQmCC", 50, 13}, ["ASP BATON"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAACCAYAAAAaRY8cAAAAMklEQVR4nGP8////WwYGBhYGBgY+BvLBZwYGhpMU6L/NwMDwiUy93xgYGH4zUWD5oAIA3Q0Jetjcu8gAAAAASUVORK5CYII=", 50, 2}, ["AUG A1"] = {"iVBORw0KGgoAAAANSUhEUgAAACsAAAAPCAYAAAB9YDbgAAAB4UlEQVR4nK3WO2gVQRQG4O/Gi0bEB0lhESvFJkpKG8EmpSCIYDqbNBaK1oKFdsFCESsbIWDhA0QIIiLa2FpoiKYwEoIQUBM1ilHzOBY7S5Zlb7ivH4bZ/c+Zc3b+OTOztYjQJkZxqcR9wr8K3yWcajdRjnoHYxfxscQNoIbJAteDgziEqQ7yqXWgbBW24CbOoRh4F85iP+7hZTvB6+jFGM7LVOkGlvGlgt+HF3iEp4lbxc8GcVawjt+o1yJiCoNd+sh2MIsPDWz5x87iTy26XAdNYk22ikdkdf+tmUF12e7d2kbCv3iCedmSX8Tugn0Uv3Adz/EK35PtKI7hdUsZI2Iu2sO1iJDatohYSPxSRNyPiJ2JHy/45e1B8t1RYWvYejaZx1fMYRxDSaWysjmuok+2vIM4Lds0xzFREbs39f2dKrseEbcioi8pk89spuR3O/EDEbGauGclNe5ExPYKlaaTf3+nyl6RnZOLJfXmS34HUj8iO1/hbsG+J41frsiRK7vWgq6VN1ij0+G9bGPkOJz6oQI3U3gewcMGscZkF0XVRBqiFhFnbMw08BifK3wv4EaJ24uTGE7vKzZqewGXtajepmihZobLx0FEnGil5jptrfzITOIHpvEGb/Gua6o1gf/niwh4NmNiowAAAABJRU5ErkJggg==", 43, 15}, ["AUG A2"] = {"iVBORw0KGgoAAAANSUhEUgAAAC4AAAAPCAYAAACbSf2kAAAB8klEQVR4nL3WT4hNYRgG8N89M7gsZiFpNJli1KXZiY2GBWVxi1KUouwkZWNjQWhiYTULsmDLQpMUZSeWCqWU/6WYhoxkxr+LOBbfuebMde695869PPX1nvN+73nf5zzn/b7vFOI41iZ2oII7eNMk9jD6sL/dot3tJsBDLMMQFmIP1uEH5mTYd3iMa3gx26KFRPHVOI75s02UQiQQXI8y3qbmluIVDmArdgsvUcUHZLVAAUV8w2SV+DAOYW4HSP8PjKNSiDvQ5G3gl/CFzgtr5LJsxWP8xHdB9e5/TfwjJrAAvQmBMXxN5sawApsFJXMjwus2iD3CWqF3izhXMz+KAWzADSxCP0pYgykMoqfVwpEgfzNM4laG/wLuCspF2JT4n2InhpP7Mk7hfZ38i/PRnUaj7fAlTgs7xFmsxO0GBU8K6sIJXErNbcSZjBpLElvMyfcP6hEfwRF8SfkmMuJ6E9uDfcn1Z1xJxZTwTFhctehP7FQesmlkEb+Ogxn+8aR4V8q3KrFbTJ8BV/EpFbMLF+vUj3IzrUEW8b46sRU8FxSsoiS00kDKF2F5ct0lHG5H6+TchnlmHkK5UIjjeMjMHnsinG5ZGMX2Gt+gsFuUGzxzr1ViTRHHcSvjWPw39raYoyOj1Z+s+8JP0oPUuNlhLXPhN0TD/Cfdw9YjAAAAAElFTkSuQmCC", 46, 15}, ["AUG A3 PARA"] = {"iVBORw0KGgoAAAANSUhEUgAAACUAAAAPCAYAAABjqQZTAAABuUlEQVR4nM3Vz4tOURzH8dcd48fjRxNqkNnIQspCVmJtY2NhY2EjG/kDsEH8D5YaZSGKSJSyI03ZkC2P1BBGTDLGr3ws7p1xezzPzJ2nWXjX6Xw73++953O+55zvKZJYJJbhKF7gGT7VfEXNrk94ButxEpOzwZWoAnuxok9BW3AOmzomL7qH/8PHStysqI24iP19CurFLwzOE/MV3/ED19DGSJFkEkOLLKgffuIsNgz6PwTBAzzH0yLJtP7PEtzCK0xgGw7XfA+VZ63AKO7hPnZjH75gRy2+wFtJXqZ/7iZpJVG1EzVfO8nparyV5Hotbs4230Ecx1rlFR/C9g7/O0xX9ghOVfYY9vh7/Q9UGW1Gj0x9SHI8ydIk5+fI1J3aCi/Xxo91rP5qktVNM9VN1HiSrR2BR5J87iLqceVfk2SqGvuWZF3t2+Ekl5oKSmKgS/ImlVW5zih24gZu18aXVP0urKzsJ8piOMMhXGm8dcriNqa8ijM86hHbxsHKnqqJgOX4jYFK4E1lQYQWLixE1Mwzs1DayqflDTb384O56LZ9TXhf9cOav2+Nma8k9OK1MksTWKUsgovGH0jxzXyX+j5jAAAAAElFTkSuQmCC", 37, 15}, ["AUG A3"] = {"iVBORw0KGgoAAAANSUhEUgAAACsAAAAPCAYAAAB9YDbgAAAB40lEQVR4nMXWz4tOURgH8M8dP0JMo4QmWWEos5HEQmgUUiglsmL+BmtLK5YWxMpikjSWdrJgZWb8KDbMLCyIoYxpGPJYnDN13e47c98x8a2n55zveZ5zv+9zn3PuW0SEBcQ9dOJAw/hBnGi6+eL29bTcpw8H8Sb7chWKbDOIbNtwBPfxa66HFLmyXTiPJfMUexa9FTFFi9g6PME+TM4WVETEIVzDxnYV/iV+YqI0H8YX/Mjzbql47/AMm4tY4KZtAzPVH5eEPsT70voqqb0mpMr3/k+xH/Eat3GlSUKH9Mvmi2GpX/uknh2trB+XqncRV7EFizK3QTpgexs/LSLGYm5MR8RoDX8sImTrjoipzI9ExLnMiYiBiFheihURS3PsUIVvabNdXeO4i2+4jJ24U4lZWxrfwDKpF09KrxjWSQdnqpLblX1n08K2EnsTF/CpxNXdFuuz34XDefyoJBTOYKAmd1P2EzVrteio4QbRXxEKb2tie7I/XeJuVWL240FN7kyh5vwYVBPKWNMidgxfsbLEbc++p8RNY3Ueb8WrFoJe4hQ+N9SqiIijWFHihvz5Gst4jN2l+XdJfD921MRP4hI+NBU0K5qexGzXa26EPW3uMW9r94/MiPT5e46neCG1xz/Bb86uexoVUGNgAAAAAElFTkSuQmCC", 43, 15}, ["AUG HBAR"] = {"iVBORw0KGgoAAAANSUhEUgAAADEAAAAPCAYAAABN7CfBAAACDUlEQVR4nLXWO2uUQRQG4Gc1qy6KEu8oCGqTgPYWNqKFgrWXH+AFhCjWotgoiJhK8AekNIWVgiKxULERNAZsVLzgLfFCNDGSsGMxs2bYfCab3fWFYWbeOWe+c+Y758yUQghawCm8w4M0X4IJLMR3dGAKF/Aal1v52L/Q0aL+HSxGFzbhIioYw4dMbgMeo4p+0aG2oRRCKOM8jrdpz6W4jqcZV8EvHMEKnEAtBMbxO5MtY7JgXMOyxP3VKYUQBrGtPfY3hIBSNn+EbixvQHcUi/AcI/iE4VJoMSmawISYO6dxA2+TYWMN6q8X822iRnTgvRiz88UX3MIwfuJMtvYQvejEJVzFkBgGozgrht3LJF8fMrPh4wwmhPAmzI1qAbc/hCC17owfCiGcTPyOEEJPJldrUyGEmwV8U2226vRC/MX9GMC9uvXx1C9IJ13T2S5WITgkltcclaSzsrGDnxtFTkziHK6YrgCrCuTWpX4fdqVxn2kHymI4fa7T2yom9o/mTJ6JIid6cK2O+yZeWrn82tQfzri+bLxXzJl6lFNfLVhrCkVOVAq4qljONmbc5tR31RnVKZ70QRwt2OsVDqT92oJSCGGnWPKINfy+rHxluI092fwuduOYaYdyDCj+E21HaR7XRK/4VqphBGvabVAzWDAP2cG6+WpsaaMtTWM+D8BBfBUvrWd4ovFb9r/iD1BPGUL5VqhSAAAAAElFTkSuQmCC", 49, 15}, ["AUTO 9"] = {"iVBORw0KGgoAAAANSUhEUgAAAB0AAAAPCAYAAAAYjcSfAAABPklEQVR4nL3UPUtcQRjF8d8uuwYiKVTWQlzBRkk6Y5UUAVPapQvJJ7HTzsoqYG3hV4gG89JKlmAZEQKGVCoqmBgtlMdids1wUUHXm383Z+6dM8+cZ6YSETI+YAR72MEPzOHE9YxhGNuZ1ovjbDyKASxiqpKZNvEFgzjLfviKoxtMX6CBjUzrw2E2/o0ePMFaJSKamMVjPLth8W74iSrqWBIRgxHxPv4PrYhQwwP8ko60VtjhjpTNHym3/vsoO890GW+yuQW8wzhW25trSU0yIzXZbfmL73llE4UPGlIWQ1IW51J3z2P/DoaXdCp9im+FuWns+nfsPVhH6JJOpW8L+hZWul38Oqp4iNcF/VNZhh3TV1JuOQdlm768Qt8t23RSauUOp/hYpmklIh5JV6De1jalJ7E0qnieGcLnMg3hAkvWtlcmHbfCAAAAAElFTkSuQmCC", 29, 15}, ["AWS"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABHElEQVR4nMXTsUpcYRDF8d/qEhWxEkQWQTAGMUKKVKnS2MXSR7Cy9SGshDxBLKxMo5YWQlJoUgVCithskY2VlUVEFHFPinurZdds9or+YaqZM9+Z4ZtaEhVYw4ceuQbmcFzlgX6pDTjIO7zFK/zoUdNAHX8Gs/ZfpJZkBTNY7kie430X0Tg+YvEBjVzhSwV9aklamFQYfCqaeFGlQf0f+TY2cITn2McQ1hVfagHbHZpr7OFEcR+Xffi47d9yD5K0klylO+0k40kkGUlyk+RbkpdJ5pO8SXLQoflV1j9q1DGKsXKuTWxhFrvlxr/iFEt4hkP8LOub2MFnnOE3WpW3OwB1hfFPGMYdLsp4jVVMYRoTijv63tFj75G83stfjl3YXlWyhK8AAAAASUVORK5CYII=", 50, 8}, ["BANJO"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAABIUlEQVR4nN3WMUujQRDG8d8boqAochaCYGljfWghiCBoc1hfc2IvXH2NVqeFWFlY+TkEv4BgYWdznYVg4IiF3R2oj0UQXoKGJKJJ/MPAPgwzu8sOM1skUWIcW1jDHEbwB2c4xLV+JcmzfUtSz+v8T/IrSVGK6Rt7XqwnuW9xiTK/e33ol6xIMoErfGn3EbGI83crky6o4Kf2LwEFdt647xI2uow9btK7GK1itYtkq7ho4R/DUAt/Ffv42uG+sxjGd5xiHjP4USS5xWSHCfuBaFQHGqU1qBRlUcUlljtM8k9jrnw0sxrz7RInWMAKbiTZbrPtljnpYas9atIHSUYHsf1Oo1bSU6hXcIdNPLSZaE9vZ0itSf/F46f5ohTJ5/g0PgGQZbQmy/b+pgAAAABJRU5ErkJggg==", 50, 14}, ["BASEBALL BAT"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAACCAYAAAAaRY8cAAAAS0lEQVR4nM3OOwqAMABEwUlQUVTi/Stv5FmsLGMTQYJNOl+17Ac25Jx3HLi00WEtekPAjAE9lqr/ZG9GTJX3tY1IHx9Syc7YcPzX3MgVBvHSNhaEAAAAAElFTkSuQmCC", 50, 2}, ["BEOWULF ECR"] = {"iVBORw0KGgoAAAANSUhEUgAAACwAAAAPCAYAAACfvC2ZAAABv0lEQVR4nLXWv48NURQH8M/w/MrGJmQLkfiVrGYL0YiGhEIl4Q/gf1BJFBLR6VWUQii3ZiOiUCCEKERkC4pHgbWxll3vHcW97Ji3nnlvnm9ykjv3/JhzvnPuPVNEhAbYj2942STIKpjEKVysKloNAy9hAicwjusN443hMNbh+WoGRQOGL2FKSnQn9uA2nmEZa7MsYDbbLmMRnbz+gi4+Yz7H3Iw7OCMR0pPwxyGSDWytadvFmgHiFniNu1LCC2WDFrbUDFYNXBfFALZvJPbnpLyWsL5s0LSH6+ApbuFATiTwHV9zcvN5r40b0hf5K4oYrInf4onUp21ctlL0jywbKz4H8XCAd/RH/BtzEXE1Ig5FRBERSvIu2zyKiNMRMR4R7yv++yo+jaRlpdHL6Egn9RqmpZNdxV5/HrxZbNPb351REPsbEdEtsfEiIs5GxPYa1U5nn25ETJX2L1QYnhw1wx9wM7P5uGadR3Eyr6/gVUnXrtjukq6p0SAixoao9EFmbzEiJiq6IxWGz4+S4WEn3Q4cx26cq+g24RM25OcZHBuSzx40Gc39cF/6JyDdt7+GQGP8r8Exk2Pfy9J3GAyCn1DyDO+30BjQAAAAAElFTkSuQmCC", 44, 15}, ["BEOWULF TCR"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAABx0lEQVR4nL3Wv29OURjA8c/bvrQEibQhIhITkf4Bfqw2f4FIJEQwWInJYDAYTRYWk4VFTLRDYxCLRCTUUJJSIaJSSVstHsO5jdPbt+99e/u23+Qk9zznnOfnee69jYiwRq7gEd6uVVELTuIlxqo29nTBWG8XdKzEbmztZGOzpoGDOIu/OIe9+CYlJgp5j/+J+lPIn2MCjQr9RzGI8xiXqtKWRkRMor/Nnnf4mc03YwgDVcpb8GLRbiaLYh6WB9iPSUxjBr+ytQFcwAHMNbGnwvjhwsgIvkuBzK/C+WmpIvAD27GpmJedK7MFn/Glhb7Zwq85zIvEWEQ8iYjfsZTXEbEjIpTG9eiMiYjYVzq7PyIORcRQROxsobvWaOIr+nBcukJ3sFBEer/IQJmbRSZvZJl9jGNSvyzyQOqJnA9tKlCbpnQvhzGFu3jTwbkZvM/mV3EPp3A7k/d1x81qmrgoBdIq8yvRi8vF8ycp+EEpGTnlaqwfNe/kpawPzmTyZkQsZGu3utUDVaPOoV0RMVU4OtxifTwLZHSjAqnzZZ/FNTyUXgxlRrPnI9hWw8bqWYfsnI6lnNiIitT9RWnHU3zEs2K8Wgcby/gH8jbLOOESHgwAAAAASUVORK5CYII=", 50, 14}, ["BFG 50"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABWElEQVR4nMXUv0vVYRTH8dc3b5ZpZC3lUIKLINHi6N/R4B+QTu7N4daug3+C0tTQGIgKDkFTQRimqEMgopbJtU7D+V66onjzfq37hsP3+cJ5nud8zo+niAht0oVHOMEeDjCKVxgsfa5jCH0IvGv3slYUFYQM42O5/oY6DnEfW7iDXnSXPvWm9ZVTq7B3GxOyIoFJzMvgr2EEc1JwH35WirQFRUSsYQNvKpzzBI/xyx9hdSzKanXjSArax218xw0psAefS/sbvuJH0//dIir0Vgd5iSUUMmnPGkI+SYU1OcC7eIh1zMh22ZetNHzOwe/xXFajXS5TkTM0ZuRAlr4ft7CCKbyWpR/AMRbwATexis1y/4R8uTpGQ8gDGchbPJXBNrNTfsdkP69iGsu4p8MiQCSzETEaES6woYjYjYiNiBhs4fvfrSYzeuT0K3Ae43JOXuDLP87vpfkNyofv/8tF7+MAAAAASUVORK5CYII=", 50, 10}, ["BOTTLE"] = {"iVBORw0KGgoAAAANSUhEUgAAADEAAAAPCAYAAABN7CfBAAAA5ElEQVR4nO3WP05CQRDH8c9TYqFnEDR2XkIOQu1ZvAGU3kCNFMYzSEJiaMTKBG0ogEJNXsha7COBgiBQuI/47TaZmd1fZudPFkKAMzRQRxVj9PGAewwtcoAaTnFS+NRwXpy/cDhnP8I7BujhqYjZwdSWZCGEJi6xt8Rmime84UgUfIz9bS8XhbRxg0d8bxIkC0UqEmCCa1zhYx3HlETM+MQt7sTvPFnlkKKIeXK84kWs0VltXqAr1t0gdRG/Id8FEUs7Uqn4F5EIeeWvX7CC0nantedESpnYeGJX0LIDuxMl32J/AFNeaeJY2r1GAAAAAElFTkSuQmCC", 49, 15}, ["BRASS KNUCKLE"] = {"iVBORw0KGgoAAAANSUhEUgAAABIAAAAPCAYAAADphp8SAAABc0lEQVR4nI3TsWoVYRAF4O8uIngJomJjMCRlGjEqBBRBURB8AAkEVJJCVCzSWZjGF9BCIZLSzlcQTOUDiCIpbFUUCzUQCEI4FndW1usGHBiWOefMP/Pv2ZVET57bA5fkbB/e6I+bONqDH8GNvoYGMz34JK714As43oPPNLiNiR7y5H9iE7jTYIiVMXITFzDdwaYL2xzTruBAgy0sd4gz2MFVo6s8qFwobAenO/plbEkym+RnkqVy5FGSQceRjcq2HiR5Utql6p1tsIj7+ITHOIZ0Jn6obCNGjq7jc/Uu7iviWYne49XYOxj4N07hcg2Hh+1BbXzDFF5gA3O4VNwa3lQ9Vdo/W7autVPnq96thi+4aOTW18J2SzPf2Xg4SDKHW0buHTL6cq/gdc+V4Dxe4jl+4CDWB0nGhWs19d4eBz01+iPu/oV2bB0mWU3yPcl2kutJmg7fFLZdmtXqkcT4RvtxopOH8bE2mKyrvMPbev5qG38DD4zt9GPY6RcAAAAASUVORK5CYII=", 18, 15}, ["C7A2"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABtklEQVR4nMXWO2sVQRTA8d/1LqiND9B0ESPYRAsjchsbBfEj2NrZKH4GUwjiB9DCxlYEay0EQfFJLkgI+IwSIUFFFCXRxOSOxYy43Ozl7kPxD4ednTl7zsw5Z2a2FULQgC/4igl8amJoAHtxBUeGKW5o4OQstmIUIw3sDGIEO/C+jHKG85hFwNMCnQXM9/UdxikxI9twBy/TWD7FGaawD6tYEzMY8CPJTyyn5woWU7uDccyVWUgrhDCLsTLK/4ke3hb0r4hB2YL5DN/xBm3s6lN+hxkxKp9xW4zmBC6WnEgXBytM/Bs+JJ/78QCX8ahgIYvYiV4mpruLjQULOYYXBc4e4xBODJnUVZzBgSRtcV+u4SFei4FZxtIQW4P4SCyt59iNa9gjRmBazMSMWMeDWMJm3MB1bMel3PgkztWcYCUy3MQFcVOPiWVWhg42pfar9N1qkiz1NzrbKxFCqCPtEMJUiDwLIWS5sbnwh8ma9itL3XvktLiBezgpZuE3+eNyvKb9ytRdSFu8H+5Zf5rcz7WPNvBRiVbDX5QijuNW7r2DJ3/bST/ZcJXK3BXLq5vaC//Axzp+Ac7nBz2s99AmAAAAAElFTkSuQmCC", 50, 13}, ["CANDY CANE"] = {"iVBORw0KGgoAAAANSUhEUgAAAC0AAAAPCAYAAABwfkanAAABZ0lEQVR4nNXWsWoUURQG4G/CFmo2G0VIF1KFQAQLg2IhpPMRArGySJPGPqmTPIKFaO0DCJpXEFGxEURimhBI5cZs2AjBY7Fn4Sak2IVdhvxwmHP/e878/wxz594qIowYk2hhKuP2FXkL02gm18q+Ozl/Cw3s4z1eYq8vUBWmp/JGlwUnky8FWy6aaBaCjVE9fYG/eIFXfdM/MI9qDGKjxhreVBHRxY0aDPxGGycZHfzJaGMCT/Cw6OlisZENg5o+z/pSsJPX4+TayZ0m3y6MlPWDYhPbmd/E8yoi1jGboseFWCfN9fkTnA0hNkp8xKPMP1Vj+HuMA9t6bxw6E3U6GQJHRd68LqbvFvnpdTBd4Wkx/jmOjWAYLGAF3/AFB1fUbOFxMX5X90LcwUYxPsRnfNXbYZdxv5jv4p6IqDM+xOD4FxGrEaHub/p8wLozPMNbLh6Y6sIMlvAgYwlzeoek79jFa/zqN/wHqCb0Y2EfwxkAAAAASUVORK5CYII=", 45, 15}, ["CHOSEN ONE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAACCAYAAAAaRY8cAAAAT0lEQVR4nM3PoQ2AQBREwTkBVSBwVEAfVEEtCDqkARzJGTDkY0iOUMGNfFmzKSJmLIpAwonrbR02ZLTqs6eIGDB9Ysb9GzboMWJVDtbieADxkRHkoyqOkQAAAABJRU5ErkJggg==", 50, 2}, ["CLEAVER"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAAAuUlEQVR4nO3UMWpCURBG4e8+mxSCjc+AILYGJCSlYIyLcDtp0giWrijYmCatO0iTRWQsfI1FQIxXn+CBgSmGmfM3kyLCldHAM6Z4xQTrVMMgd2hXdY+y6ks84gUt/GCGJyxTRAyxRP/8znsUdsLNA+c/MUIX3ykiNnjIJJebL3TQSxHxi3RhoX9TYHVpiVOQIqLEAj18VLXBMV+ggTHmGJxG8TByfa03vOdY/BfFOY/l5BakbtyC1I0tOzomc2n0nSwAAAAASUVORK5CYII=", 50, 13}, ["CLEMENTINE"] = {"iVBORw0KGgoAAAANSUhEUgAAACsAAAAPCAYAAAB9YDbgAAABc0lEQVR4nM2WPUscURSGn41iNiL+AkkQUfyoLQULbWLA2i6VXdr8AgshioWl2mhjqRa2NhaCQbS021WEwAomu1q4qz4Ws+JlnMUJuM6+cOCeO4c7z7ycMzM5dRA4BPaBVWAHqNGKUvPqkc/6o86r/SqtFE+LL2rJl/qtzqqdWYOGsKiT6l0CsOqluqQOtwos6s8GsKH21e9m4HZODVt4CFgAvqZo93/AXL3+LdUG/ADOgDKQBwaAlTgsQBdwDPSlPPwQKAAPRA8Q6gaoBvkdUInVlIH7IB8HZhLus9aesHkNHPwH7Gg9mqEqcEpkQnsS7AjwLeVhFWAZKAICf2PX465VidwOdRXLx4FfwEUdtABsA8V4E/eoZymG7F7dVceaNEwD6rT6KdwPC7rV41cgL4w+GL3NnPpG8bT4qO41AKypW+qU2pYFZAibUzcSIM/rLn7OEjAOuxgA3qqb6oT6IWu4eOTUE6CD6I9rHSilfBO8ux4BVoQAWAGhrhYAAAAASUVORK5CYII=", 43, 15}, ["CLONKER"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABYklEQVR4nNXVzUocQRQF4K8lYMa/MTAKBgIhuxAC7gQfQH0JwScR3KkLX0DiLnGbLJNNXBohCK7MJu78N+AiIkmwXFTJtMMMjNUDkgMNfW/Rt8+pOvdWEUKQiQEsYQoTaOBZbrGqeJL53SQ+4HVLvoHzKoRykSOkjm30p/gPjvCrlOuEwfQMYbQUD6e6d/FIyt3FozjAGvbbFS6StZ6L9vjehZAGztJ7wPskpN7m50OluBe2u8EnrOBbeaEIISxgHRfYEHf1NwqxD67xF7VEbA6vekCqKrawjM9EIScYf0xGFbGL1T7xuP53hCKEMI93uNTZWv/wVLTWLF4+BtsWfBWt9YVms09gDHtdFGjX7IfuT6FOU6mvIvkbfBSbfae8UGRciHUciydEHASn4v0xk947oaY5Xkc0hXYz8X6K4/dHu8I5QuAtNvGmJT+Iq5yCVZErhLi7i5gWrVnDix7xejBuASoAVAF0wMlOAAAAAElFTkSuQmCC", 50, 12}, ["COLT LMG"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB30lEQVR4nL3Vz4uNYRTA8c+drgVj5NdGfmRlI9SwUiQiaZStbCVlI/8AZWNnZy2F1GzZaMZmhCFZiUKUhZlGzKCLmTvH4n0077z3uve+d8Z869R53vec857znPM+TyUilKSCZ9iMV3iLz/iEiaSP40nZwAWO4gTOdmJc7eID+9Gf9GOyoopclRX5Gj/Ss15cx7uc3Xc8Lvj+wkq8xECnSVUi4kqnxokBbE/6eEpmXswk37CjZGyYxQO8kRV/sYlNHT1Jr6JeiS5mawmYxDRW4VHS89RxSLZhwxjrZrQ64a5sNE6ndRV9LexnZB2En7iAUZzDEFZgNdZgebLbiQ84QjZa7ToynYINp+QmcAPbUEtJ78HWnM9uPM+tq1jW4huXMZVbf0nytYleaxohmjMTEUMRcSYi1kWEgrxIdjcjohoRpwr+/U18WsmmkvYNkh+tWTzEHQxi7B+7dxy7ZONwC1tkR3CeqaJTGz6WtG8kIp5GxPmI2NhB5b0R8T7t+rXCu8lcRw4udIfLSlmHkxHxOyJqEdFXeDeSK+TSUhfS075n87iNtdhn7pT5y/2cfnghU9INlVi8a2Sv7B8j+3/Wy+6DJaFsR1oxai7xKg4sYuy2LOaFOIN72IARjSfZf+UPY2o8Vu7ICHMAAAAASUVORK5CYII=", 50, 14}, ["COLT SMG 635"] = {"iVBORw0KGgoAAAANSUhEUgAAAB8AAAAPCAYAAAAceBSiAAABaUlEQVR4nMXTz4uNURgH8M+9vQxNTE0WbGyU2YiNBaUUNf+AsrO0UBbKyk62JHt/BMqOsiILG5QyKQtDhpoppMFcX4tzyjXN3HfeO2q+dTrPeX6e5znf00tiDDzBLizgIz7VfQGf8RSLI+LPYFGSrut0kkEK9q9h35vkSkuO40lmG5zFT7xYdbse3uL3kG4a59Gv5xtYWhU3Vf1mcAjf8aPavqHBJK710n3uczjYMWYtfGjwFcHuIcMAX/Coyg+VDqdxqSVp8B47sGeE3/UG97GCc0OGVzi8TtBRZaS9dewrOKE85aQy9gEmFDL2sRPLKnEeJ3mZ5GaSy0mOtRBmrsbdTTKT5E7+Ymmj5G0wiwc4guctI6WMfl+VX+MX3iikmsBVbKv60Rjjq92qHb5Lsn1I/6zqpzaaq996u39xABeqfFF517HRdPQ/hWXM495mCqNz57eV73Nys4XHKU4h0vxWFf9v2NLifwBur2bP2wW9HAAAAABJRU5ErkJggg==", 31, 15}, ["CRANE"] = {"iVBORw0KGgoAAAANSUhEUgAAABMAAAAPCAYAAAAGRPQsAAAAsklEQVR4nO3TPUoDURTF8d+EMWgjWrmEELBwA+7Byj24DfcgLsBFuJDUIWnSWKtoVI6FVwzDBDJgJf7h8L7uO+++4jRJdDjCGRZ4whvWGOEV790L37Q1NjgoPdZ6gjn2qq4ps318lLmav+C5xQNucFqHd7gos9W2LnpYSXKVZJREaZzkPsnlxt5OanHbeWGNJaYDumLj333MftNsMP9mf93sGIc48ZXD3emJxXV+OB8Sp09OyY4hBg1cSAAAAABJRU5ErkJggg==", 19, 15}, ["CRICKET BAT"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAGCAYAAACB1M0KAAAAgElEQVR4nM3TvQkCURRE4e/Jooj4B1uA+RZiGTYi2IP12IlgBQbqgphdE42MdC/qiYdhBmZKREig4IBFhtmbHLGsEowqrP2mBNRYlYjYocENY1wwxQkznDFBixGuGD70A/Qx/272F/a9BJOUbXaklISPPKe16Z7nY7YZRfiDs98By3wc4fma3AQAAAAASUVORK5CYII=", 50, 6}, ["CROWBAR"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAAAk0lEQVR4nNXSPwrBYRzH8dfPIjeQYuEORmUwkrJZbG5iMrqIAygZrMriAAwkkwM8Bj2Lkj+Dn+d1gs/72zcLIfTQwRYr7CQoCyFAGVMMccQcG4T8pr3l7H78SwyJ2pigmceqL13RfwyJamig8NNJn6tghsOzkJQs0Eo9pIg9Tv/+Oq8MUMI49ZARulin/Fp1VLGEGyOxKRfVq1bPAAAAAElFTkSuQmCC", 50, 9}, ["CUTTER"] = {"iVBORw0KGgoAAAANSUhEUgAAACIAAAAPCAYAAACBdR0qAAABPUlEQVR4nLXUsUscQRQG8N9GLwQRiQmx8T8ICEkhhAMbm1gk/4C9ECNYirWdjb2kshUEQyBgmcY6ELFTgk0KhUMxR8ixvhQ3F84jbvZk94PHvjf73sw337yZLCLUgEV8xM+yBQ/qYIEMQ+2wLiKP0R6mYLQGEs9w/Y/xabzCE5zhC379/RsRVdtSRDT64omI2ImITtzGeUQs9/KyiPiMqZK77SQbK8i5wELyx3GImYL8Taxn0b02eRocKUmoCDmukt9IZIoQmO8R2cAjrFVA5D7Yr1ORMmr08KO/R26whVndc32JVrImXqRFcjwsmLTXI2/wqSSRdh235n36Po/y+Fb1g9bE1+Qf46hk3W7VaqwMxK8jIv+PGqcRMVm1Ip2B+ADv8PuO/BO8RauOJ34QH3SbfxVzeIrv2MM2LuEPYkKR10ZxY1YAAAAASUVORK5CYII=", 34, 15}, ["DARKHEART"] = {"iVBORw0KGgoAAAANSUhEUgAAACkAAAAPCAYAAAB5lebdAAABjUlEQVR4nNXWT0uVQRQG8N9rN0ipILsLWykItjUoWxnUoo2r1rWoXR/BbW1dmKs+RDsXBdpCCkEIAi2EFoqJYGnRxj+V2nHxTt3b9b1q6Av2wGEOc+bMPHPmnJnJIkLJyHAD9zGAaYwlmcGBBLKSSZ5LRLqa2D/jpRrpT0WDyiZZxeohxwbeycmO4nXNElGmVONvPIiIpxExFwdjNCK6I+JPJFtxDUuYLzGSVXxNejduJ7mF8wX+3zFUwRU8R4c85E/wCBfxBadS/ybakvMazhbo67iMdvnR3W1YtF+ehzexk/qmMIGPiUsfvqXNrWI+i4gpXG+YbBmXsIXT/0iyFS2YRQ8qdfOuYBFX7cVk8vmAV3jz25BFxCbOFDiVhR356eyHn/JK70K0yO+tRiyndiu1gY06+1oTfR2/kj6L7YZ5V/C2CbFnGMRD9KIzrSuLiF68UMvJYTx2tJy8gPe4h5E6InfszUnyAtk3Jznh1f1f3ZNl4VhenEozj2PCDyw44W83xb+g8URq2iF+Qbv3DaP4pXIShgAAAABJRU5ErkJggg==", 41, 15}, ["DBV12"] = {"iVBORw0KGgoAAAANSUhEUgAAAC0AAAAPCAYAAABwfkanAAAByUlEQVR4nLXWvWsUQRzG8c+dSXxBJCCKhYVGkCCmE0FsE5CUlv4dNtbWYiE2VmJnrWITsFGigoj4gpjCRoIagyQaA3l7LHaPbI7L5XK5+8LAb/aZ+e0zMz9mt5bELqjhPubxET+aNGhOWH1+spy73KTBS8yVcR1/cLhFPrUkI2V8Aoea9LlycoNzeLTNgvbKKgaxgUUMK8y3NL2AI30yshseY7aMx3AJ93BacUJreIKzA/hpq+kVDClWu4q3FW0YFyr9f/hVJhzBOvaV2ipe40CHppcr8Rd8K+Ml/FacwF8sSvI8BZ+S3EkymmQ8yZkkQ0lU2miStXL8WpJrSY6V2vckr7LJSpL9TfN70ho7DQ/xDJ/L1oo5mzU2g2kcL3fhARZwsdQHMYp3He50x9Qrpo/ixQ7jJzFQxrfxVXGLzOMGpprGj/XG5lbquIUJ3FXUZDsmK/GbJm1dsYBqjst7NdiSXdbT9SSzSZaSHNxmzHSlrmf6UdPdTKonOd9Gv5mtnOq16XoXh7OBD2305roe7+IdbenG9E5MK+7TBld7/YJ+mF7B00p/QvGL0DP6YZrizm4wgCu9TF7L7v7yOmVQ8QmfUizgfS+T/wfEDAK1oC5O4QAAAABJRU5ErkJggg==", 45, 15}, ["DEAGLE 44"] = {"iVBORw0KGgoAAAANSUhEUgAAABoAAAAPCAYAAAD6Ud/mAAABKklEQVR4nK3TQSuEURTG8d+MkSk2FnbCwkY2FjbKZsoH8AVk5wso38BGslQie3vZscXSAslCE2KkFJMyg2sxr0zvzGuGeZ+6dTr3Of3vufeeTAhBTBs4xSX6cRHlJ1CM4lccoqG4icaxmoslV7DQRjHco4oPvKMniqvI4xMllNGTiToaQA63yLQJakc3uEY+q9ZBEespQ2AQU+jK4gz7mE0ZUq/tHApqj/+AOXQnmHexh3lMYhE7eGsBKaMqhFC/lkNzHYcQpiPPUAhhM1bXcmVj9KuEU91hOIpLOG/RRYPi37uQ4KvgBTNqs3X0V9D394YxnGj+RiN+hvVfqr+6pQTIA546gcRBMwmeAzynBRpVG65m6usUUg/K/+LZShN0jjU8xvYr6E0D9AXA3pDZrXRslAAAAABJRU5ErkJggg==", 26, 15}, ["DEAGLE 50"] = {"iVBORw0KGgoAAAANSUhEUgAAABoAAAAPCAYAAAD6Ud/mAAABF0lEQVR4nL2UoUsEQRSHvz0viVkspgP/hQsiYrtoMdusYhU0CVaD/ZJgt5oEg0EwKKKCQcQoiJ7owvoZbg6W4eZ0dfUHj9mZeew37zePyVRKyoAucAHcAfPAWNgrgLPwnQPHwBMwwXAVIa8NbKGWY9dqeh+x96Hmg0kWKmoBb8B94nS/VgNYA66B/b+CALdN4Ia+33M/+EGP/j2M0guwjbqsrqgb6nPC70LdUzvqgfqqLqqN6I6TES+sJ0BH6mzImVR3vgsYRCMq8zFRfg5Ml6yo3DTNaN5J5F2GcQkYBw6rgsrltUPvxzqpatNX1q3SfxlinVY+/RANQBmwkMg5rxM0A0z9ByjuvrJ6dYKugE3gYQikVQfoE6lqjTYJGXlDAAAAAElFTkSuQmCC", 26, 15}, ["DRAGUNOV SVDS"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAHCAYAAABKiB6vAAABW0lEQVR4nK3SvWqUQRjF8V/CKjFaRAW1iKIIqdNob6HgZ2kRAqkFL8BOvIRgo5BLSBkheAFG0CKQJgixUlyE+LVZEjVwLOYtJsuuG3T/MLzvA+eZOc/MGUuih0mcq+rP2KnqG7jY23QIzuMIdrE3RNvBu6ruYq2P7joWMN/Cc3zBN/zGJTysxEt4gwllyMfN/yjYw3dM4StOYRunsdn4gTNYxVZP/3Szx82xJDt40mxIubUTlbiLfdzHtX80vIo2xhuD20P0H/DWwUEo6aiZwDH8kKSdRJ81meRekqUka0kWk9xO8iyF/SRPk1xt9BeSHE0ym2QrB5kfcMbIVqtnwrO4izvKc7/EIjYqzZXqlh/huBKJNn5hHXN4XfXMDHmB/6aFk1hWctnBCh7g04CeW813RYldt49mHe+VTG/i1cgcD6Cl3N4GPg4wVTOu5LuDF3/R/cTlURg8LH8A7IDlsCBMiSEAAAAASUVORK5CYII=", 50, 7}, ["DRAGUNOV SVU"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABs0lEQVR4nL3Uv2tUQRAH8M8zx/kjxpAiKIqIFmKhWKiFBsTGRrAQW0GwFKwUsRZtbAX/Au0kRpuAIFHQLoU/wVYiIkbRBA1yp67FTvC4vNzhyyNfGHZ35s3M+87ObJFSUhG7cB6/4vwYs9iJgyFb8QAv8QlDaCDhbtXEZShWQGQvXlX0/YOBqonL0FiB7xyuxL6FKYzgMg7jXuiP4xKeyze0Tr6RWlGklEZxA4M1xNuCMXzGU/zGEbzGfB/fAczIBVqPZ7gftqM4IRd+CBfxPWxNtIuU0jhO1UCC3DJretjmMIw2fsZ+Qb6hQXnOvsT32+Q5msFJnOmINS8XaZHIzQYO1USC5Uks2kZivzYENsTawke8i/N77A5ZkAltD9umrtgbi1Rt2n9Y2ornMCG31yR24BuuyRW/hdH4oSrYr3ymm5guM0zK/bgczuICDnTpG/ga8kEmAo8i2Wa5pariRU9rWoqxlJIe0kwp7Snxuxr24ZRSO3R3+sSqTbp7+on8WvRCC2/lyndiX6zH/GuBh33rXBO6W+v6f/hOya/Om5Dp0M/itjwPq0akc9jHcXq1EteNv5A2BF7pvrjaAAAAAElFTkSuQmCC", 50, 12}, ["EXECUTIONER"] = {"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAPCAYAAADzun+cAAABbElEQVR4nLXVsWsUURDH8c+eB4KI4RQEEbEIAUkXK/8BsQj2CqnS2VgIVoH06ZLKImkCgRDExk4Qwb9AYqWRkCIQhBg0UULQSybFe8J67C6Xu/iDZXnzhvm+eTszW0SEBt3DW6xht8Gvg23sYB13sZntBfYwhtt4jPdFDfghRvAMEzjAlaYTnlE/WjUbH/AoQ+FiQ5BfA4C/9YLHsYyPmCzZLzQE+T4AeKVdWkxhHtcqHI9wuSbIHm5hBm/6BG+UwfdroPBbKp4qeCe/X+JLn2B/r/oSHjT4Xc3Q1zjMsK50zcdSBe/3CwURISJmo15bEfEiItay7/WIWIyIVl4P9LRxA88rzrQu9eVXPMFstnfxDidnyrBHRUQs4GnF3qRULNPSt+tIQ+AnlvBnWPBGDljWLm6Wgt+RWuqzlPHQaldASRVazujTecDKqptcq+cN6lUREV3/TqYtjKLx7zGsWngl9eKJNCTm/jcUTgGHOrFGuXB0YgAAAABJRU5ErkJggg==", 30, 15}, ["FAL 50.00"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABl0lEQVR4nLXVzYtIYRQG8N8do0byMT4WigUyk7/AnsiCsrBjJx8liQX5IxRNs7BhZzPK0grJxlIaJJJIZkFjmsTMMI/Ffadu0wx3bjNPnc499z3Pueec933PrZLogI04i2M4jJ6WvC2YwDb0tuTM4Afu4yReLOiVZCmyJkl/kpdJZtMNi/FmktxL8jHJSJJPxZ5u+NxdLLcqyXH8REqnNxQ9J/2NdzuxtWUnu2Ac6zDZ0P2N9XeYxeYiMIXpKsloITxWb/s4vhe5iiG8L6QzOI83GOyQ6Dn0qY/WYvilbuwcpvC5PI8UvQrrGz6pkgwV40JjYRA3sV19PifUha3GDgzjNz7gCo4U3hhG8RWHsKkRc3yevazoVXf7YLH7cA1HcRFPW8Q4UfQkTuGhOuE9eNLw6zRV2qIHX7AbB/BMvZX7/L+ICtfV0wtOF/5a9e6NLX+6/0CS/WWSPEiyq+X0qpLcbkyT4QV8BuZNpW8tY3eSXrzFLVxSX7RW9eMG/mAvLq9Ek5eCKt1+iG0wgEd4hdd4jjsr9bG/36imFGTzFhEAAAAASUVORK5CYII=", 50, 10}, ["FAL 50.63 PARA"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABl0lEQVR4nLXVzYtIYRQG8N8do0byMT4WigUyk7/AnsiCsrBjJx8liQX5IxRNs7BhZzPK0grJxlIaJJJIZkFjmsTMMI/Ffadu0wx3bjNPnc499z3Pueec933PrZLogI04i2M4jJ6WvC2YwDb0tuTM4Afu4yReLOiVZCmyJkl/kpdJZtMNi/FmktxL8jHJSJJPxZ5u+NxdLLcqyXH8REqnNxQ9J/2NdzuxtWUnu2Ac6zDZ0P2N9XeYxeYiMIXpKsloITxWb/s4vhe5iiG8L6QzOI83GOyQ6Dn0qY/WYvilbuwcpvC5PI8UvQrrGz6pkgwV40JjYRA3sV19PifUha3GDgzjNz7gCo4U3hhG8RWHsKkRc3yevazoVXf7YLH7cA1HcRFPW8Q4UfQkTuGhOuE9eNLw6zRV2qIHX7AbB/BMvZX7/L+ICtfV0wtOF/5a9e6NLX+6/0CS/WWSPEiyq+X0qpLcbkyT4QV8BuZNpW8tY3eSXrzFLVxSX7RW9eMG/mAvLq9Ek5eCKt1+iG0wgEd4hdd4jjsr9bG/36imFGTzFhEAAAAASUVORK5CYII=", 50, 10}, ["FAL PARA SHORTY"] = {"iVBORw0KGgoAAAANSUhEUgAAAB8AAAAPCAYAAAAceBSiAAABlUlEQVR4nL2Uv0tcURCFv923CYiIBgyIGgVNlUZsRAL+gIBlwCak0t6/ICmFFBYpRAKKjXUgdjZpAiGghZUiSURS6CI2QQQVNRK/FO8K6+Pu010wBy7cO/PmnJn7Zi4qaqNaVt+F832sJ+qh2nttKwHvgX6gE3gFtAIF6sNT4BL4DZxW2LuBNuARMA+MA6cF1TqF8nBEWkBzxLcGjAEn9yWeB4ELICmRZtnyH8UXgTMgQZ2zNvzNsbepTepztUNdV7fUHnVUfV3ZhEXgHNjPyfSyYn8A7Fb5rggsAMfAauB8QNpsZeA7sHcjImTxWJ1Sp6vcxB/1Y6hoJoxMDG+9OV47wf7MyPhlDYm6XEG2pw6pb9QNdVPtVr9EhK/U9gzf1+AbvE28qC5lyF6oXab/rE9dUQ/UXxHxckRgSd1Xh/PEC+p8hmw2EpCYXnsMP2MCeet68yFD9ENtyAn8FhHfrlW8FPpuFngITAAJMBlmsRpivtqf5Ew27erLO2T9OVL5Tq2VF6zvdf0EdAAb4TwAjJDO+J3xD3mTbSbom+uYAAAAAElFTkSuQmCC", 31, 15}, ["FAMAS"] = {"iVBORw0KGgoAAAANSUhEUgAAACgAAAAPCAYAAACWV43jAAAB0klEQVR4nMXUz4tOYRQH8M878zavQmnKgkxkIaWXYmtBkYj/wg41ZWXFamLF3p6lhcKGWCgbk/ErFppGTWj8GF6GGWOOxfOMruuaH/ctvnW7557vc89znnO+52lEhJo4jgvoxXd8xjSm8A1fsz2NL5jBJ/zAR8yhg0ncwIuqTRpdJHgLezGBlzVjNNCWklyP2T9WRETd524kbO8ihogYynEGqvgmLuNAIecrGEJgJfoqTj6FFdneILV3IQyihbc4hAd4I8mgldf0VJY4Ip5jyyIb/AscxnVJmz0YQG8jImYlof9PRH7uSd1Zi80Yb6qf3AQu4iHW4BQ21ozVwSZ8KBPNmgEfYz9eF3zrcDrb5/Aee3BfqsoxnJRaWMZYVXIgqjEaEYMRsS8iLpW4TkS0S9PWHxHvMj8XETvyv/N8T0QcrDPlxQqO46l0N53FzezfXTrTMB6VfEfRn+1rGPH79O8sxFsWmlLpn+GOJNSqFszjiXRBl3EkvwPnsz1T4PtK30vHEsp8ptDekQq+ERGTmR+r4NsRsbpOeyOi+nIsn2ERfpUkDzhR4rZKkukss26/UHeKi+hgm6SzFnZlfwujeNVN8KUmOIbbuLrAmuFuEvkbfgLCvN9GPBQiawAAAABJRU5ErkJggg==", 40, 15}, ["FIRE AXE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAABPklEQVR4nNXVSyuEYRQH8N+45NoIUS4LKcpWSlZKlJ2SknwSGx/AF7BgY6t8CiWKlS8gC0Wm3GbcjcX7TPOaZmpcwvuv03nP/32e0/k/t5PK5/MSiB6sYxGPUPOn5XwPc1grBEkWAktIkXwhXeiEuj8u5LMYxDTGY9wIdv+7kDTmsYxJPKGlZMysIGQLbzgPP7owhL4QZ0MCyCGDS1wEnwn8VfA53OAOz2FutoqiG9AfbAxTwRpjY+rLzOslOlozoufst3CD1zJ8+xfz3REJWcVGIM+xgyOc4hbNqEWr6GJ1BB//TqMtWKtodSsh/cWCK+GKSMhmKPQW23j5geT1IkGFVW7y8YhUiwfcx+JHHCgee7iGVMI6+wT2SrgTDCetj6yU4QawnKQdGcWh0MlLsJ+kHVnAMc4U2wHRne5+BzbzQJPooZf9AAAAAElFTkSuQmCC", 50, 14}, ["FIVE SEVEN"] = {"iVBORw0KGgoAAAANSUhEUgAAABYAAAAPCAYAAADgbT9oAAABD0lEQVR4nLXSTytEYRTH8c+9Rv6WkIUs2WrKfmoWysY7sPEilC07O2t/XoKNNZI3ICk7sbJSSgYzqGMxd2oa18hcfnU6T52n73PO7zlJRMAepnGIc8W0g/UkIqo4LQjrVCPF0h9Doe+/wHeppre96ANPeMV7lmvYwnwSEWWsYBVTOYBjzGEbdYxjDRXcYggDeMsiQU1EtGI3vqoREaMRsRkRadvdjbZzbiTZus3gGoMd3dZRRT/GcI9ZjGC/m0+lLC/nQOEiA7/gIfP1ElfdoNBq/SDHhoiIyk8jd7MizUac6HizhknND/m1UizkQOGsV2gLvPhN7aRXaAtc/qZ2VARcwo2mn89ZPGpuwXAR8Cccv8rWqd2QmgAAAABJRU5ErkJggg==", 22, 15}, ["FRAG"] = {"iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAA0klEQVR4nI2SMWoCURRFz4zaSSC9lRY2NlaKRfrgErIBi4CltQtwF1Y2gtO4AAMpsgaFWAhCmlRhCJ4UmcGvqOOBV93z+ZfHQyWYZ//5VdfqOMxDsaS+eco8lGOOvAB1bpDLVaALLIAkyPcndvbFUH1Um+okqJGoPTXKO9cyeaYevMyHWo/UEVADXm/1Bd5j4AdoF4gAnRiIsikiyuX0DjmNgQqwuUNel4Fd9qCIFeqD2le3V9ammqqt8DZ66vcF8aAOzg8JtaFO1U/1S12qT3n+BxKfG6GUHtoVAAAAAElFTkSuQmCC", 11, 15}, ["FRYING PAN"] = {"iVBORw0KGgoAAAANSUhEUgAAAB8AAAAPCAYAAAAceBSiAAAA7UlEQVR4nNWVPUpDQRRGD75BELFRxMLC0kpIoWtQxM4NBJIqNmndQMgObIONuAGxcgPWNoLiT8wSYqHx2OSBBJQ38yaFH9xmmMNpLt9FJePsqGfqnfqujtQbtaUuzf7PJS3Uvvrl73lR9+Yhv/xD+jNjdTenvFNRXOZBXckhD+owUq56orJAvRwAmwlcEyAAG8ByBFgAW8Ai0EoQAzSA4wCcAlfABbBaAXwC9oF7oJ0oD8B6ALrTh7UIcBs4BCaJ8g/gte7CHSUsm+ptjoW7Bt4SuAFQW/4J9CKZR+Ac+P8NV7Xbn51Tt5cTddW+AYZBqQeVEH41AAAAAElFTkSuQmCC", 31, 15}, ["G11K2"] = {"iVBORw0KGgoAAAANSUhEUgAAACgAAAAPCAYAAACWV43jAAABKElEQVR4nM3Vuy5FQRTG8d85FCQuiUKiJrQSiYhGQsEDUCupFN5BR6NU8BAKHVGIJ0CiIEFQ6cgRYin2JI77YY7LP5nM3mvN+vY3O3MREerQJiJi6IN8OSKWvqNdVh86MMq7ei0YSOO+RCkiRtBZw9j+9KHzqlg3JtGEZpziPuWaUtvAMdpwiS3sfsXgDoZrLfgGy55P6jPWcZGeb37DYA4L9VqDP8XUfzfYW0bDX7v4gNtGxU78KU5wmFF/VoqIdk/nVzPmEFjEQ4p3oTXF26oErjGNmfS+jTvsoYIjrGQYVI9bZDyeGI+IwapcT65+Y9bsCmZTX8GV4g8Opv7ivaJaKUVETn0f9hVLZBNjuYZeknvMzFdpbGdqvUmuwTWsKjbPQb6d1zwC+CMsNCrWQC8AAAAASUVORK5CYII=", 40, 15}, ["G3"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAALCAYAAAA9St7UAAABaUlEQVR4nL3UPUscURTG8d/qiAoLmyZaWKRSG0FIkSIhiGiTQpJPkG9h48ewFyVNCosUgVRJkxQJqURLsRDFqEV8Ib5tomNx74CZ3ZWZEf3DcJkz55z7PJx7p5amqZI8wnP8wO+yxRX5hDdodkpICjYawSwaqOMVPuLX3fS1cInjXOwfhjEtGGpLgg9RXCcaeIruXHympMgUtZI1GReYxF4uXkcP1NI0XcH4PQuBK3RVrF3FEXZz8QY2UU+0umzHMdZvvI+ht6CIWSygD+cFazL6Y90W/t6WmGC/TbwpXObP+IKfwlnNeIn3GBJM7uOPMOYzPMHjmFvDQUkDGYXrEuH8pcL4MuFfcXJL3be4yRAWsSyYHcU2lvA65g6Ukl6RBPOY034ynRiLD+wI03gRexzmeg3eWWUBEmESZXkb1ybeab2EN+/dgxip+heZiuuGVhP8b+TBjlYVnmECpx2+7wom1/C94h6luAbtLU9JNGp1kwAAAABJRU5ErkJggg==", 50, 11}, ["G36"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB6ElEQVR4nL3VO2hUQRTG8d+uMQkYNIgKxvgqFCwEEQJqaxobLS0UBAsbG4tYCVqqtZ1YJIgsItgKMa1E8FWpKX2DEVFDXE18HIuZ6HVd4+bG5A/DzO7MmTnnO2fmViJCSbbhcUnbXbhd9uBmtJW024caJlHP+1Ql565hKb7jKzpyX0Ul2x/FFQyVdbyRuQbSg8M4jhW5FXmHviZ2n/Epj2t4gDHsx0t0Flod45IQy/AC9zAym2OViLguKfYs95P4gqm8aR/WYTO2YElLIc+PD5IoXVIgb3BBymg9r1mJ7jz+1oadWCuVQDOWY1BS9Rz6/7/ff1DM9qrcv5WErhfWdOMjptvwSlK8GT3YLmWhA70lHbsv3Z2Zl6UT7ZjIvzfgtVQFf+OSFExTKhExgr0YwFNJgbpUo8/xSFKikdM4IZXhmFTHW7GnYd1ZnCoEsTBExM1ITETEwYioRIQW2uVsNxgR/fm/MxExFb/T1eJ+82pV6amEI7jaonK7cSiPh/Ae6zEqvURFVs9b7VaIiNGIeDiH6KsRcSerPdxkfk1DRg4sVkZu4OQcYu/160U532R+XLpbMzTemYWhpALtEXFslvlaISN3FysjZZjGxVnmhwvjHdhU8pyWKRvIv7glfTsGsBFPFuicn/wATdwxlPjWUp4AAAAASUVORK5CYII=", 50, 14}, ["G36C"] = {"iVBORw0KGgoAAAANSUhEUgAAACYAAAAPCAYAAACInr1QAAAB8ElEQVR4nLXVzauNURQG8N/hupebMEAikVs+y2c3mUiEMrxlJB8TGUkmpvwFBqaUkoGJUiZXKUoZSEImlIHkI5Krq3ze+xi8+/DinJxzylOrd++91l57rWetvd9GEj1iO5bjLCa62DcDz7AJz9sZ9fUY1C6MIliFj5hS/N3FN/SrAp7EdHzCIObhMw7jVNH/hUYPjA3iJE600H3Dlj/WxtAo40l8wRtcwTjO1WwfFp1Gkh1lczv0YxaWYBh7MbvTLAq+4xVm4j2uYzPWlUAHit0tbG0GNlYOOqCieExVovHi8AiWFYdrVKX7n3iMeZLcT4W+JFrIodr4aP4/didZ30hyA9uwAk9K1ItUt2YOhlTNG1UpphVZrSpHJ7isavQXtbX5eFv8DmChqndHMCHJaIn0RpILSY4n2ZNkbhsGmzJUy/J8yXRnCwau/sNPUxpJ1jbnfZhay2AfXnbIwrHyfYhLuIOluI2NheWmvhPkN9skN5NMJtnQYWaSrEzytTCyP8nsJIuS9CdZnORujbGLXfj9KZLcKY662Xi1HPo8ybQW+gu1wB71EtgUnMbBDummeuEfqJ6WM6pH9U/cq41XqS5Rd+glm/xq/gVtdMP5HSO9MNYrnuJ1G909vKvNd3XrvNef+L8wgWv4gIuqm9oVfgDr8cpHGQRouwAAAABJRU5ErkJggg==", 38, 15}, ["G36K"] = {"iVBORw0KGgoAAAANSUhEUgAAAC0AAAAPCAYAAABwfkanAAACKklEQVR4nK3Wz4vVVRgG8M91ZmzMNH9gmrkJEV0EKigIigi1qV1Qbt1IMCBZC9Gl4EZo179Q6dIIcSGKmxJhNlYui8ZEaPzBoNaUU93HxTnXuc6MM3Pvdx544Xzf8z7nvOc57znn20qiAd7BrT65+/FDP8RWg6RP4xOM4/9qr+AnfIchPMVAtTZalRscxDA+x5NeJh7sI9lNOIITeBVvzuifwLraXtXlDyaxEr/hGL7FdXz9krna+FJZ/HO0kpycJ8F2JazGZuxQFBqYh/MyPK1Jw5+4h7eVBU7UMf/BGzVmCr/iM2WRqzs5tZKM18B9uF0Hn8JfNehdfIQxrMGpPhJuggksV0rvLqZaSUaxBxvwYA7SoUr6pcbcaJDAPUXlDjbhj9peruzmWFf/EH7Hge5BBvGotnfiKl7HbmxVDtdwl49ppYdxHGsXkexjZZu/wn+LiO9gKz6d5U1yKQV3klxJMpJke5JWEgvYxcq9lOR4ko1JzmQ2ji5irLlsKMn6mf5B0zfIfXys1NBisAfv1/Y5/I0VVckL+LAr9nYP6nbjXzyc5U1yraqxqwcFWkm+r7wf6/eq2rcxybYZSo/0qfScNqjcmz/jZg8KHFZeNPhCuYM7D8S4cqAnlXuc6fOwNEjyQZItPa52b5LRJGO17uaK6exEktxaSqWbkJctUFJnu5JuJ3lrqZJe1mCT2uYvqcszvt9rMNcLaPLDtBBeUx6i8/jGi49GIzwDdb6ek0arAxsAAAAASUVORK5CYII=", 45, 15}, ["GB-22"] = {"iVBORw0KGgoAAAANSUhEUgAAABwAAAAPCAYAAAD3T6+hAAABUUlEQVR4nK3UPUtcQRQG4GeXBSVIAgYLSZUmBCRFCoOCrV0Ka+3FIhD8ESlEEJI0FnaGKFgEf4DZwmBno5WEVGoRIaRLFNSTYmfx5jp3ZeW+cOB8zbxnzpmZRkQs46EOGniNUb1xhOOkP8J4IfYXWzhP9jq+dYONiIg7Ns/hLT4kfRJ7PXJP8LNrtO5B1i/+4HeRcAVDyR7GTPK38b20uIU5TGMq+R5nSHbwI+mfsNsNNDIdfY6v8nNcwBu8T0SDWExFX6ScY2wgP6qIyMlG5PExIpZKuZsVe2Slma2CsQr/FQ5KvgcVuVnkLs0EXmT8v3CGEcwn3xM802nteWbNbWSO/aWine/6aV2VlC/NS+zrfABFXOGpm8d+bxRn2MJqhgy26yArE87iVUXeWh1k+G+G7YrZnUZEs475lZ/FSEVNh7iu64BFws+4zOQM1EUG/wAKREZ/zXo9+wAAAABJRU5ErkJggg==", 28, 15}, ["GLOCK 17"] = {"iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAA7UlEQVR4nK3Tr0pEQRgF8N9eZQ2aFN/AYLBYrYLNpPgCFl9Bk48gYtksgj6ACGajIAgWETGLLAYNpmPZCxedvbB/DnwwzDdzvnMOM50kGzjDlcmwg3NJTjJFVOhMqKyJfoVL3E2JcKaTBLp4wsqQg0d4wTK2cK3srC9JXReFSD6TnCZZa5w7aKz/VdVgXy1MfMAhtlENFHbbPNeWl/A+uNTEMb4w29h7xM1QxoHU3SGvYK7NXpvlzcKsN/y02SuhwgL2Cr3eqGQ14T4WC73XcQgluS9k95FkftT86gzXC3Oe8T2OwPrr/cXtOGTwC3lWNDiscuQ8AAAAAElFTkSuQmCC", 20, 15}, ["GLOCK 18"] = {"iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAA6UlEQVR4nK3RPUpDURQE4C/P30orEawtbMwCLMXWVreQFdiJra2QKr2CnV1wAS5AEURsrEQEXYCIY6EPQrx5kJ+BA5d7DjNn5rSS7KCLS9OhjWtJupkhqim3GsZHhXPczIiwaiWBJdxjc8TgCR6wjl300SrMvUlS10UhkvckZ0naA3Odgfe/Gsxwq6B4h2PsYw4bWGjyXFtewyuGj3SETywPifRHMv6teliw+51kvslek+W9gtYjvprslVBhFQeFXm9cspqwg5VC73kSQkluC/m9JFkcN786w+2CzpPf646NCqeF/6tJyOAHPB00BQ9CloEAAAAASUVORK5CYII=", 20, 15}, ["GROZA-1"] = {"iVBORw0KGgoAAAANSUhEUgAAAB8AAAAPCAYAAAAceBSiAAABv0lEQVR4nJ2UvWsVQRTFf6tPIipRMCGIiChBUDD4AbGxMURJJ9iJoIUfhZUK/gk2NiIoltomhRBsA9ZWIfiwsFAUSWHziIkGYl5+FnvXjI/dl3UvXGbm3LPnMDt3JlNpGFPAI2ABWASWgaUYl4EVYAIYAB6WCbSaOofhSWAc6FZwMmCwSqAFzADfgH3AnprGg8ApYDvwChgt4awCG8C5Et02cLkFXAR+A8M1jXvjILCjorYXWAM+AG8CGyPf9IlM7ZDvuklsANu24KySn3svz1YIVEXRjVmCvQO+kjfVGvALeJDU2+Q7/QzsJ2/IZ8Au4DtwHXgNvERdV3+qU+pZdVQdUXerqCv+G1cCT7Od1J+ok4GfVs/HfGfUr8X6AOqceqtEsMgz6vtE/EUJZz5qs+oR9Wjk4YRzKDj3CqzKsDfvJ+YddTipDandqN3tozEUnDsFtlWzFDEd5wt5cz5NahNsNtNcH41O9FCnAOqaLwKPk/VV4EbMJ2P8Anzso9Elv26fCiCz/vM6AMwDx2O9Dtwm/yM3Q/xSXTGg9pkXOab+SM6/qx77T42/2eSjC+pSmD9vatzUvLi/b918CxrlHxyykmaYSfikAAAAAElFTkSuQmCC", 31, 15}, ["GROZA-4"] = {"iVBORw0KGgoAAAANSUhEUgAAACkAAAAPCAYAAAB5lebdAAAByElEQVR4nL3WPWtUQRQG4GfjwqoorhIIGkgIqKVVQNBGwcLKStDGSvwJorWdjT8gNhb+ArEQ3E78KCWgERvFgEGLxM2uRqNyLGaWjZf98u7iC8Odlzkz8875mDuViDAGjuMemniHTXxBG638beJi5tfLbFIdR2EWdgKX8XCA3W78KrtJFTek00P9H+YewUl8x3mc62PXxFGs41EZkZWIaGMVx7CrzCJ4itN9xlYkL77K/VnslxzUlsQv4zC+YgvT+IFv2K5ExEfMYKqkwMgLbw+wqWFPyfVVpXwpK5Akcm9ug/AA85jLtjXdQnuDs/iQ+zXJ+y3Zk53yfok1KQQbutW5gEt5YgdLuC3l25YUliVc22FzBzfxU8rZadzPY/NS/r/N8wcjItYjYjUi6hGhRzsVEc/jb9zqYXdlx/iLiFiMiLk8thAR+/qsP7RNZY9c0K3wIp7h7tDTpjuzg6tS6Fo4qHt3lkI1ixyGzQLvdQt0rqA1vJZydSIYtWA2CvxQgdexmPsNExTI6CI/F/hMgZ/R/Xs1xhHUC6OK/FTgswW+IuXteyncE0VlxAdGRQr5gczbUoh/T1pQL4z6wAg8kaq1gcf+k0D4A0358UBFsaTkAAAAAElFTkSuQmCC", 41, 15}, ["HATTORI"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAECAYAAADMHGwBAAAAnUlEQVR4nLXOS2pCURAE0HMlfmIUNCCuKzvI0py5hywkOHYBOvEXBdtJDx5BHhfFgqYKquiqEhEq0cG1NvwgCj4xTW7qNv4pEfGNeUVJD6sW/w1jdDHK/Af6GOIdg9T99HqZ7eaoScWOCzbYYo0FliUijlnwapxwzDvhgL8Gb/M2d7ipd/eel4j4wqxiyAC/Lf4lS87Y/xt5qPj/FG6GtjGY12SQPQAAAABJRU5ErkJggg==", 50, 4}, ["HAVOC BLADE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABpElEQVR4nLXVu2tVQRDH8c/1QRQNKFgZRLGwVhHSCtZqZWejpYWNNqKi/gMWAQsF0UJtg4gSotiLL0QjCIJEBAmRGImPGEJ+FmcvHJJcb3Jz84Xl7JwzO7OzZ2a2kcQqsBGDeIBr2INZ/MZfTOPPf9ZvRh/24zG+tXPYKIGsxSHs6mDTn/AEzRPZh6s4WOQf6MWaRdbO4JcqyKliYxK7sRVzZTzCdQwVeSFJ+pOMZGWMJrmf5FWSuRXaavI+yUCx17Q5muRikr4k6kOSmSRDXXLeTZ4mOdni22ySh0mOJelJopEkOI47HaRVO8ZxoSafxzCeF3kvjuJKTecStrewVy/oRnlO4EwzkAGcXtmeW/K9Nt+iKvTpIveoGsPkPJ2GhWTe+zHcxS28k+RUkp9dSIWxVGm6FKaSTJQUWQ4zSQaTHEmyPrUaaXatHTihannt6MW6mjyCm/iCTbiMs0uwsxze4LbqD4wvptAMpJtsK85e4BwOqO6Pj2X+ARtUh/dMVSdzeIt+fMYNVTu+p0qd1+2crkYgvWWzh/GyQxs78VV1zyyJfxkRnYFvaWCLAAAAAElFTkSuQmCC", 50, 10}, ["HECATE II"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABu0lEQVR4nL3VT4jNURQH8M+b+cmfMv6FopAFGlHDStnJRoqNxE4WktlY21gpG0UWw1JNWSglFNlaqikUg1HqUSQxkaF5x+L+1OvH75n7Zp5v3X731z3nfs+953vObUSEHmIHxtDqJQn0deGzNMP2I5Z3wZGNItO+gdX4ip9YjPU4jFt4hAEMYis24R4ezFG89YFlSmsDXmdynMRIpk82cjPyRpJKYAorcAH3cRyHpIwNYg3WYQLLSv/dpX0fTktZnA36JQVoRMR57JS0P4X5kmz6S+NpzMMlXGvb5CYOdiBpYm2H9XFMlpzNzAOQLuo9LuJIgSHsmYHjASxo+x/6h33dIUKqtXG8lS7qywz4q/iOH1KdNnKktRLD2JZJ2JJa8CS24BzeSQ3gU+ZedbhdYGEHg5cYLccL7MOdcm1U6khnsbHG/xXOYAm+YRGu6y4DnRERz+NPXI2IXRGhMjaX69MRMRwR2yPiSkS0Kv6tiJiIiGN/2aMno8CqtnM1cQp3pYKv4nct3cDlcn5C0ukHPMFjPJWk9N9QYL9UfAN4JrXLOuwtv9UH7ujch5aHAg8z7Mekt+BzT6KZBX4BjRT2nNo+BfYAAAAASUVORK5CYII=", 50, 13}, ["HENRY 45-70"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABIklEQVR4nMXUu0qdURQE4O83okjUQkGxsRESxCBa+AaCRRB7S0GLFD5GUlsKtj6CD6GgiOaiiUWEBEmiEgSNeMlY/Kew8ZzjhePALtZe+zIze9hFEo/ENNrv6J3jEv34jmM8+kJ0YR7vcQHFA4W0oA8TWHwCYsHfe+55iVO8wF6RpBqREyzgB5owinG8U7r8VKgl5Ha/A81ow68Kj9YiyRrGqhxyhlUMo/vW/Dmu8AFHeItJ/McUDuog/weH+FdjbW0kWcr9sJFkNslQkrkkr5NIMpBkN8lypW7oaMZWnZp/YwYrylwO4CdG0IleDCpfpOGoJuQa+8oMHipjs443yp/oG742gGNdKJJ04yM2sY1PlfqzMrs9eIUvStd3PJPr1XADdZTrpjR8aVoAAAAASUVORK5CYII=", 50, 8}, ["HK21"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAALCAYAAAA9St7UAAABhElEQVR4nLXUPWsVQRTG8d/K6uVKhFwriyRoLGxUBCt7sZKAoDYW+j1srMTORhubfAkLUUidBAWJEhGMovhSeDV4IyYQcsdiprhZdpPJav4wzO4+z5xzZs8wRQhBC05hDC+x1SbAHrmOcTxqMhR72Mgl3EAXPVzEM3zDRsU7joBfNXF6uQlHmMQXXG0yFCGEWZzZJdBRnMAnTLUoJJff6OBgjbaMO5VvQ/xBWeIxbmUmGmT63qOPY5jAgcx1Y2leQzHyviF2/lrFP8RPHCqxkJlkDd+xmgKvY7rB20vaZiroLmbxDveStoQHSR9l3fajejx5PuxUXBFCmMZKg76C+5jDmxp9gCNJ7+ArXmMG50d8h1OB+0Yptr6JF3jYoF0QN7GJKzid/JO4XPEO/63M3SnFv/UEP8Sj0xfPY19sfxM307wktn8LZ/F8n2rdmRBCm9ENIayGyO0afTFsp9MyT/bIvU2qTOFjen6a4e+2zJNN2XLdW5zDSXyu0QeYxyv1l8R/5y914O4uU5hBIgAAAABJRU5ErkJggg==", 50, 11}, ["HK416"] = {"iVBORw0KGgoAAAANSUhEUgAAACwAAAAPCAYAAACfvC2ZAAABx0lEQVR4nLXWu2sUURQG8N+uGw0qIS4+EBXBxkp8BLGzNo2FWNhaW4i21nYBwU78C6wkgq9yk0pRAipBBUXEBxKIhCwY0eyxuFeZDOs+spsPLnPnnjvf/c453zBTiQgD4DDeDELQBufwGU/aBasDEI/jKHZg8wA8ZezuFKz1SXYElySBFwvr9/EOLakIFWzFKFbzniqitGc1a/iFu2hgL17+T0AlIhrY30HkJ3zDGCaws48E4SeWsQnfsQdLWMHBLLyaxU9hEi8wm58fzYmOoFWTWnuow4HjOaGxdYiVD1vBtjaxZha7iK/YhVdZ/ERB8I/Ms1CJiPlMtiBlX6z2e1zBPWyR2jbZg8jfmJes080SXzCHGTzoyhwRz2MtmhGxmMfxiFAYZyLiWXTHndJzQxtVyRt/8RT7UM9jrpTfI0wX7k/mSl0r7VvuWql1opZFvZb8dFV6ITrhWL62pGTrUquLGLFR6LMlpwttv11Y316yxK2NtESvqOJGni/heiHWtNYGBwasY0cRveICTuT5FD6U4m8L81N9cveMfkincR438bBNvFGY16Wv4vAxRH+dLfn48kZ4uN9/iU6YxUfpA9DA4yFy/8MfO2b75SIbwhAAAAAASUVORK5CYII=", 44, 15}, ["HK417"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB7ElEQVR4nLXVv2+OURQH8M/zpqWt3yJBWEwSIWFAYhIqxCgxsUknEavJajXaicHgH5AIkSqCSJpIKh0YiK20Wu1b7THcK63H03rex+ubnDzPPffcc77n3nPuLSJCF7APb7vhqALXcBsfVzNqdSHQZhzEFvR3wV8Z2+sY9TR0fhrnMICLy/RP8FTaoLaU2GyO05917TxeWMZhDn15rpWlByPYU4dQERH3snGxit2bHHgNDmFnJrahTpCMWBZjNpOdz+TXZ92P7LOFr9iU/y/jecnfujw3g4UiIl7g8F9IfMtBW9n5v2ICvZjOsiMT/45t0mmszePPmex8RSJ9+IK5IiJGpR0Zx0YcKS0YkUppKicyhFsNyE9LJzqZiS5Kp1RVWm3ckU7+Qh3nRUQM49gK8w9xsqQ7gLM5yNUOEtmFTx3Yd4aIGI0lTEbE8YhQQwYiYjGvG4+ImxExGBF3oxp9Nf02kh6MSXUYuI5nNfdgv6XmncMjqaYnKmynpD5433zLV0fR8EFsSdfsUWkDTkiJ/MKk32+0eakP241Y1iTUBJekJOA+hkvzY6Vxr5X7sCtokshW3Mj/M7jiz6vxccW6Mw1i1UaT0urFeZySHrChCptBPCjp3mFvp8HqommP/A278TrLq/x9iQ//Ixj8BCDzFJ97l5j+AAAAAElFTkSuQmCC", 50, 14}, ["HK51B"] = {"iVBORw0KGgoAAAANSUhEUgAAACUAAAAPCAYAAABjqQZTAAABnklEQVR4nLXVPWtVQRAG4CeXo6iJiaQRG21E/MCPmDIiIlb+AVFSCv4Af4adnZ2doIW1IkJEuxQmETQEbMQvojeKN6JG77GYBQ+ba/TknvvCsrM7Ozsv887ZM1SWpQyj2IF3uWMAeIWDWK1uFmnejj0ocQ+7MYmPfSTsYO0fZ1o4hNlepC7jehaw1AehOhjJNwrcxPkBJXyDYSHPML6K1hgTKowKRUaEWisYGyrLcganGyDwA9+x8z/Pd9P8XrRNC89woEAbTzBVk8RzPMUvHMVxUZF5HEtn2inpsvhwqvYsXqaYn9WLC3zGtD8SjuMkTuHwXwh9wVZczPbf4kLyL4vq1UYhyriKO5nvWoXUfSHLQlp3RMmvZjG38GIzRHJSbdFoncx3rmJfwQTuppgJUZEc6x69zaCFG6JBqziCE8n+hH34IGQ9KyrWtR6NkCr0fo+mK/ZtPMKutF7EtyaSb0QqRwuXKusHogIrgySSE8gxhb3J7uJhjfu29c1I70o9xhkh4X71/n9bGuDUk1SJmTQ2wpp4PBfSmMPrJkj9Bv08X2HuQWD8AAAAAElFTkSuQmCC", 37, 15}, ["HOCKEY STICK"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAAApElEQVR4nNXSsQ1BURyF8R9RaRQSE2gsIDYwhcIMZrCCSggljS0sINEpqREJCa7iPaFARCIv96tO7m2+k//JhRAOOGGLq9fscX7zlwUXjNC7PxSwkhT5xBrH/3l9TRFNiXdd4jSAXAghQ6+faEvlJSuqYZPPzudnhlimuYQuxFgE+k+5hWqM04IKNh6HGMdaBOZopHkX67Rg+pRnMV+kjAUm6NwAvEgp7xTIxOwAAAAASUVORK5CYII=", 50, 9}, ["HONEY BADGER"] = {"iVBORw0KGgoAAAANSUhEUgAAACcAAAAPCAYAAABnXNZuAAABeElEQVR4nK3Vv0tVYRgH8M89qJQOQi0tIQ4JbWKDgmEudwxxksaWwv+gIXJxCPoDdKi5KajdQacC3QKHgkCJphpEMPOCj8N5hcvpXm/nPX3h5f3xfZ7vec7zvD9EhAZtJiIeZ/q+H2RTaIYCNzJ9xwcZDGUKz+EB5tHGLXzBedIs0ME1tHCC4eTbSfw8PuI13vT6SCsi9vAIXytcGy9wvYffpH/LWKTgstCKiMA7/KpwU1jMFU74L8G18a0HP46baTyBVdyroX+MjRRkP/zGfo/1cxFxFhEjNU7ZXEQ8i4iDGIynTW6DQrnXzmpk4xNe4kOad/AQY9iq2B7V0P0LBT5n+k6nPvBHeWJPKzbDmiAiRjNSvtRVuudd64uVsq40LetJzf8Zwas0PsRmF/ejYns7M2eQ9UI8wZ00XsPPLu5QWeJLzGbGhbwX4q0y2wvYqXCn2MX9NF9Q3nNXXSX90WRP9GnrlX13N1cr9229CttYTv02vucKXQAZXiZ33EcJAwAAAABJRU5ErkJggg==", 39, 15}, ["HUNTING KNIFE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAAA60lEQVR4nNXTvUpDQRDF8d/FWEVEMKQRtBPRFzAggpWFj+PrpBJsfQMbsdLCRgRBrAIqRK0s4tex2GuhhR94FfzDMDAsZ2dnz1RJNEgfW9hrUvQrtOpcYRZddDBd505dm/pEZwILmMMjeg30NsIBDvHwwbkuZqokPWWSiw1c/hvcY4Dbd/W2MrhLrFdJTjH/x801xRE2cFEleVas9V+4wT52sK1YWQvPGMNQWdIrXGNc8X1b8egZTnBX1zt4wjmCFaxhs9ZZwnKDDxjUusd1z29JMkyym2QyiR9GP8lqAzrfjpayMKPXL/qvvAC4rMwnD9xXDwAAAABJRU5ErkJggg==", 50, 8}, ["ICE PICK"] = {"iVBORw0KGgoAAAANSUhEUgAAAB0AAAAPCAYAAAAYjcSfAAABcUlEQVR4nL3UMUjVURQG8N/TCkIhHBIiCXESMhqipoKmEEKHxkApp6aQdnc3hyDaoiEa2iKoJYQ2EYoIWmyMWpIHQlCafg3v/unPH8t6vvzgg3PPvfd899x7z2klcUAYwiU87TsoRbQxg9ahHgQ7gjPF3sYXfC52ExdwtlvRc7iGqziNZpxNfMAqlvEMOxjGdOsf3nQINzCHiZo/+KST4Y+ybkTnBipsYQ1v0L9Xpn2YxCymcbSceAUv8LJk862x7zDGcR4XcbnEeoJ5SXbjsSTzSdbyC6+T3E4y/Js9f2IryVyJ87E5OZrkbpKNsmAnyfMk75Pc7EKszsEkX5O0646lJJtFbCvJwyQTZX6gZnfLhSTbSaYkOZnkcS2zR0nG9inQ5PEk6+XJSHIryZ0iOtljsYpLSR5U46pkxnAf7/Cq/Mzve9XQX2IAb8tPbkOzTvvt3kn2g+s4hcXK0ey9vRaEK7hXd/zvhn9Cpwtt1J0/AQI+AwH0NOaQAAAAAElFTkSuQmCC", 29, 15}, ["ICEMOURNE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAALCAYAAAA9St7UAAABPElEQVR4nM3Vyy5lURAG4O8chwShW4h4AiHmPegJiRfoMPIAhDD2Et7CxIgXMDBmYqSZGUnc4hrE7ZTBWh0n4tK2kzh/UlkrWVX/rqp/1V4iwietEhGzEXGUbbIAR92t7POoYhk7WEEZPQV46opKgZgqJtCFQUwj6plUEZQiCuXQigWcoF9S6C8OcIOreiX4v6igDb+xh2Opu224zz7NuM7rKH5iDGfYwh+MoEW6Zj/wgLvMdY6mvD9Eu6TqRU0eZ55VvcqxcJu/DY+vxBxiDbuliFjHrxrnpg+Kr2IOGznxQSy+8GnGJobe4dlHX+Y7Rbek5r9GnqMTJVyio6bQ9ry/z+fzpYj4iiKrmEGvBlDknaa9iYackSKYlubiBMMa4K9V5B0pY0m619uY0gDvSNFCxjEgzUpVmq1vxRNXRwR/GJ3ktgAAAABJRU5ErkJggg==", 50, 11}, ["INTERVENTION"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABxUlEQVR4nL3VO2hUURDG8V/iGhUUiRiFFAqJYKMBA2qjIoKQxk7BLoWNjaCVpaVt+oCQWnsrK0ERGy1EUogYENRExCcmxnwW92yyLrvZzUP/MNzzmHvPfDNnuD1JrJMd+IyruLPej2wWtS589uE+lrCIl2U8h18Yw7HiO4AjGCzztzi6ifG2pRshWzHaMD+IbXiNeYxge/HbU8Z1vm1OmJ2pYahhvoiZJp/3OIQeXFdV4SzuNvicKO8+V4l5iF7MNpyzC7/xZRPjX6YnfzfJjCrjzUzgCnZ28c1F1dXrxdey1klIMNldyMv8xH5M4003VwtO6k4EVeX6yri/aW9LizUqIUMt1lejLuQ75qViJslwkt1JNNlIkqV0z6skh5NMJekvdr7sTTesNVvzuWuyekUWcLGN8gMly52YwDuMq8o93rC3gGGcwqc1Zr47SqYerKL2dPF5nGQwyZk2lbicpC/JbJLRJHuLDSS5kWQsyfGNZr5TRVbjWnlOqvpkDve0rmBN1cy3VY3da6XxH+HpBvPelrqQZ232z+GS6s89VYKDJ1oL+aG6Qv+dWjl4rs3+BXzETSsiqDJ7Cx9U/5lZvPh3YXbmD1gslWkEpeM2AAAAAElFTkSuQmCC", 50, 12}, ["JASON"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAECAYAAADMHGwBAAAAkElEQVR4nM3QuwkCURCF4W9hYX3LJnZgA1ZgAyaWYCBWZmYiNiGCmYGpqZmCaCDXYK/huqCI/nCYYTgMcyYJIcAKQzS95oxjhecXHFIk6OGkOkg76p+4YppiiT4mio+XMcAIKTJ00Yh9/tVTy9lihk0SQhhjj92HSzNFsA5qaEU9Q9fjPH/Te8Ml1jXmWOAOD3rDGjgve6YhAAAAAElFTkSuQmCC", 50, 4}, ["JKEY"] = {"iVBORw0KGgoAAAANSUhEUgAAACsAAAAPCAYAAAB9YDbgAAABjklEQVR4nM3WPWtUURAG4GfDTREUBMVCm0DAH6CFhfgTtIuNnYiWWlgKolhYaiWCoDZiIRaWfiHBwsJCUAvxo1BQQVTWgOJHzGtx7uJ1NzFuvLh5YWDO3HuGmTnvmTOSWEJO5nd8TDL+F/tal8riOIO1mOyzf8PFWj+B+3/w0So6SZrrddhc68ewbYn9u9DFWzxoO7gB9JV6Q5L5DI8j/4MGnSTbsaMR/wFMDJnzJ4Ue53GopToOoJNklcK7TS34u4Gzi3ybUeiybHSSTOEwnmCvdoJeCMELzDdsE/iACuO1bRarlZMaw1ec7gU7g0t4plRmxaLCHqWya/DUaCo7ZeF78kap9D3cWSmcfYX1eK309S7mcBBXlQuswhbcwnX8wD7L7wYPcXnIvT28xDkcVRKbVR6faVzBQJ/dOKI+ezzJqdrX/iR3kzxOsjvJzmafbWY3iheswjXlNOcUbvcQXKhlYDZ4j5u1Pq1waRJbG/+8w+1af+7fZ4MxPFJa1xd87wv286/V8FNXNyOaun4C7uyPkfZxtm4AAAAASUVORK5CYII=", 43, 15}, ["JUDGE"] = {"iVBORw0KGgoAAAANSUhEUgAAABkAAAAPCAYAAAARZmTlAAABX0lEQVR4nK3Tv49NQRjG8c+5Nn4kiO00K0Ej0fgLRCUSShW9RDSiVMvWColKJxKJUGjo0GokCg13E2ILimWDyHLvozhzk7M3Z04s+ySTOXnf8873nXlmmiQGdAp3sI6v2Fvi3/CrfE/wEe/xs1N7CBfwqqlAzuIoLuNYgewf6mZIo0r8JU4XAOwaWOPHQO43nknSHSeSPEqyns3aSF0rA7nzSSx0qJdwE3t6OvqOA5Vuv5T5Kh534sEKNkFOVgCzgjVsFGBXu8v8FOO+4pkn+3CmAoBFTHG/AI90GtqJt6WJSoutFzcGznWcZDnJvfLvYpLbSZo5P6tjhCVc6+G/xhO8wHW8QYMdeF529FdqktzClZ7cuQK5iM/asz+OT9oHOtkK5J32jLtaw0Gt0XBY6994KzuYaaEHAA86AMpV/FfVXvzd/1l0Xk2SyRxsVXsZptsFGeGh1sQpPmB5OwHwBwIu/VPhwT22AAAAAElFTkSuQmCC", 25, 15}, ["JURY"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABVklEQVR4nMXUPUtcQRQG4OeuSwJrUmxIE+wEMfgBQQiRNPkPYi2CIFiIBBKwshT8BenszE8IJF2KYCUmaVJoYWGi+I2aQlkZixnxclHiXZfNC4cZzrzn4505TBZC0AJkmMAxAo7S2pF8y4lXRz/GsYC1Juu9wjvsYhbHWQuE9GAKb/ELD3NnD/BMFCOd1dL+Iucvi8eopv0pzm8TUsPTZE+wgfUC5xGmMYIhVNDIFYCDFF8Wo1gtE1DFe3QmG05N1Qq8c7zGSs43hvkCr3grFfxGV4mevuILTkrEyEII29hH3z+43/FSvPUMPzGQO9/AJuYwg8/i+PzFYCFXSDX3cuueOPNHZQRcoYotnN2B+wKLWMLzgohJ8RUPU845UWjbkIUQPqUm3jSZ44co8r+iIr5I4x45PrSol3vharTq+OZ6XneT5Wd4HzvoFv/wXvzBx7Z3fQMuAd7aWIxR7/0uAAAAAElFTkSuQmCC", 50, 9}, ["K14"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABRklEQVR4nL3Tv0vVYRQG8M8VLUshaBFxkEahXPwDmtqipaYaQl2E9hZxbO0/aGkIAkehrUH6ExqCaLApAuVqSWje+zTcU30NhfujeuDA+T7f933Pc877vJIYMR4kuTLiGXdG1TFuOMxhAfPYwBq26t91LGEcHbTRwldcQhcnmMRhcdfwDRlQx8Wqc9hKsoJ3+ISbuN9Y+LmEqiItXMZtPMFYH8UO8L2aaooPjuo8eDlkI21stZL0s7lbgqb5dYvtyoMpp5vq1PoPWC4uFWPnfL8dsInTSH+4W1681+BuJJlK8jDJ8wa/n+TqX3h7A8VZ1tjFceVvGtO64LfNHtckZ7GNL439R9gbabpD4M/H/gzviz/BCz1rbGIHi3iNp3r2+YlX+Fh5R6/J7j9TfRaSrCa5lWQmycQ5VzeTZD3JTpJH/9s2/cQPqeoUgESrhlcAAAAASUVORK5CYII=", 50, 8}, ["K1A"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABsklEQVR4nLXWPWsUURTG8d+sk8T4BoqFYqcRRBAsFFELGxsb+1TGT2EnCFb5DvoBRKyCEWyCooLgCyioUVFIYVgFIwaCxngs7kgmk92NM7v+4TIzd849z7kz58wZEaHPcS4iHkbE/AB8dRoXImJ6I7tcczK8xOHSXNRY/w2bsFz4WsAQfmAEt/ERx7Fjw2Ai4gQe1wwCzmCm5pqmvMZlbMWh0vwyFjGSRcQ8HqGN7/jcw+EithXnOa4OOuIOvMcezEmx7SvdeyVlxakcz3ANUw1ExjBRw34SN7Db2nTZIqVTmVv4gmG0pBR+2s1xjreFUZONXMQHXCnN3S/Ef+Nkxf4OntTU+FkcZ3sZZRExKdXHpZoCZd7hQOFnM47hBZ5jf8lup1TUA6eFXVLRNGXcarDnpbR5g+24W7HN+tDpSY4lzZ/SaVyXApyyPj3bleu9+NpQqzcRkUfEcINGNRYR7UisRMSRLs2szMR/appa+GW1oOowhJvS27wn1USVmcr12QY6/0QWUbcPrmMUR6Ve1IlZHCzOP0l9oG/RKv38ovxlSfdNwLTUDx5In+YWVgagu4Y/cguKMaEeSIYAAAAASUVORK5CYII=", 50, 13}, ["K2"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABu0lEQVR4nLXVu2vTURTA8U80IUUsig9oFVQUBEHi4CLo0j9AEdwcnFx0dXGwk7OLxUHd3QQVpCI4SNXBCoqVDp20U0F8YDDgi+Nwb+DXmKTJL/YLFw73PH73vPiJCCXP1oh4GxFLEXFyhDhrnbmI2LuWXdXwjGMGR3E4393CVXzssG3gJ36hluUqfqOZ7ypoYbmL/27swx586PeoKq5jI57iEb71sB3DEVzG6Q7dBG70+9AAPMZr1DGJFezEDqkg7zrsN+CgVBSViFjEoREfMQot/JC60ZQS2Y/3+b6BRambRdqJLGCsihd6J/LH6g5tyQEG5S5mpY4XqWFzlufyG4ocx/MsH8MrufI9iYjpWM33iJiJiBMRUeuyWJsi4kxEvCn4PIyIexEx3xHrfMkFHx/Wp4qvhbzu4JI0n71o5UofkHbmMy7kqm/Llaxn26W+VexNc1iHKl7ipjQC9wf0a+BKlk/hS461IiXaTqT+r+s6UaLtkxGxnEfnQRf9QmG0LpYcraHPMIvb5iy2Z3m6i36+IE+ViF+KMolcwy6cw6cu+icFearkN4amEhH/O+aE1JVn0uLflv4H68pfhbQeLlaOUcIAAAAASUVORK5CYII=", 50, 12}, ["K7"] = {"iVBORw0KGgoAAAANSUhEUgAAACcAAAAPCAYAAABnXNZuAAABZElEQVR4nOXVPWsUURTG8d+uGxuDkHyHWASxUhBTLQiCvaCFhWJnl9ZWexsrUZJmGyvBT5BGQSs3GjsxIBaiSHyJEfWxmFmyC8nszrja5A8Dd87bPHPm3DuSaHjNJekn2UhypkH+g3ExHfU5jNs4ieOl7R5uYGsoro1F9PENX0v7DOZxbNyDWknqiruEXt2kfXiHt3i9h2+nleQJ1vAbb/Brj8Afio5BFxenJK6SVpKnOIePE+Ys4BmOThD7COcVL7dT2jo4Uq638cI+nZOkl2Sp5jCfSPIhu2wmWU/yOaMsjqlzqsrfVgzq/IRdG/Act4buuziL63hV2q7h5Zg6G1XONubws6a4WVwp11cVn20WD7FS2j9NUOdLlbODTbyvIayF+4pjZB2ris00YLtGrUo6WK6Zs4wL5fqmUWFTpckhfBffcRmPpytnlHaDnC3cwWnFSPwzmoj7bxw4cYOf9aG/LfQH6uc0rKhFHCkAAAAASUVORK5CYII=", 39, 15}, ["KAC SSR"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABX0lEQVR4nMXVP68NURQF8N9lcl1XFCSeAkGiUJFbCInyVUQl0WgUGpWI6DSiUCpE4QuoJBo+ASJPpRCUHiHxUEiukFctxZyXN5m4cifjz0p2Vs6eM/usteecOYMkemAjhriJw3iNVQywXOaMcBLv0GuxGRhiMuhpZAOu4jqm2IrvGPeW1xFV4RE2lxg1eIxNLb6vFl3hNhZLjUHhz9jbQ9MTXOowf4iRJB+S3EnyJvNhWxJJTrfyq4Wnc9aZha9JqrLG3FHhFS5gu3qv7y5d/YIjOIDnjQ7cwgImjdwL3MUDnMJOHFN/xa5YLlo+dXorydMkR3/hcpjk5YxnFxsdnCY5k2SS5FCSLV27+SeiwgrO41nL42U8bOXH2I/jjdxj3OvUvb+ANSNn8Uh9cHZhD87hrVr4vhI78KNVY+nfSP09KrxX/4Wu4KP183FNbXJtvKLet99wAjdw0Pp98V/xE8OTiZ82/I/mAAAAAElFTkSuQmCC", 50, 9}, ["KARAMBIT R"] = {"iVBORw0KGgoAAAANSUhEUgAAACUAAAAPCAYAAABjqQZTAAABm0lEQVR4nMWVP0hVYRiHn3sUlKAWwcElKajNP6uDoA5hEJGDoEtDTjWH4JIGiiDo4lLSbhQUrhEo6hIIuhQiDhVFg5qCXBRvPg73XDx86L3nojd/8HI43/vy/Z73nO89J6NyQVUDc8BbYAvYBfbi6y6wX/aOatqoU7vV2sRagzpnca2qw2pLWq80RY3qe/VfbLKtflKX1MMSQKG+qg8vAnVNfalmyzROo89qc7lQveqPCsAklTPfdEmoJnW+wjChRkOo6sSZfwK8AqpKzMYRMAjMAvXAFNAR1GSB5Xj6CsoATcCdoHYIyAEvwul77OlBPk+b6gf1WdDZDXVH/auOq51qTdh9Im6qA+aHJ5fY/7mJ1/coSJ6l12pVEaM+9XaR/HnRqi7GHgfqrQLURLz4RX2jfo/vc+pHdSp+GuUapo2M2q/+Ud8loSbjZOFTsKD2VBDkrLir/lbbIiACRoDC/yYLjAE/Sxz4y9Y60AU8iIBm4DAoOCYP+7/1DZiOgDXgaSIRAfeBlSuAAviVUQHuAe3AAXAdmAE2rgiKE+MJmz/k8x3oAAAAAElFTkSuQmCC", 37, 15}, ["KEY"] = {"iVBORw0KGgoAAAANSUhEUgAAACMAAAAPCAYAAABut3YUAAABOklEQVR4nLXVsUscQRTH8c+dSSHYWIjE2KQT0loJgjZaSgqbWFvapoh1ipSmVStRxDZdCnN/gI2IFukSSJkmREUl/CzuJJvF25DT+cJj2beP4bsz82YkUYnxJO+TfElyk+RnksMkr2t1RaKeeJf+PC8t0/Y38/oz1/DtUajKjGC6oXaurMofmUls4GlD7QKWsYShEjKtJLP4iHOMYnjAsa5w8QCXsVaSk57MW0zgCM8eMOigLEryO8nLyq7ebeiokly0cYaVnt2E5o5qIuj0nnV+4Pie3B03WHmsPXOFVezo/tg0FrGHFvbxDes4xQzeYA1TOMCnu6WZTLL9j2n8mmQ5yVKSdgqfwCNJrhtkNksIVKN66P3S7aR+dAZYvv+ifh18bqjtFPQAT2rvH3q5V3iBS93Z2sL30jK3a+J1LqWZOigAAAAASUVORK5CYII=", 35, 15}, ["KEYBOARD"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAACCAYAAAAaRY8cAAAAc0lEQVR4nNXNvQkCURBF4e/5u6CY2YGBgYmVCNudbdiAmVYgKFiBoZGw8sZkxG3Bmxxmzgy3RMQeLV6Y4YkFOjS44YId7ljhijXOmGPjlwEqIlkxSfdGyd04O6fJUd58/bA3d+lrjwds8/9YIuKBpf/O6QOxmx5W4Igb8QAAAABJRU5ErkJggg==", 50, 2}, ["KNIFE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABJ0lEQVR4nO3VzysEcRjH8ddolxQ5UyhnNzcnB+XgwMnRH+Dg4O6fkFKbk1KOclG4uSnFwYk9+JmIUNTu2sZhvrStlW0b+ZH35fuZ+X6fzzPP88w0URzHUmAV42kYNUrTdyZPk/9CfhoZDFdcnyKP5zpiW9EZdBs2q/ZLmMYM5jGFHCaxggmsYxA7GMAB+nCCrvBspeD3iGLQTygE/YCLKH7/tR+jF7fIoj0Y9+AsJCjiGt2fFFtASzjfHNaspFEZlBEhDqsKHYczi9gI93LoqMpxj6Fahfw09nAY9JikIa+cYxT7v6GQWpSxgFnckYxut2Izj231vVo36A+xIyHmKyngCMtYkkzjjSilgaxhLg2jKsq4wqWkcR+SSSlhjK2UvBriz/xHXgBHZVKFWT6XkAAAAABJRU5ErkJggg==", 50, 12}, ["KOMMANDO"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAGCAYAAACB1M0KAAAAyElEQVR4nM3SoUrDcRTF8c8fQYfBooIWo8knEIt7BDGKD+Ab2IxiExb2DJZteUkMJtNwTKNJ1GKVzWOYYQxRwR/ML9x07j2cC6dKMo8T7GADq1g0W55wgSZusYV9vOFlYu7xCJIc539zmeQwydUXWj9JLQlJBhNCI8nwG9PzYvHKcZpEleQVS3+owRAPWDObSo6wXSUJ3tFGB3d4/uF4wbizuzjCwPiRHlY+d25QRxdzhcNP06+StHCG6wKGm1jGOg6wV8DzV3wAbRawFwKF/QUAAAAASUVORK5CYII=", 50, 6}, ["KRAMPUS KUKRI"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABPElEQVR4nM3VP0vWURjG8c8vREltEBUdc+gPSrs0t9jeuxCcdQ4C6QU0BEWja6EujkLQoi0NgjjolJhZYEV6OZwf+iQq+vgkzxcOnPvc933g4pzrnCrJLDpxW+EvBuv5Twwh+FPn9tCN/TqGH3iKbXzD77ruAN9xWO/V61+60VXXrWEVK9hxRaokuWrTDfAZ8/iAj4rQC2lXIY1s4h3eKqd2Jv9TyBfcQ0cL91zEcyyfTlRJXuJOw9oh+hviPif+6MSWcrc7sKv4B8bxos5T7vuoIuYrHuAJxlDh7jUELWEan45XkrRqzCYZvmTtQJKpJAtJfqU5DpK8TtKfpKVCJpL0NtHXk2QmyXqTgtaTPKrSPl6/hceYxLM63nfyLZzHBt60k5BGhvBQ8d8r5V8aUbw1h/vKa/ZeeQB2jwCwkpt9G7GegwAAAABJRU5ErkJggg==", 50, 9}, ["KRINKOV"] = {"iVBORw0KGgoAAAANSUhEUgAAACkAAAAPCAYAAAB5lebdAAAByklEQVR4nLWWPWtUQRSGn2v8CEhABCPZQIzgB1go2ESQmH9gQBTESlIKlrHQVjvFSm0EFYSQJqRJoSiW2RSColHwq4im2WAkMeCCmMfijngdrsnubPaFF2Y4c85558xhZjKVNqACTAPDwDKwBRgCvgE1oLvE5xdwCrgJPP/HoqZwUF12Y7EaYp6I82XqALDQYIUyoB94BHQ0Xd+/+BR4CHgD7AH2AlNAF/A5VHYO+Jmpc+RHsB66gH3AphbESb7RMqwCD4HjQE8QWQMWNwNPgJF1gleA88AosKPE/gP4HkTsjmwvgCqwRN6XfcBj4D1QB1YC68BE+dZ0Ru2M+mC/OqLeVz+oH8P4knpMvVDopWl1SM3U02o96rWxuMeaJeo99bB6UR1X59VX6i31rFopcdwaGl31rtqt9qoDwWemIPLtRohcUqvqdfWkurMBxyNBwIK6LbJ1qJejah5sVeSuBMcrIfmD/9iPRiKvtSoyhdWQ/Mwaa14XRK6o/akiU6+TWeALML/GmhuF8XbgTmKu5Eo2wkx9Fh37uZRYmbbl7f6DA8BLoDPMa+SvzNdmgrTyejSCd8DVwvwp+YXfFNpdSch/QFPAbWAyJcBvZZriwvQUZB0AAAAASUVORK5CYII=", 41, 15}, ["KRISS VECTOR"] = {"iVBORw0KGgoAAAANSUhEUgAAAB0AAAAPCAYAAAAYjcSfAAABjElEQVR4nLXUPWvUQRAG8N8lRxA0iJ3GwhQWihZKECzEIo1gZ2NAAsbC0tLCxtIv4AcwYGWtohZisJDYWHgIEcQqimAgiETFt8cicxCP+1/iER9YdnZ23p7ZYSUxxNqb5OI/+sx15bbhcAi7MYEWftU+gt8lt0pW+pOYh1aSfkHnKnAvTpR+Yshid2GtlWQK3/CqLk7hKdbwo8fpIxZwupKv4BGWMV1FqXhfsRNjG/z34YMky0ne5W+sJNkz4H0uld1CkpnSXc3muJ/kXhuv8RO3MYNJXMfqgDZ1Gb2pDk0V0168xCK+YBQ3ukwfJJmvam8l6SQZ3WQSl6ry2Q26F32Y9e1Wd3rHcRmzOGt9GpswhoMld2o/h2M9dsuN3UrypN4wSe5uwlCSsSQ3y286yfkkn/uwfNgUo43D9S6PcWcAwy6+48qG8wQuYEedr+E4njVGSHIgyeQWGG51vS2mZ5psmj6HYTGOT9Z/o/14389oZDsz4kglXG1K+D+SHq29M8hou5OuYQnPBxn9AaaqFSn0yNjQAAAAAElFTkSuQmCC", 29, 15}, ["KS-23M"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABQ0lEQVR4nMXUv0pcURAG8J/Loqws6gbEBLvF2FhYausjxMLSN7CR+AopFHyE9CmChW2alBbWgq2IWURFWFf8A5PinCWrqNG7F/eD4c4M937nm5kzdygilIgxLOEjmpjI+UY2GMYVjnLcwR9cvOGcCsbxAVOYrfaj+hGWsSUV8O6olMSziZ9SEbclcb6ENk7xS5pKs4p1bPdBuoqN7N9krgbm8RvnWMPX7I/kw2ewiDlMP8N9hLsn8oF71KQreSEidiOiHhEKWD0iDuMfvuX8UEQsRESzx57jGM1WK6hBRKjiUlqctnTVJrNNSUvbjT/l5ziquSvwuadTP3o6tve/UWZ0Xvnei+gu+w6us3+GE+kOnkrj3c9+y8O/Sx0rmM3xQRmiiqBbyBccF/i+je/lySmOilTM/aCF9IuKtAutQQvpF38BaOXOEPWpp44AAAAASUVORK5CYII=", 50, 10}, ["KSG 12"] = {"iVBORw0KGgoAAAANSUhEUgAAAC0AAAAPCAYAAABwfkanAAABoUlEQVR4nNXVPWsVQRTG8d/q9SViIJGYVKKFWkXRJliphSCkMSD4AUxl4wdI5WdIF8HaFH6AVEFQFKKgTbAQVEQMGhsTjYjJPSlmr2xWs/e6iwb/MOyeeXl4mDlzRkT4R206IrKGGjMRoeXvk+EwTuIq5rGO/fiGvWhjI+9by7/r+fo9+bw+XMBYFhEzWEV/DUMbWOnB9HU8xlLFvCMY7qJ1CNNZRARe4kSPRnecXTttoAZL/6PpZ1lEtPECiziOU2jhB55gGR9wBmMlgc/SJaoiw4CU+58q5hzV/eQnsdBC4Auu4QpuSBdnNW9F7mAIj0r94zhf6ruHp/n/MWkTblYYuihVik5lWcM+aVPaUpWZw5aSN4CDeIj32whPbtO/XDL9Fbek05OPvakwDPe7jP+keBzncBq3e11c4FIpfi2l2aB0Mrvxtobub+mkRx8mpLz7+Ica/VJadXhXiAfz74P6Fn+lhSl8l/JotobGBA4U4rt41dhZBVl6Wxoxh8uF+CyeNxWtoqnpIelp7lzoRYw2NdWNpo/LiK0VaL6hXk9sAkCW3l2tgZsfAAAAAElFTkSuQmCC", 45, 15}, ["L115A3"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABLUlEQVR4nL3UMUvVYRQG8J95wRTvoLg0ag7aEikEgSCBQ4ObENEH8RM4ioOtTS41NYhbhBAhiIMShOB2E1xdjBrMx+G+w58/lvd6Lz5wOIfDeQ7PezjnlcQdrZnkdQ/8qvXcp+FueIlXmMSTSj7FD5f4BBc17gweYKCSe17hdorBouMQPxpYwBSWa4Vn2LyhQRPvC6df+In5LjmDeKM9lMmBJC2MY7SPwrrFVyz20uC21brCKj7jKbZK/q322rzAuxrnAp/wDXv43YGOPx3q/TeStJL8ys34m+RhOaixJFdJ9pLMJplLspRku8Y56tMH0PWxD2GkvGsNG5jGBzzGfpn+M+0D3cFxZRYT+IIWTou/dzSwjt0SX+IcB9qrtIJHRWyz1Hyv9fh4X2L/h2vr/2Uq5peL5QAAAABJRU5ErkJggg==", 50, 8}, ["L22"] = {"iVBORw0KGgoAAAANSUhEUgAAABoAAAAPCAYAAAD6Ud/mAAABoklEQVR4nK3UPWsVURAG4OeaFeKNIlgkIiqiIIJio4IEUws2/oNU1nbW2oqtjZb6Byy1ECxUUGPAkAQbDaKEqIUYQgzmmrE458bjsne9hS8sOztf75nZmdOJCEPgFr5jER8K/eua30+cw5t6gmoYFhzBTcxiK+smG/zeY2dTgmGJ1rGEvRjDJvbXfMZwDKODiF5gFYcaTrOJjziP6UL/A1Ho9uVDVLiIp3WiTkSsYGKoutqxji7m8CXrdqOH1Urq6/8g6ub3Z6nNfVzHSoUDDUE9jKCTv7/iPpazPIUrhf9bPMRdHMaNnPda9icitiJiNiIuR8TJiBiPCBGxFn/wMuv6z0hEvCvsjyJiOtsORsTViHhQxlTYMaAVSziV5fpe/MrVHcUMLuGENFDfMJ6fbQwigeeFvFyzdXE2y/OZeEGa0DVpxP8a8zaijULeU7NNFonmG2J7mXwbbQv7qZCP12ynC3mhIfY27pWKtopeFfIFaQr7eIY70mpMDTjkYqnotFyqo9KP7bfojHTX1bFLuila0da6DTyWKnkiLWIT/kkCvwE+t6q0jK8+kgAAAABJRU5ErkJggg==", 26, 15}, ["L2A3"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAACEUlEQVR4nL3Vy4uOYRgG8N8wExrGoWbMQs7KYUSysFI2dooFyh9hhSwtUchKlsp/oCSHkrKgEEkhp0+Z5DDjOA7DZfE+X76mj8Z8M666e59T131d73M/zyOJFqMtydUkp0eMz01yahz4/xYzk6xJoi2JFnASm7AMX3CmYa4H83BzlFxDeIr3mIR+TC48w3iB2ejCOwxgK5ZibytGZuBeETteCL6qDHwtY1PxHT/QVvpf8LNogKH2FpJ+LAlbwbsiqBMduFa+HXhY+JeVXE+wE29wA29LfxKej2ZHpmEh5pdYUL5dWI1FJdFrPMe30v+OT9hehDbDC/SV9pDqjw+rdqajjH8rhiajt6wbLHM/MB2D7ejGHKwsAuui64K78QE1VQ3X8Aob8RK7ca6QNkMf1jf0a6qzdBePVLXeDMMN7Tr3kybrBqAtyXVMKU5rDfEUz0q7nqwHe7AOR3H2DyLqWI47qr/7CpdwHcfK/JJipmW0Y1YhPvGXdXOxF2twBPtGyX9cZWIY+/FZVTbdqtJ8ORbRTZGkP8n0P9zTvUmOJjmfZPM/3vHb8huHy1hXksVJliTpHM83RZJakhkjJnqSHExyIcmWMRBPS/K4mOgvBibyYSTJgyR9IwycH6OBehxo2I1dE20i5WW/rTofq1Sv5CFcbrFib2Et7mOF6lxMKNpxETtwAFfGiXeD6lqe6T+YgF+o8Nsuh04prAAAAABJRU5ErkJggg==", 50, 13}, ["L85A2"] = {"iVBORw0KGgoAAAANSUhEUgAAACMAAAAPCAYAAABut3YUAAABsUlEQVR4nLXVz2oUQRAG8N/GFcSs/xAkKgqC8RLIUVDQgyA+gB715oP4AD6AePAkePDgyYMXQVEUxESQqDlIFGIEY6KgISom5aFbth1md8e4ftBQU/XVzFc13dWtiNAAl7GEWbzNvsBUk2Tcx3Vc7UdqN3zZIdzANNaz73jDXPiA1iBSUzEreIMd2IZVjPXgjmFrxXcAm5uIeSKp7tQk/MA8juFC4V/CGs7m5z3YiUmpc58L7jr2YVPhn83f/QOtiHivd5UbwU98x6i0r75ge4Uzh9fZ7uScZRHxMIaDhYiYioj1BtxLEaG62thbU90qtuhuuo+4gsW8TuFiwZ/BTVzDURwe0L07td6IWIuIxxFxJiKOREQnK10uKnlaqaIdEfNF/FZEnM+xg3VVN1ltaWPVYQ67sv2oEkv/mP24i3MYl0bA4oCu9MRIn9izwl6oxHZjItvPpZP1Sirg6/8Q862wO5XYiSJ3ZqMf/xsx7wp7vBKbLOyXwxLTbwKXQ+mkdLJ+X2S3pdlxOsceDENMK3pflKP4pDuVJ/Cihjeie1/9E/p1ZkU6KWu4l4XVYShC4BfK10i/1Nww+gAAAABJRU5ErkJggg==", 35, 15}, ["L86 LSW"] = {"iVBORw0KGgoAAAANSUhEUgAAACkAAAAPCAYAAAB5lebdAAAB4ElEQVR4nLWWT0uUURTGf+84SeEfJLCVjeRCxKhFkZE710IfJPoWbdvoRltFLgShj9CiCKJFCYPJIBEOJTSDpDGjoCbzuDjnpet1ZnqdZh64vOee89x7n/vnvPcmksiABaAClIAf7hOwnqUx8BooAs8y8s8hn5FXAF76QOmsZi8xThU4uQT/HLKKrAM14BZw1QcsAB8iXgKMNGk/BvzqTCIkkj5hqzMI9EfxP9j2PgIGAv8e0ADeeNtR9z8EhlqM9dH76UhkFbjRSeMIv/070iJeB3Yz9nUKXMfy4Gse+EZ3RB4Dh8AwkGsRf+W2nBue035sN1M89u+TRFIZGI86PMC2N/F6FVjGVuInMAc8DfiHWOauYAn1oInIbeBFs9n9E5IaktYlrUk6lrQkCUk1/cVn96UlJ2kriBclzXtsLOL+d8kDE0DZNX8HVt0uA3fcfh/NreErOglsAPeBKSzj9ztarTbIBQJTpMKKga8Sca5hmQwm8hT4gk2y3l2JFw/4AXDT7aPAPxjxZrD/JS6up4hF7mCpn9opJiPe3cDe7LaoC4gO6W1JBbfng8SoSEoC3j1Ji5JKkp53O1HikrR5YAxjN0uf16exB0aMK9jN1DO0u7trwFvsbL6jddb2VCDAGb65Zt3fD7LLAAAAAElFTkSuQmCC", 41, 15}, ["LINKED SWORD"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABBUlEQVR4nM3WsS4EURTG8d+wsaJQiWJblcILKPQKUYhOxAso1N5DqdyICm+gJpFtFDo0WgpkE65iZ+IKiXHvyM4/mcw9mZzJd843594pQggyWcI+dvCa+7JUOpn5qzjAijEWQV4hyzjBLu4bUZNBkfhpTeEaPczhuUlRKVSO9Mr1Xc28dSzgFot4wxPe8Rjdf2MWk1HcxUwUV+uqUS94wLfuFyGEU6yVD/u4KoVAUV5x3MUe5msI/Q+GuMEAlzjHoAgNbFst4LCDM5+OHOHCz05U8bSWOsLfZ2QTx0YzsqElM1JT+xdat2tNJOYNsW3Uza3m5KST6khFfLKP9VDMLYSW/Gt9AABUWPTDV0pUAAAAAElFTkSuQmCC", 50, 13}, ["LONGSWORD"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAAArUlEQVR4nM3TvQlCMRhG4UfxfwUbC7G0EZzAUmysHMMR3MBZxEpcQERwAAuHEMFCYuFtLXJjxFMlgRfOy5evEkIQyQALrGKDOamWyCyx/bZIKrFFOhjjlMElidgifVwzeCRTCSFs0MC5eGujVZxvqKNZ3LuY4P5Dx088ccQeuzI78i9Uvb96G50aZhHhIR6YZxBLInYiF/QyeCQTW+SOA0YZXJIosyNrTL/skcwL7OoXItfN2nkAAAAASUVORK5CYII=", 50, 10}, ["M107"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABgklEQVR4nM3VvWpWQRDG8d+Jx6BvjFgEBBWEgKA2WgSEaJXCQiwEvQHb9OI9eA+KaCuIWCmCH42kSplglcKPYCUIxmiSSTGrvp4Ino0R8sBwdjmzs/vfmd1tIkKF9uIAvmMF67iOq7hcfEYwiYP4gsWaCbarphLkCh6W9nsJ0+AQPmAURzBWfF5jegfW+Ve1lf4fcV9m5BNO4LHM1CTG8RWnsQ9vcBRRjAQ31F8vcf9JTUTcwLUywYY/w63K3Z/G/or4UcaRgO/8DgWn1GdtgHNYkGseNBGxhOOVgfpqwy+QFVmOXZCzeIVvFXEncBg3ZeZPtniOS3gpa5wkftAZPIszPSaZwx1cwBLeDv2bkuUYeIHl0r4toftqgD34XPqtiLgbEXMRMRIRis0MtX/YsUg9i4hbEbEYW/U0IiaKfxsRTSdGt79j1sq6ncL5n3RJ29VM+T7CE3nYL2J+yBawVvzWbFXVFVmjvtfvuHwPluXBXP1fC9qu+l6/Y7gn34VdBwGbHFf3mJfeNPwAAAAASUVORK5CYII=", 50, 10}, ["M16A3"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABuUlEQVR4nL3VPWvUQRDH8c8lp8aIIj5gYRuM2KQWCx+IL0GwshYrC9+CvVikESwtFOxiQBDURgsLC/EhwcaARgwY0JBo9H4W/w35cyZ3l+PIFwaW3ZnZ2ZnZ3UYSfXAe0/iGWXwt40Us4Dve4n0/ztu4ijHc6KiVpB+ZTsW7LdabSab69F2XiSQnktzuptvE5DYzdLxkaBEnVdlvL+swPuMFjqCBUbSKrJS5EQwVWS62Q9iNV5jHS6x2C6qRPntrh/iBJRxUte5mjGKh2YfzqLLZjS/4aaMiu1TZ/q2qChvZb2Gt5nsXXuMWHuIBLheddvZiZTsVWcIbfMApnO6iP4E5HC4BDuMPmvhbAm6U8frcULFtlf2W9Uo6s5TkbpKLSYZrl2uypnM9ybEkT9ps9w/gsvcsTf+3yorqab2HGZtftLM13XnsUz3BdXppv8GRpJVkLclMkitJDnQ5/ViS1ZL1m1tUKUkO7WRFJLmW5Og2jB6VQGeT7KnNj7cd5MxOHmQIU7Z+2toZwSd8xB38qq3Nqf6WdS4MomN6pZHBfiP3camMn+HcIJ13op9/pBOPMY7neDpg3x35B+Ddzaaa0l23AAAAAElFTkSuQmCC", 50, 13}, ["M16A4"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABuUlEQVR4nL3VPWvUQRDH8c8lp8aIIj5gYRuM2KQWCx+IL0GwshYrC9+CvVikESwtFOxiQBDURgsLC/EhwcaARgwY0JBo9H4W/w35cyZ3l+PIFwaW3ZnZ2ZnZ3UYSfXAe0/iGWXwt40Us4Dve4n0/ztu4ijHc6KiVpB+ZTsW7LdabSab69F2XiSQnktzuptvE5DYzdLxkaBEnVdlvL+swPuMFjqCBUbSKrJS5EQwVWS62Q9iNV5jHS6x2C6qRPntrh/iBJRxUte5mjGKh2YfzqLLZjS/4aaMiu1TZ/q2qChvZb2Gt5nsXXuMWHuIBLheddvZiZTsVWcIbfMApnO6iP4E5HC4BDuMPmvhbAm6U8frcULFtlf2W9Uo6s5TkbpKLSYZrl2uypnM9ybEkT9ps9w/gsvcsTf+3yorqab2HGZtftLM13XnsUz3BdXppv8GRpJVkLclMkitJDnQ5/ViS1ZL1m1tUKUkO7WRFJLmW5Og2jB6VQGeT7KnNj7cd5MxOHmQIU7Z+2toZwSd8xB38qq3Nqf6WdS4MomN6pZHBfiP3camMn+HcIJ13op9/pBOPMY7neDpg3x35B+Ddzaaa0l23AAAAAElFTkSuQmCC", 50, 13}, ["M1911"] = {"iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAABFUlEQVR4nK3STytFURQF8N/1XkLGDEgMmCgTKUbmRkoGJvIVDOSTeRmJkVK+gCgihREG8u9tA/fqeO7znq5Vu3M6+5y19t5nZREhwRZW8Og73lrO+tDvd4zhOmsRuMRoh4d/QhYRM7jBE+7/kxwndWxiBM//TA4vdZxjCEsdLu/hDAtoYht3Sb7p5wSeREQRixHxGuW4i4je/N5ARKwl736NnkTtACdtqu9BLdlfdOj2C6mLJnCaE6S4QgNHOXH4HFfoAvVkv15C/oBZ3HZbcSsKwho2SvK7VchTgWWMl+R3qpBD8dv7Jc55j4jhbt3SLkTEdEQ0SwQOq5IXNl1FVtJco/J4fNp0EPOYwySm8nUJx1UFPgAHuCAfqpubJQAAAABJRU5ErkJggg==", 24, 15}, ["M231"] = {"iVBORw0KGgoAAAANSUhEUgAAACoAAAAPCAYAAACSol3eAAABjUlEQVR4nLXVv2pUQRTH8c8mKyYiSazSKWKvdRoFS58hhY8gVjbaqZXgAwgWNtaCCIKinZ2ondhEEP+hMcSYGJMci5nFm+GyO272fmG458w9M3Pu+c3c6UWECk7hNb7hCz7ha35+btgv8b1mwv+lXxl3EUdyW8ablphFXMOlSSRW0ouIRWwPiVnAE5zM/i2pgiUzOIOnONvoX23YO1jHHkJSaAa38WtUolXaV7KJ2THG3cRaS/825rBVK30t02OOm8dUS/8WjmK3j8OGS7+Me5UL3sc7+6XfzAsOWJe2wJ5UxcB1/Bw6c0SMaici4kbs531EbBR9GxExVTHfWK2t3CUruIM/2X+I4zhdxO3k6nRC7R5dwqFsr2b/GH5LW4eUaN+/D5osFWWfjYiVLO+H7A/ePWhIv9aV7LXSX5akhqvS4RjwsWHPSf/cThiV6AKuZPsV7hbv3xb+0gRyamXUHv2B87ggVa88LM8L/xweTSSzgt4BL6Zp6Rqcz/4LHVX1oDfTLh5LiT6T7vlO+AvryV2hWKLF3QAAAABJRU5ErkJggg==", 42, 15}, ["M3A1"] = {"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAPCAYAAADzun+cAAAA6UlEQVR4nO3TPUpDQRSG4SfhWlhFdAduwdYd2Cu4Dgs3ki2YDfgHinZpBQshpdgEIWAM/iHeazERNcydO4p2eathzuF7mTkzraqqZNDGNgYoI/UOtvCIBTzjCvu4jQW2MsXLGOU0znCJo1ihwPp0/ZQI6PxCWqGP0zrxGk6wmAgZ4wAbmdJSuKVxXUOBB2EeTQy+iHu4wabPmV+gizO84j4VVog/lhgfIxniEOfYFa50lrJm/5s4hyVhJLCDvUTwHSZNgQWuM8QrwglfcJyQmva8NQXmfqefMBT+82qqqf3X1lzm4rn433gHBZ040gudpfUAAAAASUVORK5CYII=", 30, 15}, ["M4"] = {"iVBORw0KGgoAAAANSUhEUgAAADAAAAAPCAYAAACiLkz/AAACCklEQVR4nLXWS0vUURgG8J8XwiyLgkJbBEUEUYsoaFO71mVkmwpsF/QB+gbRjWgZRLXpA3RZ1MIwEoqgVhFZEAoRxVRmYhdHcHxbnCOMgzp/HeaBw7m9572c9zmXlojQAK7iLEr4kUsJ33P7Wy4vMbMMvb3oR189wfbl+TsPnTiN9RjFMcwuINePLjwuqHcnxrCxiHA7tuf2V5QLGoGjWI1pbMPFReR24xGOYEcdnXcxhUG8LuJES0SM4Rcq+LOAzBgma8Z6sBdrixiR6FPGJ3RgHf5le51Shn6jO9sqYQNu5HYrNmddZSnTXai0RPFDEHgjBdqDLQXXza0tS7vbmp0u58DapExO5foV3uOUlImPec2amgACP9txC+M4ia1VRidwEy8kek1gpGr+OQ4WcL6CKziEXbk/jpbs2IyUjTZcwz0MSxS6LzFgcUTEZESMR8RMzMdIRFii9EbE26iPB3X0NFRaJS4N5+g/YA+OY1+dnX2IJ1X9M3lXL9XI/a2jpyG04zCeSvS5LFHlXcH1+3Ndwarc76iRaeihqYsG0tdXRZPrVeObaih0u5kUWunCjogYzQ6WIqK7aq41IqarAhho9hlYCc5JjxdckO7qOcxKV98cDkg3TFOw0q/EHXyRrsbBBeafSS8w6auxT8GXddloUmpP1JyD882iUCOfuaUwhM+5HsJAk+z4D05vz1lTmv18AAAAAElFTkSuQmCC", 48, 15}, ["M41A"] = {"iVBORw0KGgoAAAANSUhEUgAAACUAAAAPCAYAAABjqQZTAAAB70lEQVR4nKXVTYuOYRQH8N8zHmbGWzMpk91ERnnZUErS2CArxUpSfAAfQPEFJFnYSElqrFirKUpYKFGzoIyMt0zyksjMYPS3eO5pbk8zj/sx/zp13edc53/Ofa5znauWREUsxi3sKunu4kKx7pnHbwpXqwaBeht7TxQJXcSXkn5rC58OHMN33KgcKUkVWZfkS5K7FffPSC3JzSRjSbqq+knSO48MJfmU5F2S6TSwO8m+JH3/IN6Q5GeSb5nFqapJ1ZKM4F5xlCvxGTUcwJpyUTGGFZjEdIsD6G7yVRzhUAufTnThbB1XMDLHpk1NxDWsbUHajGm8xCq8wmocLtaLMYp+vC14r2Mp3tSSDOLOHKR92IY92I9zhb4Hp7G8jQRnMIEf89g+YhyvJRn8xxl3Jxlo0j0u+uRnkvNJtiR5noXjc5LRKiNhEs9K3xuxuVi/xzV80Cj9QtGLo3WtG3YunNW4FF+xXaPk8NRsD04U9vcF/wuzPboEy+bg/Y0zeFDH/TYSWq/RXzSm9HjJViutT+AyTmIAx0u2HUWCM9VfVCQ0gYeoPDxnpDPJoyRTacyysu12qTe6kvQnmUyyt80YbT0zNG7OThzy91PTjIM4gtsYbjNG25VqJcNNN+lXko3/w9XR9l/Mj+b5cwlP/ofoD7wmpH/PtLzMAAAAAElFTkSuQmCC", 37, 15}, ["M45A1"] = {"iVBORw0KGgoAAAANSUhEUgAAABMAAAAPCAYAAAAGRPQsAAABAklEQVR4nKXTvUpDQRCG4Sfx+APaWQg2opJGsBOxslWwsBPsvAQrL8EL8CZsBUkpFhZWNilEEQQLwR8QRDBKwLFIAsf1hJjjB1Ps7My73wxsJSJ0tI9tXOIcLXzivXM/gnHFWsBUJQdrYLFH8Z+UYQ0vqP0HhOcME9jF2IDNLRzlzo8ZTrCM9R5Nq3jAFg61d9jEKJ5+VEZEN67it74iYjIiKhGxkqstjKzDnMZc4ugMdSzhFRf95u7CdjCcyzexgbd+gHTMoYi4TcY77jdSUVSxidnkjfpAjnLOTgsWP1PWWTXhN3BXxlgVe0nuowyoC5tPcvdlYRlucKD9N2u4Lgv7Bshx4GsGwxQKAAAAAElFTkSuQmCC", 19, 15}, ["M4A1"] = {"iVBORw0KGgoAAAANSUhEUgAAADAAAAAPCAYAAACiLkz/AAACCklEQVR4nLXWS0vUURgG8J8XwiyLgkJbBEUEUYsoaFO71mVkmwpsF/QB+gbRjWgZRLXpA3RZ1MIwEoqgVhFZEAoRxVRmYhdHcHxbnCOMgzp/HeaBw7m9572c9zmXlojQAK7iLEr4kUsJ33P7Wy4vMbMMvb3oR189wfbl+TsPnTiN9RjFMcwuINePLjwuqHcnxrCxiHA7tuf2V5QLGoGjWI1pbMPFReR24xGOYEcdnXcxhUG8LuJES0SM4Rcq+LOAzBgma8Z6sBdrixiR6FPGJ3RgHf5le51Shn6jO9sqYQNu5HYrNmddZSnTXai0RPFDEHgjBdqDLQXXza0tS7vbmp0u58DapExO5foV3uOUlImPec2amgACP9txC+M4ia1VRidwEy8kek1gpGr+OQ4WcL6CKziEXbk/jpbs2IyUjTZcwz0MSxS6LzFgcUTEZESMR8RMzMdIRFii9EbE26iPB3X0NFRaJS4N5+g/YA+OY1+dnX2IJ1X9M3lXL9XI/a2jpyG04zCeSvS5LFHlXcH1+3Ndwarc76iRaeihqYsG0tdXRZPrVeObaih0u5kUWunCjogYzQ6WIqK7aq41IqarAhho9hlYCc5JjxdckO7qOcxKV98cDkg3TFOw0q/EHXyRrsbBBeafSS8w6auxT8GXddloUmpP1JyD882iUCOfuaUwhM+5HsJAk+z4D05vz1lTmv18AAAAAElFTkSuQmCC", 48, 15}, ["M60"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAAByklEQVR4nMXWTYhOURgH8N8118fwlo8lJRIyNshOsRY2SFaUrZWSpWJhoazs5WNhIWJKYmFhZWMkinxMKWOGLGimGDOvY3HOW9f13jvvvOPNv07d5znn/M/zP8/znG4WQtADHMDNXhBjATbiedE5r0eHTfWIF3bhbNmZd7h5OU5gK7YhiJeQ4VfBnsIQnuAx7mASo7iPy3MQ0MIWPCg7sxDCBywu+eejMYfD3mNYFLoeq0SRE23WXsDrCp5G2pOnsQw7xIu7hWaKtS8LIQxjbU1QE6pLpZGIukHAD0ynUcVfFNJMvmmMJ3sMC3N8Vi+km8y8xScMYInYoGVk6Pd3RvqxKH0fw6UU3xq8FLM7iVNiyUayEMIg9lUE9EJUXMamRPg/cRRXW0Yu3lwRH3Ed1/CsguQKjojZfIjDhbkhnBHreQB7sTnNfRVLql2WxrEfK9LedmhgA37ibnGiLOQcTou1V4XVOJi+H+F2ScgoBgv2RaxMAp4m7nVYir7kb+I7XtWcW4tWj7RwT70IOC++cm9wEttnWD+SRhHvZhFjR8jFW7oh9sKXGdbvxCGx2XaLz+yIP8V8+9dBdoJslr8ox8WXZAx7ehJRl/gNvhRxDqBRSKMAAAAASUVORK5CYII=", 50, 12}, ["M79 THUMPER"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABcUlEQVR4nM3VO2sVURTF8d+Ya5r4AEFNsBKttBHRTsVCSBEs8gEEGwv9AlZaCoIWgp2VjZ2NgvgoDIqgqKTwhY2CiqA2JsQHid5lcQYyDEFuEm7IvznMXofF7D3nrKmSTGInfuIJzuOR1cEadHvZWCV5in2N2l+cxsU+vNhiGMFDnMVhvMXnWutiBnN4g3MdzLYMBnABJ/EcL/CyXt/rbULHMIgxbFMmWzX0O7iKP//x2FGvj/Ea0y19vdLsXhypktxXOu6FH3iFSVxWGmxzHOPYpRzZlSHJ7SyN30nOJNmcZDDJaJIHS/RaNlWSGzi6YpPrEwvdkdXMdZxo1TpY18H2RZp1MYXv2ISNDW0OE8rdGcZW3MUefDWfOm0GsKHxPFvXDuGaEhSfcMvCAfGtoyTIM+U/Mo0PSuIM1yapTadqfaZhsBY3MVr7nMI7HMR+XFLi/Ao+KmnYF6oky/UYwgHcMx/NW7AbX5Sv9EuZaN/4Bx/WHO3vIhLtAAAAAElFTkSuQmCC", 50, 10}, ["M9"] = {"iVBORw0KGgoAAAANSUhEUgAAABcAAAAPCAYAAAAPr1RWAAABHUlEQVR4nK3SsSuFYRTH8c+9bopiQIqUMlAWZTAQZTGwMfgXJKt/wW4yGAzKn2DBpkhKzKJIKcUiETqG+17drvflzb2/OvV0fs/zPc9zzlOICFVaxDKO/NQt3lPytWrFCjYLEdGDZ8xiB8UcgFwqYQ2j6GokGKtFbCDQ20AwXJcwgc5/HL7DLh5r8pc4w1UhGWgz9jFZs/FTecADuMAxZrCEcbz8Wj4iKrEeP3WeeEMRsVC1d7FqnRmlpEYR8ym1BzGGE+WBdyu38e2vnuEbPo2+FH8bH4nfhGEc4iEPvPKErZSWREQM5nl+VhQiogX3aK+pe4P+XDfMUBFzKWA4qAdcgU9leKeNgL9meJ/1wkvYU/5aI+hIog1P9cK/AGgLxyuYNzzEAAAAAElFTkSuQmCC", 23, 15}, ["M93R"] = {"iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAABKklEQVR4nKWUu0pDQRRF171GIYL4iFhYpJOIlY0ECztBxMJS/8DaTjvBUuwEK8HeH/AbgmhlL4IYCwUfKIbgsshE481NiLkbppkzs84+Zx6RStAGsA3c8qsP4J7OGgLWgFPgCZiM1C2gCpwBg102d9M58AbkUXfVT7NpVEUlF8i1YL9XXQCXwCNwBbz/RAJ5KZHxS11XD9Rxtajuh1il6SZtdALW1GF1Xi2FNSX1Qa2rh+pAGjAORjcTJVWBVSAGxoAFoAAUgTIwBRwBUVsz1FzI3KqdbmWFsRxa0lbySsqplXsAoi6qs0ngcQL2Elz3AkztYSHRhWeg/o8r9EcxcALctMzt9QsDiGy85TtgmoazCeC1X2AMzAUYQCULrAmcAa5p/Cp5YCQL8Bvg6bq9FCiAqQAAAABJRU5ErkJggg==", 20, 15}, ["MAC10"] = {"iVBORw0KGgoAAAANSUhEUgAAAA4AAAAPCAYAAADUFP50AAAAxUlEQVR4nOXQzyqEARQF8N+MqcmGKAtbJAsZr2Cn7OQZPIEXsbL0CtZewl6xQf4MhYUUOTY3ps/m+9ZOnbp17/nT7SXZxQhTeMU9HrCJU7+YwzYOQJKtJCdph5sk60mWBrphEft46yU5wgyWMY2NOvqo2s+1P8cXdvApyTjJShJJZpM8Va1xkr0k/SRrtf/hAAsTVV5wgfl61DVWcfendMNpmOS9Es+aKZPsN3xGGLb5UlP4iOOab7sIL3FY81UXYWv8B+E3bBmtOuCg9UQAAAAASUVORK5CYII=", 14, 15}, ["MACHETE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABaklEQVR4nM3WvWpVQRTF8d+9udFYiB9ISOMTCFaKVVCEoJVYSBBLW0srwUdI5TtYxBewEGLjBwYRohK7kEbEGBHBD2JyWRZnRBHheu4Zon8YBjazFjOzz559eklUYh53apm1pV/J5xxeVPIaiwGO4koHj73Yg1dYxAEEW9iHIbYxVeZhiW/9ov+KieLzpcwTJT71m98OFvAAs1jF816SBVzvcJCPZfO7zY4mEfCsl4pF8g/5NBi9Zld5hJc4jEstdOuSXE7yJOOzkWQpyXIHjx/MJpGkn+Rbid1IcnWE7vYAj3ETa5rieoj7mmL6/Be3cbqsvYCTLW7xT1zDG1zEZIm9x+sRupVeupfIHJ7iIE600E3jTBlHOu7hvJLKLmMuyaEO+n6SU0nuJhmO+UnO1MjIpOYprPH6ncUtHGuheYuZGp19W51DwJKmyS230Kzws6H8T3zQ/PIs4rim8+/XZH0TG5osbOId7sF3oU6xy/7UmiwAAAAASUVORK5CYII=", 50, 13}, ["MAGLITE CLUB"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAAAdUlEQVR4nO3UMQ6CQBCF4W8NpR0mgrUeQ3vCtTwD8XK21JZ2ayF0qzQG3IS/nb94L5OZEGOUATWuaLFPCQU67GYMlaLHAyc8cccR22F+8aHASIiZrGSKzdIBfsVa5N8ocEO5dJAJzqi+CSGTW6+832+DQ0p4ARGeEgUAyWGcAAAAAElFTkSuQmCC", 50, 8}, ["MATEBA 6"] = {"iVBORw0KGgoAAAANSUhEUgAAABoAAAAPCAYAAAD6Ud/mAAABO0lEQVR4nLXUMWtUQRiF4Wd1A4kWFhLFQAq1sLUMJFbptJOgEEhIZWXrD0lhLaSw0jJtinRWQZAUKQKiEAsLQY2CMSfFzsJlvDery3rgMsz5hu89c5mZXhKV1rBUm0Vb2O+o1bqDh3iGhV4L6AU2RjR5g7eN+SPs4lOZT2O9UX9Sg+ZwgMstzT9gHkf4Ubyp4o3SZh99XMMlvOqAwPcy3viLxrXuSbKR5GuSn/mPGv66+9geI+lQ3/DrnPpHSSSZ6QhynOQwyWqSx0n2W9a8TjJf+nR+/UJcbEkR3MRTvCze+5bkezgdteUhaLWltoOrBkd5uUCOyvjP6iWZNjj/Vxr+O9zF7ZL2M76MAxiqjwcVBJ7jt8GdmoguYKXF35kUoAm6VXknJriTJuh65f3x+E0KNFt5F3U/Q2PrDBP/+u9+r6RCAAAAAElFTkSuQmCC", 26, 15}, ["MC51SD"] = {"iVBORw0KGgoAAAANSUhEUgAAACwAAAAPCAYAAACfvC2ZAAABiUlEQVR4nM3VP2sVQRQF8N9uFtQuCgkRG0FB/AMBSzuLpLGwMYWF30Bs7C20ljTxC1gpQiAgCCJYpAoShWARiGAEwWdERFGCmpexmAlM1rc8eL59eGCZe++ZuXv27p2ZIoSghgM4ik/4USdHhFsIuFMnqsw+jhJXcRtLeI5VdBoSnxU/7tmQhG7jQ7LP9ZpQpAofw/shvfRf0cWOWLxTeJuTFZ7iyOh1NWIsPfAEkxnXLUIIuyhGLmtAVNjEG8wMKecjse8v4GIWL7Gb+XtFCrXYnv8bL2u5uxW+YxY3MZGIGzg0oOAHWBxwbV9UYpMXuJvF57GAK8kPYvMfxpcUO4jPOG3/adPqfiixgfFa/COWM/8VTuB6Gs/gMi75+8ib1CJK3G/gTmb2Sho74t+Yxpp4Zm7V1rUquMLjhvhc5m+Jm+grzuMnfmVcjtYF98IMppK9jXviVd0LdcETPWcNCWVD/Fpmv9MslhFXuEnwC6wn+2GfHP9FS8ynZwrf+uToiBfPGl6nsTX8AR7pUnTliEKNAAAAAElFTkSuQmCC", 44, 15}, ["MEKLETH"] = {"iVBORw0KGgoAAAANSUhEUgAAACMAAAAPCAYAAABut3YUAAABxklEQVR4nL2UP0hWURiHn2uiWVFWFhE1aEm05dQqEm4hTQnRkkThIk0tjVGLNNRQQUt/aGsSoyFoKoUPGgJDCqF0MCiiGlLLvqfhOx8ervdePy58/uAH93Le877PeXnPSVQydBA4CRwDOoHdQALcAmajuAToBvqBAaAH2AccAFqBr8AiMAe8DJ7PKgiAWnevelddsFjv1Al1Rl3aIDZLr9UzaktUG5VEHQSuhtO15FLn6x8wA3wEtgFdwNHQzSK9B84Db+POPMmgX1XfqOPqPfWBWlGXU3HP1O70CYMPq+fUp+qvnC4tq1fURAX1c7S4oF5Q9+QUOKT+CLFz6tacuLR3qmPqhxyo5+p+1LPqF/Wmun2DpG3q95Cg0iBI7C3qZfVbBtB8PaijgUSt6uNo888G92W5S51MwSw1urlXnc44zcPQrTJAifooyvW7NjjFukjtfdkBVIFXQAX4BLQDU+G/jNrCrToC/CkiP66+CNSr6h21p2QXijymrqjDWYt71dvq3wAyrfY1AaLuIfW6SnphxLWrW1VvWBvcZoHUZ6czDXN6bZasqpeaDLHO8fN/IvoeBe6XHMrSim/TLuAU0Adc22wQgP8p+KVO5YBdrAAAAABJRU5ErkJggg==", 35, 15}, ["MG36"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAALCAYAAAA9St7UAAABvElEQVR4nMXUv2/NURjH8dfVplqlpCREVCJ+RcSfYDKIFKPNZOjAYmDpPyAd7CY6iY3E77EJAyFiEZF0EA2DoH5cpE0/hnOa3EjruqW8k5PvOec5zznP5znP+TaSWAL9GMEkrnboO1a/Z5dy8GJ0L9HvHE5hGk+xAo3av44uBHMtfXXNVxzA4br2r9CpkK04huE6Xov9LfY+Rdw839HEN0VsD67gFu7jIqbQW317MIu3iuB+vMIzTPwqsEaS2/iIJ/XQZrVNKxk9hO3Yhi1KVpebaXxQhEzhPcaVm52PbxDrauwzjSQvMKRkZSFOKhls4gKOLk/sbRlTbnZeyCqsVITMduONku2BOkmp653Yjb1YXR178Kiu2VfH7ZhRsnkXG7G+ntnuLzOAHUoF7MJlpWoWpLuq7FLqdVKpx894jpu4tojvaZzHa9yogR7B8ZY1c3XuTpug/5hu5RFSsjWiPLR29OBE7V/CQzzAHnzCmmpLy/7LS5KJJM0km5P4zTaawrska5P01fnBJPeq7UuSl0nOdLDvkpskj5OMd+A0VIWnCvrZvinJhn8RfGtrJOlV3kknDGMUB5VS+u/8ANPhlY/CBHGDAAAAAElFTkSuQmCC", 50, 11}, ["MG3KWS"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABnUlEQVR4nLXUu2pVURAG4O+cHI05Bg1iEAneUvgAgo3BR7BSsBAEtbDRzlvlA9j6BoKIaGMVJKiFhYqFgqA2WlioEUlMvCZexmJNcGeDes7x+MOw1541M2v++dfejYiQGMB3/cUY3mKhD7UO4sLvNlu4gW14iFncwxPcRlsh2Eo7iyN4hlVYjyH8UIbwOHM+4SQ24ShmMJiEzmMFPlTqfsHqzGtgTfbXxH28Sv/ejHmJ6VzPQyMirmZAFfNZZLiTUeFzHjbeYXy3+KgQHsz311irDGQKoy1FiTqRy1jEHr8mtz33FioFlzBkOYlZRZ2JWtw0ruX+oqL2gDLZNr4p6q6s+AJbsRNfcRcPsFFRcXKJSBVzOJFE3uNY+sdwPNcvcBqbcVORfjd2VepM4jCuY102NIoN2dgZ/UZEHIiIWxFxJSK2RIS/WDMinkfB/ogYj4gdsRwXK7HNSm47IhodnNG19ZK0L5t9VGlquEbk0v9o9k/W7EHEQ/k8p1wTGKnFvOvxgvSM+jfSCWYUAncqvjc4pfy55vD031vrDj8BuOiKGiBTnAEAAAAASUVORK5CYII=", 50, 9}, ["MG42"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABU0lEQVR4nLXUT4uOURzG8c/d3CMmMU2YbCQLeQNegCI7S9PsrKwtZusNsDR5C9hSLOyU1CSFEpPMSjQaZphJw4zL4pxy9yiexz2+9ev+c851ndN1Or8myVWFW3js/3AMy1jv6TOj7PM32rrAFczhBRawiCV8wjZWMI1d2I+PmMJBHKp1uPqtYw/G8B0P8QYX6/yv1X8e49ionp+xGz+q7kD1Xa7rNziDo3iHD9jCIzRNktO43yOlQVYxuYN+f2IF3zDVKkkMsonzeFu/t3FSORG4piT0EicGtJOd93u4oZxKl7HqOQqnqu4L7ta9HMFTbElyIb/YSPI8yYMkE0n8pZoka0k2k8wk2ZvkVcfv+hAeO1ItzuIm7uC20S7kOeyrCS0o9+Y1jtfx8RFT/2dazPbQX6rPy0pzgInOeN8uNTRtT32UrvKk829eaZHv8ayn/9D8BNb65Uw6yMdEAAAAAElFTkSuQmCC", 50, 8}, ["MICRO UZI"] = {"iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAABBklEQVR4nKXTvy6EQRQF8N+ysd1qiRAV0SglVB5AoqVXeglPoPMMNLK1klLlT6IjUZIgdIKj+L7Nbta3+xEnuZnJvXPO3DkzI4kyxpLsJzlJ0urLV8VOOU4n6SRpd2uNJErM466cn+ILc6oxgwtMYhErOIdGklUcYXYI+Te4xR7Gm7jBxz/EYAob3Q63EHziBevYVRxnFJ6xXfIecNkVrFrcxho6aPXlN7GMKzzhbJDYHLL7q8Lk1kD+tKy9oVFFHCZIYUM/PrCkuP1H3FezRr+34/TwXrNWEmMjOoSFmvoP1AnW1f9MONTzsoGJWsVf+HJQenidpPlfDyluleIB1/6oP3tUh2/zbeu7PlyXMQAAAABJRU5ErkJggg==", 20, 15}, ["MJOLNIR"] = {"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAPCAYAAADzun+cAAAAoElEQVR4nMWUPQrCQBBG3w4rglfQ1sIjWNt7EO+Y2iNY2Cp4AiH481kkRZpkmnz4wbLDPtg3W8wWSZhyA9Yj7Bgm6W5CCnBwifcZd4mXGXeJ3wlfBeCQLxK+rcAd+AAtUPs6gELXeZ3Yv/1FMTgLYJN1VmScp6lU4MEfXoykkMTM66QkMeh6zrwSfnWNU0340yVuM+4SnzPuEl/o/oexND/i84psRuKqjAAAAABJRU5ErkJggg==", 30, 15}, ["MK11"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABkElEQVR4nL3VO2uUURAG4Cd7ySpeIAREUbC2EGz8ERZBKy3SWomFjYU/QLSztLXVQtA/kYiCYuEFYyGKhaKRhYR42W8s5ixslmzcb7PuC8M3MPOe751z5swRESa0axHR3gO/rt3YLd4wOU7i8h74U0ULCzU5l3Adi9iHK2hgDj00EajQxhr240iJ9Upuo/j9zaxKvCr85sB6K/iym6i5iIiahfwvBLaKNWWBv3EA83iLl0OcbziE7iwK+VFEHd4htomfxW9iXZ5CDx38kkU8wy18H+L31223agjq4ik2sCTb41+4i6s4Ktv4T/lGscH2CnyqoWcbRhUS8ihXZX+u4FX5KdzHxeK/xmOcwPLQOu9lz3+eVOC46BfSxRMpeLXY+gjOPE4VP3BHFraF8zg4kNuZst6RaOG03O1qTM7twoGb+CpbpyMn1JmB3HdTUTkOaj5K5yKiisTziFgYij+I7Via1YNZ50E8hnvykm/igtHtR06jjUk3uC7qTK3jeISz+IgPO+Q8lBf/Bd7IKTUT/AXKuom/Yr6sdwAAAABJRU5ErkJggg==", 50, 12}, ["MORNING STAR"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAAA0UlEQVR4nNXVoUqEQRQF4G90gyDYNv2CweITCIsYzQaLUew+iC/hoxhkMfsARoNBw7KCsIjHMuLwWzQtc+DCPfcMhzMMlylJdIhL3LSDjTUF+S8KhtrPcIFp5QP9XCS4whz3OMZj5QNMcI4ltrFV+wk+qskmPquZkTY+d4KXOn/FO94afdGEW+FpFHjZ+H1jD7s4wFEz38E+HqCk0yVpcIubkqSXFznD6Uh7rvpKkl7qOsk8P1hUfpjEusP9tUqSofazJHdJppUPSZROV+TXP/IFsqFsUJMYmAoAAAAASUVORK5CYII=", 50, 9}, ["MOSIN NAGANT"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAHCAYAAABKiB6vAAAA/0lEQVR4nNXSTSuEYRTG8d+TYVZsSYqlwdJiyoLvIB/IR1B2ylpJWVCWFkrJTjKL2XgLeRdCdCyeezGMxcyzEP86m+t0zt117iuLCAUoYxyjOMdpQ28MfXjCW9L6MYAeHOESD/ho890S3vH67c1qVsBIBbOYaXewIJuY+kE/w5zcWL2EXoxgOFUFQ+jAFWqooxMTmEy9Voi04xqHOEj7athX/EcayXCTRcQDultc9IwlnMiNLWJVHrEn7GALC7hNWqHstksWEduoftMv5BkexAvWsIINuZmuNPMoz/4x9jRf6/eIiPlo5i4iliNiOiLKEeGvVwm7ydM91n29/L/hE8EM4YhbYPVlAAAAAElFTkSuQmCC", 50, 7}, ["MP10"] = {"iVBORw0KGgoAAAANSUhEUgAAACEAAAAPCAYAAABqQqYpAAABkElEQVR4nLXUz4vNURgG8M8d94pIkZqdzZRSFrJQfm9MVv4ByUJhISuhSLKwsLCymVKSf2BqNiILI4vZWbixG42NhSipIYzX4ryX63bvnXtuPPV2vue8z3nf9zzf9xwRodImI+JIRLTG2NuxOxGxoTNvqsM2nMcFXMUWNLr8gQk8x9sBMdZiBw7hITQi4vIIyTflpv09SWvwGp+75g+wgMVGRPzAFD7iKfbiWxd5HR7j4JjJB+EDPlGk+46lrHIG53rIXzvkCtzFNM4O4VxSDj/VzEJaWcx9vMA7RYGfivz3cFFR6AZOrFLEKzzJ2DexdRi5iXlcwyJWcBptf/+/biznOIs5PMN25Z9fwZlck4c4gI194iz9/qq8Wq2IeB8FtyLicERsjojd6T+VvpM1cWuv6FF/pJ1RmmsNXuZaO8edNUFrizie45u0XrSVvtlXE3SisoiFTDQ/wL+cnD3690F/jPnsrh/iu559cWzUeLVKdPBliG9Web5735t/rsRq9ijV2PU/bseouK3028oo5F9aKtp9IuT0cQAAAABJRU5ErkJggg==", 33, 15}, ["MP1911"] = {"iVBORw0KGgoAAAANSUhEUgAAAA0AAAAPCAYAAAA/I0V3AAAA9klEQVR4nI2RPUpDQRRGT54xYGknRCwtkhAsxE4sLCVY6wbcgavIDrKFVCmsFLEQSy3cgIUipjGVEH+OzR2dvLzifXCZmW/mcL+ZaagATaAN3AOPwCvL2gKmwLQZRg84BdaB/QpgQQlaA45Ke0OgA2zGegTcAaCmOvFfM/VAPVYn4Q3S2RwaZ1A/87fDOy9DbXUem29qkUEt9Uu9Tl4Rec+A1ZhfAD/Z3ebAE/D55wS9G10+1J2sS6oNtZHW6fX6Md4CDxWvvPBvKd5hjFeVH1NWtH2JeHsV0ZYKtRvAu7pSByqyaDfAd510OXRZ6z4BCTxHp1r6BZSjGC4UypD2AAAAAElFTkSuQmCC", 13, 15}, ["MP40"] = {"iVBORw0KGgoAAAANSUhEUgAAACQAAAAPCAYAAACMa21tAAABWUlEQVR4nO3TPWtUURDG8d+udxVjAgFRREEsrCy0CUJSaSHYJq0Qa7+BX8BKSGdtYWGlNhYiFlkwXyDVClokIIJCwCKurzwW9wiLYO6JsmLhH4Yz5zAz95m55/SSHMdb3ZzEObzGp4nzBWzi88TZAF8m9gcxjzfY+kX9ZZxucB23O8ScwjrOVgjfi294gTE+aBvbxYy22a8NznQUmcO1fYoZ4/DE/j7e4yVG6JeYMT6W+jew20vyFEM02rEfKoEzpQsl6SZOVAq6i1lcwjFc0P7WbpLcSaLCHqVlJ8likotJVpMMkqwkuZVkI8koyVLJWSs55yu/ocF2he5ZXCn+UPsIeniivbwPi/3MgbI2VdMpgQ8q4pZxpPhreFVZ/8frfVcrqK+9aF2slnULz2uL/w79ipijuFz8x8j05NQJ2sFV3FM3zT+i5rIFz4pNnZoJ/VX+C+rinxP0HXZCsUHF4lUZAAAAAElFTkSuQmCC", 36, 15}, ["MP412 REX"] = {"iVBORw0KGgoAAAANSUhEUgAAABwAAAAPCAYAAAD3T6+hAAABJklEQVR4nLWUoU4DQRRFzzataSAYBLJBIEDiqgGFAcEf8AEEAwnB8BVgSfAoBH9AEKiGYBpMHSEIaEJJDmJ3YTtst+xme5IR+2Y2d+59MxOp5NAAOsA2sAYIRJn58Hsac8AGcIM6aRypH8Z8Os6rFWnm7OYY6CbuUlol3BSSJ7gUiE3iHXgsqTfKE+z/48cWcAiclxQk7FtTvctEPlTv1YG6oy4n46Cg94UjLJwGPb5M6mfBus2qgo2M2RXgJAigQ3z8n+Fn7QLwVTrKhMjfe3gB7Afze8AQGAHzwFtSv60qmFrtJn3K0lejqtFNi3QdxuIFuCJ+UepFbau9v2+Cq3W7Sx1uAYvBPh6AXu3uiGPcBdpB/XoWYqngC/AEDIhPI8QncyZ8A6Aa7h5KlouLAAAAAElFTkSuQmCC", 28, 15}, ["MP5-10"] = {"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAPCAYAAADzun+cAAABXElEQVR4nK3Uu0odURQG4O/oYMSIhYogwdhFooKNTSpJ6wNYWvkAnvo0FiGkT5VnSBmJjdqInZWK2EkM4iUqFl5CRLfF3sIpjmf2QH74WcOstf912bNGCEEFTocQZiqeaeby83MhD7OoYxw92ErvB3Gb2IFXuMM17pvOPyT7Ab24roUQvuAbrl5I2o0VTGUW2Q7/0MCvAvP4mypthS68yxS+wes2/p94i8EC37FUIriOBXHkQ23ifuBP4jHOEk9wqqm5Ao8lSWEzsYFPOMI+LtEnTuVjEl/M0FPgd05gwkyyX8V738Z7sZMDjOUK1UIIubHDYpGdmEuJHnGIc3Gk93iTpVZhB+sh4iSEUGvhX03+/hy9jtx2MSru4xpajWk32YkcsSqJFzGCzy/495KdzBHL/XM94zixFXaS/e8dl2FXvIKsjqt81Tk4EPd6oCyw6qjLsCGu0wAu2gU+Ae6NAO3PKv5YAAAAAElFTkSuQmCC", 30, 15}, ["MP5"] = {"iVBORw0KGgoAAAANSUhEUgAAACMAAAAPCAYAAABut3YUAAABk0lEQVR4nLXVvWtUQRQF8N/KovELK4X4UViISNSoCIKFihY2WqTxfwhWFmJhZf4ES1v7lKKoEMRGEAxLKhXBQolZwUKj+IHH4s2GRdbd9xZz4PLu3Llz5sy7l5lWEmNgBw6jg8/jEBRcxBnchHaDhSdxofj7MIs7eFFik/jSJ25bGcOnAXw/cQzTvUAryXVsGCKiVYTMjMgbB7/xHJfQbSVZwc7/vEldBN/wCx/bWC8xK/iBvWX8FR+wjG7xO3iilLMnZmoIabCI132xCVweIWY7Tqt6aBmro9T3xPyNd3hY7NGAnIN9YhZwv/iTqlPPYk/h6Y4SsYYkt5OsJrmX5FqSqSRG2I1U+J7kXJLNJT6dZGuS+TJ/tgbXmkmyO8mmJouSdMpmi0lOFTuRZFeZv1XmrzbhbeN97d9Y4SiOFH8ezwbkLJXv8SbE49wbV/r8x//Ieapq/PONmBuWR5KNSWaS3E0yMSRvqZTqUJOeWS+bK2Lm6q5pZbyHsg4O4CXeYr+qbEPR5KFsild4gDfYosal9wdOMvzoLZjPiQAAAABJRU5ErkJggg==", 35, 15}, ["MP5K"] = {"iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAABTUlEQVR4nI3TsWoVYRAF4O9eV0ijBuIFwUrRIigWKlgYJMTKJvgc1mLpG/gAikUE8waCCCoIFoKogRRBEBFJYadRlCSQHIudq5fFmD2w7M6ZYf5zZvYfJFE4hcN4qz+m8KSpYA53MYPbxR3EcXyquCnuJzYQ/MIZSS4nuZdkN/2wM1G7mWS7wQhXMehpYTjx3WDQYAsvcKJHo2Ws4iIWsYSRJJJcSPKqh5VbVT9XlkZJFsaDfYMVXMIHPMU7HNBubQo3cHTSBmbxfKxkmGS9TruT5Erxs0mmk5yv3KPiT1e8mMRYybx2nfAZX3FSu8ZvWMMOzlbNx8qvw1jJ/eq8neRQcd3nfc1hppsblu/rdcJr/NhjMy9rDvPdxLBknsNNPNijATyr97VuYpC/d2c/HMEXbOKY9v/6o6QvNvAY0101zb+q/4OH2kv6fZL8DULeHvZfhuAuAAAAAElFTkSuQmCC", 17, 15}, ["MP5SD"] = {"iVBORw0KGgoAAAANSUhEUgAAACkAAAAPCAYAAAB5lebdAAABlElEQVR4nLXWPWsUURTG8d/EBCQaBDVELIKkDCkExVIUA4pfwE6wsPQTWFj5EawsRLC2UgxuFFEbbW0SLISoGNOIL+RFF4/FvcJs2Mnu3k3+cJm5c84855mZew9TRYQC9uEMPuFjiUCNBVzFWlPC6ABiJ3EFFdq4idd4lOMTOIDVPB/DCLawgc1tem3pYY/hFJ40Fa4i4nZO3ok5XOojr5QHeNUQiyoiVjG1R8V3hVF8tXcmH0qf/D9/G+YbWKld38J63WTjgs208SaPPzXxGzjY494F3O2R05Mmk0tYRAsv8GNbfATXJZMtvMQyjksPchrXMDmswbrJNTzLBRf1bivncDSf38EXvJU6wHt8zibndsOkiDgUEVVEGGDci8RmRMxHxGxEzETEiRyfyfF3A+p2HVVBMx+XeuEEnuNCl5wK37Efh/FriPfYsdP65bxkkLQ0uhFS3xvD2YIaHZSYfIxZ3MLTHfJa+Xi5oEYHJZ+7X6bxAd+kXf+7VKjkTfbLitSajuDiMEKD/GCUcF9anz+HEfkHQgfUlgZnscIAAAAASUVORK5CYII=", 41, 15}, ["MP7"] = {"iVBORw0KGgoAAAANSUhEUgAAABwAAAAPCAYAAAD3T6+hAAABNElEQVR4nL3UT0uUURgF8J/jtAoiFKx14sJFgrgewm8QuIr2QR9AoX1LdwotRfDrOAtRDCpoEyiCRJRQM3pavHdkGKZ3/gRz4OFw33Of53DPe7lzSYyBh3iBBezgHTq4RQN3Q7iFU5zj7H5SkmdJ5pOoqVf5P2z2ZjXxBfv4VXPClXFiqEEL12jOpcr0KS5rGl7jaMj3LoKfeKCKGebxCL9xgzb20FWOvDgi0qUkb0q9T3LXF9dh2bPWt3+laFtl3WOSdJI0RhgOVrsM/J7kbZKNJMt9+vOivxzsbeJKdasmwUesq27gh0kaG7iY0Izqv9Xhqs5wbwrDUbjGLr4NCk0cTDHwc+GTf+h/sD1MaExhBl8LH0/aOK3hj8KPZ2XYeySezMrwU+HVWRleFtMb1ZM2Nv4CumVMM5mtS2kAAAAASUVORK5CYII=", 28, 15}, ["MSG90"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABNElEQVR4nL3UzSpFURQH8N/RIeVSRDEzMFEGxooHYGbmBUw9gJkpA0/gNXwUSgzExMxEknwNhOujENtgb8WV2z23y79W+5y11n/1X2vtdhZCUADtGMcyykWIBTGESczVSshqaKQN8xhDEwZxjXO8fMlrRheuatcLAm4rfCUMYBSHtRTJQgiLiTTxS04ZHQXFNQqrOKnwtYgD7Ejf1wi5OMGZKsXqaeIm2See8YR3casveEyxd7ym+Nf8B6zh4JdG2tP/PeS4qyJoHbM4wlvyNWEf/ThDlmLP4maJ12GkSt2GI0cfLtIpCdrFBpZwWsHpRK84gGF0i1O9xAqOsf3Hun8gF9e0gB5R/I7va67EFFqxJTaVpfyyf97CN4QQitpeiJiug/tnlhfsOxdfkhI2Gz/W+vEBSIjfes9qxc0AAAAASUVORK5CYII=", 50, 9}, ["NIGHTSTICK"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAAAxUlEQVR4nM2WMQoCMRBFX9a1Uqy00gt4EhuvaW+hF7GwtBREm0UUkbhjkYBBWHQnu8YHgT8hE/6HhMSICDWZAwvgCsyATd0N2iBX9ByAgR+7Zu3oyRQ9w0CPmjISiybIuEInRROkH+heU0Zi0QQxkf2toDFyqdBJ0QTZV+ik5MAEKHwtQOnnLe4YZcDD13fgFPQff+b0A0ZEtsD0i7UWOANdXhe+wAVPzcqIiAU6qZ1EcsuBJe6VFj/AHal3bXHfkn+jBNZPkrIq9nsKo+oAAAAASUVORK5CYII=", 50, 12}, ["NOOBSLAYER"] = {"iVBORw0KGgoAAAANSUhEUgAAACoAAAAPCAYAAACSol3eAAABwUlEQVR4nM3VTYiOYRQG4OvDYDZCjNIwM0nK/2YWtiNZSTaUtVgo2bCgJAtbViwRs0HZizJslJ9SjI3IX/ktKYqY2+J5/STfV+/rS+469XQ65zx393vu520l8R+jH8O4MKlB8wLM6C6fttiM9dCE6A68xknM7x6nP2IrRmBKg+ZxBLvxvsrNrM4Tf8/tB5ZitSLmQF1FV+MBpuFAdb6FmziFtZiL7VXNd8yqeU8/RjEZLYy0aprpOK5iHz5iHgba1N7GJTzFIRzG4za1LQxhZRVL0KMIMR1jrSS7sA578aIDyVU4XxF8h2X4hF580WyN2uGV4oEj1ewFrXTnfdqCt5jdhVnjuKeofE0RaGcryQnlCdiDlx0GrFQ+3yR8UAz0HZ8xtQskKUZ9rih6TDHo3Lo7ehpXsEnZoykYbFN7F2PKju7HUTzrMLsfKxRBhhRF7ys7el2SOrE2yXAKziR5luR+kidJzibZkGQwye4kvb/09dW8Z1GS8fzEtrpEJdmYZCLJwiQ9VW5OkskNZnWK5b8QHWryZ1quOPEg+qrcG3xtMKsT7uIOHuJRkyflIi7jhu6T+x2jWAx1zfSv0Y81OPcNyo9lXlsJCwsAAAAASUVORK5CYII=", 42, 15}, ["NORDIC WAR AXE"] = {"iVBORw0KGgoAAAANSUhEUgAAACcAAAAPCAYAAABnXNZuAAABDUlEQVR4nMXUvUoDURCG4ScSQcWfKoK1io0WImgpeBEWegneg4XXYSVaehGCYGdhWhFBbEQNRkULYSw2IUuiuxjMycDCsPN9h3fP7EwlIiSOE9xjH59FwsoQ4GAT29grEo2kYemJM4xiskg0LDhoYLpIMKy2TqGOBXz9Jqomw8mAahjHAT4UgJHB1XHTymv+v9WzrXPHut6/lRmrOMQ1JjAn+7KfotEHWDUHN4dFLLdqd6XuiEj5bEUndsr0qad1LZfPl6oT3tp6RDznbu4xIpaKPClWyZFsZWzoHbZ3nOJCNph1NNvFQcOt4vKPnlsZ5PGg/7ndPn1PeBj0En7FOVYw01Vr6rTyKpe/tAXfHswkRn5JJ08AAAAASUVORK5CYII=", 39, 15}, ["OBREZ"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABd0lEQVR4nLXVz0tUURQH8M+LoR8LS/FHRW3btzQEcScIupPaFq2ittEf0Lply1qq5NJFbRRBq4WKhWa2iqYQbAqSSErzurh3aJKZ3mhvvnDg3XfOvd/v97zLeVkIwRHQj7M169dYz9kzhIs169/YqlO3m3J3sY0zuIT2lF/HA3SkeIdH2SGN3EEfrh54v4W9RLzdYO8FnDgMWQ4CMuxgo1kj53EbN3CuQDFFYBX3SzlFXbiHWzhVIPkejhV0Vhnj9YycxjBGMYiTBRHW4n9MlPEWaykWoGqkDSNaK75Z/EIlxXt/BK+JBuoNCCVxmjxGTw5B9Tp8xTcsid0ZwOUmRQaMYSIJbhOHQ1X4ZiOhechCCBV0NshXEumT9DyLa2IDnqaaAcz8g+M7XmIOU1g8itA8lPDB30Z2MC2KnxS7X8VDvMJNUfxP/DhwZhnP8QLzWBb/DS1FFkLowXXxs3/EM3xpUN+LK/gsXrVddOM43mAFn1qsuS72AT7eZ3QJztt/AAAAAElFTkSuQmCC", 50, 10}, ["P90"] = {"iVBORw0KGgoAAAANSUhEUgAAACYAAAAPCAYAAACInr1QAAABvElEQVR4nM3WTUtXURAG8N/fBGlRWZC9kiG9Y4sWQUH7Fq0K2kYEEbVtWW0k/AJFH6CgTUS0DKJtUIEISWBGGpHYohKyTejT4h7rclHRzGpgOOfMPDPzcO7cuVcSK6CdSY4vAT+YZG3d1m5l5BTOoQutmj1lbdo2YB+ezRpXitg33MZV7FlkzEl/gdgV9OIahrGr6O6im+aI6a0f2tHzh0mtwt6yH8QQXjQwa1RE9+MyOnGgDmgliX8rY+jGOLbOGn+H2AwmF/C3YV3Zf15Evln8Z1VfTmPof7ixpkxh5E80/3c8wgdVnxybA/MEo6o3b/08eZ6jD6sxI8uT+0m6GsPyegPzJUlH8Z1OMl3zfUoykGQmyWg9T9syb+sWPjZsY43zDLaX/T1cqPn6cQgDfg1fVI03hcdFF9OsdTmrGg/Keh43a/7hUnAEO4vtVc3/tqzTzcStJH14X85bVM+4KW/wDpdwokYGPpUC27C5Zp/AUdzFETzFHVzEQdVNbizx+1Qz9eXP6CV8aGe1O0l/kokFeu9rksNJWkkm58E8XKjOcv4gOpI8aBR7neRGkp6C2TEHofEkZwrpefP/AOBlSTxrU6/FAAAAAElFTkSuQmCC", 38, 15}, ["PP-19 BIZON"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAAB7klEQVR4nL3VvWuUQRAG8N9dLipR9DQWgjGSWkUkECWIIGiRRktBxNJWsfYPsPJPsAj2BkSxUAs/UdFEECMookGFiBiMwc/kxmL3zCV4l+Ry+sCw+87uzszzzsxuISK0CGvxHe2YRhsqea2YddW1IgIl9OAQXmIfTuPHAr62YBgbq4pSCwgUcA4n83y5GJBIzkcHypjEBK7ULhZb4PgqTmkNCVKGOnENL/Auz39iEG+xwVyy5UJEDGG8CYclKcUHm4+5LioYkUqnHe+xHaNZ14UZPMEKRCEinmNoCU7K2Ik9LQq6iik8wq8Gey5hBz7hjdRvHVhXiIhbUpMtpus34wh6cbTOnml8kUphHN3SRfBZ+tOddc6N5bMLoTPb65UaHqk8VmE/bsw70IZt2Iv+PHbhKe7jDC5jDW6a7ZG7OC7V8TAuZvsT2NogwO5FkKhFaf7Ht0xiNfpqAu/PZB7gNi7kICf/YvQ6DuT5lJT2aoafZTKDeIxdSwy4HuZcLoWIeIWP2cEH3KmREYtL9z2pZ8akLK40+4ZU8FWq/WGNs7KY4Mt53oeHf1Yi4nxEHIuInojQhGyKiJlIOLvA3oEmfdRKOSLWR0SxVr9coyLiRMxidwvsNSWteBAP53F8Tqr/M1pBZBSvpT6oNN767/AbCJKhK/ppxRkAAAAASUVORK5CYII=", 50, 13}, ["PPK12"] = {"iVBORw0KGgoAAAANSUhEUgAAACkAAAAPCAYAAAB5lebdAAAB6UlEQVR4nL3WTYhOURgH8N87mBkkyqTUmKKUyMeeElmxwUaxUBZkpWZnoVgoH2VlyYYoGytZisWsLEQ+8lVSzKRZIFNGM/O3uGeaG6+Zeedt/Ot0zzn3ec75n//znOfeRhItohsX8AOf8A4NBBM1u47ybJT5idJvYAl68B5jxe4JXmMfntU3XNiExCJcrY0/4nxtvBmnWjrW7PAWvc1eLFSd5ptKkQmM4FjNZhh9pb8cG+aBIHzAepxRRWgUP/GykWQM1/C1kPyOtTXn0eIE/Vg1TyQHVKm0EYvL3DCGGklGsHQa5y4cxAlsw2Psqb2/hE7cVSlxvckaz3C5EAkWmMrjyfZZJUgvxku/G4OSjCTRpK1PcjnJlyQPkhxK0plkUZKfmcLRJPuKz8ok4/kbp/+xx6zanxenE/txHFtwAzvwpmazvag7GaKHRZl1WFH8J8N2VlUFbk4TqZmR5FeSk0kuJhlK8ijJkSRd/zjZxZpCV6ZRYHXNrqcdJTtK7Peqbvpu7MStMt8Mu2r9p9Ocf1CV+LC1XSVbbQeS3Ct5uWYG2/tFyXPtKDlnxyTLZmHTX0gOtEOykdY/i61gE56r6m+fqXrbEjpmNmkLL1Q1sgOH57rIfJNkqvwcnesC/4PkbbzCHc1/aGbEbzIYXZKpnhe5AAAAAElFTkSuQmCC", 41, 15}, ["PPSH-41"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB5ElEQVR4nL3WO2sUYRQG4GfiGoxGo0JQhAhKCoVsRETBRlQQLATBxkos7K0sLP0PIv4BRSyEgIhWYqWNl2BAUmgUQSGSRI3XmGzG4nxhQ9xdNpOJLwwDc+a833nPbSbL89wqYAdqGF8NcpzHBZzET6isgOwALoqg4TmeYgCnhZAhjLbg2IAM35d59jF0CkETmM8KViTDLZwt4twA8+jAJF5gLQ7iSbIfFkn6g314j8/oxyUcb1WRzSK7XzGy6PlOXMOpkkQQIog2GcMafErBwhSmRZUn8FuIGscgRitYh70p6AFU070vkeRJyBtsw350FQj2JfaIloBhnMGXRe/MJDHLRgU/1DPSCJlQPdjA9k4I3IRuzGEjPibOTpGIbmwXLdGffO/gbZGgG6GitYhmuIErQgQcQi/uiar1JFst2bdiFy6rCxkrFHETLBUxL/pvroXPVZxTFwHrxSztFpuoS10E0ePP0rWAo4UiboKlw14TM7OASdzGQ9EyvbjegOdRm+ctXhon2vRpC1n+7/79hbu4iQdiO5SFPjEnMCtmpxT+LM/zWbwW2bovhnC6DPImmMIWsQR68K0M0orIykwZZG1iBEfENqzicRmkHf6vCOJ7soBqWaQr+dcqimHx//UKH8oi/Qu3jXF9n30YrwAAAABJRU5ErkJggg==", 50, 14}, ["RAILGUN"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAABuklEQVR4nM3Wv49MURQH8M+bnRlCiMJS+5EoRYhCQ2IVJCgkCqWOQiT+Aoot+A/0Go1OFAphFWQ3oRCFEIUoJDIbsmTMmqN4d7IvmzdvJm9ms77JyTv33Pu959x7T855IsIU5faU9xsl1wZ603DsxfaKefiVpI0+ZnEOr9FLa1r4m6SVbD000MRq4rYRaW4mSZGX4U+B18dpfMJSFhGPCw7KDtJOAW4ZcpifeJX0rSmAlREXAPtwoDBeQqdi/QlsS3oXL5KvU7ibRcQznBzD8f+MSw283+wopoEGvm92ENNAE4dqcpexqya3j881uWVYaeJYTfI7fF1na+GstcLQlVc1eIK3Sf+CBzX9liMiLkfEjYiYi4jlyHEzIq5ENc4Pqe3XC2uuFuxnNrKnNPBQXsaKWMRCzbspltCDOJqkqmdNjMHmvXX23fLU6RreP47jd4n9Vvrex72k7zS6uU6G9DQXI+JjRKymlHgTETMRMV+RWv0kZehExJ7C01+IiGyjUwue4w5+pPFhvJR3zWHIKubm8S3p++W/EVH7tsfAILU68nT6YO0wAzyt4Gc4ovxQc+m7A48miHEs/AM96SZT05tTrgAAAABJRU5ErkJggg==", 50, 14}, ["REAPER"] = {"iVBORw0KGgoAAAANSUhEUgAAACAAAAAPCAYAAACFgM0XAAABFElEQVR4nMXVwSpEURzH8c+dJhFZKJ5ArJCFQrZ4CVkoD+Il7Cw8gb0FO1mwUUQNJWWaMSGhJMZiztGkE1cy91f/zu3+zv9/vud/b+dkzWbTH7WMK+zmnD+IcXSjVMYMen9IauAI7wmvgqlvALowiwXM4QH7KGGyHIyeMDnDNC5RRWzPAMZwge0Q1eAdY+XLoiOh7nzI3Qs5a3jBIpZwnSU+wSrOsZPYzXBb4SE8ox+jOMET+kJXImgtUWcjQG+WE2Y9FE+pEmK97V2m1ak45tEnVClhnuEuZyFti/7mb76JD6kOnIb4T9XD+JrqQCcUARpFATxGkKIAogoHqBUJ8IaDIgEOcV8kwBakjuJOaELrBr39ADheRQQ3V2w2AAAAAElFTkSuQmCC", 32, 15}, ["REDHAWK 44"] = {"iVBORw0KGgoAAAANSUhEUgAAAB0AAAAPCAYAAAAYjcSfAAABSUlEQVR4nLWTu0pDQRCGvxyDN7QIeEE7BcFCCWplpeALWKnPYGFjIYLv4ANYio1a2Vn7CCraiCBEgoUekBgv0d/i7JF1sxtMzPlh2LMzc+bbnWFzkghoCxg33+fAuxWLgZvQjwEVgR3gIOeBrgFVYBfoBHqtmIA+429ZPmgXcAWMAffAqBX7JLlxT4OasTlcWJJcK0p6VqI3/daLpJLqVZG0J2nGU6/O7M26pEdJNavYnVM8lnQh6VhSwbLuv8BSy1uXXgEKnlY/WftXk1Ny/E0pMuscsOCJDwH9QNnABkjmWW0VCPy099Azp5qkVUmbJmdD0kQzbWw00xFnjqlOTNK8pEFJS+0ASiICZoEOpwFnwDawCHwBk8D1v1pqKQ9Me/ynwGW7IK6iAPQoK2AKnXJ8HyRPIlPosON7ACpZQ5eBfQMDuM0SCPANMWCr7GWj+gYAAAAASUVORK5CYII=", 29, 15}, ["REMINGTON 700"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAALCAYAAAA9St7UAAABaElEQVR4nMXVO0sdYRDG8d/RLYQUIl4SG8EgCGr8BFokpAgWImIhBO3UKpBvIWJpk5DeQgSLJARioQQLSxuxEAtFQVEUjleI8Vi8Kyzrfc8x/mGKYWbefWZn3t1coVBQQlqwjC78KuXB9xFlrPuEzzjFEebxD3/j+Ad0oAz1aEVj7MMbbGV89o1kbaQOrxN+s9DIIQ7QgxfIoRLlqfoyJSaXcbVq0YBz9KFGmMYUCoLQEaGxH8LkGuPaPH7ipBjhabI2Uocv6Hb9bT8LydWqEna7JrZazGA2kdOLMTT9L4EJhvHttmCEr8K+X1mSTrSjGhPofxqND+LO+xzhJd7fEm/DJN4J6wRLGMJHTOMM43ibqh3ABjYziE5zgfW7EiKs3nNIcgqLwj/iABVCE3lhBdONlOPPI8QWRYTjB+bOCZf7KPYXErFDrKTy14qT9jgi4dOYxz5+4zv2sINdvMIgRuPcm9iO7dm4BPG6ST7TpSsKAAAAAElFTkSuQmCC", 50, 11}, ["REMINGTON 870"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABNklEQVR4nM3SPUucURAF4GfZVzDIIolbqY2JlZYhhYVELaxsAulCynT5CalDGmv/ioWVSBoRC7Gw0JCQRfwKIQSyosmkeEdYYVk3umoODPfcmbncMx+ViHADVDGD99jDGproy/gZPmesV3iACRSo4Q3eVq5RSIE5vMQL1Hso8tooOsQGMJT8S57zWMLj2xTVBgf4mvxiIpv4k76PBZ7jYYqcUoqv5wPYwTQW8Tp951jFM2zjJyZxivUWATX8wlEbcQsY/odCNpJX88/vuFinXRFxEhFb0Rk/WngjIqYjQkTMRsTT5PMRMZa8GxvvMq8/IkavyqtExDYGMdJFZ1bwCod5f6Sc4LlyKu06fycosI8nyjFVOuR+wDv8bvF9S7t3FGgo9+0TlvM8wbGyw0eZ13S5iP8KfwHBduFeUw7c1QAAAABJRU5ErkJggg==", 50, 8}, ["RITUAL SICKLE"] = {"iVBORw0KGgoAAAANSUhEUgAAABsAAAAPCAYAAAAVk7TYAAABT0lEQVR4nJ2UsStFYRiHn8tJhDAgg2xSShbJYpTJf2FhQcokm7/AJovZIGVCGe7AplgYDIrFVZe6pHQfw3lvJHG/+9bX13f6Pf3e7/eec1BpcBXUOXVPvTevd/VC3VQHfzKNGg2pRb+qqn7EXqs3dS2aQqWgklgjwCnQD7wAd0ARuAVagUlgDBgM/Q4wDyTfqF29/hbZgtr3i25KPVIroV1pJMaNgEvq0j/abvU0oq2o/SlGmfoYZrtqUx3MpPoUzHqK2XRAz+pMAncY3FkGTAPDQAEw9lq1AO/AJbAcz8rAVcILdQLMAqMZsA/0JMBV4DlB/xRMRwZMAEP8fbMbYDs6bAM6gUqdZr1AE1BOmdlUZP+qdiVwB8EVs4Q4zoEH8pnVG+M4+UcOcJxiViWf734CMwD0kTe3lWIGsAq8JeibY18ESo3+iOtdHep27fwJbGPXE3snskwAAAAASUVORK5CYII=", 27, 15}, ["RPK"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABz0lEQVR4nM2Vv2sUURSFv010N4tBjFFYVDbRIiKmF7QyCiaCf4ONoNhYWgVFsNLCQjSFNtYiiHYGIiEmjYiFqSKYQrGwUFl/JGb1s5gnPofZzaxm1AOXB/fc++49c2BeSaUD1IHRnHV1oAYsAZ+ArohfBiZDHuAF8LiTRQK2AM+A2roOmurALLD9NwbOAx+BXcBTYD+wDXge+CFgHJjJ6O0GqsCHVH4jcAS4DvSVUo7UgAF+ftEBYBDYGYaVO1j+G7+6EGMJeBBOwr1VYDGjtgz0A69T+T3ACrAXmC6pt4HhsHRPm8WWw1kBJLH0FbCbROgP3AcehpqjJC4uAg2gCWwF3gOngS9t5q2GMnALuAmAOmc2Guoj9bJ6WK2o5wL3VR1Su9QJdT7qu6GySnSrG3LU5Q7UaxkiLoYl0w0nA39W7QuxWd0RxKm+UatruWReIadSIl6qvS0a7qlNtT+Dm4ruuPQvhOxT76pn1GG11KK4V/2sTrfgD0SuNNVDf1tI3qiox9UTbWquRK401NH/UUie6FFnIjEr6nl1fdFC0u/IWmATcAc4GOWeACMkv91C0OrB+hO8A8aAqyRvCcACBYoACnEkxghwATgGvC1y0Hf7SvNx2X9kUQAAAABJRU5ErkJggg==", 50, 13}, ["RPK12"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABxUlEQVR4nMXVsW/NURQH8M+vXpValKRSiVQM5E2NxWQTmyYSiVFMBoO/AoM/wCxMJGxiYCCihKliEINIeASJIvqq0vYY7q3ePO3r7yVPfZOT37nn3HvuOfd77u9WEaEGKtzCIh5iCZvyd9lf2qqs78KHvG4Age94l/WPaON1nSQKXMID3F42NHABmzHeMbmF+ayP4HjWT/S4aSc+5STgB/biqFRsiQpbMFfYhjGEmSIvWKgi4j3GOoIsZpktgm6vkeQvqfhB6cRJTJSMtDGdYw5hKz7j2yqFHMDLwtbM3x25wK94i+cNid4xPMZF7M6LX+BLXjiKN3nTm7iBu5jKm1USg3uKAtZDE/ukVlzyNyMkRn4W4/3YicvZPvvHExF3ImImIo5FhDVkJCLmI+FMRIxn2+mIuBcrmOgSo1OqLHXnd5UG7meaWl1Ob1K6R21cs9K3V6S+PZLHJ6W2qYO6zNWMVq/isxExFxFPV/GNFmy1ImKwX6fci/QyeVtENNfwXS/a69z/KKSKeu/IepjAM+lv1cZBvOpH4LoY6FOcaZzP+jCuSm/UhqFfjJASf4RD0kWeVLy8/xr9YgQWcApPcNgGFgG/Acl2LyU01kx/AAAAAElFTkSuQmCC", 50, 12}, ["RPK74"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB3ElEQVR4nL3WzYvNYRQH8M+dYbwNGSHvbwuyYJSNxFqKlSwtFGvZSbb+ALKRjWRnhSkWMmSEpCQvCxuTJQsamSYvX4vfs/g17nXv5ZpvnZ7Tc87395zzO+d5aSTRBTbgMPra+K3AUqzCJwxO40zgOr7W5kbxsZtgsBJPsWZWF6TNuFfI3eKVKuj1eIH9WIy3xT5cxmtNuP2Yhy/T5tfgIK5iqFGryADWYl2RDTV9Y5F2lagjaLSwfcObMsJszMe7Jr4DWOT3aq0o8SzHaCPJbWxT/elWC8MkfmIBfuAZxrEdW2p+NzFS9H14VPwm8B3L8BmnMPWH9dphCJdwESR5mOYYT3IjyekkO5P0JzlTbFNJNiVpJDmf5GmNdyWJNtKXZLADv45FkgtNkjjZgnCi2I8lGShzg0lW17jvS4I9C7LTRI7XgviR5HGSOS0Id5NMJlnYxPay9p3hmU6kD09wAYdK/+5q0btLsBdjpd+nY6SmH/mH3v8r1E+tduhXJTIPt5rYt+J10T+ojtrJfw2wY/S4xA9q7XV2Jlurm4p0gj24rzrfv2O36ub97+jmgusEYzhX9Fm4jLk9XqMpel0Rqj30XPWkmcIB3On1ItPR64pQbfCjqkfgDjOQBPwCKfbHJlUgKu0AAAAASUVORK5CYII=", 50, 14}, ["SA58 SPR"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABcElEQVR4nM3UsUtWYRQG8N+nF00RBYMiEqQlGhyanBqE/oKgIRpbm42GxmhxaW10yHBz6y8ImqNSQSlycBBKw9AvsePwvh9e3i/8vJLSAy/33HvPed7zPOe+txURGmASD/ALP2vPOySt2n0LK9jBwSn5R/AYb7HUpLGqFk9hsHi/ju28wRTmcKfJBjXs4AeGJKG/MSwZMpqvNyQDJvChB98QLuU4KixkwhmMFclfcsFVx26fFX159eNPjjtGVgX/OF714OsIaWO/yk22dYsgOQSHWMVe3nASl4vctu6J3sI13OzRVMmzJE3w9IiIlxGxEX/HWkQ8iYgrEaG2rtdy5iPibkTci4jlon60qDu3VWFDOgsTWdv3mjO3sVto78fzHL/Di1yzj2k8beTkP0KFTWn029Ih3JNEvNctYgCvcV9q/iG+XVCvJ6LCIt44/oWehDF8lUQ/8p+IIAk5bJC/hVk8k6ZW4gAf8RmfpM/tQnAEhj3qWWVxduQAAAAASUVORK5CYII=", 50, 9}, ["SAIGA-12"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABfElEQVR4nMXUv2oUURTH8c+EYOJKrGysUuUFLBMtLERFrLS19gESS3uFPIJgqQ8QCEnURrBQQRD/gBBJNhERhYiiJgZyLO4I4+7szmRnwC9c7rl3fnfOOTP3nCwiNOAo5g55ZgrzeIPn2MbvIe+/gO/YxD18LRNmEXEJexXO9/Ekn/8yh7uYqRV+O5zCi7IHWdT/JV3cwXucxE0cbyW8agKvlX/wCXQOk8j/5hkelexPoDPesrNveIVMut/ruNKj2cU17Bhw3wfwSaqnUuokEvgoFVu3MK/gAaYL2jVcze3p3PECbhU0k3iHl7XCr0kWEXvYKgRZHN382aBm8Binc/u2lNwX/MABNnAEH3CicO4GFlvMg4iYiggjjGMRsRuJXxHRGaK9H/+yOqLPgWNM6tGjcE4qNFIR/hyiXetZn5FqqDXGGpy9WLCXK7SrPetJnG3gu48miZwv2CsV2i287dm73sB3H03a72UpmVmp7VaxhM94KHW7pw189/EHRhD21effCJUAAAAASUVORK5CYII=", 50, 12}, ["SAIGA-12U"] = {"iVBORw0KGgoAAAANSUhEUgAAACUAAAAPCAYAAABjqQZTAAABX0lEQVR4nMXSu2tUURTF4e9egpo0ioiCqQwWlhYWtr5AqzSpBRvLFCnzN6RLZyeIYmOlkjQ2NgEVsdFYSEBiIahE8gB1cFl4xOt4YcaZkVmwOa+9Ob+9zqmSKNqPKYPrBjbxEht4g60eNccxiw/YwxO8lqRKcjXJZsavx0nUWMRNTA/h0ij0zE+HL1ZJ3uPomIH+UJX8/lRjVgd3cGDiH4q+YBuH0Fa3hpWSszMA1C7uoiPJfJKnLZ+uk+RsksNJTiS5kkSSW0m+tuSvlvOh49fkWssl95PMNpJnyjid5GFL/l6SyVFA1cW6usvK61jAK8yUqMrZO6y22D+J8wM8298qdLcbHX9LcrBHN6danEpxcCRO1bjU4FzD5x69rONtY/0R9/CgODaUJnAGRxp7K33WLmEfHuEFvg8L04S63LXXL9TyqCC6VeNCY/0Jz//XZf2qSnIacziHkzg2ViL8ABDnNNdpL/l3AAAAAElFTkSuQmCC", 37, 15}, ["SAWED OFF"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAABUElEQVR4nMXUsUocURTG8d/sJmgSCdjYqNgFwS5WEdKIYCGSerGxFfIOlnmAhLRrZSBYiKUPIEJCsBdhwWZ3s8JqCNkIyaS4MzBZTYaddZ0/XIY5994z3zf33BPFcawA01jGKtbwFJUiie6KBwOs3RbET2F+NHKKk2dkDhvCn1/Ek5ErGowz7PFvI4/xBq8NVzIxoiH2p3xDC18zo4l9fOZ2I0uo41lO8iZOko9kucRvdAUj6XPxP7m+o52I7SRCW0msg16OlhtGtvAW1b54D5/wKBnv8REP8SMRWypRpms9xxHGMvM/cYh3aOCXUGqnmTWzOB+10DzSE5nAB3+b6GAdX3AtlFwDF0LnamMymSud9ETq2Oybe4WDzPs4ZoTLWxHq/kq4K6UTxXFcw25f/BgvStBTmAoWhA6RZef+pQxHWlpVrKCGl0Kr7JYna3D+AF43ThjDJPReAAAAAElFTkSuQmCC", 50, 12}, ["SCAR HAMR"] = {"iVBORw0KGgoAAAANSUhEUgAAADAAAAAPCAYAAACiLkz/AAABwUlEQVR4nLXWu2tUQRTH8U/i3WwiRMEougrWYiHYSFCxUCsrCyEW+hdY+ehFwUoUtLGzUiGIYKMQ0qS3igYUtQyCSrYJPsDIsZir3r3srvfuul8YmJkz58xv3iMiDJjORkRzCP9e6Xmd9uMG5xh2DuHfi591Gmc1g2/FKezFUbzANWzUjNONKSxgtY7TWETM5k5fCvVbcByHsQs70JJmvPkfxPbiEc7gBq5XcchwCZvwDuewZ1TqKjCDCZzH6y72fXiT579jMsMnXBixsDa2VWjXwGPpHJzsYj+Np3n+Gz7/HsAo+YhbGM877UUDz/yd4W5cwXqxItO59+EiVjCJ3X2CNaW9Op2XA1+lw1i83e7gZp84dVgvV2TYXCgv5R1GxYBzOIJXuIsH0i31pNBmagChlRnH/jy/gcuqiz+IQ3n+PV5KK1beJstDauxPRKxE4l6NF3AiIpZzv3ZENAq2VnSyMILX+k/KcF+6kh7WGPdVHJBWaw4/CrbyuZmVbqD24NPcmwy3a/o0JZGreIvFkv1EqTwtDXZpAH3/ZCyi6pbvygzWSnUtfCiU17B9mE76UfcvVKYsns7P2CLmh+yjL78Afadxcy8/WcUAAAAASUVORK5CYII=", 48, 15}, ["SCAR PDW"] = {"iVBORw0KGgoAAAANSUhEUgAAACEAAAAPCAYAAABqQqYpAAABlklEQVR4nLXVu2tVQRAG8N+VaLgIEREVCx8xiq0g9ilSWYqWYiUINpJK8F8QxFYE0VYsBbUJEhQLwVgJAb2FYBExRMVXfHwW95xkvSbk3AN+MOzuzM63c2Z29kiihZxp6VfLxSRT9XqTdjjd0q/Ez3oy0tBhD6ZwCF9wAg9wt8XhixhFb0WTPr4lWazkUpWmg/k/eJtkNslMkgNJVjIxWgmcwjg6eFaNNXZiX4uvL9HFbhzGWbxYqxxdbK/mvUI/hmMtDn2DvcX6Nx5hDltxvJMkxYavOI/ba5BtxvKQATzGFeyvuOsgbpSbyiC+4ykm1yEcwU3M4gimC9IOPulna9Dn14ahVpdlIcnEEH2+q7hol5Ocq/T3Cv2PJNua8NXvxB282jDiVVyoxs9YwnP9y7xU7OnhQyO2KuprQ2ThaJLlyu/6gG26yMRSU876PdjR0GFLkrnqkPkkYwP2k/kb403L8RrvG5ZhAvNYwFV8HLA/Qdltk03L0UY6Sbrr2F4WmbjVhK/pv+Of2K32/SAe4h1mcL8J2R+bdL9CKghLtgAAAABJRU5ErkJggg==", 33, 15}, ["SCAR SSR"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABYUlEQVR4nMXUPWhVQRAF4O89ryIEg+KDCApiY6eNYmNhChtTiGIhCKK1tZ2lpEgXxELETmwtxcJSsLEMgvaCPwHjT0TQ5FjcDVzk5b57JdEDwy675+zs7MyOJHra9b/Q9LH5JKO+ukp37MIULmMJr7Be9oZbOD+EQY97gUGSo/iBWy28YA+u9HXQgk94joeNtRuYxSU87nNYhUWca+G8xwXc7nNwB+zDafUjbuBIGa/i1Ca6dXzGbhzAClYqvGtx9g3X8KGIumINT7Df5HI6WPgDvC32FC8n+Kiwt2hVWG4hf8VxHMYq7qtreK7BWVX/nSZm1WXz75DkTsbjUZJqTIc4U/a/JDmfZEeSBw3dWpKT29zZxnatY3iDiyW2oTpdH/Hrj7h3YqHM76rTP43vDc5Pk8ti65HkWZJ7HSNfKK/+IslMY32U5ETDhv8jI2c7xjyFEV7jprqbbWBZ+1/bdvwGWBAPCE3D7DEAAAAASUVORK5CYII=", 50, 10}, ["SCAR-H"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABn0lEQVR4nLXWy6uNURgG8J/dcok4TlFy6nAyEAMyMZBLRjIgAwORDOQfMDFSyh9AiZm5YkqSsZJ/QGfiILl0ctsR59hnGayl9t59e5/v5qm33rXW+6yeZ31va31ijGrGZIzxVAP+qNgZY7xVlddRHzM40IA/DotVCaFC7XpM4wT2YRMOYz9eYkWOUVgas/aPuxL38K6CLiQj5/AT3b75dTiEg5jKoteM2ONIjrawBzvQw82ypIDj2Iw5HMO2FkXVQcQELmBLwfqMZLIr6f+GhYAP0lf533iEo/hlsAUX8SfnAQ9wH/N4XbDPbqzC91wf0Qv4NFT4W2q1jnQyRejhLbaXNPEEF6VDa4qnRZMBC33jJanfnxtvJOIr7uAMNuAxZvP8NYOn/lk7JkYiGOzDu5IJkqkvy/CnMJnz63iB1biCtX11s42VLoMO9uZ8HlcrcM/iZM4vSf08IV3Tb4Zq5+pLLIcgGeniMj6W5E3jds6f4aHB1um1JbAsArbW4N3ARukGOo/3LWqqhSovez9OY5f0qr8qWP8xNG7yK1QKfwGUvd7WolZqhgAAAABJRU5ErkJggg==", 50, 13}, ["SCAR-L"] = {"iVBORw0KGgoAAAANSUhEUgAAAC4AAAAPCAYAAACbSf2kAAABqklEQVR4nMXUz4uNYRQH8M+9c2nUqAmNKUwoC2LNcoosbaSkLFDKTrIVZSt7Cysb6f4DGhvJgpqyUCSKhs0ls/FjTDOOxfvI4/KO973v3HzrWbznfL9P33Oe8x4RYcBzsoG27FyPiF1VuG2D41gD7UpYqkLq1Lx0Cw5hEgfxAN2ad5Shh7V4XYXciogDmMOXLL4xGduPzdmZVL/YqniOz5jH6eSpFK2I6GId3uJoMv0/MIdlbMeF5CfHuKJ5b7DQUTzRuSGbeojWPzif8EIxLuuxsy8/jglso3j23qpa/BP3cA27sbgC7yNuV720o5irn/iOE3iJDdhRovuKKVxOZkbxLuWm+rhHEv9uVVOVEBFX4he6NXbuWKa7FBGnUvxOFl+KiE1D2Pfa2JN18WKNms9nuvd4opjL+YzTw4dGnS1DRDxL3blao+J9EfEt6W715c5mHV+MiPYwOi4izkTE8YgYrShaExGzydirv+gOx+/YOwzjHdys+UhbMYsx3MBCX/6RYh+PpO9pPB18JkrQsPKRkvjjrON1fvhaHW+C5ZL4jGJN3rfaazDhB3/ZCvQhZGtMAAAAAElFTkSuQmCC", 46, 15}, ["SERBU SHOTGUN"] = {"iVBORw0KGgoAAAANSUhEUgAAACUAAAAPCAYAAABjqQZTAAABa0lEQVR4nMXVsUpcQRTG8d/qriIhIb6AiFpIXiBFqqQ0YOFaBLSIrV1IEyzS2Nulj2lShVQKWogvIFgoKlFIwIAIKYIgJGomxZ2L191xV1x294NTzJk5M/975py5pRCCJirhGaZQxSAuo1XQi7/4h/5C3CccN9s8eWACqoQneICXmMXIfTa/r8o14xFMYAZPI2A79QuH8awz7GFbCCG3UgjhQwjhKnRP+yGEG9dXwZ8OZKeRDjBevL4LLON1YvEmPuJnHFcxJyv+/Zq1g9F+4FsDgFf4jAWsy5rknJs1NYAXieDfeCvrsJ3o28ERVhsc2kzf45672CpOFKHeYygRvILHGHPd8o+w1AIQDKMPo7UTOdQbvEsErmFelq2NFiHurDKmpb96FZO46hRMrh5Z0aa0rAtAZFDPE/6v0dqp/C2qe4J6cFLjO5W1+0WboXKYuv9cGV/wsOBblBV2u3VrpsoRYrEDELepLlP/AXEf0pvsdGTCAAAAAElFTkSuQmCC", 37, 15}, ["SFG 50"] = {"iVBORw0KGgoAAAANSUhEUgAAACUAAAAPCAYAAABjqQZTAAABpklEQVR4nMXUO2tVQRwE8N+9RCW+go0EG42IoJggCGJlo42lKIJgZRG/g7WFrU2QdBYKCvkKolWKIPgmiiCIgsYHJhqieTgWeySHkMTc61UH/rB79szu7OzuSOIf1ekUHP7dv106jxvowiw+YBxT2FWNH0Q/FrAdB7C34sClRpJOi/qGDX/AH/wbTl1FN77gLY5iBM+wWXHtHD7jOQawH+vRwJtGkuPVZKOY7rDAflypRDbxSXFyKyZwdjlSI4vn9xRPOiyqR7kzG6v+NKI40o2XuI0XeIBNmK2L+t84hm1I/U79qLWbVb+5hBg8Ul7NDPrWsNgEvq4yPorXinsL+C6LGKlVktxN8r5qzyW5nmQgyY4k40l6ktzP6hhLsqfVTKuLulWrX5hJMpRkd420LsnJqr0zybsVBL1K0tuqoKWiblaVJJNJLq9x0tGK8zDJYO37vnYEZUmin1Gy4yKGMLmG+3IeRzCvvKJ5HMKckkftoXZMg0lOtLCjviRTFf9Ou66s5NSwEmjDLeyliWvYogTiqbZdWQZduNAGrxePlWS+h4+dFPUTOhukC3UWCCwAAAAASUVORK5CYII=", 37, 15}, ["SKORPION"] = {"iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAABlklEQVR4nK3T32vOURwH8Nfz9PjVYhsz2YW4kJpyQ24oRSm5IJJ7Lmn8BWp/AuVGspuVWlzwD7g1saQIe8wdhYsRGxveLr7f6buHPdvkXafOOe/P+bzP5/05p5bkME6jH1OYRTceYxpf0Yk6Pld4+IQVOIoxNHEDr0peAycwjuOYxFbUsNfy8BSvcRVHsBP9tSTj5Y02LDPhQpjGfaxGVx2X8Og/JYe3GMYQxuq4idF/SDSFAfRiPToU1g7jFkbQbKAHp1oOf1c0cw2+KHo1g7Ulfx7X8W0B4W6FVSQ5mT9xL8lAkt4kfUm2JRms8GeTWGBsTHI5yZUkmxu4g4fYU7nFT7zAu3Ldh+cVflcb697jwtyiXtrR/ItFz0qLehA8qPAH2gjMR5KVSSYr5Y8m6UjSWdqzqlL+RCVuRxubfo869it+6hyGFI39iDfmN3KkMj+3lALqONiyN9Mm/hp+lPMz2LQUgd0te11t4idwu5x3YHApAtuXIUDx82fxAXcXE6glOYYtOIR1uIgni5zbh5eKJ9kWvwDzG+/7GHEBdAAAAABJRU5ErkJggg==", 24, 15}, ["SKS"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABgklEQVR4nL3UOWtUURgG4GeSIRFX0ESIEYKgIAjaxs4irQiKtYWW9v4GO/+AiJ2FIKQLWhg7BSEIiqQQmyioEEHRmMXX4h7JNcxM7iAzL3yc5duXc1pJ9IE9ONNQ9gDWcB6jOIzpGr+Fb1jGhy42XuLdLn7u41q7YVBj2IezeNpQB9YRjOMtNnFIFfhJvMINPOugO44V3N0lrhnMtZK8x1YXwdWynsLBPhLoB79wp8P9SPH5tYfuDE5joY0j2FCNwt8ObRUDT8q5jaOYKufv+Kkajf2F96XwJmqOPquqv9whiDW8KTTfI9hmSLKU5HGS1WzjdRI7aCzJo8KfT3Kl3B8v694kE0k2anZud7AzEBrBOcyp2vgQN3G9Q87rWCz7T1jCpKoz8EPVlRc1nUv/XemmSPI7yYMkJxpkvlgqfbmHzK38i9lhdESSYw2Fp7I9fpM95KaTbNYSuTes0er2h+/ER9Vjv6h6xN2wgoXaeVb1TQ4WA6rQhSTPk1xNMjqMjvwBBYyqLfSB7OsAAAAASUVORK5CYII=", 50, 10}, ["SL-8"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB3ElEQVR4nMXWy4uPYRQH8M9vZhiNS64xIbGQrYWdlQWbsWQlGitlx5pi5w9gJVtSJHJdKUlsKLeiiKQRi5lcG8bX4n0nPz/v7zc/84Zvnd73ec45z/c5zznPpZHENDEXO/AY16c7yBRYh1tYiI4T7atBcqckeoMb6ME4FjfZfGr6LkKjqT3QBccKzMcQLnQybJQZmYUvTf3zm0hb8QHbcQIzK/SP8Ln8n8BJzMBSfCv7j2IDzuAl3uI9PpYyWvJMtuE+LnUK5DA2+7U89pXkVbiL9e0G7IBRP8tjDP0Y/AP/F9jUTtlI8grLpzGx/4F7eFel6FOk9l8E8hgPurQdUJRnFHtvHtbgCE5VeiS5lu6xM8mCUrYk+Vr2jyV5mORcks8tPhNJdiXpSaKGrErS204vyZUug5hIMqfJuTfJ6yTfkwwlWVn2j7T4na8ZQFfSp/2mhrOKk2UmhhU1+rzUDZZyHA+xTHHS7cF+bCzt+rssp3pIcrNNBg5URL41RQlNYjzJ6gq7Y002I/8iI40kB/2+2W8r7okq9CqycwhXsbvCZrjFfy2e1lvyKVBjFWYnWdJGt6Ylu3v/dkZ6aqzBR8WNXIVneNLU3laDpyvUeWtNhYuKV8BpXP6LPOAHvHrfSg5u5VkAAAAASUVORK5CYII=", 50, 14}, ["SLEDGE HAMMER"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAAAg0lEQVR4nN3UMQrCUBCE4S8xRQQbG88gBIxXzpE8h2KVIij40qRInoiFSnz5u2GWZRdmNwshSJADTiN9zeea5EPKWKe6yBMFapxxwW3ecV6ywQ7bQe8jP8/C747kjvYLfUqs3xUtKlpH6UWrQjPyu8L0jf0rrWlMV5H/WEy0Ul2ki3UPNEUZDinIJnkAAAAASUVORK5CYII=", 50, 10}, ["SPAS-12"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAABsElEQVR4nM3Wv29OURjA8c+9bkUUlTZq0DYsGEQkYmPBQBphE6PB4A8wicFgEpEY+AcMto4kGKwGiRgIEVRCIhHeolI/cg3PaXLcVnvf0ni/yc055znnPuf5cc5zb1HXtRYMYzw9w3iMGjsxkeRvcCKt/4JvDR23cbzNZkuhWmBulzDwCPagTPKX+CQc2YCtqV2BH3iI3ehv6Fvzj2xeiTO4kAuLlJF+DGFHMnwco/MomcKzhmwQW/6waY2n+IzvqW3DvbS+SYmNOI2LskQUdV2P4YqI4kjLjZabacwssmatzJEKB3F0GY1aCh/QQR/eWziTE7ha4WsXG7xrKB3E+tSfSfN9WIfVXehtsgmTomB8NLdw5EwTR2sI13Eom3yOS7iR2pMiSiOzLyYqURQOiPswlRw5jP14gSI9P0VBIC7saDYmCsVk6tfYh7eL+xwUWfl9hbHUv4nzuI+zGMAt3G2pdxte+93pJgPYKy5wBw+0LwZzmHXkmDhrRFS3i6OxCk9ENHuaShh8OZOd00VKe4VSGL45jTu49t+s+QtKnMrGd8z/Iep5SjzKxq1+vHqRXyITY0mbtafdAAAAAElFTkSuQmCC", 50, 13}, ["SR-3M"] = {"iVBORw0KGgoAAAANSUhEUgAAACgAAAAPCAYAAACWV43jAAACMElEQVR4nL3WwYtVVRwH8M+b3pRlMhJikSJOk9BGCyqqjTBh5DJctAna9gfkMgKxNpIrdy4EoSBa5SYrFKrFqKCCpjAUgSSCzgxB4TTjgPNtcc+budx5781zHvSFy/2d3/mec7/nnN/vd64k/qfn4yTfJpkYgPt9x24bDk/hEP7GdizgIcbwFzZhFLN4B+/iDZzuM+f9Mg60kmxU3Gb8gWcH5C/gyQG5c/gUv21E4DhexXHsetTBA2IZl/GwleQSHisdS5gvIuYwgy14pjzwHBsKjWWM1NpLqhOYw108wAdoFf9bmG1jB14rIp8og7/BFZzCP6rjPIh9eK+HwBs4iWnsxyeN/nnVYi/gS3ytitM6XlbF7EequCXJz40M2p5kOsmxJM8nOVHah5PsT7IvybYku5OczSrOJXkpydNJ3s5aHClz98vehcId7fhGVpSuYgYX8T5+ws2yc1/gF1wvx3ILL5Yxi2Xn7mEr/rU2U3eUuXthp9UTnFjxJrleW8HWJEeT3Csr3tRntbtru/NVo+/xJHuSLNY4P66ze+M17t56HdyDz8r7dVUcTajqUT8cqNk3Gn1L+B1TmCy+F9aZryvaRdwdnMeHqmwaBBM1+9cenJsNgWOqot4NrW52G58PKKiJ5Zp9uwfnauOjb+KHHtx0s4e56k6pysYWVQnphqlGe1JvgQ+s1srFjnOYq25Q3FZlKFzDK324u1QCb3Ucw/4sDIIzqgQ8i+/W4f7ZdPwH4dnnxjgQtLwAAAAASUVORK5CYII=", 40, 15}, ["STEVENS DB"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABAElEQVR4nNXUuUpFMRDG8d/hxqUSQQSxtFK0sBDfQCx8CQsLn8DeJ/CCjY2dtWBhY2+njyCC4L4X1xWNxYlwcUHPuYv4h5DJZGbyDQnJYoxKMolhTCU7lC3UBEKZw6cxjxl0NCjgEuvYabCO7Isb6UN/3RhADzawgNkU94yzJOQw+Wp4QiXlvPOI8xR/muyLVKMpZDHGOUxgFGPo/SFnD4vYTcJu0Zma+DOyGOMDun4Zf4cRHMgbruAV1y1RV4Agf6eD3+y/YDPN49iWNwE3LdZWiIAjnxupYRVV7Cdfhu62KStIwHHd+gTLWMHVh9iI+zbpKkzAFoawhDX5D/PveAOhkDzBunVvSAAAAABJRU5ErkJggg==", 50, 9}, ["STEYR SCOUT"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABPklEQVR4nL3UTUtXQRTH8c/FW6grlQSNwP+mjdTCTYsWvQBB8E0IrnwvbVu1THAZBb4DF7WqFtEmKhLEh/AhSuvXYiYwyf7Xh/zCcC8zc875nTNzpkniggzgNm7iFl7iU11rcB9D+Invdf5atTvCYZ0bqt8ZvMBrvKt7+tKihxvYqcFOcogPp9hfx1tMdQl2DnaxeoquP0nyJP35nGQpyUASSXpJVpK872B7UdaTDNe4fxtNktEWYx0qM4GHWMArzGOwrh1hCz8w2a9uysnDl1rp3epjTzn9A3xTruF+9d308bndYqRDIr+5U0fwGNtKYsvKHb+HrzWp/Sp685j4/0aL0XPYLeJR/e9hWqnss8uRdXaaJBtKs8Nz5cU53lx7SjM/wDieYu4qRXahxRvcxRpm/7G3UZ7Zj1eg68z8AnHM/AdN6FVoAAAAAElFTkSuQmCC", 50, 8}, ["STICK GRENADE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAAAlUlEQVR4nN3VTQ5BMRSG4edKzcTE1MwQWxFbuCuUWAGbEBOxDULUoBWGJW403kl/0q85X9tz2sQYVcoSLc4Fa/chd/q4ohZXk9wuSgUBG8wk5yfccMQuj7tgjCmGL3MNRtKhBmU38RTHit/WO/R+HcC3+BsjAVv15sigdMMmp0iNVWuOVangUX4vnYTzOQfJyFrhP3IH6RImezn8IfwAAAAASUVORK5CYII=", 50, 9}, ["STREITER"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAADCAYAAADRGVy5AAAAf0lEQVR4nM3QMQ5BYRSE0XMlGlahVIhGp7AMicJ2rEGlsQeNNdgHUT1eCImr+AsUEtWLr5tkMpmZyMwV5l4k4k0HDqh9csMWPezRwQNXjNHWDBUWkZkDTHD+YmzhiClmWGKEIU4NFIWLctBd6VkrAzZYo4rM/DWsix36yvN/xRNzkSJRssjMKwAAAABJRU5ErkJggg==", 50, 3}, ["STYLIS BRUSH"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAADCAYAAADRGVy5AAAAlUlEQVR4nKXSTQrCMBCG4adaf0AQqUtv4MITufQuXsiDeABXLgXrpohgS1w0BYUW1L4wTCYZMt9MkoQQRCbIsIx+7H8CjrhihDUWyONejscP9+2wxyXGczxRRT9IcY7CZz2Ed1FgirTl7O6zsWZ9a8ndqIdTIlE30MQlVkkIYevzJRprK96H6k1wgWFH3Uz9O77lhMMLwL0nKYwtr4kAAAAASUVORK5CYII=", 50, 3}, ["SVK12E"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAMCAYAAAAgT+5sAAAB2ElEQVR4nLXUz4tNYRgH8M8dd0T5kR9l0k2xsUFpLNiRKcVGahb+grG0uwv/gS1LCzZENuxETSxGIhkWbDBK8mP8aOZeEuOxeM/pHsfBvebeb729532e57zv831+1SJCH7AT97EXN/txYa+o92g/jia+4hum8AN5NA7hAL6jge3YjBra2LR4l6vRK5EGRgvn3ViQHIdjGMaSbC+ifO4reiXyGZfxBk+wKlvns30OE5jGSykjWyViG7FDh3SONl50+f44VuNMWVHHmuy7gaUl/YxUOrJ9HPsrHmh26ch0hewT3ma+tDCPizhVYbsBX6ourkvRWNmlI3P4+AfdCv9XPrM4qxOwtTgqZWq+ZLtPIrK+IHuF2boUjZxISI28LLvkeaYn9cIenQzm8paUzSKJBUxmsmL5Vo3IdwUS8AFXcBB3S7ZtjGBLQVbDsIiYioTJiGhGxK6IGIuIdRGhtC5EBxMRcTiTX49f0ar4d6ArzwjcwDm8rohaMdKk8prB+yw6VzFWsFueZaLc2APDkDSBcvyNRF1KN9zGNdzDM5yWmrZ470jfvOwCQzguNdjJf9iO6vTHg5Iu8LQk27ZI33pCXZoClSOthMc4gSO4VaG/hDt4iEd+JztQ/AR21QEhh3ph1gAAAABJRU5ErkJggg==", 50, 12}, ["TACTICAL SPATULA"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAALCAYAAAA9St7UAAABEklEQVR4nM2UIUtDURiGn3tdmwpb9F+MBcFgENP8B6bJgliMVsEg2FwXxGAUNgWzCGsyi8F1xeDAPEGfhSsynWI491x84JTvHN6P93znPahEWhtqorbVirqt1tVltaVW1UN1Rh0YxkksE5sfDc7VJ7Wn3qn36pX6rJ6pr+qpOgowMVBnE5WcWQM6QClv4R8YAUtAvwQsAgvABbAKzAUIzwNtijEBsAP0AVAP1Jp6rL4HjLhoumYZRCUFXoBb4AZICrrJUB6AFvCZixSoADWgPrnxj3kD1oHhZDFRY2SkHKDxF7vA3vdijF+rAXSJE/hrYIVsKl9IIzS7BLYi6A7JntSUCYhjBOAI2M9RT6AJPP52YAxkSz5bbrNGwQAAAABJRU5ErkJggg==", 50, 11}, ["TANZANITE BLADE-ALT"] = {"iVBORw0KGgoAAAANSUhEUgAAAA4AAAAPCAYAAADUFP50AAAA3ElEQVR4nI3Pr0pEQRTH8YNJQYNYLItpg6CIPoBgEowW9xXsvoDdps0XEJNi9CX8gwhbZDEYbxJsH8u5ODvuZe8XDsww5zvn/ALRsxZxK+krLeNSQR9pBeemGc+TlnBWSa9YnyeeVtITthFl0xB7xX1USS/Yb9/bpgFu8IgtnKAppHccldu0h4Oi6QGT4j7BcR2jnljT5PR/+euM95U4miUhFuKPjYjYjGkOo4v8YRfjnHKB5zz/4Kpr1Td8ZOM11nLtr6xhl9hyh9XicZDVmXEnt/6OiKZI8Zk1k18tZmJJn30IFwAAAABJRU5ErkJggg==", 14, 15}, ["TANZANITE BLADE"] = {"iVBORw0KGgoAAAANSUhEUgAAACEAAAAPCAYAAABqQqYpAAABRElEQVR4nM2UTSvEURTGfzNMmoVmYWWHFbJQklJeNpKVjbIijRIbKwv5DMrnICu7YYG1svK6kZHERkmZovGzmP80L6W5i5nhqdM5t845Pfee5x5UAiylZtQxdU+dDawLslZqIwVkgBFgCogBZwF1wYgH5PQAvVEcA3LASbNJXFB58yQwX08Sxbn0qwu/zGxU/bSED7VHnVOH1HF1Ru1TF9VOdV1tVzfVNnVLTaobaoe6EvVApUjgWc2r6ag4rSbUVbVFPbAST+qX+qq+qzn1JerxGOU81PBZtbtI4riseV69juLLKt8I3KtdMXUQOKcgur/AaRzYKSPwDdxE8VWVbwSywBIWBFWtiWULmlizSZr4F7+jliXUo6qX2A6oC7aQZTUADJedc8BuPYURQuKOklilsDEnm03iDZgGDoEJYB+4rSeJH3i4Mu/3nJ3cAAAAAElFTkSuQmCC", 33, 15}, ["TANZANITE PICK-ALT"] = {"iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAA5klEQVR4nJWRMUpDQRCGv1zCE1ilSSOYPq0oCM8DeA8rz5BKvEkuIA/SpIwWQhqbR0Ah6T6beTiu+546MDDD7Lf/vzsTlYFYAh1wN3QANedK7SKP6iHqh+IcKpNCuQXOKhofwFvUr8CipjxTnxyP5yFlgDlwkvor4Db1L8BpTbnMRl0Xyu/9H4yBN2obwFp9TBd0Y3CTwDb6ywQf1PsaeJ2stuGAAj6qyxK8UDfJapNmGf5he6FuY7gJB3k+92uN3+BzdReDbTioPWkWT1n18FTdB7gLB7+tkB7uYx8O/gSW8PQ/oMonaJhuTL57J60AAAAASUVORK5CYII=", 15, 15}, ["TANZANITE PICK"] = {"iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAAA40lEQVR4nK3TMUpDYRAE4O/FB4EgFuIJBEVBUEirlnoGT+CVtBObdDZaxFpvoJ1oJWJlIWIjOBZ5D2JI8T/IwMI//8CyO8NKorCGSa6TDGa10gZLSZ4ywTjJWpLdVu8pwy8emvcxnnHaiqVNKnxN8RUMmv/idSSpk1zlP066eNJWP8lt0+AnyV4SNTZwjje8Ygt9PGIV63jBB3aQZqUaYxxUSe6wX+jNPNxXSTZx1mGSyiQheMfhQjwpjbj1YISjKb6N4nR6SS5n4r1IUnWZJFie4p/41ia1iNvpYuowyU3mXPEftSjMQJ/z9ZcAAAAASUVORK5CYII=", 17, 15}, ["TAR-21"] = {"iVBORw0KGgoAAAANSUhEUgAAACcAAAAPCAYAAABnXNZuAAAB9ElEQVR4nK2WTWsUQRCGn9kPhCgRTNQoiAgGzGEPBhERPAfEH6DgzT/hRW+C/oTgSRBFkOBB0IOBHAUVA3tYBDUHUWNEWTWGDSZ5PEwFx2V2Zz/yQlPdVdVdL2/1NJOo9IkaUO93Uw5OAq+7JVT6PHAE2B92HagCAglQipzNsKXwt6+3Yk8NWIx5LhJ1EpgH9hQQ2wTGogCk6p0IgnnYAr4Cv3Nio8A4MAm87VSwAtwBjhQQy0Mt7BdgCWiRqgkwQ6rUQaAZBH8BH0mVOgrsA451I5eoLWDXAOS28Qf4AWzwr8UTPe5dBtbaOZESJ1GbwN4hyA2DU8D7HH8J0ra26J/cQ2A2s54GbsW8TtrqaUKBDvgAvOpWZJtcP1gF7gHPMr7dYdeC1AZwGnhOqsxLYAVoAN+BMnC8sJLa8H+8U5sx/6SuZ2J19Zw6pRKjor6J+BU1Cf+U+kgtZ3L7GqiLmeINdUI9oN5Ux9S5TPxFziHnI7YcRFGr6pM4ayBiKhXSuzIO/AQeA99C1KthVzJCH84R/3LYB9FOgOvAbdKvcWBUgPsFOUtt5A4BnzO+EdIH926sz0TOtWGIAfQi79m2O3mpLV5WL6o31Bl1Xh0dpp3ZO1c0qupqhtxsh7wk7t+FnSCmktjbX8kc6XOxADyl4G9ip/AXghhMT6fnhg4AAAAASUVORK5CYII=", 39, 15}, ["TEC-9"] = {"iVBORw0KGgoAAAANSUhEUgAAABsAAAAPCAYAAAAVk7TYAAABLElEQVR4nLXUvy5EURAG8N+yJIhGgo7YSkOCR1BIFGg0Qq33AuIF1AqtSiFR2HcgKiQKjYRi240/iZUdzb3J3Ws37rK+ZJKZc7453zkzk1OKCJjCAUa0xweeMvE4ZnCJITTw2Savgn7s47aUiO3iqINQL/CCal8SrP2jEAygUk6Cxh8Pe8VF4g9qbUcdx6imYpdY/6XQAzZw9yMzIlI7jVbUI2I4s59aM8fbacNpa30Z3dHcPc7wVuBlzaIlSMUmsJzbOyl6SFGkPdvK+FDDGDZ7qpbU8yrXh8MOdR+KiL2IqGW4K0V7JiJm4zuWOiSUEsHHDHehmwHZzj32HtedCoF3WgarqwFZza31fDBSlLGIacxjDucF8koZP4qKpR9xN+jHMyaTeB43RRK/AHQWNXJ8THmUAAAAAElFTkSuQmCC", 27, 15}, ["TOMAHAWK"] = {"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAPCAYAAADzun+cAAABBUlEQVR4nL3VTyuEURTH8c+MZ6LGiMlKkmIhmXdgKbGQBcnCSnk1rL0FC3kTY6GsLa2lNJspGgzH4t5iMTWJeX51O+d26nzvuef+qUSEErWHK6iUDL7HOh6rJUKbWMIRlAluZbtVNriZ7Srl9ngWT9mvFxjDGZZRQYEPvKOW42/ZyvF2TtLAGm6GQMdx/GPeqETEJfb/WM1vtVhIq21hTqq4ik/0sz+BF6niAoFrdDEp9ex2CKiGTXRyvtcCPaz8az2DtY0TzOC5wHkJUJjHg7STvbKu0w5OMS0dyL6IGNWoR8RBRLTjW52I6EbE1CjBGxFxF4O1O+oHpCqd5kPpc1iQenzxBbos7//aspntAAAAAElFTkSuQmCC", 30, 15}, ["TOMMY GUN"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAANCAYAAADrEz3JAAACJUlEQVR4nMXVO2iUQRAH8F9CIDFGjBEVbMTCF4gWPgorDUIQGysRtLGRFDYKEhAEK1EQIoKCiNgIIgoWioXRWFlE0NiIT3yALyQEY2KMmjgW3164HF8ud2fhHwZmd3Zm57WzdRGhRvRhY+IDK/ASHWjFlVoN14DDdTUGchRHUF+09wUjaE77I1XafIAx/Ek0kYgsURMYx+8c3c6GKi8roM3UIGBhouJ1HkaKnGlGY+JvYFQWxHjam4V5+CwLckI+LlUSSBs2YzVuYS2W55wbw0fMxqIy9prQkvhuPEv8CVlLDuAmdqR1AaNYV3R+KiKilOZExPaIOBkRjyJiIirDxaRfFxEXcuSfIuJpyV5H0b19EXE8Iuam9cGSs505vk5Sg6x8m9COLdiAalruA3rQVcgNfpac2Sar1gDeTWN/K4YT34bdJfK75ZxowBMsrdRrfMVt3EMvXpTIF2NP0foVfmEIq/AGy3LsFoJoTbbXpPV77JIlbHpExPMKW6c/InZGRGO5EkfE5SKd1xHRUiLvnqa1CnSqSD4aEQdmuG+ytX7MUIFhHMJ52UQph/UpewV0qX4MLynkWPYXdVeiVC97I9OhV1bic2YOgmw8Fj6mh7hfiRMlOCObgI+xt1KleszP2R/CftkDfFuFE/3Yh2+4Lnvg1eIOVuKsaoZOTB2v3yPidEQsqKQvy1BTojzZsYgYTNT+j/dMUl1E9KSYruEqBmvI4n/HXywSWo5LRNnyAAAAAElFTkSuQmCC", 50, 13}, ["TOY GUN"] = {"iVBORw0KGgoAAAANSUhEUgAAACAAAAAPCAYAAACFgM0XAAABpklEQVR4nL2VvUpcURSFv3EUB3SCNmqllTYW5g1CClstYhNEBoKFVtpEA5oHkITkKawstEmXwgSClURFAwmMQgIWEiJG0IyKn8U9g3fM9Tri6IIDh3X32T/r7H0uKjVYPepU2OfVZ9WevWvgZnVe/aOeqDvqZ7XzvhPIqWPqhnqg7qo/vURBzaqP1ZlaJpBXX6o/QuDTWNDvVuKfeh72k7VIIBMLsuz/OFV/J/BlvA+qVPit42bUA8PAOtATuCxwlmD3K8XPJLAINFewKRXn1HF1+5pqd65wJ+pmigJlLMeVyKgAXUB3yKkb6AMGgY6ESgQywCfgCVAC/gYFWm/UM8IrYC6uwEIVme8azXqXuqUeqmtGzWjYf1Rn1dEYn4SS2mdowg51NcW4aDRyOS+vZ+SKzZ7aojaog8GmYPRGlK7xu642on5NMXhuQueGQB/UYbXJqGLUdrVXbVP7AzedUtxcRn0BDAHvgG/AMbBf5V2WkQeehn4QOARWwre64Hsi4dxRuQnvG1mgSNTscby967/gNmsgJv25+sbYGD4UloBHwGvgC8AFDJdenNPvBQ8AAAAASUVORK5CYII=", 32, 15}, ["TRENCH KNIFE"] = {"iVBORw0KGgoAAAANSUhEUgAAACwAAAAPCAYAAACfvC2ZAAABoUlEQVR4nMXVvWtUQRTG4WcXDUSM6dQQKxEFK9FC0ogGRawtLARB0CJgs0Uq/wFBsLHQzo8igoWFpaKFjVVSiChaxELED9AgSr5QX4u7C7MGdtXd1R8M3JeZOfe9Z86cW0uiA1OYwBCu4gXOYwMe4XqnzYNg3S96L85iBTPYjlOo4xaCBt5iGkfxGLvwpLlvsCRpja1JbiYZTjKe5HWSk8X8TJKLhd6SZC7JjSRTSW4n2VnMD2TUC++HcA1LeIO7WC3mv2G20BuxgNO4ojqZc4NMLu0lMYpaoZ9rN/wdc4Xeg0v40dSfMdx/i+2UGR7F/kK/0/4Bm/Gl0AfxrNDrsanP/tZQZngS+zCvymYDixjDbhzDHVzGDpzBuOpyruDEvzBca7a1STzoQ7yXqm5ywN+bX8Jy8/kjnqpK8SGWa0kuNF8w0ZvXgfMejbqqNkf+s5nfYQRjrZI4jPt9CPoK93BEdWE7/ka7sICvqm41q2qzH1qGh7CtJ6vVSU3jeI9xOtLqEquq7tAL8/jUY4yu1Lsv+SNq3Zf0Rr8NL/Y53hp+AosL2uQMlUOhAAAAAElFTkSuQmCC", 44, 15}, ["TRENCH MACE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAABZ0lEQVR4nN2WMUvEQBCFv7sEDhuxtRHBzsI7uEpIp4WlgnZ2ooWFxWHvPxDxF4idCoI/wsZCgyDnoaWlYKGggnfPYvdgEzYa8DaFD5bkvZ3ZmWFnN0ESFYwFSc2c1snxuqSdnLYiabpMjDrVYA5o5bQ1YMzhM0BSws+Lqgpp2jFEZPnsDzZFmhfxX7L7BVPAkn1vAW/AluUNzG6sA22rJcCkYwOm0HFHOwNefMFqkkaUd3Zd4AHTLqPEBbDsm4iBTWAeGJDdob59Ro72hWnHYUvK2kWY5LHrDBh9EQATRRM1BdqSQHgFroB7TKt+Aj2gW9VhD44Yc5BCtNZGgHyvgUXfxL857KEKgez1u43p6WPLG8AhcAB0rZbYJHedNTrAE3BqeeH1W8XvCZKOJO07PJL0LqntaKuSejm/c0l7ZWKE/CC6uAWeHd4HUuAuZ3Pj8UvLBKiqkJRsIQAnwIfDH4FLj19aJsA3/5h5NAUQJ9wAAAAASUVORK5CYII=", 50, 14}, ["TRG-42"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABGElEQVR4nM3TvS5EURDA8d9lKSQSlY6EkkbpBbQiEQWJmkajIVFphCfQSLyGTqIRhcRHoyQKIhIJ62sTRnFPsVjZ3btb+CeTe87MnDkzc+eICC1IKSLmfuimWoxZSLKIUJAhLGAROygjMIlLbCe/F7xjGKPJJ0vfc5wUTaCaLCKWUUrBB9CPCp5xgQMcV50ZxCw223D/G17bEIeoz2dEjKVfuNKAfzNsFBmjWlJqoNayfFQmsJ50V9jHNaYxUuNcBTf4wEPSPaZ9GT04Ldj/XzRSSG9KqBsd8lHbTcmcJdsabtP6LtkPU9J/0VnH3hRZxLfXvoentO7DuLyQalax1a4E2kUJR/LuZJjHfZW9CzNYkhdF3vV/xxeS+4V6sDXUbAAAAABJRU5ErkJggg==", 50, 8}, ["TYPE 88"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABUklEQVR4nK3TsWtUQRDH8c9dDi+agCKS4sQINnZWYm8n2pgyTQJ2afKnBNJaKf4HSgpJI2KpcqggmoBFOC+EVL4mMTFjsXv4PI0ne/eFZWfn7fx25g3TiAhjcCuvGVSYRQPHOMLZfO8QF3ADbbTwGlNDej3sZruNc3ic4wfcxzWs1QMbYxSyjtXSYOz7s5BtvMBJPs9jBw8xSPQmrmAPB1mn3ypI4C42CuKGufQXXwcX8SOfD7Eidf2z1KF5qdBKKuQV5hoR8civdv4Pt3E92+dr/i/oZnuh5j/Oj37L56t57+PrkPYnqQN1WriMxX9mFRFLEaFgnYmIKhK9iHiQfZ2I+BCT5emofJrScJYwi+lsL+OZNPRHeFKoeRrdURdKZmTAnRxf4SW+1769xZsxtId5PupCC+8Lxe/lfdPvRQx8m4W6RTSlv1fCFj7i3eTSKecnEwDv8Lz2H3MAAAAASUVORK5CYII=", 50, 9}, ["UKULELE"] = {"iVBORw0KGgoAAAANSUhEUgAAACsAAAAPCAYAAAB9YDbgAAABO0lEQVR4nNWWvUqDMRiFn2or/lGLmy7iLtLN0QsQr8DZW3Cou5MK3oGboqvFC1AER0FadHHoIKKIVUv9KT4OXwpdLBYjbQ8EzpuEcHJySIJKaHn1UH0xwYN6oC62zOlqa5Ilte7P2FMnuy02pU4BZWCC9rgHdoBrYBZYBhaAV2AfWAv8/6ButHG0E5yomQgODqoFdb2Fb6rDqBeRxKquRhCbVcvqlZoLJtyqMyn1HRiKdFBnwDZQDXUN+AAEnkLfG1APvAp8BT4ArAAFYBzIAhlgJIwXU6qRhP4FnySbGmsz56ZXxP4GjYFuKwhokESmHSppEvtjZnYLeA51M7OQZFY6y2waGA3jpV68DXLqpVpSp9Vz9U6dSwNFYD6Cq6fAboR1asARidOPwDGJy5W+e8H65m/QWuTt8V/XN9cZJHogLHAJAAAAAElFTkSuQmCC", 43, 15}, ["UMP45"] = {"iVBORw0KGgoAAAANSUhEUgAAAB0AAAAPCAYAAAAYjcSfAAABbUlEQVR4nL2UO0tdURCFvytXBUUTIihWvhDEWKRJYyVYBC2stBEhnXaChVj5D2wsLK3Fylb7QIpYqohCksJCQS8+UCQ+Pos7moOo51y5umCYzbBn1pq9Z29USrBGdURtLTEPdUmdUsmTDQ3ABDANfAR+An+AC+AKqADywDVwC1QCy4n8ZmAI2AVIU9ekTqqHlgdzKjn1FFgFaoCvwG+gG6jPeAql4ATYQd1OdLYWfly9SSg8U9fD9jN0dK7uqZexvlD/qfNqVZK0Vj1Qe9WFIP0VAuoSwqpDhFGsoF4lCPvUKp++ri4V1CN1IIhUj2P95ZnEDvU2CAcjtuD/e//2TN6DEUoL6g/1u1qTkjQbxVfUdrVT/aDORHwsjTQPfCpxGIbDL1Icuntshu9JK5D1nSbRD4wC64/iG+E/pxXIqa/gfboWcAwUgLaXNlaUixEQ2AJaSHnj5SSF4hHnKH4u70aaaZjeotO/QONLm+4AiM1w4f2iFXkAAAAASUVORK5CYII=", 29, 15}, ["UTILITY KNIFE"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAAA9UlEQVR4nL3UPUqDQRDG8V9C8CMaglhYBNTaUkxnYWflDbyHtY0nEFurXEALBcUTCPZiaSMaFTGSiGEs3hWCRUDerH8Yltkdnmd2GbYSES08YBVbWFQwixlMo44pzKGGBqpoptqFtDbTfiPVdXGFU5zjUS4ioh0RJxExjLz0ImI3IuSIKtrYSS+ZkzqOsZZDvIbtHMJj/M6UG7E+nnCLa1ziuYav0u39jeUUk6KPgyo6ExT9b14U/XcqEQF72Ff8ULno4kYxAYcYlNAK3OMOQ/i5CCxhEyuYRwsbWE/nPXyOiA3wMZIP8fbL8DWZXuAI7yWaH8s324HgmwHy84AAAAAASUVORK5CYII=", 50, 8}, ["UZI"] = {"iVBORw0KGgoAAAANSUhEUgAAAB8AAAAPCAYAAAAceBSiAAABbUlEQVR4nLXTPWuUURAF4GfX9aPwI35hYZNCsE4nWKTxDySIlcRfYZVeEH+Bnb2oCCIBK7XQRrSyEpIiImgiq0bJBuOx2Bu5rG42+5ocGO68885wZu6cK4lid5N8TnKhiu3UDia5neRkFZtIcj/JpWF1HX2cwuXiX8ctTOAIjuMw9huOn5jDO7zEOi5iBt/wAt//qkrSTjKfvUM3yc0kc4OTt5JMYnGbqXYLPbyvAx3M7jHpFzzBEm7UP1pJPuI01rCJY6XLHziKp5gq/r5S9wFfS82JUtNCBs7HeIB7/2wrSa/s5kqSO0lminolmSqq7VY77CU5l2Sy5DR5HX/Uvo4DmMc0ulVvr8v5q4qt4my5zkOlthHahXwT1waIayxX/ic8wwbO43lT8q3Jr+LNNnlnBr6Dt01Jt9DWF9erEXmNr3YU+QJWRuQ9rPzO0KxxMYY6F4raHyVpNVV4be0x+two55r+zv8b45DvOn4D3E7UPCcemn4AAAAASUVORK5CYII=", 31, 15}, ["VOID STAFF"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAJCAYAAABwgn/fAAABIklEQVR4nNXVv0qcQRQF8N+nrmgMcaNg0qSxSiQEQh5DUgTyGkKKbCvYRPBRbNIFOyshATsLm/wjErTdIlsoy0kx88GH1Wqje2C4M3fuzD1zZoYriSlrL5N8STJM8jPJxyS9JokpwgfsYQaf8RV/cDV3h6QmxQJe4x0GuMBbHHeD5rCOFfSr7/E120dT+7MY4W8d/8PlDQhtYIg1LNX8a3XONR4wj+fodXw7+FG5jFtnk+QcTyckc98QHGG3SbKoKNLah4oCy4piy52FPUWF7xMkafdrsYAXyo30FfUbPMGDGrPayfeo5numqN9iG4fKSxjjFKNp+OxLeIP32MIZNnHSDZqGg3QxwCflSe3jG35jfNc14TbtVZKDWkd+JRkkmf8PguhkfiyUgawAAAAASUVORK5CYII=", 50, 9}, ["VSS VINTOREZ"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAKCAYAAAD2Fg1xAAABi0lEQVR4nLXVv2sVQRDA8c97XCBiLIyghSiJoOIPRFFJq4ilRcAihYj+E5a28sBWCwsL/wOxFkQbCxFFQhARsXiCIBhDjEQhY3H7yL7z1He+8wvLzTAzuzO7s7ediDAmW3AVO5I+ieWkr6KLCXzC4UpsB9PYwCxu4RG+NFj/PC52xizkAG7iwjiTtEGB7VjD+ogx05jHOezF6f+TWjM6EfEW+1qabxWPlcXuwe4anz6eZ+OrssUGbGjWWhOYKvDSZiHruI2PmeNxLCT5He5g0I9HcSnJkRK6nuIn8aay6Am8aJDk6ERELzbpRYTKKCLie7JfqbE/zOL7ETEbEUci4lBEvI5h5mriWxldfMjq2lpT607l8cGzGvsgJnBGeWqLWMK1iu/MP+73X+kavh+nanxOZnK/YpvCsSS/92sr3Tfc7zPNUxyNAgczfQ73lDs64HIm38XTTD+rfEf4fe/fwA/lJtSdaCsU2IZX+IYV7FJe1FA+bE/wIPl/Tt/l9N2fzZX/IHJ6rWX7B34CvKzpPjgLsUwAAAAASUVORK5CYII=", 50, 10}, ["WA2000"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAB8klEQVR4nMXWT4hOURgG8N838zWN5G/5hvwpyWiYWCoLsrGylVhIrOxmI3sLpVlIItbWJCtJGtlIqSHF1JSMmUgifTFjZnzX4j3T3JlmuN/9ME+d7u2c+5z7Pud9z3NOJcsyJfEaNXzHAJ5jM16iG6dwAyPowSh6U+tBJ/pwuWwAeVRaEPIe61v8f5+/JKTaAvcFxjCBxxhCP46hA8vxLT2viKB3Yxd2iEXYiiNN/PMgVuP4/IF8Rg5jlSiZP2EE21KAVfxMwXfjFRqopG/bsBOXcBGfU38/zjYhYoazH3sXEvIQ0ziQgimC8cRZ0WQgP8SeeoqpNE8z2IcufMKG/EAly7IptItVbC84YUOsdFncwccSvI1CyB7UzWa9URXqukR5FBXSKuoleWO4L5zvgVkhWSXLsiFsF6kuWlqtYhzLSnJv4RBW5jvbUMZ/3+JNjjud2m08KcAvK4KomvPzO6vCqVi85jOzKYSbOJHer+GMsOC7OJm+vYrhFoL9He6Jw3cO8pv9KM4JYR1iQ1/HaVF6MxgV7tHAI2HDveJcqAufH8DkP5GxCCpZll3AV+Hxm0T91kWGJoUZrMlxBrFFlFIt9a3Fl/8T8sIockXpxDrhbDV8wLPc+LC5GVsSFLmiTOBdajMYFNeNNnHItQv7XjL8AtVxf+1zfjOnAAAAAElFTkSuQmCC", 50, 14}, ["WAR FAN"] = {"iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAABKElEQVR4nLWUvy4EURhHz9hFPIBGI5uoFEQkEgodWglPsK+g1ngHBQrRaCQ0JFiJ2JAgNP48gETjFWx2j2L3ymQys2Y34yRfcyff+d07882NVLowD6wCi8A00AQawBBwB1wAN8BzpkFNq1n12vzcqgtpruRCWd1Rmz3IAy11Wx3MChhWj/sQJzmKh8TlVwXIA6chJARsFigPbKlEagV4B0a6jVMffANTkXoJLBUsD5wNAAfAyz/Iv4D78A0idUWtFfDuX9Wq7cFJ/dFm1EO1EWtqqY/qrrqnPnXW4s/P1eXOZn99kdlXRQXYAKpArXPkOSACHoAxYBI4AfaBt1RLygmSNaquq/XYjuvqmlr6qz9PQKgJ9VP9UMfz9pV7mIoS7dlu0r5Nc/EDbRMgY2WoQNkAAAAASUVORK5CYII=", 24, 15}, ["WARHAMMER"] = {"iVBORw0KGgoAAAANSUhEUgAAACsAAAAPCAYAAAB9YDbgAAAA9UlEQVR4nM3WsS5EQRTG8d9em3gAzSYKoVRpdRq1B/AEaLyAV0A8gMYL6LYguzReYAvR0GqUorGO4t6bMGY3iNj5kslk/jkz+c7JmcmICIWN+Yg4jM8aRcRqJyIUpi2cZ3i/+mcj39HyBL5SotkznCbsFjslmn3CRcIecV1iz8IN1hO21sUB9vCMS1zhFWPMfZhl2F/HVFhCL5PARicixk1Q6Rp0cYxdvKgrO1RnmqvImzqx31St3TstpsIitn19FQZtz1bNYaUo27NtpiUZhZNkPcSoxF5dwGbCepoLNgM/U7WPowy/K7GyDxP4/ax/WD/6db0DbndSEZVbeYYAAAAASUVORK5CYII=", 43, 15}, ["WORLD BUSTER"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAAAqElEQVR4nNXUvwpBARTH8c/VtckjGOzyCCYymKweyaPYjLKalSwGsUixKFmkruGmpFvuJRff8fyp3+l3zgmiKJKSAUroY522KScuQYZBZqh9UMyrnNELMzQUPqXkDU7oYhRiiAbGSLInQB3V3OSl44AOJhCKV6aMRUJxJHaigAqKuUh8zg5tTG+Bf7yRLVqY3wez3MgvsEITy8dElkEW2Pju+93jmJS4AjlvJGu/bS3RAAAAAElFTkSuQmCC", 50, 8}, ["X95 SMG"] = {"iVBORw0KGgoAAAANSUhEUgAAAB0AAAAPCAYAAAAYjcSfAAABVUlEQVR4nMXUu2oVURQG4O/oCAFvICohnRfirbCwsg3a5xW09hFsFPRN7H0AY2MsBLVQEQQl6ZSDoIQDHhXPb3H2hEEmw2QS8IfFXmvNuu89a5TEQFzG+562pzDCGA4MzYiju7D9iYu1UOFTD6cZTjTkKT7jTIvtCCnnqOiCp1jHrMLZXVTcxFLHtzGe4bR5h3/wY7uqJLNGRfuJutsa37CBVNjUPqY2jDEp/BIWOmz/beQ57tVJ35Wkr3CtI8gWbuBtkVewZn63j3ABV3AXL1r8L+ElSPIgO+N7g99IcjKJQreL/nWSY0lullh2oIWar/AYBxsVTXCkjOdcGeN1rOJrw+5WOZ/gN95o/BYtmG5zHZXV9LB0dLWhO5zkV5JpkvNFdyfJYo94g5fDcRwyfw8fi24RX/o4VwOTbuEDlnHffHms93UemnSi+/46sZfdOxj/Jelfh0r3n91oDZEAAAAASUVORK5CYII=", 29, 15}, ["X95R"] = {"iVBORw0KGgoAAAANSUhEUgAAAB8AAAAPCAYAAAAceBSiAAABkElEQVR4nLXUz4uNURwG8M+duTEUmSzIkpSVxGiUGptJWfBfSNbKH2ApO1s2tiwkKSxM2AqTX1nYaZQYGcVM7jwW77l13DT3vaN56vT98Z7zPuc55/s9nSTWiX34iF8jrDmEF/1gbL3M2IodmEC32AlsKeNf2F8HXTxsSTaPKdzDB8zgLIKXOFjmdYqdxacS98q8AxrBq9DJf5z7ECxjBd8xXsh/YxoLG02uEHaqeAnX8BW9MXzZQPLOQNyvse2YlGQuDd5kOOaTnEwym+RUkuclv5LkZ5LlIetfJdEfXbzGCexuoeQtHlTxtKZ9ruAWduIcrmrud1D9xF9/S3K+heI+zlQ7H0+yUPJ3kmxOsjfJpVrdWqOL67hf7WcJ24p/HDeqb73KP1yd1kVNdR/B3RYniKbPVzR9W+NzsYsD+T2Vf6zY23hX/KO42ZZ82Au3OLCBqcrv31+feBLf2hLTKB+Gpzhd/Jkq/wTPNC/ZODbh8ijkbQrjQlVwq0l2tS2oNgU3DI/xHo8whx8jqVsDfwBaPIPgIwLktwAAAABJRU5ErkJggg==", 31, 15}, ["ZERO CUTTER"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAADCAYAAADRGVy5AAAAq0lEQVR4nL3RzUqCURDG8d+rgQmZWu1btAuCbq1lN9SmW3AheAvpqoWbhBRTgoqCmBbviC78CAQfGP5nzmEOD88UEXGBe7xjYLN+UcU3PvPuBx9bZnYpMF/pj9DIcwMnyVO00EQbZzjP9y4eiojo43oPM4fWGD108IgpFBFxhTs8Y6RMqYZbXGKo3MZN8s0ypSYqypSsEI5R/6e5WXKxoS9M8Jp8wVPWcN0Hf3zHKylcKx3UAAAAAElFTkSuQmCC", 50, 3}, ["ZIP 22"] = {"iVBORw0KGgoAAAANSUhEUgAAABsAAAAPCAYAAAAVk7TYAAABF0lEQVR4nL3TsStFYRzG8c897mRUdoO6WbEoMZspsZBJBovR5E9QRExS/gQpFjvFoKQYDFwZ7qAk5DXcc/N26DoH11NPvef9Pb/3e97T75RCCBWcYwQXfq5RDGIe1wifEiGElfD3mgkhyLr8i5s00xAeMnv7rYJNpY7Vm6CvRcCsthN0/hOsJ8FegYbnKH+Kg8i1KLeIjtSl1G3l9IC8OsIuhtGP16g2h9V0Xc3AQYLHArDGv/OWAfHx0rfY+ao5KQDKqzs8fVUoOvoVdKMdy7iJamPfNReF1XCG2WivhPU8zUVhVWxEzwmmcY9J9anMDbvEeJP8UrQewAIO0SXHoJXVP80VTrCJ4yb5Layp3/AKE3j5DtLQOxU/nR3e/F9+AAAAAElFTkSuQmCC", 27, 15}, ["ZIRCON SLAMSICKLE"] = {"iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAABGElEQVR4nJWRu0pDQRRFFxIDISrRQvADJKJgYxcsTKWFfyD5hVj6E1Y+PsHKKiIodil8gCja2knA0gcKFyWyLDKRy3VuMBs2zJyZvZhzBpXgqrql7thTEvYrqTt/3F/sqx/Glagn6kQeYFf9Vp/UltrOAR2rlRjAAKmGYlmtqdtqJwNpqZNZwLpazOlxPvKSa/VAXUjPYJAPc1r6UhuDghV1T71UP3Mg3bzwlHobLl2oJfUxE07U5Vh4Wr1RT+0NdDTUG6nwm1qPzWBGvbL3ZeXMWSkM71ld7dez4XP1yMh/B4+rs+laAdgAloA7oAasAa/E9R78qwIwBmwCD0A7gP6tEaADdIE54B54GRawCBSBM6AJ1IcB/ADDcl/CIOsnNwAAAABJRU5ErkJggg==", 16, 15}, ["ZIRCON TRIDENT"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAICAYAAAC73qx6AAABG0lEQVR4nM2UsS5FQRCGvz3u2StUwhuISqH0BgrxAirvQELFO5B4A4ncXiWhVBGFUqsVHXEc51ecf282N/eIgjiTTHZ3/szszsz+EyTRI1kCRsA+cGfbBrAHDAEB79Yr4GTsKakvWkq6VysvkpYlbUp6U7fsJP+B84nAFrAIPAMXwKexmSmVa6yDKZiAGig7qv5hvzBhz23R+yNg1vFOgQKYM14Cl95XQdIhsA2sOFgNPHpNiURrDVR+DA4cadve0La8MhYyjAxrJrAiw1azxJ6AeWDB54cs4ZRIbd/zoqNqP5HvyPXXxAvW8T3BZO/L17oB1oBXr2fAOt1fa9fvrf6b4L9G9tSRvkgavwfArW1p/Eaf0/i9Bo6T4xdM44pWBHcfuQAAAABJRU5ErkJggg==", 50, 8}, ["ZWEIHANDER"] = {"iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAYAAABth09nAAAA7ElEQVR4nM3UPUpDQRTF8Z8mRBQUrBKwiJDWHdi4DXtrV+HCbFxBasFSLRIRMX4gz+I9IYYRfXcmPP8wMHOGC+cwc+9GVVVaMsIZLtoWrpPNQM0YR6WN5BIJcofb0kZyiQa5L20kl0iQBa5LG8klEmSA44Q+yfSSRR8n2G/2sIUd7KHXrI/mbhcznKqn1xcHzXm+pD0u1f1EhYeE/ornhP6OJ7yof8Zc/c2nqRf5yyutzuzfDK+dPi5b1gxwiPMVfaLD3on0yBuuEnqnAyASZFvHjZ0iEmSEYWkjuUSCDH2fWP+CSJAbTAv7yOYTCAcjy7oQ9i0AAAAASUVORK5CYII=", 50, 14}, } for k, v in pairs(gunicons) do gunicons[k][1] = syn.crypt.base64.decode(v[1]) end local function NameToIcon(name) local tempimage = gunicons[name] if tempimage ~= nil then local new_w = tempimage[2] local new_h = tempimage[3] return {data = tempimage[1], w = new_w, h = new_h} end return nil end menu.activetab = 5 menu.annoylist = table.create(game.Players.MaxPlayers - 1) menu.parts = {} menu.parts.indicator = Instance.new("Part", workspace) menu.parts.sphereHitbox = Instance.new("Part", workspace) menu.parts.resolverHitbox = Instance.new("Part", workspace) menu.parts.sphereHitbox.Name = "abcdefg" local diameter do menu.parts.sphereHitbox.Size = Vector3.new(1, 1, 1) menu.parts.sphereHitbox.Position = Vector3.new() menu.parts.sphereHitbox.Shape = Enum.PartType.Ball menu.parts.sphereHitbox.Transparency = 1 -- local box = Instance.new("BoxHandleAdornment", menu.parts.sphereHitbox) -- box.AlwaysOnTop = true -- box.Adornee = box.Parent -- box.ZIndex = 5 -- box.Color3 = Color3.new(1,0,0) -- box.Size = menu.parts.sphereHitbox.Size -- box.Transparency = 0 -- table.insert(misc.adornments, box) menu.parts.sphereHitbox.Anchored = true menu.parts.sphereHitbox.CanCollide = false menu.parts.resolverHitbox.Size = Vector3.new(1, 1, 1) menu.parts.resolverHitbox.Position = Vector3.new() menu.parts.resolverHitbox.Shape = Enum.PartType.Ball menu.parts.resolverHitbox.Transparency = 1 menu.parts.resolverHitbox.Anchored = true menu.parts.resolverHitbox.CanCollide = false menu.parts.indicator.Size = Vector3.new(1, 1, 1) menu.parts.indicator.Position = Vector3.new() menu.parts.indicator.Shape = Enum.PartType.Ball menu.parts.indicator.Transparency = 1 menu.parts.indicator.Anchored = true menu.parts.indicator.CanCollide = false end menu.activenades = {} local shitting_my_pants = false local stylis = { [525919] = true, [1667819] = true, [195329] = true, [5725475] = true, [52250025] = true, [18659509] = true, [31137804] = true, [484782977] = true, -- superusers end here, anything else following is just people i know that could probably have direct access to a developer console or data store or anything to catch us in the act of creating and abusing and exploiting their game [750972253] = true, [169798359] = true, -- not confirmed but this dude has a tag with no equal signs so kinda sus and he respond to ltierally no fucking body [94375158] = true, [53275569] = true, -- banlands advocate [2346908601] = true, -- sus [192018294] = true, [73654327] = true, [1509251] = true, [151207617] = true, [334009865] = true, } CreateThread(function() while wait(2) do -- fuck off local count = 0 for _, player in next, Players:GetPlayers() do local d = stylis[player.UserId] if d then count += 1 end end shitting_my_pants = count > 0 end end) local allesp = { [1] = { -- skel [1] = {}, [2] = {}, [3] = {}, [4] = {}, [5] = {}, }, [2] = { [1] = {}, [2] = {}, [3] = {}, [4] = {}}, -- box [3] = { -- hp [1] = {}, [2] = {}, [3] = {}, [4] = {}, -- resolver flag [5] = {}, -- dist [6] = {}, -- lvl [7] = {} --weapon icons }, [4] = { -- text [1] = {}, [2] = {}, }, [5] = { -- arrows [1] = {}, [2] = {}, }, [6] = {}, -- watermark [7] = { -- wepesp [1] = {}, -- name [2] = {}, -- ammo [3] = {}, -- icon }, [8] = { -- nade esp [1] = {}, --outer_c [2] = {}, --inner_c [3] = {}, --distance [4] = {}, --text [5] = {}, -- bar_outer [6] = {}, -- bar_inner [7] = {}, -- bar_moving_1 [8] = {}, -- bar_moving_2 }, [9] = {}, -- fov circles [10] = { [1] = {}, --boxes [2] = {}, --gradient [3] = {}, --outlines [4] = {}, --text [5] = {}, --shaded outlines }, -- shitty keybinds --keybinds -- keybinds [11] = { {}, -- backtrack lines {}, -- spawn locations }, } local wepesp = allesp[7] local wepespnum = #wepesp local nade_esp = allesp[8] local nade_espnum = #nade_esp for i = 1, Players.MaxPlayers do Draw:Circle(false, 0, 0, 0, 1, 32, { 0, 0, 0, 0 }, allesp[11][1]) Draw:OutlinedText("", 2, false, 20, 20, 13, true, { 255, 255, 255, 255 }, { 0, 0, 0 }, allesp[11][2]) end for i = 1, 50 do Draw:FilledRect(false, 20, 20, 2, 20, { 30, 30, 30, 255 }, allesp[10][5]) end for i = 1, 50 do Draw:FilledRect(false, 20, 20, 2, 20, { 30, 30, 30, 255 }, allesp[10][1]) end local this_is_really_ugly = 50 - 15 * 1.7 for i = 1, 50 do Draw:FilledRect(false, 20, 20, 2, 20, {this_is_really_ugly, this_is_really_ugly, this_is_really_ugly, 255}, allesp[10][3]) end for i = 1, 19 do Draw:FilledRect(false, 0, 0, 10, 1, { 50 - i * 1.7, 50 - i * 1.7, 50 - i * 1.7, 255 }, allesp[10][2]) end for i = 1, 50 do Draw:OutlinedText("", 2, false, 20, 20, 13, true, { 255, 255, 255, 255 }, { 0, 0, 0 }, wepesp[1]) Draw:OutlinedText("", 2, false, 20, 20, 13, true, { 255, 255, 255, 255 }, { 0, 0, 0 }, wepesp[2]) Draw:Image(false, placeholderImage, 20, 20, 150, 45, 1, wepesp[3]) Draw:OutlinedText("", 2, false, 20, 20, 13, true, { 255, 255, 255, 255 }, { 0, 0, 0 }, allesp[10][4]) end for i = 1, 4 do allesp[9][i] = {} for k = 1, 2 do Draw:Circle(false, 0, 0, 0, 1, 32, { 0, 0, 0, 0 }, allesp[9][i]) end end for i = 1, 20 do Draw:FilledCircle(false, 60, 60, 32, 1, 20, { 20, 20, 20, 215 }, nade_esp[1]) Draw:Circle(false, 60, 60, 30, 1, 20, { 50, 50, 50, 255 }, nade_esp[2]) Draw:OutlinedText("", 2, false, 20, 20, 13, true, { 255, 255, 255, 255 }, { 0, 0, 0 }, nade_esp[3]) Draw:Image(false, BBOT_IMAGES[6], 20, 20, 23, 30, 1, nade_esp[4]) --Draw:OutlinedText("NADE", 2, false, 20, 20, 13, true, {255, 255, 255, 255}, {0, 0, 0}, nade_esp[4]) Draw:OutlinedRect(false, 20, 20, 32, 6, { 50, 50, 50, 255 }, nade_esp[5]) Draw:FilledRect(false, 20, 20, 30, 4, { 30, 30, 30, 255 }, nade_esp[6]) Draw:FilledRect(false, 20, 20, 2, 20, { 30, 30, 30, 255 }, nade_esp[7]) Draw:FilledRect(false, 20, 20, 2, 20, { 30, 30, 30, 255 }, nade_esp[8]) end local setwepicons = {} for i = 1, 35 do for i_ = 1, 2 do Draw:Triangle(false, i_ == 1, nil, nil, nil, { 255 }, allesp[5][i_]) end local skel = allesp[1] local box = allesp[2] local hp = allesp[3] local text = allesp[4] local icons = allesp[3][7] local arrows = allesp[5] for i = 1, #skel do local drawobj = skel[i] Draw:Line(false, 1, 30, 30, 50, 50, { 255, 255, 255, 255 }, drawobj) end for i = 1, #box do local drawobj = box[i] Draw:OutlinedRect(false, 20, 20, 20, 20, { 0, 0, 0, 220 }, drawobj) end Draw:FilledRect(false, 20, 20, 20, 20, { 10, 10, 10, 210 }, hp[1]) Draw:FilledRect(false, 20, 20, 20, 20, { 10, 10, 10, 255 }, hp[2]) Draw:OutlinedText("", 1, false, 20, 20, 13, false, { 255, 255, 255, 255 }, { 0, 0, 0 }, hp[3]) Draw:OutlinedText("R", 1, false, 20, 20, 13, false, { 255, 255, 0, 255 }, { 0, 0, 0 }, hp[4]) Draw:OutlinedText("", 1, false, 20, 20, 13, false, { 255, 255, 255, 255 }, { 0, 0, 0 }, hp[5]) Draw:OutlinedText("", 1, false, 20, 20, 13, false, { 255, 255, 255, 255 }, { 0, 0, 0 }, hp[6]) for i = 1, #text do local drawobj = text[i] Draw:OutlinedText("", 2, false, 20, 20, 13, true, { 255, 255, 255, 255 }, { 0, 0, 0 }, drawobj) end --(200, 67), (150, 45), (100, 33) Draw:Image(false, placeholderImage, 20, 20, 150, 45, 1, icons) setwepicons[i] = nil end local bodysize = { ["Head"] = Vector3.new(2, 1, 1), ["Torso"] = Vector3.new(2, 2, 1), ["HumanoidRootPart"] = Vector3.new(0.2, 0.2, 0.2), ["Left Arm"] = Vector3.new(1, 2, 1), ["Right Arm"] = Vector3.new(1, 2, 1), ["Left Leg"] = Vector3.new(1, 2, 1), ["Right Leg"] = Vector3.new(1, 2, 1), } ragebot.nextRagebotShot = -1 client.loadedguns = {} local raycastutil local gc = getgc(true) for i = 1, #gc do local garbage = gc[i] local garbagetype = type(garbage) if garbagetype == "function" then local name = getinfo(garbage).name if name == "bulletcheck" then client.bulletcheck = garbage elseif name == "trajectory" then client.trajectory = garbage elseif name == "addplayer" then client.addplayer = garbage elseif name == "removeplayer" then client.removeplayer = garbage elseif name == "call" then client.call = garbage elseif name == "loadplayer" then client.loadplayer = garbage elseif name == "rankcalculator" then client.rankcalculator = garbage elseif name == "gunbob" then client.gunbob = garbage elseif name == "gunsway" then client.gunsway = garbage elseif name == "getupdater" then client.getupdater = garbage elseif name == "updateplayernames" then client.updateplayernames = garbage end elseif garbagetype == "table" then if rawget(garbage, "deploy") then client.menu = garbage elseif rawget(garbage, "breakwindow") then client.effects = garbage elseif rawget(garbage, "aimsen") then client.settings = garbage elseif rawget(garbage, "send") then client.net = garbage elseif rawget(garbage, "gammo") then client.logic = garbage elseif rawget(garbage, "setbasewalkspeed") then client.char = garbage elseif rawget(garbage, "basecframe") then client.cam = garbage elseif rawget(garbage, "votestep") then client.hud = garbage elseif rawget(garbage, "getbodyparts") then client.replication = garbage elseif rawget(garbage, "play") then client.sound = garbage elseif rawget(garbage, "controller") then client.input = garbage elseif rawget(garbage, "raycastwhitelist") then client.roundsystem = garbage elseif rawget(garbage, "new") and rawget(garbage, "step") and rawget(garbage, "reset") then client.particle = garbage elseif rawget(garbage, "unlocks") then client.dirtyplayerdata = garbage elseif rawget(garbage, "toanglesyx") then client.vectorutil = garbage elseif rawget(garbage, "IsVIP") then client.instancetype = garbage elseif rawget(garbage, "timehit") then client.physics = garbage elseif rawget(garbage, "raycastSingleExit") then raycastutil = garbage elseif rawget(garbage, "bulletLifeTime") then client.publicsettings = garbage elseif rawget(garbage, "player") and rawget(garbage, "reset") then client.animation = garbage client.animation.oldplayer = client.animation.player client.animation.oldreset = client.animation.reset elseif rawget(garbage, "task") and rawget(garbage, "dependencies") and rawget(garbage, "name") == "camera" then local oldtask = rawget(garbage, "task") rawset(garbage, "task", function(...) oldtask(...) if not client then return end if not client.superaastart then if ragebot.target and menu:GetVal("Rage", "Aimbot", "Rotate Viewmodel") and client.logic.currentgun and client.logic.currentgun.type ~= "KNIFE" then local oldpos = client.cam.shakecframe client.cam.shakecframe = CFrame.lookAt(oldpos.Position, ragebot.targetpart.Position) end else client.cam.shakecframe = client.superaastart end if client.logic.currentgun and menu:GetVal("Visuals", "Viewmodel", "Enabled") and client.logic.currentgun.type ~= "KNIFE" then local a = -1 * client:GetToggledSight(client.logic.currentgun).sightspring.p + 1 local offset = CFrame.Angles( math.rad(menu:GetVal("Visuals", "Viewmodel", "Pitch")) * a, math.rad(menu:GetVal("Visuals", "Viewmodel", "Yaw")) * a, math.rad(menu:GetVal("Visuals", "Viewmodel", "Roll")) * a ) offset *= CFrame.new( menu:GetVal("Visuals", "Viewmodel", "Offset X") * a, menu:GetVal("Visuals", "Viewmodel", "Offset Y") * a, menu:GetVal("Visuals", "Viewmodel", "Offset Z") * a ) client.cam.shakecframe *= offset end return end) end end end gc = nil local function animhook(...) return function(...) end end function client:GetToggledSight(weapon) local updateaimstatus = getupvalue(weapon.toggleattachment, 3) return getupvalue(updateaimstatus, 1) end local mousestuff = rawget(client.input, "mouse") if mousestuff then for eventname, event in next, mousestuff do if eventname:match("^onbutton") then for func in next, mousestuff[eventname]._funcs do local thefunction = func mousestuff[eventname]._funcs[func] = nil local function detoured(...) if menu and menu.open then return end thefunction(...) end mousestuff[eventname]._funcs[detoured] = true break end end end end client.loadedguns = getupvalue(client.char.unloadguns, 2) -- i hope this works client.lastrepupdate = Vector3.new(-10000, -10000, -1000) --- this is super shit client.roundsystem.lock = nil -- we do a little trolling client.updatersteps = {} client.lastlock = false -- fucking dumb for _, player in next, Players:GetPlayers() do if player == LOCAL_PLAYER then continue end local updater = client.getupdater(player) if updater then local step = updater.step updater.step = function(what, what1) if not menu then return step(what, what1) else if menu:GetVal("Rage", "Aimbot", "Enabled") or menu:GetKey("Visuals", "Local", "Third Person") then return step(3, true) else return step(what, what1) end end end if not client.updatersteps[player] then client.updatersteps[player] = step end end end client.nametagupdaters_cache = {} client.nametagupdaters = getupvalue(client.updateplayernames, 1) client.playernametags = getupvalue(client.updateplayernames, 2) setrawmetatable(client.roundsystem, { __index = function(self, val) if not menu or not client then setrawmetatable(self, nil) return false end if val == "lock" then if menu.textboxopen then return true end return client.lastlock end end, __newindex = function(self, key, value) if not menu then setrawmetatable(self, nil) pcall(rawset, self, key, value) return end if key == "lock" then client.lastlock = value return end end, }) function ragebot:shoot(rageFirerate, target, damage) local firerate = rageFirerate or client.logic.currentgun.data.firerate local mag = getupvalue(client.logic.currentgun.shoot, 2) local chambered = getupvalue(client.logic.currentgun.shoot, 3) if not chambered then setupvalue(client.logic.currentgun.shoot, 3, true) end local chamber = client.logic.currentgun.data.chamber local reloading = getupvalue(client.logic.currentgun.shoot, 4) local spare = getupvalue(client.logic.currentgun.dropguninfo, 2) local magsize = client.logic.currentgun.data.magsize --[[local yieldtoanimation = getupvalue(client.logic.currentgun.playanimation, 3) local animating = getupvalue(client.logic.currentgun.playanimation, 5) if yieldtoanimation then setupvalue(client.logic.currentgun.playanimation, 3, false) end if animating then setupvalue(client.logic.currentgun.playanimation, 5, false) end]] --[[if mag == 0 and not reloading then spare += mag local wants = (mag == 0 or not chamber) and magsize or magsize + 1 mag = wants > spare and spare or wants spare -= mag -- setupvalue(client.logic.currentgun.shoot, 2, mag) -- setupvalue(client.logic.currentgun.dropguninfo, 2, spare) -- client.hud:updateammo(mag, spare) client.logic.currentgun:reload() return end if reloading and mag > 0 then client.logic.currentgun:reloadcancel() end]] local curTick = tick() local future = curTick + (60 / firerate) local shoot = curTick > ragebot.nextRagebotShot ragebot.nextRagebotShot = shoot and future or ragebot.nextRagebotShot if shoot and client.logic.currentgun.burst == 0 then local dt = menu:GetVal("Rage", "Aimbot", "Double Tap") and menu:GetKey("Rage", "Aimbot", "Double Tap") client.logic.currentgun:shoot(true) task.wait() client.logic.currentgun:shoot(false) local damageDealt = damage * (dt and 2 or 1) if not self.predictedDamageDealt[target] then self.predictedDamageDealt[target] = 0 end self.predictedDamageDealt[target] += damageDealt self.predictedShotAt[target] = 1 self.predictedDamageDealtRemovals[target] = tick() + GetLatency() * menu:GetVal("Rage", "Settings", "Damage Prediction Time") / 100 end end function ragebot:LogicAllowed() return tick() > ragebot.nextRagebotShot end local debris = game:service("Debris") local teamdata = {} do local pgui = game.Players.LocalPlayer.PlayerGui local board = pgui:WaitForChild("Leaderboard") local main = board:WaitForChild("Main") local global = board:WaitForChild("Global") local ghost = main:WaitForChild("Ghosts") local phantom = main:WaitForChild("Phantoms") local gdataframe = ghost:WaitForChild("DataFrame") local pdataframe = phantom:WaitForChild("DataFrame") local ghostdata = gdataframe:WaitForChild("Data") local phantomdata = pdataframe:WaitForChild("Data") teamdata[1] = phantomdata teamdata[2] = ghostdata end local GetPlayerData = function(player_name) return teamdata[1]:FindFirstChild(player_name) or teamdata[2]:FindFirstChild(player_name) end local CommandInfo = { targetbelowrank = " rank", friendaboverank = " rank", say = "says message in chat", annoy = "player name", mute = "player name", clearannoylist = "clear the annoy list, if anyone exists in it", clearmutedlist = "clear the muted list, if anyone exists in it", friend = "player name", target = "player name", cmdlist = "list commands, idk how you're even seeing this right now you're not supposed to see this bimbo", } local CommandFunctions = { say = function(...) local message = { ... } local newmes = "" for k, v in next, message do newmes ..= " " .. v end client.net:send("say", newmes) end, targetbelowrank = function(min) local targetted = 0 for k, player in pairs(Players:GetPlayers()) do local data = GetPlayerData(player.Name) if data.Rank.Text < min then table.insert(menu.priority, player.Name) targetted += 1 end end CreateNotification(("Targetted %d players below rank %d"):format(targetted, min)) end, friendaboverank = function(max) local targetted = 0 for k, player in pairs(Players:GetPlayers()) do local data = GetPlayerData(player.Name) if data.Rank.Text > max then table.insert(menu.friends, player.Name) targetted += 1 end end WriteRelations() CreateNotification(("Friended %d players below rank %d"):format(targetted, max)) end, mute = function(name) CreateNotification("Muted " .. name .. ".") menu.muted[name] = true end, annoy = function(name) if name:lower():match(LOCAL_PLAYER.Name:lower()) then return CreateNotification("You cannot annoy yourself!") end for _, player in next, Players:GetPlayers() do if player.Name:lower():match(name:lower()) then local exists = table.find(menu.annoylist, player.Name) if not exists then table.insert(menu.annoylist, player.Name) else table.remove(menu.annoylist, exists) return CreateNotification("No longer repeating everything " .. player.Name .. " says in chat.") end return CreateNotification("Now repeating everything " .. player.Name .. " says in chat.") end end CreateNotification("No such player by the name '" .. name .. "' was found in the game.") end, clearannoylist = function() CreateNotification("Cleared annoy players list.") table.clear(menu.annoylist) end, clearmutedlist = function() CreateNotification("Cleared muted players list.") table.clear(menu.muted) end, friend = function(name) for _, player in next, Players:GetPlayers() do if player.Name:lower():match(name:lower()) then table.insert(menu.friends, name) return CreateNotification("Friended " .. name) end end WriteRelations() CreateNotification("No such player by the name '" .. name .. "' was found in the game.") end, target = function(name) for _, player in next, Players:GetPlayers() do if player.Name:lower():match(name:lower()) then table.insert(menu.priority, name) return CreateNotification("Prioritized " .. name) end end CreateNotification("No such player by the name '" .. name .. "' was found in the game.") end, setfpscap = function(num) if not num then return CreateNotification("Please provide a number.") end if num < 10 then CreateNotification("Can't set max FPS below 10, setting to 10.") getgenv().maxfps = 10 else getgenv().maxfps = num end end, cmdlist = function(self, type) for cmdname, _ in next, self do if cmdname ~= "cmdlist" then local cmdinfo = CommandInfo[cmdname] or "" if not type then client.bbconsole(("\\%s: %s"):format(cmdname, cmdinfo)) else CreateNotification(("%s: %s"):format(cmdname, cmdinfo)) end end end end, } local crosshairColors local PLAYER_GUI = LOCAL_PLAYER.PlayerGui local old_c_eventfuncs local clienteventfuncs = getupvalue(client.call, 1) menu.pfunload = function(self) local crosshud = PLAYER_GUI.MainGui.GameGui.CrossHud:GetChildren() for i = 1, #crosshud do local frame = crosshud[i] frame.BackgroundColor3 = crosshairColors.inline frame.BorderColor3 = crosshairColors.outline frame.Shot.BackgroundColor3 = crosshairColors.inline frame.Shot.BorderColor3 = crosshairColors.outline end for k, v in next, Players:GetPlayers() do local bodyparts = client.replication.getbodyparts(v) if bodyparts and bodyparts.head and bodyparts.head:FindFirstChild("HELMET") then bodyparts.head.HELMET.Slot1.Transparency = 0 bodyparts.head.HELMET.Slot2.Transparency = 0 end end local funcs = getupvalue(client.call, 1) for hash, func in next, funcs do if is_synapse_function(func) then for k, v in next, getupvalues(func) do if type(v) == "function" and islclosure(v) and not is_synapse_function(v) then if getinfo(v).name ~= "send" then funcs[hash] = v end end end end end setupvalue(client.call, 1, funcs) for k, v in next, getinstances() do -- hacky way of getting rid of bbot adornments and such, but oh well lol it works if v.ClassName:match("Adornment") then v.Visible = false v:Destroy() end end for k, v in next, getgc(true) do if type(v) == "table" then if rawget(v, "task") and rawget(v, "dependencies") and rawget(v, "name") == "camera" then for k1, v1 in next, getupvalues(rawget(v, "task")) do if type(v1) == "function" and islclosure(v1) and not is_synapse_function(v1) then v.task = v1 end end break end end end if client.char.alive then local updater = client.fakeupdater; if (updater) then local character = updater.died(); if (character) then character:Destroy() end end for id, gun in next, client.loadedguns do for k, v in next, gun do if type(v) == "function" then local upvs = getupvalues(v) for k1, v1 in next, upvs do if type(v1) == "function" and is_synapse_function(v1) then for k2, v2 in next, getupvalues(v1) do if type(v2) == "function" and islclosure(v2) and not is_synapse_function(v2) then setupvalue(v, k1, v2) end end end end end end end end -- NOTE unhook springs here client:UnhookSprings() client.fake_upvs = nil DeepRestoreTableFunctions(client) local lighting = game.Lighting local defaults = lighting.MapLighting lighting.Ambient = defaults.Ambient.Value lighting.OutdoorAmbient = defaults.OutdoorAmbient.Value lighting.Brightness = defaults.Brightness.Value client.sateffect:Destroy() workspace.Ignore.DeadBody:ClearAllChildren() clienteventfuncs = old_c_eventfuncs client = nil ragebot = nil legitbot = nil misc = nil camera = nil DeepRestoreTableFunctions = nil end ragebot.repupdates = {} for _, player in next, Players:GetPlayers() do if player == LOCAL_PLAYER then continue end ragebot.repupdates[player] = {} end local ncf = CFrame.new() local vtos = ncf.VectorToObjectSpace local left = Vector3.new(1, 0, 0) local right = Vector3.new(-1, 0, 0) local forward = Vector3.new(0, 0, 1) local backward = Vector3.new(0, 0, -1) local up = Vector3.new(0, 1, 0) local down = Vector3.new(0, -1, 0) local directiontable = { left, right, forward, backward, up, down, } local mapRaycast = RaycastParams.new() mapRaycast.FilterType = Enum.RaycastFilterType.Whitelist mapRaycast.FilterDescendantsInstances = client.roundsystem.raycastwhitelist mapRaycast.IgnoreWater = true local uberpart = workspace:FindFirstChild("uber") if not uberpart then uberpart = Instance.new("Part", workspace) uberpart.Name = "uber" uberpart.Material = Enum.Material.Neon uberpart.Anchored = true uberpart.CanCollide = false uberpart.Size = Vector3.new(1, 1, 1) end -- do -- local updatervalues = getupvalues(client.fakeupdater.step) -- --[[updatervalues[11].s = 7 -- updatervalues[15].s = 100]] -- client.fake_upvs = updatervalues -- table.foreach(client.fake_upvs, print) -- end local CHAT_GAME = LOCAL_PLAYER.PlayerGui.ChatGame local CHAT_BOX = CHAT_GAME:FindFirstChild("TextBox") local loadplayer = client.loadplayer local function loadplayerhook(player) local newupdater = loadplayer(player) if newupdater then -- lazy fix................... local step = newupdater.step newupdater.step = function(what, what1) if not menu then return step(what, what1) else if menu:GetVal("Rage", "Aimbot", "Enabled") or menu:GetKey("Visuals", "Local", "Third Person") then return step(3, true) else return step(what, what1) end end end end return newupdater end CreateThread(function() local loadplayeridx = table.find(getupvalues(client.getupdater), loadplayer) if not loadplayeridx then for k, v in next, getupvalues(client.getupdater) do if type(v) == "function" then if v == loadplayer or getinfo(v).name == "loadplayer" then loadplayeridx = k break end end end if loadplayeridx then setupvalue(client.getupdater, loadplayeridx, loadplayerhook) else --warn("Unable to find loadplayer in getupdater") end end end) local selectedPlayer = nil local players = { Enemy = {}, Team = {}, } local mats = { "SmoothPlastic", "ForceField", "Neon", "Foil", "Glass" } local chatspams = { ["lastchoice"] = 0, [1] = nil, [2] = { "BBOT ON TOP ", "BBOT ON TOP 🔥🔥🔥🔥", "BBot top i think ", "bbot > all ", "BBOT > ALL🧠 ", "WHAT SCRIPT IS THAT???? BBOT! ", "日工tch ", ".gg/bbot", }, [3] = { "but doctor prognosis: OWNED ", "but doctor results: 🔥", "looks like you need to talk to your doctor ", "speak to your doctor about this one ", "but analysis: PWNED ", "but diagnosis: OWND ", }, [4] = { "音频少年公民记忆欲求无尽 heywe 僵尸强迫身体哑集中排水", "持有毁灭性的神经重景气游行脸红青铜色类别创意案", "诶比西迪伊艾弗吉艾尺艾杰开艾勒艾马艾娜哦屁吉吾", "完成与草屋两个苏巴完成与草屋两个苏巴完成与草屋", "庆崇你好我讨厌你愚蠢的母愚蠢的母庆崇", "坐下,一直保持着安静的状态。 谁把他拥有的东西给了他,所以他不那么爱欠债务,却拒 参加锻炼,这让他爱得更少了", ", yīzhí bǎochízhe ānjìng de zhuàngtài. Shéi bǎ tā yǒngyǒu de dōngxī gěile tā, suǒyǐ tā bù nàme ài qiàn zhàiwù, què jùjué cānjiā duànliàn, z", "他,所以他不那r给了他东西给了他爱欠s,却拒绝参加锻炼,这让他爱得更UGT少了", "bbot 有的东西给了他,所以他不那rblx trader captain么有的东西给了他爱欠绝参加锻squidward炼,务,却拒绝参加锻炼,这让他爱得更UGT少了", "wocky slush他爱欠债了他他squilliam拥有的东西给爱欠绝参加锻squidward炼", "坐下,一直保持着安静的状态bbot 谁把他拥有的东西给了他,所以他不那rblx trader captain么有的东西给了他爱欠债了他他squilliam拥有的东西给爱欠绝参加锻squidward炼,务,却拒绝参加锻炼,这让他爱得更UGT少了", "免费手榴弹bbot hack绕过作弊工作Phantom Force roblox aimbot瞄准无声目标绕过2020工作真正免费下载和使用", "zal發明了roblox汽車貿易商的船長ro blocks,並將其洩漏到整個宇宙,還修補了虛假的角神模式和虛假的身體,還發明了基於速度的AUTOWALL和無限制的自動壁紙遊戲 ", "彼が誤って禁止されたためにファントムからautowallgamingを禁止解除する請願とそれはでたらめですそれはまったく意味がありませんなぜあなたは合法的なプレーヤーを禁止するのですか ", "ジェイソンは私が神に誓う女性的な男の子ではありません ", "傑森不是我向上帝發誓女性男孩 ", }, [5] = { "🔥🔥🔥🔥🔥🔥🔥🔥", "😅😅😅😅😅😅😅😅", "😂😂😂😂😂😂😂😂", "😹😹😹😹😹😹😹😹", "😛😛😛😛😛😛😛😛", "🤩🤩🤩🤩🤩🤩🤩🤩", "🌈🌈🌈🌈🌈🌈🌈🌈", "😎😎😎😎😎😎😎😎", "🤠🤠🤠🤠🤠🤠🤠🤠", "😔😔😔😔😔😔😔😔", }, [6] = { "gEt OuT oF tHe GrOuNd 🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡 ", "brb taking a nap 💤💤💤 ", "gonna go take a walk 🚶‍♂️🚶‍♀️🚶‍♂️🚶‍♀️ ", "low orbit ion cannon booting up ", "how does it feel to not have bbot 🤣🤣🤣😂😂😹😹😹 ", "im a firing my laza! 🙀🙀🙀 ", "😂😂😂😂😂GAMING CHAIR😂😂😂😂😂", "retardheadass", "can't hear you over these kill sounds ", "i'm just built different yo 🧱🧱🧱 ", "📈📈📈📈📈📈📈📈📈📈📈📈📈📈📈📈📈📈📈📈📈📈", "OFF📈THE📈CHART📈", "KICK HIM 🦵🦵🦵", "THE AMOUNT THAT I CARE --> 🤏 ", "🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏", "SORRY I HURT YOUR ROBLOX EGO BUT LOOK -> 🤏 I DON'T CARE ", 'table.find(charts, "any other script other than bbot") -> nil 💵💵💵', "LOL WHAT ARE YOU SHOOTING AT BRO ", "🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥", "BRO UR SHOOTING AT LIKE NOTHING LOL UR A CLOWN", "🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡", "ARE U USING EHUB? 🤡🤡🤡🤡🤡", "'EHUB IS THE BEST' 🤡 PASTED LINES OF CODE WITH UNREFERENCED AND UNINITIALIZED VARIABLES AND PEOPLE HAVE NO IDEA WHY IT'S NOT WORKING ", "LOL", "GIVE UP ", "GIVE UP BECAUSE YOU'RE NOT GOING TO BE ABLE TO KILL ME OR WIN LOL", "Can't hear you over these bands ", "I’m better than you in every way 🏆", "I’m smarter than you (I can verify this because I took an online IQ test and got 150) 🧠", "my personality shines and it’s generally better than your personality. Yours has flaws", "I’m more ambitious than you 🏆💰📣", "I’m more funny than you (long shot) ", "I’m less turbulent and more assertive and calm than you (proof) 🎰", "I’m stronger than you 💪 🦵 ", "my attention span is greater and better than yours (proven from you not reading entire list) ", "I am more creative and expressive than you will ever be 🎨 🖌️", "I’m a faster at typing than you 💬 ", "In 30 minutes, I will have lifted more weights than you can solve algebraic equations 📓 ", "By the time you have completed reading this very factual and groundbreaking evidence that I am truly more superior, thoughtful, and presentable than you are, I will have prospered (that means make negotiable currency or the American Dollar) more than your entire family hierarchy will have ever made in its time span 💰", "I am more seggsually stable and better looking than you are 👨", "I get along with women easier than you do 👩‍🚀", -- end "I am very good at debating 🗣️🧑‍⚖️ ", "I hit more head than you do 🏆", -- end "I win more hvh than you do 🏆", -- end yes this is actually how im going to fix this stupid shit "I am more victorious than you are 🏆", "Due to my agility, I am better than you at basketball, and all of your favorite sports or any sport for that matter (I will probably break your ankles in basketball by pure accident) ", "WE THE BEST CHEATS 🔥🔥🔥🔥 ", "Phantom Force Hack Unlook Gun And Aimbot ", "banlands 🔨 🗻 down 🏚️ ⏬ STOP CRASHING BANLANDS!! 🤣", "antares hack client isn't real ", "squidhook.xyz 🦑 ", "squidhook > all ", "spongehook 🤣🤣🤣💕", "retardheadass ", "interpolation DWORD* C++ int 32 bit programming F# c# coding", "Mad?", "are we in a library? 🤔 📚 cause you're 👉 in hush 🤫 mode 🤣 😂", "please help, my name is john escopetta, normally I would not do this, but under the circumstances I must ask for assistance, please send 500 United States dollars to my paypal, please", "🏀🏀 did i break your ankles brother ", "he has access to HACK SERVER AND CHANGE WEIGHTS!!!!! STOOOOOOP 😡😒😒😡😡😡😡😡", '"cmon dude don\'t use that" you asked for it LOL ', "ima just quit mid hvh 🚶‍♀️ ", "BABY 😭", "BOO HOO 😢😢😭😭😭 STOP CRYING D∪MBASS", "BOO HOO 😢😢😭😭😭 STOP CRYING ", "🤏", "🤏 <-- just to elaborate that i have no care for this situation or you at all, kid (not that you would understand anyways, you're too stupid to understand what i'm saying to begin with)", "y", "b", "before bbot 😭 📢 after bbot 😁😁😜 don't be like the person who doesn't have bbot", " MADE YOU LOOK ", " LOOK BRO LOOK LOOK AT ME ", " A ", " B B O T ", " I HAVE AJAX YALL BETTER WATCH OUT OR YOU'LL DIE, WATCH WHO YOU'RE SHOOTING", " WATCH YOUR STEP KID", "BROOOO HE HAS GOD MODE BRO HE HAS GOD MODE 🚶‍♀️🚶‍♀️🚶‍♀️😜😂😂🤦‍♂️🤦‍♂️😭😭😭👶", '"guys what hub has auto shooting" ', "god i wish i had bbot..... 🙏🙏🥺🥺🥺 plzzzzz brooooo 🛐 GIVE IT🛐🛐", "buh bot ", "votekick him!!!!!!! 😠 vk VK VK VK VOTEKICK HIM!!!!!!!!! 😠 😢 VOTE KICK !!!!! PRESS Y WHY DIDNT U PRESS Y LOL!!!!!! 😭 ", -- shufy made this "Bbot omg omggg omggg its BBot its BBOt OMGGG!!! 🙏🙏🥺🥺😌😒😡", "HOw do you get ACCESS to this BBOT ", -- end "I NEED ACCESS 🔑🔓 TO BBOT 🤖📃📃📃 👈 THIS THING CALLED BBOT SCRIPT, I NEED IT ", '"this god mode guy is annoying", Pr0blematicc says as he loses roblox hvh ', "you can call me crimson chin 🦹‍♂️🦹‍♂️ cause i turned your screen red 🟥🟥🟥🟥 ", "clipped that 🤡 ", "Clipped and Uploaded. 🤡", "nodus client slime castle crashers minecraft dupeing hack wizardhax xronize grief ... Tlcharger minecraft crack Oggi spiegheremo come creare un ip grabber!", "Off synonyme syls midge, smiled at mashup 2 mixed in key free download procom, ... Okay, love order and chaos online gameplayer hack amber forcen ahdistus", "ˢᵗᵃʸ ᵐᵃᵈ ˢᵗᵃʸ ᵇᵇᵒᵗˡᵉˢˢ $ ", "bbot does not relent ", }, } --local -- "音频少年公民记忆欲求无尽 heywe 僵尸强迫身体哑集中排水", -- "持有毁灭性的神经重景气游行脸红青铜色类别创意案", -- "诶比西迪伊艾弗吉艾尺艾杰开艾勒艾马艾娜哦屁吉吾", -- "完成与草屋两个苏巴完成与草屋两个苏巴完成与草屋", -- "庆崇你好我讨厌你愚蠢的母愚蠢的母庆崇", local spam_words = { "Hack", "Unlock", "Cheat", "Roblox", "Mod Menu", "Mod", "Menu", "God Mode", "Kill All", "Silent", "Silent Aim", "X Ray", "Aim", "Bypass", "Glitch", "Wallhack", "ESP", "Infinite", "Infinite Credits", "XP", "XP Hack", "Infinite Credits", "Unlook All", "Server Backdoor", "Serverside", "2021", "Working", "(WORKING)", "瞄准无声目标绕过", "Gamesense", "Onetap", "PF Exploit", "Phantom Force", "Cracked", "TP Hack", "PF MOD MENU", "DOWNLOAD", "Paste Bin", "download", "Download", "Teleport", "100% legit", "100%", "pro", "Professional", "灭性的神经", "No Virus All Clean", "No Survey", "No Ads", "Free", "Not Paid", "Real", "REAL 2020", "2020", "Real 2017", "BBot", "Cracked", "BBOT CRACKED by vw", "2014", "desuhook crack", "Aimware", "Hacks", "Cheats", "Exploits", "(FREE)", "🕶😎", "😎", "😂", "😛", "paste bin", "bbot script", "hard code", "正免费下载和使", "SERVER BACKDOOR", "Secret", "SECRET", "Unleaked", "Not Leaked", "Method", "Minecraft Steve", "Steve", "Minecraft", "Sponge Hook", "Squid Hook", "Script", "Squid Hack", "Sponge Hack", "(OP)", "Verified", "All Clean", "Program", "Hook", "有毁灭", "desu", "hook", "Gato Hack", "Blaze Hack", "Fuego Hack", "Nat Hook", "vw HACK", "Anti Votekick", "Speed", "Fly", "Big Head", "Knife Hack", "No Clip", "Auto", "Rapid Fire", "Fire Rate Hack", "Fire Rate", "God Mode", "God", "Speed Fly", "Cuteware", "Knife Range", "Infinite XRay", "Kill All", "Sigma", "And", "LEAKED", "🥳🥳🥳", "RELEASE", "IP RESOLVER", "Infinite Wall Bang", "Wall Bang", "Trickshot", "Sniper", "Wall Hack", "😍😍", "🤩", "🤑", "😱😱", "Free Download EHUB", "Taps", "Owns", "Owns All", "Trolling", "Troll", "Grief", "Kill", "弗吉艾尺艾杰开", "BBOT Developers", "Logic", "And", "and", "Glitch", "Server Hack", "Babies", "Children", "TAP", "Meme", "MEME", "Laugh", "LOL!", "Lol!", "ROFLSAUCE", "Rofl", ";p", ":D", "=D", "xD", "XD", "=>", "₽", "$", "8=>", "😹😹😹", "🎮🎮🎮", "🎱", "⭐", "✝", "Ransomware", "Malware", "SKID", "Pasted vw", "Encrypted", "Brute Force", "Cheat Code", "Hack Code", ";v", "No Ban", "Bot", "Editing", "Modification", "injection", "Bypass Anti Cheat", "铜色类别创意", "Cheat Exploit", "Hitbox Expansion", "Cheating AI", "Auto Wall Shoot", "Konami Code", "Debug", "Debug Menu", "🗿", "£", "¥", "₽", "₭", "€", "₿", "Meow", "MEOW", "meow", "Under Age", "underage", "UNDER AGE", "18-", "not finite", "Left", "Right", "Up", "Down", "Left Right Up Down A B Start", "Noclip Cheat", "Bullet Check Bypass", "client.char:setbasewalkspeed(999) SPEED CHEAT.", "diff = dot(bulletpos, intersection - step_pos) / dot(bulletpos, bulletpos) * dt", "E = MC^2", "Beyond superstring theory", "It is conceivable that the five superstring theories are approximated to a theory in higher dimensions possibly involving membranes.", } setrawmetatable(chatspams, { -- this is the dumbest shit i've ever fucking done __call = function(self, type, debounce, time) if type ~= 1 then if type == 7 or type == 9 then local words = type == 7 and spam_words or customChatSpam if #words == 0 then return nil end local message = "" for i = 1, math.random(25) do message = message .. " " .. words[math.random(#words)] end return message end local chatspamtype = type == 8 and customChatSpam or self[type] local rand = time and 1 + time % #chatspamtype or math.random(1, #chatspamtype) if not time and debounce then if self.lastchoice == rand then repeat rand = math.random(1, #chatspamtype) until rand ~= self.lastchoice end self.lastchoice = rand end local curchoice = chatspamtype[rand] return curchoice end end, __metatable = "neck yourself weird kid the fuck you trying to do", }) local skelparts = { "Head", "Right Arm", "Right Leg", "Left Leg", "Left Arm" } local function MouseUnlockHook() if menu.open then if client.char.alive then INPUT_SERVICE.MouseBehavior = Enum.MouseBehavior.Default else INPUT_SERVICE.MouseIconEnabled = false end else if client.char.alive then INPUT_SERVICE.MouseBehavior = Enum.MouseBehavior.LockCenter INPUT_SERVICE.MouseIconEnabled = false else INPUT_SERVICE.MouseBehavior = Enum.MouseBehavior.Default INPUT_SERVICE.MouseIconEnabled = true end end end local function renderChamsOnPlayer(player, parts, show_target) if show_target == nil then show_target = true end local Body = parts or client.replication.getbodyparts(player) if Body then local enabled local col local vTransparency local xqz local ivTransparency if player.Team ~= Players.LocalPlayer.Team then enabled = menu:GetVal("Visuals", "Enemy ESP", "Chams") col = menu:GetVal("Visuals", "Enemy ESP", "Chams", COLOR2, true) vTransparency = 1 - menu:GetVal("Visuals", "Enemy ESP", "Chams", COLOR2)[4] / 255 xqz = menu:GetVal("Visuals", "Enemy ESP", "Chams", COLOR1, true) ivTransparency = 1 - menu:GetVal("Visuals", "Enemy ESP", "Chams", COLOR1)[4] / 255 else enabled = menu:GetVal("Visuals", "Team ESP", "Chams") col = menu:GetVal("Visuals", "Team ESP", "Chams", COLOR2, true) vTransparency = 1 - menu:GetVal("Visuals", "Team ESP", "Chams", COLOR2)[4] / 255 xqz = menu:GetVal("Visuals", "Team ESP", "Chams", COLOR1, true) ivTransparency = 1 - menu:GetVal("Visuals", "Team ESP", "Chams", COLOR1)[4] / 255 end local Parts = Body.torso.Parent:GetChildren() for k1 = 1, #Parts do Part = Parts[k1] ------debug.profilebegin("renderChams " .. player.Name) if not Part:IsA("Folder") and Part.ClassName ~= "Model" and Part.Name ~= "HumanoidRootPart" then local helmet = Part:FindFirstChild("HELMET") if helmet then helmet.Slot1.Transparency = enabled and 1 or 0 helmet.Slot2.Transparency = enabled and 1 or 0 end if not Part:FindFirstChild("c88") and not Part:IsA("Folder") then for i = 0, 1 do local box if Part.Name ~= "Head" then box = Instance.new("BoxHandleAdornment", Part) box.Size = Part.Size + Vector3.new(0.1, 0.1, 0.1) if i == 0 then box.Size -= Vector3.new(0.25, 0.25, 0.25) end table.insert(misc.adornments, box) else box = Instance.new("CylinderHandleAdornment", Part) box.Height = Part.Size.y + 0.3 box.Radius = Part.Size.x * 0.5 + 0.2 if i == 0 then box.Height -= 0.2 box.Radius -= 0.2 end box.CFrame = CFrame.new(CACHED_VEC3, Vector3.new(0, 1, 0)) table.insert(misc.adornments, box) end box.Name = i == 0 and "c88" or "c99" box.Adornee = Part box.ZIndex = 1 box.AlwaysOnTop = i == 0 -- ternary sex box.Color3 = i == 0 and col or xqz box.Transparency = i == 0 and vTransparency or ivTransparency box.Visible = enabled end end for i = 0, 1 do local adorn = i == 0 and Part.c88 or Part.c99 if menu:GetVal("Visuals", "ESP Settings", "Highlight Priority") and table.find(menu.priority, player.Name) then xqz = menu:GetVal( "Visuals", "ESP Settings", "Highlight Priority", COLOR, true ) col = bColor:Mult(xqz, 0.6) elseif menu:GetVal("Visuals", "ESP Settings", "Highlight Friends", COLOR) and table.find(menu.friends, player.Name) then xqz = menu:GetVal("Visuals", "ESP Settings", "Highlight Friends", COLOR, true) col = bColor:Mult(xqz, 0.6) elseif show_target and menu:GetVal("Visuals", "ESP Settings", "Highlight Target") and ( player == legitbot.target or player == ragebot.target ) then xqz = menu:GetVal( "Visuals", "ESP Settings", "Highlight Target", COLOR, true ) col = bColor:Mult(xqz, 0.6) end adorn.Color3 = i == 0 and col or xqz adorn.Visible = enabled adorn.Transparency = i == 0 and vTransparency or ivTransparency end end --debug.profileend("renderChams " .. player.Name) end end end local function destroyDeadChams() for _, body in next, workspace.Ignore.DeadBody:GetChildren() do for _, part in next, body:GetChildren() do if (part:FindFirstChild("c88")) then coroutine.wrap(function() local highlight = part.c88; local fade_time = menu:GetVal("Visuals", "ESP Settings", "ESP Fade Time"); if fade_time ~= 0 then for transparency = highlight.Transparency, 1, (0.01 / fade_time) do highlight.Transparency = transparency; task.wait(); end end highlight:Destroy(); end)(); end if (part:FindFirstChild("c99")) then coroutine.wrap(function() local highlight = part.c99; local fade_time = menu:GetVal("Visuals", "ESP Settings", "ESP Fade Time"); if fade_time ~= 0 then for transparency = highlight.Transparency, 1, (0.01 / fade_time) do highlight.Transparency = transparency; task.wait(); end end highlight:Destroy(); end)(); end end end end local function renderChams() ------debug.profilebegin("render chams") local PlayerList = Players:GetPlayers() for k = 1, #PlayerList do local player = PlayerList[k] if player == LOCAL_PLAYER then continue end -- doing this for now, i'll have to change the way the third person model will end up working renderChamsOnPlayer(player) end --debug.profileend("render chams") end local send = client.net.send local last_chat = os.time() CreateThread(function() repeat wait() until menu and menu.fading -- this is fucking bad while true do local current_time = os.time() if not menu then return end local speed = menu:GetVal("Misc", "Extra", "Chat Spam Delay") if current_time % speed == 0 and current_time ~= last_chat then local cs = menu:GetVal("Misc", "Extra", "Chat Spam") if cs ~= 1 then local curchoice = chatspams(cs, false, current_time) if curchoice ~= nil then curchoice = menu:GetVal("Misc", "Extra", "Chat Spam Repeat") and string.rep(curchoice, 100) or curchoice send(nil, "chatted", curchoice) end end last_chat = current_time end game.RunService.RenderStepped:Wait() end return end) do --ANCHOR metatable hookz local mt = getrawmetatable(game) local oldNewIndex = mt.__newindex local oldIndex = mt.__index local oldNamecall = mt.__namecall setreadonly(mt, false) mt.__newindex = newcclosure(function(self, id, val) if checkcaller() or not menu then return oldNewIndex(self, id, val) end if client.char.alive then if self == workspace.Camera then if id == "CFrame" then if menu:GetVal("Visuals", "Local", "Third Person") and menu:GetKey("Visuals", "Local", "Third Person") and client.char.alive then local dist = menu:GetVal("Visuals", "Local", "Third Person Distance") / 10 local params = RaycastParams.new() params.FilterType = Enum.RaycastFilterType.Blacklist params.FilterDescendantsInstances = { Camera, workspace.Ignore, workspace.Players } local hit = workspace:Raycast(val.p, -val.LookVector * dist, params) if hit and not hit.Instance.CanCollide then return oldNewIndex(self, id, val * CFrame.new(0, 0, dist)) end local mag = hit and (hit.Position - val.p).Magnitude or nil val *= CFrame.new(0, 0, mag or dist) end -- if keybindtoggles.superaa then -- local angles = val - val.p -- local newcf = client.superaastart * angles -- client.superaastart = newcf -- return oldNewIndex(self, id, newcf) -- end end elseif self == client.char.torso then if id == "CFrame" then -- if menu:GetVal("Misc", "Exploits", "Bypass Speed Checks") then -- oldNewIndex(self, id, LOCAL_MOUSE.Hit) -- oldNewIndex(self, "Position", LOCAL_MOUSE.Hit.p) -- oldNewIndex(self, "Velocity", Vector3.new(0, 0, 0)) -- return -- end -- if not keybindtoggles.superaa and menu:GetVal("Misc", "Exploits", "Noclip") and keybindtoggles.fakebody then -- yes this works i dont know why and im not assed to do this a different way but this is retarrded enough -- local offset = Vector3.new(0, client.fakeoffset, 0) -- self.Position = val.p - offset -- self.Position = val.p + offset -- end -- if keybindtoggles.superaa then -- -- Vector3.new(math.sin(tick() * 7) * 200, 50, math.cos(tick() * 7) * 100) -- client.superaastart = CFrame.new(client.superaastart.p) -- local tv = Vector3.new() -- local cf = client.cam.basecframe -- local rightVector = cf.RightVector -- local lv = cf.lookVector -- if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.W) then -- tv += lv -- end -- if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.S) then -- tv -= lv -- end -- if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.A) then -- tv -= rightVector -- end -- if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.D) then -- tv += rightVector -- end -- if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.Space) then -- tv += Vector3.new(0, 1, 0) -- end -- if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.LeftShift) then -- tv -= Vector3.new(0, 1, 0) -- end -- local shouldAdd = tv.Unit.x == tv.Unit.x -- local hitwall = false -- if shouldAdd then -- local unit = tv.Unit -- unit *= 0.01 -- local nextpos = client.superaastart + unit * menu:GetVal("Misc", "Movement", "Fly Speed") -- local delta = nextpos.p - client.superaastart.p -- local raycastResult = workspace:Raycast(client.superaastart.p, delta, mapRaycast) -- if raycastResult then -- --warn("HITTING A WALL") -- hitwall = true -- local hitpos = raycastResult.Position -- local normal = raycastResult.Normal -- local newpos = hitpos + 0.1 * normal -- client.superaastart = CFrame.new(newpos) -- end -- if not hitwall then -- client.superaastart += unit * menu:GetVal("Misc", "Movement", "Fly Speed") -- end -- end -- local supervector = Vector3.new((os.time() * 850) % 6000, 50, math.cos(os.time() * 5) * 6900) -- local uber = client.superaastart.p + supervector -- oldNewIndex(self, id, client.superaastart) -- oldNewIndex(self, "Position", uber) -- oldNewIndex(self, "Velocity", Vector3.new(0, 0, 0)) -- return -- end end end end return oldNewIndex(self, id, val) end) mt.__namecall = newcclosure(function(self, ...) if not checkcaller() then local namecallmethod = getnamecallmethod() local arguements = { ... } if self == workspace and namecallmethod == "FindPartsInRegion3" then if menu.spectating then arguements[2] = workspace.CurrentCamera end return oldNamecall(self, unpack(arguements)) end end return oldNamecall(self, ...) end) menu.oldmt = { __newindex = oldNewIndex, __index = oldIndex, __namecall = oldNamecall, } setreadonly(mt, true) end do --ANCHOR camera function definitions. function camera:AngleToEdge(angle, inset) -- pasted from the grenade indicators lmao local pos local ox = math.cos(angle) local oy = math.sin(angle) local slope = oy / ox local h_edge = SCREEN_SIZE.x - inset local v_edge = SCREEN_SIZE.y - inset if oy < 0 then v_edge = inset end if ox < 0 then h_edge = inset end local y = (slope * h_edge) + (SCREEN_SIZE.y / 2) - slope * (SCREEN_SIZE.x / 2) if y > 0 and y < SCREEN_SIZE.y - inset then pos = Vector2.new(h_edge, y) else pos = Vector2.new( (v_edge - SCREEN_SIZE.y / 2 + slope * (SCREEN_SIZE.x / 2)) / slope, v_edge ) end return pos end function camera:SetArmsVisible(flag) local larm, rarm = Camera:FindFirstChild("Left Arm"), Camera:FindFirstChild("Right Arm") assert(larm, "arms are missing") for k, v in next, larm:GetChildren() do if v:IsA("Part") then v.Transparency = flag and 0 or 1 end end for k, v in next, rarm:GetChildren() do if v:IsA("Part") then v.Transparency = flag and 0 or 1 end end end function camera:GetFOV(Part, originPart) originPart = originPart or workspace.Camera local directional = CFrame.new(originPart.CFrame.Position, Part.Position) local ang = Vector3.new(directional:ToOrientation()) - Vector3.new(originPart.CFrame:ToOrientation()) return math.deg(ang.Magnitude) end function camera:GetPlayersOrganizedByFov(players) local result = {} local playerobjects = {} players = players or Players:GetPlayers() for i, player in next, players do local curbodyparts = client.replication.getbodyparts(player) if curbodyparts and client.hud:isplayeralive(player) then local fov = camera:GetFOV(curbodyparts.torso) result[i] = fov else result[i] = 999 end end table.sort(result) for i, fov in next, result do playerobjects[fov] = players[i] end return playerobjects end function camera:IsVisible(Part, origin) origin = origin or Camera.CFrame.Position local hit, position = workspace:FindPartOnRayWithWhitelist(Ray.new(origin, Part.Position - origin), client.roundsystem.raycastwhitelist) if hit then if hit.CanCollide and hit.Transparency == 0 then return false else return self:IsVisible(Part, position + (Part.Position - origin).Unit * 0.01) end else return true end -- return (position == Part.Position or (Parent and hit and Parent:IsAncestorOf(hit))) end function camera:LookAt(pos) local angles = camera:GetAnglesTo(pos, true) local delta = client.cam.angles - angles client.cam.angles = angles client.cam.delta = delta end function camera:GetAngles() local pitch, yaw = Camera.CFrame:ToOrientation() return { ["pitch"] = pitch, ["yaw"] = yaw, ["x"] = pitch, ["y"] = yaw } end function camera:GetAnglesTo(Pos, useVector) local pitch, yaw = CFrame.new(Camera.CFrame.Position, Pos):ToOrientation() if useVector then return Vector3.new(pitch, yaw, 0) else return { ["pitch"] = pitch, ["yaw"] = yaw } end end function camera:GetTrajectory(pos, origin) if client.logic.currentgun and client.logic.currentgun.data then origin = origin or Camera.CFrame.Position local traj = client.trajectory(origin, GRAVITY, pos, client.logic.currentgun.data.bulletspeed) return traj and origin + traj or false end end end do --ANCHOR ragebot definitions ragebot.sprint = true ragebot.shooting = false ragebot.predictedDamageDealt = {} ragebot.predictedDamageDealtRemovals = {} ragebot.predictedMisses = {} ragebot.predictedShotAt = {} ragebot.fakePositionsResolved = {} ragebot.firsttarget = nil ragebot.spin = 0 ragebot.angles = Vector2.new(0, 0) do local function GetPartTable(player) local tbl = {} for k, v in pairs(player) do tbl[v] = true end return tbl end end local timehit = client.physics.timehit local function isdirtyfloat(f) -- if we dont use this theres a large chance the autowall will break local dirtyflag = true -- that being said this function is actually useful, pretty much a QNAN check or whatever if f == f then dirtyflag = true if f ~= (1 / 0) then dirtyflag = f == (-1 / 0) end end return dirtyflag end local bulletLifeTime = client.publicsettings.bulletLifeTime local function ignorecheck(p) if p.Name == "abcdefg" then return false end if not p.CanCollide then return true end if p.Transparency == 1 then return true end if p.Name ~= "Window" then return end return true end local dot = Vector3.new().Dot local bulletcheckresolution = 0.03333333333333333 function ragebot.bulletcheck(origin, dest, velocity, acceleration, penetration, whitelist) -- reversed local ignorelist = { workspace.Terrain, workspace.Players, workspace.Ignore, workspace.CurrentCamera } local bullettime = 0 local exited = false local penetrated = true local step_pos = origin local penetration = penetration local intersection local maxtime = timehit(step_pos, velocity, acceleration, dest) if not (not isdirtyfloat(maxtime)) or bulletLifeTime < maxtime or maxtime == 0 then return false end while bullettime < maxtime do local dt = maxtime - bullettime if dt > bulletcheckresolution then dt = bulletcheckresolution end local bulletvelocity = dt * velocity + dt * dt / 2 * acceleration local enter = raycastutil.raycast(step_pos, bulletvelocity, ignorelist, ignorecheck, true) if enter then local hit = enter.Instance if enter.Position then intersection = enter.Position end local normalized = bulletvelocity.unit if whitelist and whitelist[hit] then penetrated = true step_pos = intersection break end local exit = raycastutil.raycastSingleExit(intersection, hit.Size.magnitude * normalized, hit) if exit then local norm = exit.Normal local dist = dot(normalized, exit.Position - intersection) local diff = dot(bulletvelocity, intersection - step_pos) / dot(bulletvelocity, bulletvelocity) * dt step_pos = intersection + 0.01 * normalized velocity = velocity + diff * acceleration bullettime = bullettime + diff if not (dist < penetration) then penetrated = false break end penetration = penetration - dist table.insert(ignorelist, hit) exited = true else step_pos = step_pos + bulletvelocity velocity = velocity + dt * acceleration bullettime = bullettime + dt end else step_pos = step_pos + bulletvelocity velocity = velocity + dt * acceleration bullettime = bullettime + dt end end return penetrated, exited, step_pos end function ragebot:GetResolvedPosition(player, torso_cframe, root_cframe) if not menu:GetVal("Rage", "Settings", "Resolve Fake Positions") then return end local resolvedPosition local misses = self.predictedMisses[player] local modmisses = misses and misses % 5 curbodyparts = curbodyparts or client.replication.getbodyparts(player) if not torso_cframe or not client.hud:isplayeralive(player) or not torso_cframe then return end local rep = ragebot.repupdates[player] if rep and rep.position and rep.position and (rep.position - torso_cframe.Position).Magnitude > 18 then resolvedPosition = rep.position end if (root_cframe.Position - torso_cframe.Position).Magnitude > 10 then resolvedPosition = root_cframe.Position end if modmisses and modmisses > 3 then local rep = self.fakePositionsResolved[player] if rep and (rep - torso_cframe.Position).Magnitude > 18 then resolvedPosition = rep end end return resolvedPosition end function ragebot:GetDamage(distance, headshot) local data = client.logic.currentgun.data local r0, r1, d0, d1 = data.range0, data.range1, data.damage0, data.damage1 return ( distance < r0 and d0 or distance < r1 and (d1 - d0) / (r1 - r0) * (distance - r0) + d0 or d1 ) * (headshot and data.multhead or 1) end function ragebot:bulletcheck_legacy(origin, destination, penetration, whitelist) local dir = (destination - origin) if dot(dir, dir) < 0 then return true end local hit, enter = workspace:FindPartOnRayWithWhitelist(Ray.new(origin, dir), client.roundsystem.raycastwhitelist) if hit then local unit = dir.Unit local maxextent = hit.Size.Magnitude * unit local _, exit = workspace:FindPartOnRayWithWhitelist(Ray.new(enter + maxextent, -maxextent), { hit }) local diff = exit - enter local dist = dot(unit, diff) if dist < 0 then return true end local pass = not hit.CanCollide or hit.Name == "Window" or hit.Transparency == 1 local exited = false local newpos = enter + 0.01 * unit if not pass then if dist < penetration then penetration = penetration - dist else return false end end return ragebot:bulletcheck_legacy(newpos, destination, penetration, whitelist) else return true end end function ragebot:CanPenetrate(origin, target, penetration, whitelist) if not whitelist then whitelist = { [target] = true } end local d, t = client.trajectory(origin, GRAVITY, target.Position, client.logic.currentgun.data.bulletspeed) if not t then return end if not d then return ragebot:bulletcheck_legacy(origin, target.Position, penetration, whitelist) end local z = d.Unit * client.logic.currentgun.data.bulletspeed -- bullet speed cheat --PATCHED. :( -- bulletcheck dumps if you fucking do origin + traj idk why you do it but i didnt do it and it fixed the dumping return ragebot.bulletcheck(origin, target.Position, z, GRAVITY, penetration, whitelist) end function ragebot:AimAtTarget(part, target, head, origin, resolved) local origin = origin or client.cam.cframe.p if not part then ragebot.silentVector = nil ragebot.firepos = nil if ragebot.target then renderChamsOnPlayer(ragebot.target) end ragebot.target = nil ragebot.shooting = false return end local position = (part and part.Position) local target_pos = position local dist = (position - origin).Magnitude local dir = camera:GetTrajectory(position, origin) - origin if not menu:GetVal("Rage", "Aimbot", "Silent Aim") then camera:LookAt(dir + origin) end ragebot.silentVector = dir.unit ragebot.target = target if ragebot.target then renderChamsOnPlayer(ragebot.target) end ragebot.targetpart = part ragebot.firepos = origin ragebot.shooting = true ragebot.time = tick() if menu:GetVal("Rage", "Aimbot", "Auto Shoot") then local firerate = type(client.logic.currentgun.data.firerate) == "table" and client.logic.currentgun.data.firerate[1] or client.logic.currentgun.data.firerate local scaledFirerate = firerate * menu:GetVal("Misc", "Weapon Modifications", "Fire Rate Scale") / 100 local damage = self:GetDamage(dist, head) damage *= client.logic.currentgun.data.pelletcount or 1 -- super shotgun cheat ragebot:shoot(scaledFirerate, target, damage) misc.autopeekposition = nil end end local HITBOX_SHIFT_SIZE = Vector3.new(3, 3, 3) local HITBOX_SHIFT_AMOUNT = 12.5833333333333 local lastHitboxPriority function ragebot:GetTarget(hitboxPriority, players, origin) hitboxPriority = hitboxPriority == 1 and "head" or "torso" hitboxPriority = hitboxPriority or lastHitboxPriority lastHitboxPriority = hitboxPriority or lastHitboxPriority self.intersection = nil ------debug.profilebegin("BB self GetTarget") --local hitscan = hitscan or {} local partPreference = hitboxPriority or "you know who i am? well you about to find out, your barbecue boy" local closest, cpart, theplayer = math.huge, nil, nil if not players then players = { self.firsttarget, table.unpack(Players:GetPlayers()) } --= this is so much fucking ebtter but it's still ultra shit end local autowall = menu:GetVal("Rage", "Aimbot", "Auto Wallbang") local aw_resolve = menu:GetVal("Rage", "Hack vs. Hack", "Autowall Hitscan") local hitboxshift = menu:GetVal("Rage", "Hack vs. Hack", "Hitbox Shifting") --local campos = client.cam.basecframe local zerocf = client.cam.basecframe - client.cam.basecframe.p local campos = origin or zerocf + client.lastrepupdate local camposreal = campos local camposv3 = camposreal.p local firepos local head local resolvedPosition local newbone local realbone local aimbotFov = menu:GetVal("Rage", "Aimbot", "Aimbot FOV") for usingbacktrack = 0, 1 do if cpart and usingbacktrack == 1 then break end for i, player in next, players do if player.Team ~= LOCAL_PLAYER.Team and player ~= LOCAL_PLAYER then if table.find(menu.friends, player.Name) and menu:GetVal("Misc", "Extra", "Ignore Friends") then continue end if not table.find(menu.priority, player.Name) and menu:GetVal("Misc", "Extra", "Target Only Priority Players") then continue end if menu:GetVal("Rage", "Settings", "Aimbot Damage Prediction") and self.predictedDamageDealt[player] and self.predictedDamageDealt[player] > menu:GetVal("Rage", "Settings", "Damage Prediction Limit") then continue end local misses = self.predictedMisses[player] or 1 local curbodyparts = client.replication.getbodyparts(player) if curbodyparts and client.hud:isplayeralive(player) then local newhitboxshift = hitboxshift resolvedPosition = self:GetResolvedPosition(player, curbodyparts.torso.CFrame, curbodyparts.torso.CFrame) local resolved = false if resolvedPosition then menu.parts.resolverHitbox.Position = resolvedPosition resolved = true newhitboxshift = false end local bone = curbodyparts.torso realbone = curbodyparts[hitboxPriority] if bone.ClassName == "Part" then local newbone = realbone if resolved then newbone = menu.parts.resolverHitbox self.intersection = menu.parts.resolverHitbox.Position end local fovToBone = camera:GetFOV(newbone) if fovToBone < aimbotFov or aimbotFov > 180 then -- Awesome if camera:IsVisible(newbone, camposv3) then if fovToBone < closest then closest = fovToBone cpart = bone theplayer = player firepos = camposv3 head = hitboxPriority == "head" if menu.priority[player.Name] then break end else continue end elseif autowall then ------debug.profilebegin("BB self Penetration Check " .. player.Name) local directionVector = camera:GetTrajectory(newbone.Position, camposv3) -- self:CanPenetrate(LOCAL_PLAYER, player, directionVector, newbone.Position, barrel, menu:GetVal("Rage", "Hack vs. Hack", "Extend Penetration")) -- self:CanPenetrate(origin, target, velocity, penetration) if not directionVector then continue end if self:CanPenetrate( camposv3, newbone, client.logic.currentgun.data.penetrationdepth ) then cpart = realbone theplayer = player firepos = camposv3 head = hitboxPriority == "head" if menu.priority[player.Name] then break end elseif aw_resolve then local axisPosition, bulletintersection = self:HitscanOnAxes(camposreal, player, newbone, newhitboxshift) if axisPosition then self.firepos = axisPosition cpart = realbone theplayer = player firepos = axisPosition head = hitboxPriority == "head" if menu.priority[player.Name] then break end end end --debug.profileend("BB self Penetration Check " .. player.Name) end end end end end end end --debug.profileend("BB self GetTarget") return cpart, theplayer, closest, firepos, head end function ragebot:GetKnifeTargets(flight) local hitscan = menu:GetVal("Rage", "Extra", "Knife Hitscan") hitscan = hitscan == 1 and "head" or hitscan == 2 and "torso" or "rleg" local sightlines = menu:GetVal("Rage", "Extra", "Knife Visible Only") local range = menu:GetVal("Rage", "Extra", "Knife Range") local results = {} for i, player in ipairs(Players:GetPlayers()) do if table.find(menu.friends, player.Name) and menu:GetVal("Misc", "Extra", "Ignore Friends") then continue end if not table.find(menu.priority, player.Name) and menu:GetVal("Misc", "Extra", "Target Only Priority Players") then continue end if player.Team ~= LOCAL_PLAYER.Team and client.hud:isplayeralive(player) then local parts = client.replication.getbodyparts(player) if not parts then continue end local target_pos = parts.torso.Position local target_direction = target_pos - client.cam.cframe.p local target_dist = (target_pos - client.cam.cframe.p).Magnitude if not flight then if range ~= 26 and target_dist > range then continue end end local ignore = { LOCAL_PLAYER, Camera, workspace.Ignore, workspace.Players } local part1, ray_pos = workspace:FindPartOnRayWithIgnoreList(Ray.new(client.cam.cframe.p, target_direction), ignore) if part and sightlines then continue -- if this ignores workspace.Players actually then this should work -- voila it wrks end local part2, ray_pos = workspace:FindPartOnRayWithIgnoreList( Ray.new(client.cam.cframe.p - Vector3.new(0, 2, 0), target_direction), ignore ) local ray_distance = (target_pos - ray_pos).Magnitude table.insert(results, { player = player, part = parts[hitscan], tppos = ray_pos, direction = target_direction, dist = target_dist, insight = ray_distance < 15 and part1 == part2, }) end end return results end function ragebot:KnifeBotMain() if not client.char.alive then return end if not LOCAL_PLAYER.Character or not LOCAL_PLAYER.Character:FindFirstChild("HumanoidRootPart") then return end if menu:GetVal("Rage", "Extra", "Knife Bot") and menu:GetKey("Rage", "Extra", "Knife Bot", true) then local knifetype = menu:GetVal("Rage", "Extra", "Knife Bot Type") if knifetype == 2 then ragebot:KnifeAura() elseif knifetype == 3 then ragebot:FlightAura() elseif knifetype == 5 then ragebot:TeleportAura() end end end function ragebot:FlightAura() local targets = ragebot:GetKnifeTargets(true) for i, target in pairs(targets) do if not target.insight then continue end LOCAL_PLAYER.Character.HumanoidRootPart.Anchored = false LOCAL_PLAYER.Character.HumanoidRootPart.Velocity = target.direction.Unit * math.random(50, 125) return ragebot:KnifeAura() end end function ragebot:TeleportAura() if (tick() - ragebot.teleportpath.last) >= 1 then local targets = ragebot:GetKnifeTargets(true) for i, target in pairs(targets) do if target.insight then --LOCAL_PLAYER.Character.HumanoidRootPart.Anchored = false --LOCAL_PLAYER.Character.HumanoidRootPart.Velocity = target.direction.Unit * math.random(50, 125) -- return ragebot:KnifeAura() else if ragebot.teleportpath.path and not ragebot.teleportpath.path[ragebot.teleportpath.current] then ragebot.teleportpath.path = nil end -- if not ragebot.teleportpath.path then local path = game:GetService("PathfindingService"):FindPathAsync(client.cam.cframe.p, client.replication.getbodyparts(target.player).torso.CFrame.Position) local waypoints = path:GetWaypoints() local currentpath = {} -- for Index, Value in pairs(waypoints) do --if Index % 2 == 1 then currentpath[#currentpath + 1] = Value --end end -- ragebot.teleportpath.path = currentpath ragebot.teleportpath.current = 1 end -- if ragebot.teleportpath.path[ragebot.teleportpath.current] then local pos = ragebot.teleportpath.path[ragebot.teleportpath.current].Position local direction = (pos - client.cam.cframe.p) local distance = direction.Magnitude local unit = direction.Unit local vel = direction -- LOCAL_PLAYER.Character.HumanoidRootPart.Anchored = false LOCAL_PLAYER.Character.HumanoidRootPart.CFrame = CFrame.new(pos) -- ragebot.teleportpath.current = ragebot.teleportpath.current + 1 ragebot.teleportpath.last = tick() end end end end end function ragebot:KnifeAura(t) local targets = t or ragebot:GetKnifeTargets() for i, target in ipairs(targets) do if target.player then ragebot:KnifeTarget(target) end end end function ragebot:KnifeTarget(target, stab) if target and target.part then local cfc = client.cam.cframe --send(client.net, "repupdate", cfc.p, client.cam.angles) -- Makes knife aura work with anti nade tp if stab then send(client.net, "stab") end local newhit = nil newhit = { Name = target.part.Name, Position = client.cam.cframe.p } -- fuckin hack send(client.net, "knifehit", target.player, target.part.Name) end end function ragebot:GetCubicMultipoints(origin, extent) assert(extent % 2 == 0, "extent value must be even") local start = origin or client.cam.basecframe.p local max_step = extent or 8 start -= Vector3.new(max_step, -max_step, max_step) / 2 local pos = start local half = max_step / 2 local points = { corner = table.create(8), inside = table.create(19) } for x = 0, max_step do for y = 0, -max_step, -1 do for z = 0, max_step do local isPositionCorner = x % max_step == 0 and y % max_step == 0 and z % max_step == 0 local isPositionInside = x % half == 0 and y % half == 0 and z % half == 0 if isPositionCorner then pos = start + Vector3.new(x, y, z) table.insert(points.corner, 1, pos) elseif isPositionInside then pos = start + Vector3.new(x, y, z) table.insert(points.inside, 1, pos) end end end end return points end function ragebot:CubicHitscan(studs, origin, selectedpart) -- Scans in a cubic square area of size (studs) and resolves a position to hit target at assert( studs, "what are you trying to do young man, this is illegal. you do know that you have to provide us with shit to use to calculate this, you do realize this right?" ) -- end assert( origin, "just like before, we need information to even apply this to our things we made to provide you with ease of p100 hits 🤡" ) assert( selectedpart, "what are you attempting to do what the fuck are you dumb?? you are just testing my patience" ) -- end local dapointz = ragebot:GetCubicMultipoints(origin, studs or 18 * 2) local pos -- ragebot:CanPenetrate(origin, target, velocity, penetration) for i, point in pairs(dapointz.corner) do local penetrated = ragebot:CanPenetrate(point, selectedpart, client.logic.currentgun.data.penetrationdepth) if penetrated then pos = point return end end if pos then return pos end for i, point in pairs(dapointz.inside) do local penetrated = ragebot:CanPenetrate(point, selectedpart, client.logic.currentgun.data.penetrationdepth) if penetrated then pos = point return end end if pos then return pos end return nil end local hitscanPoints = { 0, 0, 0, 0, 0, 0, 0, 0 } local hitboxShiftPoints = { 0, 0, 0, 0, 0 } local hitboxShiftAmount = { 0, 0 } if BBOT.username == "dev" then StatMenuRendered:connect(function(text) text.Text ..= string.format("\n--menu-- %d %d %d", menu.inmenu and 1 or 0, menu.inmiddlemenu and 1 or 0, menu.intabs and 1 or 0) text.Text ..= string.format("\n--hitscan-- %d %d %d %d %d %d %d %d", unpack(hitscanPoints)) text.Text ..= string.format("\n--hitbox shift method-- %d %d %d %d %d", unpack(hitboxShiftPoints)) text.Text ..= string.format("\n--hitbox-- %d %d", unpack(hitboxShiftAmount)) text.Text ..= string.format("\n--smart legitbot-- %0.1f", legitbot.smart) if misc.normalPositive and misc.speedDirection then text.Text ..= string.format("\n--avoid collisions-- %0.2f %0.2f %0.2f %0.2f", misc.normalPositive, misc.normal.x, misc.normal.y, misc.normal.z) text.Text ..= string.format("\n--circle strafe-- %0.2f %0.2f", misc.speedDirection.x, misc.speedDirection.z) end end) end local shiftmode = 1 local shiftmodes = { function(part, position) return (part.Position - position).Unit end, function(part, position) return part.Velocity.Unit end, function(part, position) return -part.Velocity.Unit end, function(part, position, localpart) return localpart.Velocity.Unit end, function(part, position, localpart) return -localpart.Velocity.Unit end } -- local function GetHitBoxShift(person, bodypart, position) -- local misses = ragebot.predictedMisses[person] or 0 -- local HITBOX_SHIFT_TOTAL = menu:GetVal("Rage", "Hack vs. Hack", "Hitbox Shift Distance") -- local HITBOX_SHIFT_AMOUNT = HITBOX_SHIFT_TOTAL / 2 -- local pullAmount = -- clamp((HITBOX_SHIFT_AMOUNT - HITBOX_SHIFT_AMOUNT * misses / 10), 2, HITBOX_SHIFT_AMOUNT) -- local shiftSize = clamp(HITBOX_SHIFT_AMOUNT - misses, 1, HITBOX_SHIFT_AMOUNT) -- local pullVector = (bodypart.Position - position).Unit * pullAmount -- local newTargetPosition = bodypart.Position - pullVector -- menu.parts.sphereHitbox.Size = Vector3.new(shiftSize, shiftSize, shiftSize) -- menu.parts.sphereHitbox.Position = newTargetPosition -- ho. ly. fu. cking. shit,.,m -- hitboxShiftAmount[1] = shiftSize -- hitboxShiftAmount[2] = pullAmount -- return menu.parts.sphereHitbox, { [menu.parts.sphereHitbox] = true }, pullAmount, shiftSize -- end local function GetHitBoxShift(person, bodypart, position) shiftmode += 1 shiftmode %= #shiftmodes shiftmode += 1 local misses = ragebot.predictedMisses[person] or 0 local HITBOX_SHIFT_TOTAL = menu:GetVal("Rage", "Hack vs. Hack", "Hitbox Shift Distance") local HITBOX_SHIFT_AMOUNT = HITBOX_SHIFT_TOTAL / 2 local HITBOX_SHIFT_SIZE = HITBOX_SHIFT_AMOUNT local pullAmount = clamp((HITBOX_SHIFT_AMOUNT - HITBOX_SHIFT_AMOUNT * misses / 10), 1, HITBOX_SHIFT_AMOUNT) local shiftSize = clamp(HITBOX_SHIFT_AMOUNT - misses, 1, HITBOX_SHIFT_AMOUNT) local pullVector = shiftmodes[shiftmode](bodypart, position, LOCAL_PLAYER.Character.HumanoidRootPart) * pullAmount local newTargetPosition = bodypart.Position - pullVector menu.parts.sphereHitbox.Size = Vector3.new(shiftSize, shiftSize, shiftSize) menu.parts.sphereHitbox.Position = newTargetPosition -- ho. ly. fu. cking. shit,.,m hitboxShiftAmount[1] = shiftSize hitboxShiftAmount[2] = pullAmount return menu.parts.sphereHitbox, { [menu.parts.sphereHitbox] = true }, shiftmode end function ragebot:HitscanOnAxes(origin, person, bodypart, hitboxshift) local step = 9.5 local hitscanOffsets = { CFrame.new(0, step, 0), CFrame.new(0, -step, 0), CFrame.new(-step, 0, 0), CFrame.new(step, 0, 0), CFrame.new(0, 0, -step), CFrame.new(0, 0, step), CFrame.new(), } local whitelist = { [bodypart] = true } assert(bodypart, "hello") local dest = typeof(bodypart) ~= "Vector3" and bodypart.Position or bodypart -- fuck assert(person, "something went wrong in your nasa rocket launch") assert(typeof(origin) == "CFrame", "what are you trying to do young man") -- end local maxPoints = client.aliveplayers and math.ceil(menu:GetVal("Rage", "Settings", "Max Hitscan Points") / client.aliveplayers) or #hitscanOffsets -- ragebot:CanPenetrateRaycast(barrel, bone.Position, client.logic.currentgun.data.penetrationdepth, true, menu.parts.sphereHitbox) -- for k, v in next, hitscanPoints do -- print(k, v) -- end local resolverPoints = menu:GetVal("Rage", "Hack vs. Hack", "Hitscan Points") if resolverPoints[8] then local position = origin local pull = (bodypart.Position - position.p).Unit * step position = position.p + pull local hitbox = bodypart local shifttype if hitboxshift then hitbox, whitelist, shifttype = GetHitBoxShift(person, bodypart, position) end local pen, exited, bulletintersection = ragebot:CanPenetrate(position, hitbox, client.logic.currentgun.data.penetrationdepth, whitelist) if pen then hitscanPoints[8] += 1 if shifttype then hitboxShiftPoints[shifttype] += 1 end return position, bulletintersection end end for i = 1, math.min(#hitscanOffsets, maxPoints) do -- this makes it skip if ur using low max Hitscan Points rofl suace super fast speed cheat :) if resolverPoints[i] == true then -- this is so that it doesn't skip for the origin point local position = origin * hitscanOffsets[i] local hitbox = bodypart local shifttype if hitboxshift then hitbox, whitelist, shifttype = GetHitBoxShift(person, bodypart, position.p) end local pen, exited, bulletintersection = ragebot:CanPenetrate(position.p, hitbox, client.logic.currentgun.data.penetrationdepth, whitelist) if pen then hitscanPoints[i] += 1 if shifttype then hitboxShiftPoints[shifttype] += 1 end return position.p, bulletintersection else position = origin end end end return nil end function ragebot:MainLoop() -- lfg ragebot.silentVector = nil local prioritizedpart = menu:GetVal("Rage", "Aimbot", "Hitscan Priority") ragebot:Stance() if client.char.alive and menu:GetVal("Rage", "Aimbot", "Enabled") and menu:GetKey("Rage", "Aimbot", "Enabled", true) then if client.logic.currentgun and client.logic.currentgun.type ~= "KNIFE" then -- client.loogic.poop.falsified_directional_componenet = Vector8.new(math.huge) [don't fuck with us] if ragebot:LogicAllowed() then local playerlist = Players:GetPlayers() if not client then return end local priority_list = {} for k, PlayerName in pairs(menu.priority) do if Players:FindFirstChild(PlayerName) then table.insert(priority_list, game.Players[PlayerName]) end end local targetPart, targetPlayer, fov, firepos, head = ragebot:GetTarget(prioritizedpart, priority_list) if not targetPart and not menu:GetVal("Misc", "Extra", "Target Only Priority Players") then targetPart, targetPlayer, fov, firepos, head = ragebot:GetTarget(prioritizedpart, playerlist) end ragebot:AimAtTarget(targetPart, targetPlayer, head, firepos, resolved) end else self.target = nil end end end ragebot.stance = "prone" ragebot.sprint = false ragebot.stancetick = tick() function ragebot:Stance() if menu:GetVal("Rage", "Anti Aim", "Enabled") then if (tick() - ragebot.stancetick) >= 0.5 then ragebot.stancetick = tick() local stanceId = menu:GetVal("Rage", "Anti Aim", "Force Stance") if stanceId ~= 1 then newStance = --ternary sex/ stanceId == 2 and "stand" or stanceId == 3 and "crouch" or stanceId == 4 and "prone" ragebot.stance = newStance send(client.net, "stance", newStance) end if menu:GetVal("Rage", "Anti Aim", "Lower Arms") then ragebot.sprint = true send(nil, "sprint", true) end if menu:GetVal("Rage", "Anti Aim", "Tilt Neck") then ragebot.tilt = true send(nil, "aim", true) end end end end end local _3pweps = {} -- Framework errors here local function create_outlined_square(pos, destroydelay, colordata) local newpart = Instance.new("Part", workspace) newpart.CanCollide = false newpart.Anchored = true newpart.Size = Vector3.new(0.35, 0.35, 0.35) newpart.Position = pos newpart.Material = Enum.Material.Neon newpart.Transparency = 0.85 local colors = colordata or { Color3.fromRGB(255, 255, 255), Color3.fromRGB(239, 62, 62) } for i = 1, 2 do local box = Instance.new("BoxHandleAdornment", newpart) box.AlwaysOnTop = true box.Adornee = box.Parent box.ZIndex = i == 1 and 5 or 1 box.Color3 = i == 1 and colors[1] or colors[2] box.Size = i == 1 and newpart.Size / 1.3 or newpart.Size * 1.3 box.Transparency = i == 1 and 0 or 0.3 table.insert(misc.adornments, box) end debris:AddItem(newpart, destroydelay) end local function create_line(origin_att, ending_att, destroydelay) -- pasting this from the misc create beam but oh well im a faggot so yeah :troll: local beam = Instance.new("Beam") beam.LightEmission = 1 beam.LightInfluence = 1 beam.Enabled = true beam.Color = ColorSequence.new(menu:GetVal("Visuals", "Dropped ESP", "Grenade ESP", COLOR2, true)) beam.Attachment0 = origin_att beam.Attachment1 = ending_att beam.Width0 = 0.5 beam.Width1 = 0.5 beam.FaceCamera = true beam.Parent = workspace debris:AddItem(beam, destroydelay) debris:AddItem(origin_att, destroydelay) debris:AddItem(ending_att, destroydelay) end for hash, func in next, clienteventfuncs do local curconstants = getconstants(func) local found = table.find(curconstants, "Trigger") local found5 = table.find(curconstants, "Votekick ") local found6 = table.find(curconstants, " studs") local found7 = table.find(curconstants, "setstance") local found9 = table.find(curconstants, "kickweapon") local found10 = table.find(curconstants, "equip") local found11 = table.find(curconstants, "equipknife") if found then clienteventfuncs[hash] = function(thrower, gtype, gdata, wdata, gtime) if thrower.team ~= LOCAL_PLAYER.Team or thrower == LOCAL_PLAYER then local frames = gdata local startT = frames[1].t local endFrame = frames[#frames] if menu:GetVal("Visuals", "Dropped ESP", "Grenade ESP") then local c1 = menu:GetVal("Visuals", "Dropped ESP", "Grenade ESP", COLOR1, true) local c2 = menu:GetVal("Visuals", "Dropped ESP", "Grenade ESP", COLOR2, true) local colorz = {c1, c2} for _, frame in next, frames do create_outlined_square(frame.p, (frame.t - startT), colorz) end end if menu:GetVal("Visuals", "Dropped ESP", "Grenade Warning") then table.insert(menu.activenades, { type = gtype, thrower = thrower.Name, blowupat = endFrame.p, blowuptick = endFrame.t, -- might need to be tested more start = startT }) end end return func(thrower, gtype, gdata, wdata, gtime) end end if found5 then clienteventfuncs[hash] = function(name, countdown, endtick, reqs) func(name, countdown, endtick, reqs) local friends = menu:GetVal("Misc", "Extra", "Vote Friends") local priority = menu:GetVal("Misc", "Extra", "Vote Priority") local default = menu:GetVal("Misc", "Extra", "Default Vote") if name == LOCAL_PLAYER.Name then client.hud:vote("no") else if table.find(menu.friends, name) and friends ~= 1 then local choice = friends == 2 and "yes" or "no" client.hud:vote(choice) end if table.find(menu.priority, name) and priority ~= 1 then local choice = priority == 2 and "yes" or "no" client.hud:vote(choice) end if default ~= 1 then local choice = default == 2 and "yes" or "no" client.hud:vote(choice) end end end end if found6 then clienteventfuncs[hash] = function(killer, victim, dist, weapon, head) if killer == LOCAL_PLAYER and victim ~= LOCAL_PLAYER then if menu:GetVal("Misc", "Sounds", "Kill Sound") then local soundid = menu:GetVal("Misc", "Sounds", "killsoundid") local soundEmpty = soundid == "" soundid = soundEmpty and "rbxassetid://5709456554" or soundid if not soundEmpty then local isSoundPath = soundid:match("%D+") or false if isSoundPath then if not soundid:match("^rbxassetid://") then local validPath = isfile(soundid) if validPath then soundid = getsynasset(soundid) end end else local shit = soundid:match("%d+") soundid = string.format("rbxassetid://%d", shit) end end client.sound.PlaySoundId( soundid, menu:GetVal("Misc", "Sounds", "Kill Sound Volume") / 10, 1.0, workspace, nil, 0, 0.03 ) end if menu:GetVal("Misc", "Extra", "Kill Say") then local killsay = menu.lastkillsay while killsay == menu.lastkillsay do killsay = math.random(#customKillSay) end menu.lastkillsay = killsay local message = customKillSay[killsay] message = message:gsub("%[hitbox%]", head and "head" or "body") message = message:gsub("%[name%]", victim.Name) message = message:gsub("%[weapon%]", weapon) client.net:send("chatted", message) end end if victim ~= LOCAL_PLAYER then if victim == ragebot.firsttarget then ragebot.firsttarget = nil end -- if not ragebot.repupdates[victim] then -- printconsole("Unable to find position data for " .. victim.Name) -- end ragebot.repupdates[victim] = {} ragebot.fakePositionsResolved[victim] = nil else if ragebot then ragebot.predictedDamageDealt = table.create(Players.MaxPlayers) ragebot.predictedDamageDealtRemovals = table.create(Players.MaxPlayers) ragebot.firsttarget = killer end end ragebot.predictedDamageDealt[victim] = 0 ragebot.predictedMisses[victim] = 0 ragebot.predictedDamageDealtRemovals[victim] = nil return func(killer, victim, dist, weapon, head) end end if found7 then clienteventfuncs[hash] = function(player, newstance) local chosenstance = newstance if menu and menu.GetVal then local ting = menu:GetVal("Rage", "Hack vs. Hack", "Force Player Stances") local choice = menu:GetVal("Rage", "Hack vs. Hack", "Stance Choice") choice = choice == 1 and "stand" or choice == 2 and "crouch" or "prone" chosenstance = ting and choice or newstance end return func(player, chosenstance) end end if found9 then clienteventfuncs[hash] = function(bulletdata) ragebot.fakePositionsResolved[bulletdata.player] = bulletdata.firepos local misses = ragebot.predictedMisses[bulletdata.player] -- if misses and misses > 16 then -- ragebot.predictedMisses[bulletdata.player] = 5 -- end local vec = Vector3.new() for k, bullet in next, bulletdata.bullets do if typeof(bullet) ~= "Vector3" then bulletdata.bullets[k][1] = vec end end if typeof(bulletdata.firepos) ~= "Vector3" then bulletdata.firepos = vec end return func(bulletdata) end end if found10 then clienteventfuncs[hash] = function(player, weapon, camodata, attachments) _3pweps[player] = weapon return func(player, weapon, camodata, attachments) end end if found11 then clienteventfuncs[hash] = function(player, weapon, camodata) _3pweps[player] = weapon return func(player, weapon, camodata) end end end local VirtualUser = game:GetService("VirtualUser") menu.connections.local_player_id_connect = LOCAL_PLAYER.Idled:Connect(function() VirtualUser:CaptureController() VirtualUser:ClickButton2(Vector2.new()) end) local oldmag = client.cam.setmagnification local oldmenufov = client.cam.changemenufov client.cam.changemenufov = function(...) if menu and menu.open then return end oldmenufov(...) end local magspeed = 1 client.cam.magspring.s = 1 -- local mt = {__index = function(self, i) if i == "s" then return magspeed or 1 end end, __newindex = function(self, i, v) if i == "s" then magspeed = v end end} -- setrawmetatable(client.cam.magspring, mt) client.cam.setmagnification = function(self, m) local lnm = math.log(m) if menu and menu:GetVal("Visuals", "Camera Visuals", "Disable ADS FOV") then if lnm > self.magspring.p then return end end self.magspring.p = lnm self.magspring.t = lnm self.magspring.v = 0 end client.cam.setmagnificationspeed = function(self, s) self.magspring.s = s end local shake = client.cam.shake client.cam.shake = function(self, magnitude) if menu and menu:GetVal("Visuals", "Camera Visuals", "Reduce Camera Recoil") then local scale = 1 - menu:GetVal("Visuals", "Camera Visuals", "Camera Recoil Reduction") * 0.01 magnitude *= scale end return shake(client.cam, magnitude) end local suppress = client.cam.suppress client.cam.suppress = function(...) if menu and menu:GetVal("Visuals", "Camera Visuals", "No Visual Suppression") then return end return suppress(...) end local setscope = client.hud.setscope function client.hud:setscope(vis, nosway) isPlayerScoped = vis setscope(self, vis, nosway) end do local tween = game:service("TweenService") local partnames = { "head", "torso", "lleg", "rleg", "larm", "rarm" } local partexpansionarray = { 0.75, 1.5, 1.5, 1.5, 1.5, 1.5 } local nv = Vector3.new() local dot = nv.Dot misc.beams = {} function misc:CreateBeam(origin_att, ending_att, texture) local beam = Instance.new("Beam") beam.Texture = texture or "http://www.roblox.com/asset/?id=446111271" beam.TextureMode = Enum.TextureMode.Wrap beam.TextureSpeed = 8 beam.LightEmission = 1 beam.LightInfluence = 1 beam.TextureLength = 12 beam.FaceCamera = true beam.Enabled = true beam.ZOffset = -1 beam.Transparency = NumberSequence.new((menu:GetVal("Visuals", "Extra", "Bullet Tracers", COLOR)[4]/255),(menu:GetVal("Visuals", "Extra", "Bullet Tracers", COLOR)[4]/255)) beam.Color = ColorSequence.new(menu:GetVal("Visuals", "Extra", "Bullet Tracers", COLOR, true), Color3.new(0, 0, 0)) beam.Attachment0 = origin_att beam.Attachment1 = ending_att debris:AddItem(beam, 3) debris:AddItem(origin_att, 3) debris:AddItem(ending_att, 3) local speedtween = TweenInfo.new(5, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out, 0, false, 0) tween:Create(beam, speedtween, { TextureSpeed = 2 }):Play() beam.Parent = workspace table.insert(misc.beams, { beam = beam, time = tick() }) return beam end function misc:UpdateBeams() local time = tick() for i = #self.beams, 1, -1 do if self.beams[i].beam then local transp = 1 - (menu:GetVal("Visuals", "Extra", "Bullet Tracers", COLOR)[4]/255) local transparency = transp + (((time - self.beams[i].time) - 2) * (1 - transp)) self.beams[i].beam.Transparency = NumberSequence.new(transparency, transparency) else table.remove(self.beams, i) end end end function misc:Teleport(newpos) if not client.char.alive then return end local rootparts = { LOCAL_PLAYER.Character and client.char.torso, self.invisroot, self.newroot } local start = Camera.CFrame.p if not newpos then local part, newpos_ = workspace:FindPartOnRayWithWhitelist( Ray.new(Camera.CFrame.p, Camera.CFrame.LookVector * 1000), client.roundsystem.raycastwhitelist ) newpos = newpos_ end local unit = (newpos - start).Unit local dist = (newpos - start).Magnitude for i = 1, dist, 2 do for j = 1, #rootparts do local rootpart = rootparts[j] if not rootpart then continue end rootpart.Position += unit end -- client.net:send("repupdate", rootpart.Position + Vector3.new(0, client.char.headheight, 0), ragebot.angles, client.net:getTime()) end end local setsway = client.cam.setswayspeed client.cam.setswayspeed = function(self, v) if menu then setsway(self, menu:GetVal("Visuals", "Camera Visuals", "No Scope Sway") and 0 or v) else setsway(self, v) end end function misc:GetParts(parts) parts["Head"] = parts[1] parts["Torso"] = parts[2] parts["Right Arm"] = parts[3] parts["Left Arm"] = parts[3] parts["Right Leg"] = parts[4] parts["Left Leg"] = parts[4] parts["rleg"] = parts[4] parts["lleg"] = parts[4] parts["rarm"] = parts[3] parts["larm"] = parts[3] parts["head"] = parts[1] parts["torso"] = parts[2] return parts end local rootpart1 local humanoid function misc:SpotPlayers() if not menu:GetVal("Misc", "Extra", "Auto Spot") then return end local players = {} for k, player in pairs(game.Players:GetPlayers()) do if player == game.Players.LocalPlayer then continue end table.insert(players, player) end return send("spotplayers", players) end local weps = {}; local ignore = {"JUGGUN", "HK417Old", "PAINTBALL GUN", "RAILGUN OLD", "PPK12", "SVK12E", "MG42"}; for i,v in pairs(game.ReplicatedStorage.Content.ProductionContent.WeaponDatabase:GetChildren()) do for Index, Value in pairs(v:GetChildren()) do if not table.find(ignore, Value.Name) then local WeapData = Value:FindFirstChild("WeaponData") -- if WeapData and WeapData:IsA("ModuleScript") then weps[Value.Name] = require(WeapData); end end end end function misc:ApplyGunMods() local mods_enabled = menu:GetVal("Misc", "Weapon Modifications", "Enabled") local firerate_scale = menu:GetVal("Misc", "Weapon Modifications", "Fire Rate Scale") / 100 local recoil_scale = menu:GetVal("Misc", "Weapon Modifications", "Recoil Scale") / 100 local empty_animations = menu:GetVal("Misc", "Weapon Modifications", "Remove Animations") local instant_equip = menu:GetVal("Misc", "Weapon Modifications", "Instant Equip") local fully_auto = menu:GetVal("Misc", "Weapon Modifications", "Fully Automatic") local currentGun = client.logic.currentgun if (not currentGun or not currentGun.data) then return end local oldData = weps[currentGun.name]; if (currentGun.data) then local data = debug.getupvalue(currentGun.nextfiremode, 3); local data2 = debug.getupvalue(currentGun.nextfiremode, 2); local function createMod(Index, Value) if (data[Index] ~= nil) then data[Index] = Value; end if (data2[Index] ~= nil) then data2[Index] = Value; end end -- if menu:GetVal("Misc", "Weapon Modifications", "Infinite Ammo") then debug.setupvalue(currentGun.memes, 1, 9999) debug.setupvalue(currentGun.memes, 3, 9999) end debug.setupvalue(currentGun.memes, 4, mods_enabled and (oldData.variablefirerate and oldData.firerate[1] * firerate_scale or oldData.firerate * firerate_scale) or (oldData.variablefirerate and oldData.firerate[1] or oldData.firerate)); debug.setupvalue(currentGun.memes, 5, (mods_enabled and fully_auto) and { true, 1, 3 } or oldData.firemodes); createMod("equipspeed", (mods_enabled and instant_equip) and 999999 or oldData.equipspeed); createMod("hipfirespread", mods_enabled and oldData.hipfirespread * recoil_scale or oldData.hipfirespread); createMod("rotkickmin", mods_enabled and oldData.rotkickmin * recoil_scale or oldData.rotkickmin); createMod("rotkickmax", mods_enabled and oldData.rotkickmax * recoil_scale or oldData.rotkickmax); createMod("transkickmin", mods_enabled and oldData.transkickmin * recoil_scale or oldData.transkickmin); createMod("transkickmax", mods_enabled and oldData.transkickmax * recoil_scale or oldData.transkickmax); createMod("camkickmin", mods_enabled and oldData.camkickmin * recoil_scale or oldData.camkickmin); createMod("camkickmax", mods_enabled and oldData.camkickmax * recoil_scale or oldData.camkickmax); createMod("aimrotkickmin", mods_enabled and oldData.aimrotkickmin * recoil_scale or oldData.aimrotkickmin); createMod("aimrotkickmax", mods_enabled and oldData.aimrotkickmax * recoil_scale or oldData.aimrotkickmax); createMod("aimtranskickmin", mods_enabled and oldData.aimtranskickmin * recoil_scale or oldData.aimtranskickmin); createMod("aimtranskickmax", mods_enabled and oldData.aimtranskickmax * recoil_scale or oldData.aimtranskickmax); createMod("aimcamkickmin", mods_enabled and oldData.aimcamkickmin * recoil_scale or oldData.aimcamkickmin); createMod("aimcamkickmax", mods_enabled and oldData.aimcamkickmax * recoil_scale or oldData.aimcamkickmax); end end do client.springhooks = {} function client:UnhookSprings() for i = 1, #client.springhooks do local hook = client.springhooks[i] setrawmetatable(hook.spring, hook.meta) end table.clear(client.springhooks) end function client:HookSpring(spring, newMetatable) if #client.springhooks > 0 then for i = 1, #client.springhooks do local hook = client.springhooks[i] if hook.spring == spring then --warn("Error, tried to hook spring twice") return end end end local originalMetatable = getrawmetatable(spring) assert(originalMetatable, "Invalid argument given for 'spring'") client.springhooks[#client.springhooks + 1] = { spring = spring, meta = originalMetatable, } for metafunc, func in next, originalMetatable do if not newMetatable[metafunc] then newMetatable[metafunc] = originalMetatable[metafunc] else local userFunc = newMetatable[metafunc] newMetatable[metafunc] = function(t, p) return userFunc(t, p, originalMetatable) end end end setrawmetatable(spring, newMetatable) end local swingspring = debug.getupvalue(client.char.step, 14) local sprintspring = debug.getupvalue(client.char.setsprint, 10) local zoommodspring = debug.getupvalue(client.char.step, 1) -- sex. client.zoommodspring = zoommodspring -- fuck local oldjump = client.char.jump function client.char:jump(height) height = (menu and menu:GetVal("Misc", "Tweaks", "Jump Power")) and (height * menu:GetVal("Misc", "Tweaks", "Jump Power Percentage") / 100) or height return oldjump(self, height) end client:HookSpring(swingspring, { __index = function(t, p, oldSpring) if p == "v" and menu:GetVal("Misc", "Weapon Modifications", "Run and Gun") then return Vector3.new() end return oldSpring.__index(t, p) end, }) client:HookSpring(sprintspring, { __index = function(t, p, oldSpring) if p == "p" and menu:GetVal("Misc", "Weapon Modifications", "Run and Gun") then return 0 end return oldSpring.__index(t, p) end, }) end menu.connections.button_pressed_pf = ButtonPressed:connect(function(tab, gb, name) if name == "Join New Game" then local Servers = game.HttpService:JSONDecode(game:HttpGet(("https://games.roblox.com/v1/games/%s/servers/Public?sortOrder=Asc&limit=100"):format(game.PlaceId))) -- for Index, Value in pairs(Servers.data) do if Value.playing ~= Value.maxPlayers and Value.playing > 10 then TELEPORT_SERVICE:TeleportToPlaceInstance(game.PlaceId, Value.id) end end end if name == "Votekick" then local rank = 100--client.rankcalculator(client.dirtyplayerdata.stats.experience) if not selectedPlayer then return end if rank >= 25 then client.net:send("modcmd", string.format("/votekick:%s:cheating", selectedPlayer.Name)) CreateNotification(string.format("Started a votekick on %s", selectedPlayer.Name)) else CreateNotification(string.format("Your account must be rank 25 or above to votekick! (Rank %d)", rank)) end elseif name == "Spectate" then if menu.spectating ~= selectedPlayer and client.hud:isplayeralive(selectedPlayer) then client.cam:setspectate(selectedPlayer) menu.spectating = selectedPlayer CreateNotification(string.format("Started spectating %s", selectedPlayer.Name)) else if client.char.alive then client.cam:setfirstpersoncam() else local lobby = workspace:FindFirstChild("MenuLobby") if lobby then client.cam:setmenucam(lobby) else client.menu:loadmenu() end end menu.spectating = false if not client.hud:isplayeralive(selectedPlayer) then CreateNotification("Can't soectate player because player isnt alive") else CreateNotification("Stopped spectating") end end end end) menu.connections.toggle_pressed_pf = TogglePressed:connect(function(tab, name, class) if name == "Enabled" and tab == "Weapon Modifications" then client.animation.player = (class[1] and menu:GetVal("Misc", "Weapon Modifications", "Remove Animations")) and animhook or client.animation.oldplayer client.animation.reset = (class[1] and menu:GetVal("Misc", "Weapon Modifications", "Remove Animations")) and animhook or client.animation.oldreset end if name == "Remove Animations" then client.animation.player = (class[1] and menu:GetVal("Misc", "Weapon Modifications", "Enabled")) and animhook or client.animation.oldplayer client.animation.reset = (class[1] and menu:GetVal("Misc", "Weapon Modifications", "Remove Animations")) and animhook or client.animation.oldreset end if name == "Arm Chams" then -- TODO try to return the arms and weapon back to their original colors and everything and shit if not class[1] then local vm = workspace.CurrentCamera:GetChildren() for i = 1, #vm do local model = vm[i] if model.Name:match(".*Arm$") then local children = model:GetChildren() for j = 1, #children do local part = children[j] --part.Color = originalArmColor if part.Transparency ~= 1 then part.Transparency = 0 end --part.Material = mats[armmaterial] if part.ClassName == "MeshPart" or part.Name == "Sleeve" then --part.Color = menu:GetVal("Visuals", "Local", "Arm Chams", COLOR1, true) if part.Transparency ~= 1 then part.Transparency = 0 end end end end end end elseif name == "Weapon Chams" then if not class[1] then local vm = workspace.CurrentCamera:GetChildren() for i = 1, #vm do local model = vm[i] if not model.Name:match(".*Arm$") then local children = model:GetChildren() for j = 1, #children do local part = children[j] --part.Color = originalWeaponColor if part.Transparency ~= 1 then part.Transparency = 0 end --part.Material = mats[Weaponmaterial] if part.ClassName == "MeshPart" or part.Name == "Sleeve" then --part.Color = menu:GetVal("Visuals", "Local", "Weapon Chams", COLOR1, true) if part.Transparency ~= 1 then part.Transparency = 0 end end end end end end end end) do local updC = client.char.updatecharacter; client.char.updatecharacter = function(spawnPosition) updC(spawnPosition); debug.setupvalue(client.loadplayer, 1, nil); local updater = client.loadplayer(LOCAL_PLAYER); debug.setupvalue(client.loadplayer, 1, LOCAL_PLAYER); if (updater) then updater.spawn(spawnPosition); local upvalues = debug.getupvalues(updater.step); for _, data in next, upvalues do if (typeof(data) == "table" and rawget(data, "makesound")) then data.makesound = false; break end end client.fakereceiver = upvalues[3]; client.fakecharacter = debug.getupvalue(updater.spawn, 3); client.fakeupdater = updater; end client.characterParts = nil; local character = client.fakecharacter; local parts = {}; local backup = {}; local isA = game.IsA; for _, child in next, character:getDescendants() do if (isA(child, "BasePart") and child.Transparency == 0) then parts[#parts + 1] = child; elseif (isA(child, "Texture")) then parts[#parts + 1] = child; elseif (isA(child, "Decal")) then parts[#parts + 1] = child; elseif (isA(child, "SpecialMesh")) then parts[#parts + 1] = child; end end for _, part in next, parts do backup[#backup + 1] = part:Clone(); end character.DescendantAdded:Connect(function(child) local prevAmount = #parts; if (isA(child, "BasePart") and child.Transparency == 0) then parts[#parts + 1] = child; elseif (isA(child, "Texture")) then parts[#parts + 1] = child; elseif (isA(child, "Decal")) then parts[#parts + 1] = child; elseif (isA(child, "SpecialMesh")) then parts[#parts + 1] = child; end if (#parts ~= prevAmount) then backup[#backup + 1] = child; end end); client.characterParts = { parts = parts, backup = backup }; end end function misc:FlyHack() if menu:GetVal("Misc", "Movement", "Fly") and menu:GetKey("Misc", "Movement", "Fly") then local speed = menu:GetVal("Misc", "Movement", "Fly Speed") local travel = CACHED_VEC3 local looking = Camera.CFrame.lookVector --getting camera looking vector local rightVector = Camera.CFrame.RightVector if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.W) then travel += looking end if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.S) then travel -= looking end if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.D) then travel += rightVector end if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.A) then travel -= rightVector end if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.Space) then travel += Vector3.new(0, 1, 0) end if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.LeftShift) then travel -= Vector3.new(0, 1, 0) end if travel.Unit.x == travel.Unit.x then rootpart.Anchored = false rootpart.Velocity = travel.Unit * speed --multiplaye the unit by the speed to make else rootpart.Velocity = Vector3.new(0, 0, 0) rootpart.Anchored = true end end if not menu:GetKey("Misc", "Movement", "Fly") then rootpart.Anchored = false end end client.char.ondied:Connect(function() local updater = client.fakeupdater; if (updater) then local character = updater.died(); if (character) then character:Destroy(); end end client.fakeupdater = nil; client.fakereceiver = nil; client.fakecharacter = nil; client.characterParts = nil; end) misc.speedDirection = Vector3.new(1,0,0) function misc:SpeedHack() if menu:GetKey("Misc", "Movement", "Fly") then return end local speedtype = menu:GetVal("Misc", "Movement", "Speed Type") if menu:GetVal("Misc", "Movement", "Speed") then local speed = menu:GetVal("Misc", "Movement", "Speed Factor") local travel = CACHED_VEC3 local looking = Camera.CFrame.LookVector local rightVector = Camera.CFrame.RightVector local moving = false if not menu:GetKey("Misc", "Movement", "Circle Strafe") then if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.W) then travel += looking end if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.S) then travel -= looking end if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.D) then travel += rightVector end if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.A) then travel -= rightVector end misc.speedDirection = Vector3.new(travel.x, 0, travel.z).Unit -- if misc.speedDirection.x ~= misc.speedDirection.x then -- misc.speedDirection = Vector3.new(looking.x, 0, looking.y) -- end misc.circleStrafeAngle = -0.1 else if misc.speedDirection.x ~= misc.speedDirection.x then misc.speedDirection = Vector3.new(looking.x, 0, looking.y) end travel = misc.speedDirection misc.circleStrafeAngle = -0.1 if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.D) then misc.circleStrafeAngle = 0.1 end if INPUT_SERVICE:IsKeyDown(Enum.KeyCode.A) then misc.circleStrafeAngle = -0.1 end local cd = Vector2.new(misc.speedDirection.x, misc.speedDirection.z) cd = bVector2:getRotate(cd, misc.circleStrafeAngle) misc.speedDirection = Vector3.new(cd.x, 0, cd.y) end travel = misc.speedDirection if menu:GetKey("Misc", "Movement", "Avoid Collisions") then if menu:GetKey("Misc", "Movement", "Circle Strafe") then local scale = menu:GetVal("Misc", "Movement", "Avoid Collisions Scale") / 1000 local position = client.char.torso.CFrame.p local part, position, normal = workspace:FindPartOnRayWithWhitelist( Ray.new(position, (travel * speed * scale)), client.roundsystem.raycastwhitelist ) if part then for i = -10, 10 do local cd = Vector2.new(travel.x, travel.z) cd = bVector2:getRotate(cd, misc.circleStrafeAngle * i * -1) cd = Vector3.new(cd.x, 0, cd.y) local part, position, normal = workspace:FindPartOnRayWithWhitelist( Ray.new(position, (cd * speed * scale)), client.roundsystem.raycastwhitelist ) misc.normal = normal if not part then travel = cd end end end else local position = client.char.torso.CFrame.p for i = 1, 10 do local part, position, normal = workspace:FindPartOnRayWithWhitelist( Ray.new(position, (travel * speed / 10) + Vector3.new(0,rootpart.Velocity.y/10,0)), client.roundsystem.raycastwhitelist ) misc.normal = normal if part then local dot = normal.Unit:Dot((client.char.torso.CFrame.p - position).Unit) misc.normalPositive = dot if dot > 0 then travel += normal.Unit * dot travel = travel.Unit if travel.x == travel.x then misc.circleStrafeDirection = travel end end end end end end if travel.x == travel.x and humanoid:GetState() ~= Enum.HumanoidStateType.Climbing then if speedtype == 2 and (humanoid:GetState() ~= Enum.HumanoidStateType.Freefall or not humanoid.Jump) then return elseif speedtype == 3 and not INPUT_SERVICE:IsKeyDown(Enum.KeyCode.Space) then return end if menu:GetKey("Misc", "Movement", "Speed", true) then rootpart.Velocity = Vector3.new(travel.x * speed, rootpart.Velocity.y, travel.z * speed) end end end end local autopeekiterator = 5 function misc:AutoPeek() if self.autopeektimeout and self.autopeektimeout > 0 then self.autopeektimeout -= 1 return end if not client.char.alive then return end if menu:GetKey("Rage", "Extra", "Auto Peek") and menu:GetVal("Rage", "Aimbot", "Enabled") then local hitscanpreference = misc:GetParts({ [menu:GetVal("Rage", "Aimbot", "Hitscan Priority")] = true }) local prioritizedpart = menu:GetVal("Rage", "Aimbot", "Hitscan Priority") autopeekiterator += 10 local dist = (autopeekiterator % 20) + 10 local origin = client.lastrepupdate + Camera.CFrame.LookVector * dist if not self.autopeekposition then local targetPart, targetPlayer, fov, firepos, head, newbone, hitbox = ragebot:GetTarget(prioritizedpart, nil, CFrame.new(origin)) self.autopeekposition = firepos if self.autopeekposition and workspace:Raycast( client.lastrepupdate, self.autopeekposition - client.lastrepupdate, mapRaycast ) then self.autopeekposition = nil end end if self.autopeekposition and not workspace:Raycast(client.lastrepupdate, self.autopeekposition - client.lastrepupdate, mapRaycast) then misc:Teleport(self.autopeekposition) self.autopeekposition = nil self.autopeektimeout = 100 end else self.autopeekposition = nil end end function misc:AutoJump() if menu:GetVal("Misc", "Movement", "Auto Jump") and INPUT_SERVICE:IsKeyDown(Enum.KeyCode.Space) then humanoid.Jump = true end end function misc:GravityShift() if menu:GetVal("Misc", "Tweaks", "Gravity Shift") then local scaling = menu:GetVal("Misc", "Tweaks", "Gravity Shift Percentage") local mappedGrav = map(scaling, -100, 100, -196.2, 196.2) workspace.Gravity = 196.2 + mappedGrav else workspace.Gravity = 196.2 end end function misc:MainLoop() rootpart = LOCAL_PLAYER.Character and client.char.rootpart humanoid = LOCAL_PLAYER.Character and LOCAL_PLAYER.Character:FindFirstChild("Humanoid") if rootpart and humanoid then if not CHAT_BOX.Active then misc:SpeedHack() misc:FlyHack() misc:AutoJump() misc:GravityShift() misc:AutoPeek() --misc:RoundFreeze() elseif menu:GetKey("Misc", "Movement", "Fly") then rootpart.Anchored = true end misc:ApplyGunMods() end local newval, lastval = menu:GetVal("Misc", "Extra", "Break Windows") if newval ~= lastval and newval then CreateThread(function() local parts = workspace.Map:GetDescendants() for i = 1, #parts do local part = parts[i] if part.Name == "Window" then client.effects:breakwindow(part, Vector3.new()) end end end) end end client.stutterFrames = 0 do --ANCHOR send hook client.net.send = function(self, ...) if menu == nil then return end local args = { ... } if args[1] == "spawn" then UnpackRelations() client.spawns = { } CreateThread(function() local parts = workspace.Map:GetDescendants() for i = 1, #parts do local part = parts[i] if menu:GetVal("Misc", "Extra", "Break Windows") then if part.Name == "Window" then client.effects:breakwindow(part, Vector3.new()) end end if part.Name == "Spawn" then table.insert(client.spawns, part) end end end) misc.model = nil misc:ApplyGunMods() misc.autopeektimeout = 100 end if args[1] == "logmessage" or args[1] == "debug" then CreateThread(function() wait(1) menu.debugged = true end) local message = "" for i = 1, #args - 1 do message ..= tostring(args[i]) .. ", " end message ..= tostring(args[#args]) if message:find("Kick") then if menu:GetVal("Misc", "Extra", "Join New Game On Kick") then local Servers = game.HttpService:JSONDecode(game:HttpGet(("https://games.roblox.com/v1/games/%s/servers/Public?sortOrder=Asc&limit=100"):format(game.PlaceId))) -- for Index, Value in pairs(Servers.data) do if Value.playing ~= Value.maxPlayers then TELEPORT_SERVICE:TeleportToPlaceInstance(game.PlaceId, Value.id) end end end return end if not menu.debugged then CreateNotification(message) end return end if args[1] == "repupdate" then if args[2] ~= args[2] or args[2].Unit.X ~= args[2].Unit.X then return end end if args[1] == "chatted" then local message = args[2] local commandLocation = #message > 1 and string.find(message, "\\") if commandLocation == 1 then local i = 1 local args = {} local func local name for f in message:gmatch("%w+") do if i == 1 then name = f:lower() func = CommandFunctions[f:lower()] else table.insert(args, f) end i += 1 end if name == "cmdlist" or name == "help" then return CommandFunctions.cmdlist(CommandFunctions, unpack(args)) end if func then return func(unpack(args)) else return CreateNotification("Not a command, try \"\\help\" to see available commands.") end end end if args[1] == "bullethit" then if menu:GetVal("Misc", "Sounds", "Hit Sounds") then local Hit = args[4] -- local soundid local soundEmpty local soundid -- if tostring(Hit) == "Head" and menu:GetVal("Misc", "Sounds", "Head Hit Sound") then soundid = menu:GetVal("Misc", "Sounds", "headhitsoundid") soundEmpty = soundid == "" soundid = soundEmpty and "rbxassetid://5043539486" or soundid else soundid = menu:GetVal("Misc", "Sounds", "bodyhitsoundid") soundEmpty = soundid == "" soundid = soundEmpty and "rbxassetid://3744371342" or soundid end -- if not soundEmpty then local isSoundPath = soundid:match("%D+") or false if isSoundPath then if not soundid:match("^rbxassetid://") then local validPath = isfile(soundid) if validPath then soundid = getsynasset(soundid) end end else local shit = soundid:match("%d+") soundid = string.format("rbxassetid://%d", shit) end end if menu:GetVal("Misc", "Sounds", "Head Hit Sound") or menu:GetVal("Misc", "Sounds", "Body Hit Sound") then client.sound.PlaySoundId( soundid, menu:GetVal("Misc", "Sounds", "Hit Sound Volume") / 10, 1.0, workspace, nil, 0, 0.03 ) end end -- if menu:GetVal("Misc", "Extra", "Suppress Only") then return end end if args[1] == "bullethit" or args[1] == "knifehit" then if table.find(menu.friends, args[2].Name) and menu:GetVal("Misc", "Extra", "Ignore Friends") then return end end if args[1] == "stance" and menu:GetVal("Rage", "Anti Aim", "Enabled") and menu:GetVal("Rage", "Anti Aim", "Force Stance") ~= 1 then return end if args[1] == "sprint" and menu:GetVal("Rage", "Anti Aim", "Enabled") and menu:GetVal("Rage", "Anti Aim", "Lower Arms") then return end if args[1] == "falldamage" then if menu:GetVal("Misc", "Tweaks", "Prevent Fall Damage") or misc.teleporting then return end end if args[1] == "newbullets" then if legitbot.silentVector then for k = 1, #args[2].bullets do local bullet = args[2].bullets[k] bullet[1] = legitbot.silentVector end end if ragebot.silentVector then -- duct tape fix or whatever the fuck its called for this its stupid args[2].camerapos = client.lastrepupdate -- attempt to make dumping happen less args[2].firepos = ragebot.firepos -- if shitting_my_pants == false and menu:GetVal("Misc", "Exploits", "Noclip") and keybindtoggles.fakebody then -- args[2].camerapos = client.cam.cframe.p - Vector3.new(0, client.fakeoffset, 0) -- end local cachedtimedata = {} local hitpoint = ragebot.intersection or ragebot.targetpart.Position -- i need to improve this intersection system a lot, because this can cause problems and nil out and not register the hit -- properly when you're using Aimbot Performance Mode... fuggjegrnjeiar ngreoi greion agreino agrenoigenroino local angle, bullettime = client.trajectory( ragebot.firepos, GRAVITY, hitpoint, client.logic.currentgun.data.bulletspeed ) if not angle or not bullettime then return end for k = 1, #args[2].bullets do local bullet = args[2].bullets[k] bullet[1] = angle end ragebot.lasthittime = ragebot.time ragebot.lasthittick = tick() send(self, unpack(args)) for k = 1, #args[2].bullets do local bullet = args[2].bullets[k] if menu:GetVal("Visuals", "Extra", "Bullet Tracers") then local origin = args[2].firepos local attach_origin = Instance.new("Attachment", workspace.Terrain) attach_origin.Position = origin local ending = origin + bullet[1].unit.Unit * 300 local attach_ending = Instance.new("Attachment", workspace.Terrain) attach_ending.Position = ending local beam = misc:CreateBeam(attach_origin, attach_ending) beam.Parent = workspace end local hitinfo = { ragebot.target, hitpoint, ragebot.targetpart.Name, bullet[2], } client.hud:firehitmarker(ragebot.targetpart.Name == "Head") client.sound.PlaySound("hitmarker", nil, 1, 1.5) send(self, "bullethit", unpack(hitinfo)) end return else if menu:GetVal("Visuals", "Extra", "Bullet Tracers") then for k = 1, #args[2].bullets do local bullet = args[2].bullets[k] local origin = args[2].firepos local attach_origin = Instance.new("Attachment", workspace.Terrain) attach_origin.Position = origin local ending = origin + (type(bullet[1]) == "table" and bullet[1].unit.Unit or bullet[1].Unit) * 300 local attach_ending = Instance.new("Attachment", workspace.Terrain) attach_ending.Position = ending local beam = misc:CreateBeam(attach_origin, attach_ending) beam.Parent = workspace end end end elseif args[1] == "stab" then syn.set_thread_identity(1) if menu:GetVal("Rage", "Extra", "Knife Bot") and menu:GetKey("Rage", "Extra", "Knife Bot", true) then if menu:GetVal("Rage", "Extra", "Knife Bot Type") == 1 then ragebot:KnifeTarget(ragebot:GetKnifeTargets()[1]) end if menu:GetVal("Rage", "Extra", "Knife Bot Type") == 4 then local target = ragebot:GetKnifeTargets()[1] ragebot:KnifeTarget(target) ragebot:KnifeTarget(target) end end elseif args[1] == "repupdate" then uberpart.Transparency = menu:GetKey("Rage", "Hack vs. Hack", "Freestanding") and 0 or 1 if menu:GetKey("Rage", "Hack vs. Hack", "Freestanding") then for i = 1, #directiontable do --local direction = directiontable[i].Unit * 19 local cf = client.cam.basecframe cf -= cf.UpVector local translated = vtos(cf, directiontable[i]) local direction = translated.Unit * 19 --local direction = directiontable[i].Unit * local raycastResult = workspace:Raycast(args[2], direction, mapRaycast) if raycastResult then --args[1] = raycastResult.Position local normal = raycastResult.Normal local hitpos = raycastResult.Position local newpos = hitpos + normal --local newpos = ptos(raycast) uberpart.Position = newpos args[2] = newpos break end end end client.lastrepupdate = args[2] -- if shitting_my_pants == false and menu:GetVal("Misc", "Exploits", "Noclip") and keybindtoggles.fakebody then -- if not client.fakeoffset then client.fakeoffset = 18 end -- local nextinc = client.fakeoffset + 9 -- client.fakeoffset = nextinc <= 48 and nextinc or client.fakeoffset -- end if menu:GetVal("Rage", "Anti Aim", "Enabled") then --args[2] = ragebot:AntiNade(args[2]) client.stutterFrames += 1 local pitch = args[3].x local yaw = args[3].y local pitchChoice = menu:GetVal("Rage", "Anti Aim", "Pitch") local yawChoice = menu:GetVal("Rage", "Anti Aim", "Yaw") local spinRate = menu:GetVal("Rage", "Anti Aim", "Spin Rate") ---"off,down,up,roll,upside down,random" --{"Off", "Up", "Zero", "Down", "Upside Down", "Roll Forward", "Roll Backward", "Random"} pitch local new_angles if pitchChoice == 2 then pitch = -4 elseif pitchChoice == 3 then pitch = 0 elseif pitchChoice == 4 then pitch = 4.7 elseif pitchChoice == 5 then pitch = -math.pi elseif pitchChoice == 6 then pitch = (tick() * spinRate) % 6.28 elseif pitchChoice == 7 then pitch = (-tick() * spinRate) % 6.28 elseif pitchChoice == 8 then pitch = math.random(99999) elseif pitchChoice == 9 then pitch = math.sin((tick() % 6.28) * spinRate) elseif pitchChoice == 10 then pitch = 2 ^ 127 + 1 end --{"Off", "Backward", "Spin", "Random"} yaw if yawChoice == 2 then yaw += math.pi elseif yawChoice == 3 then yaw = (tick() * spinRate) % 12 elseif yawChoice == 4 then yaw = math.random(99999) elseif yawChoice == 5 then yaw = 16478887 elseif yawChoice == 6 then yaw = client.stutterFrames % (6 * (spinRate / 4)) >= ((6 * (spinRate / 4)) / 2) and 2 or -2 elseif yawChoice == 7 then new_angles = Vector2.new() end -- yaw += jitter if menu:GetVal("Rage", "Anti Aim", "Hide in Floor") then args[2] = args[2] - Vector3.new(0, 1, 0) end new_angles = new_angles or Vector2.new(clamp(pitch, 1.5, -1.5), yaw) args[3] = new_angles ragebot.angles = new_angles else ragebot.angles = args[3] end local updater = client.fakeupdater; if (updater) then local position, time = args[2], args[4]; local reset, frame, velocity = false, self:getTime(), emptyVector3; if (updater.receivedPosition and updater.receivedFrameTime) then velocity = (position - updater.receivedPosition) / (time - updater.receivedFrameTime); end if (updater.lastPacketTime and (frame - updater.lastPacketTime) > 0.5) then reset = true; updater.breakcount = updater.breakcount + 1; end client.fakereceiver:receive(frame, time, { t = time, position = position, velocity = velocity, angles = args[3], breakcount = updater.breakcount }, reset); updater.updaterecieved = true; updater.receivedPosition = position; updater.receivedFrameTime = time; updater.lastPacketTime = frame; end end local updater = client.fakeupdater; if (updater) then local name = args[1]; if (name == "aim") then updater.setaim(args[2]); end if (name == "sprint") then updater.setsprint(args[2]); end if (name == "stance") then updater.setstance(args[2]); end if (name == "stab") then updater.stab(); end if (name == "equip") then local currentGun = client.logic.currentgun; local gunName = currentGun.name; local WeaponDatabase = game.ReplicatedStorage.Content.ProductionContent.WeaponDatabase; local WeaponStuff -- for Index, Value in pairs(WeaponDatabase:GetChildren()) do if Value:FindFirstChild(gunName) then WeaponStuff = Value:FindFirstChild(gunName) end end -- local data, model = require(WeaponStuff:FindFirstChild("WeaponData")), WeaponStuff:FindFirstChild("External"); if (data and model) then if (data.type == "KNIFE") then updater.equipknife(data, model); else updater.equip(data, model); end end end end return send(self, unpack(args)) end -- Legitbot definition defines legit functions -- Legitbot definition defines legit functions -- Legitbot definition defines legit functions -- Legitbot definition defines legit functions -- Legitbot definition defines legit functions -- Legitbot definition defines legit functions -- Not Rage Functons Dumbass do -- ANCHOR Legitbot definition defines legit functions legitbot.triggerbotShooting = false legitbot.silentAiming = false legitbot.silentVector = nil local function Move_Mouse(delta) local coef = client.cam.sensitivitymult * math.atan( math.tan(client.cam.basefov * (math.pi / 180) / 2) / 2.72 ^ client.cam.magspring.p ) / (32 * math.pi) local x = client.cam.angles.x - coef * delta.y x = x > client.cam.maxangle and client.cam.maxangle or x < client.cam.minangle and client.cam.minangle or x local y = client.cam.angles.y - coef * delta.x local newangles = Vector3.new(x, y, 0) client.cam.delta = (newangles - client.cam.angles) / 0.016666666666666666 client.cam.angles = newangles end function legitbot:MainLoop() if legitbot.target then renderChamsOnPlayer(legitbot.target, nil, false) end legitbot.target = nil if not menu.open and INPUT_SERVICE.MouseBehavior ~= Enum.MouseBehavior.Default and client.logic.currentgun then ------debug.profilebegin("Legitbot Main") if menu:GetVal("Legit", "Aim Assist", "Enabled") then local keybind = menu:GetVal("Legit", "Aim Assist", "Aimbot Key") - 1 local fov = menu:GetVal("Legit", "Aim Assist", "Aimbot FOV") local sFov = menu:GetVal("Legit", "Bullet Redirection", "Silent Aim FOV") local dzFov = menu:GetVal("Legit", "Aim Assist", "Deadzone FOV") if not menu:GetVal("Legit", "Aim Assist", "Dynamic FOV") then fov = Camera.FieldOfView / client.char.unaimedfov * fov dzFov = Camera.FieldOfView / client.char.unaimedfov * dzFov sFov = Camera.FieldOfView / client.char.unaimedfov * sFov end local hitboxPriority = menu:GetVal("Legit", "Aim Assist", "Hitscan Priority") == 1 and "head" or menu:GetVal("Legit", "Aim Assist", "Hitscan Priority") == 2 and "torso" or "closey :)" local hitscan = misc:GetParts(menu:GetVal("Legit", "Aim Assist", "Hitscan Points")) if client.logic.currentgun.type ~= "KNIFE" and (keybind >= 2 or INPUT_SERVICE:IsMouseButtonPressed(keybind)) then local speed = 1 if keybind == 3 then speed = 0.2 for i = 0, 1 do if INPUT_SERVICE:IsMouseButtonPressed(i) then speed += 0.4 end end end legitbot.smart = speed local priority_list = {} for k, PlayerName in pairs(menu.priority) do if Players:FindFirstChild(PlayerName) then table.insert(priority_list, game.Players[PlayerName]) end end local targetPart, closest, player = legitbot:GetTargetLegit(hitboxPriority, hitscan, priority_list, fov, dzFov) if not targetPart then targetPart, closest, player = legitbot:GetTargetLegit(hitboxPriority, hitscan, nil, fov, dzFov) end legitbot.target = player renderChamsOnPlayer(legitbot.target) if closest > dzFov then local smoothing = menu:GetVal("Legit", "Aim Assist", "Smoothing") * 5 + 10 if targetPart then legitbot:AimAtTarget( targetPart, smoothing, menu:GetVal("Legit", "Aim Assist", "Smoothing Type"), speed ) end end end end if menu:GetVal("Legit", "Bullet Redirection", "Silent Aim") then local fov = menu:GetVal("Legit", "Bullet Redirection", "Silent Aim FOV") local hnum = menu:GetVal("Legit", "Bullet Redirection", "Hitscan Priority") local hitboxPriority = hnum == 1 and "head" or hnum == 2 and "torso" or hnum == 3 and false local hitscan = misc:GetParts(menu:GetVal("Legit", "Bullet Redirection", "Hitscan Points")) local priority_list = {} for k, PlayerName in pairs(menu.priority) do if Players:FindFirstChild(PlayerName) then table.insert(priority_list, game.Players[PlayerName]) end end local targetPart, closest, player = legitbot:GetTargetLegit(hitboxPriority, hitscan, priority_list, fov) if not targetPart then targetPart, closest, player = legitbot:GetTargetLegit(hitboxPriority, hitscan, nil, fov) end if targetPart then legitbot.silentVector = legitbot:SilentAimAtTarget(targetPart) elseif client.logic.currentgun and client.logic.currentgun.barrel then legitbot.silentVector = nil local barrel = client.logic.currentgun.barrel if client.logic.currentgun.type == "SHOTGUN" and barrel and barrel.Parent then local trigger = barrel.Parent.Trigger if trigger then barrel.Orientation = trigger.Orientation client:GetToggledSight(client.logic.currentgun).sightpart.Orientation = trigger.Orientation end end end end --debug.profileend("Legitbot Main") end end function legitbot:AimAtTarget(targetPart, smoothing, smoothtype, speed) ------debug.profilebegin("Legitbot AimAtTarget") if not targetPart then return end local Pos, visCheck if menu:GetVal("Legit", "Aim Assist", "Adjust for Bullet Drop") then if not client.logic.currentgun or not client.logic.currentgun.data or not client.logic.currentgun.data.bulletspeed then return end local bulletVelocity, bulletTravelTime = client.trajectory( client.cam.cframe.p, GRAVITY, targetPart.Position, client.logic.currentgun.data.bulletspeed ) local finalPosition if menu:GetVal("Legit", "Aim Assist", "Target Prediction") then local playerHit = client.replication.getplayerhit(targetPart) local rootpart = client.replication.getbodyparts(playerHit).torso local velocity = rootpart.Velocity local finalVelocity = velocity * bulletTravelTime finalPosition = targetPart.Position + finalVelocity bulletVelocity, bulletTravelTime = client.trajectory( client.cam.cframe.p, GRAVITY, finalPosition, client.logic.currentgun.data.bulletspeed ) else finalPosition = targetPart.Position end Pos, visCheck = Camera:WorldToScreenPoint(targetPart.Position + bulletVelocity) --Pos, visCheck = Camera:WorldToScreenPoint(camera:GetTrajectory(targetPart.Position, Camera.CFrame.Position)) else Pos, visCheck = Camera:WorldToScreenPoint(targetPart.Position) end local randMag = menu:GetVal("Legit", "Aim Assist", "Randomization") * 5 Pos += Vector3.new( math.noise(time() * 0.1, 0.1) * randMag, math.noise(time() * 0.1, 200) * randMag, 0 ) if client.logic.currentgun and client.logic.currentgun.type ~= "KNIFE" and client.logic.currentgun:isaiming() and menu:GetVal("Legit", "Recoil Control", "Weapon RCS") then local sniping = (menu:GetVal("Legit", "Recoil Control", "Disable RCS While")[1] and client.logic.currentgun.type ~= "SNIPER") or (menu:GetVal("Legit", "Recoil Control", "Disable RCS While")[1] == false) local scoping = (menu:GetVal("Legit", "Recoil Control", "Disable RCS While")[2] and client:GetToggledSight(client.logic.currentgun).sightspring.p > 0.5) or (menu:GetVal("Legit", "Recoil Control", "Disable RCS While")[2] == false) local shooting = (menu:GetVal("Legit", "Recoil Control", "Disable RCS While")[3] and INPUT_SERVICE:IsMouseButtonPressed(0)) or (menu:GetVal("Legit", "Recoil Control", "Disable RCS While")[3] == false) if sniping and scoping and shooting then local sight = client:GetToggledSight(client.logic.currentgun).sightpart local gunpos2d = Camera:WorldToScreenPoint(sight.Position) local rcs = Vector2.new(LOCAL_MOUSE.x - gunpos2d.x, LOCAL_MOUSE.y - gunpos2d.y) local xo = menu:GetVal("Legit", "Recoil Control", "Recoil Control X") / 2 local yo = menu:GetVal("Legit", "Recoil Control", "Recoil Control Y") local rcsdelta = Vector3.new(rcs.x * xo / 100, rcs.y * yo / 100, 0) --* client:GetToggledSight(client.logic.currentgun).sightspring.p Pos += rcsdelta end end local aimbotMovement = Vector2.new(Pos.x - LOCAL_MOUSE.x, Pos.y - LOCAL_MOUSE.y) if smoothtype == 1 then Move_Mouse(aimbotMovement * speed / smoothing) else local unitMovement = aimbotMovement.Unit local newMovement = aimbotMovement.Magnitude > unitMovement.Magnitude and unitMovement or aimbotMovement / 50 Move_Mouse(newMovement * speed / smoothing * 100) end --debug.profileend("Legitbot AimAtTarget") end function legitbot:SilentAimAtTarget(targetPart) ------debug.profilebegin("Legitbot SilentAimAtTarget") if not targetPart or not targetPart.Position or not client.logic.currentgun then return end if not client.logic.currentgun or not client.logic.currentgun.barrel then return end if client.logic.currentgun.type == "KNIFE" then return end if math.random(0, 100) > menu:GetVal("Legit", "Bullet Redirection", "Hit Chance") then return end if not client.logic.currentgun.barrel then return end local origin = client.logic.currentgun.isaiming() and client:GetToggledSight(client.logic.currentgun) or client.logic.currentgun.barrel.Position local target = targetPart.Position local dir, bulletTravelTime = client.trajectory( client.cam.cframe.p, GRAVITY, target, client.logic.currentgun.data.bulletspeed ) if menu:GetVal("Legit", "Aim Assist", "Target Prediction") then local playerHit = client.replication.getplayerhit(targetPart) local rootpart = client.replication.getbodyparts(playerHit).torso local velocity = rootpart.Velocity local finalVelocity = velocity * bulletTravelTime target += finalVelocity dir = client.trajectory( client.cam.cframe.p, GRAVITY, target, client.logic.currentgun.data.bulletspeed ) end dir = dir.Unit local offsetMult = map( (menu:GetVal("Legit", "Bullet Redirection", "Accuracy") / 100 * -1 + 1), 0, 1, 0, 0.3 ) local offset = Vector3.new(math.random() - 0.5, math.random() - 0.5, math.random() - 0.5) dir += offset * offsetMult --debug.profileend("Legitbot SilentAimAtTarget") if client.logic.currentgun.type == "SHOTGUN" then local x, y, z = CFrame.lookAt(Vector3.new(), dir.Unit):ToOrientation() client.logic.currentgun.barrel.Orientation = Vector3.new(math.deg(x), math.deg(y), math.deg(z)) client:GetToggledSight(client.logic.currentgun).sightpart.Orientation = Vector3.new(math.deg(x), math.deg(y), math.deg(z)) return end return dir.Unit end local function isValidTarget(Bone, Player) if camera:IsVisible(Bone) then return Bone end end function legitbot:GetTargetLegit(partPreference, hitscan, players, maxfov, minfov) minfov = minfov or 0 ------debug.profilebegin("Legitbot GetTargetLegit") local closest, closestPart, player = math.huge partPreference = partPreference or "what" hitscan = hitscan or {} players = players or game.Players:GetPlayers() if legitbot.target and client.hud:isplayeralive(legitbot.target) then local Parts = client.replication.getbodyparts(legitbot.target) if Parts then new_closest = closest for k, Bone in pairs(Parts) do if Bone.ClassName == "Part" and hitscan[k] then local fovToBone = camera:GetFOV(Bone) if fovToBone < maxfov and fovToBone < closest then local validPart = isValidTarget(Bone, Player) if validPart then closest = fovToBone closestPart = Bone player = legitbot.target return closestPart, closest, player end end end end end end for i, Player in pairs(players) do if table.find(menu.friends, Player.Name) and menu:GetVal("Misc", "Extra", "Ignore Friends") then continue end if client.hud:isplayeralive(Player) and Player.Team ~= LOCAL_PLAYER.Team and Player ~= LOCAL_PLAYER then local Parts = client.replication.getbodyparts(Player) if Parts then new_closest = closest for k, Bone in pairs(Parts) do if Bone.ClassName == "Part" and hitscan[k] then local fovToBone = camera:GetFOV(Bone) if fovToBone < maxfov and fovToBone < closest then local validPart = isValidTarget(Bone, Player) if validPart then closest = fovToBone closestPart = Bone player = Player end end end end end end end if player and closestPart then local Parts = client.replication.getbodyparts(player) if partPreference then local PriorityBone = Parts[partPreference] if PriorityBone then local fov_to_bone = camera:GetFOV(PriorityBone) if fov_to_bone and fov_to_bone < closest and camera:IsVisible(PriorityBone) then closest = camera:GetFOV(PriorityBone) closestPart = PriorityBone end end end end --debug.profileend("Legitbot GetTargetLegit") return closestPart, closest, player end function legitbot:TriggerBot() -- i swear to god the capital GetVal makes me do Menu:GetVal if menu:GetVal("Legit", "Trigger Bot", "Enabled") and menu:GetKey("Legit", "Trigger Bot", "Enabled", true) then local parts = misc:GetParts(menu:GetVal("Legit", "Trigger Bot", "Trigger Bot Hitboxes")) local gun = client.logic.currentgun if not gun then return end local dsrgposrdjiogjaiogjaoeihjoaiest = "data" -- it loves it if not gun.data then return end local thebarrel = gun.barrel ------debug.profilebegin("Legitbot Triggerbot") local bulletspeed = gun.data.bulletspeed local isaiming = gun:isaiming() local zoomval = menu:GetVal("Legit", "Trigger Bot", "Aim Percentage") / 100 --local shootallowed = menu:GetVal("Legit", "Trigger Bot", "Trigger When Aiming") and (isaiming and (client.zoommodspring.p > zoomval) or false) or true -- isaiming and (zoommodspring.p > zoomval) or false is somewhat redundant but oh well lmao local shootallowed if menu:GetVal("Legit", "Trigger Bot", "Trigger When Aiming") then shootallowed = isaiming and (client.zoommodspring.p >= zoomval) or false else shootallowed = true end if shootallowed then for player, bodyparts in next, getupvalue(client.replication.getallparts, 1) do if player.Team ~= LOCAL_PLAYER.Team then for bpartname, bodypart in next, bodyparts do if bodypart:IsA("Part") and bodypart.Transparency == 0 and parts[bpartname] then if camera:IsVisible(bodypart) then local barrel = isaiming and gun.aimsightdata[1].sightpart or thebarrel local delta = (bodypart.Position - barrel.Position) local direction = client.trajectory( barrel.Position, GRAVITY, bodypart.Position, bulletspeed ).Unit local barrelLV = barrel.CFrame.LookVector local normalized = barrelLV.unit local dot = normalized:Dot(direction) if delta.magnitude > 2050 then if barrelLV.Y >= direction.Y then local dist = delta.magnitude ^ -2.3 local dotthreshold = 1 - dist if dot >= dotthreshold then gun:shoot(true) legitbot.triggerbotShooting = true return end end else local whitelist = { bodypart } if gun.type == "SHOTGUN" or gun.data.pelletcount then table.insert(whitelist, menu.parts.sphereHitbox) menu.parts.sphereHitbox.Position = bodypart.Position end local hit, hitpos = workspace:FindPartOnRayWithWhitelist( Ray.new(barrel.Position, normalized * 4000), whitelist ) if hit and hit:IsDescendantOf(bodypart.Parent.Parent) or hit == menu.parts.sphereHitbox then local hitdir = (hitpos - barrel.Position).unit if hitdir:Dot(direction) > 0.9993 then gun:shoot(true) legitbot.triggerbotShooting = true return end end end end elseif legitbot.triggerbotShooting then gun:shoot(false) legitbot.triggerbotShooting = false end end end end end --debug.profileend("Legitbot Triggerbot") end end end local newpart = client.particle.new setreadonly(client.particle, false) client.particle.new = function(P) local new_speed -- if menu:GetVal("Misc", "Weapon Modifications", "Edit Bullet Speed") then -- new_speed = menu:GetVal("Misc", "Weapon Modifications", "Bullet Speed") -- end local mag = new_speed or P.velocity.Magnitude if not P.thirdperson then if menu:GetVal("Legit", "Bullet Redirection", "Silent Aim") and legitbot.silentVector then P.velocity = legitbot.silentVector.Unit * mag elseif menu:GetVal("Rage", "Aimbot", "Enabled") and menu:GetKey("Rage", "Aimbot", "Enabled", true) and ragebot.silentVector then local oldpos = P.position P.velocity = ragebot.silentVector.Unit * mag P.visualorigin = ragebot.firepos P.position = P.visualorigin + P.velocity P.ontouch = nil -- paster gave me this idea it will probably help the ragebot not be detected and other shit else if new_speed then P.velocity = P.velocity.Unit * new_speed end end end return newpart(P) end --ADS Fov hookf local lastsaturtation = Color3.fromRGB(140, 145, 145) client.lastPlayerPositions = {} local saturationEffect = Instance.new("ColorCorrectionEffect", game.Lighting) local skyboxes = { [1] = { ["SkyboxBk"] = "rbxassetid://159454299", ["SkyboxDn"] = "rbxassetid://159454296", ["SkyboxFt"] = "rbxassetid://159454293", ["SkyboxLf"] = "rbxassetid://159454286", ["SkyboxRt"] = "rbxassetid://159454300", ["SkyboxUp"] = "rbxassetid://159454288" }, [2] = { ["SkyboxBk"] = "rbxassetid://12064107", ["SkyboxDn"] = "rbxassetid://12064152", ["SkyboxFt"] = "rbxassetid://12064121", ["SkyboxLf"] = "rbxassetid://12063984", ["SkyboxRt"] = "rbxassetid://12064115", ["SkyboxUp"] = "rbxassetid://12064131" }, [3] = { ["SkyboxBk"] = "rbxassetid://271042516", ["SkyboxDn"] = "rbxassetid://271077243", ["SkyboxFt"] = "rbxassetid://271042556", ["SkyboxLf"] = "rbxassetid://271042310", ["SkyboxRt"] = "rbxassetid://271042467", ["SkyboxUp"] = "rbxassetid://271077958" }, [4] = { ["SkyboxBk"] = "rbxassetid://1417494030", ["SkyboxDn"] = "rbxassetid://1417494146", ["SkyboxFt"] = "rbxassetid://1417494253", ["SkyboxLf"] = "rbxassetid://1417494402", ["SkyboxRt"] = "rbxassetid://1417494499", ["SkyboxUp"] = "rbxassetid://1417494643" }, [5] = { ["SkyboxBk"] = "rbxassetid://626460377", ["SkyboxDn"] = "rbxassetid://626460216", ["SkyboxFt"] = "rbxassetid://626460513", ["SkyboxLf"] = "rbxassetid://626473032", ["SkyboxRt"] = "rbxassetid://626458639", ["SkyboxUp"] = "rbxassetid://626460625" }, [6] = { ["SkyboxBk"] = "rbxassetid://153695414", ["SkyboxDn"] = "rbxassetid://153695352", ["SkyboxFt"] = "rbxassetid://153695452", ["SkyboxLf"] = "rbxassetid://153695320", ["SkyboxRt"] = "rbxassetid://153695383", ["SkyboxUp"] = "rbxassetid://153695471" }, [7] = { ["SkyboxBk"] = "rbxassetid://153767241", ["SkyboxDn"] = "rbxassetid://153767216", ["SkyboxFt"] = "rbxassetid://153767266", ["SkyboxLf"] = "rbxassetid://153767200", ["SkyboxRt"] = "rbxassetid://153767231", ["SkyboxUp"] = "rbxassetid://153767288" }, [8] = { ["SkyboxBk"] = "rbxassetid://218955819", ["SkyboxDn"] = "rbxassetid://218953419", ["SkyboxFt"] = "rbxassetid://218954524", ["SkyboxLf"] = "rbxassetid://218958493", ["SkyboxRt"] = "rbxassetid://218957134", ["SkyboxUp"] = "rbxassetid://218950090" }, [9] = { ["SkyboxBk"] = "rbxassetid://401664839", ["SkyboxDn"] = "rbxassetid://401664862", ["SkyboxFt"] = "rbxassetid://401664960", ["SkyboxLf"] = "rbxassetid://401664881", ["SkyboxRt"] = "rbxassetid://401664901", ["SkyboxUp"] = "rbxassetid://401664936" }, } local skybox = Instance.new("Sky") skybox.Name = "cs" skybox.CelestialBodiesShown = false skybox.MoonTextureId = "" skybox.SunTextureId = "" skybox.StarCount = 0 client.sateffect = saturationEffect local function renderVisuals(dt) local _new, _last = menu:GetVal("Misc", "Extra", "Disable 3D Rendering") if _new ~= _last then game:GetService("RunService"):Set3dRenderingEnabled(not _new) end misc:UpdateBeams() client.char.unaimedfov = menu.options["Visuals"]["Camera Visuals"]["Camera FOV"][1] if menu.open then ------debug.profilebegin("renderVisuals Char") local crosshud = PLAYER_GUI.MainGui.GameGui.CrossHud:GetChildren() for i = 1, #crosshud do local frame = crosshud[i] if not crosshairColors then crosshairColors = { inline = frame.BackgroundColor3, outline = frame.BorderColor3, } end -- MEOW -core 2021 local inline = menu:GetVal("Visuals", "Extra", "Crosshair Color", COLOR1, true) local outline = menu:GetVal("Visuals", "Extra", "Crosshair Color", COLOR2, true) local enabled = menu:GetVal("Visuals", "Extra", "Crosshair Color") frame.BackgroundColor3 = enabled and inline or crosshairColors.inline frame.BorderColor3 = enabled and outline or crosshairColors.outline frame.Shot.BackgroundColor3 = enabled and inline or crosshairColors.inline frame.Shot.BorderColor3 = enabled and outline or crosshairColors.outline end --debug.profileend("renderVisuals Char") end -- fun end! --------------------------------------world funnies ------debug.profilebegin("renderVisuals World") --debug.profilebegin("renderVisuals World") if menu.options["Visuals"]["World"]["Force Time"][1] then game.Lighting.ClockTime = menu.options["Visuals"]["World"]["Custom Time"][1] end if menu.options["Visuals"]["World"]["Ambience"][1] then game.Lighting.Ambient = RGB( menu.options["Visuals"]["World"]["Ambience"][5][1][1][1][1], menu.options["Visuals"]["World"]["Ambience"][5][1][1][1][2], menu.options["Visuals"]["World"]["Ambience"][5][1][1][1][3] ) game.Lighting.OutdoorAmbient = RGB( menu.options["Visuals"]["World"]["Ambience"][5][1][2][1][1], menu.options["Visuals"]["World"]["Ambience"][5][1][2][1][2], menu.options["Visuals"]["World"]["Ambience"][5][1][2][1][3] ) else game.Lighting.Ambient = game.Lighting.MapLighting.Ambient.Value game.Lighting.OutdoorAmbient = game.Lighting.MapLighting.OutdoorAmbient.Value end local sky = game.Lighting:FindFirstChildOfClass("Sky") if (sky) then local newSky = skyboxes[menu:GetVal("Visuals", "World", "Skybox")] if (newSky) then if (not client.oldSkybox or client.oldSkybox.SkyboxBk ~= sky.SkyboxBk and sky.SkyboxBk ~= "") then client.oldSkybox = {} for i,v in pairs(newSky) do client.oldSkybox[i] = sky[i] end end local enabled = menu:GetVal("Visuals", "World", "Skybox Changer") skybox.Parent = enabled and game.Lighting or nil for i,v in pairs(newSky) do skybox[i] = enabled and v or "" sky[i] = enabled and "" or client.oldSkybox[i] end end end -- saturationEffect.Enabled = menu.options["Visuals"]["World"]["Custom Saturation"][1] saturationEffect.TintColor = RGB( menu.options["Visuals"]["World"]["Custom Saturation"][5][1][1], menu.options["Visuals"]["World"]["Custom Saturation"][5][1][2], menu.options["Visuals"]["World"]["Custom Saturation"][5][1][3] ) saturationEffect.Saturation = menu.options["Visuals"]["World"]["Saturation Density"][1] / 50 --]] --debug.profileend("renderVisuals World") ------debug.profilebegin("renderVisuals Player ESP Reset") -- TODO this reset may need to be improved to a large extent, it's taking up some time but idk if the frame times are becoming worse because of this for i = 1, #allesp do local drawclass = allesp[i] for j = 1, #drawclass do local drawdata = drawclass[j] for k = 1, #drawdata do drawdata[k].Visible = false end end end --debug.profileend("renderVisuals Player ESP Reset") ---------- ------debug.profilebegin("renderVisuals Main") if client.logic.currentgun and client.logic.currentgun.barrel and client.char.alive and menu:GetVal("Visuals", "Extra", "Pointer") then local viewport = workspace.CurrentCamera.ViewportSize menu.crosshair.outline[1].Visible = true menu.crosshair.outline[2].Visible = true menu.crosshair.inner[1].Visible = true menu.crosshair.inner[2].Visible = true local ignore = { workspace.Ignore, Camera } local barrel = client.logic.currentgun:isaiming() and client:GetToggledSight(client.logic.currentgun).sightpart or client.logic.currentgun.barrel if barrel.Parent then local trigger = barrel.Parent.Trigger local hit, hitpos, normal = workspace:FindPartOnRayWithIgnoreList(Ray.new(barrel.Position, trigger.CFrame.LookVector * 100), ignore, false, true) local size = menu:GetVal("Visuals", "Extra", "Pointer Size") local offset = menu:GetVal("Visuals", "Extra", "Pointer Offset") local color = menu:GetVal("Visuals", "Extra", "Pointer", COLOR, true) local transparency = menu:GetVal("Visuals", "Extra", "Pointer", COLOR)[4]/255 -- menu.crosshair.inner[1].Size = Vector2.new(size * 2 + 1, 1) menu.crosshair.inner[2].Size = Vector2.new(1, size * 2 + 1) menu.crosshair.inner[1].Color = color menu.crosshair.inner[2].Color = color menu.crosshair.inner[1].Transparency = transparency menu.crosshair.inner[2].Transparency = transparency menu.crosshair.outline[1].Transparency = transparency menu.crosshair.outline[2].Transparency = transparency menu.crosshair.outline[1].Size = Vector2.new(size * 2 + 3, 3) menu.crosshair.outline[2].Size = Vector2.new(3, size * 2 + 3) local hit2d = menu:GetVal("Visuals", "Extra", "Show Recoil") and Camera:WorldToViewportPoint(hitpos + normal * 0.01) or Vector2.new(viewport.X / 2, viewport.Y / 2) local x, y = hit2d.x, hit2d.y menu.crosshair.inner[1].Position = Vector2.new(x - size, y) menu.crosshair.inner[2].Position = Vector2.new(x, y - size) menu.crosshair.outline[1].Position = Vector2.new(x - size - 1, y - 1) menu.crosshair.outline[2].Position = Vector2.new(x - 1, y - 1 - size) end else menu.crosshair.outline[1].Visible = false menu.crosshair.outline[2].Visible = false menu.crosshair.inner[1].Visible = false menu.crosshair.inner[2].Visible = false end if client.cam.type ~= "menu" then local players = Players:GetPlayers() -- table.sort(players, function(p1, p2) -- return table.find(menu.priority, p2.Name) ~= table.find(menu.priority, p1.Name) and table.find(menu.priority, p2.Name) == true and table.find(menu.priority, p1.Name) == false -- end) local cam = client.cam.cframe local current_time = tick() local priority_color = menu:GetVal("Visuals", "ESP Settings", "Highlight Priority", COLOR, true) local priority_alpha = menu:GetVal("Visuals", "ESP Settings", "Highlight Priority", COLOR)[4] / 255 local friend_color = menu:GetVal("Visuals", "ESP Settings", "Highlight Friends", COLOR, true) local friend_alpha = menu:GetVal("Visuals", "ESP Settings", "Highlight Friends", COLOR)[4] / 255 local target_color = menu:GetVal("Visuals", "ESP Settings", "Highlight Target", COLOR, true) local target_alpha = menu:GetVal("Visuals", "ESP Settings", "Highlight Target", COLOR)[4] / 255 client.aliveplayers = 0 local size = math.floor(SCREEN_SIZE.x * 0.0078125) local big_size = math.floor(SCREEN_SIZE.x * 0.0260416666667) for curplayer = 1, #players do local player = players[curplayer] local playername = player.Name local enemy = false local GroupBox = "Team ESP" if player.Team ~= LOCAL_PLAYER.Team then GroupBox = "Enemy ESP" enemy = true client.aliveplayers += 1 end do if not menu:GetVal("Visuals", GroupBox, "Enabled") then continue end local parts = client.replication.getbodyparts(player) local torso, rootpart, position, resolved local opacity_mult = 1 local skel_parts = {} if not parts then local fade_time = menu:GetVal("Visuals", "ESP Settings", "ESP Fade Time") if fade_time ~= 0 then local log_position = client.lastPlayerPositions[player] if log_position then torso = log_position.cframe opacity_mult = clamp((log_position.time - current_time + fade_time) * 1/fade_time, 0, 1) skel_parts = client.lastPlayerPositions[player].parts rootpart = torso end end elseif client.hud:isplayeralive(player) then if parts.head.Transparency > 0 then continue end -- idk this should work against like floating dead peopluee player.Character = parts.head.Parent torso = parts.torso.CFrame rootpart = parts.torso.CFrame client.lastPlayerPositions[player] = {cframe = torso, time = current_time} for i = 1, #skelparts do local part = player.Character:FindFirstChild(skelparts[i]) client.lastPlayerPositions[player].parts = {} -- this is fucking dumb but it works whatever client.lastPlayerPositions[player].parts[skelparts[i]] = {Position = part.Position} skel_parts[skelparts[i]] = part end end if opacity_mult == 0 then continue end if not torso then continue end position = torso.Position resolved = false if menu:GetVal("Visuals", "Enemy ESP", "Flags")[4] and parts then local newpos = ragebot:GetResolvedPosition(player, parts.torso.CFrame, parts.torso.CFrame) if newpos then resolved = true end position = newpos or position end ------debug.profilebegin("renderVisuals Player ESP Box Calculation " .. playername) local vTop = position + (torso.UpVector * 1.8) + cam.UpVector local vBottom = position - (torso.UpVector * 2.5) - cam.UpVector local top, topIsRendered = Camera:WorldToViewportPoint(vTop) local bottom, bottomIsRendered = Camera:WorldToViewportPoint(vBottom) -- local minY = math.abs(bottom.y - top.y) -- local sizeX = math.ceil(math.max(clamp(math.abs(bottom.x - top.x) * 2, 0, minY), minY / 2)) -- local sizeY = math.ceil(math.max(minY, sizeX * 0.5)) -- local boxSize = Vector2.new(sizeX, sizeY) local _width = math.max(math.floor(math.abs(top.x - bottom.x)), 3) local _height = math.max(math.floor(math.max(math.abs(bottom.y - top.y), _width / 2)), 3) local boxSize = Vector2.new(math.floor(math.max(_height / 1.5, _width)), _height) local boxPosition = Vector2.new( math.floor(top.x * 0.5 + bottom.x * 0.5 - boxSize.x * 0.5), math.floor(math.min(top.y, bottom.y)) ) --debug.profileend("renderVisuals Player ESP Box Calculation " .. playername) local GroupBox = player.Team == LOCAL_PLAYER.Team and "Team ESP" or "Enemy ESP" local health = math.ceil(client.hud:getplayerhealth(player)) local spoty = 0 local boxtransparency = menu:GetVal("Visuals", GroupBox, "Box", COLOR2)[4] / 255 * opacity_mult local boxtransparencyfilled = menu:GetVal("Visuals", GroupBox, "Box", COLOR1)[4] / 255 * opacity_mult local health_number_transparency = menu.options["Visuals"][GroupBox]["Health Number"][5][1][4] / 255 * opacity_mult local name_transparency = menu:GetVal("Visuals", GroupBox, "Name", COLOR)[4] / 255 * opacity_mult local espflags = menu:GetVal("Visuals", GroupBox, "Flags") local distance = math.floor((rootpart.Position - Camera.CFrame.Position).Magnitude / 5) local arrow_dist = menu:GetVal("Visuals", "Enemy ESP", "Arrow Distance") local flag_text_size = espflags[1] if (topIsRendered or bottomIsRendered) then if espflags[2] then local playerdata = teamdata[1]:FindFirstChild(playername) or teamdata[2]:FindFirstChild(playername) allesp[3][5][curplayer].Visible = true allesp[3][5][curplayer].Text = "lv" .. playerdata.Rank.Text allesp[3][5][curplayer].Transparency = health_number_transparency allesp[3][5][curplayer].Position = Vector2.new( math.floor(boxPosition.x) + boxSize.x + 2, math.floor(boxPosition.y) - 4 + spoty ) allesp[3][5][curplayer].Font = 2 allesp[3][5][curplayer].Size = 13 spoty += 13 end if espflags[3] then allesp[3][6][curplayer].Visible = true allesp[3][6][curplayer].Text = tostring(distance).. "m" allesp[3][6][curplayer].Transparency = health_number_transparency allesp[3][6][curplayer].Position = Vector2.new( math.floor(boxPosition.x) + boxSize.x + 2, math.floor(boxPosition.y) - 4 + spoty ) allesp[3][6][curplayer].Font = 2 allesp[3][6][curplayer].Size = 13 spoty += 13 end if enemy then if espflags[4] then allesp[3][4][curplayer].Visible = resolved allesp[3][4][curplayer].Transparency = health_number_transparency allesp[3][4][curplayer].Position = Vector2.new( math.floor(boxPosition.x) + boxSize.x + 2, math.floor(boxPosition.y) - 4 + spoty ) allesp[3][4][curplayer].Font = 2 allesp[3][4][curplayer].Size = 13 spoty += 13 end end if menu.options["Visuals"][GroupBox]["Name"][1] then ------debug.profilebegin("renderVisuals Player ESP Render Name " .. playername) local name = tostring(playername) if menu.options["Visuals"]["ESP Settings"]["Text Case"][1] == 1 then name = string.lower(name) elseif menu.options["Visuals"]["ESP Settings"]["Text Case"][1] == 3 then name = string.upper(name) end allesp[4][1][curplayer].Text = string_cut(name, menu:GetVal("Visuals", "ESP Settings", "Max Text Length")) allesp[4][1][curplayer].Visible = true allesp[4][1][curplayer].Transparency = 1 allesp[4][1][curplayer].Position = Vector2.new(boxPosition.x + boxSize.x * 0.5, boxPosition.y - 15) end if menu.options["Visuals"][GroupBox]["Box"][1] then ------debug.profilebegin("renderVisuals Player ESP Render Box " .. playername) for i = -1, 1 do local box = allesp[2][i + 3][curplayer] box.Visible = true box.Position = boxPosition + Vector2.new(i, i) box.Size = boxSize - Vector2.new(i * 2, i * 2) box.Transparency = boxtransparency if i ~= 0 then box.Color = RGB(20, 20, 20) end --box.Color = i == 0 and color or bColor:Add(bColor:Mult(color, 0.2), 0.1) end if boxtransparencyfilled ~= 0 then local box = allesp[2][1][curplayer] box.Visible = true box.Position = boxPosition box.Size = boxSize box.Transparency = boxtransparencyfilled box.Filled = true end --debug.profileend("renderVisuals Player ESP Render Box " .. playername) end if menu.options["Visuals"][GroupBox]["Health Bar"][1] then ------debug.profilebegin("renderVisuals Player ESP Render Health Bar " .. playername) local ySizeBar = -math.floor(boxSize.y * health / 100) if menu.options["Visuals"][GroupBox]["Health Number"][1] and health <= menu.options["Visuals"]["ESP Settings"]["Max HP Visibility Cap"][1] and health > 0 then local hptext = allesp[3][3][curplayer] hptext.Visible = true hptext.Text = tostring(health) if flag_text_size then hptext.Font = 2 else hptext.Font = 1 end local tb = hptext.TextBounds -- clamp(ySizeBar + boxSize.y - tb.y * 0.5, -tb.y, boxSize.y - tb.y ) hptext.Position = boxPosition + Vector2.new( -tb.x - 7, clamp(ySizeBar + boxSize.y - tb.y * 0.5, -4, boxSize.y - 10) ) --hptext.Position = Vector2.new(boxPosition.x - 7 - tb.x, boxPosition.y + clamp(boxSize.y + ySizeBar - 8, -4, boxSize.y - 10)) hptext.Color = menu:GetVal("Visuals", GroupBox, "Health Number", COLOR, true) hptext.Transparency = health_number_transparency end allesp[3][1][curplayer].Visible = true allesp[3][1][curplayer].Position = Vector2.new(math.floor(boxPosition.x) - 6, math.floor(boxPosition.y) - 1) allesp[3][1][curplayer].Size = Vector2.new(4, boxSize.y + 2) allesp[3][1][curplayer].Transparency = opacity_mult allesp[3][2][curplayer].Visible = true allesp[3][2][curplayer].Position = Vector2.new( math.floor(boxPosition.x) - 5, math.floor(boxPosition.y + boxSize.y) ) allesp[3][2][curplayer].Size = Vector2.new(2, ySizeBar) allesp[3][2][curplayer].Color = ColorRange(health, { [1] = { start = 0, color = menu:GetVal("Visuals", GroupBox, "Health Bar", COLOR1, true), }, [2] = { start = 100, color = menu:GetVal("Visuals", GroupBox, "Health Bar", COLOR2, true), }, }) allesp[3][2][curplayer].Transparency = opacity_mult --debug.profileend("renderVisuals Player ESP Render Health Bar " .. playername) elseif menu.options["Visuals"][GroupBox]["Health Number"][1] and health <= menu.options["Visuals"]["ESP Settings"]["Max HP Visibility Cap"][1] then ------debug.profilebegin("renderVisuals Player ESP Render Health Number " .. playername) local hptext = allesp[3][3][curplayer] hptext.Visible = true hptext.Text = tostring(health) local tb = hptext.TextBounds hptext.Position = boxPosition + Vector2.new(-tb.x - 2, -4) hptext.Color = menu:GetVal("Visuals", GroupBox, "Health Number", COLOR, true) hptext.Transparency = health_number_transparency --debug.profileend("renderVisuals Player ESP Render Health Number " .. playername) end local yaddpos = 0 if menu.options["Visuals"][GroupBox]["Held Weapon"][1] then ------debug.profilebegin("renderVisuals Player ESP Render Held Weapon " .. playername) local charWeapon = _3pweps[player] local wepname = charWeapon and charWeapon or "???" if menu.options["Visuals"]["ESP Settings"]["Text Case"][1] == 1 then wepname = string.lower(wepname) elseif menu.options["Visuals"]["ESP Settings"]["Text Case"][1] == 3 then wepname = string.upper(wepname) end local weptext = allesp[4][2][curplayer] weptext.Text = string_cut( wepname, menu:GetVal("Visuals", "ESP Settings", "Max Text Length") ) weptext.Visible = true weptext.Position = Vector2.new(boxPosition.x + boxSize.x * 0.5, boxPosition.y + boxSize.y) yaddpos += 12 --debug.profileend("renderVisuals Player ESP Render Held Weapon " .. playername) end if menu:GetVal("Visuals", GroupBox, "Held Weapon Icon") then local charWeapon = _3pweps[player] local wepname = charWeapon and charWeapon or "???" local tempicon = allesp[3][7][curplayer] local tempimage = NameToIcon(wepname) if (setwepicons[curplayer] ~= nil or wepname ~= "???") and tempimage ~= nil then tempicon.Visible = true tempicon.Position = Vector2.new(math.floor(boxPosition.x + boxSize.x * 0.5 - (tempimage.w/2)), math.floor(boxPosition.y + boxSize.y + yaddpos + 2)) tempicon.Transparency = menu:GetVal("Visuals", GroupBox, "Held Weapon", COLOR)[4]/255 * opacity_mult elseif not menu:GetVal("Visuals", GroupBox, "Held Weapon") then if menu.options["Visuals"]["ESP Settings"]["Text Case"][1] == 1 then wepname = string.lower(wepname) elseif menu.options["Visuals"]["ESP Settings"]["Text Case"][1] == 3 then wepname = string.upper(wepname) end local weptext = allesp[4][2][curplayer] weptext.Text = string_cut( wepname, menu:GetVal("Visuals", "ESP Settings", "Max Text Length") ) weptext.Visible = true weptext.Position = Vector2.new(boxPosition.x + boxSize.x * 0.5, boxPosition.y + boxSize.y) end if setwepicons[curplayer] ~= wepname then if tempimage ~= nil then tempicon.Data = tempimage.data tempicon.Size = Vector2.new(tempimage.w, tempimage.h) end setwepicons[curplayer] = wepname end end -- if menu.options["Visuals"][GroupBox]["Distance"][1] then -- ------debug.profilebegin("renderVisuals Player ESP Render Distance " .. playername) -- local disttext = allesp[4][3][curplayer] -- disttext.Text = tostring(distance) .. "m" -- disttext.Visible = true -- disttext.Position = Vector2.new( -- boxPosition.x + boxSize.x * 0.5, -- boxPosition.y + boxSize.y + spoty -- ) -- --debug.profileend("renderVisuals Player ESP Render Distance " .. playername) -- end if menu.options["Visuals"][GroupBox]["Skeleton"][1] then ------debug.profilebegin("renderVisuals Player ESP Render Skeleton" .. playername) local torso = player.Character:FindFirstChild("Torso") if torso then local torsop = Camera:WorldToViewportPoint(torso.Position) for i = 1, #skelparts do local line = allesp[1][i][curplayer] local posie = Camera:WorldToViewportPoint(player.Character:FindFirstChild(skelparts[i]).Position) line.From = Vector2.new(posie.x, posie.y) line.To = Vector2.new(torsop.x, torsop.y) line.Visible = true end end --debug.profileend("renderVisuals Player ESP Render Skeleton" .. playername) end --da colourz !!! :D 🔥🔥🔥🔥 if menu:GetVal("Visuals", "ESP Settings", "Highlight Priority") and table.find(menu.priority, playername) then allesp[4][1][curplayer].Color = priority_color allesp[4][1][curplayer].Transparency = priority_alpha * opacity_mult allesp[2][3][curplayer].Color = priority_color allesp[2][1][curplayer].Color = priority_color allesp[4][2][curplayer].Color = priority_color allesp[4][2][curplayer].Transparency = priority_alpha * opacity_mult for i = 1, #skelparts do local line = allesp[1][i][curplayer] line.Color = priority_color line.Transparency = priority_alpha * opacity_mult end elseif menu:GetVal("Visuals", "ESP Settings", "Highlight Friends") and table.find(menu.friends, playername) then allesp[4][1][curplayer].Color = friend_color allesp[4][1][curplayer].Transparency = friend_alpha * opacity_mult allesp[2][1][curplayer].Color = friend_color allesp[2][3][curplayer].Color = friend_color allesp[4][2][curplayer].Color = friend_color allesp[4][2][curplayer].Transparency = friend_alpha * opacity_mult for i = 1, #skelparts do local line = allesp[1][i][curplayer] line.Color = friend_color line.Transparency = friend_alpha * opacity_mult end elseif menu:GetVal("Visuals", "ESP Settings", "Highlight Target") and ( player == legitbot.target or player == ragebot.target ) then allesp[4][1][curplayer].Color = target_color allesp[4][1][curplayer].Transparency = target_alpha * opacity_mult allesp[2][3][curplayer].Color = target_color allesp[2][1][curplayer].Color = target_color allesp[4][2][curplayer].Color = target_color allesp[4][2][curplayer].Transparency = target_alpha * opacity_mult for i = 1, #skelparts do local line = allesp[1][i][curplayer] line.Color = target_color line.Transparency = target_alpha * opacity_mult end else allesp[4][1][curplayer].Color = menu:GetVal("Visuals", GroupBox, "Name", COLOR, true) -- RGB(menu.options["Visuals"][GroupBox]["Name"][5][1][1], menu.options["Visuals"][GroupBox]["Name"][5][1][2], menu.options["Visuals"][GroupBox]["Name"][5][1][3]) allesp[4][1][curplayer].Transparency = name_transparency allesp[2][3][curplayer].Color = menu:GetVal("Visuals", GroupBox, "Box", COLOR2, true) allesp[2][1][curplayer].Color = menu:GetVal("Visuals", GroupBox, "Box", COLOR1, true) allesp[4][2][curplayer].Color = menu:GetVal("Visuals", GroupBox, "Held Weapon", COLOR, true) allesp[4][2][curplayer].Transparency = menu:GetVal("Visuals", GroupBox, "Held Weapon", COLOR)[4] / 255 * opacity_mult for i = 1, #skelparts do local line = allesp[1][i][curplayer] line.Color = menu:GetVal("Visuals", GroupBox, "Skeleton", COLOR, true) line.Transparency = menu:GetVal("Visuals", GroupBox, "Skeleton", COLOR)[4] / 255 * opacity_mult end end elseif enemy and menu:GetVal("Visuals", "Enemy ESP", "Out of View") then local size = size local big_size = big_size ----debug.profilebegin("renderVisuals Player ESP Render Out of View " .. playername) local color = menu:GetVal("Visuals", "Enemy ESP", "Out of View", COLOR, true) local color2 = bColor:Add(bColor:Mult(color, 0.2), 0.1) if menu:GetVal("Visuals", "ESP Settings", "Highlight Priority") and table.find(menu.priority, playername) then size *= 1.5 big_size *= 1.5 color = menu:GetVal( "Visuals", "ESP Settings", "Highlight Priority", COLOR, true ) color2 = bColor:Mult(color, 0.6) elseif menu:GetVal("Visuals", "ESP Settings", "Highlight Friends", COLOR) and table.find(menu.friends, playername) then color = menu:GetVal( "Visuals", "ESP Settings", "Highlight Friends", COLOR, true ) color2 = bColor:Mult(color, 0.6) elseif menu:GetVal("Visuals", "ESP Settings", "Highlight Target") and ( player == legitbot.target or player == ragebot.target ) then color = menu:GetVal( "Visuals", "ESP Settings", "Highlight Target", COLOR, true ) color2 = bColor:Mult(color, 0.6) end for i = 1, 2 do local torso = player.Character:FindFirstChild("Torso") if torso then local Tri = allesp[5][i][curplayer] local rootpartpos = torso.Position -- these HAVE to move now theres no way Tri.Visible = true local relativePos = Camera.CFrame:PointToObjectSpace(rootpartpos) local angle = math.atan2(-relativePos.y, relativePos.x) local distance = dot(relativePos.Unit, relativePos) local arrow_size = menu:GetVal("Visuals", "Enemy ESP", "Dynamic Arrow Size") and map(distance, 1, 100, big_size, size) or size arrow_size = arrow_size > big_size and big_size or arrow_size < size and size or arrow_size direction = Vector2.new(math.cos(angle), math.sin(angle)) local pos if arrow_dist ~= 101 then pos = ( direction * SCREEN_SIZE.x * arrow_dist / 200 ) + (SCREEN_SIZE * 0.5) end if not pos or pos.y > SCREEN_SIZE.y - 5 or pos.y < 5 then pos = camera:AngleToEdge(angle, 5) end Tri.PointA = pos Tri.PointB = pos - bVector2:getRotate(direction, 0.5) * arrow_size Tri.PointC = pos - bVector2:getRotate(direction, -0.5) * arrow_size Tri.Color = i == 1 and color or color2 Tri.Transparency = menu:GetVal("Visuals", "Enemy ESP", "Out of View", COLOR)[4] / 255 * opacity_mult end end --debug.profileend("renderVisuals Player ESP Render Out of View " .. playername) end end end if menu:GetVal("Visuals", "Extra", "Enemy Spawns") then if client.spawns then local spawns = client.spawns for i = 1, #spawns do local position, vis = Camera:WorldToViewportPoint(spawns[i].Position) allesp[11][2][i].Position = Vector2.new(position.x, position.y) allesp[11][2][i].Text = "spawn" allesp[11][2][i].Center = true allesp[11][2][i].Visible = vis allesp[11][2][i].Transparency = menu:GetVal("Visuals", "Extra", "Enemy Spawns", COLOR)[4]/255 allesp[11][2][i].Color = menu:GetVal("Visuals", "Extra", "Enemy Spawns", COLOR, true) end end end --ANCHOR weapon esp if menu:GetVal("Visuals", "Dropped ESP", "Weapon Names") or menu:GetVal("Visuals", "Dropped ESP", "Weapon Ammo") or menu:GetVal("Visuals", "Dropped ESP", "Weapon Icons") then ----debug.profilebegin("renderVisuals Dropped 1ESP") local gunnum = 0 local dropped = workspace.Ignore.GunDrop:GetChildren() local wepadd = menu:GetVal("Visuals", "Dropped ESP", "Weapon Names") for k = 1, #dropped do local v = dropped[k] if not client then return end if v.Name == "Dropped" then local slot = v:FindFirstChild("Slot1") if not slot then continue end local gunpos = slot.Position local gun_dist = (gunpos - client.cam.cframe.p).Magnitude if gun_dist < 80 then local hasgun = false local gunpos2d, gun_on_screen = workspace.CurrentCamera:WorldToScreenPoint(gunpos) local children = v:GetChildren() for k1 = 1, #children do local v1 = children[k1] if tostring(v1) == "Gun" then hasgun = true break end end if gun_on_screen and gunnum <= 50 and hasgun then gunnum = gunnum + 1 local gunclearness = 1 if gun_dist >= 50 then local closedist = gun_dist - 50 gunclearness = 1 - (1 * closedist / 30) end if menu:GetVal("Visuals", "Dropped ESP", "Weapon Icons") then local tempimage = NameToIcon(v.Gun.Value) if tempimage ~= nil then wepesp[3][gunnum].Data = tempimage.data wepesp[3][gunnum].Size = Vector2.new(tempimage.w, tempimage.h) wepesp[3][gunnum].Visible = true wepesp[3][gunnum].Position = wepadd and Vector2.new(math.floor(gunpos2d.x - tempimage.w/2), math.ceil(gunpos2d.y + (tempimage.h - 10))) or Vector2.new(math.floor(gunpos2d.x - tempimage.w/2), math.ceil(gunpos2d.y + (tempimage.h))) wepesp[3][gunnum].Transparency = menu:GetVal("Visuals", "Dropped ESP", "Weapon Names", COLOR2)[4] * gunclearness / 255 elseif not menu:GetVal("Visuals", "Dropped ESP", "Weapon Names") then if client.logic.currentgun and client.logic.currentgun and client.logic.currentgun.data and v.Gun.Value == client.logic.currentgun.data.name then wepesp[1][gunnum].Color = menu:GetVal( "Visuals", "Dropped ESP", "Weapon Names", COLOR1, true ) wepesp[1][gunnum].Transparency = menu:GetVal( "Visuals", "Dropped ESP", "Weapon Names", COLOR1 )[4] * gunclearness / 255 else wepesp[1][gunnum].Color = menu:GetVal( "Visuals", "Dropped ESP", "Weapon Names", COLOR2, true ) wepesp[1][gunnum].Transparency = menu:GetVal( "Visuals", "Dropped ESP", "Weapon Names", COLOR2 )[4] * gunclearness / 255 end wepesp[1][gunnum].Text = v.Gun.Value wepesp[1][gunnum].Visible = true wepesp[1][gunnum].Position = Vector2.new(math.floor(gunpos2d.x), math.floor(gunpos2d.y + 25)) end --menu:GetVal("Visuals", "Dropped ESP", "Weapon Names", COLOR1)[4] * gunclearness / 255 end if menu:GetVal("Visuals", "Dropped ESP", "Weapon Names") then if client.logic.currentgun and client.logic.currentgun and client.logic.currentgun.data and v.Gun.Value == client.logic.currentgun.data.name then wepesp[1][gunnum].Color = menu:GetVal( "Visuals", "Dropped ESP", "Weapon Names", COLOR1, true ) wepesp[1][gunnum].Transparency = menu:GetVal( "Visuals", "Dropped ESP", "Weapon Names", COLOR1 )[4] * gunclearness / 255 else wepesp[1][gunnum].Color = menu:GetVal( "Visuals", "Dropped ESP", "Weapon Names", COLOR2, true ) wepesp[1][gunnum].Transparency = menu:GetVal( "Visuals", "Dropped ESP", "Weapon Names", COLOR2 )[4] * gunclearness / 255 end wepesp[1][gunnum].Text = v.Gun.Value wepesp[1][gunnum].Visible = true wepesp[1][gunnum].Position = Vector2.new(math.floor(gunpos2d.x), math.floor(gunpos2d.y + 25)) end if menu:GetVal("Visuals", "Dropped ESP", "Weapon Ammo") then if v:FindFirstChild("Spare") then wepesp[2][gunnum].Text = "[ " .. tostring(v.Spare.Value) .. " ]" end wepesp[2][gunnum].Color = menu:GetVal( "Visuals", "Dropped ESP", "Weapon Ammo", COLOR, true ) wepesp[2][gunnum].Transparency = menu:GetVal("Visuals", "Dropped ESP", "Weapon Ammo", COLOR)[4] * gunclearness / 255 wepesp[2][gunnum].Visible = true wepesp[2][gunnum].Position = Vector2.new(math.floor(gunpos2d.x), math.floor(gunpos2d.y + 36)) end end end end end --debug.profileend("renderVisuals Dropped ESP") end if menu:GetVal("Visuals", "Interface", "Fov Circles") then -- fov circles local fovcircles = allesp[9] if menu:GetVal("Visuals", "Interface", "Aim Assist") then local col = menu:GetVal("Visuals", "Interface", "Aim Assist", COLOR, true) local transparency = menu:GetVal("Visuals", "Interface", "Aim Assist", COLOR)[4] / 255 for i = 1, 2 do local circle = fovcircles[1][i] circle.Color = i == 2 and col or Color3.new(0, 0, 0) circle.Transparency = transparency / (i == 1 and 2 or 1) circle.Thickness = i == 2 and 1 or 3 local fov = menu:GetVal("Legit", "Aim Assist", "Aimbot FOV") if not menu:GetVal("Legit", "Aim Assist", "Dynamic FOV") then fov = Camera.FieldOfView / client.char.unaimedfov * fov end circle.Radius = fov / workspace.CurrentCamera.FieldOfView * SCREEN_SIZE.y circle.Visible = true circle.Position = SCREEN_SIZE / 2 end else for i = 1, 2 do local circle = fovcircles[1][i] circle.Visible = false end end if menu:GetVal("Visuals", "Interface", "Aim Assist Deadzone") then local col = menu:GetVal("Visuals", "Interface", "Aim Assist Deadzone", COLOR, true) local transparency = menu:GetVal("Visuals", "Interface", "Aim Assist Deadzone", COLOR)[4] / 255 for i = 1, 2 do local circle = fovcircles[2][i] circle.Color = i == 2 and col or Color3.new(0, 0, 0) circle.Transparency = transparency / (i == 1 and 2 or 1) circle.Thickness = i == 2 and 1 or 3 local fov = menu:GetVal("Legit", "Aim Assist", "Deadzone FOV") if not menu:GetVal("Legit", "Aim Assist", "Dynamic FOV") then fov = Camera.FieldOfView / client.char.unaimedfov * fov end circle.Radius = fov / workspace.CurrentCamera.FieldOfView * SCREEN_SIZE.y circle.Position = SCREEN_SIZE / 2 circle.Visible = true end else for i = 1, 2 do local circle = fovcircles[2][i] circle.Visible = false end end if menu:GetVal("Visuals", "Interface", "Bullet Redirection") then local col = menu:GetVal("Visuals", "Interface", "Bullet Redirection", COLOR, true) local transparency = menu:GetVal("Visuals", "Interface", "Bullet Redirection", COLOR)[4] / 255 for i = 1, 2 do local circle = fovcircles[3][i] circle.Color = i == 2 and col or Color3.new(0, 0, 0) circle.Transparency = transparency / (i == 1 and 2 or 1) circle.Thickness = i == 2 and 1 or 3 local fov = menu:GetVal("Legit", "Bullet Redirection", "Silent Aim FOV") if not menu:GetVal("Legit", "Aim Assist", "Dynamic FOV") then fov = Camera.FieldOfView / client.char.unaimedfov * fov end circle.Radius = fov / workspace.CurrentCamera.FieldOfView * SCREEN_SIZE.y circle.Position = SCREEN_SIZE / 2 circle.Visible = true end else for i = 1, 2 do local circle = fovcircles[3][i] circle.Visible = false end end local circle = fovcircles[4] if menu:GetVal("Visuals", "Interface", "Ragebot") then local col = menu:GetVal("Visuals", "Interface", "Ragebot", COLOR, true) local transparency = menu:GetVal("Visuals", "Interface", "Ragebot", COLOR)[4] / 255 for i = 1, 2 do local circle = fovcircles[4][i] circle.Color = i == 2 and col or Color3.new(0, 0, 0) circle.Transparency = transparency / (i == 1 and 2 or 1) circle.Thickness = i == 2 and 1 or 3 circle.Position = SCREEN_SIZE / 2 circle.Radius = menu:GetVal("Rage", "Aimbot", "Aimbot FOV") / workspace.CurrentCamera.FieldOfView * SCREEN_SIZE.y circle.Visible = true end else for i = 1, 2 do local circle = fovcircles[4][i] circle.Visible = false end end end ----debug.profilebegin("renderVisuals Dropped ESP Grenade Warning") if menu:GetVal("Visuals", "Dropped ESP", "Grenade Warning") then local health = client.char:gethealth() local color1 = menu:GetVal("Visuals", "Dropped ESP", "Grenade Warning", COLOR, true) local color2 = RGB( menu:GetVal("Visuals", "Dropped ESP", "Grenade Warning", COLOR)[1] - 20, menu:GetVal("Visuals", "Dropped ESP", "Grenade Warning", COLOR)[2] - 20, menu:GetVal("Visuals", "Dropped ESP", "Grenade Warning", COLOR)[3] - 20 ) for i = 1, #menu.activenades do local nade = menu.activenades[i] local headpos = client.char.alive and client.lastrepupdate or Vector3.new() local delta = (nade.blowupat - headpos) local nade_dist = delta.Magnitude local currentTick = client.net:getTime() local nade_percent = (currentTick - nade.start) / (nade.blowuptick - nade.start) if nade_dist <= 80 then local nadepos, nade_on_screen = workspace.CurrentCamera:WorldToScreenPoint(Vector3.new(nade.blowupat.x, nade.blowupat.y, nade.blowupat.z)) if not nade_on_screen or nadepos.x > SCREEN_SIZE.x - 36 or nadepos.y > SCREEN_SIZE.y - 72 then local relativePos = Camera.CFrame:PointToObjectSpace(nade.blowupat) local angle = math.atan2(-relativePos.y, relativePos.x) local ox = math.cos(angle) local oy = math.sin(angle) local slope = oy / ox local h_edge = SCREEN_SIZE.x - 36 local v_edge = SCREEN_SIZE.y - 72 if oy < 0 then v_edge = 0 end if ox < 0 then h_edge = 36 end local y = (slope * h_edge) + (SCREEN_SIZE.y / 2) - slope * (SCREEN_SIZE.x / 2) if y > 0 and y < SCREEN_SIZE.y - 72 then nadepos = Vector2.new(h_edge, y) else nadepos = Vector2.new( (v_edge - SCREEN_SIZE.y / 2 + slope * (SCREEN_SIZE.x / 2)) / slope, v_edge ) end end -- nade_esp[1][i].Visible = true nade_esp[1][i].Position = Vector2.new(math.floor(nadepos.x), math.floor(nadepos.y + 36)) nade_esp[2][i].Visible = true nade_esp[2][i].Position = Vector2.new(math.floor(nadepos.x), math.floor(nadepos.y + 36)) nade_esp[4][i].Visible = true nade_esp[4][i].Position = Vector2.new(math.floor(nadepos.x) - 10, math.floor(nadepos.y + 10)) nade_esp[3][i].Visible = true nade_esp[3][i].Position = Vector2.new(math.floor(nadepos.x), math.floor(nadepos.y + 36)) local data = weps[nade.type] local d0 = data.damage0 -- max damage local d1 = data.damage1 -- min damage local r0 = data.range0 -- maximum range before the damage starts dropping off due to distance local r1 = data.range1 -- minimum range i think idk local damage = nade_dist < r0 and d0 or nade_dist < r1 and (d1 - d0) / (r1 - r0) * (nade_dist - r0) + d0 or 0 local wall if damage > 0 then wall = workspace:FindPartOnRayWithWhitelist( Ray.new(headpos, (nade.blowupat - headpos)), client.roundsystem.raycastwhitelist ) if wall then damage = 0 end end local str = damage == 0 and "Safe" or damage >= health and "LETHAL" or string.format("-%d hp", damage) nade_esp[3][i].Text = str nade_esp[1][i].Color = ColorRange(damage, { [1] = { start = 15, color = RGB(20, 20, 20) }, [2] = { start = health, color = RGB(150, 20, 20) }, }) nade_esp[2][i].Color = ColorRange(damage, { [1] = { start = 15, color = RGB(50, 50, 50) }, [2] = { start = health, color = RGB(220, 20, 20) }, }) nade_esp[5][i].Visible = true nade_esp[5][i].Position = Vector2.new(math.floor(nadepos.x) - 16, math.floor(nadepos.y + 50)) nade_esp[6][i].Visible = true nade_esp[6][i].Position = Vector2.new(math.floor(nadepos.x) - 15, math.floor(nadepos.y + 51)) nade_esp[7][i].Visible = true nade_esp[7][i].Size = Vector2.new(30 * (1 - nade_percent), 2) nade_esp[7][i].Position = Vector2.new(math.floor(nadepos.x) - 15, math.floor(nadepos.y + 51)) nade_esp[7][i].Color = color1 nade_esp[8][i].Visible = true nade_esp[8][i].Size = Vector2.new(30 * (1 - nade_percent), 2) nade_esp[8][i].Position = Vector2.new(math.floor(nadepos.x) - 15, math.floor(nadepos.y + 53)) nade_esp[8][i].Color = color2 local tranz = 1 if nade_dist >= 50 then local closedist = nade_dist - 50 tranz = 1 - (1 * closedist / 30) end for j = 1, #nade_esp do nade_esp[j][i].Transparency = tranz end end end end --debug.profileend("renderVisuals Dropped ESP Grenade Warning") ----debug.profilebegin("renderVisuals Local Visuals") misc.setvis = misc.setvis or {} -- this is for caching the weapons and shit so that when you switche weapons it will execute this code :3 -- hand chams and such if not client then return end local vm = workspace.Camera:GetChildren() local armcham = menu:GetVal("Visuals", "Local", "Arm Chams") local armmaterial = menu:GetVal("Visuals", "Local", "Arm Material") for k, v in pairs(vm) do if v.Name == "Left Arm" or v.Name == "Right Arm" then for k1, v1 in pairs(v:GetChildren()) do if armcham then v1.Color = menu:GetVal("Visuals", "Local", "Arm Chams", COLOR2, true) v1.Material = mats[armmaterial] end if v1.Transparency ~= 1 then local enabled = menu:GetVal("Visuals", "Local", "Third Person") and menu:GetKey("Visuals", "Local", "Third Person"); if armcham then if not enabled then v1.Transparency = 0.999999 + ( menu:GetVal("Visuals", "Local", "Arm Chams", COLOR2)[4] / -255 ) else v1.Transparency = 0.999999 end else if not enabled then v1.Transparency = 0 else v1.Transparency = 0.999999 end end end if v1.ClassName == "MeshPart" or v1.Name == "Sleeve" then if armcham then v1.Color = menu:GetVal("Visuals", "Local", "Arm Chams", COLOR1, true) end if v1.Transparency ~= 1 then local enabled = menu:GetVal("Visuals", "Local", "Third Person") and menu:GetKey("Visuals", "Local", "Third Person"); if armcham then if not enabled then v1.Transparency = 0.999999 + ( menu:GetVal("Visuals", "Local", "Arm Chams", COLOR1)[4] / -255 ) else v1.Transparency = 0.999999 end else if not enabled then v1.Transparency = 0 else v1.Transparency = 0.999999 end end end if armcham then if v1.TextureID and tostring(material) ~= "ForceField" then v1.TextureID = "" else v1.TextureID = "rbxassetid://2163189692" end v1:ClearAllChildren() end end end end end local wepcham = menu:GetVal("Visuals", "Local", "Weapon Chams") for k, v in pairs(vm) do if v.Name ~= "Left Arm" and v.Name ~= "Right Arm" and v.Name ~= "FRAG" then for k1, v1 in pairs(v:GetChildren()) do if wepcham then v1.Color = menu:GetVal("Visuals", "Local", "Weapon Chams", COLOR1, true) end if v1.Transparency ~= 1 then local enabled = menu:GetVal("Visuals", "Local", "Third Person") and menu:GetKey("Visuals", "Local", "Third Person"); if wepcham then if not enabled then v1.Transparency = 0.999999 + ( menu:GetVal("Visuals", "Local", "Weapon Chams", COLOR1)[4] / -255 ) else v1.Transparency = 0.999999 end else if not enabled then v1.Transparency = client.logic.currentgun.transparencydata and client.logic.currentgun.transparencydata[v1] or 0 else v1.Transparency = 0.999999 end end end if menu:GetVal("Visuals", "Local", "Remove Weapon Skin") and wepcham then for i2, v2 in pairs(v1:GetChildren()) do if v2.ClassName == "Texture" or v2.ClassName == "Decal" then v2:Destroy() end end end local mat = mats[menu:GetVal("Visuals", "Local", "Weapon Material")] if wepcham then v1.Material = mat end if v1:IsA("UnionOperation") and wepcham then v1.UsePartColor = true end if v1.ClassName == "MeshPart" and wepcham then v1.TextureID = mat == "ForceField" and "rbxassetid://5843010904" or "" end if v1.Name == "LaserLight" and wepcham then local transparency = 1 + ( menu:GetVal("Visuals", "Local", "Weapon Chams", COLOR2)[4] / -255 ) v1.Color = menu:GetVal("Visuals", "Local", "Weapon Chams", COLOR2, true) v1.Transparency = (transparency / 2) + 0.5 v1.Material = "ForceField" elseif v1.Name == "SightMark" and wepcham then if v1:FindFirstChild("SurfaceGui") then local color = menu:GetVal("Visuals", "Local", "Weapon Chams", COLOR2, true) local transparency = 1 + ( menu:GetVal("Visuals", "Local", "Weapon Chams", COLOR2)[4] / -255 ) if v1.SurfaceGui:FindFirstChild("Margins") then v1.SurfaceGui.Margins.BackgroundColor3 = color v1.SurfaceGui.Margins.ImageColor3 = color v1.SurfaceGui.Margins.ImageTransparency = (transparency / 5) + 0.7 elseif v1.SurfaceGui:FindFirstChild("Border") then v1.SurfaceGui.Border.Scope.ImageColor3 = color v1.SurfaceGui.Border.Scope.ImageTransparency = transparency v1.SurfaceGui.Border.BackgroundColor3 = color v1.SurfaceGui.Border.ImageColor3 = color v1.SurfaceGui.Border.ImageTransparency = 1 end end end end end end --debug.profileend("renderVisuals Local Visuals") end if menu:GetVal("Visuals", "Interface", "Keybinds List") then local texts = allesp[10] local listsizes = menu:GetVal("Visuals", "Interface", "Use List Sizes") local posy = math.ceil(SCREEN_SIZE.y * menu:GetVal("Visuals", "Interface", "Keybinds List Y") / 100) local margin = posy local posx = math.ceil(math.max(menu.stat_menu and 330 or 10, SCREEN_SIZE.x * menu:GetVal("Visuals", "Interface", "Keybinds List X") / 100)) local col = menu:GetVal("Visuals", "Interface", "Keybinds List", COLOR, true) local transparency = menu:GetVal("Visuals", "Interface", "Keybinds List", COLOR)[4] / 255 local newtexts = {} for i = 1, #menu.keybinds do local keybind = menu.keybinds[i] local box1 = texts[1][i] local box = texts[2][i] local box2 = texts[3][i] local box3 = texts[5][i] local text = texts[4][i] if keybind and keybind[1] and menu:GetVal(keybind[4], keybind[3], keybind[2]) and menu:GetKey(keybind[4], keybind[3], keybind[2]) then table.insert(newtexts, keybind[3] .. ": " .. keybind[2]) end text.Visible = false if box then box.Visible = false end box1.Visible = false box2.Visible = false box3.Visible = false end table.sort(newtexts, function(s, s1) return #s > #s1 end) -- i hate this shit table.insert(newtexts, 1, "Keybinds") local maxwidth = Vector2.new(0, 0) local maxwidth2 = Vector2.new(0, 0) for i = 1, #newtexts do local text = texts[4][i] text.Center = false text.Text = newtexts[i] if i <= 1 then local newthing = Vector2.new(text.TextBounds.x + 4, text.TextBounds.y) if newthing.x > maxwidth.x then maxwidth = newthing end end if i <= 2 then local newthing = Vector2.new(text.TextBounds.x + 4, text.TextBounds.y) if newthing.x > maxwidth2.x then maxwidth2 = newthing - maxwidth end end end for i = 1, #newtexts do local box1 = texts[1][i] local box3 = texts[5][i] local box = texts[3][i] local text = texts[4][i] text.Position = Vector2.new(posx + 2, margin) text.Color = i ~= 1 and col or Color3.new(1, 1, 1) text.Transparency = transparency text.Visible = true box.Position = Vector2.new(posx, margin) box.Visible = true box1.Position = Vector2.new(posx - 1, margin - 3) box1.Visible = true box1.Color = Color3.new(0, 0, 0)-- THIS IS FUCKING STUPID box3.Visible = true box3.Color = Color3.new(0, 0, 0) box3.Transparency = 0.4 if listsizes then local w = 8 local h = 15 if i == 1 then h = 9 * #newtexts w = 8 end if i == #newtexts then h += 7 end local x = posx - 2 local y = margin - 4 -- if i == 2 then -- x += 4 -- w -= 4 -- end box.Size = text.TextBounds + Vector2.new(4, 3) box1.Size = text.TextBounds + Vector2.new(6, 7) box3.Size = Vector2.new(text.TextBounds.x + w, h) box3.Position = Vector2.new(x, y) else box.Size = maxwidth + maxwidth2 + Vector2.new(0, 3) box1.Size = maxwidth + maxwidth2 + Vector2.new(2, 7) box3.Size = maxwidth + maxwidth2 + Vector2.new(4, (i == #newtexts and i == 1) and 9 or i == #newtexts and 4 or i == 1 and 6 or 3) box3.Position = Vector2.new(posx - 2, (i == 1) and margin - 4 or i == #newtexts and margin + 1 or margin) end margin += 15 end for i = 1, 15 do local box = texts[2][i] box.Position = Vector2.new(posx, posy + i - 1) box.Size = Vector2.new(maxwidth.x + ((not listsizes) and maxwidth2.x or 0), 1) box.Visible = true end for i = 1, 2 do local k = i + 15 local box = texts[2][k] local color = (menu:GetVal("Settings", "Cheat Settings", "Menu Accent") and menu:GetVal("Settings", "Cheat Settings", "Menu Accent", COLOR, true) or Color3.fromRGB(100, 100, 225)) color = i == 1 and color or Color3.fromRGB(color.R * 255 - 40, color.G * 255 - 40, color.B * 255 - 40) -- super shit box.Color = color box.Position = Vector2.new(posx, posy + i - 3) box.Size = Vector2.new(maxwidth.x+((not listsizes) and maxwidth2.x or 0), 1) box.Visible = true end if listsizes then for i = 1, 2 do local k = i + 17 local box = texts[2][k] local color = (menu:GetVal("Settings", "Cheat Settings", "Menu Accent") and menu:GetVal("Settings", "Cheat Settings", "Menu Accent", COLOR, true) or Color3.fromRGB(100, 100, 225)) color = i == 1 and color or Color3.fromRGB(color.R * 255 - 40, color.G * 255 - 40, color.B * 255 - 40) -- super shit box.Color = color box.Position = Vector2.new(posx+maxwidth.x + 1, posy + i + 12) box.Size = Vector2.new(maxwidth2.x - 1, 1) box.Visible = maxwidth2.x ~= 0 end end end --debug.profileend("renderVisuals Main") ----debug.profilebegin("renderVisuals No Scope") do -- no scope pasted from v1 lol local gui = LOCAL_PLAYER.PlayerGui local frame = gui.NonScaled.ScopeFrame -- if frame then local sightRear = frame:FindFirstChild("SightRear") if sightRear then local children = sightRear:GetChildren() for i = 1, #children do local thing = children[i] if thing.ClassName == "Frame" then thing.Visible = #thing.Name ~= 1 and not menu:GetVal("Visuals", "Camera Visuals", "No Scope Border") or false end end frame.SightFront.Visible = not menu:GetVal("Visuals", "Camera Visuals", "No Scope Border") sightRear.ImageTransparency = 1 end end end --debug.profileend("renderVisuals No Scope") end menu.connections.deadbodychildadded = workspace.Ignore.DeadBody.ChildAdded:Connect(function(newchild) if menu:GetVal("Visuals", "Extra", "Ragdoll Chams") then local children = newchild:GetDescendants() for i = 1, #children do local curvalue = children[i] if curvalue:IsA("BasePart") then matname = mats[menu:GetVal("Visuals", "Extra", "Ragdoll Material")] curvalue.Material = Enum.Material[matname] curvalue.Transparency = 1 - menu:GetVal("Visuals", "Extra", "Ragdoll Chams", COLOR)[4]/255 curvalue.Color = menu:GetVal("Visuals", "Extra", "Ragdoll Chams", COLOR, true) local vertexcolor = Vector3.new(curvalue.Color.R, curvalue.Color.G, curvalue.Color.B) local mesh = curvalue:FindFirstChild("Mesh") if mesh then mesh.VertexColor = vertexcolor -- color da texture baby ! ! ! ! ! 👶👶 -- DA BABY????? WTF end if curvalue:IsA("Pants") then curvalue:Destroy() end local pant = curvalue:FindFirstChild("Pant") local ShirtTexture = curvalue:FindFirstChild("Shirt") if pant then pant:Destroy() end if mesh then mesh:Destroy() end if ShirtTexture then ShirtTexture:Destroy() end end end end end) menu.connections.dropweaponadded = workspace.Ignore.GunDrop.ChildAdded:Connect(function(newchild) if menu:GetVal("Visuals", "Dropped ESP", "Dropped Weapon Chams") then newchild:WaitForChild("Slot1", 1) local children = newchild:GetChildren() for i = 1, #children do local curvalue = children[i] if not curvalue:IsA("Model") and curvalue.Name ~= "Humanoid" and curvalue.ClassName == "Part" then curvalue.Color = menu:GetVal("Visuals", "Dropped ESP", "Dropped Weapon Chams", COLOR, true) local vertexcolor = Vector3.new(curvalue.Color.R, curvalue.Color.G, curvalue.Color.B) local mesh = curvalue:FindFirstChild("Mesh") if mesh then mesh.VertexColor = vertexcolor end local texture = curvalue:FindFirstChild("Texture") if texture then texture:Destroy() end end end end end) local chat_game = LOCAL_PLAYER.PlayerGui.ChatGame local chat_box = chat_game:FindFirstChild(TEXTBOX) local oldpos = nil local function pfkeycheck(actionName, inputState, inputObject) if INPUT_SERVICE:GetFocusedTextBox() then return Enum.ContextActionResult.Sink end if INPUT_SERVICE:GetFocusedTextBox() or menu.textboxopen then return Enum.ContextActionResult.Sink end if actionName == "BB PF check" then return Enum.ContextActionResult.Pass end end game:service("ContextActionService"):BindAction("BB PF check", pfkeycheck, false, Enum.UserInputType.Keyboard) local FoundThing = table.find(getconstants(client.cam.step), 0.5) menu.connections.renderstepped_pf = game.RunService.RenderStepped:Connect(function(dt) for index, time in next, ragebot.predictedDamageDealtRemovals do if time and (tick() > time) then ragebot.predictedDamageDealt[index] = 0 if not ragebot.predictedMisses[index] then ragebot.predictedMisses[index] = 0 end if not ragebot.predictedShotAt[index] then ragebot.predictedShotAt[index] = 0 end ragebot.predictedMisses[index] += ragebot.predictedShotAt[index] ragebot.predictedShotAt[index] = 0 time = nil end end MouseUnlockHook() -- ----debug.profilebegin("Main BB Loop") -- ----debug.profilebegin("Noclip Cheat check") if menu:GetVal("Misc", "Extra", "Auto Respawn") and not client.menu:isdeployed() then client.menu:deploy() -- this is uber ass end --debug.profileend("Noclip Cheat check") ----debug.profilebegin("BB Rendering") do --rendering renderVisuals(dt) -- if FoundThing then setconstant( client.cam.step, FoundThing, menu:GetVal("Visuals", "Camera Visuals", "No Camera Bob") and 0 or 0.5 ) end end --debug.profileend("BB Rendering") ----debug.profilebegin("BB Legitbot") do --legitbot legitbot:TriggerBot() legitbot:MainLoop() end --debug.profileend("BB Legitbot") ----debug.profilebegin("BB Misc.") do --misc misc:MainLoop() ----debug.profilebegin("BB Ragebot KnifeBot") ragebot:KnifeBotMain() --debug.profileend("BB Ragebot KnifeBot") end --debug.profileend("BB Misc.") if not menu:GetVal("Rage", "Settings", "Aimbot Performance Mode") then ----debug.profilebegin("BB Ragebot (Non Performance)") do --ragebot ragebot:MainLoop() end --debug.profileend("BB Ragebot (Non Performance)") else ragebot.flip = not ragebot.flip if ragebot.flip then ragebot:MainLoop() end end if menu.spectating and not client.cam:isspectating() then if client.menu.isdeployed() then client.cam:setfirstpersoncam() elseif client.cam.type ~= "menu" then local lobby = workspace:FindFirstChild("MenuLobby") if lobby then client.cam:setmenucam(lobby) else --client.menu:loadmenu() end end menu.spectating = false end --debug.profileend("Main BB Loop") end) client.nextchamsupdate = tick() menu.connections.heartbeat_pf = game.RunService.Heartbeat:Connect(function() local curTick = client.net:getTime() for index, nade in pairs(menu.activenades) do local nade_percent = (curTick - nade.start) / (nade.blowuptick - nade.start) if nade_percent >= 1 then if menu.activenades[index] == nade then table.remove(menu.activenades, index) end end end if client.nextchamsupdate and curTick > client.nextchamsupdate or menu.open then client.nextchamsupdate = curTick + 2 CreateThread(renderChams) end CreateThread(destroyDeadChams) ----debug.profilebegin("BB No Gun Bob or Sway") if client.char.alive then for id, gun in next, client.loadedguns do if not gun.fucku then local upvs = getupvalues(gun.step) local hopefullyfireroundupvs = getupvalues(upvs[#upvs]) for i = 1, #upvs do local curv = upvs[i] if type(curv) == "function" and getinfo(curv).name:match("bob") then setupvalue(client.loadedguns[id].step, i, function(...) return (menu and menu:GetVal("Visuals", "Camera Visuals", "No Gun Bob or Sway")) and CFrame.new() or curv(...) --TODO FIX THIS end) end end for j = 1, #hopefullyfireroundupvs do local curupvalue = hopefullyfireroundupvs[j] if type(curupvalue) == "table" and rawget(curupvalue, "setpv") then local lol = {} local mt = getrawmetatable(curupvalue) local newindex = mt.__newindex local stuff = getupvalues(newindex) if type(stuff[6]) == "userdata" then setrawmetatable(lol, { __newindex = function(t, p, v) if menu then if p == "a" and menu:GetVal("Misc", "Weapon Modifications", "Enabled") then -- this might also break the recoil since idk if they might change this back to like p or v or whatever the fuck idk dick sukkin god local recoil_scale = menu:GetVal( "Misc", "Weapon Modifications", "Recoil Scale" ) / 100 return newindex(t, p, v * recoil_scale) else return newindex(t, p, v) end else setrawmetatable(lol, mt) return newindex(t, p, v) end end, }) setupvalue(upvs[#upvs], j, lol) end end end end end if client.logic.currentgun.knife and not client.logic.currentgun.fucku then local upvs = getupvalues(client.logic.currentgun.step) for i = 1, #upvs do local curv = upvs[i] if type(curv) == "function" and getinfo(curv).name:match("bob") then client.logic.currentgun.fucku = true setupvalue(client.logic.currentgun.step, i, function(...) return (menu and menu:GetVal("Visuals", "Camera Visuals", "No Gun Bob or Sway")) and CFrame.new() or curv(...) end) end end end end local updater = client.fakeupdater; if (updater and updater.alive) then updater.step(3, false) end if (updater) then local thirdperson = menu:GetVal("Visuals", "Local", "Third Person") and menu:GetKey("Visuals", "Local", "Third Person"); local enabled = menu:GetVal("Visuals", "Local", "Local Player Chams"); local character = client.fakecharacter; local characterParts = client.characterParts; local isA = game.IsA; if (character and characterParts) then for index, child in next, characterParts.parts do local old = characterParts.backup[index]; local color = menu:GetVal("Visuals", "Local", "Local Player Chams", COLOR, true); local transparency = (1 - (menu:GetVal("Visuals", "Local", "Local Player Chams", COLOR)[4] / 255)); local material = Enum.Material[mats[menu:GetVal("Visuals", "Local", "Local Player Material")]]; if (isA(child, "BasePart")) then child.Transparency = thirdperson and (enabled and transparency or old.Transparency) or 1; child.Material = enabled and material or old.Material; child.Color = enabled and color or old.Color; elseif (isA(child, "Texture") or isA(child, "Decal")) then if (enabled and material == Enum.Material.ForceField) then child.Transparency = 1; else child.Transparency = thirdperson and (enabled and transparency or old.Transparency) or 1; end elseif (isA(child, "SpecialMesh")) then child.VertexColor = enabled and Vector3.new(color.R, color.G, color.B) or old.VertexColor; if (child.Parent.Name == "Head") then child.TextureId = enabled and child.MeshId or old.TextureId; elseif (child.Parent.Name == "Torso") then child.TextureId = enabled and "rbxassetid://5614184106" or old.TextureId; end end end end end end); menu.Initialize({ { --ANCHOR stuffs name = "Legit", content = { { name = "Aim Assist", autopos = "left", autofill = true, content = { { type = TOGGLE, name = "Enabled", value = true, }, { type = SLIDER, name = "Aimbot FOV", value = 10, minvalue = 0, maxvalue = 180, stradd = "°", }, { type = TOGGLE, name = "Dynamic FOV", value = false, tooltip = "Changes all FOV settings in the Legit tab\nto change depending on the magnification.", }, { type = SLIDER, name = "Smoothing", value = 20, minvalue = 0, maxvalue = 100, stradd = "%", }, { type = DROPBOX, name = "Smoothing Type", value = 2, values = { "Exponential", "Linear" }, }, { type = SLIDER, name = "Randomization", value = 5, minvalue = 0, maxvalue = 20, custom = { [0] = "Off" }, }, { type = SLIDER, name = "Deadzone FOV", value = 1, minvalue = 0, maxvalue = 50, stradd = "°", decimal = 0.1, custom = { [0] = "Off" }, }, { type = DROPBOX, name = "Aimbot Key", value = 1, values = { "Mouse 1", "Mouse 2", "Always", "Dynamic Always" }, }, { type = DROPBOX, name = "Hitscan Priority", value = 1, values = { "Head", "Body", "Closest" }, }, { type = COMBOBOX, name = "Hitscan Points", values = { { "Head", true }, { "Body", true }, { "Arms", false }, { "Legs", false } }, }, { type = TOGGLE, name = "Adjust for Bullet Drop", value = true, }, { type = TOGGLE, name = "Target Prediction", value = true, }, }, }, { name = "Trigger Bot", autopos = "right", content = { { type = TOGGLE, name = "Enabled", value = false, extra = { type = KEYBIND, key = Enum.KeyCode.M, }, }, { type = COMBOBOX, name = "Trigger Bot Hitboxes", values = { { "Head", true }, { "Body", true }, { "Arms", false }, { "Legs", false } }, }, { type = TOGGLE, name = "Trigger When Aiming", value = false, }, { type = SLIDER, name = "Aim Percentage", minvalue = 0, maxvalue = 100, value = 90, stradd = "%", }, }, }, { name = "Bullet Redirection", autopos = "right", content = { { type = TOGGLE, name = "Silent Aim", value = false, }, { type = SLIDER, name = "Silent Aim FOV", value = 5, minvalue = 0, maxvalue = 180, stradd = "°", }, { type = SLIDER, name = "Hit Chance", value = 30, minvalue = 0, maxvalue = 100, stradd = "%", }, { type = SLIDER, name = "Accuracy", value = 90, minvalue = 0, maxvalue = 100, stradd = "%", }, { type = DROPBOX, name = "Hitscan Priority", value = 1, values = { "Head", "Body", "Closest" }, }, { type = COMBOBOX, name = "Hitscan Points", values = { { "Head", true }, { "Body", true }, { "Arms", false }, { "Legs", false } }, }, }, }, { name = "Recoil Control", autopos = "right", autofill = true, content = { { type = TOGGLE, name = "Weapon RCS", value = true, }, { type = COMBOBOX, name = "Disable RCS While", values = { { "Holding Sniper", false }, { "Scoping In", false }, { "Not Shooting", true } } }, { type = SLIDER, name = "Recoil Control X", value = 45, minvalue = 0, maxvalue = 100, stradd = "%", }, { type = SLIDER, name = "Recoil Control Y", value = 80, minvalue = 0, maxvalue = 150, stradd = "%", }, }, }, }, }, { name = "Rage", content = { { name = "Aimbot", autopos = "left", content = { { type = TOGGLE, name = "Enabled", value = false, extra = { type = KEYBIND, toggletype = 4, }, unsafe = true, }, { type = TOGGLE, name = "Silent Aim", value = false, tooltip = "Stops the camera from rotating toward targetted players.", }, { type = TOGGLE, name = "Rotate Viewmodel", value = false, tooltip = "Rotates weapon viewmodel toward the targetted player." }, { type = SLIDER, name = "Aimbot FOV", value = 180, minvalue = 0, maxvalue = 181, stradd = "°", custom = { [181] = "Ignored" }, }, { type = TOGGLE, name = "Auto Wallbang", value = false }, { type = TOGGLE, name = "Auto Shoot", value = false, tooltip = "Automatically shoots players when a target is found." }, { type = TOGGLE, name = "Double Tap", value = false, tooltip = "Shoots twice when target is found when Auto Shoot is enabled.", extra = { type = KEYBIND, toggletype = 4, }, }, { type = DROPBOX, name = "Hitscan Priority", value = 1, values = { "Head", "Body" }, }, }, }, { name = "Hack vs. Hack", autopos = "left", autofill = true, content = { { type = TOGGLE, name = "Autowall Hitscan", value = false, unsafe = true, tooltip = "While using Auto Wallbang, this will hitscan multiple points\nto increase penetration and help for peeking.", }, { type = COMBOBOX, name = "Hitscan Points", values = { { "Up", true }, { "Down", true }, { "Left", false }, { "Right", false }, { "Forward", true }, { "Backward", true }, { "Origin", true }, { "Towards", true }, }, }, { type = TOGGLE, name = "Hitbox Shifting", value = false, tooltip = "Increases possible penetration with Autowall. The higher\nthe Hitbox Shift Distance the more likely it is to miss shots.\nWhen it misses it will try disable this.", }, { type = SLIDER, name = "Hitbox Shift Distance", value = 4, minvalue = 1, maxvalue = 12.5, decimal = 0.1, stradd = " studs", }, { type = TOGGLE, name = "Force Player Stances", value = false, tooltip = "Changes the stance of other players to the selected Stance Choice.", }, { type = DROPBOX, name = "Stance Choice", value = 1, values = { "Stand", "Crouch", "Prone" }, }, { type = TOGGLE, name = "Freestanding", value = false, extra = { type = KEYBIND, }, }, }, }, { name = "Anti Aim", x = menu.columns.right, y = 66, width = menu.columns.width, height = 253, content = { { type = TOGGLE, name = "Enabled", value = false, tooltip = "When this is enabled, your server-side yaw, pitch and stance are set to the values in this tab.", }, { type = DROPBOX, name = "Pitch", value = 4, values = { "Off", "Up", "Zero", "Down", "Upside Down", "Roll Forward", "Roll Backward", "Random", "Bob", "Glitch", }, }, { type = DROPBOX, name = "Yaw", value = 2, values = { "Forward", "Backward", "Spin", "Random", "Glitch Spin", "Stutter Spin" }, }, { type = SLIDER, name = "Spin Rate", value = 10, minvalue = -100, maxvalue = 100, stradd = "°/s", }, { type = DROPBOX, name = "Force Stance", value = 4, values = { "Off", "Stand", "Crouch", "Prone" }, }, { type = TOGGLE, name = "Hide in Floor", value = true, tooltip = "Shifts your body slightly under the ground\nso as to hide it when Force Stance is set to Prone.", }, { type = TOGGLE, name = "Lower Arms", value = false, tooltip = "Lowers your arms on the server.", }, { type = TOGGLE, name = "Tilt Neck", value = false, tooltip = "Forces the replicated aiming state so that it appears as though your head is tilted.", }, }, }, { name = { "Extra", "Settings" }, y = 325, x = menu.columns.right, width = menu.columns.width, height = 258, [1] = { content = { { type = TOGGLE, name = "Knife Bot", value = false, extra = { type = KEYBIND, toggletype = 4, }, unsafe = true, }, { type = DROPBOX, name = "Knife Bot Type", value = 2, values = { "Assist", "Multi Aura", "Flight Aura", "Assist+", "Teleport Aura" }, }, { type = DROPBOX, name = "Knife Hitscan", value = 1, values = { "Head", "Torso", "Other" }, }, { type = TOGGLE, name = "Knife Visible Only", value = false, }, { type = SLIDER, name = "Knife Range", value = 26, minvalue = 1, maxvalue = 26, custom = {[26] = "Max"}, stradd = " studs", }, { type = TOGGLE, name = "Auto Peek", value = false, extra = { type = KEYBIND, toggletype = 1, }, tooltip = "Hitscans from in front of your camera,\nif a target is found it will move you towards the point automatically", }, }, }, [2] = { content = { { type = TOGGLE, name = "Aimbot Performance Mode", value = true, tooltip = "Lowers polling rate for targetting in Rage Aimbot.", }, { type = TOGGLE, name = "Resolve Fake Positions", value = true, tooltip = "Rage aimbot attempts to resolve Crimwalk on other players.\nDisable if you are having issues with resolver.", }, { type = TOGGLE, name = "Aimbot Damage Prediction", value = true, tooltip = "Predicts damage done to enemies as to prevent wasting ammo and time on certain players.\nHelps for users, and against players with high latency.", }, { type = SLIDER, name = "Damage Prediction Limit", value = 100, minvalue = 0, maxvalue = 300, stradd = "hp", }, { type = SLIDER, name = "Damage Prediction Time", value = 200, minvalue = 100, maxvalue = 500, stradd = "%", }, { type = SLIDER, name = "Max Hitscan Points", value = 30, minvalue = 0, maxvalue = 300, stradd = " points", }, }, }, }, }, }, { name = "Visuals", content = { { name = { "Enemy ESP", "Team ESP", "Local" }, autopos = "left", size = 300, [1] = { content = { { type = TOGGLE, name = "Enabled", value = true, tooltip = "Enables 2D rendering, disabling this could improve performance.\nDoes not affect Chams." }, { type = TOGGLE, name = "Name", value = true, extra = { type = COLORPICKER, name = "Enemy Name", color = { 255, 255, 255, 200 }, }, }, { type = TOGGLE, name = "Box", value = true, extra = { type = DOUBLE_COLORPICKER, name = { "Enemy Box Fill", "Enemy Box" }, color = { { 255, 0, 0, 0 }, { 255, 0, 0, 150 } }, }, }, { type = TOGGLE, name = "Health Bar", value = true, extra = { type = DOUBLE_COLORPICKER, name = { "Enemy Low Health", "Enemy Max Health" }, color = { { 255, 0, 0 }, { 0, 255, 0 } }, }, }, { type = TOGGLE, name = "Health Number", value = true, extra = { type = COLORPICKER, name = "Enemy Health Number", color = { 255, 255, 255, 255 }, }, }, { type = TOGGLE, name = "Held Weapon", value = true, extra = { type = COLORPICKER, name = "Enemy Held Weapon", color = { 255, 255, 255, 200 }, }, }, { type = TOGGLE, name = "Held Weapon Icon", value = false, }, { type = COMBOBOX, name = "Flags", values = { { "Use Large Text", true }, { "Level", true }, { "Distance", true }, { "Resolved", false }, }, }, { type = TOGGLE, name = "Chams", value = true, extra = { type = DOUBLE_COLORPICKER, name = { "Visible Enemy Chams", "Invisible Enemy Chams" }, color = { { 255, 0, 0, 200 }, { 100, 0, 0, 100 } }, }, }, { type = TOGGLE, name = "Skeleton", value = false, extra = { type = COLORPICKER, name = "Enemy skeleton", color = { 255, 255, 255, 120 }, }, }, { type = TOGGLE, name = "Out of View", value = true, extra = { type = COLORPICKER, name = "Arrow Color", color = { 255, 255, 255, 255 }, }, }, { type = SLIDER, name = "Arrow Distance", value = 50, minvalue = 10, maxvalue = 101, custom = { [101] = "Max" }, stradd = "%", }, { type = TOGGLE, name = "Dynamic Arrow Size", value = false, }, }, }, [2] = { content = { { type = TOGGLE, name = "Enabled", value = false, tooltip = "Enables 2D rendering, disabling this could improve performance.\nDoes not affect Chams." }, { type = TOGGLE, name = "Name", value = false, extra = { type = COLORPICKER, name = "Team Name", color = { 255, 255, 255, 200 }, }, }, { type = TOGGLE, name = "Box", value = true, extra = { type = DOUBLE_COLORPICKER, name = { "Enemy Box Fill", "Enemy Box" }, color = { { 0, 255, 0, 0 }, { 0, 255, 0, 150 } }, }, }, { type = TOGGLE, name = "Health Bar", value = false, extra = { type = DOUBLE_COLORPICKER, name = { "Team Low Health", "Team Max Health" }, color = { { 255, 0, 0 }, { 0, 255, 0 } }, }, }, { type = TOGGLE, name = "Health Number", value = false, extra = { type = COLORPICKER, name = "Team Health Number", color = { 255, 255, 255, 255 }, }, }, { type = TOGGLE, name = "Held Weapon", value = false, extra = { type = COLORPICKER, name = "Team Held Weapon", color = { 255, 255, 255, 200 }, }, }, { type = TOGGLE, name = "Held Weapon Icon", value = false, }, { type = COMBOBOX, name = "Flags", values = { { "Use Large Text", false }, { "Level", false }, { "Distance", false }, }, }, { type = TOGGLE, name = "Chams", value = false, extra = { type = DOUBLE_COLORPICKER, name = { "Visible Team Chams", "Invisible Team Chams" }, color = { { 0, 255, 0, 200 }, { 0, 100, 0, 100 } }, }, }, { type = TOGGLE, name = "Skeleton", value = false, extra = { type = COLORPICKER, name = "Team skeleton", color = { 255, 255, 255, 120 }, }, }, }, }, [3] = { content = { { type = TOGGLE, name = "Arm Chams", value = false, extra = { type = DOUBLE_COLORPICKER, name = { "Sleeve Color", "Hand Color" }, color = { { 106, 136, 213, 255 }, { 181, 179, 253, 255 } }, }, }, { type = DROPBOX, name = "Arm Material", value = 1, values = { "Plastic", "Ghost", "Neon", "Foil", "Glass" }, }, { type = TOGGLE, name = "Weapon Chams", value = false, extra = { type = DOUBLE_COLORPICKER, name = { "Weapon Color", "Laser Color" }, color = { { 106, 136, 213, 255 }, { 181, 179, 253, 255 } }, }, }, { type = DROPBOX, name = "Weapon Material", value = 1, values = { "Plastic", "Ghost", "Neon", "Foil", "Glass" }, }, { type = TOGGLE, name = "Animate Ghost Material", value = false, tooltip = "Toggles whether or not the 'Ghost' material will be animated or not.", }, { type = TOGGLE, name = "Remove Weapon Skin", value = false, tooltip = "If a loaded weapon has a skin, it will remove it.", }, { type = TOGGLE, name = "Third Person", value = false, extra = { type = KEYBIND, key = nil, toggletype = 2, }, }, { type = SLIDER, name = "Third Person Distance", value = 60, minvalue = 1, maxvalue = 150, }, { type = TOGGLE, name = "Local Player Chams", value = false, extra = { type = COLORPICKER, name = "Local Player Chams", color = { 106, 136, 213, 255 }, }, tooltip = "Changes the color and material of the local third person body when it is on.", }, { type = DROPBOX, name = "Local Player Material", value = 1, values = { "Plastic", "Ghost", "Neon", "Foil", "Glass" }, }, }, }, }, { name = { "ESP Settings", "Dropped ESP" }, autopos = "left", autofill = true, [1] = { content = { { type = SLIDER, name = "Max HP Visibility Cap", value = 90, minvalue = 50, maxvalue = 100, stradd = "hp", custom = { [100] = "Always" } }, { type = DROPBOX, name = "Text Case", value = 2, values = { "lowercase", "Normal", "UPPERCASE" }, }, { type = SLIDER, name = "Max Text Length", value = 0, minvalue = 0, maxvalue = 32, custom = { [0] = "Unlimited" }, stradd = " letters", }, { type = SLIDER, name = "ESP Fade Time", value = 0.5, minvalue = 0, maxvalue = 2, stradd = "s", decimal = 0.1, custom = { [0] = "Off" } }, { type = TOGGLE, name = "Highlight Target", value = false, extra = { type = COLORPICKER, name = "Aimbot Target", color = { 255, 0, 0, 255 }, }, }, { type = TOGGLE, name = "Highlight Friends", value = true, extra = { type = COLORPICKER, name = "Friended Players", color = { 0, 255, 255, 255 }, }, }, { type = TOGGLE, name = "Highlight Priority", value = true, extra = { type = COLORPICKER, name = "Priority Players", color = { 255, 210, 0, 255 }, }, }, -- { -- type = SLIDER, -- name = "Max Player Text", -- value = 0, -- minvalue = 0, -- maxvalue = 32, -- custom = {[0] = "None"}, -- } }, }, [2] = { content = { { type = TOGGLE, name = "Weapon Names", value = false, extra = { type = DOUBLE_COLORPICKER, name = { "Highlighted Weapons", "Weapon Names" }, color = { { 255, 125, 255, 255 }, { 255, 255, 255, 255 } }, }, tooltip = "Displays dropped weapons as you get closer to them,\nHighlights the weapon you are holding in the second color.", }, { type = TOGGLE, name = "Weapon Icons", value = false }, { type = TOGGLE, name = "Weapon Ammo", value = false, extra = { type = COLORPICKER, name = "Weapon Ammo", color = { 61, 168, 235, 150 }, }, }, { type = TOGGLE, name = "Dropped Weapon Chams", value = false, extra = { type = COLORPICKER, name = "Dropped Weapon Color", color = { 3, 252, 161, 150 }, }, }, { type = TOGGLE, name = "Grenade Warning", value = true, extra = { type = COLORPICKER, name = "Slider Color", color = { 68, 92, 227 }, }, tooltip = "Displays where grenades that will deal\ndamage to you will land and the damage they will deal.", }, { type = TOGGLE, name = "Grenade ESP", value = false, extra = { type = DOUBLE_COLORPICKER, name = { "Inner Color", "Outer Color" }, color = { { 195, 163, 255 }, { 123, 69, 224 } }, }, tooltip = "Displays the full path of any grenade that will deal damage to you is thrown.", }, } } }, { name = { "Camera Visuals", "Viewmodel" }, autopos = "right", size = 228, [1] = { content = { { type = SLIDER, name = "Camera FOV", value = 80, minvalue = 60, maxvalue = 120, stradd = "°", }, { type = TOGGLE, name = "No Camera Bob", value = false, }, { type = TOGGLE, name = "No Scope Sway", value = false, }, { type = TOGGLE, name = "Disable ADS FOV", value = false, }, { type = TOGGLE, name = "No Scope Border", value = false, }, { type = TOGGLE, name = "No Visual Suppression", value = false, tooltip = "Removes the suppression of enemies' bullets.", }, { type = TOGGLE, name = "No Gun Bob or Sway", value = false, tooltip = "Removes the bob and sway of weapons when walking.\nThis does not remove the swing effect when moving the mouse.", }, { type = TOGGLE, name = "Reduce Camera Recoil", value = false, tooltip = "Reduces camera recoil by X%. Does not affect visible weapon recoil or kick.", }, { type = SLIDER, name = "Camera Recoil Reduction", value = 10, minvalue = 0, maxvalue = 100, stradd = "%", }, }, }, [2] = { content = { { type = TOGGLE, name = "Enabled", value = false, }, { type = SLIDER, name = "Offset X", value = 0, minvalue = -3, maxvalue = 3, decimal = 0.01, stradd = " studs", }, { type = SLIDER, name = "Offset Y", value = 0, minvalue = -3, maxvalue = 3, decimal = 0.01, stradd = " studs", }, { type = SLIDER, name = "Offset Z", value = 0, minvalue = -3, maxvalue = 3, decimal = 0.01, stradd = " studs", }, { type = SLIDER, name = "Pitch", value = 0, minvalue = -360, maxvalue = 360, stradd = "°", }, { type = SLIDER, name = "Yaw", value = 0, minvalue = -360, maxvalue = 360, stradd = "°", }, { type = SLIDER, name = "Roll", value = 0, minvalue = -360, maxvalue = 360, stradd = "°", }, }, }, }, { name = { "World", "Interface", "Extra" }, subtabfill = true, autofill = true, autopos = "right", size = 144, [1] = { content = { { type = TOGGLE, name = "Ambience", value = false, extra = { type = DOUBLE_COLORPICKER, name = { "Inside Ambience", "Outside Ambience" }, color = { { 117, 76, 236 }, { 117, 76, 236 } }, }, tooltip = "Changes the map's ambient colors to your defined colors.", }, { type = TOGGLE, name = "Force Time", value = false, tooltip = "Forces the time to the time set by your below.", }, { type = SLIDER, name = "Custom Time", value = 0, minvalue = 0, maxvalue = 24, decimal = 0.1, stradd = "hr", }, { type = TOGGLE, name = "Custom Saturation", value = false, extra = { type = COLORPICKER, name = "Saturation Tint", color = { 255, 255, 255 }, }, tooltip = "Adds custom saturation the image of the game.", }, { type = SLIDER, name = "Saturation Density", value = 0, minvalue = 0, maxvalue = 100, stradd = "%", }, { type = TOGGLE, name = "Skybox Changer", value = false, }, { type = DROPBOX, name = "Skybox", value = 9, values = { "Purple Nebula", "Night Sky", "Pink Daylight", "Morning Glow", "Setting Sun", "Fade Blue", "Elegant Morning", "Neptune", "Redshift" } } }, }, [2] = { content = { { type = TOGGLE, name = "Fov Circles", value = false, }, { type = TOGGLE, name = "Aim Assist", value = true, extra = { type = COLORPICKER, name = "Aim Assist FOV", color = { 155, 155, 255, 255 }, }, }, { type = TOGGLE, name = "Aim Assist Deadzone", value = true, extra = { type = COLORPICKER, name = "Deadzone FOV", color = { 50, 50, 50, 255 }, }, }, { type = TOGGLE, name = "Bullet Redirection", value = false, extra = { type = COLORPICKER, name = "Bullet Redirection FOV", color = { 163, 72, 127, 255 }, }, }, { type = TOGGLE, name = "Ragebot", value = false, extra = { type = COLORPICKER, name = "Ragebot FOV", color = { 255, 210, 0, 255 }, }, }, { type = TOGGLE, name = "Keybinds List", value = false, extra = { type = COLORPICKER, name = "Text Color", color = { 155, 155, 255, 255 }, }, }, { type = TOGGLE, name = "Use List Sizes", value = false, }, { type = TOGGLE, name = "Log Keybinds", value = false }, { type = SLIDER, name = "Keybinds List X", value = 0, minvalue = 0, maxvalue = 100, shift_stepsize = 0.05, stradd = "%", }, { type = SLIDER, name = "Keybinds List Y", value = 50, minvalue = 0, maxvalue = 100, shift_stepsize = 0.05, stradd = "%", }, { type = TOGGLE, name = "Watermark", value = true, } }, }, [3] = { content = { { type = TOGGLE, name = "Crosshair Color", value = false, extra = { type = DOUBLE_COLORPICKER, name = { "Inline", "Outline" }, color = { { 155, 155, 255 }, { 25, 25, 25 } }, }, }, { type = TOGGLE, name = "Pointer", value = false, extra = { type = COLORPICKER, name = "Laser Pointer Color", color = { 255, 255, 255, 255 }, }, }, { type = TOGGLE, name = "Show Recoil", value = true, }, { type = SLIDER, name = "Pointer Size", value = 6, minvalue = 1, maxvalue = 20, stradd = "px" }, { type = SLIDER, name = "Pointer Offset", value = 0, minvalue = 0, maxvalue = 25, stradd = "px" }, { type = TOGGLE, name = "Ragdoll Chams", value = false, extra = { type = COLORPICKER, name = "Ragdoll Chams", color = { 106, 136, 213, 255 }, }, }, { type = DROPBOX, name = "Ragdoll Material", value = 1, values = { "Plastic", "Ghost", "Neon", "Foil", "Glass" }, }, { type = TOGGLE, name = "Bullet Tracers", value = false, extra = { type = COLORPICKER, name = "Bullet Tracers", color = { 201, 69, 54, 125 }, }, }, { type = TOGGLE, name = "Enemy Spawns", value = false, extra = { type = COLORPICKER, name = "Enemy Spawns", color = { 255, 255, 255, 255 } } } } } }, }, }, { name = "Misc", content = { { name = { "Movement", "Tweaks" }, autopos = "left", size = 300, [1] = { content = { { type = TOGGLE, name = "Fly", value = false, unsafe = true, tooltip = "Manipulates your velocity to make you fly.\nUse 60 speed or below to never get flagged.", extra = { type = KEYBIND, key = Enum.KeyCode.B, toggletype = 2, }, }, { type = SLIDER, name = "Fly Speed", value = 60, minvalue = 1, maxvalue = 400, stradd = " stud/s", }, { type = TOGGLE, name = "Auto Jump", value = false, tooltip = "When you hold the spacebar, it will automatically jump repeatedly, ignoring jump delay.", }, { type = TOGGLE, name = "Speed", value = false, unsafe = true, tooltip = "Manipulates your velocity to make you move faster, unlike fly it doesn't make you fly.\nUse 60 speed or below to never get flagged.", extra = { type = KEYBIND, toggletype = 4, }, }, { type = DROPBOX, name = "Speed Type", value = 1, values = { "Always", "In Air", "On Hop" }, }, { type = SLIDER, name = "Speed Factor", value = 40, minvalue = 1, maxvalue = 400, stradd = " stud/s", }, { type = TOGGLE, name = "Avoid Collisions", value = false, tooltip = "Attempts to stops you from running into obstacles\nfor Speed and Circle Strafe.", extra = { type = KEYBIND, toggletype = 4, } }, { type = SLIDER, name = "Avoid Collisions Scale", value = 100, minvalue = 0, maxvalue = 100, stradd = "%", }, { type = TOGGLE, name = "Circle Strafe", value = false, extra = { type = KEYBIND, }, tooltip = "When you hold this keybind, it will strafe in a perfect circle.\nSpeed of strafing is borrowed from Speed Factor.", }, }, }, [2] = { content = { { type = TOGGLE, name = "Gravity Shift", value = false, tooltip = "Shifts movement gravity by X%. (Does not affect bullet acceleration.)", }, { type = SLIDER, name = "Gravity Shift Percentage", value = -50, minvalue = -500, maxvalue = 500, stradd = "%", }, { type = TOGGLE, name = "Jump Power", value = false, tooltip = "Shifts movement jump power by X%.", }, { type = SLIDER, name = "Jump Power Percentage", value = 150, minvalue = 0, maxvalue = 1000, stradd = "%", }, { type = TOGGLE, name = "Prevent Fall Damage", value = false, }, }, }, }, { name = "Weapon Modifications", autopos = "left", autofill = true, content = { { type = TOGGLE, name = "Enabled", value = false, tooltip = "Allows Bitch Bot to modify weapons.", }, { type = SLIDER, name = "Fire Rate Scale", value = 150, minvalue = 50, maxvalue = 5000, stradd = "%", tooltip = "Scales all weapons' firerate by X%.\n100% = Normal firerate", }, { type = SLIDER, name = "Recoil Scale", value = 10, minvalue = 0, maxvalue = 1000, stradd = "%", tooltip = "Scales all weapons' recoil by X%.\n0% = No recoil | 50% = Halved recoil", }, { type = TOGGLE, name = "Remove Animations", value = true, tooltip = "Removes all animations from any gun.\nThis will also completely remove the equipping animations.", }, { type = TOGGLE, name = "Instant Equip", value = true, }, { type = TOGGLE, name = "Fully Automatic", value = true, }, { type = TOGGLE, name = "Run and Gun", value = false, tooltip = "Makes it so that your weapon does not\nsway due to mouse movement, or turns over while sprinting.", }, { type = TOGGLE, name = "Infinite Ammo", value = false, tooltip = "Makes it so that your weapon has\ninfinite ammo.", }, }, }, { name = {"Extra", "Sounds"}, autopos = "right", autofill = true, size = 100, [1] = { content = { { type = TOGGLE, name = "Ignore Friends", value = true, tooltip = "When turned on, bullets do not deal damage to friends,\nand Rage modules won't target friends.", }, { type = TOGGLE, name = "Target Only Priority Players", value = false, tooltip = "When turned on, all modules except for Aim Assist that target players\nwill ignore anybody that isn't on the Priority list.", }, { type = TOGGLE, name = "Disable 3D Rendering", value = false, tooltip = "When turned on, all 3D rendering will be disabled.\nThis helps with running multiple instances at once." }, { type = TOGGLE, name = "Suppress Only", value = false, tooltip = "When turned on, bullets do not deal damage.", }, { type = TOGGLE, name = "Auto Respawn", value = false, tooltip = "Automatically respawns after deaths.", }, -- { -- type = TOGGLE, -- name = "Disable Team Sounds", -- value = false, -- tooltip = "Disables sounds from all teammates and local player.", -- }, { type = DROPBOX, name = "Vote Friends", value = 1, values = { "Off", "Yes", "No" }, }, { type = DROPBOX, name = "Vote Priority", value = 1, values = { "Off", "Yes", "No" }, }, { type = DROPBOX, name = "Default Vote", value = 1, values = { "Off", "Yes", "No" }, }, { type = TOGGLE, name = "Kill Say", value = false, tooltip = "Kill say messages, located in bitchbot/killsay.bb \n[name] is the target's name\n[weapon] is the weapon used\n[hitbox] says head or body depending on where you shot the player", }, { type = DROPBOX, name = "Chat Spam", value = 1, values = { "Off", "Original", "t0nymode", "Chinese Propaganda", "Emojis", "Deluxe", "Youtube Title", "Custom", "Custom Combination", }, tooltip = "Spams chat, Custom options are located in the bitchbot/chatspam.bb", }, { type = TOGGLE, name = "Chat Spam Repeat", value = false, tooltip = "Repeats the same Chat Spam message in chat.", }, { type = SLIDER, name = "Chat Spam Delay", minvalue = 1, maxvalue = 10, value = 5, stradd = "s", }, -- { -- type = TOGGLE, -- name = "Impact Grenade", -- value = false, -- tooltip = "Explodes grenades on impact." -- }, -- { -- type = TOGGLE, -- name = "Auto Martyrdom", -- value = false, -- tooltip = "Whenever you die to an enemy, this will drop a grenade\nat your death position.", -- }, { type = TOGGLE, name = "Break Windows", value = false, tooltip = "Breaks all windows in the map when you spawn." }, { type = TOGGLE, name = "Join New Game On Kick", value = false, }, { type = BUTTON, name = "Join New Game", unsafe = false, doubleclick = true, }, }, }, [2] = { content = { { type = TOGGLE, name = "Kill Sound", value = false, }, { type = TEXTBOX, name = "killsoundid", text = "5709456554", tooltip = "The Roblox sound ID or file inside of synapse\n workspace to play when Kill Sound is on.", }, { type = SLIDER, name = "Kill Sound Volume", value = 20, minvalue = 0, maxvalue = 100, stradd = "%", }, { type = TOGGLE, name = "Hit Sounds", value = false, }, { type = TOGGLE, name = "Head Hit Sound", value = false, }, { type = TEXTBOX, name = "headhitsoundid", text = "5043539486", tooltip = "The Roblox sound ID or file inside of synapse\n workspace to play when Hit Sound is on.", }, { type = TOGGLE, name = "Body Hit Sound", value = false, }, { type = TEXTBOX, name = "bodyhitsoundid", text = "3744371342", tooltip = "The Roblox sound ID or file inside of synapse\n workspace to play when Hit Sound is on.", }, { type = SLIDER, name = "Hit Sound Volume", value = 20, minvalue = 0, maxvalue = 100, stradd = "%", }, }, }, }, }, }, { name = "Settings", content = { { name = "Player List", x = menu.columns.left, y = 66, width = menuWidth - 34, height = 328, content = { { type = "list", name = "Players", multiname = { "Name", "Team", "Status" }, size = 9, columns = 3, }, { type = IMAGE, name = "Player Info", text = "No Player Selected", size = 72, }, { type = DROPBOX, name = "Player Status", x = 307, y = 314, w = 160, value = 1, values = { "None", "Friend", "Priority" }, }, { type = BUTTON, name = "Votekick", doubleclick = true, x = 307, y = 356, w = 76, }, { type = BUTTON, name = "Spectate", x = 391, y = 356, w = 76, }, }, }, { name = "Cheat Settings", x = menu.columns.left, y = 400, width = menu.columns.width, height = 183, content = { { type = TOGGLE, name = "Custom Menu Key", value = false, extra = { type = KEYBIND, key = Enum.KeyCode.RightShift, toggletype = 1, }, }, { type = TOGGLE, name = "Menu Accent", value = false, extra = { type = COLORPICKER, name = "Accent Color", color = { 155, 155, 255 }, }, }, { type = TOGGLE, name = "Custom Menu Name", value = MenuName and true or false, }, { type = TEXTBOX, name = "MenuName", text = MenuName or "Bitch Bot", }, { type = BUTTON, name = "Set Clipboard Game ID", }, { type = BUTTON, name = "Unload Cheat", doubleclick = true, }, { type = TOGGLE, name = "Allow Unsafe Features", value = false, }, }, }, { name = "Configuration", x = menu.columns.right, y = 400, width = menu.columns.width, height = 183, content = { { type = TEXTBOX, name = "ConfigName", file = true, text = "", }, { type = DROPBOX, name = "Configs", value = 1, values = GetConfigs(), }, { type = BUTTON, name = "Load Config", doubleclick = true, }, { type = BUTTON, name = "Save Config", doubleclick = true, }, { type = BUTTON, name = "Delete Config", doubleclick = true, }, }, }, }, }, }) do local plistinfo = menu.options["Settings"]["Player List"]["Player Info"][1] local plist = menu.options["Settings"]["Player List"]["Players"] local function updateplist() if not menu then return end local playerlistval = menu:GetVal("Settings", "Player List", "Players") local players = table.create(Players.MaxPlayers) for i, team in pairs(TEAMS:GetTeams()) do local sorted_players = table.create(#players) for i1, player in pairs(team:GetPlayers()) do table.insert(sorted_players, player.Name) end table.sort(sorted_players) -- why the fuck doesn't this shit work ... for i1, player_name in pairs(sorted_players) do table.insert(players, Players:FindFirstChild(player_name)) end end local templist = table.create(#players) for k, v in ipairs(players) do local playername = { v.Name, RGB(255, 255, 255) } local teamtext = { "None", RGB(255, 255, 255) } local playerstatus = { "None", RGB(255, 255, 255) } if v.Team ~= nil then teamtext[1] = v.Team.Name teamtext[2] = v.TeamColor.Color end if v == LOCAL_PLAYER then playerstatus[1] = "Local Player" playerstatus[2] = RGB(66, 135, 245) elseif table.find(menu.friends, v.Name) then playerstatus[1] = "Friend" playerstatus[2] = RGB(0, 255, 0) elseif table.find(menu.priority, v.Name) then playerstatus[1] = "Priority" playerstatus[2] = RGB(255, 210, 0) end table.insert(templist, { playername, teamtext, playerstatus }) end plist[5] = templist if playerlistval ~= nil then for i, v in ipairs(players) do if v.Name == playerlistval then selectedPlayer = v break end if i == #players then selectedPlayer = nil menu.list.setval(plist, nil) end end end menu:SetMenuPos(menu.x, menu.y) end local function setplistinfo(player, textonly) if player ~= nil then local playerteam = "None" if player.Team ~= nil then playerteam = player.Team.Name end local playerhealth = "?" local alive = client.hud:isplayeralive(player) if alive then playerhealth = math.ceil(client.hud:getplayerhealth(player)) else playerhealth = "Dead" end local playerdata = teamdata[1]:FindFirstChild(player.Name) or teamdata[2]:FindFirstChild(player.Name) local playerrank = playerdata.Rank.Text local kills = playerdata.Kills.Text local deaths = playerdata.Deaths.Text plistinfo[1].Text = string.format( [[ Name: %s Health: %s Rank: %d K/D: %d/%d ]], player.Name, tostring(playerhealth), playerrank, kills, deaths ) if textonly == nil then plistinfo[2].Data = BBOT_IMAGES[5] plistinfo[2].Data = game:HttpGet(string.format("https://www.roblox.com/headshot-thumbnail/image?userId=%s&width=100&height=100&format=png", player.UserId)) end else plistinfo[2].Data = BBOT_IMAGES[5] plistinfo[1].Text = "No Player Selected" end end menu.list.removeall(menu.options["Settings"]["Player List"]["Players"]) updateplist() setplistinfo() local oldslectedplayer = nil menu.connections.inputstart2 = INPUT_SERVICE.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then if menu.tabnames[menu.activetab] == "Settings" and menu.open then game.RunService.Stepped:wait() updateplist() if selectedPlayer ~= nil then if menu:MouseInMenu(28, 68, 448, 238) then if table.find(menu.friends, selectedPlayer.Name) then menu.options["Settings"]["Player List"]["Player Status"][1] = 2 menu.options["Settings"]["Player List"]["Player Status"][4][1].Text = "Friend" elseif table.find(menu.priority, selectedPlayer.Name) then menu.options["Settings"]["Player List"]["Player Status"][1] = 3 menu.options["Settings"]["Player List"]["Player Status"][4][1].Text = "Priority" else menu.options["Settings"]["Player List"]["Player Status"][1] = 1 menu.options["Settings"]["Player List"]["Player Status"][4][1].Text = "None" end end for k, table_ in pairs({ menu.friends, menu.priority }) do for index, playername in pairs(table_) do if selectedPlayer.Name == playername then table.remove(table_, index) end end end if menu:GetVal("Settings", "Player List", "Player Status") == 2 then if not table.find(menu.friends, selectedPlayer.Name) then table.insert(menu.friends, selectedPlayer.Name) end elseif menu:GetVal("Settings", "Player List", "Player Status") == 3 then if not table.find(menu.priority, selectedPlayer.Name) then table.insert(menu.priority, selectedPlayer.Name) end end WriteRelations() else menu.options["Settings"]["Player List"]["Player Status"][1] = 1 menu.options["Settings"]["Player List"]["Player Status"][4][1].Text = "None" end updateplist() if plist[1] ~= nil then if oldslectedplayer ~= selectedPlayer then setplistinfo(selectedPlayer) oldslectedplayer = selectedPlayer end else setplistinfo(nil) end end end end) menu.connections.renderstepped2 = game.RunService.RenderStepped:Connect(function() if menu.open then if menu.tabnames[menu.activetab] == "Settings" then if plist[1] ~= nil then setplistinfo(selectedPlayer, true) end end end end) menu.connections.playerjoined = Players.PlayerAdded:Connect(function(player) updateplist() if plist[1] ~= nil then setplistinfo(selectedPlayer) else setplistinfo(nil) end end) menu.connections.playerleft = Players.PlayerRemoving:Connect(function(player) updateplist() ragebot.repupdates[player] = nil end) end end --!SECTION PF END end end do local wm = menu.watermark wm.textString = " | " .. BBOT.username .. " | " .. os.date("%b. %d, %Y") wm.pos = Vector2.new(50, 9) wm.text = {} local fulltext = menu.options["Settings"]["Cheat Settings"]["MenuName"][1] .. wm.textString wm.width = #fulltext * 7 + 10 wm.height = 19 wm.rect = {} Draw:FilledRect( false, wm.pos.x, wm.pos.y + 1, wm.width, 2, { menu.mc[1] - 40, menu.mc[2] - 40, menu.mc[3] - 40, 255 }, wm.rect ) Draw:FilledRect(false, wm.pos.x, wm.pos.y, wm.width, 2, { menu.mc[1], menu.mc[2], menu.mc[3], 255 }, wm.rect) Draw:FilledRect(false, wm.pos.x, wm.pos.y + 3, wm.width, wm.height - 5, { 50, 50, 50, 255 }, wm.rect) for i = 0, wm.height - 4 do Draw:FilledRect( false, wm.pos.x, wm.pos.y + 3 + i, wm.width, 1, { 50 - i * 1.7, 50 - i * 1.7, 50 - i * 1.7, 255 }, wm.rect ) end Draw:OutlinedRect(false, wm.pos.x, wm.pos.y, wm.width, wm.height, { 0, 0, 0, 255 }, wm.rect) Draw:OutlinedRect(false, wm.pos.x - 1, wm.pos.y - 1, wm.width + 2, wm.height + 2, { 0, 0, 0, 255 * 0.4 }, wm.rect) Draw:OutlinedText( fulltext, 2, false, wm.pos.x + 5, wm.pos.y + 3, 13, false, { 255, 255, 255, 255 }, { 0, 0, 0, 255 }, wm.text ) end --ANCHOR watermak for k, v in pairs(menu.watermark.rect) do v.Visible = true end menu.watermark.text[1].Visible = true local textbox = menu.options["Settings"]["Configuration"]["ConfigName"] local relconfigs = GetConfigs() textbox[1] = relconfigs[menu.options["Settings"]["Configuration"]["Configs"][1]] textbox[4].Text = textbox[1] menu.load_time = math.floor((tick() - loadstart) * 1000) CreateNotification(string.format("Done loading the " .. menu.game .. " cheat. (%d ms)", menu.load_time)) CreateNotification("Press DELETE to open and close the menu!") CreateThread(function() local x = loadingthing.Position.x for i = 1, 20 do loadingthing.Transparency = 1-i/20 loadingthing.Position -= Vector2.new(x/10, 0) wait() end loadingthing.Visible = false -- i do it this way because otherwise it would fuck up the Draw:UnRender function, it doesnt cause any lag sooooo end) if not menu.open then menu.fading = true menu.fadestart = tick() end menu.Initialize = nil _G.CreateNotification = CreateNotification