First of all, two places need to be patched where Blizzard is using the wrong stat Id:
Code: Select all
6FCBD782 PUSH EAX
6FCBD783 PUSH 13
6FCBD785 PUSH EDI
6FCBD786 CALL <JMP.&D2Common.#10061>
Code: Select all
6FCAE949 6A 00 PUSH 0
6FCAE94B 52 PUSH EDX
6FCAE94C 6A 13 PUSH 13
6FCAE94E 53 PUSH EBX
6FCAE94F E8 EABAF7FF CALL <JMP.&D2Common.#10590>
To do this, we must nop the code below and change it to:
Code: Select all
0001111D 833E 01 CMP DWORD PTR DS:[ESI],1
00011120 75 1A JNZ SHORT 0001113C
00011122 6A 00 PUSH 0
00011124 6A 13 PUSH 13
00011126 56 PUSH ESI
00011127 E8 C492FFFF CALL 0000A3F0
Code: Select all
0001111D FF7424 40 PUSH DWORD PTR SS:[ESP+40]
00011121 FF7424 40 PUSH DWORD PTR SS:[ESP+40]
00011125 56 PUSH ESI
00011126 E8 D5EEFEFF CALL xxxxxxxx
0001112B 90 NOP
The custom code needed (in C++ using NefEx)
Code: Select all
int MISSILES_MissileARFix(D2UnitStrc *pAttacker, int skill, int sLvl) {
if (pAttacker == NULL)
return 0;
SkillsTXTStrc *pSkill = COMMON_GetSkillRecord(skill);
if (pSkill == NULL)
return 0;
if (pSkill->ToHitCalc != -1) {
return Common10074(pAttacker,pSkill->ToHitCalc,skill,sLvl);
}
int th = pSkill->ToHit;
int thl = pSkill->ToHitPerLvl;
if ((th+thl) == 0)
return 0;
if (sLvl <= 1)
return th;
return (th + thl * (sLvl - 1));
}
All this code is in D2Game.dll (v1.11b) ---- another bug squished.
Thats gotta be 100:0 vs. Blizzard