Selene Hack Manager
[still in development]
Yes, i know most you idiots are going to say this is complex.... And some of you idiots are going to think this is a base, but the thing that hurts my heart the most is that nearly non of you idiots will ever get this work and will resort to your petty little lives never knowing that true greatness will be.
Now that was a beautiful and true little speech, now for those who want to learn something. Like I said about this is not a base, This is a hack manager that is implemented into a base. It have some of the improvements I've been showing and more. This hack manager allows you to start separating your different types of components in a base, leading to more organized bases. Most of you are going to think this is useless, and to some it will be, to others this will change the way your hack operates.
Selene comes with all the "improved" I've been working on.
Fail-Safe address.
Support for Pattern Searches.
and more, let me just say what you can do with this hack.
Reason to use:
Because of the way most of these bases are done you cannot implement address finding features of a logger because you define all of your addresses as Macros for exact numbers. so I purpose an alternative.
What I did in was pull the addresses away from the direct hack functions, so I can perform checks on these addresses and gather these addresses from somewhere else. I do these by setting all addresses to 0, so I know if the address is valid or not from step one. Then I Initialize all addresses, Here you can use your static address or use FindPattern().
Code:
bool HeliosHackManager::Clean(){
m_CShellModule = NULL;
m_EngineModule = NULL;
m_ClientFXModule = NULL;
m_PlayerManagerAddress = NULL;
m_GameClientShellAddress = NULL;
m_SendToServerAddress = NULL;
m_LTClientAddress = NULL;
m_ClientFXAddress = NULL;
m_ConsoleAddress = NULL;
m_GetLocalPlayAddress = NULL;
m_GetPlayerByIndexAddress = NULL;
m_ClientInfoMgrAddress = NULL;
m_DrawPrimAddress = NULL;
m_GameStatusAddress = NULL;
return true;
}
What I do next is Fill the addresses
Code:
bool HeliosHackManager::Initilize()
{
Clean();
m_CShellModule = (ptr)GetModuleHandleA(STRING_CSHELL);
m_EngineModule = (ptr)GetModuleHandleA(STRING_ENGINE);
m_ClientFXModule = (ptr)GetModuleHandleA(STRING_CLIENTFX);
if (m_CShellModule.isValid())
{
m_PlayerManagerAddress = ADDR_PLAYERMANAGER;
m_GetLocalPlayAddress = LocalPlayer;
m_GetPlayerByIndexAddress = PlayerByIndex;
m_ClientInfoMgrAddress = ClientInfo;
m_DrawPrimAddress = DrawPrim;
m_GameClientShellAddress = ADDR_GCS;
m_ConsoleAddress = ADDR_Console;
m_SendToServerAddress = S2SE;
m_LTClientAddress = ADDR_LTCLIENT;
m_GameStatusAddress = ADDR_GAMESTATUS;
}
if (m_ClientFXModule.isValid())
{
m_ClientFXAddress = *(ptr*)(m_ClientFXModule + ADDR_CLIENTFX);
}
return m_CShellModule.isValid() ;
}
But that can be easily replaced with FindPattern() now you can add your logger source to your hacks
Code:
bool HeliosHackManager::Initilize()
{
Clean();
m_CShellModule = (ptr)GetModuleHandleA(STRING_CSHELL);
m_EngineModule = (ptr)GetModuleHandleA(STRING_ENGINE);
m_ClientFXModule = (ptr)GetModuleHandleA(STRING_CLIENTFX);
if (m_CShellModule.isValid())
{
m_PlayerManagerAddress = FindPattern(m_CShellModule, (PBYTE)"xxx", "xxx?xx");
m_GetLocalPlayAddress = FindPattern(m_CShellModule, (PBYTE)"xxx", "xxx?xx");
m_GetPlayerByIndexAddress = FindPattern(m_CShellModule, (PBYTE)"xxx", "xxx?xx");
m_ClientInfoMgrAddress = FindPattern(m_CShellModule, (PBYTE)"xxx", "xxx?xx");
m_DrawPrimAddress = FindPattern(m_CShellModule, (PBYTE)"xxx", "xxx?xx");
m_GameClientShellAddress = FindPattern(m_CShellModule, (PBYTE)"xxx", "xxx?xx");
m_ConsoleAddress = FindPattern(m_CShellModule, (PBYTE)"xxx", "xxx?xx");
m_SendToServerAddress = FindPattern(m_CShellModule, (PBYTE)"xxx", "xxx?xx");
m_LTClientAddress = FindPattern(m_CShellModule, (PBYTE)"xxx", "xxx?xx");
m_GameStatusAddress = FindPattern(m_CShellModule, (PBYTE)"xxx", "xxx?xx");
}
if (m_ClientFXModule.isValid())
{
m_ClientFXAddress = *(ptr*)(m_ClientFXModule + ADDR_CLIENTFX);
}
return m_CShellModule.isValid() ;
}
How to use Selene
Selene is special (to most of you). It uses Inheritance, to you who do not know what this is, it is a feature in Object Oriented programming languages that allow a class to be derived from a base class done in the code below. The functions Initilize (yes, i know i spelled it incorrectly) and Clean are both pure functions, meaning you need to inherit the class and create your own functions to use them. as shown above. Ofcourse you are going to have to include the header file for the HackManager class. The reason I did this is because Selene is a static library and i want you people to come up with your own fancy ways to add your addresses.
Code:
#include <HackManager.h>
class HeliosHackManager : public HackManager
{
public:
virtual bool Initilize();
virtual bool Clean();
};
Now that you have created your derived class, what you do now is simply define the hackmanager and use it.
Code:
HeliosHackManager hackManager;
// ,,...,,..,,..,,..,,...,,..,,..,,..,,...,,..,,..,,..,,...,,..,,..,,..
hackManager.FPS(fps);
hackManager.Jump(jumphack);
//Please Note that Speed is done differently for this hack, where we have this
//Ratio is a parameter that determines the speed of the person, ranging from 0.0 ~ 1.0 for how much you want to increase the speed.
hackManager.Speed(SpeedHack, ratio);
The next thing that is special in Selene is ESP, because ESP uses Graphics I defined the ESP in a special way so your hacks esp hacks are outside. The code you will be placing for ESP will be the source for the Person who is selected to run ESP on.
Code:
void ESP(bool box, bool name, bool healthbar =true)
{
hackManager.SetESPPlayerCall([&](PlayerInfo_t* player, CharacterFX_t* fx, PlayerInfo_t* lplayer)
{
auto color = (player->iTeam == lplayer->iTeam) ? 0xFF00FF00 : 0xFFFF0000;
D3DXVECTOR3 vScreen, vFootScreen;
auto vPos = player->Object->RootPosition;
vPos.y = player->Object->MinRootPosition.y;
if (!hackManager.WorldToScreen(vPos, vScreen))
return;
if (box)
{
vPos.y = player->Object->MaxRootPosition.y;
if (hackManager.WorldToScreen(vPos, vFootScreen))
{
auto BoxDist = 0.2f * (vFootScreen.y - vScreen.y);
// Graphics::DrawBorder(vScreen.x - BoxDist, vScreen.y, BoxDist * 2, vFootScreen.y - vSc
}
}
if (name)
{
// Graphics::DrawFont(vScreen.x, vScreen.y - 5, color, player->sName, D3DFONT_CENTERED);
}
if (healthbar)
{
if (fx)
{
// DrawHealthBars(vScreen.x - 13, vScreen.y - 7, (int)fx->wHealth, fx->bSpawnSheild);
}
}
});
hackManager.ESP(box || name || healthbar);
}
All you will have to do now is call the esp Function
ESP(box, name, healthbar);
For a Hacks function now
Code:
void RunHacks()
{
if (!hackManager.Initilize())
return;
hackManager.FPS(fps);
hackManager.Jump(jumphack);
hackManager.Speed(SpeedHack, ratio);
ESP(box, name, healthbar);
}
Credits
- Topblast : I coded this thing
- Caddy / @deaddead1 : Hacks
- --Fenix-- : Classes
- USSR : Classes