Skip to content

Instantly share code, notes, and snippets.

@crabshank
crabshank / martingale.js
Last active January 9, 2025 18:24
Calculator for chasing losses with decimal odds
let curr='£';
let recoup=(lost_money,target,isOdds,commission)=>{
let c=typeof(commission)!=='number'?1:1-commission;
let f=target*c;
let r=lost_money/f;
let rd=(Math.ceil(r*100)*0.01).toFixed(2);
return (isOdds!==true?`Stake ${curr}${rd} at odds ${target}`:`Bet ${curr}${target} at odds ${rd}`);
}
//recoup(10,4.33) //recoup £10 at 4.33 odds
@crabshank
crabshank / multiselect.js
Last active January 8, 2025 23:42
Insert multi-select checkboxes
let choics=['A','B','C']; // Your options
let optns=[];
let opts='';
for (let i=0, len=choics.length; i<len;++i){
let opi='opt'+i;
let s=`<label style="display: inline-flex;">
<input type="checkbox"></input>${choics[i]}</label>`;
optns.push(s);
}
@crabshank
crabshank / searchReplaceSelectable.js
Last active February 10, 2025 03:10
Search a webpage for selectable text by plaintext or regex, with the option to replace results too. See Chrome extension version at (https://github.com/crabshank/Chrome-Search-Text).
function getMatchingNodesShadow_order(docm, slc, isNodeName, onlyShadowRoots){
function keepMatchesShadow(els,slcArr,isNodeName){
if(slcArr[0]===false){
return els;
}else{
let out=[];
for(let i=0, len=els.length; i<len; i++){
let n=els[i];
for(let k=0, len_k=slcArr.length; k<len_k; k++){
@crabshank
crabshank / getMatchingNodesShadow_order.js
Last active July 19, 2024 17:05
querySelectorAll/getElementsByTagName alternative that reaches into Shadow Roots and grabs all nodes, with output in the same order that the original functions would
function getMatchingNodesShadow_order(docm, slc, isNodeName, onlyShadowRoots){
function keepMatchesShadow(els,slcArr,isNodeName){
if(slcArr[0]===false){
return els;
}else{
let out=[];
for(let i=0, len=els.length; i<len; i++){
let n=els[i];
for(let k=0, len_k=slcArr.length; k<len_k; k++){
@crabshank
crabshank / inject_pointer_speed__cursor.js
Last active August 3, 2024 04:22
Inject pointer speed into any page (see: https://github.com/crabshank/HTML5-media-player-webpages). Includes template code to handle cursor display.
function keepMatchesShadow(els,slcArr,isNodeName){
if(slcArr[0]===false){
return els;
}else{
let out=[];
for(let i=0, len=els.length; i<len; i++){
let n=els[i];
for(let k=0, len_k=slcArr.length; k<len_k; k++){
let sk=slcArr[k];
if(isNodeName){
@crabshank
crabshank / pointerSlides.js
Last active February 1, 2024 02:07
Scroll through array of images by hovering your pointer over the cyan scrub bar.
function setStyle(el,prop,val,pat){
pat=(typeof(pat)==='undefined')?new RegExp(`(?<=(^\\s*|;\\s*))${prop}\\s*\:\\s*[^;]*;?`):new RegExp(pat);
let c=el.style.cssText;
let cs=[...c];
let p=c.match(pat);
let nv=`${prop}: ${val} !important;`;
if(p===null){
let sc=(c.trim().endsWith(';'))?'':';';
el.style.cssText+=sc+nv;
}else if(p[0]!==nv){
@crabshank
crabshank / Break_on_string_match.lua
Created January 1, 2024 10:54
Conditional breakpoint condition to break on string match in Cheat Engine
local s='common\\etc\\pesdb\\CompetitionKind.bin' -- The string we're looking for at address RDX (below)
local s1=readString(RDX,s:len())
return(s==s1)
@crabshank
crabshank / Reference_text_nodes.js
Last active December 31, 2023 23:49
Adds numerical references (incrementing by 1 from "[0]") to the parentElements of each text node in a document, or specified tag (see lines 81-82). This gist is to help with note-taking and annotation.
function keepMatchesShadow(els,slcArr,isNodeName){
if(slcArr[0]===false){
return els;
}else{
let out=[];
for(let i=0, len=els.length; i<len; i++){
let n=els[i];
for(let k=0, len_k=slcArr.length; k<len_k; k++){
let sk=slcArr[k];
if(isNodeName){
@crabshank
crabshank / aobScan_logpoint.lua
Created October 7, 2023 03:51
Scan for an aob after the breakpoint hits (Cheat Engine)
local addr=getAddress('...') -- breakpoint address
local cntr=1
local startAddress=0x7FF4E5E60000
local endAddress=0x7FFD4B08FFFF
local aob='41 72 73 65 6E 61 6C' -- 'Arsenal'
function onBp()
debug_getContext(true)
local memscan = createMemScan()
memscan.firstScan(
local round = function(a, prec)
return math.floor(a + 0.5*prec)
end
local bitOps = {}
bitOps.getBits= function (num, asTable)
local x = {}
if num==0 then
if asTable==true then
return {0}
else