Ola Pessoal, Hoje eu vol ensinar a vocês como Colocar o /post em Versões 97d+99i
Então vamos la?
1 -Primeiramente vocês precisarão das OBJECTSTRUCTS Name, Level, Zen e START E END.
e tambem da offset GCServerMsgStringSend, ProtocolCore, DataRecv
2 - Primeiramente abra o Visual C++ 2008, e você verá essa Imagem
3 - Depois Clique em File, New, Project e vocês Terão essa Imagem
4 - Clique em Empty Project e no Campo Name, Coloque o nome da Sua DLL no meu caso eu Usarei RZBR,
em seguida você vera essa tela
5 - Em Headers Files você Criara 4 Arquivos para isso clique com o botão direito na pasta
Add>>New item e verá essa janela:
Clique em Header File(h.)
os nomes deve ser Esses aqui,
GameServer.h
User.h
ChatCore.h
StdAfx
6 - Em Seguida no GameServer.h Coloque o Codigo Abaixo:
Código PHP:
#include "StdAfx.h"
#define GCMoneySend ((void(*) (DWORD, int)) 0x004185C0)
#define GCServerMsgStringSend ((void(*)(LPCTSTR Texto, DWORD PlayerID, int tipo)) 0x0040167C)
#define DataRecv ((void(*)(BYTE, PBYTE, DWORD, DWORD, ...)) 0x00414180)
#define DataSend ((void(*)(DWORD PlayerID, PBYTE Packet, DWORD Size)) 0x00440240)
7 - Depois Cole o Codigo da Imagem abaixo no Arquivo STDAFX.h
Código PHP:
#pragma once
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <iostream>
#include <time.h>
#include <conio.h>
#include <stdio.h>
#include <tchar.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
#include <direct.h>
#include <fcntl.h>
#include <io.h>
#include <vector>
#include <rpc.h>
#include <rpcdce.h>
#include <winnt.h>
#include <stdlib.h>
#include <string>
#pragma comment(lib,"user32.lib") // MFC Static
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib, "rpcrt4.lib")
using namespace std;
#pragma warning(disable : 4010)
#pragma warning(disable : 4101)
#pragma warning(disable : 4311)
#pragma warning(disable : 4312)
#pragma warning(disable : 4482)
#pragma warning(disable : 4700)
#pragma warning(disable : 4996)
#pragma warning(disable : 4244 4715 4717)
8 - Depois Cole Isso no User.h o User.h é o Arquivo que define as OBJECTSTRUCT
Código PHP:
#include "StdAfx.h"
#define OBJECT_BASE 0x4CEE778
#define OBJECT_POINTER(PlayerID) ((PlayerID * OBJECT_SIZE) + OBJECT_BASE)
#define OBJECT_TABINDEX(lpObj) ((lpObj - OBJECT_BASE) / OBJECT_SIZE)
struct OBJECTSTRUCT
{
/*Start + Size*/
/*0x4 + 0x4*/ int Connected; // Player Connect Status (0 -> Off | 1 -> ServerScreen | 2 -> CharScreen | 3 -> Playing)
/*0x6A + 0xB*/ char Name[11]; // Player Name
/*0x86 + 0x2*/ unsigned short Level; // Player Level
/*0x94 + 0x4*/ unsigned int Money; // Player Zen
/*Final 0x0D0C*/
};
extern OBJECTSTRUCT gObj;
9 - no ChatCore.h Cole esse Codigo
Código PHP:
#include <windows.h>
#include <string.h>
void ChatDataSend(DWORD aIndex,LPBYTE Protocol);
void HookProc(DWORD OriginalOffset, DWORD DestOffset);
Blz ate ai tah Tudo bem ^^
10 - Crie Agora 2 Arquivos .Cpp para Isso Clique com o Botão Direito na pasta SOurces Files
Em Add>> Depois em New Item Assim como no Passo 5, Porem ao invez de Clicar em Headers Files
iremos Clicar em C++ Files(.CPP)
Crie 2 Arquivos com o Nome
Main.Cpp
ChatCore.Cpp
11 - No arquivo ChatCore.cpp Coloque esse Codigo:
Código PHP:
#include "StdAfx.h"
#include "ChatCore.h"
#include "User.h"
void HookProc(DWORD OriginalOffset, DWORD DestOffset) //Codigo do Hook no GS
{
DWORD OldProtect = 0;
VirtualProtect((LPVOID)(OriginalOffset+1), 4, PROCESS_ALL_ACCESS, &OldProtect);
*(DWORD*)(OriginalOffset+1) = (DWORD)(DestOffset)-(OriginalOffset +5);
VirtualProtect((LPVOID)(OriginalOffset+1), 4, OldProtect, NULL);
}
void CmdPost(int aIndex,char*msg) //Comando /post
{
OBJECTSTRUCT*gObj = (OBJECTSTRUCT*)OBJECT_POINTER(aIndex);
/*Aqui definimos a função que da acesso as OBJECT STRUCT*/
int PostAtivo = GetPrivateProfileInt("XXXXXX","ComandoPost",1,"XXXXXX.Ini"); //Ativação do Comando na Ini
int Level = GetPrivateProfileInt("XXXXXX","PostLevel",100,"XXXXXX.Ini"); //Level do Comando na Ini
int Money = GetPrivateProfileInt("XXXXXX","PostCost",1,"XXXXXX.Ini"); //Custo do Comando na Ini
char Msg[200];
if(PostAtivo == 0) {
Messages.NoticeSend(aIndex,1,"[POST] Comando desabilitado.");
return; }
if(strlen(msg) < 1) {
Messages.NoticeSend(aIndex,1,"[POST] Usa-se: /post <msg>");
return; }
if(Level > gObj->Level) {
Messages.NoticeSend(aIndex,1,"[POST] Level insuficiente.");
return; }
if(Money > gObj->Money) {
Messages.NoticeSend(aIndex,1,"[POST] Zen insuficiente.");
return; }
gObj->Money -= Money;
GCMoneySend(aIndex,gObj->Money); //Tira o Dinheiro gasto no Comando
for(int i = 4800; i < 5800; i++) {
if(gObj->Connected == 3) {
sprintf(Msg,"%s[POST]%s",gObj->Name,msg); //Não Mude isso ^^
GCServerMsgStringSend(Msg,aIndex,0x01);
}
}
}
void ChatDataSend(DWORD aIndex,LPBYTE Protocol)
{
char CmdPost[] = "/post";
//Comando Post
if(!memcmp(&Protocol[13],CmdPost,strlen(CmdPost)))
{
PostCmd(aIndex,( char*)Protocol+13+strlen(CmdPost));
}
}
12 - No Arquivo Main.cpp Coloque esse Codigo:
Código PHP:
#include "ChatCore.h"
#include "StdAfx.h"
#include "GameServer.h"
#include "User.h"
extern "C" __declspec(dllexport) void RageZoneBR()
{
DWORD dwOld1;
if(VirtualProtect((LPVOID)0x00401000,3543191,PAGE_EXECUTE_READWRITE,&dwOld1))
{
Utilidades.HookProc(0x00401D5C,(DWORD)(&ProtocolCore));
MessageBox(0,"XXXXXX - O melhor forum MMO do Brasil, Clique em Ok","Sucesso",0);
}
else
{
MessageBox(0,"I Mano o Bixo Pego, você não pode usar o GS","SE FERRO!!!",0);
}
}
bool ProtocolCore(BYTE protoNum, unsigned char *aRecv, int aLen, int aIndex, BOOL Encrypt, int serial)
{
switch(protoNum)
{
case 0x00:
ChatDataSend(aIndex,aRecv);
break;
}
DataRecv(protoNum,aRecv,aLen,aIndex,Encrypt,serial);
return true;
}
Depois de Mudarem a Vontade os Codigos, adaptalos a sua maneira, Pressione F5 para Compilar a DLL
e dedpois é só Hookar no GS e Criar a Ini
que pede no Comando com seu conteudo e Disfrutar do Comando ^^
Creditos:
jamel pelo tutorial, pelo Codigo,
Objectstruct = Marin
Função de Hook Dark Team(PS: Se Tiver problema eu Mudo)
orfeus por postar aki