Tutorial Agregar nueva vocation protocolo 12x-12.72

Alex

Miembro del equipo
Webdesigner
LV
58
 
Awards
38
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.
 
Arriba