Bom fiz uma pequena adaptação desse efeito para o main emu S4,com base na source S6 da Mwebgame,se tiver alguma falha no code peço desculpas como disse foi uma adaptação q para mim funcionou!
SmokerEffect.h
Dica
extern bool g_sEnabled;
void AttachNewEffect();
SmokerEffect.cpp
Dica
#include "StdAfx.h"
#include "SmokerEffect.h"
#include "ToolKit.h"
#include "Offset.h"
#include "Defines.h"
DWORD pItemType = 0;
bool g_sEnabled = GetPrivateProfileIntA("Setting", "SmokerEffect", 0, ".\\Settings.ini");
__declspec(naked) void SetItemEffect()
{
__asm
{
Mov pItemType, Eax
}
switch (pItemType)
{
case ITEM2(11, 100):
{
__asm
{
Mov Esi, HDK_ITEM_EFFECT_ALLOW
JMP Esi
}
}
break;
}
__asm
{
Mov Esi, HDK_ITEM_EFFECT_NOT_ALLOW
JMP Esi
}
}
__declspec(naked) void SetColorEffect()
{
__asm
{
Mov pItemType, Ecx
}
switch (pItemType)
{
case ITEM2(11, 29): //RED
__asm
{
MOV EDX, DWORD PTR SS : [EBP + 0xC]
MOV DWORD PTR DS : [EDX + 0x9C], 0x3F266666 //Red Color Value
MOV EAX, DWORD PTR SS : [EBP + 0xC]
MOV DWORD PTR DS : [EAX + 0xA0], 0 //Green Color Value
MOV ECX, DWORD PTR SS : [EBP + 0xC]
MOV DWORD PTR DS : [ECX + 0xA4], 0 //Blue Color Value
}
break;
}
__asm
{
Mov Esi, HDK_NEXT_ITEM_COLOR
JMP Esi
}
}
void AttachNewEffect()
{
if (!g_sEnabled)
return;
DWORD dwPotect;
dwPotect = ToolKit.UnProtect(HDK_SET_ITEM_EFFECT, 11); //12
ToolKit.SetNop(HDK_SET_ITEM_EFFECT, 11);//12
ToolKit.WriteJmp(HDK_SET_ITEM_EFFECT, (DWORD)&SetItemEffect);
ToolKit.Protect(HDK_SET_ITEM_EFFECT, 21, dwPotect); //22
dwPotect = ToolKit.UnProtect(HDK_SET_COLOR_EFFECT, 30);//46
ToolKit.SetNop(HDK_SET_COLOR_EFFECT, 30); //46
ToolKit.WriteJmp(HDK_SET_COLOR_EFFECT, (DWORD)&SetColorEffect);
ToolKit.Protect(HDK_SET_COLOR_EFFECT, 45, dwPotect); //56
}
Defines.h
Dica
#define ITEM_INTER 333
#define ITEM(x, y) ((x * 512) + y)
#define ITEM2(x, y) ((x * 512) + y + ITEM_INTER)
#define Color4f(r, b, g, o) ((o << 24) + (g << 16) + (b << 8) + r)
#define HDK_SET_ITEM_EFFECT 0x004F31FB
#define HDK_SET_COLOR_EFFECT 0x004F326F
#define HDK_ITEM_EFFECT_ALLOW 0x0057AD8D
#define HDK_ITEM_EFFECT_NOT_ALLOW 0x0057B73B
#define HDK_NEXT_ITEM_COLOR 0x0057AF2E
ToolKit.h
Dica
#pragma once
#include "StdAfx.h"
class ToolKitEx
{
public:
ToolKitEx();
virtual ~ToolKitEx();
bool FileExists(char * name);
void SetNop(DWORD dwSrcOffset, int Size);
void SetByteP(DWORD dwSrcOffset, BYTE bOpCode);
void SetByteU(DWORD dwOffset, BYTE btValue);
void WriteJmp(DWORD dwSrcOffset, DWORD dwDstOffset);
void HookThis(DWORD dwDstOffset, DWORD dwSrcOffset);
void HookOffset(DWORD my, DWORD tohook, BYTE type);
void HookExactOffset(DWORD my, DWORD tohook, BYTE type);
void Protect(DWORD dwSrcOffset, int Size, DWORD dwNewProtect);
DWORD UnProtect(DWORD dwSrcOffset, int Size);
private:
protected:
};
extern ToolKitEx ToolKit;
ToolKit.cpp
Dica
#include "StdAfx.h"
#include "ToolKit.h"
ToolKitEx::ToolKitEx() {};
ToolKitEx::~ToolKitEx() {};
ToolKitEx ToolKit;
void ToolKitEx::Protect(DWORD dwSrcOffset, int Size, DWORD dwNewProtect)
{
DWORD OldProtect = 0;
VirtualProtect((LPVOID)dwSrcOffset, Size, dwNewProtect, &OldProtect);
};
DWORD ToolKitEx::UnProtect(DWORD dwSrcOffset, int Size)
{
DWORD OldProtect = 0;
VirtualProtect((LPVOID)dwSrcOffset, Size, PAGE_EXECUTE_READWRITE, &OldProtect);
return OldProtect;
};
void ToolKitEx::SetNop(DWORD dwSrcOffset, int Size)
{
for (int i = 0; i < Size; i++)
*(BYTE*)(dwSrcOffset + i) = 0x90;
};
void ToolKitEx::SetByteP(DWORD dwSrcOffset, BYTE bOpCode)
{
__try
{
DWORD dwProtect = this->UnProtect(dwSrcOffset, 1);
*(BYTE*)(dwSrcOffset) = bOpCode;
this->Protect(dwSrcOffset, 1, dwProtect);
}
__finally {}
}
void ToolKitEx::WriteJmp(DWORD dwSrcOffset, DWORD dwDstOffset)
{
if (dwSrcOffset)
{
__try
{
DWORD dwOffset = UnProtect(dwSrcOffset, 10);
SetByteP(dwSrcOffset, 0xE9);
HookThis(dwDstOffset, dwSrcOffset);
Protect(dwSrcOffset, 10, dwOffset);
}
__finally {}
}
};
void ToolKitEx::HookThis(DWORD dwDstOffset, DWORD dwSrcOffset)
{
*(DWORD*)(dwSrcOffset + 1) = dwDstOffset - (dwSrcOffset + 5);
};
void ToolKitEx::HookExactOffset(DWORD my, DWORD tohook, BYTE type)
{
*(BYTE*)tohook = type;
*(DWORD*)(tohook + 1) = my;
};
void ToolKitEx::HookOffset(DWORD my, DWORD tohook, BYTE type)
{
*(BYTE*)tohook = type;
*(DWORD*)(tohook + 1) = my - (tohook + 5);
};
void ToolKitEx::SetByteU(DWORD dwOffset, BYTE btValue)
{
*(BYTE*)(dwOffset) = btValue;
};
bool ToolKitEx::FileExists(char * name)
{
if (CreateFile(name, 0, 0, 0, OPEN_EXISTING, 0, 0) == INVALID_HANDLE_VALUE)
return false;
return true;
};
Main.cpp
Dica
#include "SmokerEffect.h"
AttachNewEffect();
RESULTADO
pra quem utiliza versão season 6 os offsets são
0x0057AD82
0x0057AEFA
0x0057AD8D
0x0057B73B
0x0057AF2E
créditos :
MWebGame
Boris160