How to update AoB hacks for MSA (version 2.X.X.X)
Things you will need:
[spoiler]SoThink Swf decompiler.
Current version of the MSA swf file.
Patience.[/spoiler]
Getting the SWF:
[spoiler]First things first, you need to download the swf of the current version, this is done by getting the current version which appears in the top left when you start the game.
Today the current version is 2.2.1.3, we take note of this number and you then alter the link below to match the current version.
(You only use the first 3 points though, ie 2.2.1.3 becomes 2.2.1)
E.g. <!-- m -->http://download2.nexon.net/Game/MapleSt ... sa/MSA.swf<!-- m -->[/spoiler]
Before going over how to change the AoB hacks, I'll make a colour key which shows how to get the resulting finished hack.
Changed from the original
Same as the Hex as what we search for
Updating AoB hacks:
[spoiler]Start by opening the MSA swf in SoThink decompiler and change the actions script type to Raw Data
I'll start by showing the easiest two AoB's to update
Skill Range:
Action.Logic.SkillSystem.Skill -> Function Range
You should see be looking for:
public function get range() : uint
{
//d0
_as3_getlocal <0>
//30
_as3_pushscope
//d0
_as3_getlocal <0>
//66 ed 06
_as3_getproperty data
//d0
_as3_getlocal <0>
//66 95 1c
_as3_getproperty effectiveLevel
//46 9d 21 01
_as3_callproperty getData(param count:1)
//66 9b 1c
_as3_getproperty range
//48
_as3_returnvalue
}// end functionRemoving all the P-Code you end up with:
d0 30 d0 66 ed 06 d0 66 95 1c 46 9d 21 01 66 9b 1c 48
For this hack we just flat out replace the above with the below, no tweaking/changing/finding the correct AoB.
24 7f 2a 02 a2 02 02 02 02 02 02 02 02 02 02 02 02 48
I'm assuming you know how to create the AoB scanning part:
//skill range
Aobscan(_skillrange,d0 30 d0 66 ed 06 d0 66 95 1c 46 9d 21 01 66 9b 1c 48)
label(skillrange)
registersymbol(skillrange)
_skillrange:
skillrange:
db 24 7f 2a 02 a2 02 02 02 02 02 02 02 02 02 02 02 02 48Only thing to note is the db on the last line is always there for every code.
Next we have the radius code...
AoE Radius:
Action.Logic.SkillSystem.Skill -> Function Radius
AoE radius is exactly the same as above, it is litterally the next function on that page, also there is only 1 character difference.
Original:
d0 30 d0 66 ed 06 d0 66 95 1c 46 9d 21 01 66 9c 1c 48
Hack:
24 7f 2a 02 a2 02 02 02 02 02 02 02 02 02 02 02 02 48
The only difference is the 3rd last set of hex which changes from 9b to 9c, so it is very easy to do after Range & Radius at the same time.[/spoiler]
From here on I'll just show you the function location and start points and anything to look out for:
[spoiler]Monstervac:
Action.Logic.Creature.MonsterStructure.Monster -> Function jointWrld
You need to find this P-Code within the function of jointWrld, roughly near line 1320~1330.
_as3_getproperty instance
//d1
_as3_getlocal <1>
//66 b9 07
_as3_getproperty x
//d1
_as3_getlocal <1>
//66 ba 07
_as3_getproperty y
//46 ca 0c 02Original:
d1 66 b9 07 d1 66 ba 07 46 ca 0c 02
Hack:
24 64 02 02 24 c9 02 02 46 ca 0c 02
Fairy map:
24 c9 02 02 24 c9 02 02 46 ca 0c 02
No Walk:
Action.Logic.Creature.MonsterStructure.Action.Stand -> Function execute
_as3_ifngt offset: 17
//d0
_as3_getlocal <0>
//66 9e 2a
_as3_getproperty Logic.Creature.MonsterStructure.Action:Stand::m_Creature
//66 b8 07
_as3_getproperty actionManager
//60 d4 26
_as3_getlex Logic.Creature.MonsterStructure.Action::MonsterActionType
//66 9c 45
_as3_getproperty WALK
//4f 95 1f 01Original:
d0 66 9e 2a 66 b8 07 60 d4 26 66 9c 45 4f 95 1f 01
Hack:
02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
Harvest:
Action.Logic.Creature.UserStructure.Action.Harvest -> Function Initilize
Can be a little tricky to locate the correct one, it's around line 440~445 and the first "_as3_getproperty m_progressBar" after "_as3_pushstring "Ui.Msg.Harvesting"".
_as3_getlocal <0>
//66 9e 2c
_as3_getproperty m_progressBar
//24 00
_as3_pushbyte 0Original:
66 9e 2c 24 00
Hack:
66 9e 2c 24 63
Speed:
Action.Logic.Creature.UserStructure.Action.MoveToTargetPosition -> Function execute
Around line 705~715.
_as3_getlocal <4>
//d0
_as3_getlocal <0>
//66 94 2c
_as3_getproperty Logic.Creature.UserStructure.Action:MoveToTargetPosition::m_Movespeed
//a2
_as3_multiply Original:
d0 66 94 2c a2
Hack:
25 88 13 02 a2
Energy Req:
Action.UiSystem.UiFacade -> Function lowEnergyNotify
_as3_ifne offset: 1
//47
_as3_returnvoid
//26
_as3_pushtrue
//d0
_as3_getlocal <0>
//46 a0 05 00
_as3_callproperty _case4(param count:0)
//14 01 00 00
_as3_ifne offset: 1
//47
_as3_returnvoid Original:
47 26 d0 46 a0 05 00 14 01 00 00 47
Hack:
02 26 d0 46 a0 05 00 14 01 00 00 02
Tamed Monster:
Action.Graphics.TamedMonsterRenderer -> Function draw
_as3_getproperty height
//62 05
_as3_getlocal <5>
//a2
_as3_multiply
//a0
_as3_add
//75
_as3_convert_d
//d7
_as3_setlocal <3>
//d0
_as3_getlocal <0>
//66 a5 37
_as3_getproperty m_Bitmap
//d1
_as3_getlocal <1>
//d2
_as3_getlocal <2>
//d3
_as3_getlocal <3>
//62 05
_as3_getlocal <5>
//62 05
_as3_getlocal <5>Original:
62 05 a2 a0 75 d7 d0 66 a5 37 d1 d2 d3 62 05 62 05
Hack:
24 00 a2 a0 75 d7 d0 66 c5 37 d1 d2 d3 24 01 24 01
Collection1:
Action.Logic.Creature.FieldDropCollectionStructure.FieldDropCollection -> Function Update
_as3_getlocal <0>
//66 96 0c
_as3_getproperty Logic.Creature.FieldDropCollectionStructure:FieldDropCollection::m_isAutoPickup
//12 2e 00 00
_as3_iffalse offset: 46
//d0
_as3_getlocal <0>
//d0
_as3_getlocal <0>
//66 97 0c
_as3_getproperty Logic.Creature.FieldDropCollectionStructure:FieldDropCollection::m_AutopickupDelay
Original:
66 96 0c 12 2e 00 00 d0 d0 66 97 0c
Hack:
66 96 0c 11 2e 00 00 d0 d0 66 97 0c
Collection2:
Action.Logic.Creature.FieldDropCollectionStructure.FieldDropCollection.Action.Pickup -> Function execute
_as3_convert_i
//d6
_as3_setlocal <2>
//d2
_as3_getlocal <2>
//24 1e
_as3_pushbyte 30
//2a
_as3_dup
//a2
_as3_multiply
//0c 45 00 00
_as3_ifnlt offset: 69Original:
d6 d2 24 1e 2a a2 0c 45 00 00
Hack:
d6 d2 24 7f 2a a2 0c 45 00 00
Collection3:
Action.Logic.Creature.FileDropItemStructure.FieldDropItem -> Function Update
_as3_getlocal <0>
//66 f2 10
_as3_getproperty Logic.Creature.FieldDropItemStructure:FieldDropItem::m_isAutoPickup
//76
_as3_convert_b
//2a
_as3_dup
//12 0a 00 00
_as3_iffalse offset: 10Original:
66 f2 10 76 2a 12 0a 00 00
Hack:
66 f2 10 76 2a 11 0a 00 00
Collection4:
Action.Logic.Creature.FileDropItemStructure.FieldDropItem.Action.Pickup -> Function execute
_as3_convert_i
//d6
_as3_setlocal <2>
//d2
_as3_getlocal <2>
//24 1e
_as3_pushbyte 30
//2a
_as3_dup
//a2
_as3_multiply
//0c a6 00 00
_as3_ifnlt offset: 166Original:
d6 d2 24 1e 2a a2 0c a6 00 00
Hack:
d6 d2 24 7f 2a a2 0c a6 00 00
Note:
These AoB hacks below never seems to change reguardless of updates so you should be able to just take them from the previous version, I have included them anyway just incase it ever changes and they need to be found again.
Max Damage:
Action.Formular.FormularFacade -> Function calcAttackDamage
Around line 825~835.
_as3_getlex Utility::Random
//24 5f
_as3_pushbyte 95
//24 69
_as3_pushbyte 105Original:
24 5f 24 69
Hack:
24 69 24 69
Respawn:
Action.Logic.Creature.MonsterStructure.Action.Regen -> Function Initilize
_as3_getlex Utility::Random
//25 d0 0f
_as3_pushshort 2000
//25 88 27
_as3_pushshort 5000Original:
25 d0 0f 25 88 27
Hack:
24 00 02 24 00 02
God Mode:
Action.Logic.Creature.MonsterStructure.Action.Attack -> Function execute
public function execute(param1:Number) : void
{
//d0
_as3_getlocal <0>
//30
_as3_pushscope
//28
_as3_pushnan
//63 0f
_as3_setlocal <15>
//28
_as3_pushnan
//63 10
_as3_setlocal <16>
//20
_as3_pushnull
//80 29
_as3_coerce flash.geom::Point
//63 11Original:
d0 30 28 63 0f 28 63 10 20 80 29 63 11
Hack:
47 02 02 02 02 02 02 02 02 02 02 02 02[/spoiler]
Think that covers it all, any questions just ask. =)
00100010