Siga-nos em...
Follow us on Twitter Follow us on Facebook Watch us on YouTube
Registro

Alpha Servers
Resultados 1 a 3 de 3
  1. #1

    Avatar de orfeus
    Data de Ingresso
    Sep 2009
    Localização
    Florianopolis, SC
    Idade
    31
    Posts
    4
    Agradecido
    0
    Agradeceu
    0
    Peso da Avaliação
    0

    Post [Tutorial] Adicionando /post na versão 97d

    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 OriginalOffsetDWORD 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 OriginalOffsetDWORD DestOffset)    //Codigo do Hook no GS
    {
        
    DWORD OldProtect 0;
        
    VirtualProtect((LPVOID)(OriginalOffset+1), 4PROCESS_ALL_ACCESS, &OldProtect);
        *(
    DWORD*)(OriginalOffset+1) = (DWORD)(DestOffset)-(OriginalOffset +5);
        
    VirtualProtect((LPVOID)(OriginalOffset+1), 4OldProtectNULL);
    }

    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 48005800i++) {
            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(dllexportvoid 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 protoNumunsigned char *aRecvint aLenint aIndexBOOL Encryptint 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

  2. #2

    Avatar de Diel
    Data de Ingresso
    Sep 2009
    Localização
    Brasilia
    Idade
    35
    Posts
    106
    Agradecido
    1
    Peso da Avaliação
    17

    Padrão

    ARQUIVO CPP


    Código:
    void CHAT_COMMANDS::LoadCommandsCfg()
    {
    	this->PostActive	= GetPrivateProfileInt(POST_SECTION,"PostActive",-1,CMDS_FILE);
    	if(this->PostActive == -1) MessageBox(NULL, "Erro", "Erro", MB_OK);
    	this->PostPrice		= GetPrivateProfileInt(POST_SECTION,"PostPrice",1000,CMDS_FILE);
    	this->PostLevel		= GetPrivateProfileInt(POST_SECTION,"PostLevel",10,CMDS_FILE);
    	GetPrivateProfileString(POST_SECTION,"PostFormat","[POST]%s : %s",this->PostFormat,50,CMDS_FILE);
    	GetPrivateProfileString(POST_SECTION,"PostCommand","post",this->PostCommand,50,CMDS_FILE);
    }
    
    void CHAT_COMMANDS::ComandoMessagePost(DWORD aIndex, char * msg)
    {
    	if(this->PostActive == 0)
    		{
    	if(this->PostLevel > gObj->Level)
    		{
    		sprintf(cMsg,"[%s] Falta %d de level para você poder postar!",gObj->Name,(this->PostLevel - gObj->Level));
    		GCServerMsgStringSend(cMsg,aIndex,1);
    		}
    	else if(this->PostPrice > gObj->Money)
    		{
    		sprintf(cMsg,"[%s] Falta %d de zen para você poder postar!",gObj->Name,(this->PostPrice - gObj->Money));
    		GCServerMsgStringSend(cMsg,aIndex,1);
    		}
    	else
    		{
    		gObj->Money -= this->PostPrice;
    		sprintf(cMsg,this->PostFormat,gObj->Name,msg);
    		gs_func.GuildColor(cMsg,aIndex);
    		GCMoneySend(aIndex,gObj->Money);
    		LogAddFunc(1,"[MCTScript] -> /%s usado por %s",this->PostCommand,gObj->Name);
    		}
    	}
    }
    ARQUIVO H

    Código:
    #ifndef CHATHANDLER_H
    #define CHATHANDLER_H
    
    #include "StdAfx.h"
    
    class CHAT_COMMANDS
    {
    public:
    
    unsigned char	PostActive;
    unsigned short	PostLevel;
    unsigned int	PostPrice;
    unsigned int	PostResetsNd;
    char			PostCommand[25];
    char			PostFormat[50];
    
    void ComandoMessagePost(short aIndex,char * msg);
    
    	void LoadCommandsCfg();
    };
    
    extern CHAT_COMMANDS c_call;
    
    #endif
    Última edição por Diel; 25-09-2009 às 10:16 PM.

  3. #3

    Avatar de Mr.Marin
    Data de Ingresso
    Sep 2009
    Localização
    Na frente do computador...
    Posts
    161
    Agradecido
    5
    Agradeceu
    3
    Peso da Avaliação
    21

    Padrão

    Só um detalhe... se for implementado dessa forma não funcionará!

    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*/
    };

    esses /*0xXX + 0xX*/ são apenas guias para quem está desenvolvendo, representam a posição da memória onde fica cada uma das variáveis da estrutura, para que a estrutura funcione, ela deve ter tudo nas suas devidas posições, da forma com que você postou ela, temos ela dessa forma:

    int Connected em 0x00 e não 0x04.
    char Name[11] em 0x04 e não 0x6A.
    unsigned short Money em 0x0F e não em 0x86...
    e por aí vai...

    quero dizer que, se não tiver todas as variáveis em ordem, a objectstruct não funciona... uma forma de corrigir isso (que é usada pelos coders quando não conhecem variáveis, eu mesmo usei várias nessa decompilação da objectstruct do 0.97D) é usar "memory fillers", que servem para preencher espaços desconhecidos da memória, para que o acesso fique nos endereços corretos!

    Essa objectstruct corrigida, para funcionar sem o resto das variáveis fica:

    struct OBJECTSTRUCT
    {
    /*Start + Size*/
    /*0x0 + 0x4*/ char m_Filler0x0[4];
    /*0x4 + 0x4*/ int Connected;
    /*0x8 + 0x62*/ char m_Filler0x8[0x62];
    /*0x6A + 0xB*/ char Name[11]; // Player Name
    /*0x75 + 0x11*; char m_Filler0x75[0x11];
    /*0x86 + 0x2*/ unsigned short Level; // Player Level
    /*0x88 + 0xC*/ char m_Filler0x88[0xC];
    /*0x94 + 0x4*/ unsigned int Money; // Player Zen
    /*0x98 +0xC74*/ char m_Filler0x98[0xC74];
    /*Final 0x0D0C*/
    };

 

 

Informações de Tópico

Usuários Navegando neste Tópico

Há 1 usuários navegando neste tópico. (0 registrados e 1 visitantes)

Tópicos Similares

  1. |Dúvida| Adicionando servidor VIP
    Por [ADM]Lp no fórum Dúvidas
    Respostas: 13
    Último Post: 05-10-2012, 01:36 PM
  2. [Tutorial]Mudando Npc de lugar ou adicionando
    Por FusioN no fórum Priston Tales
    Respostas: 0
    Último Post: 15-03-2011, 08:50 PM
  3. [Tutorial]Adicionando Neve ou Meteoros Em Ricarten
    Por FusioN no fórum Priston Tales
    Respostas: 0
    Último Post: 08-03-2011, 06:07 PM
  4. Respostas: 7
    Último Post: 03-10-2009, 04:43 AM

Marcadores

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •