- // ==UserScript==
- // @name MooMoo.io Stack Visualizers
- // @namespace https://moomoo.io/
- // @version 2024-08-29
- // @description MooMoo.io Visuals without bundle.
- // @author BianosakaSozinho
- // @match *://*.moomoo.io/*
- // @require https://code.jquery.com/jquery-3.6.0.min.js
- // @require https://code.jquery.com/ui/1.12.1/jquery-ui.min.js
- // @icon https://moomoo.io/img/favicon.png?v=1
- // @grant none
- // ==/UserScript==
-
- (function() {
- 'use strict';
-
- var menu = document.createElement(`div`);
- menu.id = `menu`;
- menu.innerHTML = `
- <label id='wow'>MooMoo io Visualizer</label>
- <p> Health Color: <input type="color" value="#8ecc51" id="healthColor"> </p>
- <p> Enemy Health: <input type="color" value="#cc5151" id="enemyHealthColor"> </p>
- <p> Damage Text Color: <input type="color" value="#ffffff" id="damageColor"> </p>
- <p> Health Text Color: <input type="color" value="#8ecc51" id="healthTColor"> </p>
- <p> Chat Text Color: <input type="color" value="#ffffff" id="chatTColor"> </p>
- <p> My Chat Text Color: <input type="color" value="#ffffff" id="myChatColor"> </p>
- <p> Nickname Color: <input type="color" value="#ffffff" id="nickColor"> </p>
- <p> My Player Nick Color: <input type="color" value="#ffffff" id="myPNColor"> </p>
- <p> Text Outline: <input type="checkbox" id="outlineText"> </p>
- <p> Remove Grids: <input type="checkbox" id="grids"> </p>
- `;
- let style = document.createElement(`style`);
- style.textContent = `
- @import url('https://fonts.googleapis.com/css2?family=Be+Vietnam+Pro:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
-
- #menu {
- display: flex;
- position: fixed;
- flex-direction: column;
- left: 50%;
- top: 50%;
- transform: translate(-50%, -50%);
- width: 400px;
- height: 600px;
- color: white;
- background-color: #4C4C4C;
- font-family: "Be Vietnam Pro", sans-serif;
- border-radius: 6px;
- z-index: 50;
- overflow-y: auto;
- }
-
- #menu > p {
- margin-left: 4px;
- }
-
- p > input {
- cursor: pointer;
- }
-
- #wow {
- text-align: center;
- font-size: 24px;
- }
-
- #menu::-webkit-scrollbar {
- width: 8px;
- }
-
- #menu::-webkit-scrollbar-track {
- background: #4C4C4C;
- border-radius: 4px;
- }
-
- #menu::-webkit-scrollbar-thumb {
- background-color: #3C3C3C;
- border-radius: 4px;
- }
-
- #menu::-webkit-scrollbar-thumb:hover {
- background-color: #2C2C2C;
- }
- `;
-
- document.head.appendChild(style);
- document.body.prepend(menu);
- let myChat;
- document.addEventListener(`keydown`, e => {
- if(e.keyCode == 27) $(`#menu`).toggle()
- if(e.keyCode == 13 && document.getElementById('chatHolder').style.display == `block`) myChat = document.getElementById('chatBox').value;
- })
-
- const originalFillText = CanvasRenderingContext2D.prototype.fillText;
- const originalStrokeText = CanvasRenderingContext2D.prototype.strokeText;
- const originalMoveTo = CanvasRenderingContext2D.prototype.moveTo;
- const originalRoundRect = CanvasRenderingContext2D.prototype.roundRect;
- const originaldrawImage = CanvasRenderingContext2D.prototype.drawImage;
-
- CanvasRenderingContext2D.prototype.fillText = function(text, x, y, maxWidth) {
- if (text !== 'x' && document.getElementById('outlineText').checked) {
- originalStrokeText.call(this, text, x, y, maxWidth);
- }
- if(this.fillStyle == '#ffffff' && typeof text === 'number') this.fillStyle = document.getElementById('damageColor').value
- if(this.fillStyle == '#8ecc51') this.fillStyle = document.getElementById('healthTColor').value;
- if (this.fillStyle === '#ffffff' && this.font === `30px "Hammersmith One"`) {
- if (text === localStorage.getItem('moo_name')) {
- this.fillStyle = document.getElementById('myPNColor').value;
- } else {
- this.fillStyle = document.getElementById('nickColor').value;
- }
- }
- if(text == myChat) {
- this.fillStyle = document.getElementById('myChatColor').value;
- }
- if(this.fillStyle == '#ffffff' && this.font === `32px "Hammersmith One"` && text != myChat) this.fillStyle = document.getElementById('chatTColor').value;
- originalFillText.call(this, text, x, y, maxWidth);
- }
-
- CanvasRenderingContext2D.prototype.moveTo = function(x, y) {
- if(this.globalAlpha === 0.06 && document.getElementById('grids').checked) this.globalAlpha = 0;
- originalMoveTo.call(this, x, y);
- }
-
- CanvasRenderingContext2D.prototype.roundRect = function(x, y, w, h, r) {
- if(this.fillStyle === '#8ecc51') this.fillStyle = document.getElementById('healthColor').value;
- if(this.fillStyle === '#cc5151') this.fillStyle = document.getElementById('enemyHealthColor').value;
- originalRoundRect.call(this, x, y, w, h, r)
- }
-
- })();