Location Fineder for Neal.fun

Bot for Neal.fun site that allows you to skip all unnecesarry locations until you find your desired one!

  1. // ==UserScript==
  2. // @name Location Fineder for Neal.fun
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.0
  5. // @description Bot for Neal.fun site that allows you to skip all unnecesarry locations until you find your desired one!
  6. // @author Danylo, discord: codemeteor
  7. // @match https://neal.fun/wonders-of-street-view/
  8. // @license Code Meteor Team (CMT)
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. // Function to check if the keyword is met in the HTML
  16. function checkKeyword() {
  17. const keyword = keywordInput.value.trim();
  18. const locationDiv = document.querySelector('.info-location');
  19. if (keyword && locationDiv && locationDiv.textContent.includes(keyword)) {
  20. clearInterval(interval);
  21. } else {
  22. // Press the "Random" button if the keyword doesn't match
  23. const randomButton = document.querySelector('button.random');
  24. if (randomButton) {
  25. randomButton.click();
  26. }
  27. }
  28. }
  29.  
  30. // Create GUI elements
  31. const guiContainer = document.createElement('div');
  32. guiContainer.id = 'botGuiContainer';
  33. guiContainer.innerHTML = `
  34. <style>
  35. #botGuiContainer {
  36. position: fixed;
  37. top: 10px;
  38. left: 10px;
  39. z-index: 9999;
  40. padding: 20px;
  41. border-radius: 10px;
  42. display: none;
  43. animation: fadeIn 0.3s ease-in-out;
  44. background: rgba(10, 0, 10, 1) url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAYAAAASVl2WAAAAiklEQVQYlY2QMQqCQBBF3xqBgZiDwBR/D0xE8IXZjvFkM8XMwCTMDF8IgAVJnJmDDkM2ThDIJYjAAhA+Zb+wM+h2VZBGSN0MBIz3BVKyixvBzBGObL4Vwb0x1Q0kZShGHDziz5M2TxQwsAHc/LvZBJfIoAAAAASUVORK5CYII=");
  45. position: relative; /* Added position relative */
  46. background-size: 400px; /* Set background size to 400px */
  47. width: 525px; /* Set width to 400px */
  48. }
  49. @keyframes fadeIn {
  50. from { opacity: 0; }
  51. to { opacity: 1; }
  52. }
  53. #botGuiContainer.show {
  54. display: block;
  55. }
  56. #startStopCheckbox {
  57. margin-right: 15px;
  58. margin-top: 5px;
  59. }
  60. #startStopLabel {
  61. font-weight: bold;
  62. margin-right: 10px;
  63. color: white; /* Change text color to white */
  64. }
  65. #keywordInput {
  66. margin-top: 10px;
  67. padding: 8px;
  68. border-radius: 5px;
  69. border: 1px solid #ccc;
  70. background-color: #333;
  71. color: white;
  72. width: 100%;
  73. box-sizing: border-box;
  74. }
  75. #delaySlider {
  76. margin-top: 10px;
  77. width: 100%;
  78. }
  79. #delayText {
  80. margin-top: 5px;
  81. color: white;
  82. }
  83. #watermark {
  84. position: absolute; /* Positioned within the GUI container */
  85. bottom: 10px;
  86. left: 400px; /* Position the watermark 400px from the left side of the screen */
  87. color: #888;
  88. font-size: 12px;
  89. z-index: -1; /* Ensure the watermark is behind other elements */
  90. }
  91. /* Dots animation */
  92. #dotsBackground {
  93. position: absolute;
  94. top: 0;
  95. left: 0;
  96. bottom: 0;
  97. right: 0;
  98. pointer-events: none;
  99. z-index: -1;
  100. background-size: 50px 50px;
  101. background-image: radial-gradient(circle, #888 1px, transparent 1px), radial-gradient(circle, #888 1px, transparent 1px);
  102. background-position: 0 0, 25px 25px;
  103. background: rgba(100, 0, 60, 1)
  104. opacity: 0.5;
  105. animation: dotsAnimation 10s infinite linear;
  106. }
  107. @keyframes dotsAnimation {
  108. from {
  109. background-position: 0 0, 25px 25px;
  110. }
  111. to {
  112. background-position: 50px 0, 75px 75px;
  113. }
  114. }
  115. #findNextButton {
  116. margin-top: 10px;
  117. padding: 10px 20px;
  118. border: none;
  119. border-radius: 5px;
  120. background-color: #666;
  121. color: white;
  122. cursor: pointer;
  123. }
  124. #findNextButton:hover {
  125. background-color: #999;
  126. }
  127. </style>
  128. <div id="dotsBackground"></div>
  129. <input type="checkbox" id="startStopCheckbox">
  130. <label for="startStopCheckbox" id="startStopLabel">Start bot?</label>
  131. <input type="text" id="keywordInput" placeholder="Enter Location">
  132. <input type="range" min="0" max="1500" value="1000" id="delaySlider">
  133. <div id="delayText"></div> <!-- Element for displaying delay text -->
  134. <div id="watermark">Bot made by Danylo</div> <!-- Watermark -->
  135. <button id="findNextButton">Find Next</button> <!-- Button to find next -->
  136. `;
  137. document.body.appendChild(guiContainer);
  138.  
  139. const startStopCheckbox = document.getElementById('startStopCheckbox');
  140. const keywordInput = document.getElementById('keywordInput');
  141. const delaySlider = document.getElementById('delaySlider');
  142. const delayText = document.getElementById('delayText'); // Get the delay text element
  143. const findNextButton = document.getElementById('findNextButton'); // Get the find next button
  144.  
  145. let interval;
  146.  
  147. // Function to start/stop the bot based on checkbox state
  148. function toggleBot() {
  149. if (startStopCheckbox.checked) {
  150. startStopLabel.textContent = 'Stop bot?';
  151. interval = setInterval(checkKeyword, delaySlider.value); // Use the delay from the slider
  152. } else {
  153. startStopLabel.textContent = 'Start bot?';
  154. clearInterval(interval);
  155. }
  156. }
  157.  
  158. // Function to update delay text
  159. function updateDelayText() {
  160. const delayValue = parseInt(delaySlider.value);
  161. if (delayValue === 0) {
  162. delayText.textContent = 'Find as fast as possible';
  163. } else {
  164. delayText.textContent = `Delay: ${delayValue}ms`;
  165. }
  166. }
  167.  
  168. // Function to handle "Find Next" button click
  169. function findNext() {
  170. startStopCheckbox.checked = true; // Check the checkbox
  171. startStopCheckbox.dispatchEvent(new Event('change')); // Dispatch change event
  172. const randomButton = document.querySelector('button.random');
  173. if (randomButton) {
  174. randomButton.click();
  175. }
  176. }
  177.  
  178. // Toggle GUI visibility on pressing the "Insert" key
  179. document.addEventListener('keydown', function(event) {
  180. if (event.code === 'Insert') {
  181. guiContainer.classList.toggle('show');
  182. }
  183. });
  184.  
  185. // Add event listeners
  186. startStopCheckbox.addEventListener('change', toggleBot);
  187. delaySlider.addEventListener('input', updateDelayText); // Update delay text when slider value changes
  188. findNextButton.addEventListener('click', findNext); // Add click event listener to find next button
  189.  
  190. // Initial update of delay text
  191. updateDelayText();
  192. })();

QingJ © 2025

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