Code:
//------------------------Based on orginal bloodx Source--------------------
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
//----------------------------DECLARATION-----------------------------------
#include "stuff.h"
//Chat & Notice message
#define MAX_P 500
#define MAX_MOB 500
extern DWORD Attacker;
unsigned int atCount=0;
unsigned long Notice_add;
unsigned int AutoBehead = 0;
typedef void (__cdecl* Notice_org)(char*, int);
typedef int (__cdecl * Chat_org)(char, char*, int);
BYTE pChat[] = {0x55,0x8B,0xEC,0x83,0x3D,0x48,0x2B,0x86,0x00,0x00,0x74,0x17,0x8B,0x45,0x10,0x50}; // pattern //
char * mChat = "xxx????????xxxx"; // mask //
unsigned long Chat_add = Memory::dwFindPattern( 0x00400000,0x00700000,pChat,mChat);
//end
DWORD SpeedValue = 0;
DWORD dX = 0;
DWORD dY = 0;
#define ID_INFO 9010
const char g_szClassName[] = "toolkal based on bloodx source modify by FANEq";
unsigned int nAttackHack = 0;
unsigned int nLABOT = 0;
DWORD HP0 = 0;
unsigned int MonsterCount=0;
unsigned int PlayerCount=0;
char chWindow_Name[100];
char GameMaster1[26];
char GameMaster2[26];
char GameMaster3[26];
char GameMaster4[26];
char GameMaster5[26];
char GameMaster6[26];
char GameMaster7[26];
char GameMaster8[26];
char GameMaster9[26];
char GameMaster10[26];
DWORD ManaKey;
WPARAM key_Mana;
HWND hwndupdate;
HWND EditBoxA;
HWND EditBoxX;
HWND EditBoxY;
DWORD* dwSpeedpointer = (DWORD*)0x006F3840;
DWORD dwMyPlayerUID=0;
DWORD PlayerNear=1;
DWORD Attackhack_AttackMonster;
//----------------------------end-------------------------------------------
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
//---------------------------STRUCT & Function -----------------------------
struct onOFF
{
unsigned int nWinShow;
unsigned int nAutoPick;
unsigned int LOGGED;
onOFF() {
nWinShow = 0;
nAutoPick = 0;
LOGGED = 0;
}
};onOFF SWITCHER;
struct Players {
DWORD dwPlayerUID;
char szPlayerName[255];
DWORD dwPlayerX;
DWORD dwPlayerY;
DWORD dwPlayerZ;
BYTE CharacterType;
int reserved;
};Players Player[MAX_P]={0};
struct Items {
WORD Itemindex;
DWORD dwItemID;
DWORD dwIX;
DWORD dwIY;
DWORD Amount;
};Items Itemx;
struct ActiveMonster{
WORD MonsterID;
DWORD MonsterIndexID;
DWORD mX;
DWORD mY;
DWORD mHp;
};ActiveMonster ActivateMonsters[MAX_MOB];
void Kal::SpeedHack(DWORD Speed){
Memory::MemcpyEx(DWORD(((DWORD)*dwSpeedpointer)+0x00004B14),(DWORD)&Speed,4);
}
DWORD Kal::GetCurHP(DWORD dwAttacker,DWORD dwTarget,WORD dwDamage, bool attacktype){
int i;
for(i=0; i<=MAX_MOB;i++)
{
if(ActivateMonsters[i].MonsterID==dwTarget || ActivateMonsters[i].MonsterID==dwAttacker)
{
if(ActivateMonsters[i].MonsterID==dwTarget)ActivateMonsters[i].mHp -= dwDamage;
break;
}
}
return ActivateMonsters[i].mHp;
}
void Kal::MonsterAppear(char *szBuffer){
int i = 0;
if (MonsterCount < MAX_MOB)
{
while(1){
if(ActivateMonsters[i].MonsterID==0) break;
i++;
}
ActivateMonsters[i].MonsterID = *(DWORD*)&szBuffer[5];
ActivateMonsters[i].MonsterIndexID = *(WORD*)&szBuffer[3];
ActivateMonsters[i].mX = *(DWORD*)&szBuffer[9];
ActivateMonsters[i].mY = *(DWORD*)&szBuffer[9+4];
ActivateMonsters[i].mHp = *(WORD*)&szBuffer[19]; // = *(DWORD*)&szBuffer[19+4]; Hp Current / or Total?
MonsterCount++;
//MessageBox(hwndupdate, "incrased ++", "Information", MB_OK); //TESTED
}
}
void Kal::MonsterDisapear(char *szBuffer){
DWORD MonsterID=*(DWORD*)&szBuffer[3];
for(int i=0; i<=MAX_MOB;i++){
if(ActivateMonsters[i].MonsterID==MonsterID){
MonsterCount--;
memset(&ActivateMonsters[i],0,sizeof(ActivateMonsters[i]));
char szMyString[10] ={0}; // Have enough storage in character array.
sprintf(szMyString, "0x%08x",MonsterID);
//test
MessageBox(NULL, szMyString, TEXT(" dissapear"), MB_OK) ;
break;
}
}
}
void Kal::MonsterMove(char *szBuffer){
DWORD MonsterID = *(DWORD*)&szBuffer[3];
int X= szBuffer[7];
int Y= szBuffer[8];
for(int i=0; i<=MAX_MOB;i++){
if(ActivateMonsters[i].MonsterID==MonsterID){
ActivateMonsters[i].mX+=X;
ActivateMonsters[i].mY+=Y;
break;
}
}
}
void Kal::MonsterDie(char *szBuffer){
DWORD MonsterID=*(DWORD*)&szBuffer[3];
BYTE BehadeState = *(BYTE*)&szBuffer[7];
//ActivateMonsters[i].MonsterID==0
for(int i=0; i<=MAX_MOB;i++){
if(ActivateMonsters[i].MonsterID==MonsterID){
if (AutoBehead == 1 && BehadeState == 0x08){
SendKoemV2(0x10,"bbd",1,1,MonsterID);
}
memset(&ActivateMonsters[i],0,sizeof(ActivateMonsters[i]));
MonsterCount--;
//test
MessageBox(hwndupdate, "decrased --", "Information", MB_OK);
break;
}
}
}
void Kal::ItemDropped(char* szBuffer)
{
if(SWITCHER.nAutoPick==1)
{
Itemx.Itemindex =*(WORD*)&szBuffer[3];
Itemx.dwItemID = *(DWORD*)&szBuffer[5];
Itemx.dwIX = *(DWORD*)&szBuffer[5+4];
Itemx.dwIY = *(DWORD*)&szBuffer[5+4+4];
Itemx.Amount = *(DWORD*)&szBuffer[17];
SendKoemV2(0x20,"ddd",Itemx.dwItemID,Itemx.dwIX/32,Itemx.dwIY/32);
}
}
// When f3 is pressed storm hack
void Kal::StormHack()
{
//cordinates Y and Y read
DWORD_PTR* cordY = reinterpret_cast< DWORD_PTR* >( (*(DWORD_PTR*)0x006F3840) + 0x463C);
DWORD_PTR* cordX = reinterpret_cast< DWORD_PTR* >( (*(DWORD_PTR*)0x006F3840) + 0x4644);
unsigned int SetCordX = *cordX;
unsigned int SetCordY = *cordY;
//end
SendKoemV2(0x10,"bdd",43,SetCordX,SetCordY);
}
void Kal::ChatBox(const char *prefix, int mType, char* mFormat,...)
{
if (!*(DWORD*)0x0070eaf8) { return; }
char* uText = new char[255];
char* mText = new char[255];
DWORD RGBCol;
// DWORD cRGBCol;
DWORD cbCall = 0x00475830;
if (mType == 1) RGBCol = 0x004080ff; //255 128 64 StudentChat Orange
/*
Colours:
Flashy Green : 0x06c40b
Sweet Blue : 0xcd944f
Soft Red : 0x3030ff
Flashy Fuchsia : 0xb337f4
*/
// else { RGBCol = cRGBCol; } // highly destructive ?
va_list args;
va_start(args, mFormat);
vsprintf_s(mText,255,mFormat,args);
va_end(args);
strcpy_s(uText,255,prefix);
strcat_s(uText,255,mText);
__asm
{
mov eax, RGBCol
push eax
mov ecx, uText
push ecx
mov dl, 0x40
push edx
mov ecx, dword ptr ds:[0x0070eaf8]
call cbCall
}
delete[] mText;
delete[] uText;
}
void Kal::Notice(int color,char* mFormat,...){
char* mText = new char[255];
va_list args;
va_start(args, mFormat);
vsprintf_s(mText,255,mFormat,args);
va_end(args);
((Notice_org)Notice_add)(mText,color);
}
void Kal::PlayerDisappear(char* szBuffer)
{
DWORD PlayerID=*(DWORD*)&szBuffer[3];
for(int i=0; i<=MAX_P;i++)
{
if(Player[i].dwPlayerUID==PlayerID)
{ memset(&Player[i],0,sizeof(Player[i]));
Player[i].dwPlayerUID=0;
PlayerCount--;
break;
}
}
}
void Kal::Login(char* szBuffer)
{
nAttackHack=0;
nLABOT=0;
SWITCHER.nAutoPick=0;
SpeedValue=0;
dwMyPlayerUID=0;
PlayerCount=0;
MonsterCount=0;
AutoBehead = 0;
for(int i = 0;i <= MAX_P;i++)
{
memset(&Player[i],0,sizeof(Player[i]));
memset(&ActivateMonsters[i],0,sizeof(Player[i]));
Player[i].dwPlayerUID=0;
}
}
void Kal::TP(char* szBuffer)
{
}
void Kal::PlayeMove (char *szBuffer){
DWORD PlayerID = *(DWORD*)&szBuffer[3];
int X= szBuffer[7];
int Y= szBuffer[8];
int Z= szBuffer[9];
for(int i=0; i<=MAX_P;i++){
if(Player[i].dwPlayerUID==PlayerID){
Player[i].dwPlayerX+=X;
Player[i].dwPlayerY+=Y;
Player[i].dwPlayerZ+=Z;
//cout << "Monster Move: " << Monsters[ActiveMonsters[i].MonsterIndexID].MonsterName << " Coord: (x,y) :" << ActiveMonsters[i].mX << "," << ActiveMonsters[i].mY << endl;
break;
}
}
}
void Kal::PlayerMoveSit(char *szBuffer){
DWORD PlayerID = *(DWORD*)&szBuffer[3];
if(Player[0].dwPlayerUID==PlayerID){
Player[0].dwPlayerX = *(DWORD *)&szBuffer[7];
Player[0].dwPlayerY = *(DWORD *)&szBuffer[11];
Player[0].dwPlayerZ = *(DWORD *)&szBuffer[15];
}
}
void Kal::PlayerAppear(char* szBuffer)
{
if(PlayerCount <= MAX_P)
{
int i;
for (i = 0;i < MAX_P;i++)
{
if (Player[i].dwPlayerUID == 0)
{
Player[i].dwPlayerUID=*(DWORD*)&szBuffer[3];
memcpy((void*)&Player[i].szPlayerName,(void*)((DWORD)szBuffer+7),16);
Player[i].reserved=strlen(Player[i].szPlayerName);
Player[i].dwPlayerX=*(DWORD*)&szBuffer[7+Player[i].reserved+2];
Player[i].dwPlayerY=*(DWORD*)&szBuffer[7+Player[i].reserved+2+4];
Player[i].dwPlayerZ=*(DWORD*)&szBuffer[7+Player[i].reserved+2+4+4];
if(dwMyPlayerUID == 0)dwMyPlayerUID=Player[0].dwPlayerUID;
//Kal::Chat(red,"Player[%s] is in Range @ (%d/%d/%d)",Player[i].szPlayerName,Player[i].dwPlayerX,Player[i].dwPlayerY,Player[i].dwPlayerZ);
Sleep(1);
PlayerCount++;
break; //ender der schleife
}
}
}
}
//----------------------------end-------------------------------------------
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
//---------------------kalonline settings load------------------------------
void Kal::SetManaKey()
{
switch (ManaKey)
{
case 0:
key_Mana = 0x30;
break;
case 1:
key_Mana = 0x31;
break;
case 2:
key_Mana = 0x32;
break;
case 3:
key_Mana = 0x33;
break;
case 4:
key_Mana = 0x34;
break;
case 5:
key_Mana = 0x35;
break;
case 6:
key_Mana = 0x36;
break;
case 7:
key_Mana = 0x37;
break;
case 8:
key_Mana = 0x38;
break;
case 9:
key_Mana = 0x39;
break;
}
}
void Kal::ReadSettings()
{
char temp_key[2];
DWORD destSize;
destSize=100;
int x = 0;
if(x==0)
{
GetPrivateProfileString("KalWindow","Name","NULL",chWindow_Name,destSize,"Testsystem/Settings.ini");
x++;
}
GetPrivateProfileString("Settings","ManaKey","NULL",temp_key,destSize,"Testsystem/Settings.ini");
ManaKey = atoi(temp_key);
Kal::SetManaKey();
GetPrivateProfileString("GM","1","NULL",GameMaster1,destSize,"Testsystem/Settings.ini");
GetPrivateProfileString("GM","2","NULL",GameMaster2,destSize,"Testsystem/Settings.ini");
GetPrivateProfileString("GM","3","NULL",GameMaster3,destSize,"Testsystem/Settings.ini");
GetPrivateProfileString("GM","4","NULL",GameMaster4,destSize,"Testsystem/Settings.ini");
GetPrivateProfileString("GM","5","NULL",GameMaster5,destSize,"Testsystem/Settings.ini");
GetPrivateProfileString("GM","6","NULL",GameMaster6,destSize,"Testsystem/Settings.ini");
GetPrivateProfileString("GM","7","NULL",GameMaster7,destSize,"Testsystem/Settings.ini");
GetPrivateProfileString("GM","8","NULL",GameMaster8,destSize,"Testsystem/Settings.ini");
GetPrivateProfileString("GM","9","NULL",GameMaster9,destSize,"Testsystem/Settings.ini");
GetPrivateProfileString("GM","10","NULL",GameMaster10,destSize,"Testsystem/Settings.ini");
}