[Dev] MuServer 99.6XT Hp Bar (Main ver 1.0.13)

^TheLast^

Active Member
Joined
Jan 13, 2010
Messages
332
Reaction score
232
Hello guys !

I'm currently working on a 99.6XT server project and decided to share with you my work on the Main.exe offsets. Any enthusiasts who want can join this project and hope we can finish it together. My OpenGL experience is weaker and i'm still struggling finding some of the correct functions needed for the bar.

Здравейте,
В момента работя върху 99.6ХТ проект за сървър и реших да споделя с вас някой от офсетите, в майн.ехе, които до момента съм открил. Всеки, който има желание може да се включи и се надявам да завършим проекта. Опита ми с OpenGL е по-малък и все още се мъча с някои офсети. Резултата ще бъде Monster HP bar.

Offsets i'm searching or found:
Офсети, които търся или съм открил:

Code:
#define pCursorX					*(DWORD *)0x7CBAF14
#define pCursorY					*(DWORD *)0x7CBAF10
#define pProtocolCall				0x004CDA7D
#define pGLSwitchBlend				((void(*)()) 0x5F1130)
#define pGLSwitch					((void(*)()) 0x5F10B0)
#define pDrawBarForm				((void(*)(float PosX, float PosY, float Width, float Height)) 0x5F21D0)
#define pGetPosFromAngle			((void(*)(int a1, int a2, int a3)) 0x005F0CE0) 
#define pSetBlend					((char(*)(BYTE Mode)) 0x005F1130)
#define ProtocolCore				((BOOL(*)(DWORD,BYTE*,DWORD,DWORD))0x004CDB60)
#define pDrawText					((int(*)(int posX, int posY, LPCSTR lpString, int a4, char a5, int a6))  0x00534350 )
#define DrawText					((char(*)(int a1, int a2, LPCSTR lpString))0x005343A0)
#define DrawText2					((int(*)(int a1, int a2, LPCSTR lpString, int a4, char a5, int a6))0x005342A0)
#define pSetTextColor				((void(__thiscall*)(LPVOID This, COLORREF h)) 0x00661030) // OK

#define MU_CDC_GET_THIS_POINTER		0x00643470		//99.6XT
#define MU_CDC_TABBEDTEXTOUT		0x00454500		//99.6XT

#define glColor3f					((void(*)(float a, float b, float c)) 0x00661348)
#define glColor4f					((void(*)(float a, float b, float c,float d)) 0x0066134C)


Open GL Offsets :

OpenGL офсети:

Code:
glGenTextures   = 0x006612B8; // OK
glBindTexture   = 0x00661328; // OK
glPixelStorei   = 0x006612FC; // OK
glTexImage2D    = 0x0066132C; // OK
glTexParameteri = 0x006612F8; // OK
glBegin         = 0x00661358; // OK
glEnd            = 0x00661364; // OK
glColor3f       = 0x00661348; // OK
glColor3fv      = 0x00661354; // OK
glBlendFunc     = 0x006612AC; // OK
glTexCoord2f    = 0x0066135C; // OK
glTexEnv        = 0x00661300; // OK
glVertex3f      = 0x00661324; //OK
glVertex3fv     = 0x00661360; // OK
glDeleteTextures = 0x006612F4; // OK
glIsTexture     = 0x006612F0; //OK
glFontFace      = 0x00661318; // OK
glViewport      = 0x006612A8; // OK
glDepthMask  = 0x00661320; // OK
MessageBoxA     = 0x0066137C; // OK

Non UI Offsets :
Офсети към невизуални функции:

Code:
#define ProtocolCore   ((int(*)(PBYTE lpMsg, int index, DWORD a4, int len, unsigned int flags)) 0x004CDB60) // OK

The HP Bar code i plan to use as base:
Кода на HP Bar-а, който ще ползвам като основа:

Code:
#define MAX_MAIN_VIEWPORT 400


struct NEW_HEALTH_BAR
{
	WORD index;
	BYTE type;
	BYTE rate;
};


struct VAngle
{
	float X;
	float Y;
	float Z;
};


void ClearNewHealthBar();
void InsertNewHealthBar(WORD index, BYTE type, BYTE rate);
NEW_HEALTH_BAR* GetNewHealthBar(WORD index, BYTE type);
void DrawNewHealthBar();

Code:
NEW_HEALTH_BAR gNewHealthBar[MAX_MAIN_VIEWPORT];


void ClearNewHealthBar() // OK
{
	for (int n = 0; n < MAX_MAIN_VIEWPORT; n++)
	{
		gNewHealthBar[n].index = 0xFFFF;
		gNewHealthBar[n].type = 0;
		gNewHealthBar[n].rate = 0;
	}
}


void InsertNewHealthBar(WORD index, BYTE type, BYTE rate) // OK
{
	for (int n = 0; n < MAX_MAIN_VIEWPORT; n++)
	{
		if (gNewHealthBar[n].index == 0xFFFF)
		{
			gNewHealthBar[n].index = index;
			gNewHealthBar[n].type = type;
			gNewHealthBar[n].rate = rate;
			return;
		}
	}
}


NEW_HEALTH_BAR* GetNewHealthBar(WORD index, BYTE type) // OK
{
	for (int n = 0; n < MAX_MAIN_VIEWPORT; n++)
	{
		if (gNewHealthBar[n].index != 0xFFFF)
		{
			if (gNewHealthBar[n].index == index && gNewHealthBar[n].type == type)
			{
				return &gNewHealthBar[n];
			}
		}
	}


	return 0;
}


void DrawNewHealthBar() // OK
{
	((void(*)())0x00581D30)();

	int PosX, PosY, LifeProgress;
	float LifeBarWidth = 38.0f;
	char LifeDisplay[20];
	VAngle Angle;

	for (int n = 0; n < MAX_MAIN_VIEWPORT; n++)
	{
		int ViewportAddress = *(DWORD*)(0x73C8174) + (1068 *  n);

		int MonsterId = *(WORD*)(ViewportAddress + 492);
		int MonsterType = *(BYTE*)(ViewportAddress + 132);


		if (!ViewportAddress)
		{
			continue;
		}

		/*if (*(BYTE*)(ViewportAddress + 0x30C) == 0)
		{
			continue;
		}*/


		NEW_HEALTH_BAR* lpNewHealthBar = GetNewHealthBar(MonsterId, MonsterType);


		if (lpNewHealthBar == 0)
		{
			continue;
		}


		int LifePercent = lpNewHealthBar->rate / 10;


		Angle.X = *(float*)(ViewportAddress + 0x404);


		Angle.Y = *(float*)(ViewportAddress + 0x408);


		Angle.Z = *(float*)(ViewportAddress + 0x40C) + *(float*)(ViewportAddress + 0x3E8) + 100.0f;


		pGetPosFromAngle((int)&Angle, (int)&PosX, (int)&PosY);


		PosX -= (int)floor(LifeBarWidth / (double)2.0);


		if ((pCursorX >= PosX) && ((float)pCursorX <= (float)PosX + LifeBarWidth) && (pCursorY >= PosY - 2) && (pCursorY < PosY + 6))
		{
			sprintf_s(LifeDisplay, "HP : %d0%%", LifePercent);


			//pSetTextColor(pTextThis(), RGB(0xFF, 0xE6, 0xD2, 0xFF));
			pDrawText(PosX, PosY - 6, LifeDisplay, 0, 0, 1);
		}


		pSetBlend(true);


		glColor4f(0.0, 0.0, 0.0, 0.5);
		pDrawBarForm((float)(PosX + 1), (float)(PosY + 1), LifeBarWidth + 4.0f, 5.0f);
		pGLSwitchBlend();


		glColor3f(0.2f, 0.0, 0.0);
		pDrawBarForm((float)PosX, (float)PosY, LifeBarWidth + 4.0f, 5.0f);


		glColor3f(0.19607843f, 0.039215688f, 0.0);
		pDrawBarForm((float)(PosX + 2), (float)(PosY + 2), LifeBarWidth, 1.0f);

		if (LifePercent > 10)
		{
			LifeProgress = 10;
		}
		else
		{
			LifeProgress = LifePercent;
		}

		glColor3f(0.98039216f, 0.039215688f, 0.0);

		for (int i = 0; i < LifeProgress; i++)
		{
			pDrawBarForm((float)(i * 4 + PosX + 2), (float)(PosY + 2), 3.0, 2.0);
		}

		pGLSwitch();
	}


	pGLSwitch();


	glColor3f(1.0, 1.0, 1.0);
}

Main.exe Link :
MEGA

Main Pseudocode Decompilation :
MEGA

attachment.php
 
Last edited:
The source is not finished and can't be compiled to .dll yet :)
 
Здравейте приятели, най-после всички офсети са налични. Кода е обновен, както и офсетите. От тук насетне е напълно възможно да бъде подкаран и да работи, единствено липсват имплементациите за изпращане на пакет. В MUEMU сорса можете да намерите същата имплементация работеща и да ползвате кода от там с моите промени.

ПП: Един приятел имплементира кода и изпрати снимка:
attachment.php
 

Attachments

  • Screen(06_08-20_56)-0000.jpg
    Screen(06_08-20_56)-0000.jpg
    594.3 KB · Views: 363
Last edited:
  • Like
Reactions: Ivaylo99
Здравейте приятели, най-после всички офсети са налични. Кода е обновен, както и офсетите. От тук насетне е напълно възможно да бъде подкаран и да работи, единствено липсват имплементациите за изпращане на пакет. В MUEMU сорса можете да намерите същата имплементация работеща и да ползвате кода от там с моите промени.

ПП: Един приятел имплементира кода и изпрати снимка:
attachment.php

do you have main hp bar 97d??
 
No i never worked on 97d graphical offsets but isn't so hard to find them. Check this thread from time to time i might post them soon.