das in die autoexec.cfg und fertigQuote:
alias message1 "echo - Mit F1 Aktivieren/Deaktivieren"
bind f1 do_bhop
message1
alias +bhop "bhop_on;bhop_looper"
alias -bhop "bhop_off;-jump"
alias bhop_looper "+jump;wait;wait;-jump;wait;wait;bhoploop"
alias bhop_on "alias bhoploop bhop_looper"
alias bhop_off "alias bhoploop"
alias do_bhop "bind space +bhop;bind f1 undo_bhop;bhopmessage1"
alias undo_bhop "bind space +jump;bind f1 do_bhop;bhopmessage2"
alias bhopmessage1 "echo - BHop ist jetzt AN. Drücke F1 erneut um ihn zu deaktivieren."
alias bhopmessage2 "echo - BHop ist jetzt AUS. Drücke F1 erneut um ihn zu aktivieren."
bhop in asmQuote:
/*
Bunnyhop - in ASM
Credits:
SDK
G-D
supex0
Der detour-jump ist an einer bestimmten Stelle von CreateMove, genau dann wenn cmd->buttons erneut beschrieben wird.
esi+24 = cmd->buttons
p_Ent+2E0 = flags
"test" wird verwendet um aus den addierten Bits einzelne herauszufiltern
Zuerst wird überprüft, ob +jump ausgeführt wird, wenn ja dann ob man sich auf dem Boden befindet.
Wenn dies zutrifft, wird, solange man sich auf dem Boden aufhält, +jump/-jump "gespamt", in der Regel nur höchstens 2 ticks lang, in der Luft dann "stille".
*/
label(p_Ent)
client.dll+4D510C:
p_Ent:
alloc(newmem,2048) //2kb should be enough
label(returnhere)
label(originalcode)
label(exit)
client.dll+DEBE6:
jmp newmem
returnhere:
newmem:
mov ecx,eax //ursprünglicher code,
mov [esi+24],ecx //einfach ignorieren.
pushall
mov ecx,[p_Ent] // wir benötigen den Entitypointer um Checks durchzuführen
test byte ptr [esi+24],02 // Überprüfung ob +jump ausgeführt wird
je originalcode
test byte ptr [ecx+2E0],01 // Überprüfung, ob man sich auf dem Boden befindet
jne originalcode
//Immernoch hier, also ist es BHOP-Time!
and [esi+24],0FFFD //&in_jump; 0x0002
originalcode:
popall
exit:
jmp returnhere