您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Better chat for IdleScape
// ==UserScript== // @name IdleScape - Chat.0 // @namespace D4IS // @version 1.2.1 // @description Better chat for IdleScape // @author D4M4G3X // @match *://*.idlescape.com/* // @grant none // @require https://code.jquery.com/jquery-3.4.1.min.js // @run-at document-start // ==/UserScript== (function() { /* INITIATE APPLICATION */ let lib = {}; let app = {}; let initInterval = setInterval(()=> { if (window.D4IS) { clearInterval(initInterval); lib = window.D4IS.init('chat.0', '1.2.1'); app = lib["chat.0"]; lib.app.setUpdateLocation($('.chat-tab-private')); main(); } }, 100); function main() { /* SET DEFAULT VALUES */ app.chatHeight = 250; /* RUN MAIN INTERVAL */ let mainInterval = setInterval(()=> { if (app.ready && $('.status-bar').length) { if(!app.setup) { app.setup = true; if (lib.general.getStorage('ChatHeight')) { app.chatHeight = parseInt(lib.general.getStorage('ChatHeight')); } $('.play-area-chat-container').css('flex', '0 0 '+app.chatHeight+'px'); } setupChannels(); } }, 1000); /* QUICK INTERVAL */ let checkInterval = setInterval(()=> { if (app.ready && $('.status-bar').length) { checkUsernames(); checkPrivates(); checkCommands(); checkMessageCount(); whoisPopup(); } }, 100); /* UPDATE INTERVAL */ let updateInterval = setInterval(()=> { if (app.ready && $('.status-bar').length) { lib.app.updateUser(app.name); } }, 5 * 60 * 1000); function checkCommands() { $('.chat-message-system:not(.chat0-done)').each(function() { let $that = $(this); if (~$that.text().indexOf('Unknown command:')) { $that.addClass('chat0-done'); let cmd = $that.text().split('Unknown command: ')[1]; if (lib.app.commands) { if (lib.app.commands[cmd]) { lib.app.commands[cmd](); $that.css({ 'height': '0', 'display': 'block', 'overflow': 'hidden' }).text(''); } } } }); } function checkUsernames() { $('.message-username:not(.user-cloned)').each(function() { $(this).addClass('user-cloned'); let $user = $('<div>', { 'class': $(this).attr('class') + ' user-menu' }).html($(this).html()); $user.insertAfter($(this)); $user.click(function(e) { openPopup($(this), e.pageX); }); $(this).addClass('user-original'); $(this).hide(); }); } function gotoTab(tab, first = false) { $('.chat-tab').removeClass('selected-tab'); $('.chat-tab-'+tab.toLowerCase()).addClass('selected-tab'); $('.chat-interface-container').hide(); $('.chat-interface-container.'+tab.toLowerCase()).show(); if(first) { $('.chat-interface-container.'+tab.toLowerCase()).find('.chat-tabs > div:first-child').click(); } } function whoisPopup() { $('.chat-message-system:not(.chat0-done').each(function() { let $that = $(this); if (~$that.text().indexOf('total level')) { $that.addClass('chat0-done'); let skills = ['mining', 'foraging', 'fishing', 'farming', 'smithing', 'crafting', 'cooking', 'constitution', 'attack', 'strength', 'defense', 'runecrafting', 'enchanting']; let user = $that.text().split('[SYSTEM]: ')[1].split(' ')[0]; let league = $that.text().split('playing in ')[1].split('.')[0]; let level = {}; let $html = $('<div>'); let $wrap = $('<div>', { 'class': 'chat0-whois-level-wrap' }).appendTo($html); $.each(skills, function(k, skill) { if (~$that.text().indexOf(lib.general.ucfirst(skill)+' Level: ')) { level[skill] = $that.html().split(lib.general.ucfirst(skill)+' Level: ')[1].split('<br>')[0]; if(~level[skill].indexOf('+')) { level[skill] = level[skill].replace('(', '<span style="color: #7cd6ff">('); level[skill] = level[skill].replace(')', ')</span>'); } let $level = $('<div>', { 'class': 'chat0-whois-level' }).appendTo($wrap); let $icon = $('<img>', { 'class': 'dialog-icon chat0-whois-level-icon' }).attr({ 'src': lib.game.getSkillIcon(skill) }).appendTo($level); let $text = $('<span>', { 'class': 'dialog-text-big chat0-whois-level-text' }).html(lib.general.ucfirst(skill)+': '+level[skill]).appendTo($level); } }); let $titlewrap = $('<div>'); let $title = $('<div>', { 'class': 'chat0-whois-title' }).appendTo($titlewrap); let $text = $('<span>', { 'class': 'dialog-text-big chat0-whois-title-text' }).text(user).appendTo($title); let $icon = $('<img>', { 'class': 'dialog-icon chat0-whois-title-icon' }).attr({ 'src': lib.game.getLeagueIcon(league.split(' ')[0].toLowerCase()) }).appendTo($title); lib.game.dialog({ 'title': $titlewrap.html(), 'text': $html.html(), 'class': 'chat0-whois', 'type': 'close', }); $that.css({ 'height': '0', 'display': 'block', 'overflow': 'hidden' }).text(''); } }); } function openPopup($obj, posX) { if (lib.user.getName() == $obj.text()) { return false; } $('.chat-user-options').remove(); let pos = $obj.offset(); let $popup = $('<div>', { 'class': 'chat-user-options' }).appendTo($('body')); popupButton('Whisper', function() { $obj.parent().find('.user-original').click(); gotoTab('private'); }).appendTo($popup); popupButton('Whois', function() { $obj.parents('.chat-message-container').find('input').val('/whois ' + $obj.text()); $obj.parents('.chat-message-container').find('input').focus(); }).appendTo($popup); popupButton('Block', function() { $obj.parents('.chat-message-container').find('input').val('/block ' + $obj.text()); $obj.parents('.chat-message-container').find('input').focus(); }).appendTo($popup); popupButton('Close').appendTo($popup); $popup.css({ 'left': posX - 45, 'top': pos.top - ($popup.height() + 10) }); } function popupButton(text, cb = function(){}) { let $btn = $('<div>', { 'class': 'nav-tab no-select chat-user-option-' + text.toLowerCase() }).text(text); $btn.hover(function() { $(this).addClass('selected-tab'); }, function() { $(this).removeClass('selected-tab'); }); $btn.click(function() { $(this).parent().remove(); cb(); }); return $btn; } function setupChannels() { if(!$('.chat-tab-wrap').length) { let $tabWrap = $('<ul>', { 'class': 'chat-tab-wrap' }).insertAfter($('.chat-buttons')); $tabWrap.css({ 'display': 'flex', 'margin': '0', 'background':'#2a343e', 'border': '1px solid #222' }); addChatTab('Public').appendTo($tabWrap); addChatTab('Private').appendTo($tabWrap); $('.chat-buttons').remove(); let $options = $('<div>', { 'class': 'chat-option-wrap' }).appendTo($tabWrap); let $option = []; $option[0] = $('<div>', { 'class': 'chat-button chat-option noselect' }).text('▲'); $option[0].click(function() { if (app.chatHeight < 550) { app.chatHeight += 100; lib.general.setStorage('ChatHeight', app.chatHeight); $('.play-area-chat-container').css('flex', '0 0 '+app.chatHeight+'px'); } }); $option[1] = $('<div>', { 'class': 'chat-button chat-option noselect' }).text('▼'); $option[1].click(function() { if (app.chatHeight > 150) { app.chatHeight -= 100; lib.general.setStorage('ChatHeight', app.chatHeight); $('.play-area-chat-container').css('flex', '0 0 '+app.chatHeight+'px'); } }); $option[2] = $('<div>', { 'class': 'chat-button chat-option noselect' }).text('-'); $option[2].click(function() { $.each($option, function() { $(this).hide(); }); $option[3].show(); $('.play-area-chat-container').css('flex', '0 0 31px'); }); $option[3] = $('<div>', { 'class': 'chat-button chat-option noselect' }).text('+').hide(); $option[3].click(function() { $.each($option, function() { $(this).show(); }); $(this).hide(); $('.play-area-chat-container').css('flex', '0 0 '+app.chatHeight+'px'); }); $.each($option, function() { $(this).appendTo($options); }); } if(!$('.chat-interface-container.private').length) { $('.chat-message-container-box').css({ 'background': '#222323', }); let $publicChat = $('.chat-interface-container'); let $privateChat = $publicChat.clone(); $publicChat.addClass('public'); $privateChat.addClass('private').insertAfter($publicChat); $privateChat.find('.chat-tab-channel').remove(); $privateChat.find('.chat-message-container').remove(); $privateChat.find('.chat-functions-item').remove(); $privateChat.hide(); } } function checkPrivates() { $('.chat-interface-container.public').find('.chat-tabs > div:not(.closed)').each(function() { if ($(this).hasClass('chat-tab-whisper')) { let $publicChat = $('.chat-interface-container.public'); let $privateChat = $('.chat-interface-container.private'); let $whisperTab = $(this); let $chatBox = $publicChat.find('.chat-message-container-box > .chat-message-container:last-child'); $whisperTab.addClass('whisper-'+$(this).text().split(' ')[1]); $whisperTab.appendTo($privateChat.find('.chat-tabs')); $whisperTab.find('a').hide(); $chatBox.addClass('chatBox-'+$(this).text().split(' ')[1]); $chatBox.appendTo($privateChat.find('.chat-message-container-box')); } }); } function checkMessageCount() { let tabs = ['public', 'private'] $.each(tabs, function(k, tab) { let count = 0; $('.chat-interface-container.' + tab).find('.chat-tabs > div').each(function() { if (~$(this).text().indexOf('(') && ~$(this).text().indexOf(')')) { count += parseInt($(this).text().split('(')[1].split(')')[0]); } }); $('.chat-tab-'+tab).find('span').text('('+count+')'); }) } function addChatTab(label) { let $chatTab = $('<li>', { 'class': 'nav-tab chat-tab chat-tab-' + label.toLowerCase() }).html(label+' <span>(0)</span>'); if (label === 'Public') { $chatTab.addClass('selected-tab'); } $chatTab.click(function() { gotoTab(label, true); }); return $chatTab; } } })(); if (!window.D4IS_Socket) { window.D4IS_Socket = true; const sockets = []; const nativeWebSocket = window.WebSocket; window.WebSocket = function(...args){ const socket = new nativeWebSocket(...args); sockets.push(socket); return socket; }; let setupSocket = setInterval(()=> { let lib = window.D4IS; if(sockets.length != 0){ clearInterval(setupSocket); sockets[0].addEventListener('message', (e) => socketMessageHandler(e)); } }, 10); } function socketMessageHandler(e) { let lib = window.D4IS; let getHandler = setInterval(()=> { if (lib) { clearInterval(getHandler); lib.app.messageHandler(e); } }, 10) } function includeJS(file) { var script = document.createElement('script'); script.src = file; script.type = 'text/javascript'; script.defer = false; document.getElementsByTagName('head').item(0).appendChild(script); } function includeCSS(file) { var style = document.createElement('link'); style.rel = 'stylesheet'; style.href = file; style.type = 'text/css'; document.getElementsByTagName('head').item(0).appendChild(style); } if (typeof window.D4IS_JS == 'undefined') { window.D4IS_JS = true; includeJS('https://digimol.net/idlescape/assets/js/lib.js'); } if (typeof window.D4IS_CSS == 'undefined') { window.D4IS_CSS = true; includeCSS('https://digimol.net/idlescape/assets/css/game.css'); }