Block florr.io ad animation in Diep.io.
当前为
// ==UserScript==
// @name Florr Adblocker
// @namespace https://diep.io
// @version 1.0
// @description Block florr.io ad animation in Diep.io.
// @author Binary
// @match *://diep.io/*
// @grant none
// ==/UserScript==
(function() {
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);
}
let isPaintingFlorr = false;
wrapSetter('strokeStyle', function(newValue){
if(newValue === 'rgb(207,207,207)'){
isPaintingFlorr = true;
}
});
wrapFunc('quadraticCurveTo', function(){
isPaintingFlorr = false;
console.log('Blocked florr ad');
return true;
});
wrapFunc('arc', function(){
if(isPaintingFlorr) return true;
});
wrapFunc('fill', function(){
if(isPaintingFlorr) return true;
});
wrapFunc('stroke', function(){
if(isPaintingFlorr) return true;
});
return ctx;
};
})();