menuWrapper

lunes, 4 de junio de 2012

[Guia] Cambiar Brillo de Items desde +7 a +13

Con esta guía, vamos a cambiar el resplandor de los items desde +7 a +13

Guia Original Créditos:
Híbrid
Fiuz
Para aquellos que hagan mirrors de descarga.

Traducción al Español + explicaciones ARIES

Guia:
1. Vamos a empezar desde la teoría.

Existe una función en el main.exe que carga el brillo de color para la mayoría de los Items +7 - +13, y algunas otras cosas. Por ejemplo, para las alas, dinorant, darkhorse y algunos otros Items esta función no se llama. (llamar una función en programación, sería como ejecutar una función en lenguaje normal)
El prototipo de esta función es en lenguaje de programación c + +:
Código:
void __cdecl Glow (dwItemId DWORD, DWORD uk1, DWORD UK2, cl & frgb, bUkn BYTE);
dwItemId - OBJECTID o índice, cada objeto está cargado en una gran variedad de objetos, y cada objeto tiene su único índice.
cl - es una estructura flotante RGB
Código:
struct frgb
(
Float r, g, b; / / rango de cada color [0, 1]
);
En esta variable la funcion de resplandor devuelve el resultado de color, hay 30 (2 azules iguales) brillará con colores por defecto.
uk1 & UK2 - en realidad son estos dos flotadores, y se utilizan para cargar el brillo y color, pero no vamos a utilizar los mismos.

bUkn - Si recordamos hay 2 tipo de balrogs, color plateado y rojo, esta variable se utiliza sólo para determinar su brillo y su proyecto de ley brillo =) plateado o rojo.
Si ya lo adivinaron, lo que haremos es un enganche a esta función, para que nos devuelva el color que queramos.
Nos queda ahora averiguar la verdadera ID, porque en función de que tenemos del objeto Id. Es sencillo, todos los items se encuentran desplazados en variedad de objetos de algún valor. Las ID son las mismas que en los archivos item.bmd y en item.txt (itemId = ItemType * MaxItemsInType + ItemIndex) (ID del item es igual al Tipo de item por el maximo de items en tipo más el Index del item)
Por lo tanto, si hemos OBJECTID y offset de items en serie de objetos, podemos simplemente calcular el elemento id:
ItemId = OBJECTID - offset;
Por ejemplo, vamos a buscar el item con ObjectID = 0x293 y 0x285 = offset, con 512 artículos en máx tipo:
ItemId = OBJECTID - offset = 0x293 - 0x285 = 0x0E (14)
ItemType = ItemId / MaxItems = 14 / 512 = 0 (división)
ItemIndex = ItemId = MaxItems% 14% 512 = 14 (resto de una división entera)
si le damos una mirada al archivo items.txt o item.bmd
Encontraremos que el Item con Type = 0 y el Índice = 14 es la Lighting Sword
Más adelante en esta guia explicaremos cómo encontrar el "offset"
Con estos conocimientos puede hacer su propio DLL y cambiar los colores de brillo ustedes, pero aqui hay una DLL que será compatible para las personas que no serán capaces de crear las suyas propias.

2. DLL

Aquí se describe el algoritmo de la dll.
Esto soporta la dll 32 y 512 MaxItems.
Así que la mejor manera para una dll, que serán compatibles para todos, es la asignación de memoria para todos los elementos --
Código:
struct PUNTO
(
BYTE bChng; / / Voy a decir más tarde
Float R, G, B;
);
sizeof (TEMA) = 3 * 4 + 1 = 13 bytes
maxtypes = 16
memoria = sizeof (ITEM) maxtypes * * maxitemindex = 208 * maxitemindex
si maxitemindex = 32, entonces la memoria = 208 * 32 = 6 656 bytes ~ 6,5 kb
si maxitemindex = 512, entonces la memoria = 208 * 512 = 106 496 bytes = 104 kb
Por maxitemindex = 512 una gran cantidad de memoria no serán utilizados en absoluto, pero este método nos permite hacer frente a su uso directo, por lo que es más rápida que si tuviéramos que encontrar el item que figura en la lista de items por su id, y también este método nos ayudará más adelante
Recuerdo ITEM:: bChng? vamos a marcar todos los items cambiados (refiriendonos al resplandor desde +7 a +13).
Si se cambia el item se vuelve al color, si no nosotros llamamos a la función por defecto resplandor.
Aquí está nuestra nueva Glow Proc
Código:
void Glow (dwItemId DWORD, DWORD uk1, DWORD UK2, frgb & fClr, BYTE bUkn)
(
Int id = dwItemId - g_dwOffset; / / calc tema id
/ / Si el objeto es un item y este item debería utilizar nuestro brillo y no se trata de un Balrog de plata: D
/ / Entonces volvemos nuestro color
/ / Else llamar a la función por defecto
if( id >=0 && id < g_MaxItems*16 && Glows[id].bIsChanged && !bUkn)
fClr = Glows[id].fClr;
else
fnOldGlow(dwItemId, uk1, uk2, fClr, bUkn); }
El Glow (resplandor) de colores la dll lo lee desde el archivo "glow.gld".
Formato de los archivos *.gld
Archivo de cabecera:
Código:
struct GLOW
(
DWORD signature; / / = 0x574F4C47
BYTE bType; / / max representa los puntos, 0 - 32, else - 512
);
Además, al final del archivo, sigue la informacion del color de los items.
Código:
struct ITEM
{
USHORT usItemId; // item id
FRGB fClr; // glow color (color del brillo o resplandor)
};
Es por eso que hemos enganchado la función de resplandor, ahora podemos exigirle al main.exe que utilize nuestros colores.

3. Glow Editor Tool.

Spoiler:


Con el Glow Editor podemos:
- Editar el color del brillo de los items que queramos,
ya que utiliza Microsoft Jet (. MDB) base de datos de acces, podemos agregar o eliminar items a gusto.
- Cargar y guardar archivos *.gld para 32 y 512 maxitems en versiones de main.exe
Parchar laDLL para su propio main.exe, porque las llamadas a funciones y offset de los items son diferentes
- DLL 's memoria compartida, utilizando File Mapping, (abordo directo) Glow Editor permite cambiar los colores directamente en el juego.
4. Parchar la DLL.
Las llamadas a funciones y offset de los items son diferentes en los distintos mains.exe, por lo que tenemos que cambiar estos valores.
Voy a decirles cómo encontrarlos utilizando ollydbg.

1. Abrimos el main.exe en ollydbg.

2. Botón derecho (RB)-> Search for -> all referenced text strings.

Spoiler:


3. En la ventana que nos apareció RB -> search for text (buscamos por texto)

Spoiler:

4. Escribimos "Sword"; Desmarcamos "Case sensitive" y marcamos "Entire scope"

Spoiler:

5. Buscamos "Sword" tal cual como la siguiente imagen usando CTR + L (búsqueda siguiente)

Spoiler:

6. Cuando lo encontramos, hacemos doble clic o pulsamos ENTER en él, y en la ventana principal lo deberiamos ver similar
a la imagen, el srtring por debajo de "Sword" debe ser "Data\Item" o puede ser simplemente "Item".

Spoiler:

7. Por encima de la primera llamada a la función encontramos el procedimiento OBJECTID. Los tipos de Items comienzan con las espadas (Swords) (Tipo = 0),
así que cuando el main.exe carga las texturas o modelos de espadas que se añade a la id el Offset de la espada a partir del tipo de sección, y si la espada tipo es el primer tipo de Items,
esta compensación es el offset de artículos en serie de objetos

Spoiler:

8. Vamos a encontrar el resplandor en las llamadas a funciones. RB -> search for -> all constants

Spoiler:

9. Vamos a buscar OBJECTID Lighting Sword (recuerde cómo calculamos el itemid u objeto id)
ObjectID = Offset (valor que has encontrado) + ItemdId (0 * 512 14 = 14 (0x0E))
para offset = 0x285, 0x293 = OBJECTID

Spoiler:

10. En la ventana que nos aparece buscar 2 Comandos Comparados

Spoiler:

11. Haga doble clic o ENTER en el primer comando, y se le redirige a la misma

Spoiler:

12. Esta es nuestra procedencia de brillo, nos desplazamos más arriba y buscamos el inicio de la misma

Spoiler:

13. Seleccionamos el primer comando, entonces RB -> Go to, y veremos 2 llamadas a la funcion de brillo

Spoiler:


Si no tenemos una llamada desde X lugar "CALL de X", entonces RB -> Analyse-> Analyse code, y volvemos a realizar el paso 13

Spoiler:

ahora con el offset y 2 llamadas a las funciones Podemos parchar la DLL con el Glow Editor desde la opción Patch DLL
Descarga el Glow Editor
rapidshare.com GlowEditor.rar.html
Descarga la Glow DLL
rapidshare.com glow_dll.rar.html

Glow.dll va a la carpeta del Cliente
Glow.gld va a la carpeta Data del Cliente
No olvidemos que hay que enganchar la DLL en main.exe (se pondrá una guía de como agregar el DLL en el main.exe)

para crear el archivo glow.gld, simplemente abrimos el Glow Editor luego vamos a File-> Save y se creará el archivo.

No hay comentarios:

Publicar un comentario