RubixYT1

wallutils alpha

Jun 8th, 2026
80
1
Never
5
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.30 KB | None | 1 0
  1. (async function WallUtilities() {
  2. // Invert Y helper
  3. const invertY = (y) => -y;
  4.  
  5. // Fallback Coordinate System
  6. function getTileFromXY(x, y) {
  7. const tileX = Math.floor((x - 1) / 20) + 1;
  8. const tileY = Math.floor((y - 1) / 10) + 1;
  9. return { x: tileX, y: tileY };
  10. }
  11.  
  12. // --- STATE MANAGEMENT ---
  13. const protectedChunks = {};
  14. const renderers = ["KiwiTest"];
  15.  
  16. // Auto-add script runner to renderers using localStorage
  17. try {
  18. let myName = "ScriptRunner";
  19. if (typeof localStorage !== 'undefined' && localStorage.username) {
  20. myName = localStorage.username;
  21. }
  22. if (!renderers.includes(myName)) renderers.push(myName);
  23. } catch(e) {}
  24.  
  25. let activeTool = null;
  26. let isInitializing = false;
  27. let currentTargetTile = { x: 0, y: 0 };
  28. let lastWorldX = 0;
  29. let lastWorldY = 0;
  30. let lineStart = null;
  31. let circleStart = null;
  32.  
  33. // --- CSS STYLES (Dynamic Theme Variables) ---
  34. const style = document.createElement('style');
  35. style.innerHTML = `
  36. :root {
  37. --wu-r: 220;
  38. --wu-g: 20;
  39. --wu-b: 60;
  40. }
  41. .wu-glass {
  42. background: rgba(var(--wu-r), var(--wu-g), var(--wu-b), 0.15);
  43. backdrop-filter: blur(12px);
  44. -webkit-backdrop-filter: blur(12px);
  45. border: 1px solid rgba(calc(var(--wu-r) + 35), calc(var(--wu-g) + 130), calc(var(--wu-b) + 90), 0.3);
  46. box-shadow: 0 4px 30px rgba(var(--wu-r), var(--wu-g), var(--wu-b), 0.1);
  47. color: #ffcccc;
  48. font-family: 'Segoe UI', sans-serif;
  49. border-radius: 8px;
  50. cursor: pointer;
  51. transition: all 0.2s ease;
  52. }
  53. .wu-glass:hover { background: rgba(var(--wu-r), var(--wu-g), var(--wu-b), 0.3); color: #fff; }
  54.  
  55. #wu-btn { position: fixed; bottom: 20px; right: 20px; width: 50px; height: 50px; font-weight: bold; font-size: 18px; z-index: 9999; color: #fff;}
  56.  
  57. #wu-hotbar {
  58. position: fixed; bottom: 80px; left: 50%; transform: translateX(-50%);
  59. display: none; padding: 10px; gap: 10px; z-index: 9998;
  60. flex-direction: row; align-items: center;
  61. }
  62. #wu-hotbar.active { display: flex; }
  63. #wu-hotbar button { padding: 8px 16px; font-size: 14px; font-weight: 600; }
  64. #wu-hotbar button.active-tool { background: rgba(var(--wu-r), calc(var(--wu-g) + 60), calc(var(--wu-b) + 20), 0.5); border-color: #fff; color: #fff; }
  65.  
  66. #wu-confirm {
  67. position: fixed; bottom: 140px; left: 50%; transform: translateX(-50%);
  68. display: none; padding: 10px 20px; gap: 15px; z-index: 9998;
  69. flex-direction: row; align-items: center; font-size: 14px;
  70. }
  71. #wu-confirm.active { display: flex; }
  72. #wu-confirm button { padding: 6px 12px; background: rgba(var(--wu-r), var(--wu-g), var(--wu-b), 0.2); border-color: rgba(var(--wu-r), var(--wu-g), var(--wu-b), 0.5); color: #fff; }
  73.  
  74. #wu-info, #wu-theme {
  75. position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%);
  76. display: none; padding: 20px; text-align: center; z-index: 10000;
  77. flex-direction: column; gap: 10px; min-width: 250px;
  78. }
  79. #wu-info.active, #wu-theme.active { display: flex; }
  80. #wu-info h3, #wu-theme h3 { margin: 0; color: #ff8888; }
  81. #wu-info p, #wu-theme label { margin: 5px 0; font-size: 13px; opacity: 0.9; display: flex; justify-content: space-between; align-items: center;}
  82. #wu-theme input[type="range"] { width: 120px; margin-left: 10px; }
  83.  
  84. @keyframes notifAnim {
  85. 0% { transform: translate(-50%, -100px); opacity: 0; }
  86. 5% { transform: translate(-50%, 0); opacity: 1; }
  87. 95% { transform: translate(-50%, 0); opacity: 1; }
  88. 100% { transform: translate(-50%, -100px); opacity: 0; }
  89. }
  90. #wu-notif {
  91. position: fixed; top: 20px; left: 50%; transform: translateX(-50%);
  92. padding: 12px 24px; font-size: 13px; z-index: 10001;
  93. animation: notifAnim 15s ease-in-out forwards;
  94. pointer-events: none;
  95. }
  96. `;
  97. document.head.appendChild(style);
  98.  
  99. // --- HTML ELEMENTS ---
  100. const wuBtn = document.createElement('button');
  101. wuBtn.id = 'wu-btn'; wuBtn.className = 'wu-glass'; wuBtn.innerText = 'WU';
  102. document.body.appendChild(wuBtn);
  103.  
  104. const hotbar = document.createElement('div');
  105. hotbar.id = 'wu-hotbar'; hotbar.className = 'wu-glass';
  106. hotbar.innerHTML = `
  107. <button id="btn-prct" class="wu-glass">Prct</button>
  108. <button id="btn-nprt" class="wu-glass">N-Prt</button>
  109. <button id="btn-clr" class="wu-glass">Clr</button>
  110. <button id="btn-line" class="wu-glass">Line</button>
  111. <button id="btn-circle" class="wu-glass">Circle</button>
  112. <button id="btn-theme" class="wu-glass">Themes</button>
  113. <button id="btn-info" class="wu-glass">?</button>
  114. `;
  115. document.body.appendChild(hotbar);
  116.  
  117. const confirmBox = document.createElement('div');
  118. confirmBox.id = 'wu-confirm'; confirmBox.className = 'wu-glass';
  119. confirmBox.innerHTML = `<span id="confirm-coords">Tile: 0, 0</span><button id="btn-confirm" class="wu-glass">Confirm</button>`;
  120. document.body.appendChild(confirmBox);
  121.  
  122. const infoWindow = document.createElement('div');
  123. infoWindow.id = 'wu-info'; infoWindow.className = 'wu-glass';
  124. infoWindow.innerHTML = `
  125. <h3>WallUtilities</h3>
  126. <p>WallUtilities is on alpha release. expect bugs to occur.</p>
  127. <p style="font-weight:bold; color:#fff;">v0.1.8 Alpha</p>
  128. `;
  129. document.body.appendChild(infoWindow);
  130.  
  131. const themeWindow = document.createElement('div');
  132. themeWindow.id = 'wu-theme'; themeWindow.className = 'wu-glass';
  133. themeWindow.innerHTML = `
  134. <h3>UI Theme</h3>
  135. <label>Red: <input type="range" id="theme-r" min="0" max="255" value="220"></label>
  136. <label>Green: <input type="range" id="theme-g" min="0" max="255" value="20"></label>
  137. <label>Blue: <input type="range" id="theme-b" min="0" max="255" value="60"></label>
  138. `;
  139. document.body.appendChild(themeWindow);
  140.  
  141. const notif = document.createElement('div');
  142. notif.id = 'wu-notif'; notif.className = 'wu-glass';
  143. notif.innerText = 'WallUtils. uses v2 logic, so be careful with custom colors!';
  144. document.body.appendChild(notif);
  145. setTimeout(() => notif.remove(), 15000); // 15 seconds
  146.  
  147. // --- UI INTERACTIONS ---
  148. wuBtn.onclick = () => hotbar.classList.toggle('active');
  149. infoWindow.onclick = () => infoWindow.classList.remove('active');
  150. themeWindow.onclick = (e) => { if(e.target === themeWindow) themeWindow.classList.remove('active'); };
  151.  
  152. document.getElementById('btn-info').onclick = (e) => { e.stopPropagation(); infoWindow.classList.add('active'); themeWindow.classList.remove('active'); };
  153. document.getElementById('btn-theme').onclick = (e) => { e.stopPropagation(); themeWindow.classList.add('active'); infoWindow.classList.remove('active'); };
  154.  
  155. // Theme Sliders Logic
  156. ['theme-r', 'theme-g', 'theme-b'].forEach(id => {
  157. document.getElementById(id).addEventListener('input', (e) => {
  158. const color = id.split('-')[1];
  159. document.documentElement.style.setProperty(`--wu-${color}`, e.target.value);
  160. });
  161. });
  162.  
  163. const tools = ['prct', 'nprt', 'clr', 'line', 'circle'];
  164. tools.forEach(tool => {
  165. document.getElementById(`btn-${tool}`).onclick = (e) => {
  166. e.stopPropagation();
  167. if (activeTool === tool) {
  168. activeTool = null;
  169. lineStart = null;
  170. circleStart = null;
  171. confirmBox.classList.remove('active');
  172. document.getElementById(`btn-${tool}`).classList.remove('active-tool');
  173. } else {
  174. tools.forEach(t => document.getElementById(`btn-${t}`).classList.remove('active-tool'));
  175. activeTool = tool;
  176. lineStart = null;
  177. circleStart = null;
  178. document.getElementById(`btn-${tool}`).classList.add('active-tool');
  179. confirmBox.classList.add('active');
  180. }
  181. };
  182. });
  183.  
  184. // --- MOUSE TRACKING ---
  185. document.addEventListener('mousemove', (e) => {
  186. let mouseX, mouseY;
  187. if (typeof cursor !== 'undefined' && typeof cursor.x === 'number' && typeof cursor.y === 'number') {
  188. mouseX = cursor.x;
  189. mouseY = invertY(cursor.y);
  190. } else if (typeof w !== 'undefined' && w.mouse && typeof w.mouse.x === 'number') {
  191. mouseX = w.mouse.x;
  192. mouseY = w.mouse.y;
  193. } else {
  194. mouseX = e.clientX;
  195. mouseY = e.clientY;
  196. }
  197. if (!isNaN(mouseX) && !isNaN(mouseY)) {
  198. lastWorldX = mouseX;
  199. lastWorldY = mouseY;
  200. }
  201. });
  202.  
  203. // 0.25s Coordinate Preview Update
  204. setInterval(() => {
  205. if (!activeTool) return;
  206. if (activeTool === 'line' && lineStart) {
  207. document.getElementById('confirm-coords').innerText = `Line Start: ${lineStart.x}, ${lineStart.y} | Select End...`;
  208. return;
  209. }
  210. if (activeTool === 'circle' && circleStart) {
  211. document.getElementById('confirm-coords').innerText = `Circle Center: ${circleStart.x}, ${circleStart.y} | Select Edge...`;
  212. return;
  213. }
  214. const tile = getTileFromXY(lastWorldX, lastWorldY);
  215. if (tile && !isNaN(tile.x) && !isNaN(tile.y)) {
  216. currentTargetTile = { x: tile.x, y: tile.y };
  217. document.getElementById('confirm-coords').innerText = `Tile: ${currentTargetTile.x}, ${currentTargetTile.y} | Pos: ${Math.floor(lastWorldX)}, ${Math.floor(lastWorldY)}`;
  218. }
  219. }, 250);
  220.  
  221. // --- CONFIRM BUTTON LOGIC ---
  222. document.getElementById('btn-confirm').onclick = async () => {
  223. if (!activeTool) return;
  224. const { x, y } = currentTargetTile;
  225. const key = `${x},${y}`;
  226.  
  227. if (activeTool === 'prct') {
  228. await protectChunk(x, y);
  229. } else if (activeTool === 'nprt') {
  230. // De-protects chunk, removes arrays, but DOES NOT clear the text inside it
  231. if (protectedChunks[key]) delete protectedChunks[key];
  232. } else if (activeTool === 'clr') {
  233. // Clears 20x10 area with blanks REGARDLESS of protection status
  234. let clearQueue = [];
  235. for (let cy = 1; cy <= 10; cy++) {
  236. for (let cx = 1; cx <= 20; cx++) {
  237. const worldX = (x - 1) * 20 + cx;
  238. const worldY = (y - 1) * 10 + cy;
  239. clearQueue.push({ x: worldX, y: invertY(worldY) });
  240. }
  241. }
  242. for (let i = 0; i < clearQueue.length; i += 200) {
  243. const batch = clearQueue.slice(i, i + 200);
  244. batch.forEach(p => writeCharAt(' ', 0, p.x, p.y));
  245. if (i + 200 < clearQueue.length) await new Promise(r => setTimeout(r, 400));
  246. }
  247. // If it WAS protected, update the arrays to match the blank state
  248. if (protectedChunks[key]) {
  249. protectedChunks[key].chars = Array.from({length: 10}, () => Array(20).fill(' '));
  250. protectedChunks[key].colors = Array.from({length: 10}, () => Array(20).fill(-1));
  251. protectedChunks[key].lastModified = Date.now();
  252. }
  253. } else if (activeTool === 'line') {
  254. if (!lineStart) {
  255. lineStart = { x: Math.floor(lastWorldX), y: Math.floor(lastWorldY) };
  256. } else {
  257. const lineEnd = { x: Math.floor(lastWorldX), y: Math.floor(lastWorldY) };
  258. await drawLine(lineStart.x, lineStart.y, lineEnd.x, lineEnd.y);
  259. lineStart = null;
  260. }
  261. return;
  262. } else if (activeTool === 'circle') {
  263. if (!circleStart) {
  264. circleStart = { x: Math.floor(lastWorldX), y: Math.floor(lastWorldY) };
  265. } else {
  266. const circleEnd = { x: Math.floor(lastWorldX), y: Math.floor(lastWorldY) };
  267. await drawCircle(circleStart.x, circleStart.y, circleEnd.x, circleEnd.y);
  268. circleStart = null;
  269. }
  270. return;
  271. }
  272.  
  273. activeTool = null;
  274. confirmBox.classList.remove('active');
  275. tools.forEach(t => document.getElementById(`btn-${t}`).classList.remove('active-tool'));
  276. };
  277.  
  278. // --- LINE DRAWING ALGORITHM (CID 29) ---
  279. async function drawLine(x0, y0, x1, y1) {
  280. const dx = Math.abs(x1 - x0);
  281. const dy = Math.abs(y1 - y0);
  282. const sx = (x0 < x1) ? 1 : -1;
  283. const sy = (y0 < y1) ? 1 : -1;
  284. let err = dx - dy;
  285. let queue = [];
  286.  
  287. while (true) {
  288. queue.push({ x: x0, y: y0 });
  289. if (x0 === x1 && y0 === y1) break;
  290. const e2 = 2 * err;
  291. if (e2 > -dy) { err -= dy; x0 += sx; }
  292. if (e2 < dx) { err += dx; y0 += sy; }
  293. }
  294. await batchWrite(queue, '█', 29);
  295. }
  296.  
  297. // --- CIRCLE DRAWING ALGORITHM (CID 29) ---
  298. async function drawCircle(cx, cy, ex, ey) {
  299. const r = Math.round(Math.sqrt((ex - cx) ** 2 + (ey - cy) ** 2));
  300. if (r === 0) {
  301. await batchWrite([{ x: cx, y: cy }], '█', 29);
  302. return;
  303. }
  304.  
  305. let queue = [];
  306. let x = r;
  307. let y = 0;
  308. let err = 0;
  309.  
  310. // Midpoint circle algorithm
  311. while (x >= y) {
  312. queue.push({ x: cx + x, y: cy + y });
  313. queue.push({ x: cx + y, y: cy + x });
  314. queue.push({ x: cx - y, y: cy + x });
  315. queue.push({ x: cx - x, y: cy + y });
  316. queue.push({ x: cx - x, y: cy - y });
  317. queue.push({ x: cx - y, y: cy - x });
  318. queue.push({ x: cx + y, y: cy - x });
  319. queue.push({ x: cx + x, y: cy - y });
  320.  
  321. if (err <= 0) {
  322. y += 1;
  323. err += 2 * y + 1;
  324. }
  325. if (err > 0) {
  326. x -= 1;
  327. err -= 2 * x + 1;
  328. }
  329. }
  330.  
  331. // Deduplicate points
  332. const uniqueQueue = Array.from(new Set(queue.map(p => `${p.x},${p.y}`))).map(s => {
  333. const [px, py] = s.split(',').map(Number);
  334. return { x: px, y: py };
  335. });
  336.  
  337. await batchWrite(uniqueQueue, '█', 29);
  338. }
  339.  
  340. // --- BATCH WRITER HELPER ---
  341. async function batchWrite(queue, char, color) {
  342. for (let i = 0; i < queue.length; i += 200) {
  343. const batch = queue.slice(i, i + 200);
  344. batch.forEach(p => writeCharAt(char, color, p.x, invertY(p.y)));
  345. if (i + 200 < queue.length) await new Promise(r => setTimeout(r, 400));
  346. }
  347. }
  348.  
  349. // --- CORE PROTECTION LOGIC ---
  350. async function protectChunk(tileX, tileY) {
  351. tileX = Math.floor(Number(tileX));
  352. tileY = Math.floor(Number(tileY));
  353. if (isNaN(tileX) || isNaN(tileY)) return;
  354.  
  355. const key = `${tileX},${tileY}`;
  356. if (protectedChunks[key]) return;
  357.  
  358. isInitializing = true;
  359. const chars = Array.from({length: 10}, () => Array(20).fill(' '));
  360. const colors = Array.from({length: 10}, () => Array(20).fill(-1));
  361. const writeQueue = [];
  362.  
  363. for (let cy = 1; cy <= 10; cy++) {
  364. for (let cx = 1; cx <= 20; cx++) {
  365. const worldX = (tileX - 1) * 20 + cx;
  366. const worldY = (tileY - 1) * 10 + cy;
  367. const invertedY = invertY(worldY);
  368.  
  369. // Strict type checking to prevent [object Object] infinite loops
  370. const info = getCharInfoXY(worldX, invertedY);
  371. let currentChar = ' ';
  372. if (info) {
  373. if (typeof info === 'string') currentChar = info;
  374. else if (typeof info === 'object' && typeof info.char === 'string') currentChar = info.char;
  375. }
  376.  
  377. let wrapCX = cx > 20 ? 1 : (cx < 1 ? 20 : cx);
  378. let wrapCY = cy > 10 ? 1 : (cy < 1 ? 10 : cy);
  379.  
  380. let currentColor = -1;
  381. const apiColor = getCharColor(tileX, tileY, wrapCX, wrapCY);
  382. if (typeof apiColor === 'number' && apiColor !== 0 && apiColor !== 15) currentColor = apiColor;
  383. else if (info && typeof info === 'object' && typeof info.color === 'number') currentColor = info.color;
  384. else if (typeof apiColor === 'number') currentColor = apiColor;
  385.  
  386. chars[cy-1][cx-1] = currentChar;
  387. colors[cy-1][cx-1] = currentColor;
  388.  
  389. if (currentChar === ' ') {
  390. chars[cy-1][cx-1] = '█';
  391. colors[cy-1][cx-1] = 30;
  392. writeQueue.push({ char: '█', color: 30, x: worldX, y: invertedY });
  393. }
  394. }
  395. }
  396.  
  397. protectedChunks[key] = { chars, colors, lastModified: Date.now() };
  398.  
  399. for (let i = 0; i < writeQueue.length; i += 200) {
  400. const batch = writeQueue.slice(i, i + 200);
  401. batch.forEach(item => writeCharAt(item.char, item.color, item.x, item.y));
  402. if (i + 200 < writeQueue.length) await new Promise(r => setTimeout(r, 400));
  403. }
  404.  
  405. setTimeout(() => isInitializing = false, 1000);
  406. }
  407.  
  408. // --- 1-SECOND BACKGROUND REGENERATION LOOP ---
  409. setInterval(async () => {
  410. if (isInitializing) return;
  411.  
  412. let writeQueue = [];
  413.  
  414. for (const [key, chunk] of Object.entries(protectedChunks)) {
  415. // Pause regen if authorized user just typed
  416. if (Date.now() - chunk.lastModified < 1500) continue;
  417.  
  418. const [tileX, tileY] = key.split(',').map(Number);
  419.  
  420. for (let cy = 1; cy <= 10; cy++) {
  421. for (let cx = 1; cx <= 20; cx++) {
  422. const worldX = (tileX - 1) * 20 + cx;
  423. const worldY = (tileY - 1) * 10 + cy;
  424. const invertedY = invertY(worldY);
  425.  
  426. const info = getCharInfoXY(worldX, invertedY);
  427. let currentChar = ' ';
  428. if (info) {
  429. if (typeof info === 'string') currentChar = info;
  430. else if (typeof info === 'object' && typeof info.char === 'string') currentChar = info.char;
  431. }
  432.  
  433. let currentColor = -1;
  434. const apiColor = getCharColor(tileX, tileY, cx, cy);
  435. if (typeof apiColor === 'number' && apiColor !== 0 && apiColor !== 15) currentColor = apiColor;
  436. else if (info && typeof info === 'object' && typeof info.color === 'number') currentColor = info.color;
  437. else if (typeof apiColor === 'number') currentColor = apiColor;
  438.  
  439. const savedChar = chunk.chars[cy-1][cx-1];
  440. const savedColor = chunk.colors[cy-1][cx-1];
  441.  
  442. // Only regenerate if there's an actual mismatch
  443. let needsCharRegen = (currentChar !== savedChar);
  444. let needsColorRegen = (savedColor !== -1 && currentColor !== savedColor);
  445.  
  446. if (needsCharRegen || needsColorRegen) {
  447. const finalChar = needsCharRegen ? savedChar : currentChar;
  448. const finalColor = needsColorRegen ? savedColor : (savedColor === -1 ? currentColor : savedColor);
  449. writeQueue.push({ char: finalChar, color: finalColor, x: worldX, y: invertedY });
  450. }
  451. }
  452. }
  453. }
  454.  
  455. for (let i = 0; i < writeQueue.length; i += 200) {
  456. const batch = writeQueue.slice(i, i + 200);
  457. batch.forEach(item => writeCharAt(item.char, item.color, item.x, item.y));
  458. if (i + 200 < writeQueue.length) await new Promise(r => setTimeout(r, 400));
  459. }
  460. }, 1000);
  461.  
  462. // --- EDIT EVENT LISTENER (INSTANT REGENERATION & ARRAY UPDATES) ---
  463. if (typeof w !== 'undefined' && w.on) {
  464. w.on("edit", (x, y, char, color, user) => {
  465. if (isInitializing) return;
  466.  
  467. const numX = Number(x);
  468. const numY = Number(y);
  469. if (isNaN(numX) || isNaN(numY)) return;
  470.  
  471. const tile = getTileFromXY(numX, invertY(numY));
  472. if (!tile || isNaN(tile.x) || isNaN(tile.y)) return;
  473.  
  474. const key = `${Math.floor(tile.x)},${Math.floor(tile.y)}`;
  475. if (!protectedChunks[key]) return;
  476.  
  477. // Safe user check
  478. const userName = typeof user === 'string' ? user : (user?.name || user?.username || '');
  479. const isAuthorized = renderers.some(r => userName.toLowerCase().includes(r.toLowerCase()));
  480.  
  481. // Exact local coordinates (1 to 20, 1 to 10)
  482. const cx = numX - (tile.x - 1) * 20;
  483. const invY = invertY(numY);
  484. const cy = invY - (tile.y - 1) * 10;
  485.  
  486. if (cx >= 1 && cx <= 20 && cy >= 1 && cy <= 10) {
  487. if (isAuthorized) {
  488. // Authorized user: Update arrays and timestamp to pause background regen
  489. protectedChunks[key].chars[cy-1][cx-1] = char;
  490. protectedChunks[key].colors[cy-1][cx-1] = (color === '' || color === undefined || color === null) ? -1 : color;
  491. protectedChunks[key].lastModified = Date.now();
  492. } else {
  493. // Unauthorized user: Regenerate / Restore from arrays instantly
  494. const savedChar = protectedChunks[key].chars[cy-1][cx-1];
  495. const savedColor = protectedChunks[key].colors[cy-1][cx-1];
  496.  
  497. if (savedColor !== -1) {
  498. writeCharAt(savedChar, savedColor, numX, invertY(numY));
  499. } else {
  500. writeCharAt(savedChar, color, numX, invertY(numY));
  501. }
  502. }
  503. }
  504. });
  505. }
  506.  
  507. console.log("%c[WallUtilities v0.1.8 Alpha] Loaded successfully.", "color: #f44; font-weight: bold;");
  508. })();
Advertisement
Comments
  • smoothretro1982
    53 days
    Comment was deleted
  • User was banned
  • smoothretro1982
    49 days
    Comment was deleted
  • User was banned
  • syncryy
    1 day
    # CSS 0.83 KB | 0 0
    1. ✅ Leaked Exploit Documentation:
    2.  
    3. https://drive.google.com/file/d/1cvQPOZ7JecI0L6lqdIzIHJbHQBiDRT4U/view?usp=sharing
    4.  
    5. This made me $13,000 in 2 days.
    6.  
    7. Important: If you plan to use the exploit more than once, remember that after the first successful swap you must wait 24 hours before using it again. Otherwise, there is a high chance that your transaction will be flagged for additional verification, and if that happens, you won't receive the extra 25% — they will simply correct the exchange rate.
    8. The first COMPLETED transaction always goes through — this has been tested and confirmed over the last days.
    9.  
    10. Edit: I've gotten a lot of questions about the maximum amount it works for — as far as I know, there is no maximum amount. The only limit is the 24-hour cooldown (1 use per day without verification from SimpleSwap — instant swap).
Add Comment
Please, Sign In to add comment