Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name THAIลวงตามาโคV1
- // @namespace Agar.io Wumbo's Agar Mini-Map Script!
- // @version 1.0.8
- // @description This script will show a mini map and your location on agar.io
- // @author Wumbo
- // @license MIT
- // @match http://agar.pro/play/*
- // @require http://cdn.jsdelivr.net/msgpack/1.05/msgpack.js
- // @require https://cdn.bootcss.com/jquery/1.11.3/jquery.min.js
- // @require https://cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js
- // @grant none
- // @run-at document-body
- // ==/UserScript==
- window.msgpack = this.msgpack;
- (function() {
- var _WebSocket = window._WebSocket = window.WebSocket;
- var $ = window.jQuery;
- var msgpack = window.msgpack;
- var options = {
- enableMultiCells: true,
- enablePosition: true,
- enableCross: true,
- showMemberOnly: true,
- showPlayerNameInsteadOfId: true,
- };
- /* Configuration for porting */
- var Config_poker = {
- fieldName : {
- region : "#o-region",
- gamemode : "#o-gamemode",
- room : '#roomIdOrIp'
- },
- injectOnMessage : false,
- };
- var Config_DaChong = {
- fieldName : {
- region : "#region",
- gamemode : "#gamemode",
- room : '#srv-ip'
- },
- injectOnMessage : true,
- };
- var currentConfig = Config_DaChong;
- var fieldName = currentConfig.fieldName;
- var injectOnMessage = currentConfig.injectOnMessage;
- var defaultServer = "ws://eddy.zone.be:8000";
- // game states
- var agarServerAddress = null;
- var map_server = null;
- var player_name = [];
- var players = [];
- var id_players = [];
- var cells = [];
- var current_cell_ids = [];
- var start_x = -7000,
- start_y = -7000,
- end_x = 7000,
- end_y = 7000,
- length_x = 14000,
- length_y = 14000;
- var minimapHeight = 300;
- var minimapWidth = 300;
- var render_timer = null;
- var update_server_list_timer = null;
- var mini_map_tokens = [];
- var mapEvent = [];
- /* Map Event Object */
- function Event(data){
- this.x = data.x;
- this.y = data.y;
- this.type = data.type;
- this.origin = data.origin;
- this.time = Date.now();
- }
- Event.TYPE_NORMAL = 0;
- Event.TYPE_FEED = 1;
- Event.TYPE_FAKESPACE = 2;
- Event.TYPE_RUN = 3;
- Event.prototype = {
- toSendObject: function(){
- return {
- x: this.x,
- y: this.y,
- type: this.type,
- message: this.message
- };
- },
- isTimeout : function(){
- return Date.now() - this.time > 500;
- },
- render: function(ctx, xyTransform, maxsize){
- var elapsedTime = Date.now() - this.time;
- if(elapsedTime > 500){
- /* TODO: delete */
- return;
- }
- var position = xyTransform(this.x, this.y);
- var size = maxsize * elapsedTime / 500;
- var color;
- switch(this.type){
- case Event.TYPE_NORMAL: color = "#55FF55"; break;
- case Event.TYPE_FEED: color = "#CCCCFF"; break;
- case Event.TYPE_FAKESPACE: color = "#FFFFFF"; break;
- case Event.TYPE_RUN: color = "#FF0000"; break;
- }
- ctx.save();
- ctx.strokeStyle = color;
- ctx.globalAlpha = Math.min(2 * (500 - elapsedTime) / 500, 1);
- ctx.lineCap = "round";
- ctx.lineJoin = "round";
- ctx.lineWidth = size * 0.05;
- ctx.beginPath();
- ctx.arc(position.x,
- position.y,
- size,
- 0,
- 2 * Math.PI,
- false);
- ctx.closePath();
- ctx.stroke();
- },
- };
- function miniMapSendRawData(data) {
- if (map_server !== null && map_server.readyState === window._WebSocket.OPEN) {
- var array = new Uint8Array(data);
- map_server.send(array.buffer);
- }
- }
- function getAgarServerInfo(){
- return {
- address : agarServerAddress,
- region: $(fieldName.region).val(),
- gamemode: $(fieldName.gamemode).val() === '' ? ':ffa' : $(fieldName.gamemode).val(),
- party: $(fieldName.room).val(),
- };
- }
- function miniMapConnectToServer(address, onOpen, onClose) {
- if(map_server !== null)return;
- var ws = null;
- try {
- ws = new window._WebSocket(address);
- } catch (ex) {
- onClose();
- console.error(ex);
- return false;
- }
- ws.binaryType = "arraybuffer";
- ws.onopen = onOpen;
- ws.onmessage = function(event) {
- var buffer = new Uint8Array(event.data);
- var packet = msgpack.unpack(buffer);
- switch(packet.type) {
- case 128: /* Update map */
- for (var i=0; i < packet.data.addition.length; ++i) {
- var cell = packet.data.addition[i];
- if (! miniMapIsRegisteredToken(cell.id))
- {
- miniMapRegisterToken(
- cell.id,
- miniMapCreateToken(cell.id, cell.color)
- );
- }
- var size_n = cell.size/length_x;
- miniMapUpdateToken(cell.id, (cell.x - start_x)/length_x, (cell.y - start_y)/length_y, size_n);
- }
- for (i = 0; i < packet.data.deletion.length; ++i) {
- var id = packet.data.deletion[i];
- miniMapUnregisterToken(id);
- }
- break;
- case 129: /* Update player */
- players = packet.data;
- for (var p in players) {
- var player = players[p];
- var ids = player.ids;
- for (i in ids) {
- id_players[ids[i]] = player.no;
- }
- }
- console.log('update-list');
- window.mini_map_party.trigger('update-list');
- break;
- case 131: /* Update server list */
- $('#server-list').empty();
- packet.data.forEach(function(server){
- var uid = server.uid;
- var info = server.info;
- var playerCount = server.playerCount;
- var item = $('<a>')
- .text(info.address + ' ' + info.gamemode + ' : ' + playerCount)
- .click({ token: info.party, uid: uid },function(e){
- e.preventDefault();
- var target = $(e.currentTarget);
- if(e.data.token !== ''){
- window.connectJ(e.data.token);
- $(fieldName.room).val(e.data.token);
- setTimeout(function(){
- miniMapSendRawData(msgpack.pack({
- type: 51,
- data: e.data.uid
- }));
- }, 1000);
- }
- });
- var item2 = $('<li>');
- item.appendTo(item2);
- item2.appendTo($('#server-list'));
- });
- break;
- case 33: /* Add event */
- mapEvent.push(new Event(packet.data));
- }
- };
- ws.onerror = function() {
- onClose();
- console.error('failed to connect to map server');
- };
- ws.onclose = onClose;
- map_server = ws;
- }
- function miniMapRender() {
- var canvas = window.mini_map;
- var ctx = canvas.getContext('2d');
- // Background
- ctx.clearRect(0, 0, canvas.width, canvas.height);
- ctx.globalAlpha = 0.3;
- ctx.fillStyle = '#000000';
- ctx.fillRect(0, 0, canvas.width, canvas.height);
- // Draw coordinate
- var yAxis = ['A', 'B', 'C', 'D', 'E'];
- var xSize = canvas.width;
- var ySize = canvas.height;
- ctx.beginPath();
- ctx.lineWidth = 2;
- ctx.textAlign = 'center';
- ctx.textBaseline = 'middle';
- ctx.font = (0.6 * xSize / 5) + 'px Arial';
- ctx.fillStyle = ctx.strokeStyle = '#AAAAAA';
- for (var j = 0; j < 5; ++j) {
- for (var i = 0; i < 5; ++i) {
- ctx.strokeRect((xSize / 5 * i), (ySize / 5 * j), (xSize / 5), (ySize / 5));
- ctx.fillText(yAxis[j] + (i + 1), (xSize / 5 * i) + (xSize / 5 / 2), (ySize / 5 * j) + (ySize / 5 / 2));
- }
- }
- ctx.stroke();
- ctx.globalAlpha = 1.0; // restore alpha
- var rendered_player = [];
- for (var id in mini_map_tokens) {
- var token = mini_map_tokens[id];
- var x = token.x * canvas.width;
- var y = token.y * canvas.height;
- var size = token.size * canvas.width;
- if (!options.showMemberOnly || id_players[id] !== undefined || current_cell_ids.indexOf(token.id) !== -1) {
- if(options.showMemberOnly && size < 7){ /* add an translucent, bigger cell to make it clear*/
- ctx.globalAlpha = 0.5;
- ctx.beginPath();
- ctx.arc(
- x,
- y,
- 7,
- 0,
- 2 * Math.PI,
- false
- );
- ctx.closePath();
- ctx.fillStyle = token.color;
- ctx.fill();
- ctx.globalAlpha = 1.0;
- }
- ctx.beginPath();
- ctx.arc(
- x,
- y,
- size,
- 0,
- 2 * Math.PI,
- false
- );
- ctx.closePath();
- ctx.fillStyle = token.color;
- ctx.fill();
- }
- if (options.enableCross && -1 != current_cell_ids.indexOf(token.id)){
- miniMapDrawCross(token.x, token.y, token.color);
- }
- if (id_players[id] !== undefined) {
- // Draw you party member's crosshair
- if (options.enableCross) {
- miniMapDrawCross(token.x, token.y, token.color);
- }
- if(rendered_player.indexOf(id_players[id]) == -1){
- if(options.showPlayerNameInsteadOfId){
- if(players[id_players[id]].name){
- /* draw name only once */
- ctx.font = '14px Arial';
- ctx.textAlign = 'center';
- ctx.textBaseline = 'middle';
- ctx.fillStyle = 'white';
- ctx.fillText(String.fromCharCode.apply(null, players[id_players[id]].name), x, y + ((size < 10) ? 10 : size * 1.3));
- rendered_player.push(id_players[id]);
- }
- }else{
- ctx.font = size * 2 + 'px Arial';
- ctx.textAlign = 'center';
- ctx.textBaseline = 'middle';
- ctx.fillStyle = 'white';
- ctx.fillText(id_players[id] + 1, x, y);
- }
- }
- }
- }
- for(var e = 0;e < mapEvent.length; ++e){
- if(mapEvent[e]){
- mapEvent[e].render(ctx,
- function(x,y){
- var nx = (x - start_x) / length_x * minimapWidth;
- var ny = (y - start_y) / length_y * minimapHeight;
- return {x:nx, y:ny};
- } ,
- 60/* size */);
- if(mapEvent[e].isTimeout()){
- mapEvent.splice(e, 1);
- }
- }
- }
- }
- function miniMapDrawCross(x, y, color) {
- var canvas = window.mini_map;
- var ctx = canvas.getContext('2d');
- ctx.lineWidth = 0.5;
- ctx.beginPath();
- ctx.moveTo(0, y * canvas.height);
- ctx.lineTo(canvas.width, y * canvas.height);
- ctx.moveTo(x * canvas.width, 0);
- ctx.lineTo(x * canvas.width, canvas.height);
- ctx.closePath();
- ctx.strokeStyle = color || '#FFFFFF';
- ctx.stroke();
- }
- function miniMapCreateToken(id, color) {
- var mini_map_token = {
- id: id,
- color: color,
- x: 0,
- y: 0,
- size: 0
- };
- return mini_map_token;
- }
- function miniMapRegisterToken(id, token) {
- if (mini_map_tokens[id] === undefined) {
- // window.mini_map.append(token);
- mini_map_tokens[id] = token;
- }
- }
- function miniMapUnregisterToken(id) {
- if (mini_map_tokens[id] !== undefined) {
- // mini_map_tokens[id].detach();
- delete mini_map_tokens[id];
- }
- }
- function miniMapIsRegisteredToken(id) {
- return mini_map_tokens[id] !== undefined;
- }
- function miniMapUpdateToken(id, x, y, size) {
- if (mini_map_tokens[id] !== undefined) {
- mini_map_tokens[id].x = x;
- mini_map_tokens[id].y = y;
- mini_map_tokens[id].size = size;
- return true;
- } else {
- return false;
- }
- }
- function miniMapUpdatePos(x, y) {
- window.mini_map_pos.text('x: ' + x.toFixed(0) + ', y: ' + y.toFixed(0));
- }
- function miniMapReset() {
- cells = [];
- mini_map_tokens = [];
- }
- function miniMapInit() {
- mini_map_tokens = [];
- cells = [];
- current_cell_ids = [];
- start_x = -7000;
- start_y = -7000;
- end_x = 7000;
- end_y = 7000;
- length_x = 14000;
- length_y = 14000;
- /* Right Panel */
- if ($('#sidebar-wrapper').length === 0) {
- jQuery('body').append(
- '<style>' +
- '.nav .open > a, ' +
- '.nav .open > a:hover, ' +
- '.nav .open > a:focus {background-color: transparent;} ' +
- ' ' +
- '/*-------------------------------*/ ' +
- '/* Wrappers */ ' +
- '/*-------------------------------*/ ' +
- ' ' +
- '#sidebar-wrapper { ' +
- ' position: absolute; ' +
- ' z-index: 1000; ' +
- ' margin-right: -310px; ' +
- ' left: auto; ' +
- ' height: 100%; ' +
- ' overflow-y: auto; ' +
- ' overflow-x: hidden; ' +
- ' background: rgba(26,26,26,0.8); ' +
- ' width: 310px; ' +
- '} ' +
- '#sidebar-wrapper.toggled {' +
- ' margin-right: 0px; ' +
- '}' +
- '/*-------------------------------*/ ' +
- '/* Sidebar nav styles */ ' +
- '/*-------------------------------*/ ' +
- ' ' +
- '.sidebar-nav { ' +
- ' position: absolute; ' +
- ' top: 0; ' +
- ' width: 310px; ' +
- ' margin: 0; ' +
- ' padding: 0; ' +
- ' list-style: none; ' +
- '} ' +
- ' ' +
- '.sidebar-nav li { ' +
- ' position: relative; ' +
- ' line-height: 20px; ' +
- ' display: inline-block; ' +
- ' width: 100%; ' +
- ' background: rgba(40, 40, 40, 0.8);' +
- '} ' +
- ' ' +
- '.sidebar-nav li:before { ' +
- ' content: \'\'; ' +
- ' position: absolute; ' +
- ' top: 0; ' +
- ' left: 0; ' +
- ' z-index: -1; ' +
- ' height: 100%; ' +
- ' width: 5px; ' +
- ' background-color: #1c1c1c; ' +
- ' ' +
- '} ' +
- '.sidebar-nav li:nth-child(1):before { ' +
- ' background-color: #ec122a; ' +
- '} ' +
- '.sidebar-nav li:nth-child(2):before { ' +
- ' background-color: #ec1b5a; ' +
- '} ' +
- '.sidebar-nav li:nth-child(3):before { ' +
- ' background-color: #79aefe; ' +
- '} ' +
- '.sidebar-nav li:nth-child(4):before { ' +
- ' background-color: #314190; ' +
- '} ' +
- '.sidebar-nav li:nth-child(5):before { ' +
- ' background-color: #314120; ' +
- '} ' +
- '.sidebar-nav li:hover:before, ' +
- '.sidebar-nav li.open:hover:before { ' +
- ' width: 100%; ' +
- ' ' +
- '} ' +
- ' ' +
- '.sidebar-nav li a { ' +
- ' display: block; ' +
- ' color: #ddd; ' +
- ' text-decoration: none; ' +
- ' padding: 10px 15px 10px 30px; ' +
- '} ' +
- ' ' +
- '.sidebar-nav li a:hover, ' +
- '.sidebar-nav li a:active, ' +
- '.sidebar-nav li a:focus, ' +
- '.sidebar-nav li.open a:hover, ' +
- '.sidebar-nav li.open a:active, ' +
- '.sidebar-nav li.open a:focus{ ' +
- ' color: #fff; ' +
- ' text-decoration: none; ' +
- ' background-color: transparent; ' +
- '} ' +
- ' ' +
- '.sidebar-nav > .sidebar-brand { ' +
- ' height: 65px; ' +
- ' font-size: 20px; ' +
- ' line-height: 44px; ' +
- ' background-color: #3c3c3c; ' +
- '} ' +
- '.dropdown-label{ ' +
- ' display: block;' +
- ' color: #ffffff; ' +
- ' padding: 10px 15px 10px 30px;' +
- '} ' +
- '.dropdown-label:visited, ' +
- '.dropdown-label:hover, ' +
- '.dropdown-label:active{ ' +
- ' color: #cecece; ' +
- ' text-decoration: none;' +
- '} ' +
- '.dropdown-label:after{ ' +
- ' content: \' ▶\';' +
- ' text-align: right; ' +
- ' float:right;' +
- '} ' +
- '.dropdown-label:hover:after{' +
- ' content:\'▼\';' +
- ' text-align: right; ' +
- ' float:right;' +
- '}' +
- '.dropdown ul{' +
- ' float: left;' +
- ' opacity: 0;'+
- ' width: 100%; ' +
- ' padding: 0px;' +
- ' top : 0px;'+
- ' visibility: hidden;'+
- ' z-index: 1;' +
- ' position: absolute;' +
- ' border: #555555 1px;' +
- ' border-style: solid;' +
- '}' +
- '.dropdown ul li{' +
- ' float: none;' +
- ' width: 100%;' +
- '}' +
- '.dropdown li:before{' +
- ' width: 0px;'+
- '}' +
- '.dropdown:hover ul{' +
- ' opacity: 1;'+
- ' background: #3c3c3c;'+
- ' top : 65px;'+
- ' visibility: visible;'+
- '}' +
- '</style>' +
- '<nav class="navbar navbar-inverse navbar-fixed-top" id="sidebar-wrapper" role="navigation">' +
- ' <ul class="nav sidebar-nav">' +
- ' <div class="sidebar-brand dropdown">' +
- ' <a id="tabtitle" class="dropdown-label" href="#">' +
- ' เมนู' +
- ' </a>' +
- ' <ul>' +
- ' <li><a data-toggle="tab" href="#tab-serverselect">ปุ่มกด มาโค</a></li>' +
- ' <li><a data-toggle="tab" href="#tab-settings">ตั้งค่าแมพ</a></li>' +
- ' </ul>' +
- ' </div>' +
- ' <div class="tab-content">' +
- ' <div id="tab-chat" class="tab-pane fade in active">' +
- ' <li>' +
- ' </a>' +
- ' </li>' +
- ' <div id="playerlist"><!-- place holder --></div>' +
- ' <li>' +
- ' </a>' +
- ' </li>' +
- ' <div id="chat"><p>Not yet implemented :P</p></div>' +
- ' </div>' +
- ' <div id="tab-serverselect" class="tab-pane fade">' +
- ' <li>' +
- ' <a href="#">' +
- ' มาโควิธีใช้ [Q=ทิค] ' +
- ' <a href="#">' +
- ' มาโควิธีใช้ [R= ป๊อปไปร์] ' +
- ' <a href="#">' +
- ' มาโควิธีใช้ [D= ดับเบิลไกล] ' +
- ' <a href="#">' +
- ' มาโควิธีใช้ [Z= ทิปสไปร์ 3เท่า] ' +
- ' </a>' +
- ' </li>' +
- ' <div id="server-list"><!-- place holder --></div>' +
- ' </div>' +
- ' <div id="tab-settings" class="tab-pane fade">' +
- ' <li>' +
- ' <a href="#">' +
- ' แมพIP เซิฟเวอร์' +
- ' </a>' +
- ' </li>' +
- ' <div id="minimap-server-connection"><!-- place holder --></div>' +
- ' <li>' +
- ' <a href="#">' +
- ' ตั้งค่ามุมมอง' +
- ' </a>' +
- ' </li>' +
- ' <div id="minimap-setting"><!-- place holder --></div>' +
- ' </div>' +
- ' </div>' +
- ' </ul>' +
- '</nav>'
- );
- }
- // '<li>' +
- // ' <iframe src="https://discordapp.com/widget?id=103557585675763712&theme=dark" width="350" height="500" allowtransparency="true" frameborder="0"></iframe>' +
- // '</li>' +
- // Minimap
- if ($('#mini-map-wrapper').length === 0) {
- var wrapper = $('<div>').attr('id', 'mini-map-wrapper').css({
- position: 'fixed',
- bottom: 5,
- right: 5,
- width: minimapWidth,
- height: minimapHeight,
- background: 'rgba(128, 128, 128, 0.58)',
- "z-index": '1001'
- });
- var mini_map = $('<canvas>').attr({
- id: 'mini-map',
- width: minimapWidth,
- height: minimapHeight,
- }).css({
- width: '100%',
- height: '100%',
- position: 'relative',
- cursor: 'cell',
- }).on("mousedown",function(e){
- if(e.button === 0){
- var posX = e.pageX - $(this).offset().left,
- posY = e.pageY - $(this).offset().top;
- var mapPosX = posX / minimapWidth * length_x + start_x;
- var mapPosY = posY / minimapHeight * length_y + start_y;
- var event = new Event({
- x : mapPosX,
- y : mapPosY,
- type : Event.TYPE_NORMAL,
- origin : -1,
- });
- miniMapSendRawData(msgpack.pack({
- type : 33,
- data: event.toSendObject()
- }));
- }else if(e.button === 2){
- window.Minimap.ToggleSidebar();
- }
- }).on('contextmenu',function(e){
- return false;
- });
- wrapper.append(mini_map).appendTo(document.body);
- window.mini_map = mini_map[0];
- }
- // minimap renderer
- if (render_timer === null)
- render_timer = setInterval(miniMapRender, 1000 / 30);
- // update server list every 10 seconds
- if (update_server_list_timer === null)
- update_server_list_timer = setInterval(function(){
- miniMapSendRawData(msgpack.pack({type: 50}));
- }, 1000 * 10);
- // minimap location
- if ($('#mini-map-pos').length === 0) {
- window.mini_map_pos = $('<div>').attr('id', 'mini-map-pos').css({
- bottom: 10,
- right: 10,
- color: 'white',
- fontSize: 15,
- fontWeight: 800,
- position: 'fixed'
- }).appendTo(document.body);
- }
- // minimap options
- if ($('#mini-map-options').length === 0) {
- window.mini_map_options = $('<div>').attr('id', 'mini-map-options').css({
- color: '#EEEEEE',
- fontWeight: 400,
- padding: '10px 15px 10px 30px'
- }).appendTo($('#minimap-setting'));
- for (var name in options) {
- var label = $('<label>').css({
- display: 'block'
- });
- var checkbox = $('<input>').attr({
- type: 'checkbox'
- }).prop({
- checked: options[name]
- });
- label.append(checkbox);
- label.append(' ' + camel2cap(name));
- checkbox.click( function(options, name) {
- return function(evt) {
- options[name] = evt.target.checked;
- console.log(name, evt.target.checked);
- };
- }(options, name));
- label.appendTo(window.mini_map_options);
- }
- var form = $('<div>')
- .addClass('form-inline')
- .css({
- opacity: 0.7,
- marginTop: 2
- })
- .appendTo(window.mini_map_options);
- var form_group = $('<div>')
- .addClass('form-group')
- .css({
- padding: '10px 15px 10px 30px',
- 'margin-bottom': '0px'
- })
- .appendTo($('#minimap-server-connection'));
- var addressInput = $('<input>')
- .attr('placeholder', defaultServer)
- .attr('type', 'text')
- .css({
- 'background-color':'#3c3c3c',
- color: '#FFF',
- border: 'none',
- 'margin-bottom': '3px'
- })
- .addClass('form-control')
- .val(defaultServer)
- .appendTo(form_group);
- var connect = function (evt) {
- var address = addressInput.val();
- connectBtn.popover('destroy');
- connectBtn.text('Disconnect');
- miniMapConnectToServer(address, function onOpen() {
- miniMapSendRawData(msgpack.pack({
- type: 100,
- data: getAgarServerInfo(),
- }));
- miniMapSendRawData(msgpack.pack({
- type: 0,
- data: player_name
- }));
- for (var i in current_cell_ids) {
- miniMapSendRawData(msgpack.pack({
- type: 32,
- data: current_cell_ids[i]
- }));
- }
- miniMapSendRawData(msgpack.pack({type: 50}));
- console.log(address + ' connected');
- }, function onClose() {
- map_server = null;
- players = [];
- id_players = [];
- disconnect();
- console.log('map server disconnected');
- });
- connectBtn.off('click');
- connectBtn.on('click', disconnect);
- miniMapReset();
- connectBtn.blur();
- };
- var disconnect = function() {
- connectBtn.text('Connect');
- connectBtn.off('click');
- connectBtn.on('click', connect);
- connectBtn.blur();
- if (map_server)
- map_server.close();
- miniMapReset();
- };
- var connectBtn = $('<button>')
- .attr('id', 'mini-map-connect-btn')
- .text('Connect')
- .click(connect)
- .addClass('btn btn-block btn-primary')
- .appendTo(form_group);
- connectBtn.trigger('click');
- }
- // minimap party
- if ($('#mini-map-party').length === 0) {
- var mini_map_party = window.mini_map_party = $('<div>')
- .css({
- color: '#FFF',
- fontSize: 20,
- fontWeight: 600,
- textAlign: 'center',
- padding: 10
- })
- .attr('id', 'mini-map-party')
- .appendTo($('#playerlist'));
- var mini_map_party_list = $('<ol>')
- .attr('id', 'mini-map-party-list')
- .css({
- listStyle: 'none',
- padding: 0,
- margin: 0
- })
- .appendTo(mini_map_party);
- mini_map_party.on('update-list', function(e) {
- mini_map_party_list.empty();
- for (var p in players) {
- var player = players[p];
- var name = String.fromCharCode.apply(null, player.name);
- name = (name === '' ? 'anonymous' : name);
- $('<p>')
- .text(player.no + 1 + '. ' + name)
- .css({
- margin: 0
- })
- .appendTo(mini_map_party_list);
- }
- });
- }
- }
- // cell constructor
- function Cell(id, x, y, size, color, name) {
- cells[id] = this;
- this.id = id;
- this.ox = this.x = x;
- this.oy = this.y = y;
- this.oSize = this.size = size;
- this.color = color;
- this.points = [];
- this.pointsAcc = [];
- this.setName(name);
- }
- Cell.prototype = {
- id: 0,
- points: null,
- pointsAcc: null,
- name: null,
- nameCache: null,
- sizeCache: null,
- x: 0,
- y: 0,
- size: 0,
- ox: 0,
- oy: 0,
- oSize: 0,
- nx: 0,
- ny: 0,
- nSize: 0,
- updateTime: 0,
- updateCode: 0,
- drawTime: 0,
- destroyed: false,
- isVirus: false,
- isAgitated: false,
- wasSimpleDrawing: true,
- destroy: function() {
- delete cells[this.id];
- id = current_cell_ids.indexOf(this.id);
- if(-1 != id){
- current_cell_ids.splice(id, 1);
- }
- this.destroyed = true;
- if (map_server === null || map_server.readyState !== window._WebSocket.OPEN) {
- miniMapUnregisterToken(this.id);
- }
- },
- setName: function(name) {
- this.name = name;
- },
- updatePos: function() {
- if (map_server === null || map_server.readyState !== window._WebSocket.OPEN) {
- if (options.enableMultiCells || -1 != current_cell_ids.indexOf(this.id)) {
- if (! miniMapIsRegisteredToken(this.id))
- {
- miniMapRegisterToken(
- this.id,
- miniMapCreateToken(this.id, this.color)
- );
- }
- var size_n = this.nSize/length_x;
- miniMapUpdateToken(this.id, (this.nx - start_x)/length_x, (this.ny - start_y)/length_y, size_n);
- }
- }
- if (options.enablePosition && -1 != current_cell_ids.indexOf(this.id)) {
- window.mini_map_pos.show();
- miniMapUpdatePos(this.nx, this.ny);
- } else {
- window.mini_map_pos.hide();
- }
- }
- };
- String.prototype.capitalize = function() {
- return this.charAt(0).toUpperCase() + this.slice(1);
- };
- function camel2cap(str) {
- return str.replace(/([A-Z])/g, function(s){return ' ' + s.toLowerCase();}).capitalize();
- }
- // create a linked property from slave object
- // whenever master[prop] update, slave[prop] update
- function refer(master, slave, prop) {
- Object.defineProperty(master, prop, {
- get: function(){
- return slave[prop];
- },
- set: function(val) {
- slave[prop] = val;
- },
- enumerable: true,
- configurable: true
- });
- }
- // extract a websocket packet which contains the information of cells
- function extractCellPacket(data, offset) {
- ////
- var dataToSend = {
- destroyQueue : [],
- nodes : [],
- nonVisibleNodes : []
- };
- ////
- var I = +new Date();
- var qa = false;
- var b = Math.random(), c = offset;
- var size = data.getUint16(c, true);
- c = c + 2;
- // Nodes to be destroyed (killed)
- for (var e = 0; e < size; ++e) {
- var p = cells[data.getUint32(c, true)],
- f = cells[data.getUint32(c + 4, true)];
- c = c + 8;
- if(p && f){
- f.destroy();
- f.ox = f.x;
- f.oy = f.y;
- f.oSize = f.size;
- f.nx = p.x;
- f.ny = p.y;
- f.nSize = f.size;
- f.updateTime = I;
- dataToSend.destroyQueue.push(f.id);
- }
- }
- // Nodes to be updated
- for (e = 0; ; ) {
- var id = data.getUint32(c, true); /* playerID */
- c += 4;
- if (0 === id) {
- break;
- }
- ++e;
- var p = data.getInt32(c, true); /* x */
- c = c + 4;
- var f = data.getInt32(c, true); /* y */
- c = c + 4;
- g = data.getInt16(c, true); /* radius */
- c = c + 2;
- for (var h = data.getUint8(c++), m = data.getUint8(c++), q = data.getUint8(c++), h = (h << 16 | m << 8 | q).toString(16); 6 > h.length; )
- h = "0" + h; /* color */
- var h = "#" + h, /* color */
- k = data.getUint8(c++), /* some flags */
- m = !!(k & 1), /* isVirus */
- q = !!(k & 16);/* isAgitated */
- if(k & 2){
- c += 4 + data.getUint32(c, true);
- }
- if(k & 4){
- var ch, mcskin = "";
- for(;;){
- ch = data.getUint8(c++);
- if(0 == ch)
- break;
- mcskin += String.fromCharCode(ch);
- }
- }
- for (var n, k = ""; ; ) {
- n = data.getUint16(c, true);
- c += 2;
- if (0 == n)
- break;
- k += String.fromCharCode(n); /* name */
- }
- n = k;
- k = null;
- var updated = false;
- // if id in cells then modify it, otherwise create a new cell
- if(cells.hasOwnProperty(id)){
- k = cells[id];
- k.updatePos();
- k.ox = k.x;
- k.oy = k.y;
- k.oSize = k.size;
- k.color = h;
- updated = true;
- }else{
- k = new Cell(id, p, f, g, h, n);
- k.pX = p;
- k.pY = f;
- }
- k.isVirus = m;
- k.isAgitated = q;
- k.nx = p;
- k.ny = f;
- k.updateCode = b;
- k.updateTime = I;
- k.nSize = g;
- if(n) k.setName(n);
- // ignore food creation
- if (updated) {
- dataToSend.nodes.push({
- id: k.id,
- x: k.nx,
- y: k.ny,
- size: k.nSize,
- color: k.color
- });
- }
- }
- // Destroy queue + nonvisible nodes
- b = data.getUint32(c, true);
- c += 4;
- for (e = 0; e < b; e++) {
- var d = data.getUint32(c, true);
- c += 4;
- var k = cells[d];
- if(null != k) k.destroy();
- dataToSend.nonVisibleNodes.push(d);
- }
- var packet = {
- type: 16,
- data: dataToSend
- };
- miniMapSendRawData(msgpack.pack(packet));
- }
- // extract the type of packet and dispatch it to a corresponding extractor
- function extractPacket(event) {
- var c = 0;
- var data = new DataView(event.data);
- if(240 == data.getUint8(c)) c += 5;
- var opcode = data.getUint8(c);
- c++;
- switch (opcode) {
- case 16: // cells data
- extractCellPacket(data, c);
- break;
- case 20: // cleanup ids
- current_cell_ids = [];
- break;
- case 32: // cell id belongs me
- var id = data.getUint32(c, true);
- if (current_cell_ids.indexOf(id) === -1)
- current_cell_ids.push(id);
- miniMapSendRawData(msgpack.pack({
- type: 32,
- data: id
- }));
- break;
- case 64: // get borders
- start_x = data.getFloat64(c, !0);
- c += 8;
- start_y = data.getFloat64(c, !0);
- c += 8;
- end_x = data.getFloat64(c, !0);
- c += 8;
- end_y = data.getFloat64(c, !0);
- c += 8;
- center_x = (start_x + end_x) / 2;
- center_y = (start_y + end_y) / 2;
- length_x = Math.abs(start_x - end_x);
- length_y = Math.abs(start_y - end_y);
- }
- }
- function extractSendPacket(data) {
- var view = new DataView(data);
- switch (view.getUint8(0, true)) {
- case 0:
- player_name = [];
- for (var i=1; i < data.byteLength; i+=2) {
- player_name.push(view.getUint16(i, true));
- }
- miniMapSendRawData(msgpack.pack({
- type: 0,
- data: player_name
- }));
- break;
- }
- }
- // the injected point, overwriting the WebSocket constructor
- window.WebSocket = function(url, protocols) {
- console.log('Listen');
- if (protocols === undefined) {
- protocols = [];
- }
- var ws = new _WebSocket(url, protocols);
- refer(this, ws, 'binaryType');
- refer(this, ws, 'bufferedAmount');
- refer(this, ws, 'extensions');
- refer(this, ws, 'protocol');
- refer(this, ws, 'readyState');
- refer(this, ws, 'url');
- this.send = function(data){
- extractSendPacket(data);
- return ws.send.call(ws, data);
- };
- this.close = function(){
- return ws.close.call(ws);
- };
- this.onopen = function(event){};
- this.onclose = function(event){};
- this.onerror = function(event){};
- this.onmessage = function(event){};
- ws.onopen = function(event) {
- var ret;
- if (this.onopen)
- ret = this.onopen.call(ws, event);
- miniMapInit();
- agarServerAddress = this.url;
- miniMapSendRawData(msgpack.pack({
- type: 100,
- data: getAgarServerInfo(),
- }));
- miniMapSendRawData(msgpack.pack({type: 50}));
- return ret;
- }.bind(this);
- ws.onmessage = function(event) {
- var ret;
- if (this.onmessage)
- ret = this.onmessage.call(ws, event);
- if(injectOnMessage){
- extractPacket(event);
- }
- return ret;
- }.bind(this);
- ws.onclose = function(event) {
- if (this.onclose)
- return this.onclose.call(ws, event);
- }.bind(this);
- ws.onerror = function(event) {
- if (this.onerror)
- return this.onerror.call(ws, event);
- }.bind(this);
- };
- window.WebSocket.prototype = _WebSocket;
- $(window.document).ready(function() {
- miniMapInit();
- });
- window.Minimap = {
- /* official server message */
- Clear : function(){
- current_cell_ids = [];
- },
- UpdateData : function(data){
- var packet = {
- type: 16,
- data: data
- };
- miniMapSendRawData(msgpack.pack(packet));
- },
- OwnCell : function(id){
- if (current_cell_ids.indexOf(id) === -1)
- current_cell_ids.push(id);
- miniMapSendRawData(msgpack.pack({
- type: 32,
- data: id
- }));
- },
- SetGameAreaSize : function(mapLeft, mapTop, mapRight, mapBottom){
- start_x = mapLeft;
- start_y = mapTop;
- end_x = mapRight;
- end_y = mapBottom;
- center_x = (start_x + end_x) / 2;
- center_y = (start_y + end_y) / 2;
- length_x = Math.abs(start_x - end_x);
- length_y = Math.abs(start_y - end_y);
- },
- /* Map operation */
- MiniMapUnregisterTokenLocal : function(id){
- if (map_server === null || map_server.readyState !== window._WebSocket.OPEN) {
- miniMapUnregisterToken(id);
- }
- },
- MiniMapUpdateToken : function (id, color, x, y, size) {
- if (map_server === null || map_server.readyState !== window._WebSocket.OPEN) {
- if (!miniMapIsRegisteredToken(id)) {
- miniMapRegisterToken(
- id,
- miniMapCreateToken(id, color)
- );
- }
- miniMapUpdateToken(id,
- (x - start_x)/length_x,
- (y - start_y)/length_y,
- size / length_x);
- }
- },
- MiniMapUpdatePos : function(x, y) {
- miniMapUpdatePos(x, y);
- },
- /* API */
- ToggleSidebar : function(){
- $('#sidebar-wrapper').toggleClass('toggled');
- },
- /* Data Object */
- MapEvent : mapEvent,
- };
- })();
- window.addEventListener('keydown', keydown);
- window.addEventListener('keyup', keyup);
- var Feed = false;
- var Dingus = false;
- var imlost = 25;
- document.getElementById("instructions").innerHTML += "<center><span class='text-muted'><span data-itr='instructions_e'> Press <b>Q</b> to Tricksplit</span></span></center>";
- document.getElementById("instructions").innerHTML += "<center><span class='text-muted'><span data-itr='instructions_3'> Press <b>Z</b> to Triplesplit</span></span></center>";
- document.getElementById("instructions").innerHTML += "<center><span class='text-muted'><span data-itr='instructions_d'> Press <b>D</b> to Doublesplit</span></span></center>";
- document.getElementById("instructions").innerHTML += "<center><span class='text-muted'><span data-itr='instructions_d'> Press <b>R</b> to Popsplit</span></span></center>";
- document.getElementById("instructions").innerHTML += "<center><span class='text-muted'><span data-itr='instructions_q'> Press and hold <b>W</b> for macro feed</span></span></center>";
- load();
- function load() {
- if (document.getElementById("overlays").style.display!="none") {
- document.getElementById("settings").style.display = "block";
- if (document.getElementById('showMass').checked) {document.getElementById('showMass').click();}
- document.getElementById('showMass').click();
- if (document.getElementById('darkTheme').checked) {document.getElementById('darkTheme').click();}
- document.getElementById('darkTheme').click();
- // Don't switch the code becauce the script will not work !
- } else {
- setTimeout(load, 100);
- }
- }
- function keydown(event) {
- if (event.keyCode == 87) {
- Feed = true;
- setTimeout(fukherriteindapussie, imlost);
- } // Tricksplit
- if (event.keyCode == 81) {
- ilikedick();
- setTimeout(ilikedick, imlost);
- setTimeout(ilikedick, imlost*2);
- setTimeout(ilikedick, imlost*3);
- } // Triplesplit
- if (event.keyCode == 90) {
- ilikedick();
- setTimeout(ilikedick, imlost);
- setTimeout(ilikedick, imlost*2);
- } // Doublesplit
- if (event.keyCode == 68) {
- ilikedick();
- setTimeout(ilikedick, imlost);
- } // PopSplit
- if (event.keyCode == 82) {
- ilikedick();
- setTimeout(ilikedick, imlost*5.32232210323424323);
- }
- } // When Player Lets Go Of W, It Stops Feeding
- function keyup(event) {
- if (event.keyCode == 87) {
- Feed = false;
- }
- if (event.keyCode == 79) {
- Dingus = false;
- }
- }
- // Feed Macro With W
- function fukherriteindapussie() {
- if (Feed) {
- window.onkeydown({keyCode: 87});
- window.onkeyup({keyCode: 87});
- setTimeout(fukherriteindapussie, imlost);
- }
- }
- function ilikedick() {
- $("body").trigger($.Event("keydown", { keyCode: 32}));
- $("body").trigger($.Event("keyup", { keyCode: 32}));
- }
Add Comment
Please, Sign In to add comment