// ==UserScript==
// @name Chat Scroll - Alert - Instafind
// @namespace http://tampermonkey.net/
// @version 0.1
// @description chat
// @author Neutrox
// @match http://bloble.io/*
// @grant none
// ==/UserScript==
//instafind//
window.chatListWrapper.style.pointerEvents = 'auto';
window.leaderboardList.style.pointerEvents = 'auto';
window.goToBase = function(id) {
let xX = [];
let yY = [];
for(let i = 0; i < users.length; i++){
if(users[i].sid == id){
xX.push(users[i].x)
yY.push(users[i].y)
}
}
if (xX.length > 0 && yY.length > 0) {
camX = xX[0] - player.x;
camY = yY[0] - player.y;
}
}
window.addChatLine = (a, d, c) => {
if (player) {
var b = getUserBySID(a);
if (c || 0 <= b) {
var g = c ? "SERVER" : users[b].name;
c = c ? "#fff" : playerColors[users[b].color] ? playerColors[users[b].color] : playerColors[0];
player.sid == a && (c = "#fff");
b = document.createElement("li");
b.className = player.sid == a ? "chatme" : "chatother";
b.innerHTML = '<span style="color:' + c + '" onclick=goToBase(' + a + ');>[' + g + ']</span> <span class="chatText">' + d + "</span>";
25 < chatList.childNodes.length && chatList.removeChild(chatList.childNodes[0]);
chatList.appendChild(b)
}
}
}
window.addChat = (msg, cor) => {
var b = document.createElement("li");
b.innerHTML = '<span class="chatText" style="color: ' + cor + ';">' + msg + "</span>";
chatList.appendChild(b)
}
//scroll chat//
const chatElement = document.getElementById('chatList');
chatElement.addEventListener('wheel', (event) => {
event.stopPropagation();
});
var css2 = document.createElement("style")
css2.innerText = `
#chatListWrapper {
background-color: rgba(60, 60, 60, 0.6);
border-radius: 4px 4px 0px 0px;
height: 215px;
overflow: visible;
}
#chatList{
width: 100%;
font-family: "regularF";
padding: 8px;
margin: 0;
list-style: none;
box-sizing: border-box;
color: #fff;
overflow: hidden;
word-wrap: break-word;
position: absolute;
bottom: 30px;
font-size: 16px;
line-height: 23px;
overflow-x: hidden;
overflow-y: scroll;
height: 88%;\n\
}
::-webkit-scrollbar {
width: 10px;
background-color: #00000000;
}
::-webkit-scrollbar-thumb {
background-color: #00000080;
}
`
document.head.appendChild(css2)
var chatList = document.querySelector('#chatList');
var observer = new MutationObserver(function(mutations) {
var newElementsAdded = false;
mutations.forEach(function(mutation) {
if (mutation.addedNodes.length > 0) {
newElementsAdded = true;
}
});
if (newElementsAdded) {
chatrolagem();
}
});
var observerConfig = { childList: true };
observer.observe(chatList, observerConfig);
function chatrolagem() {
var chatList = document.querySelector('#chatList');
var isNearBottom = chatList.scrollHeight - chatList.clientHeight - chatList.scrollTop <= 150;
if (isNearBottom) {
chatList.scrollTop = chatList.scrollHeight - chatList.clientHeight;
}
}
window.setupSocket = () => {
socket.on("connect_error", function() {lobbyURLIP ? kickPlayer("Connection failed. Please check your lobby ID") : kickPlayer("Connection failed. Check your internet and firewall settings")});
socket.on("disconnect", function(a) {kickPlayer("Disconnected.")});
socket.on("error", function(a) {kickPlayer("Disconnected. The server may have updated.")});
socket.on("kick", function(a) {kickPlayer(a)});
socket.on("lk", function(a) {partyKey = a});
socket.on("spawn", function() { gameState = 1; unitList = share.getUnitList(); resetCamera(); toggleMenuUI(!1); toggleGameUI(!0); updateUnitList(); player.upgrades = share.getBaseUpgrades();mainCanvas.focus()});
socket.on("gd", function(a) {gameData = a});
socket.on("mpd", function(a) {mapBounds = a});
socket.on("ch", function(a, d, c) {addChatLine(a, d, c)});
socket.on("setUser", function(a, d) { if (a && a[0]) { var c = getUserBySID(a[0]), b = { sid: a[0], name: a[1], iName: "Headquarters", dead: !1, color: a[2], size: a[3], startSize: a[4], x: a[5], y: a[6], buildRange: a[7], gridIndex: a[8], spawnProt: a[9], skin: a[10], desc: "Base of operations of " + a[1], kills: 0, typeName: "Base" }; null != c ? (users[c] = b, d && (player = users[c])) : (users.push(b), d && (player = users[users.length - 1]));}});
socket.on("klUser", function(a) {var d = getUserBySID(a);null != d && (users[d].dead = !0);player && player.sid == a && (hideMainMenuText(), leaveGame())});
socket.on("delUser", function(a) {a = getUserBySID(a);null != a && users.splice(a, 1)});
socket.on("au", function(a) { a && (units.push({ id: a[0], owner: a[1], uPath: a[2] || 0, type: a[3] || 0, color: a[4] || 0, paths: a[5], x: a[6] || 0, sX: a[6] || 0, y: a[7] || 0, sY: a[7] || 0, dir: a[8] || 0, dst: UTILS.roundToTwo(UTILS.getDistance(player.x, player.y, a[6], a[7])), turRot: a[8] || 0, speed: a[9] || 0, renderIndex: a[10] || 0, turretIndex: a[11] || 0, range: a[12] || 0, cloak: a[13] || 0 }), units[units.length - 1].speed && (units[units.length - 1].startTime = window.performance.now()), a = getUnitFromPath(units[units.length - 1].uPath)) && (units[units.length - 1].size = a.size, units[units.length - 1].shape = a.shape, units[units.length - 1].layer = a.layer, units[units.length - 1].renderIndex || (units[units.length - 1].renderIndex = a.renderIndex), units[units.length - 1].range || (units[units.length - 1].range = a.range), units[units.length - 1].turretIndex || (units[units.length - 1].turretIndex = a.turretIndex), units[units.length - 1].iSize = a.iSize) });
socket.on("spa", function(a, d, c, b) { a = getUnitById(a); if (null != a) { var g = UTILS.getDistance(d, c, units[a].x || d, units[a].y || c); 300 > g && g ? (units[a].interpDst = g, units[a].interpDstS = g, units[a].interpDir = UTILS.getDirection(d, c, units[a].x || d, units[a].y || c)) : (units[a].interpDst = 0, units[a].interpDstS = 0, units[a].interpDir = 0, units[a].x = d, units[a].y = c); units[a].interX = 0; units[a].interY = 0; units[a].sX = units[a].x || d; units[a].sY = units[a].y || c; b[0] && (units[a].dir = b[0], units[a].turRot = b[0]); units[a].paths = b; units[a].startTime = window.performance.now()}});
socket.on("uc", function(a, d) {unitList && (unitList[a].count = d);forceUnitInfoUpdate = !0});
socket.on("uul", function(a, d) {unitList && (unitList[a].limit += d)});
socket.on("rpu", function(a, d) {var c = getUnitFromPath(a);c && (c.dontShow = d, forceUnitInfoUpdate = !0)});
socket.on("sp", function(a, d) { var c = getUserBySID(a); if (null != c) { users[c].spawnProt = d; var playerName = users[c].name; var playerSid = users[c].sid; var message = '<a href="#" onclick="goToBase(\'' + playerSid + '\')" style="color: ' + playerColors[users[c].color] + ';">' + playerName + '</a> left the base.'; addChat(message, playerColors[users[c].color]); } });
socket.on("ab", function(a) { a && bullets.push({ x: a[0], sX: a[0], y: a[1], sY: a[1], dir: a[2], speed: a[3], size: a[4], range: a[5] }) });
socket.on("uu", function(a, d) {if (void 0 != a && d) {var c = getUnitById(a);if (null != c)for (var b = 0; b < d.length;) units[c][d[b]] = d[b + 1], "dir" == d[b] && (units[c].turRot = d[b + 1]), b += 2}});
socket.on("du", function(a) {a = getUnitById(a);null != a && units.splice(a, 1)});
socket.on("sz", function(a, d) {var c = getUserBySID(a);null != c && (users[c].size = d)});
socket.on("pt", function(a) {scoreContainer.innerHTML = "Power <span class='greyMenuText'>" + a +"/6000</span>"; player.power = a});
socket.on("l", function(a) {for (var d = "", c = 1, b = 0; b < a.length;) d += "<div class='leaderboardItem' onclick=goToBase(" + a[b] + ");><div style='display:inline-block;float:left;' class='whiteText'>" + c + ".</div> <div class='" + (player && a[b] == player.sid ? "leaderYou" : "leader") + "'>" + a[b + 1] + "</div><div class='scoreText'>" + a[b + 2] + "</div></div>", c++, b += 3;leaderboardList.innerHTML = d})
}