Skip to content

Instantly share code, notes, and snippets.

@jbaaybaay
Created July 9, 2016 20:49
Show Gist options
  • Save jbaaybaay/b11f1ee8a944f01ba2608a7f76150bf6 to your computer and use it in GitHub Desktop.
Save jbaaybaay/b11f1ee8a944f01ba2608a7f76150bf6 to your computer and use it in GitHub Desktop.
Comp Server-Side Macros
// ==UserScript==
// @name tagpro macros competitive server
// @namespace http://www.reddit.com/user/contact_lens_linux/
// @description Help your team with quick chat macros.
// @include http://*.koalabeast.com:*
// @include http://tangent.jukejuice.com:*
// @include http://*.newcompte.fr:*
// @license GPL version 3 or any later version; http://www.gnu.org/copyleft/gpl.html
// @author steppin, Watball
// @version 0.4
// ==/UserScript==
if ((window.sessionStorage.toggles && JSON.parse(window.sessionStorage.toggles).macros)){
(function() {
function contentEval(source) {
// Check for function input.
if ('function' == typeof source) {
// Execute this function with no arguments, by adding parentheses.
// One set around the function, required for valid syntax, and a
// second empty set calls the surrounded function.
source = '(' + source + ')();';
}
// Create a script node holding this source code.
var script = document.createElement('script');
script.setAttribute("type", "application/javascript");
script.textContent = source;
// Insert the script node into the page, so it will run, and immediately
// remove it to clean up.
document.body.appendChild(script);
document.body.removeChild(script);
}
function actualScript() {
var macros = {};
if (window.sessionStorage.macros) {
macros = JSON.parse(window.sessionStorage.macros);
}
// Game bindings overriding adapted from JohnnyPopcorn's NeoMacro https://gist.github.com/JohnnyPopcorn/8150909
var handlerbtn = $('#macrohandlerbutton');
handlerbtn.keydown(keydownHandler)
.keyup(keyupHandler);
handlerbtn.focus();
$(document).keydown(documentKeydown);
function documentKeydown(event) {
if (!tagpro.disableControls) {
handlerbtn.focus(); // The handler button should be always focused
}
}
function keydownHandler(event) {
var code = event.keyCode || event.which;
if (code in macros && !tagpro.disableControls) {
chat(macros[code]);
event.preventDefault();
event.stopPropagation();
//console.log(macros[code]);
}
}
function keyupHandler(event) {
if (event.keyCode in macros && !tagpro.disableControls) {
event.preventDefault();
event.stopPropagation();
}
}
var lastMessage = 0;
var active = false;
function chat(chatMessage) {
var limit = 500 + 10;
var now = new Date();
var timeDiff = now - lastMessage;
if (timeDiff > limit) {
tagpro.socket.emit("chat", chatMessage);
lastMessage = new Date();
} else if (timeDiff >= 0 && !active) {
active = true;
setTimeout(function(chatMessage) { chat(chatMessage); active = false; }, limit - timeDiff, chatMessage);
}
}
}
// This dummy input will handle macro keypresses
var btn = document.createElement("input");
btn.style.opacity = 0;
btn.style.position = "absolute";
btn.style.top = "-100px";
btn.style.left = "-100px";
btn.id = "macrohandlerbutton";
document.body.appendChild(btn);
contentEval(actualScript);
})();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment