Foro de elhacker.net

Media => Juegos y Consolas => Mensaje iniciado por: Ariath en 10 Julio 2008, 17:23 pm



Título: Proyecto - "Descifrar" los campos de las bases de datos del WoW
Publicado por: Ariath en 10 Julio 2008, 17:23 pm
Hola a todos :)

Quería daros a conocer un proyecto que estoy llevando a cabo en solitario, el cual es descubrir que son y que hacen los distintos campos de las bases de datos en MySQL del World of Warcraft.

En principio, lo estaba haciendo solo para crear un editor de personajes cómodo en PHP, en el cual te podrías conectar a la base de datos y, mediante listas desplegables y otras historias, ver qué tiene puesto el personaje en cuestión que estés mirando y poder cambiarle partes del equipo e incluso objetos del inventario seleccionando de las listas directamente los nombres de los objetos (nada de andar mirando IDs).

La forma en que estoy haciendo esto es, pues la única que hay (pienso yo), hacer pequeños cambios en la base de datos, y ver qué partes del juego resultan afectadas, y cómo.

De momento, como me interesa hacer el editor de personajes, estoy solamente con la tabla de "playeritems", la cual, almacena TODOS los objetos que poseen los personajes, tanto lo que tienen equipado como lo que tienen en el inventario.

Me gustaría, que si alguno de vosotros sabe del siginificado de los campos de alguna o varias de las tablas del juego, que me lo pusiese aquí.

Quien sabe... quizá podría dar lugar a un editor sencillo pero potente del juego completo  ;)

Aquí os dejo, de momento lo que llevo sacado de la tabla "playeritems", para que veais como lo estoy haciendo. Estoy usando el emulador ArcEmu y la base de datos WhyDB, que, de momento salvo alguna que otra "cosilla", me está llendo bien.

--------------------------------------------------------------------------------------------

Tabla "Playeritems"
------------------------------------
En esta tabla se encuentran los objetos que actualmente posee el jugador. Posee las siguientes columnas:

ownerguid, guid, entry, wrapped_item_id, wrapped_creator, creator, count, charges, flags, randomprop, randomsuffix, itemtext, durability, containerslot, slot, enchantments

A continuación, se indica a qué hace referencia cada columna:
---------------------------------------------------------------------------------------------
ownerguid: Ésta columna, indica cual es el personaje que posee el objeto. Está relacionada con la columna "guid" de la tabla "characters", es decir, si queremos saber a qué personaje pertenece un objeto concreto, solo tenemos que mirar esta columna, y buscar en la tabla "characters" un personaje cuyo "guid" coincida con el "ownerguid" del objeto del cual queremos obtener su actual dueño. (ownerguid vendría a significar algo como "guid del propietario" (propietario = owner)).

guid: Así como la columna "guid" en la tabla "characters" identifica cada entrada de dicha tabla, esta columna identifica cada entrada de la tabla "playeritems", por lo cual es clave primaria (el "índice de la tabla" por así decirlo).

entry: Éste campo está relacionado con el campo del mismo nombre en la tabla "items" localizada en la base de datos del mundo ("ascent-world", "world", "mundo" o como quiera que la hayamos denominado en nuestra base de datos MySQL). Entry, es la clave primaria de la tabla "items", por lo que identifica cada item (objeto) del mundo. Para "darle" un objeto determinado a un personaje, una de las cosas que tenemos que hacer es escribir en esta columna el valor apropiado del "entry" de la tabla "items" del objeto que queramos darle.

wrapped_item_id: <PENDIENTE DE DESCUBRIR>

wrapped_creator: <PENDIENTE DE DESCUBRIR>

creator: Este valor, indica el personaje que ha creado el objeto (en el caso de los objetos manufacuturados por un personaje). Se corresponde con el GUID del personaje que lo creó.

count: Éste valor indica el número de objetos que tenemos apilados de este objeto. Si esta entrada corresponde, por ejemplo, a una pila de 200 flechas, en este campo figurará 200.

charges: <PENDIENTE DE DESCUBRIR>

flags: <PENDIENTE DE DESCUBRIR: Pista :: Con las pruebas realizadas, dependiendo del valor que tome este campo, el objeto gana ciertas propiedades: 0 = Objeto normal y corriente; 1 = Objeto ligado al alma del personaje>

randomprop: <PENDIENTE DE DESCUBRIR>

ramdomsuffix: En los objetos que en el juego aparecen con un encantamiento al azar (tipo "...del mono", "... del aguila", etc...), determina el tipo de encantamiento asignado. Para ver la lista de encantamientos y los valores que les corresponden, ver archivo "Encantamientos aleatorios". (NOTA: "Encantamientos aleatorios", es un documento de Excel que editaré cuando proceda, con las listas de encantamientos y el valor correspondiente que hay que poner aquí. He probado a ponerle un valor de estos a un objeto normal y corriente, y, aunque adquiría el encantamiento (ponía "...de protección de Escarcha", las estadísticas que se ganan en este caso (aguante y resistencia a la escarcha) aparecían vacías, es decir, +0, con lo que puede que dependa también del objeto en sí)

itemtext: <PENDIENTE DE DESCUBRIR>

durability: Éste valor representa la durabilidad del objeto. Cuando vemos que una pieza de armadura tiene por ejemplo una durabilidad de 14/14, el primer número, es el que figura aquí. Si lo disminuimos, observaremos como la durabilidad del objeto en el juego disminuye, si lo reducimos a 0, el objeto estará "roto". Este valor, nunca puede ser mayor que la durabilidad máxima del objeto, es decir, si el objeto de antes, probamos a ponerle de durabilidad 30 (recordemos que el objeto tenía de durabilidad 14/14 (es decir, 14 era la máxima)), en el juego, el objeto tendrá la durabilidad a 14/14, es decir, el primer valor no puede nunca superar al primero, y, en caso de que lo editemos para que lo supere, el juego representará el objeto con su durabilidad máxima.

containerslot: <PENDIENTE DE DESCUBRIR: Pista :: Podría corresponder a cada una de las 5 bolsas que se pueden llevar>

slot: <PENDIENTE DE DESCUBRIR: Pista :: PARECE corresponder a cada una de las casillas del interior de una bolsa, aunque falta por determinar si los valores son siempre los mismos cambiando el "containerslot" o si varían>

enchantments: <PENDIENTE DE DESCUBRIR>
------------------------------------------------------------------------------------

Como veis, hay muchas cosas todavía por descubrir que son y como van, pero tiempo al tiempo :)

Salu2