// ==UserScript==
// @name ★moomoo.io ActionMacro
// @version 1.3
// @description Action Macro (SpeedilyBuildItem/ChangeWepon&Hat/...)
// @author nekosan
// @match *://moomoo.io/*
// @grant none
// @namespace https://greasyfork.org/en/scripts/29157-moomoo-io-actionmacro
// ==/UserScript==
(function() {
'use strict';
// Hat
var hat = 0;
var ID_BummleHat = 8;
var ID_StrawHat = 2;
var ID_WinterCap = 15;
var ID_CowboyHat = 5;
var ID_RangerHat = 4;
var ID_ExplorerHat = 18;
var ID_MarksmanCap = 1;
var ID_SoldierHelmet = 6;
var ID_HoneycrispHat = 13;
var ID_MinersHelmet = 9;
var ID_BoosterHat = 12;
var ID_BushGear = 10;
var ID_SpikeGear = 11;
var ID_BushidoArmor = 16;
var ID_SamuraiArmor = 20;
// Wepon
var subitemmode = 0; // (0:BoostPad 1:PitTrap)
var flag_subweapon = false;
// Item
var food = 1; // 0:apple 1:cokkie
var wall = 2; // 2:woodwall 3:stonewall
var spike = 5; // 4:spikes 5:greater spikes
var mill = 6; // 6:windmill 7:faster windmill
var mine = 8; // 9:mine
var trap = 9; // 9:pit trap
var boost = 10; // 10:boost pad
var dir;
document.getElementById('gameCanvas').addEventListener('mousemove', function (e) {
dir = Math.atan2(e.pageY - window.innerHeight / 2, e.pageX - window.innerWidth / 2);
});
function send(n, v) {
io.managers[Object.keys(io.managers) [0]].nsps['/'].emit(n, v);
}
function p(a, itemid) {
if (a !== 0) {
send('2', dir + a);
}
send('5', itemid);
send('4', 1);
}
document.addEventListener('keydown', function (e) {
if (document.activeElement.id == 'chatBox') return;
switch (e.keyCode) {
// [CapsLock]
case 240:
if (hat == ID_BoosterHat) {
hat = ID_SamuraiArmor;
} else {
hat = ID_BoosterHat;
}
storeEquip(hat);
break;
// [Space]
case 32:
e.preventDefault();
p(0, boost);
setTimeout(function () {
p(0, boost);
setTimeout(function () {
p(1.5, spike);
p(-1.5, spike);
setTimeout(function () {
p(1.5, spike);
p(-1.5, spike);
setTimeout(function () {
p(0, spike);
}, 80);
}, 80);
}, 50);
}, 200);
break;
// [0]
case 48:
subitemmode = (subitemmode === 0) ? 1 : 0;
break;
// [B]
case 66:
p(0, subitemmode === 0 ? boost : trap);
break;
// [C]
case 67:
if (subitemmode === 0) {
p(0, boost);
setTimeout(function () {
p(2, spike);
p(-2, spike);
}, 300);
} else {
p(0, trap);
}
break;
// [F]
case 70:
p(0, spike);
break;
// [G]
case 71:
p(0.7, spike);
p(-0.7, spike);
break;
// [H]
case 72:
p(0, spike);
p(1.4, spike);
p(-1.4, spike);
break;
// [I]
case 73:
p(2.5, mill);
p(-2.5, mill);
p(1, mill);
p(-1, mill);
break;
// [J]
case 74:
p( Math.PI / 3, spike);
p(-Math.PI / 3, spike);
p(Math.PI, spike);
break;
// [N]
case 78:
p(2.5, mill);
p(-2.5, mill);
break;
// [Q]
case 81:
p(0, food);
break;
// [R]
case 82:
p(Math.PI, spike);
break;
// [T]
case 84:
p(Math.PI,trap);
break;
// [V]
case 86:
p(2.3, spike);
p(-2.3, spike);
break;
// [X]
case 88:
p( Math.PI / 3, wall);
p(-Math.PI / 3, wall);
p(Math.PI, wall);
break;
// [Z]
case 90:
p(0.7, wall);
p(-0.7, wall);
break;
}
if (e.shiftKey) {
flag_subweapon = !flag_subweapon;
// Sub Weapon
if (flag_subweapon) {
// hunting bow
if ($('#actionBarItem3').css('display') != 'none') {
$('#actionBarItem3').click();
if (hat != ID_MarksmanCap) {
hat = ID_MarksmanCap;
}
storeEquip(hat);
// wooden shield
} else if ($('#actionBarItem5').css('display') != 'none') {
$('#actionBarItem5').click();
}
// Main Weapon
} else {
// great axe
if ($('#actionBarItem1').css('display') != 'none') {
$('#actionBarItem1').click();
// short sword
} else if ($('#actionBarItem2').css('display') != 'none') {
$('#actionBarItem2').click();
}
if (hat == ID_MarksmanCap) {
hat = ID_BoosterHat;
storeEquip(hat);
}
}
}
});
document.addEventListener('contextmenu', function (e) {
if (document.activeElement.id == 'chatBox') return false;
p(0, subitemmode === 0 ? boost : trap);
}, false);
})();