Warning: fopen(/www/sites/update.greasyfork.icu/index/store/temp/8fc886fb1c16ae92891112f310e06420.js): failed to open stream: No space left on device in /www/sites/update.greasyfork.icu/index/scriptControl.php on line 65
// ==UserScript==
// @name Florr Adblocker
// @namespace https://diep.io
// @version 1.3
// @description Block florr.io ad animation in Diep.io.
// @author Binary
// @match *://diep.io/*
// @grant none
// @downloadURL https://update.greasyfork.icu/scripts/414681/Florr%20Adblocker.user.js
// @updateURL https://update.greasyfork.icu/scripts/414681/Florr%20Adblocker.meta.js
// ==/UserScript==
(function() {
let isPaintingFlorr = false;
// isTyping === false takes too long after user enters the game, causing accidental blocking of
// other game elements. Florr ad always paints at position === 2 so make a check to see if it's actually a florr ad
// that we're blocking. (What are the chances that Zeach will see this and change his drawing algorithm....)
let position = 0;
let originalRequestAnimation = window.requestAnimationFrame;
window.requestAnimationFrame = function(func){
position = 0;
originalRequestAnimation.call(this, func);
}
let original_getContext = HTMLCanvasElement.prototype.getContext;
HTMLCanvasElement.prototype.getContext = function(...args){
let ctx = original_getContext.apply(this, args);
// Updated wrapper functions from last time (from Minimap AFK)
function wrapFunc(targetProp, wrapFunc) {
let property = ctx[targetProp];
ctx[targetProp] = function(...args) {
if (wrapFunc.call(ctx, args)) return;
return property.apply(ctx, args);
};
return true;
}
function wrapSetter(targetProp, wrapFunc) {
let setter = ctx.__lookupSetter__(targetProp);
let getter = ctx.__lookupGetter__(targetProp); // store getter as defining a setter will erase the getter for that
ctx.__defineSetter__(targetProp, function(newVal) {
let callbackResult = wrapFunc.call(ctx, newVal);
if (callbackResult === true) return;
return setter.call(ctx, typeof callbackResult === "undefined" ? newVal : callbackResult);
});
ctx.__defineGetter__(targetProp, getter);
}
wrapFunc('moveTo', function(){
position++;
});
wrapSetter('strokeStyle', function(newValue){
if(newValue === 'rgb(207,207,207)' && position === 2){
isPaintingFlorr = true;
console.log('Blocking florr ad');
}
});
wrapFunc('quadraticCurveTo', function(){
isPaintingFlorr = false;
return true;
});
wrapFunc('arc', function(){
if(isPaintingFlorr) return true;
});
wrapFunc('fill', function(){
if(isPaintingFlorr) return true;
});
wrapFunc('stroke', function(){
if(isPaintingFlorr) return true;
});
let replaceText = function(args){
args[0] = args[0].replace(/florr\.io/g, 'diep.io');
};
wrapFunc('strokeText', replaceText);
wrapFunc('fillText', replaceText);
return ctx;
};
})();