You need
* Yogda
* Rabdcasm
* A good text editor like notepad++ or Ultraedit (NOT NOTEPAD)
From one version to another, we must update "names" in the hacks code. I mean value names, function names, classes names, property names...
AUTONEXUS :
Code:
getlex QName(PackageNamespace(""), "_-mH"); UPDATING
convert_d
getlex QName(PackageNamespace(""), "_-24"); UPDATING
convert_d
divide
pushbyte 7
convert_d
pushbyte 20
convert_d
divide
ifgt L475
getlex QName(PackageNamespace(""), "map_")
getproperty QName(PackageNamespace(""), "gs_")
getproperty QName(PackageNamespace(""), "gsc_")
callpropvoid QName(PackageNamespace(""), "_-m3"), 0 ; UPDATING (nexus function)
What does this code?
We are in a Player object. A player has some properties , such as Currenthealth and Maxhealth..
Retreiving this two values is done with
getlex QName(PackageNamespace(""), "_-mH"); //Getcurrenthealth
getlex QName(PackageNamespace(""), "_-24"); //GetMaxhealth
where _-mH and _-24 change on each build ..
I decompiled the 123.5.0 client using racbdasm and i used Astrogrep to find in the code where the old variable name is used..
Best way is to find and "initproperty" line...
So, first old variable to searh was "_-mH" . I found
Code:
trait slot QName(PackageNamespace(""), "_-mH") type QName(PackageNamespace(""), "int") value Integer(200) end
trait slot QName(PackageNamespace(""), "_-24") type QName(PackageNamespace(""), "int") value Integer(200) end
in GameObject.class.asasm.
A lucky find, because the other value , "_-24", is the other value we need
MaxHealth and CurrentHealth are by default initialised to 200 . It make perfect senses to use the same value for both.
We just have to search in the GameObject.class.asasm OF THE CURRENT BUILD (123.5.1) something similar to this..
And, guess what :
Code:
trait slot QName(PackageNamespace(""), "_-LT") type QName(PackageNamespace(""), "int") value Integer(200) end
trait slot QName(PackageNamespace(""), "_-aY") type QName(PackageNamespace(""), "int") value Integer(200) end
We have our two names !
If we dig a bit there is also
Code:
getlocal1
pushstring "MaxHitPoints"
callproperty Multiname("hasOwnProperty", [PrivateNamespace("*", "com.company.assembleegameclient.objects:GameObject#0"), StaticProtectedNs("_-iP"), PackageNamespace(""), PackageNamespace("com.company.assembleegameclient.objects"), ProtectedNamespace("_-iP"), PrivateNamespace("*", "com.company.assembleegameclient.objects:GameObject#1"), PackageInternalNs("com.company.assembleegameclient.objects"), Namespace("https://adobe.com/AS3/2006/builtin"), StaticProtectedNs("_-0-I")]), 1
iffalse L286
getlocal0
getlocal0
findpropstrict QName(PackageNamespace(""), "int")
getlocal1
getproperty Multiname("MaxHitPoints", [PrivateNamespace("*", "com.company.assembleegameclient.objects:GameObject#0"), StaticProtectedNs("_-iP"), PackageNamespace(""), PackageNamespace("com.company.assembleegameclient.objects"), ProtectedNamespace("_-iP"), PrivateNamespace("*", "com.company.assembleegameclient.objects:GameObject#1"), PackageInternalNs("com.company.assembleegameclient.objects"), Namespace("https://adobe.com/AS3/2006/builtin"), StaticProtectedNs("_-0-I")])
callproperty QName(PackageNamespace(""), "int"), 1
dup
setlocal 5
initproperty QName(PackageNamespace(""), "_-LT")
getlocal 5
kill 5
initproperty QName(PackageNamespace(""), "_-aY")
getlocal 6
See the "MaxHitPoints".. near a code where something is done to our beloved variables...
*FInding new nexus function :
1) Using Astrogrep, i locate in THE OLD DECOMPILED CLIENT the _-m3 function (which is the nexus function)
I found it is in the com/company/assembleegameclient/net/_-zc.class.asasm class . NB : THE _-zc PART CHANGE ON EACH BUILD !
2) We need to navigate to the matching class in yogda
com.company.assembleegameclient.net.-zc
"
Then, we must have a look at contants, variable names, function names that doenst change, like in this case ALLYSHOOT, AOEHACK..
3) Navigate to the _-m3 function and ... look at for easily memorizable code pattern, like this one
4) Now we need to find on the NEW BUILD, in the com/company/assembleegameclient/net
* what is the new class (old one was -_zc, remember?)
Here it is . Just search for same class pattern than in 5.0
5) Then
* in the new class, what is the news nexus function ?
browse for functions, and look for a function which is similar to the old nexus function
New nexus fonction is _-M6..
UPDATING NO DEBUFF
Just open "%ConditionEffects.class.asasm" (somewhere in you decompiled files) to fing a variable name under each "Condition Name" ("Blind", etc..)
Code:
dup
pushbyte 8
getlocal0
pushstring "Blind"
getlex QName(PackageNamespace(""), "_-Et")
pushbyte 41
To block this effect we need to find in the GameObject class (UNDER YOGDA) WHICH FUNCTION IS USING THIS "_-Et" property (and insert the pushfalse/returnvalue ).
We only need to look into the functions that has no arguments and returns a boolean
I.e Myfunction() : Boolean
Moreover, all functions of GameObject that are related to Conditions effects have this in the code
Code:
getproperty _-9B //same for each function (remember _-9Bchange on each build)
getlex com.company.assembleegameclient.util:ConditionEffect
getproperty _-sm //property depending of the Condition effect. The property name we've just read in %ConditionEffects.class.asasm :)
So , we need to find the function with THIS CODE
Code:
getproperty _-9B //same for each function
getlex com.company.assembleegameclient.util:ConditionEffect
getproperty _-Et //property depending of the Condition effect. The property name we've just read in %ConditionEffects.class.asasm :)
This is the _-rL function. We've just found the Blind function to modify