Here is what I have so far, it targets players too in the MonsterArray haha.. i'll check out your code thanks alot
Code:
int GetMonsterMinHP(int byMonsterId)
{
int newid = FindCharacterInfo(byMonsterId, 0);
if (newid > 0) {
return *(DWORD *)(newid + 0x475C);
}
return 0;
}
int GetMonsterMaxHP(int byMonsterId)
{
int newid = FindCharacterInfo(byMonsterId, 0);
if (newid > 0) {
return *(DWORD *)(newid + 0x4760);
}
return 0;
}
int GetMonsterXCoordinate(int byMonsterId)
{
int newid = FindCharacterInfo(byMonsterId, 0);
if (newid > 0) {
return *(DWORD *)(newid + 0x46E0);
}
return 0;
}
int GetMonsterYCoordinate(int byMonsterId)
{
int newid = FindCharacterInfo(byMonsterId, 0);
if (newid > 0) {
return *(DWORD *)(newid + 0x46E8);
}
return 0;
}
Any tips how to use MonsterInfoPtr ? it seems to only contain the first 4 monsters.. the other monsters are all 0's... and I have atleast 10 on my screen
using your MonsterInfoPtr I created a loop to scan for the first 100 monsters and here is the results!..
Code:
int GetMonsterIdByIndex(int index)
{
int id = 0;
__try {
if (*(DWORD *)MonsterArray != 0)
return (*(DWORD*)((*(DWORD *)(MonsterArray)) + (index * 4)));
else
return 0;
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
id = 0;
}
return id;
}
Code:
int id = 0;
for (int i = 0; i < 100; i++) {
id = GetMonsterIdByIndex(i);
int newid = FindCharacterInfo(id, 0);
if (newid > 0)
Log("[Index = %X][monsterId = %X][HP = %d][HP Max = %d][x=%d][y=%d]\n", i, newid, *(DWORD *)(newid + 0x475C), *(DWORD *)(newid + 0x4760), *(DWORD *)(newid + 0x46E0), *(DWORD *)(newid + 0x46E8));
//if (id > 0)
//AttackMonster(id);
}
results are
Code:
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258095][y=262715]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258095][y=262715]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258095][y=262715]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258095][y=262715]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258095][y=262715]
as you can see my previous method does a better job with 0xC.. which is Index = (3 * 4) = 12 (0xC)
Here is with my old method
Code:
int GetMonsterIdByIndex(int index)
{
int id = 0;
__try {
if (*(DWORD *)MonsterArray != 0) {
int firstMob = (*(DWORD*)((*(DWORD *)(MonsterArray)) + (index * 4)));
if (firstMob)
id = *(unsigned int *)(firstMob + 0xC);
}
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
id = 0;
}
return id;
}
Code:
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 11][monsterId = 22BF2C88][HP = 133][HP Max = 133][x=258768][y=262192]
[Index = 20][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 21][monsterId = 22BE3FD0][HP = 133][HP Max = 133][x=258293][y=262076]
[Index = 22][monsterId = 22C06828][HP = 207][HP Max = 207][x=259147][y=262779]
[Index = 1][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 11][monsterId = 22BF2C88][HP = 133][HP Max = 133][x=258768][y=262192]
[Index = 20][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 21][monsterId = 22BE3FD0][HP = 133][HP Max = 133][x=258293][y=262076]
[Index = 22][monsterId = 22C06828][HP = 207][HP Max = 207][x=259147][y=262779]
[Index = 1][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 11][monsterId = 22BF2C88][HP = 133][HP Max = 133][x=258768][y=262192]
[Index = 20][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 21][monsterId = 22BE3FD0][HP = 133][HP Max = 133][x=258293][y=262076]
[Index = 22][monsterId = 22C06828][HP = 207][HP Max = 207][x=259147][y=262779]
[Index = 1][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 11][monsterId = 22BF2C88][HP = 133][HP Max = 133][x=258768][y=262192]
[Index = 20][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 21][monsterId = 22BE3FD0][HP = 133][HP Max = 133][x=258293][y=262076]
[Index = 22][monsterId = 22C06828][HP = 207][HP Max = 207][x=259147][y=262779]
[Index = 1][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
manages to pick up 3 monsters out of 10 or so
All my findings are from

its a old engine kalonline which still has Hackshield not xTrap so I can use cheat engine to find the values.. then I convert the same code findings using IDA PRO to the international kalonline and thats how I work.
Here is how the offsets are..
seems the pattern is reset every 0xC.. and a new nest of 0x0, 0x4, 0x8, then new 0xC again happens.
Newest one coded
Code:
int GetMonsterIdByIndex(int index)
{
int id = 0;
int offset_0 = 0;
int offset_1 = 0;
int offset_2 = 0;
int offset_3 = 0;
int offset_4 = 0;
int stop_offset = 1;
__try {
for (int i = 0; i < index; i++) {
if (offset_0 == 0xC) {
offset_0 = 0;
offset_1 += 4;
stop_offset = 2;
}
if (offset_1 == 0xC) {
offset_1 = 0;
offset_2 += 4;
stop_offset = 3;
}
if (offset_2 == 0xC) {
offset_2 = 0;
offset_3 += 4;
stop_offset = 4;
}
if (offset_3 == 0xC) {
break;
}
offset_0 += 4;
}
if (*(DWORD *)MonsterArray != 0) {
int firstMob = (*(DWORD*)((*(DWORD *)(MonsterArray)) + (offset_0)));
if (firstMob && stop_offset > 1) {
int secondMob = *(DWORD*)((*(DWORD*)((*(DWORD *)(MonsterArray)) + (offset_0))) + (offset_1));
if (secondMob && stop_offset > 2) {
int thirdMob = *(DWORD*)(*(DWORD*)((*(DWORD*)((*(DWORD *)(MonsterArray)) + (offset_0))) + (offset_1)) + (offset_2));
if (thirdMob && stop_offset > 3)
{
int forthMob = *(DWORD*)(*(DWORD*)(*(DWORD*)((*(DWORD*)((*(DWORD *)(MonsterArray)) + (offset_0))) + (offset_1)) + (offset_2)) + (offset_3));
if (forthMob) {
id = *(unsigned int *)(forthMob + 0xC);
}
} else {
id = *(unsigned int *)(thirdMob + 0xC);
}
} else {
id = *(unsigned int *)(secondMob + 0xC);
}
} else {
id = *(unsigned int *)(firstMob + 0xC);
}
}
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
id = 0;
}
return id;
}
manages to get alot of monsters now
But its just 4 different monster Id's repeated over and over again.
Code:
[Index = 0][monsterId = 228D1758][HP = 243][HP Max = 243][x=257845][y=262437]
[Index = 1][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = 2][monsterId = 220E9098][HP = 100][HP Max = 100][x=258310][y=262332]
[Index = 5][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 7][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = A][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = B][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = E][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 10][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 13][monsterId = 228E0410][HP = 168][HP Max = 168][x=258359][y=262981]
[Index = 14][monsterId = 220E9098][HP = 100][HP Max = 100][x=258310][y=262332]
[Index = 17][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 19][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 1C][monsterId = 228D6640][HP = 0][HP Max = 168][x=258325][y=262440]
[Index = 1D][monsterId = 228D6640][HP = 0][HP Max = 168][x=258325][y=262440]
[Index = 20][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 22][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 25][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = 26][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = 29][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 2B][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 2E][monsterId = 228E0410][HP = 168][HP Max = 168][x=258359][y=262981]
[Index = 2F][monsterId = 220E9098][HP = 100][HP Max = 100][x=258310][y=262332]
[Index = 32][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 34][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 37][monsterId = 228CC870][HP = 133][HP Max = 133][x=258624][y=261787]
[Index = 38][monsterId = 228CC870][HP = 133][HP Max = 133][x=258624][y=261787]
[Index = 3B][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 3D][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 40][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = 41][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = 44][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 46][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 49][monsterId = 228E0410][HP = 168][HP Max = 168][x=258359][y=262981]
[Index = 4A][monsterId = 220E9098][HP = 100][HP Max = 100][x=258310][y=262332]
[Index = 4D][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 4F][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]