Here's some fun stuff. You were on the right track.
The method you identified calls this
Calls this function with args:
KY=9
hY=-1
QY=-1
FY=null
Code: Select all
function bY takes integer KY,integer hY,integer QY,string FY returns nothing
set hY=1
loop
exitwhen hY>iw
call OY(KY,GetPlayerId(Pw[hY]),QY,FY)
set hY=hY+1
endloop
endfunction
This line:
Code: Select all
call OY(KY,GetPlayerId(Pw[hY]),QY,FY)
Calls OY with: 9, GetPlayerId(Pw[1 to index], -1, null)
Strange that they take in hY as an argument and then immediately overwrite it. The original programmer of this game must have written some weird code for it to optimize like this (the argument is useless).
Code: Select all
function OY takes integer aY,integer nY,integer EY,string tY returns nothing
aY = 9
nY = (player id)
EY = -1
tY = null
Now mY = Yw
Previously:
Code: Select all
set Yw=BlzGetAbilityExtendedTooltip($41303342,0)
That hex = A03B
Extracted abilities file.
And then: the tooltip of it is: TRIGSTR_4337
Yep it's the anticheat all right.
This probably is responsible for game crash:
Code: Select all
if by() then
set Tr=true
set iM=dw
set GM=Fw
call TimerStart(iM,GM,true,null)
set iM=jo
set GM=Wo
call TimerStart(iM,GM,false,null)
else
set gr=false
endif
I believe that function by returns false if it finds that you're cheating.
Therefore setting gr to false crashes the game.
I see two other places in the code where gr is set to false. These are likely other anticheat sections. Search for these and disable them:
Tell me if this works.
That way they hid the string away by putting in a tooltip and then retrieving the tooltip as a string is incredibly cool and I don't think I've ever seen it before. I'm almost very impressed, it had me confused for a time. But like all security by obscurity, it's only a matter of time before it's defeated. In a way it's almost funny, the maker knew including a message when it detected cheating would make it way easier to find so they obfuscated the message rather than just not including it.
bonus:
gr set to true here
Code: Select all
set gr=true
call DisplayTimedTextToForce(bj_FORCE_ALL_PLAYERS,15.,"TRIGSTR_3808")
call DisplayTimedTextToForce(bj_FORCE_ALL_PLAYERS,15.,"TRIGSTR_4354")
else
these trigstrs are:
|cffffcc00Player stats will be recorded during this game.
And 4354 is strangely, a blank string. And 3808 has an unterminated color code... lots of weird stuff here.
Anyways appears gr is some sort of boolean to keep track of the game state. gr=true means game is active, gr=false means inactive.
this piece of code happens in trigger Qj. The creator attempted to obfuscate this trigger by saving it in code before calling it using the following:
Code: Select all
call TriggerRegisterTimerEvent(Qj,1.,false)
call TriggerAddAction(Qj,this)
And so it "starts" the game by activating gr at 1.0 seconds.