[TUTORIAL] Creación Razas Custom 3.3.5a TC PARTE 1/4 (CORE)

Iniciado por Nuzak, Abr 20, 2025, 02:29 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Todos los créditos a Tuerny por su publicación original en WoWCreador


Buenas a tod@s,vuelvo a poner el tutorial de implementación de razas custom para vuestros servers en versión Wotlk 3.3.5. Para ello cabe diferenciar lo que entendemos por custom en este tutorial:

- Por un lado tendremos la raza Goblin, la cual la llamamos custom, pero realmente ya está integrada en el core oficial y sólo tendremos que configurarla para poder desbloquearla.

- Por otro lado tendremos a la raza Worgen, la cual también llamaremos custom, pero esta no viene en el core y tendremos que crear líneas antes de compilar para poder implementarla.

Dicho esto procederemos a empezar el tutorial. Lo primero que vamos a hacer como os he dicho será modificar el core:

MODIFICACIÓN DEL CORE

Este es el primer punto que deberemos entender para empezar a hacer razas custom. Doy por hecho que sabéis descargar del git de TrinityCore y pasarlo por CMake, sino aquí en foro tenéis guías al respecto.

Modificación del archivo "SharedDefines.h"

- Abrimos el archivo "TrinityCore.sln" con nuestro Visual Studio

- Buscamos en el explorador de soluciones "shared" y clickamos encima de "SharedDefines.h" y veremos lo siguiente:




      C++:
   

// Race value is index in ChrRaces.dbc
// EnumUtils: DESCRIBE THIS
enum Races
{
    RACE_NONE               = 0,  // SKIP
    RACE_HUMAN              = 1,  // TITLE Human
    RACE_ORC                = 2,  // TITLE Orc
    RACE_DWARF              = 3,  // TITLE Dwarf
    RACE_NIGHTELF           = 4,  // TITLE Night Elf
    RACE_UNDEAD_PLAYER      = 5,  // TITLE Undead
    RACE_TAUREN             = 6,  // TITLE Tauren
    RACE_GNOME              = 7,  // TITLE Gnome
    RACE_TROLL              = 8,  // TITLE Troll
    //RACE_GOBLIN           = 9,
    RACE_BLOODELF           = 10, // TITLE Blood Elf
    RACE_DRAENEI            = 11, // TITLE Draenei
    //RACE_FEL_ORC            = 12,
    //RACE_NAGA               = 13,
    //RACE_BROKEN             = 14,
    //RACE_SKELETON           = 15,
    //RACE_VRYKUL             = 16,
    //RACE_TUSKARR            = 17,
    //RACE_FOREST_TROLL       = 18,
    //RACE_TAUNKA             = 19,
    //RACE_NORTHREND_SKELETON = 20,
    //RACE_ICE_TROLL          = 21,
};



Esa es la sección donde declararemos los IDs de las razas que vayamos a usar. Si os fijáis tenemos a los Goblin, pero no tenemos a los Worgen. Para abrir las razas que queremos haremos lo siguiente:




      C++:
   

// Race value is index in ChrRaces.dbc
// EnumUtils: DESCRIBE THIS
enum Races
{
    RACE_NONE               = 0,  // SKIP
    RACE_HUMAN              = 1,  // TITLE Human
    RACE_ORC                = 2,  // TITLE Orc
    RACE_DWARF              = 3,  // TITLE Dwarf
    RACE_NIGHTELF           = 4,  // TITLE Night Elf
    RACE_UNDEAD_PLAYER      = 5,  // TITLE Undead
    RACE_TAUREN             = 6,  // TITLE Tauren
    RACE_GNOME              = 7,  // TITLE Gnome
    RACE_TROLL              = 8,  // TITLE Troll
    //RACE_GOBLINOLD          = 9,
    RACE_BLOODELF           = 10, // TITLE Blood Elf
    RACE_DRAENEI            = 11, // TITLE Draenei
    //RACE_FEL_ORC            = 12,
    //RACE_NAGA               = 13,
    //RACE_BROKEN             = 14,
    //RACE_SKELETON           = 15,
    //RACE_VRYKUL             = 16,
    //RACE_TUSKARR            = 17,
    //RACE_FOREST_TROLL       = 18,
    //RACE_TAUNKA             = 19,
    //RACE_NORTHREND_SKELETON = 20,
    //RACE_ICE_TROLL          = 21,
    RACE_GOBLIN             = 23,
    RACE_WORGEN             = 24
};



Fijaos que los Goblins que teníamos ya declarados pero no accesibles o playables, los hemos renombrado para poder declarar los nuevos Goblin en la Id 23.
A mi personalmente no me gusta dejar razas abiertas declaradas en IDs altas, ya que para cosas como asignarles idiomas, raciales y demás cosas que veremos más adelante no es muy aconsejable porque puede dar fallos. Por eso yo lo que hago es que sustituyo el id de una raza por otra dejándolo de la siguiente manera:



      C++:
   

// Race value is index in ChrRaces.dbc
// EnumUtils: DESCRIBE THIS
enum Races
{
    RACE_NONE               = 0,  // SKIP
    RACE_HUMAN              = 1,  // TITLE Human
    RACE_ORC                = 2,  // TITLE Orc
    RACE_DWARF              = 3,  // TITLE Dwarf
    RACE_NIGHTELF           = 4,  // TITLE Night Elf
    RACE_UNDEAD_PLAYER      = 5,  // TITLE Undead
    RACE_TAUREN             = 6,  // TITLE Tauren
    RACE_GNOME              = 7,  // TITLE Gnome
    RACE_TROLL              = 8,  // TITLE Troll
    //RACE_GOBLINOLD          = 23,
    RACE_BLOODELF           = 10, // TITLE Blood Elf
    RACE_DRAENEI            = 11, // TITLE Draenei
    //RACE_FEL_ORC            = 24,
    //RACE_NAGA               = 13,
    //RACE_BROKEN             = 14,
    //RACE_SKELETON           = 15,
    //RACE_VRYKUL             = 16,
    //RACE_TUSKARR            = 17,
    //RACE_FOREST_TROLL       = 18,
    //RACE_TAUNKA             = 19,
    //RACE_NORTHREND_SKELETON = 20,
    //RACE_ICE_TROLL          = 21,
    RACE_GOBLIN             = 9,
    RACE_WORGEN             = 12
};



He sustituido GOBLINOLD por GOBLIN y, FEL_ORC por WORGEN.


- Ahora vamos a declarar el valor máximo de razas. Siempre hemos de asignarle el valor de la ID de la raza abierta más alto y sumarle 1:

Esto es lo que tenemos:



      C++:
   

// max+1 for player race
#define MAX_RACES         12



Y esto es lo que pondremos teniendo en cuenta lo dicho anteriormente. La ID de la raza abierta mas alta (nosotros tenemos al Worgen = 12) y le sumamos 1 (Worgen+1=13):




      C++:
   

// max+1 for player race
#define MAX_RACES         13



- Ahora vamos a definir qué razas serán jugables o playables. Para ello veremos lo siguiente:



      C++:
   

#define RACEMASK_ALL_PLAYABLE \
    ((1<<(RACE_HUMAN-1)) | (1<<(RACE_ORC-1)) | (1<<(RACE_DWARF-1)) |\
     (1<<(RACE_NIGHTELF-1)) | (1<<(RACE_UNDEAD_PLAYER-1)) | (1<<(RACE_TAUREN-1)) |\
     (1<<(RACE_GNOME-1)) | (1<<(RACE_TROLL-1)) | (1<<(RACE_BLOODELF-1))|\
     (1<<(RACE_DRAENEI-1)))



Para definirlas haremos lo siguiente tomando la siguiente regla: Cada 3 razas marcamos el final de la línea con "\", sino os dará error al compilar. Así que lo ponemos de la siguiente forma:




      C++:
   

#define RACEMASK_ALL_PLAYABLE \
    ((1<<(RACE_HUMAN-1)) | (1<<(RACE_ORC-1)) | (1<<(RACE_DWARF-1)) |\
     (1<<(RACE_NIGHTELF-1)) | (1<<(RACE_UNDEAD_PLAYER-1)) | (1<<(RACE_TAUREN-1)) |\
     (1<<(RACE_GNOME-1)) | (1<<(RACE_TROLL-1)) | (1<<(RACE_WORGEN-1)) |\
     (1<<(RACE_BLOODELF-1)) | (1<<(RACE_DRAENEI-1)) | (1<<(RACE_GOBLIN-1)))



- Lo siguiente es definir su bando, si es horda o alianza. Para ello buscamos esto:



      C++:
   

#define RACEMASK_ALLIANCE \
    ((1<<(RACE_HUMAN-1)) | (1<<(RACE_DWARF-1)) | (1<<(RACE_NIGHTELF-1)) | \
     (1<<(RACE_GNOME-1)) | (1<<(RACE_DRAENEI-1)))



Y declaramos la raza Worgen para la alianza siguiendo la regla del paso anterior (la que no declaréis ahí será automáticamente asignada a la horda):




      C++:
   

Codigo:
#define RACEMASK_ALLIANCE \
    ((1<<(RACE_HUMAN-1)) | (1<<(RACE_DWARF-1)) | (1<<(RACE_NIGHTELF-1)) | \
     (1<<(RACE_GNOME-1)) | (1<<(RACE_WORGEN-1)) | (1<<(RACE_DRAENEI-1)))



- Con esto ya habremos acabado de configurar nuestro precompilado. Ahora sólo nos falta marcar la solución como Release y compilar.

Seguiremos con la parte 2, en ella veremos los .dbcs que deberemos de configurar.

You are not allowed to view links. Register or Login

You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
  •