- Joined
- Sep 10, 2007
- Messages
- 968
- Reaction score
- 815
Notice: These addresses / structure offsets are for 07 clients. Not too hard to update though.
Also, "auto" is a keyword determined by the compiler.
07 Offsets:
uint23_t can be replaced with DWORD / unsigned int.
Enums:
If you need help updating / understand this, just post.
Also, "auto" is a keyword determined by the compiler.
Code:
#include "Empathy.h"
//easier additions.
typedef void (__cdecl *chatCallback)(const char *, const int, char **const );
typedef void (__thiscall* ZChatCmdManager__AddCommandTypedef) (LPVOID instance, int id, const char* command, chatCallback function, int flag, int minArgs, int maxArgs, bool bRepeat, char* szUsage, char* szHelp);
ZChatCmdManager__AddCommandTypedef ZChatCmdManager__AddCommand = (ZChatCmdManager__AddCommandTypedef)ZChatCmdManager__AddCommandAddress;
void OnBan(const char* line, const int argc, char *argv[]);
void OnReloadConfig(const char* line, const int argc, char *argv[]);
void CreateCommands()
{
auto gameInterface = ((DWORD* (__cdecl*)())ZGetGameInterfaceAddress)();
auto chat = ((gameInterface)+(0x380/sizeof(DWORD)));
auto cmdManager = (DWORD*)((chat)+(0x4/sizeof(DWORD)));
ZChatCmdManager__AddCommand(cmdManager, 0, "ban", OnBan, CCF_ADMIN, 1, 2, true, "/ban user hacking", "Ban command!");
ZChatCmdManager__AddCommand(cmdManager, 0, "admin_reload", OnReloadConfig, CCF_ADMIN, 1, 1, true, "/admin_reload shop.xml", "Config reload command!");
}
void OnReloadConfig(const char* line, const int argc, char *argv[])
{
if (argc >= 2)
{
auto command = MCommand::Create(0xD136);
auto file = new MCommandParameterString(argv[1]);
command->AddParameter(file);
MCommand::Post(command);
}
}
void OnBan(const char* line, const int argc, char *argv[])
{
if (argc >= 3)
{
auto command = MCommand::Create(0xD149);
auto player = new MCommandParameterString(argv[1]);
auto reason = new MCommandParameterString(argv[2]);
command->AddParameter(player);
command->AddParameter(reason);
MCommand::Post(command);
}
}
07 Offsets:
Code:
static uint32_t ZGetGameInterfaceAddress = 0x004ABCE0;
static uint32_t ZChatCmdManager__AddCommandAddress = 0x0042FB70;
uint23_t can be replaced with DWORD / unsigned int.
Enums:
Code:
enum ZChatCmdFlag
{
CCF_NONE,
CCF_LOBBY,
CCF_STAGE,
CCF_GAME = 04,
CCF_ALL = 0xf,
CCF_TEST = 0x40,
CCF_ADMIN = 0x80,
};
If you need help updating / understand this, just post.

