RED HEAD MOD

Gartic.io için mod menü

当前为 2025-03-05 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name RED HEAD MOD
  3. // @namespace http://tampermonkey.net/
  4. // @version 2.0
  5. // @description Gartic.io için mod menü
  6. // @author Ryzex
  7. // @match https://gartic.io/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13.  
  14. // Mor animasyonlu parlama efekti için stil
  15. const styleTag = document.createElement("style");
  16. styleTag.innerHTML = `
  17. @keyframes glow {
  18. 0% { box-shadow: 0 0 50px purple; }
  19. 50% { box-shadow: 0 0 80px violet; }
  20. 100% { box-shadow: 0 0 50px purple; }
  21. }
  22.  
  23. button:hover {
  24. background-color: gold !important;
  25. transform: scale(1.05);
  26. }
  27.  
  28. #toggleMenuButton:hover {
  29. background-color: purple !important;
  30. color: white !important;
  31. }
  32. `;
  33. document.head.appendChild(styleTag);
  34. var style = document.createElement('style');
  35. style.innerHTML = `
  36. /* Sohbette kendi kullanıcı adını kırmızı ve küçük yap */
  37. .msg.you strong {
  38. color: red !important;
  39. font-size: 12px !important; /* Yazı boyutunu küçült */
  40. }
  41. /* Kullanıcı listesindeki kendi adını kırmızı yap */
  42. .player.you .name {
  43. color: red !important;
  44. }
  45. `;
  46. document.head.appendChild(style);
  47.  
  48. // Menü stili
  49. const menuStyle = `
  50. position: fixed;
  51. top: 50%;
  52. left: 50%;
  53. transform: translate(-50%, -50%);
  54. background-color: black;
  55. padding: 15px;
  56. border-radius: 10px;
  57. color: white;
  58. font-family: Arial, sans-serif;
  59. font-size: 16px;
  60. z-index: 9999;
  61. display: none; /* Başlangıçta menü gizli */
  62. width: 320px;
  63. height: auto;
  64. transition: all 0.5s ease;
  65. box-shadow: 0 0 10px purple;
  66. animation: glow 1.5s infinite alternate;
  67. `;
  68.  
  69. // Sarı butonlar
  70. const buttonStyle = `
  71. background-color: yellow;
  72. border: none;
  73. color: black;
  74. padding: 10px 20px;
  75. text-align: center;
  76. text-decoration: none;
  77. display: inline-block;
  78. font-size: 14px;
  79. margin: 5px;
  80. cursor: pointer;
  81. border-radius: 5px;
  82. font-weight: bold;
  83. transition: 0.3s;
  84. `;
  85.  
  86. // Açma/kapama butonu
  87. const toggleMenuButtonStyle = `
  88. position: fixed;
  89. top: 20px;
  90. left: 20px;
  91. background-color: black;
  92. color: white;
  93. padding: 10px;
  94. cursor: pointer;
  95. font-size: 16px;
  96. border-radius: 5px;
  97. z-index: 9999;
  98. font-family: monospace;
  99. border: 2px solid black;
  100. transition: 0.3s;
  101. `;
  102.  
  103. // Menü HTML yapısı
  104. const menuHTML = `
  105. <div id="modMenu" style="${menuStyle}">
  106. <div style="text-align: center; color: blue; font-size: 20px; margin-bottom: 10px;">RED HEAD</div>
  107. <div>
  108. <label>OTO HG AÇ / KAPA:</label>
  109. <button id="otoHG" style="${buttonStyle}">AÇ</button>
  110. </div>
  111. <div>
  112. <label>GÜLE GÜLE AÇ / KAPA:</label>
  113. <button id="guleGule" style="${buttonStyle}">AÇ</button>
  114. </div>
  115. <div>
  116. <label>OTO KİCK AÇ / KAPA:</label>
  117. <button id="otoKick" style="${buttonStyle}">AÇ</button>
  118. </div>
  119. <div>
  120. <label>CEVAP CHAT AÇ / KAPA:</label>
  121. <button id="cevapChat" style="${buttonStyle}">AÇ</button>
  122. </div>
  123. <div>
  124. <label>PAPAĞAN AÇ / KAPA:</label>
  125. <button id="papagan" style="${buttonStyle}">AÇ</button>
  126. </div>
  127. </div>
  128. <button id="toggleMenuButton" style="${toggleMenuButtonStyle}">/&#62;&#47;</button>
  129. <div id="statusMessage" style="position: fixed; top: 50px; left: 50%; transform: translateX(-50%); background-color: black; color: white; padding: 10px 20px; border-radius: 5px; display: none; font-size: 16px; z-index: 9999;"></div>
  130. `;
  131.  
  132. // Menü ve buton ekleme
  133. document.body.insertAdjacentHTML('beforeend', menuHTML);
  134.  
  135. // Menü açma/kapama işlevi
  136. let menuVisible = false;
  137. document.getElementById('toggleMenuButton').addEventListener('click', function() {
  138. const modMenu = document.getElementById('modMenu');
  139. menuVisible = !menuVisible;
  140.  
  141. if (menuVisible) {
  142. modMenu.style.display = 'block'; // Menü açıldığında
  143. showMessage("Menü Açıldı");
  144. } else {
  145. modMenu.style.display = 'none'; // Menü kapandığında
  146. showMessage("Menü Kapandı");
  147. }
  148. });
  149.  
  150. // Oto HG kontrolü (WebSocket yöntemiyle)
  151. let otoHGActive = false;
  152. document.getElementById('otoHG').addEventListener('click', function() {
  153. if (otoHGActive) {
  154. otoHGActive = false;
  155. showMessage("OTO HG Özelliği KAPANDI.");
  156. } else {
  157. otoHGActive = true;
  158. showMessage("OTO HG Özelliği AÇILDI.");
  159. startAutoWelcome();
  160. }
  161. });
  162.  
  163. function startAutoWelcome() {
  164. let ws = WebSocket.prototype.send;
  165. let baglanti = null;
  166.  
  167. WebSocket.prototype.send = function(veri) {
  168. console.log("Gönderildi:" + veri);
  169. ws.apply(this, arguments);
  170. if (!baglanti) {
  171. baglanti = this;
  172. dinle();
  173. }
  174. };
  175.  
  176. function dinle() {
  177. let nickin = document.getElementsByClassName("user you")[0].querySelectorAll(".nick")[0].innerText;
  178. baglanti.addEventListener("message", (e) => {
  179. let m = e.data;
  180. if (m.includes('42["23"') && !m.includes(nickin)) {
  181. let u = JSON.parse("{" + m.split("{")[1].split("}")[0] + "}");
  182. console.log("kullanıcı:", u);
  183. hosGeldin(u.nick);
  184. }
  185. });
  186. }
  187.  
  188. function hosGeldin(isim) {
  189. let id = window.CACHE_DATA.game[2];
  190. let mesaj = `42[11,${id},"Hoş Geldin ${isim}!"]`;
  191. baglanti.send(mesaj);
  192. }
  193.  
  194. dinle();
  195. }
  196.  
  197. // Güle Güle otomatik cevap fonksiyonu
  198. let guleGuleActive = false;
  199. document.getElementById('guleGule').addEventListener('click', function() {
  200. if (guleGuleActive) {
  201. guleGuleActive = false;
  202. showMessage("GÜLE GÜLE Özelliği KAPANDI.");
  203. chatsend("GÜLE GÜLE Özelliği KAPANDI."); // Chat'e yazdır
  204. } else {
  205. guleGuleActive = true;
  206. showMessage("GÜLE GÜLE Özelliği AÇILDI.");
  207. chatsend("GÜLE GÜLE Özelliği AÇILDI."); // Chat'e yazdır
  208. startGoodbyeMessage();
  209. }
  210. });
  211.  
  212. function startGoodbyeMessage() {
  213. setInterval(function() {
  214. let nickin = document.getElementsByClassName("user you")[0].querySelectorAll(".nick")[0].innerText;
  215. let msgSystem = document.querySelectorAll(".msg.system");
  216. let msg = document.querySelectorAll(".msg");
  217. if (msgSystem.length === 0 || msg.length === 0) return;
  218. let lastMsgSystem = msgSystem[msgSystem.length - 1].innerText;
  219. let lastMsg = msg[msg.length - 1].innerText;
  220. if (lastMsgSystem.includes("ayrıldı")) {
  221. if (lastMsg == lastMsgSystem) {
  222. if (!lastMsgSystem.includes(nickin)) {
  223. lastMsgSystem = lastMsgSystem.replace("ayrıldı", "Güle-Güle");
  224. let words = lastMsgSystem.split(" ");
  225. let hgWord = words.pop();
  226. words.unshift(hgWord);
  227. let goodbyeMessage = words.join(" ");
  228. chatsend(goodbyeMessage);
  229. }
  230. }
  231. }
  232. }, 1000); // Her saniye bir kontrol yapacak
  233. }
  234.  
  235. // Papagan özelliği
  236. let papaganActive = false;
  237. document.getElementById('papagan').addEventListener('click', function() {
  238. if (papaganActive) {
  239. papaganActive = false;
  240. showMessage("PAPAĞAN Özelliği KAPANDI.");
  241. chatsend("PAPAĞAN Özelliği KAPANDI."); // Chat'e yazdır
  242. } else {
  243. papaganActive = true;
  244. showMessage("PAPAĞAN Özelliği AÇILDI.");
  245. chatsend("PAPAĞAN Özelliği AÇILDI."); // Chat'e yazdır
  246. startPapagan();
  247. }
  248. });
  249.  
  250. function startPapagan() {
  251. setInterval(function() {
  252. let userMessages = document.querySelectorAll(".msg.you span");
  253. let allMessages = document.querySelectorAll(".msg span");
  254.  
  255. if (allMessages.length > 0) {
  256. let lastMessage = allMessages[allMessages.length - 1].innerText;
  257. let lastUserMessage = userMessages.length > 0 ? userMessages[userMessages.length - 1].innerText : "";
  258.  
  259. if (lastMessage !== lastUserMessage) {
  260. chatsend(lastMessage);
  261. }
  262. }
  263. }, 150); // 150ms gecikme süresi
  264. }
  265.  
  266. // OTO KİCK ÖZELLİĞİ
  267. let otoKickActive = false;
  268. document.getElementById('otoKick').addEventListener('click', function () {
  269. if (otoKickActive) {
  270. otoKickActive = false;
  271. showMessage("Oto Kick Özelliği KAPANDI.");
  272. chatsend("Oto Kick Özelliği KAPANDI."); // Chat'e yazdır
  273. } else {
  274. otoKickActive = true;
  275. showMessage("Oto Kick Özelliği AÇILDI.");
  276. chatsend("Oto Kick Özelliği AÇILDI."); // Chat'e yazdır
  277. startOtoKick();
  278. }
  279. });
  280.  
  281. function startOtoKick() {
  282. setInterval(function() {
  283. let nickin = document.querySelector(".user.you").querySelector(".nick").innerText;
  284. let kickMsg = document.querySelectorAll(".msg.alert");
  285. if (kickMsg.length === 0) return;
  286. let lastKickMsg = kickMsg[kickMsg.length - 1].innerText;
  287. if (lastKickMsg.includes(", " + nickin)) {
  288. let kicker = lastKickMsg.split(",")[0];
  289. let nicks = document.querySelectorAll(".nick");
  290. for (let i = 0; i < nicks.length; i++) {
  291. if (nicks[i].innerText == kicker) {
  292. nicks[i].click();
  293. document.querySelector(".ic-votekick").click();
  294. }
  295. }
  296. }
  297. }, 1000); // Her saniye bir kontrol yapacak
  298. }
  299.  
  300. // Cevap Chat özelliği
  301. let cevapChatActive = false;
  302. document.getElementById('cevapChat').addEventListener('click', function () {
  303. if (cevapChatActive) {
  304. cevapChatActive = false;
  305. showMessage("CEVAP CHAT Özelliği KAPANDI.");
  306. chatsend("CEVAP CHAT Özelliği KAPANDI."); // Chat'e yazdır
  307. } else {
  308. cevapChatActive = true;
  309. showMessage("CEVAP CHAT Özelliği AÇILDI.");
  310. chatsend("CEVAP CHAT Özelliği AÇILDI."); // Chat'e yazdır
  311. startCevapChat();
  312. }
  313. });
  314.  
  315. function startCevapChat() {
  316. let processedWord = "";
  317. let answer = "";
  318.  
  319. let interval = setInterval(() => {
  320. if (!cevapChatActive) {
  321. clearInterval(interval); // Özellik kapatıldığında durdur
  322. return;
  323. }
  324.  
  325. let msgHit = document.querySelectorAll(".msg.hit");
  326. if (msgHit.length < 1) return;
  327. let lastMsgHit = msgHit[msgHit.length - 1].innerText;
  328. if (lastMsgHit.includes("buldun:")) {
  329. let newWord = lastMsgHit.replace("Cevabı buldun:", "").trim();
  330. if (newWord !== processedWord) {
  331. processedWord = newWord;
  332. answer = newWord.split("").join("\u200C");
  333. chatsend("cevap " + answer);
  334. }
  335. }
  336. }, 500); // Her 500ms'de bir kontrol eder
  337. }
  338.  
  339. // Mesaj gönderme fonksiyonu
  340. function chatsend(m_q) {
  341. let a_i = document.querySelector('input[name=chat]');
  342. let m_a = a_i.value;
  343. a_i.value = m_q;
  344. let m_z = new Event("input", { bubbles: true });
  345. m_z.simulated = true;
  346. let m_b = new Event("submit", { bubbles: true });
  347. m_b.simulated = true;
  348. let m_s = a_i._valueTracker;
  349. m_s && m_s.setValue(m_a);
  350. a_i.dispatchEvent(m_z);
  351. a_i.form.dispatchEvent(m_b);
  352. }
  353.  
  354. // Özellik açma/kapama işlevi
  355. function showMessage(message) {
  356. const statusMessage = document.getElementById('statusMessage');
  357. statusMessage.innerText = message;
  358. statusMessage.style.backgroundColor = 'black'; // Mor renk
  359. statusMessage.style.color = 'yellow';
  360. statusMessage.style.display = 'block';
  361.  
  362. setTimeout(() => {
  363. statusMessage.style.display = 'none';
  364. }, 2000); // Mesaj 2 saniye sonra kaybolur
  365. }
  366.  
  367.  
  368. })();