Bienvenido a Open Games Community

Únete ahora para acceder a todas nuestras funciones. Una vez que te registres e inicies sesión, podrás crear temas, responder a hilos existentes, valorar la reputación de otros miembros y muchísimo más. Además, es rápido y totalmente gratuito; ¿a qué esperas?

Tutorial Agregar nueva vocation protocolo 12x-12.72

Alex

Administrador
Dev
Registrado
1 Sep 2021
Mensajes
2.362
Puntuación de reacción
28.641
Puntos
707
Hola a todos,

Hoy veremos como agregar una nueva vocation a nuestro servidor, este último necesitara ser compilado para poder funcionar.

Parte Servidor:

En primer lugar, buscaremos el archivo enums.h ( que sera el único archivo source que tocar y podremos compilar ) =
Código:
enum Vocation_t : uint16_t {
    VOCATION_NONE = 0,
    VOCATION_SORCERER = 1,
    VOCATION_DRUID = 2,
    VOCATION_PALADIN = 3,
    VOCATION_KNIGHT = 4,
    VOCATION_MASTER_SORCERER = 5,
    VOCATION_ELDER_DRUID = 6,
    VOCATION_ROYAL_PALADIN = 7,
    VOCATION_ELITE_KNIGHT = 8,
    VOCATION_LAST = VOCATION_ELITE_KNIGHT
};
Aquí, encontraremos esta parte, debajo de VOCATION_ELITE_KNIGHT, escribiremos nuestra vocación ejemplo: VOCATION_CRUSADER
Y al ser la última entonces la agregaremos a la VOCATION_LAST.
Quedará de esta forma:

Código:
enum Vocation_t : uint16_t {
    VOCATION_NONE = 0,
    VOCATION_SORCERER = 1,
    VOCATION_DRUID = 2,
    VOCATION_PALADIN = 3,
    VOCATION_KNIGHT = 4,
    VOCATION_MASTER_SORCERER = 5,
    VOCATION_ELDER_DRUID = 6,
    VOCATION_ROYAL_PALADIN = 7,
    VOCATION_ELITE_KNIGHT = 8,
    VOCATION_CRUSADER = 9,
    VOCATION_LAST = VOCATION_CRUSADER
};

En siguiente nos iremos al archivo data/lib/tables, vocation.lua:
Código:
VOCATION = {
    ID = {
        NONE = 0,
        SORCERER = 1,
        DRUID = 2,
        PALADIN = 3,
        KNIGHT = 4,
        MASTER_SORCERER = 5,
        ELDER_DRUID = 6,
        ROYAL_PALADIN = 7,
        ELITE_KNIGHT = 8,
    },
    CLIENT_ID = {
        NONE = 0,
        KNIGHT = 1,
        PALADIN = 2,
        SORCERER = 3,
        DRUID = 4,
        ELITE_KNIGHT = 11,
        ROYAL_PALADIN = 12,
        MASTER_SORCERER = 13,
        ELDER_DRUID = 14,
    },
    BASE_ID = {
        NONE = 0,
        SORCERER = 1,
        DRUID = 2,
        PALADIN = 3,
        KNIGHT = 4,
    }
}

En el cual agregaremos el crusader, por mi parte en ClientID, le puse 0, por el cual mostrara al cliente Tibia Vocation: None ( pero sera bien un crusader ) esto aparecera únicamente al momento de logearse y mostrar los characters, una vez en el juego muestra bien que somos un crusader.

Código:
VOCATION = {
    ID = {
        NONE = 0,
        SORCERER = 1,
        DRUID = 2,
        PALADIN = 3,
        KNIGHT = 4,
        MASTER_SORCERER = 5,
        ELDER_DRUID = 6,
        ROYAL_PALADIN = 7,
        ELITE_KNIGHT = 8,
        CRUSADER = 9
    },
    CLIENT_ID = {
        NONE = 0,
        KNIGHT = 1,
        PALADIN = 2,
        SORCERER = 3,
        DRUID = 4,
        ELITE_KNIGHT = 11,
        ROYAL_PALADIN = 12,
        MASTER_SORCERER = 13,
        ELDER_DRUID = 14,
        CRUSADER = 0
    },
    BASE_ID = {
        NONE = 0,
        SORCERER = 1,
        DRUID = 2,
        PALADIN = 3,
        KNIGHT = 4,
        CRUSADER = 5
    }
}

Y finalmente nos iremos al archivo data/lib/core y buscaremos:
Código:
function Player.isKnight(self)
    return table.contains({VOCATION.ID.KNIGHT, VOCATION.ID.ELITE_KNIGHT}, self:getVocation():getId())
end

Justo debajo agregaremos nuestra vocation nueva:
Código:
function Player.isCrusader(self)
    return table.contains({VOCATION.ID.CRUSADER, VOCATION.ID.CRUSADER}, self:getVocation():getId())
end

Nos iremos al archivo data/XML/Vocations, y abriremos el vocations.xml
Vamos a copiar el último apartado que corresponde al Elite Knight, y cambiaremos el vocation id="8" para 9, y el clientid="11" para 0.
No podréis crear uno nuevo en clientID debido a que el cliente TIBIA no disponemos de sources, por el cual su vocation no existe y si agregan otro número no podrán entrar.
Editaremos a gusto la capacidad, la vida, y los skills.
Código:
<vocation id="8" clientid="11" baseid="4" name="Elite Knight" description="an elite knight" magicshield="0" gaincap="25" gainhp="15" gainmana="5" gainhpticks="4000" gainhpamount="1" gainmanaticks="6000" gainmanaamount="2" manamultiplier="3.0" attackspeed="2000" basespeed="220" soulmax="200" gainsoulticks="15000" fromvoc="4">
        <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" />
        <skill id="0" multiplier="1.1" />
        <skill id="1" multiplier="1.1" />
        <skill id="2" multiplier="1.1" />
        <skill id="3" multiplier="1.1" />
        <skill id="4" multiplier="1.4" />
        <skill id="5" multiplier="1.1" />
        <skill id="6" multiplier="1.1" />
    </vocation>


Para quiénes gusten de agregar items para sus vocations, entonces nos iremos para data/scripts/movements/unscripted_equipements.lua
Y en data/scripts/weapons/unscripted_weapons.lua.
Por el cual bastara agregar la nueva classe "crusader" en el caso del ejemplo para que solo ellos puedan equipar un item.

¿Como es el código para llamar a la vocation nueva Crusader ?
De esa forma:
VOCATION.ID.CRUSADER

Podréis basaros en un script como el The Oracle, para crear un script y agregar su nueva vocation por el cual podrán elegir la vocation antes de ir para una Town.


Parte Web Con ZnoteAAC:

Por la parte web, nos iremos en www o htdocs / config.php encontraremos:
Código:
// Vocations IDS
    $config['vocations'] = array(
        0 => array(
            'name' => 'No vocation',
            'fromVoc' => false
        ),
        1 => array(
            'name' => 'Sorcerer',
            'fromVoc' => false
        ),
        2 => array(
            'name' => 'Druid',
            'fromVoc' => false
        ),
        3 => array(
            'name' => 'Paladin',
            'fromVoc' => false
        ),
        4 => array(
            'name' => 'Knight',
            'fromVoc' => false
        ),
        5 => array(
            'name' => 'Master Sorcerer',
            'fromVoc' => 1
        ),
        6 => array(
            'name' => 'Elder Druid',
            'fromVoc' => 2
        ),
        7 => array(
            'name' => 'Royal Paladin',
            'fromVoc' => 3
        ),
        8 => array(
            'name' => 'Elite Knight',
            'fromVoc' => 4
        ),

Agregaremos al final:
Código:
 9 => array(

            'name' => 'Crusader',

            'fromVoc' => false

        ),
El false, significa que es una vocation de Base, por el cual, si van a crear un "Master_Crusader" entonces el master_crusader tendra "fromVoc => "9" que será la ID del crusader.

Despues justo debajo veremos:
Código:
$config['vocations_gain'] = array(
        0 => array(
            'hp' => 5,
            'mp' => 5,
            'cap' => 10
        ),
        1 => array(
            'hp' => 5,
            'mp' => 30,
            'cap' => 10
        ),
        2 => array(
            'hp' => 5,
            'mp' => 30,
            'cap' => 10
        ),
        3 => array(
            'hp' => 10,
            'mp' => 15,
            'cap' => 20
        ),
        4 => array(
            'hp' => 15,
            'mp' => 5,
            'cap' => 25
        ),
        5 => array(
            'hp' => 5,
            'mp' => 30,
            'cap' => 10
        ),
        6 => array(
            'hp' => 5,
            'mp' => 30,
            'cap' => 10
        ),
        7 => array(
            'hp' => 10,
            'mp' => 15,
            'cap' => 20
        ),
        8 => array(
            'hp' => 15,
            'mp' => 5,
            'cap' => 25
        ),

En el cual al final agregaremos:
Capacity, mp y Hp de su gusto.
Código:
 9 => array(

            'hp' => 15,

            'mp' => 5,

            'cap' => 25

        ),


Si deseamos agregar nuestra nueva vocation en la pagina web, entonces reemplazaremos en la línea 306 del notepad del config.php:
Código:
$config['available_vocations'] = array(0);
por:
Código:
$config['available_vocations'] = array(9);
9 = Crusader, pueden agregar más, (1,2,3,4,9), que serian entonces, Sorc, Druid, Pally, Knight y Crusader.

Espero que les sirva, quizás el sistema es el mismo para versiones más avanzadas, pero de momento no estoy dentro los 12.85+.
Pero seguro es bastante similar.
 

arawnz

Miembro
Registrado
25 Nov 2024
Mensajes
1
Puntuación de reacción
0
Puntos
38
Ubicación
brazil
Buenas tardes, ¿acaso sabes decirme dónde registro los movimientos? Ya logré agregar las nuevas clases, pero quería vincular algunos ítems a las nuevas vocaciones. Por ejemplo: al bárbaro me gustaría que solo usara armas de dos manos, pero cuando entro en el movements.xml e intento registrar un equipo, el servidor acusa que el movimiento está duplicado. Desde ya te agradezco
 

Alex

Administrador
Dev
Registrado
1 Sep 2021
Mensajes
2.362
Puntuación de reacción
28.641
Puntos
707
Buenas tardes, ¿acaso sabes decirme dónde registro los movimientos? Ya logré agregar las nuevas clases, pero quería vincular algunos ítems a las nuevas vocaciones. Por ejemplo: al bárbaro me gustaría que solo usara armas de dos manos, pero cuando entro en el movements.xml e intento registrar un equipo, el servidor acusa que el movimiento está duplicado. Desde ya te agradezco

Muy tarde, no vi este mensaje.
El item que agregas en movements.xml, no puede ser duplicado es decir, que solamente puedes tener 1 identica id en movements.xml en el caso que varias vocations lo usen entonces agrega las vocations a ese mismo item.
 

culito

Miembro
Registrado
1 Ago 2025
Mensajes
4
Puntuación de reacción
0
Puntos
38
buenas, cuando agrego la nueva vocación y entro a custom oufit para cambiar el addon me saca del juego solo con esa vocación nueva y ya seguí todos los pasos ayuda
 

Alex

Administrador
Dev
Registrado
1 Sep 2021
Mensajes
2.362
Puntuación de reacción
28.641
Puntos
707
buenas, cuando agrego la nueva vocación y entro a custom oufit para cambiar el addon me saca del juego solo con esa vocación nueva y ya seguí todos los pasos ayuda
Hola,
No sera algo que ver con la vocation pienso mas un problema con el outfit en si mismo, mira en el editor si tiene todos las imagenes, sea en addon, en movimiento, en mount, etc.
Si usas un tibia oficial ( cliente ) puede dar este problema, unicamente en otclient no te saca.
 
shape1
shape2
shape3
shape4
shape5
shape6
Arriba