Pesquise™



0
Postado por: Ωﯕσήέкα™
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:
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]
};


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


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


Nós agora podemos forçar o main.exe para exibir as cores.

3. Glow Editor Tool.

Image 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.
Image
3. Na janela que abriu Botão direito novamente-> search for text

4. Digite "sword"; desmarque "Case sensitive" e marque "Entire scope"
Image
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".
Image
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

Image 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

Image12. 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