Hoje vou explicar uma técnica para editar o brilho(glow) no main.exe. O principal objectivo é alterar o Brilho dos itens de +7 à +13. 1. Vamos começar a partir da teoria.
Existe uma função no main.exe que calcula cor e brilho para a maioria dos itens +7 à +13, e alguns mobs. Por exemplo, de asas, dinorants, darkhorses e para alguns outros itens esta função não é chamada, mas eu estava procurando um jeito de alterar o brilho ou a cor de items que não têm este atributo. Mais há um jeito de fazer isso de fora.
O protótipo desta função em c++:
Código:
dwItemId - objectId ou index, Cada objeto é colocado em uma grande array, e cada item tem seu ID unico.
cl - Estrutura das cores RGB
Código:
Nesta variável a função brilho retorna o resultado de cor, existem 30 padrão de cores do brilho (mas apenas 2 azuis), mais como sou xiter, Faremos qualquer cor. :P
uk1 & uk2 - Na realidade estes dois são flutuadores, e eles são utilizados para calcular as cores do brilho, mas não iremos utilizá-los.
bUkn - Temos 2 tipo de balrogs, prata e vermelho. Esta variável é usada apenas para determinar o seu brilho. prata(cromado) ou vermelho (em Chamas).
Se você tmb é xiter ja adivinhouo que faremos, faremos um hook à esta função e voltar a cor que queremos.
Mas vai perguntar como faremos para descobrir o verdadeiro ID do item, porque, em função temos objeto da Id. É simples, todos os itens são deslocadas no array de objetos em algum valor. Itens Ids permanecem o mesmo valor que no item.bmd e em item.txt:
itemId = ItemType * MaxItemsInType + ItemIndex
Portanto, se tivermos ObjectId e Offset dos itens no array de objetos, podemos simplesmente calcular o ID do Item:
ItemId = ObjectId - Offset
Por Exemplo, vamos procurar o ObjectId=0x293 e Offset=0x285, com 512 items sertado como maximo:
ItemId = ObjectId - Offset = 0x293 - 0x285 = 0x0E(14)
ItemType = ItemId / MaxItems = 14 / 512 = 0 (divisão de Inteiro)
ItemIndex = ItemId % MaxItems = 14 % 512 = 14 (Remanescente da Divisão do Inteiro)
Se você dê uma olhada em items.txt, Você vai encontrar esse item com Tipo = 0 e Index = 14 que é a Lightning Sword.
Logo mais eu vou dizer como encontrar o "offset"
Com estes conhecimentos você pode fazer suas próprias DLL e alterar o brilho como quiser, mas eu fiz um DLL para os noobs e leechers que tem preiguiça de criar uma própria.
2. DLL
Aqui eu vou descrever a dll.
Esta dll suporta 32 e 512 MaxItems.
Portanto, a melhor maneira para um dll, que será compatível para todos, é alocação de memória para todos os itens ( isso é importante pra não dar ***** qdo colocar futuramente um item novo)
Código:
sizeof(ITEM) = 3*4 + 1 = 13 bytes
maxtypes = 16
memory = sizeof(ITEM)*maxtypes*maxitemindex = 208*maxitemindex
se o maxitemindex = 32, então a memória = 208*32 = 6 656 bytes ~ 6,5 kb
se o maxitemindex = 512, então a memória = 208*512 = 106 496 bytes = 104 kb
Para maxitemindex = 512, utiliza mais memória, mas este método permite a utilização mais compacta, por isso ele é mais rápido, em seguida, se tivéssemos de encontrar o item na lista de itens pelo seu id será mais facil.
bChng: Se item for alterado ele vai printar nosso brilho, se não vai chamar função de brilho padrão.
Aqui está o nosso novo Glow Proc:
Código:
void Glow(DWORD dwItemId, DWORD uk1, DWORD uk2, FRGB& fClr, BYTE bUkn)
{
int id = dwItemId - g_dwOffset; // calcula ID do item
// Se o nosso objectivo é um item e este número deverá utilizar o nosso brilho e não é um balrog prateado:
// Então voltamos a nossa cor
// else(senão) call (chama) o valor padrão de brilho do item
if( id >=0 && id < g_MaxItems*16 && Glows[id].bIsChanged && !bUkn)
fClr = Glows[id].fClr;
else
fnOldGlow(dwItemId, uk1, uk2, fClr, bUkn);
};
O Glow Cores dll lê de "glow.gld".
Format dos *.gld files:
Arquivo Inicio:
Código:
struct GLOW
{
DWORD signature; // = 0x574F4C47
BYTE bType; // representa max items, 0 - 32, else - 512
};
Final:
Código:
Nós agora podemos forçar o main.exe para exibir as cores.
3. Glow Editor Tool.
Glow Editor permite que você:
- Edita brilho e cor dos itens desejados,
Uma vez que ele usa Microsoft Jet (. MDB) database você poderá adicionar ou remover itens, é simples como MS Access.
- Carga e Salvar *. gld arquivos para 32 e 512 maxitems e versões do main.exe
- Patch DLL para seu main.exe, para o caso da função e itens offset serem diferentes
- DLL 's memória compartilhada, utilizando File Mapping, faz o on the fly + Glow Editor permite alterar as cores diretamente em jogo.
4. DLL Patch.
chamada da função Glow e itens offset são diferentes em diferentes casos e versões de main, por isso, temos de alterar estes valores.
Eu vou dizer-lhe como encontrá-los usando ollydbg, mas com 1 condição o main.exe deve ser Unpacked
1. Abra o main.exe no ollydbg.
2. Botão Direrito-> Search for -> all referenced text strings.
3. Na janela que abriu Botão direito novamente-> search for text
4. Digite "sword"; desmarque "Case sensitive" e marque "Entire scope"
5. Procure "Sword" igual na figura usuando CTR+L(procurar proximo)
6. Qdo vc encontrar, 2 cliques ou aperte ENTER nele, E na janela principal você verá como na foto, o srtring abaixo "Sword" deve ser "Dados \ item" ou pode ser apenas" Número".
7. Acima da primeira chamada da função push command pushes in stack. Itens começar tipos de Swords (Tipo = 0),
Assim quando main.exe cargas modelos ou texturas de espadas que acrescenta ao item da id Offset o início da espada do tipo de seção, e se espada do tipo é o primeiro tipo de itens,
Este é o offset Offset de itens no array de objetos
8. Vamos procurar a função que chama o glow. Botão direito ->search for -> all constants
9. Aqui vamos procurar o ObjectID da Lightning Sword(ObjectId = Offset(Valor que vc encontrou) + ItemdId(0*512+14 = 14(0x0E))
for Offset = 0x285, ObjectId = 0x293
10. Na janela foi encontrado resultados
11. 2 cliques ou enter no primeiro resultado, and e vc será redirecionado para isso
12. Este é o glow proc, role um pouco para cima para encontrar o inicio disso
13. Selecione o primeiro comando, com botão direito -> Go to, e vc verá duas chamadas para a função glow
se vc não achou "CALL from X", Botão direito denovo -> Analyse-> Analyse code, e repita o passo 13
agora com o offset e as duas chamadas da função vc pode criar a dll.
Glow teste
glow padrão
Glow Editor:
http://rapidshare.com/files/102489540/GlowEditor.rar.html
Fixed DLL patcher
Glow.dll:
[ DOWNLOAD ]
Fixed DLL
Glow.dll vai na pasta juntop com o main.exe
Glow.gld vai dentro da pasta Data\
Não se esqueça de dar HOOK da DLL no main.exe
para criar glow.gld, apenas abra o editor File->Save ele criará o . gld pra você.
Não testei em versões max 32 items, mais funciona na teoria
Cretidos: SONEKA PLAY-HOUSE.
Existe uma função no main.exe que calcula cor e brilho para a maioria dos itens +7 à +13, e alguns mobs. Por exemplo, de asas, dinorants, darkhorses e para alguns outros itens esta função não é chamada, mas eu estava procurando um jeito de alterar o brilho ou a cor de items que não têm este atributo. Mais há um jeito de fazer isso de fora.
O protótipo desta função em c++:
Código:
void __cdecl Glow(DWORD dwItemId, DWORD uk1, DWORD uk2, FRGB& cl, BYTE bUkn);
dwItemId - objectId ou index, Cada objeto é colocado em uma grande array, e cada item tem seu ID unico.
cl - Estrutura das cores RGB
Código:
struct FRGB
{
float r, g, b; // range of each color [0, 1]
};
{
float r, g, b; // range of each color [0, 1]
};
Nesta variável a função brilho retorna o resultado de cor, existem 30 padrão de cores do brilho (mas apenas 2 azuis), mais como sou xiter, Faremos qualquer cor. :P
uk1 & uk2 - Na realidade estes dois são flutuadores, e eles são utilizados para calcular as cores do brilho, mas não iremos utilizá-los.
bUkn - Temos 2 tipo de balrogs, prata e vermelho. Esta variável é usada apenas para determinar o seu brilho. prata(cromado) ou vermelho (em Chamas).
Se você tmb é xiter ja adivinhouo que faremos, faremos um hook à esta função e voltar a cor que queremos.
Mas vai perguntar como faremos para descobrir o verdadeiro ID do item, porque, em função temos objeto da Id. É simples, todos os itens são deslocadas no array de objetos em algum valor. Itens Ids permanecem o mesmo valor que no item.bmd e em item.txt:
itemId = ItemType * MaxItemsInType + ItemIndex
Portanto, se tivermos ObjectId e Offset dos itens no array de objetos, podemos simplesmente calcular o ID do Item:
ItemId = ObjectId - Offset
Por Exemplo, vamos procurar o ObjectId=0x293 e Offset=0x285, com 512 items sertado como maximo:
ItemId = ObjectId - Offset = 0x293 - 0x285 = 0x0E(14)
ItemType = ItemId / MaxItems = 14 / 512 = 0 (divisão de Inteiro)
ItemIndex = ItemId % MaxItems = 14 % 512 = 14 (Remanescente da Divisão do Inteiro)
Se você dê uma olhada em items.txt, Você vai encontrar esse item com Tipo = 0 e Index = 14 que é a Lightning Sword.
Logo mais eu vou dizer como encontrar o "offset"
Com estes conhecimentos você pode fazer suas próprias DLL e alterar o brilho como quiser, mas eu fiz um DLL para os noobs e leechers que tem preiguiça de criar uma própria.
2. DLL
Aqui eu vou descrever a dll.
Esta dll suporta 32 e 512 MaxItems.
Portanto, a melhor maneira para um dll, que será compatível para todos, é alocação de memória para todos os itens ( isso é importante pra não dar ***** qdo colocar futuramente um item novo)
Código:
struct ITEM
{
BYTE bChng; // Explicado mais la em baixo
float r, g, b;
};
{
BYTE bChng; // Explicado mais la em baixo
float r, g, b;
};
sizeof(ITEM) = 3*4 + 1 = 13 bytes
maxtypes = 16
memory = sizeof(ITEM)*maxtypes*maxitemindex = 208*maxitemindex
se o maxitemindex = 32, então a memória = 208*32 = 6 656 bytes ~ 6,5 kb
se o maxitemindex = 512, então a memória = 208*512 = 106 496 bytes = 104 kb
Para maxitemindex = 512, utiliza mais memória, mas este método permite a utilização mais compacta, por isso ele é mais rápido, em seguida, se tivéssemos de encontrar o item na lista de itens pelo seu id será mais facil.
bChng: Se item for alterado ele vai printar nosso brilho, se não vai chamar função de brilho padrão.
Aqui está o nosso novo Glow Proc:
Código:
void Glow(DWORD dwItemId, DWORD uk1, DWORD uk2, FRGB& fClr, BYTE bUkn)
{
int id = dwItemId - g_dwOffset; // calcula ID do item
// Se o nosso objectivo é um item e este número deverá utilizar o nosso brilho e não é um balrog prateado:
// Então voltamos a nossa cor
// else(senão) call (chama) o valor padrão de brilho do item
if( id >=0 && id < g_MaxItems*16 && Glows[id].bIsChanged && !bUkn)
fClr = Glows[id].fClr;
else
fnOldGlow(dwItemId, uk1, uk2, fClr, bUkn);
};
O Glow Cores dll lê de "glow.gld".
Format dos *.gld files:
Arquivo Inicio:
Código:
struct GLOW
{
DWORD signature; // = 0x574F4C47
BYTE bType; // representa max items, 0 - 32, else - 512
};
Final:
Código:
struct ITEM
{
USHORT usItemId; // item id
FRGB fClr; // glow color
};
{
USHORT usItemId; // item id
FRGB fClr; // glow color
};
Nós agora podemos forçar o main.exe para exibir as cores.
3. Glow Editor Tool.
Glow Editor permite que você:
- Edita brilho e cor dos itens desejados,
Uma vez que ele usa Microsoft Jet (. MDB) database você poderá adicionar ou remover itens, é simples como MS Access.
- Carga e Salvar *. gld arquivos para 32 e 512 maxitems e versões do main.exe
- Patch DLL para seu main.exe, para o caso da função e itens offset serem diferentes
- DLL 's memória compartilhada, utilizando File Mapping, faz o on the fly + Glow Editor permite alterar as cores diretamente em jogo.
4. DLL Patch.
chamada da função Glow e itens offset são diferentes em diferentes casos e versões de main, por isso, temos de alterar estes valores.
Eu vou dizer-lhe como encontrá-los usando ollydbg, mas com 1 condição o main.exe deve ser Unpacked
1. Abra o main.exe no ollydbg.
2. Botão Direrito-> Search for -> all referenced text strings.
3. Na janela que abriu Botão direito novamente-> search for text
4. Digite "sword"; desmarque "Case sensitive" e marque "Entire scope"
5. Procure "Sword" igual na figura usuando CTR+L(procurar proximo)
6. Qdo vc encontrar, 2 cliques ou aperte ENTER nele, E na janela principal você verá como na foto, o srtring abaixo "Sword" deve ser "Dados \ item" ou pode ser apenas" Número".
7. Acima da primeira chamada da função push command pushes in stack. Itens começar tipos de Swords (Tipo = 0),
Assim quando main.exe cargas modelos ou texturas de espadas que acrescenta ao item da id Offset o início da espada do tipo de seção, e se espada do tipo é o primeiro tipo de itens,
Este é o offset Offset de itens no array de objetos
8. Vamos procurar a função que chama o glow. Botão direito ->search for -> all constants
9. Aqui vamos procurar o ObjectID da Lightning Sword(ObjectId = Offset(Valor que vc encontrou) + ItemdId(0*512+14 = 14(0x0E))
for Offset = 0x285, ObjectId = 0x293
10. Na janela foi encontrado resultados
11. 2 cliques ou enter no primeiro resultado, and e vc será redirecionado para isso
12. Este é o glow proc, role um pouco para cima para encontrar o inicio disso
13. Selecione o primeiro comando, com botão direito -> Go to, e vc verá duas chamadas para a função glow
se vc não achou "CALL from X", Botão direito denovo -> Analyse-> Analyse code, e repita o passo 13
agora com o offset e as duas chamadas da função vc pode criar a dll.
Glow teste
glow padrão
Glow Editor:
http://rapidshare.com/files/102489540/GlowEditor.rar.html
Fixed DLL patcher
Glow.dll:
[ DOWNLOAD ]
Fixed DLL
Glow.dll vai na pasta juntop com o main.exe
Glow.gld vai dentro da pasta Data\
Não se esqueça de dar HOOK da DLL no main.exe
para criar glow.gld, apenas abra o editor File->Save ele criará o . gld pra você.
Não testei em versões max 32 items, mais funciona na teoria
Cretidos: SONEKA PLAY-HOUSE.
www.portalwr.rg3.net
0 comentários:
Postar um comentário