plugy/PlugY/NewInterfaces.cpp

635 lines
17 KiB
C++
Raw Permalink Normal View History

/*=================================================================
File created by Yohann NICOLAS.
Add support 1.13d by L'Autour.
2021-01-04 07:07:29 +00:00
Add support 1.14d by haxifix.
Interface functions
=================================================================*/
2017-01-23 19:34:12 +00:00
#include "plugYFiles.h" // Install_PlugYImagesFiles()
#include "globalVariable.h"
#include "updateServer.h" // Install_UpdateServer()
#include "interface_Stats.h"// Install_InterfaceStats()
#include "newInterfaces.h"
#include "newInterface_Stats.h"
#include "newInterface_StatsPageTwo.h"
#include "newInterface_Runewords.h"
2017-01-23 19:34:12 +00:00
#include "common.h"
#include <stdio.h>
bool active_newInterfaces=false;
bool selectMainPageOnOpenning=true;
bool printBackgroundOnMainPage=true;
int posXNextPageBtn = -1;
int posYNextPageBtn = -1;
int posXPrevPageBtn = -1;
int posYPrevPageBtn = -1;
int posXClosePageBtn = -1;
int posYClosePageBtn = -1;
int posXNextRuneBtn = -1;
int posYNextRuneBtn = -1;
int posXPrevRuneBtn = -1;
int posYPrevRuneBtn = -1;
int posXRunesList = -1;
int posYRunesList = -1;
int runesPerPage = -1;
DWORD getXNextPageBtn() {return RX(posXNextPageBtn);}
DWORD getYNextPageBtn() {return RY(posYNextPageBtn);}
DWORD getXPreviousPageBtn() {return RX(posXPrevPageBtn);}
DWORD getYPreviousPageBtn() {return RY(posYPrevPageBtn);}
DWORD getXCloseBtn() {return RX(posXClosePageBtn);}
DWORD getYCloseBtn() {return RY(posYClosePageBtn);}
DWORD getXNextRunesBtn() {return RX(posXNextRuneBtn);}
DWORD getYNextRunesBtn() {return RY(posYNextRuneBtn);}
DWORD getXPrevRunesBtn() {return RX(posXPrevRuneBtn);}
DWORD getYPrevRunesBtn() {return RY(posYPrevRuneBtn);}
DWORD bDontPrintBorder=false;
int selectedPage=0;
int lastPage=0;
int extraHiddenPage=0;
int curRunesPage=0;
int maxRunesPage=0xFFFF;
BtnState isDownBtn={0};
void GoNextStatPage()
{
selectedPage++;
if ( selectedPage > lastPage)
selectedPage = 0;
}
void GoPreviousStatPage()
{
selectedPage--;
if ( selectedPage < 0 )
selectedPage = lastPage;
}
void GoStatPage(int page)
{
if ( (page >= 0) && (page <= (lastPage + extraHiddenPage)) )
selectedPage = page;
else if (page < 0)
selectedPage = lastPage + extraHiddenPage;
else
selectedPage = 0;
}
int GetCurrentPage()
{
return selectedPage;
}
void STDCALL printCustomPage()
{
if(onRealm) {D2PrintStatsPage();return;}
if ( (selectedPage > 0) && (selectedPage<=lastPage) )
printNewStatsPageTwo(selectedPage);
else if (selectedPage == lastPage+1)
printRunewordsPage();
else if (selectedPage == lastPage+2)
printNewStatsPage();
else
D2PrintStatsPage();
}
DWORD STDCALL mouseCustomPageLeftDown(sWinMessage* msg)
{
if(onRealm) return -1;
if ( (selectedPage > 0) && (selectedPage<=lastPage) )
return mouseNewStatsPageTwoLeftDown(msg);
else if (selectedPage == lastPage+1)
return mouseRunewordsPageLeftDown(msg);
else if (selectedPage == lastPage+2)
return mouseNewStatsPageLeftDown(msg);
else
return -1;
}
DWORD STDCALL mouseCustomPageLeftUp(sWinMessage* msg)
{
if(onRealm) return -1;
if (selectedPage == 0) return -1;
if (!isOnStatsPage(msg->x,msg->y)) return 1;
statsLeftUp(msg);
D2CleanStatMouseUp();
freeMessage(msg);
isDownBtn.all=0;
return 0;
/*
if ( (selectedPage > 0) && (selectedPage <= lastPage) )
return mouseNewStatsPageTwoLeftUp(msg);
else if (selectedPage == lastPage+1)
return mouseRunewordsPageLeftUp(msg);
else if (selectedPage == lastPage+2)
return mouseNewStatsPageLeftUp(msg);
else
return -1;
*/
}
DWORD STDCALL statsLeftDown(sWinMessage* msg)
{
if (isOnCloseBtn(msg->x,msg->y) && selectedPage != 0)
{
log_msg("push down left button close\n");
isDownBtn.close = 1;
D2PlaySound(4,0,0,0,0);
return 1;
}
else if (isOnPreviousPageBtn(msg->x,msg->y))
{
log_msg("push down left button previous page\n");
isDownBtn.previousPage = 1;
D2PlaySound(4,0,0,0,0);
return 1;
}
else if (isOnNextPageBtn(msg->x,msg->y))
{
log_msg("push down left button next page\n");
isDownBtn.nextPage = 1;
D2PlaySound(4,0,0,0,0);
return 1;
}
else if (isOnPrevRunesBtn(msg->x,msg->y) && selectedPage == (lastPage + extraHiddenPage))
{
log_msg("push down left button prev runes\n");
isDownBtn.prevRunes = 1;
D2PlaySound(4,0,0,0,0);
return 1;
}
else if (isOnNextRunesBtn(msg->x,msg->y) && selectedPage == (lastPage + extraHiddenPage))
{
log_msg("push down left button next runes\n");
isDownBtn.nextRunes = 1;
D2PlaySound(4,0,0,0,0);
return 1;
}
return 0;
}
DWORD STDCALL statsLeftUp(sWinMessage* msg)
{
if (isOnCloseBtn(msg->x,msg->y) && selectedPage != 0)
{
log_msg("push up left button close\n");
if (isDownBtn.close)
D2TogglePage(2,1,0);
return 1;
}
else if (isOnPreviousPageBtn(msg->x,msg->y))
{
log_msg("push up left button previous page\n");
if (isDownBtn.previousPage)
GoStatPage(selectedPage-1);
return 1;
}
else if (isOnNextPageBtn(msg->x,msg->y))
{
log_msg("push up left button next page\n");
if (isDownBtn.nextPage)
GoStatPage(selectedPage+1);
return 1;
}
else if (isOnPrevRunesBtn(msg->x,msg->y) && selectedPage == (lastPage + extraHiddenPage))
{
log_msg("push up left button prev runes\n");
if (isDownBtn.prevRunes && curRunesPage)
curRunesPage--;
return 1;
}
else if (isOnNextRunesBtn(msg->x,msg->y) && selectedPage == (lastPage + extraHiddenPage))
{
log_msg("push up left button next runes\n");
if (isDownBtn.nextRunes && (curRunesPage < maxRunesPage))
curRunesPage++;
return 1;
}
return 0;
}
2021-01-04 07:07:29 +00:00
FCT_ASM ( caller_DontPrintBorder_114 )
MOV ECX,bDontPrintBorder
TEST ECX,ECX
JE printBorder
MOV bDontPrintBorder,0
ADD DWORD PTR SS:[ESP],0xC1
RETN
printBorder:
POP ECX
PUSH 0x48
LEA EAX,DWORD PTR SS:[EBP-0x48]
JMP ECX
2020-10-25 13:10:17 +00:00
}}
FCT_ASM ( caller_DontPrintBorder_111 )
MOV ECX,bDontPrintBorder
TEST ECX,ECX
JE printBorder
MOV bDontPrintBorder,0
ADD DWORD PTR SS:[ESP],0xBC
RETN
printBorder:
MOV ECX,0x12
RETN
}}
FCT_ASM ( caller_DontPrintBorder )
MOV ECX,bDontPrintBorder
TEST ECX,ECX
JE printBorder
MOV bDontPrintBorder,0
ADD DWORD PTR SS:[ESP],0xB6
RETN
printBorder:
MOV ECX,0x12
RETN
}}
2021-01-04 07:07:29 +00:00
FCT_ASM ( caller_mouseCustomPageLeftDown_114 )
PUSH EAX
PUSH ESI
CALL mouseCustomPageLeftDown
TEST EAX,EAX
POP EAX
JE end_mouseNewPageLDown
JG continue_mouseNewPageLDown
LEA ECX,DWORD PTR DS:[EAX+0x80]
RETN
continue_mouseNewPageLDown:
POP EAX
ADD EAX,0x172
PUSH EDI
JMP EAX
RETN
end_mouseNewPageLDown:
ADD ESP,4
POP ESI
POP EBX
POP EBP
RETN 4
2020-10-25 13:10:17 +00:00
}}
FCT_ASM ( caller_mouseCustomPageLeftDown_111 )
PUSH EAX
PUSH ESI
CALL mouseCustomPageLeftDown
TEST EAX,EAX
POP EAX
JE end_mouseNewPageLDown
JG continue_mouseNewPageLDown
LEA ECX,DWORD PTR DS:[EAX+0x80]
RETN
continue_mouseNewPageLDown:
POP EAX
ADD EAX,0x143
PUSH EDI
JMP EAX
RETN
end_mouseNewPageLDown:
ADD ESP,4
POP ESI
POP EBP
POP EBX
RETN 4
}}
FCT_ASM ( caller_mouseCustomPageLeftDown )
PUSH EAX
PUSH EDI
CALL mouseCustomPageLeftDown
TEST EAX,EAX
POP EAX
JE end_mouseNewPageLDown
JG continue_mouseNewPageLDown
LEA ECX,DWORD PTR DS:[EAX+0x80]
RETN
continue_mouseNewPageLDown:
ADD DWORD PTR SS:[ESP],0x152
RETN
end_mouseNewPageLDown:
ADD ESP,4
POP EDI
POP ESI
POP EBP
POP EBX
RETN 4
}}
FCT_ASM ( caller_mouseCustomPageLeftDown_9 )
PUSH EAX
PUSH EDI
CALL mouseCustomPageLeftDown
TEST EAX,EAX
POP EAX
JE end_mouseNewPageLDown
JG continue_mouseNewPageLDown
LEA ECX,DWORD PTR DS:[EAX+0x80]
RETN
continue_mouseNewPageLDown:
ADD DWORD PTR SS:[ESP],0x149
RETN
end_mouseNewPageLDown:
ADD ESP,4
POP EDI
POP ESI
POP EBP
POP EBX
RETN 4
}}
2021-01-04 07:07:29 +00:00
FCT_ASM ( caller_mouseCustomPageLeftUp_114 )
PUSH EBP
CALL mouseCustomPageLeftUp
TEST EAX,EAX
JE end_mouseNewPageLUp
JG continue_mouseNewPageLUp
MOV EAX,DWORD PTR DS:[ptWindowStartX]
MOV EAX,DWORD PTR DS:[EAX]
RETN
continue_mouseNewPageLUp:
ADD DWORD PTR SS:[ESP],0x17D
RETN
end_mouseNewPageLUp:
ADD ESP,4
POP EDI
POP ESI
POP EBX
MOV ESP,EBP
POP EBP
RETN 4
2020-10-25 13:10:17 +00:00
}}
FCT_ASM ( caller_mouseCustomPageLeftUp_111 )
PUSH EBP
CALL mouseCustomPageLeftUp
TEST EAX,EAX
JE end_mouseNewPageLUp
JG continue_mouseNewPageLUp
MOV EAX,DWORD PTR DS:[ptWindowStartX]
MOV EAX,DWORD PTR DS:[EAX]
RETN
continue_mouseNewPageLUp:
ADD DWORD PTR SS:[ESP],0x2C4
RETN
end_mouseNewPageLUp:
ADD ESP,4
POP EDI
POP ESI
POP EBP
POP EBX
ADD ESP,8
RETN 4
}}
FCT_ASM ( caller_mouseCustomPageLeftUp )
PUSH EBP
CALL mouseCustomPageLeftUp
TEST EAX,EAX
JE end_mouseNewPageLUp
JG continue_mouseNewPageLUp
MOV EAX,DWORD PTR DS:[ptWindowStartX]
MOV EAX,DWORD PTR DS:[EAX]
RETN
continue_mouseNewPageLUp:
ADD DWORD PTR SS:[ESP],0x1AE
RETN
end_mouseNewPageLUp:
ADD ESP,4
POP EDI
POP ESI
POP EBP
POP EBX
ADD ESP,8
RETN 4
}}
FCT_ASM ( caller_mouseCustomPageLeftUp_9 )
PUSH EBP
CALL mouseCustomPageLeftUp
TEST EAX,EAX
JE end_mouseNewPageLUp
JG continue_mouseNewPageLUp
MOV EAX,DWORD PTR DS:[ptWindowStartX]
MOV EAX,DWORD PTR DS:[EAX]
RETN
continue_mouseNewPageLUp:
ADD DWORD PTR SS:[ESP],0x16A
RETN
end_mouseNewPageLUp:
ADD ESP,4
POP EDI
POP ESI
POP EBP
POP EBX
POP ECX
RETN 4
}}
2021-01-04 07:07:29 +00:00
FCT_ASM ( caller_resetSelected_114 )
CMP ECX,2
JNZ NO_RESET
MOV selectedPage, 0
NO_RESET:
POP EAX
PUSH EBX
PUSH ESI
PUSH EDI
MOV EDI,ECX
JMP EAX
2020-10-25 13:10:17 +00:00
}}
FCT_ASM ( caller_resetSelectedPageByToolBar )
MOV selectedPage,0
CMP EAX,0x26
JNZ noJump
ADD DWORD PTR SS:[ESP],0x1F
noJump:
RETN
}}
FCT_ASM ( caller_resetSelectedPageByKey )
MOV selectedPage,0
POP EAX
PUSH EBP
XOR EBP,EBP
CMP EDX,EBP
JMP EAX
}}
FCT_ASM ( caller_resetSelectedPage )
TEST EAX,EAX
SETE DL
JNZ END_resetSelectedPage
CMP ESI,2
JNZ END_resetSelectedPage
MOV selectedPage,0
END_resetSelectedPage:
RETN
}}
void Install_NewInterfaces()
{
static int isInstalled = false;
if (isInstalled) return;
Install_UpdateServer();
Install_PlugYImagesFiles();
Install_PlugYTxtFiles();
Install_InterfaceStats();
log_msg("Patch D2Client for new custom page interface. (NewInterfaces)\n");
if ( version_D2Client >= V110 )
extraHiddenPage=1;
if (selectMainPageOnOpenning)
{
2021-01-04 07:07:29 +00:00
if ( version_D2Client >= V114a )
{
mem_seek R8(D2Client, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 55F24);
memt_byte( 0x53, 0xE8 ); // CALL caller_resetSelectedPage
MEMT_REF4( 0xF98B5756, caller_resetSelected_114);
//00455F24 |. 53 PUSH EBX
//00455F25 |. 56 PUSH ESI
//00455F26 |. 57 PUSH EDI
//00455F27 |. 8BF9 MOV EDI,ECX
}
else if ( version_D2Client >= V111 )
{
2021-01-04 07:07:29 +00:00
//Reset selectedPage variable on opening stats page
mem_seek R8(D2Client, 0000, 0000, 0000, 4B79E, 8F73E, 55E0E, 65F5E, C41FE, 7EC5C);
memt_byte( version_D2Client == V114d ? 0xB9 : 0x83, 0xE8 ); // CALL caller_resetSelectedPage
MEMT_REF4( version_D2Client == V114d ? 0x00000002 : 0x1F7426F8, caller_resetSelectedPageByToolBar);
//6FAFB79E > 83F8 26 CMP EAX,26
//6FAFB7A1 . 74 1F JE SHORT D2Client.6FAFB7C2
//6FB3F73E > 83F8 26 CMP EAX,26
//6FB3F741 . 74 1F JE SHORT D2Client.6FB3F762
//6FB05E0E > 83F8 26 CMP EAX,26
//6FB05E11 . 74 1F JE SHORT D2Client.6FB05E32
//6FB15F5E > 83F8 26 CMP EAX,26
//6FB15F61 . 74 1F JE SHORT D2Client.6FB15F82
//6FB741FE > 83F8 26 CMP EAX,26
//6FB74201 . 74 1F JE SHORT D2Client.6FB05E32
2021-01-04 07:07:29 +00:00
//6FB741FE > 83F8 26 CMP EAX,26
//6FB74201 . 74 1F JE SHORT D2Client.6FB74222
//0047EC5C > B9 02000000 MOV ECX,2
2021-01-04 07:07:29 +00:00
mem_seek R8(D2Client, 0000, 0000, 0000, 1E55A, 6A8FA, A31DA, 3C5EA, 3E39A, 0000);
memt_byte( 0x55, 0xE8 ); // CALL caller_resetSelectedPage
MEMT_REF4( 0xD53BED33, caller_resetSelectedPageByKey);
//6FACE55A . 55 PUSH EBP
//6FACE55B . 33ED XOR EBP,EBP
//6FACE55D . 3BD5 CMP EDX,EBP
//6FB1A8FA . 55 PUSH EBP
//6FB1A8FB . 33ED XOR EBP,EBP
//6FB1A8FD . 3BD5 CMP EDX,EBP
//6FB531DA . 55 PUSH EBP
//6FB531DB . 33ED XOR EBP,EBP
//6FB531DD . 3BD5 CMP EDX,EBP
//6FAEC5EA . 55 PUSH EBP
//6FAEC5EB . 33ED XOR EBP,EBP
//6FAEC5ED . 3BD5 CMP EDX,EBP
//6FAEE39A . 55 PUSH EBP
//6FAEE39B . 33ED XOR EBP,EBP
//6FAEE39D . 3BD5 CMP EDX,EBP
//For Toggle fct : (not used for open the stat page)
// mem_seek R7(D2Client, 88B58, 87ED8, 83478, A1FBE, 6571E, 8EF8E, 0000);//((DWORD)D2TogglePage+0x218);
// memt_byte( 0x3B, 0xE8 );
// MEMT_REF4( 0x393974C5, caller_resetSelectedPage_111);
// memt_byte( 0x28, 0x90 ); // NOP
//6FB51FBE |. 3BC5 CMP EAX,EBP ; Case 2 of switch 6FB51FB8
//6FB51FC0 |. 74 39 JE SHORT D2Client.6FB51FFB
//6FB51FC2 |. 3928 CMP DWORD PTR DS:[EAX],EBP
//6FB1571E |. 3BC5 CMP EAX,EBP ; Case 2 of switch 6FB15718
//6FB15720 |. 74 39 JE SHORT D2Client.6FB1575B
//6FB15722 |. 3928 CMP DWORD PTR DS:[EAX],EBP
//6FB3EF8E |. 3BC5 CMP EAX,EBP ; Case 2 of switch 6FB3EF88
//6FB3EF90 |. 74 39 JE SHORT D2Client.6FB3EFCB
//6FB3EF92 |. 3928 CMP DWORD PTR DS:[EAX],EBP
} else {
//Reset selectedPage variable on opening stats page
2020-10-25 13:10:17 +00:00
mem_seek R8(D2Client, 88B58, 87ED8, 83478, A1FBE, 6571E, 8EF8E, 0000, 0000, 0000);//((DWORD)D2TogglePage+0x218);
memt_byte( 0x85, 0xE8 ); // CALL caller_resetSelectedPage
MEMT_REF4( 0xC2940FC0, caller_resetSelectedPage);
//6FB23478 |. 85C0 TEST EAX,EAX
//6FB2347A |. 0F94C2 SETE DL
//FOR 1.11
}
}
// Print custom page
2020-10-25 13:10:17 +00:00
mem_seek R8(D2Client, 87697, 86A17, 81FAB, A3759, 66B59, 902B9, C3B49, 1D549, 57052);
2021-01-04 07:07:29 +00:00
MEMC_REF4( D2PrintStatsPage, printCustomPage);
//6FB21FAA . E8 B1DDFAFF CALL D2Client.6FACFD60
//6FB53758 . E8 43F1FDFF CALL D2Client.6FB328A0
//6FB16B58 |. E8 C3270200 CALL D2Client.6FB39320
//6FB402B8 |. E8 C3AFFDFF CALL D2Client.6FB1B280
//6FB73B48 |. E8 5393FFFF CALL D2Client.6FB6CEA0
//6FACD548 |. E8 F3200A00 CALL D2Client.6FB1B280
2021-01-04 07:07:29 +00:00
//00457051 |. E8 AA0C0500 CALL Game.004A7D00
// Don't print Border
2021-01-04 07:07:29 +00:00
mem_seek R8(D2Client, 58EF6, 58EF6, 5F4C6, 2D366, B5A46, 82166, 271C6, 6D2B6, 98636);
memt_byte( version_D2Client >= V114d ? 0x6A : 0xB9, 0xE8 ); // CALL caller_DontPrintBorder
MEMT_REF4( version_D2Client >= V114d ? 0xB8458D48 : 0x00000012, version_D2Client >= V114d ? caller_DontPrintBorder_114 : version_D2Client >= V111 ? caller_DontPrintBorder_111 : caller_DontPrintBorder);
//6FAFF4C6 > B9 12000000 MOV ECX,12
//6FADD366 |. B9 12000000 MOV ECX,12
//6FB65A46 |. B9 12000000 MOV ECX,12
//6FB32166 |. B9 12000000 MOV ECX,12
//6FAD71C6 |. B9 12000000 MOV ECX,12
//6FB1D2B6 |. B9 12000000 MOV ECX,12
2021-01-04 07:07:29 +00:00
//00498636 |. 6A 48 PUSH 48
//00498638 |. 8D45 B8 LEA EAX,DWORD PTR SS:[EBP-48]
/* Conflicts with D2ExpRes
// Manage mouse down (Play sound)
2020-10-25 13:10:17 +00:00
mem_seek R8(D2Client, 2A9DC, 2A9CC, 312A5, 82736, 891B6, 6B116, BCD36, BF4D6, A7731);
memt_byte( 0x8D, 0xE8 ); // CALL
2020-10-25 13:10:17 +00:00
MEMT_REF4( 0x00008088, version_D2Client == V114d ? caller_mouseCustomPageLeftDown_114 : version_D2Client >= V111 ? caller_mouseCustomPageLeftDown_111 : version_D2Client == V110 ? caller_mouseCustomPageLeftDown : caller_mouseCustomPageLeftDown_9);
memt_byte( 0x00, 0x90 ); // NOP
//6FAD12A5 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
//6FB32736 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
//6FB391B6 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
//6FB1B116 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
//6FB6CD36 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
//6FB6F4D6 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
2021-01-04 07:07:29 +00:00
//004A7731 . 8D88 80000000 LEA ECX,DWORD PTR DS:[EAX+80]
*/
// Manage mouse up
2020-10-25 13:10:17 +00:00
mem_seek R8(D2Client, 2ABBB, 2ABAB, 3148D, 836D9, 8A159, 6C0B9, BDCB9, C0459, A78DA);
memt_byte( 0xA1, 0xE8 ); // CALL caller_mouseCustomPageLeftUp
2021-01-04 07:07:29 +00:00
MEMT_REF4( ptWindowStartX, version_D2Client >= V114d ? caller_mouseCustomPageLeftUp_114 : version_D2Client >= V111 ? caller_mouseCustomPageLeftUp_111 : version_D2Client == V110 ? caller_mouseCustomPageLeftUp : caller_mouseCustomPageLeftUp_9);
//6FAD148D . A1 48A7BB6F MOV EAX,DWORD PTR DS:[6FBBA748]
//6FB336D9 . A1 24BDBC6F MOV EAX,DWORD PTR DS:[6FBCBD24]
//6FB3A159 . A1 F8BEBC6F MOV EAX,DWORD PTR DS:[6FBCBEF8]
//6FB1C0B9 . A1 28BDBC6F MOV EAX,DWORD PTR DS:[6FBCBD28]
//6FB6DCB9 . A1 A0B9BC6F MOV EAX,DWORD PTR DS:[6FBCB9A0]
//6FB70459 . A1 54D3BC6F MOV EAX,DWORD PTR DS:[6FBCD354]
2021-01-04 07:07:29 +00:00
//004A78DA |. A1 58287A00 MOV EAX,DWORD PTR DS:[7A2858]
// open page : 6FB23515 |> 892CB5 A8A6BB6>MOV DWORD PTR DS:[ESI*4+6FBBA6A8],EBP
//6FB2347D |. 8914B5 A8A6BB6F MOV DWORD PTR DS:[ESI*4+6FBBA6A8],EDX
log_msg("\n");
isInstalled = true;
}
/*================================= END OF FILE =================================*/