★moomoo.io ActionMacro

Action Macro (SpeedilyBuildItem/ChangeWepon&Hat/...)

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==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);
})();