Scratch Ultra Modifier Pro Plus

The ultimate modification script for Scratch with advanced block colors, Turbo, Speed of Light modes, AI-powered tutorials, and a super complex, draggable, and modern GUI with working API integration.

  1. // ==UserScript==
  2. // @name Scratch Ultra Modifier Pro Plus
  3. // @namespace http://tampermonkey.net/
  4. // @version 5.0
  5. // @description The ultimate modification script for Scratch with advanced block colors, Turbo, Speed of Light modes, AI-powered tutorials, and a super complex, draggable, and modern GUI with working API integration.
  6. // @author YourName
  7. // @match https://scratch.mit.edu/projects/*
  8. // @grant GM_addStyle
  9. // @grant GM_xmlhttpRequest
  10. // @connect api.example.com // Replace with the actual API domain
  11. // @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js
  12. // @require https://cdnjs.cloudflare.com/ajax/libs/gsap/3.9.1/gsap.min.js
  13. // ==/UserScript==
  14.  
  15. (function() {
  16. 'use strict';
  17.  
  18. let isGuiOpen = false;
  19. let isTurboEnabled = false;
  20. let isSpeedOfLightEnabled = false;
  21. let tutorialsLoaded = false;
  22. let currentTutorialPage = 0;
  23. const tutorialPages = [];
  24.  
  25. // Function to change block colors
  26. function changeBlockColors() {
  27. const blockOuterColor = '#1E90FF';
  28. const blockInnerColor = '#FFD700';
  29. const blockBorderColor = '#8B0000';
  30.  
  31. $('svg.blocklySvg g.blocklyDraggable .blocklyPath').each(function() {
  32. $(this).css({
  33. 'fill': blockOuterColor,
  34. 'stroke': blockBorderColor,
  35. 'stroke-width': '3px'
  36. });
  37. });
  38.  
  39. $('svg.blocklySvg g.blocklyDraggable .blocklyPathLight').each(function() {
  40. $(this).css('fill', blockInnerColor);
  41. });
  42.  
  43. $('svg.blocklySvg g.blocklyDraggable .blocklyPath').each(function() {
  44. const gradientId = `gradient-${Math.random().toString(36).substr(2, 9)}`;
  45. $(this).css('fill', `url(#${gradientId})`);
  46.  
  47. $('svg defs').append(`
  48. <linearGradient id="${gradientId}" x1="0%" y1="0%" x2="100%" y2="100%">
  49. <stop offset="0%" style="stop-color:${blockOuterColor};stop-opacity:1" />
  50. <stop offset="100%" style="stop-color:${blockInnerColor};stop-opacity:1" />
  51. </linearGradient>
  52. `);
  53. });
  54.  
  55. console.log('Block colors changed successfully.');
  56. }
  57.  
  58. // Function to enable Turbo Mode
  59. function enableTurboMode() {
  60. if (Scratch.vm) {
  61. Scratch.vm.setTurboMode(true);
  62. isTurboEnabled = true;
  63. alert("Turbo Mode Enabled! Your project is now running at maximum speed.");
  64. } else {
  65. alert("Failed to enable Turbo Mode. Please try again.");
  66. }
  67. }
  68.  
  69. // Function to enable Speed of Light Mode
  70. function enableSpeedOfLightMode() {
  71. if (Scratch.vm) {
  72. Scratch.vm.runtime._stepTime = 0.1;
  73. isSpeedOfLightEnabled = true;
  74. alert("Speed of Light Mode Enabled! Hold on, your FPS is going through the roof!");
  75. } else {
  76. alert("Failed to enable Speed of Light Mode. Please try again.");
  77. }
  78. }
  79.  
  80. // Function to fetch tutorials from an API
  81. function fetchTutorials() {
  82. if (tutorialsLoaded) return;
  83.  
  84. GM_xmlhttpRequest({
  85. method: 'GET',
  86. url: 'https://api.example.com/tutorials', // Replace with your actual API endpoint
  87. onload: function(response) {
  88. if (response.status === 200) {
  89. const data = JSON.parse(response.responseText);
  90. tutorialPages.push(...data.tutorials);
  91. tutorialsLoaded = true;
  92. displayTutorialPage(0);
  93. } else {
  94. alert('Failed to load tutorials. Please try again later.');
  95. }
  96. },
  97. onerror: function() {
  98. alert('Failed to load tutorials. Network error.');
  99. }
  100. });
  101. }
  102.  
  103. // Function to display a tutorial page
  104. function displayTutorialPage(index) {
  105. if (index < 0 || index >= tutorialPages.length) return;
  106.  
  107. currentTutorialPage = index;
  108. $('#tutorialContent').html(tutorialPages[index]);
  109. $('#tutorialContent').show();
  110. }
  111.  
  112. // Function to create and display popups
  113. function displayPopup(message) {
  114. const popup = $('<div>', {
  115. text: message,
  116. css: {
  117. 'background-color': '#333',
  118. 'color': '#FFF',
  119. 'padding': '15px',
  120. 'border-radius': '10px',
  121. 'position': 'fixed',
  122. 'top': '20px',
  123. 'right': '20px',
  124. 'z-index': 10000,
  125. 'box-shadow': '0 0 15px rgba(0, 0, 0, 0.5)',
  126. 'font-family': 'Comic Sans MS, sans-serif'
  127. }
  128. }).appendTo('body');
  129.  
  130. gsap.to(popup, {
  131. duration: 3,
  132. opacity: 0,
  133. onComplete: () => popup.remove()
  134. });
  135. }
  136.  
  137. // Function to create and display GUI
  138. function createGUI() {
  139. // Main container for GUI
  140. const guiContainer = $('<div>', { id: 'customGuiContainer' }).appendTo('body');
  141.  
  142. // Title and close button
  143. const titleBar = $('<div>', {
  144. css: {
  145. 'display': 'flex',
  146. 'justify-content': 'space-between',
  147. 'align-items': 'center',
  148. 'padding': '10px',
  149. 'background-color': '#FFD700',
  150. 'border-radius': '10px 10px 0 0',
  151. 'cursor': 'move'
  152. }
  153. }).appendTo(guiContainer);
  154.  
  155. $('<h1>', {
  156. text: 'Scratch Ultra Modifier Pro Plus',
  157. css: {
  158. 'font-family': 'Comic Sans MS, sans-serif',
  159. 'color': '#1E90FF',
  160. 'margin': 0
  161. }
  162. }).appendTo(titleBar);
  163.  
  164. const closeButton = $('<button>', {
  165. text: 'X',
  166. click: () => guiContainer.hide(),
  167. css: createButtonStyle('#FF4500', '#FFF')
  168. }).appendTo(titleBar);
  169.  
  170. // Buttons for GUI functionality
  171. const changeColorButton = createGuiButton('Change Block Colors', changeBlockColors);
  172. guiContainer.append(changeColorButton);
  173.  
  174. const turboButton = createGuiButton('Enable Turbo Mode', enableTurboMode);
  175. guiContainer.append(turboButton);
  176.  
  177. const speedButton = createGuiButton('Enable Speed of Light Mode', enableSpeedOfLightMode);
  178. guiContainer.append(speedButton);
  179.  
  180. const tutorialsButton = createGuiButton('Show Tutorials', fetchTutorials);
  181. guiContainer.append(tutorialsButton);
  182.  
  183. // Tutorial content area
  184. const tutorialContent = $('<div>', {
  185. id: 'tutorialContent',
  186. css: {
  187. 'background-color': '#FFF7E6',
  188. 'border': '2px solid #FF5733',
  189. 'border-radius': '10px',
  190. 'padding': '15px',
  191. 'margin-top': '20px',
  192. 'font-family': 'Comic Sans MS, sans-serif',
  193. 'max-height': '300px',
  194. 'overflow-y': 'auto'
  195. }
  196. }).appendTo(guiContainer);
  197.  
  198. const tutorialCloseButton = $('<button>', {
  199. text: 'X',
  200. click: () => tutorialContent.hide(),
  201. css: createButtonStyle('#FF4500', '#FFF', '5px')
  202. }).appendTo(tutorialContent);
  203.  
  204. // Navigation buttons for tutorials
  205. const navContainer = $('<div>', { id: 'navContainer' }).appendTo(guiContainer);
  206.  
  207. const prevButton = $('<button>', {
  208. text: 'Previous',
  209. click: () => displayTutorialPage(currentTutorialPage - 1),
  210. css: createButtonStyle('#333', '#FFF', '5px')
  211. }).appendTo(navContainer);
  212.  
  213. const nextButton = $('<button>', {
  214. text: 'Next',
  215. click: () => displayTutorialPage(currentTutorialPage + 1),
  216. css: createButtonStyle('#333', '#FFF', '5px')
  217. }).appendTo(navContainer);
  218.  
  219. // Drag functionality
  220. let isDragging = false;
  221. let offset = { x: 0, y: 0 };
  222.  
  223. titleBar.on('mousedown', (e) => {
  224. isDragging = true;
  225. offset.x = e.pageX - guiContainer.offset().left;
  226. offset.y = e.pageY - guiContainer.offset().top;
  227. });
  228.  
  229. $(document).on('mousemove', (e) => {
  230. if (isDragging) {
  231. guiContainer.css({
  232. top: e.pageY - offset.y + 'px',
  233. left: e.pageX - offset.x + 'px'
  234. });
  235. }
  236. }).on('mouseup', () => {
  237. isDragging = false;
  238. });
  239.  
  240. // Open/Close GUI button
  241. const openGuiButton = $('<button>', {
  242. id: 'openGuiButton',
  243. text: 'Open GUI',
  244. click: () => {
  245. if (isGuiOpen) {
  246. guiContainer.hide();
  247. openGuiButton.text('Open GUI');
  248. } else {
  249. guiContainer.show();
  250. openGuiButton.text('Close GUI');
  251. }
  252. isGuiOpen = !isGuiOpen;
  253. },
  254. css: createButtonStyle('#32CD32', '#FFF')
  255. }).appendTo('body');
  256.  
  257. guiContainer.hide(); // Start with the GUI hidden
  258.  
  259. // Additional styling for draggable functionality
  260. GM_addStyle(`
  261. #customGuiContainer {
  262. width: 300px;
  263. height: auto;
  264. background-color: #FFF;
  265. border: 2px solid #1E90FF;
  266. border-radius: 10px;
  267. position: fixed;
  268. top: 50px;
  269. right: 50px;
  270. z-index: 9999;
  271. box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.3);
  272. }
  273. #tutorialContent {
  274. display: none;
  275. }
  276. #navContainer button {
  277. margin: 5px;
  278. }
  279. `);
  280. }
  281.  
  282. // Function to create a styled button
  283. function createGuiButton(text, onClick) {
  284. return $('<button>', {
  285. text: text,
  286. click: onClick,
  287. css: createButtonStyle('#4682B4', '#FFF')
  288. });
  289. }
  290.  
  291. // Function to create dynamic button styles
  292. function createButtonStyle(bgColor, textColor, margin = '10px') {
  293. return {
  294. 'background-color': bgColor,
  295. 'color': textColor,
  296. 'border': 'none',
  297. 'padding': '10px 20px',
  298. 'margin': margin,
  299. 'border-radius': '5px',
  300. 'cursor': 'pointer',
  301. 'font-family': 'Comic Sans MS, sans-serif',
  302. 'font-size': '16px',
  303. 'transition': 'background-color 0.3s ease',
  304. 'outline': 'none'
  305. };
  306. }
  307.  
  308. // Initialize the script by creating the GUI
  309. createGUI();
  310. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址