• TibiaFace

    Tibiaface | Una comunidad Open Tibia donde encontras : mapas, scripts, Otserver, npc y amigos etc ...

    .
    demo menumenu

    Afiliados



    Votar:

    [Codigo] [TFS 1.X] Cambiar Magic Wall a Old Wall [Old Wall, Magic Wall]

    Compartir:

    Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje (Página 1 de 1.)

    SoyFabi

    SoyFabi
    Miembro
    Miembro

    Saludos, me parecio curioso compartir esta funcion al foro, por si alguien le interesa añadir a su servidor.



    Simplemente al decir un TalkActions ("!oldwall on"), podras cambiar el Sprites de la Magic Wall, es decir si no te gusta la Wall Nueva (transparente), podras ver la Old que es la Azul Completa.

    Ejemplo la New Wall:
    [Codigo] [TFS 1.X] Cambiar Magic Wall a Old Wall [Old Wall, Magic Wall] Record12

    Ejemplo la Old Wall:
    [Codigo] [TFS 1.X] Cambiar Magic Wall a Old Wall [Old Wall, Magic Wall] Record13

    Para aquello tendremos que ingresar a las sources y añadir unos cuantos codigos, siganme el paso.

    Ingresaremos a los sources y entramos a:

    src/configmanager.cpp


    Buscaremos esta linea:
    Código:
    integer[DEPOT_PREMIUM_LIMIT] = getGlobalNumber(L, "depotPremiumLimit", 10000);

    Debajo añadiremos estas lineas:
    Código:
    integer[MAGIC_WALL_ID] = getGlobalNumber(L, "magicWallId", 2129);
    integer[OLD_MAGIC_WALL_ID] = getGlobalNumber(L, "oldMagicWallId", 2130);
    integer[MAGIC_WALL_STORAGE] = getGlobalNumber(L, "magicWallStorage", 90000);

    Una vez hecho, nos iremos a:

    src/configmanager.h


    Buscaremos esta linea:
    Código:
    DEPOT_PREMIUM_LIMIT,

    Debajo añadiremos estas lineas:
    Código:
    MAGIC_WALL_ID,
    OLD_MAGIC_WALL_ID,
    MAGIC_WALL_STORAGE,

    Ahora nos iremos a:

    src/luascript.cpp


    Buscaremos esta linea:
    Código:
    registerEnumIn("configKeys", ConfigManager::PLAYER_CONSOLE_LOGS)

    Debajo añadiremos estas lineas:
    Código:
    registerEnumIn("configKeys", ConfigManager::MAGIC_WALL_ID);
    registerEnumIn("configKeys", ConfigManager::MAGIC_WALL_STORAGE);
    registerEnumIn("configKeys", ConfigManager::OLD_MAGIC_WALL_ID);

    Una vez hecho lo facil, ahora viene lo interesante:

    Nos iremos a:

    src/networkmessage.cpp


    Buscaremos esta linea:
    Código:
    #include "networkmessage.h"

    Debajo añadiremos estas lineas:
    Código:
    #include "configmanager.h"
    #include "player.h"

    Ahora debajo de:
    Código:
    #include "creature.h"

    Debajo añadiremos estas linea:
    Código:
    extern ConfigManager g_config;

    Quedaria asi:
    [Codigo] [TFS 1.X] Cambiar Magic Wall a Old Wall [Old Wall, Magic Wall] Screen51

    Una vez hecho, vamos a remplazar unas cuantas lineas:

    Buscaremos esta linea:
    Código:
    void NetworkMessage::addItem(const Item* item)

    La remplazaremos por:
    Código:
    void NetworkMessage::addItem(const Item* item, const Player* player /* = nullptr */)

    Buscaremos esta linea:
    Código:
    add<uint16_t>(it.clientId);
    La remplazaremos por:
    Código:
    uint16_t clientId = it.clientId;
     if (clientId == g_config.getNumber(ConfigManager::MAGIC_WALL_ID) && player) {
     int32_t value;
     if (player->getStorageValue(g_config.getNumber(ConfigManager::MAGIC_WALL_STORAGE), value) && value == 1) {
     clientId = g_config.getNumber(ConfigManager::OLD_MAGIC_WALL_ID);
     }
     }

     add<uint16_t>(clientId);

    Quedaria asi:
    [Codigo] [TFS 1.X] Cambiar Magic Wall a Old Wall [Old Wall, Magic Wall] Screen52

    Ahora nos iremos a:

    src/networkmessage.h


    Buscaremos esta linea:
    Código:
    #include "const.h"

    Debajo añadiremos estas linea:
    Código:
    class Player;

    Si ya tienen, no hace falta añadirla.

    Buscaremos esta linea:
    Código:
    void addItem(const Item* item);

    La remplazaremos por:
    Código:
    void addItem(const Item* item, const Player* player = nullptr);

    Ahora nos iremos a:

    src/protocolgame.cpp


    Buscaremos esta linea:
    Código:
    msg.addItem(*it);

    La remplazaremos por:
    Código:
    msg.addItem(*it, player);

    Repetimos otra vez el proceso:

    Buscaremos esta linea:
    Código:
    msg.addItem(*it);

    La remplazaremos por:
    Código:
    msg.addItem(*it, player);

    Porque una estara abajo de: getBeginTopItem y el otro en getBeginDownItem.

    Una vez ingresado todos esos codigos solo nos falta compilar. Una vez que hayan compilado nos falta una cosa.

    Nos iremos a nuestros config.lua

    Tenemos que añadir en alguna parte del config.lua estas lineas:
    Código:
    -- Magic Wall Sprite --
    magicWallId = 2129 -- magic wall
    oldMagicWallId = 12124 -- magic wall old
    magicWallStorage = 90000 -- Storage Wall

    Para que entienden como funciona, el ID 2129 es la Magic Wall por Default, y no me refiero al ID dentro de Items.xml si no del Cliente ID, es decir tendremos que abrir el Object Builder y buscaremos el ID de la Magic Wall, como es en mi caso.

    [Codigo] [TFS 1.X] Cambiar Magic Wall a Old Wall [Old Wall, Magic Wall] Record15

    Y para la old Magic Wall en mi caso coloque la 12124 por que lo añadi a mi Cliente:

    [Codigo] [TFS 1.X] Cambiar Magic Wall a Old Wall [Old Wall, Magic Wall] Screen54

    Ya por terminar nos falta el TalkActions.

    Ingresamos a:

    data/scripts:


    Añadiremos este Revscripts (version 1.3 hacia adelante):
    Código:
    local talkAction = TalkAction("!oldwall")

    function talkAction.onSay(player, words, param, type)
     if param == "on" then
     player:setStorageValue(configManager.getNumber(configKeys.MAGIC_WALL_STORAGE), 1)
     player:sendTextMessage(MESSAGE_INFO_DESCR, "Old wall is now on.")
     return false
     elseif param == "off" then
     player:setStorageValue(configManager.getNumber(configKeys.MAGIC_WALL_STORAGE), -1)
     player:sendTextMessage(MESSAGE_INFO_DESCR, "Old wall is now off.")
     return false
     end

     player:sendCancelMessage("Usage: !oldwall on/off")
     return false
    end

    talkAction:separator(" ")
    talkAction:register()

    En otros casos si es una version 1.0, 1.2, tendremos que añadirlo a la carpeta TalkActions:
    Código:
    function onSay(player, words, param, type)
     if param == "on" then
     player:setStorageValue(configManager.getNumber(configKeys.MAGIC_WALL_STORAGE), 1)
     player:sendTextMessage(MESSAGE_INFO_DESCR, "Old wall is now on.")
     return false
     elseif param == "off" then
     player:setStorageValue(configManager.getNumber(configKeys.MAGIC_WALL_STORAGE), -1)
     player:sendTextMessage(MESSAGE_INFO_DESCR, "Old wall is now off.")
     return false
     end

     player:sendCancelMessage("Usage: !oldwall on/off")
     return false
    end

    Dentro de XML:
    Código:
    <talkaction words="!oldwall" separator=" " script="oldmagicwall.lua" />

    Bueno, esto seria todo, tambien lo puedes utilizar para otras cosas, si el player tiene el storage entonces podra ver el nuevo item (muy util para quests),

    Github:

    [Tienes que estar registrado y conectado para ver este vínculo]

    Creditos para:

    Sarah Wesker

    Que fue el creador de este codigo.

    2 participantes

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    excelente aporte (y) pero aqui hay otro igual por si alguien gusta


    [Tienes que estar registrado y conectado para ver este vínculo]



    [Codigo] [TFS 1.X] Cambiar Magic Wall a Old Wall [Old Wall, Magic Wall] YNU5B25
    2 participantes
    http://www.tibiaface.com

    Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje (Página 1 de 1.)

    Permisos de este foro:
    No puedes responder a temas en este foro.

     

    BienvenidosTibiaFace es una comunidad de Open Tibia. Para participar debes estar registrado (click para Regístrate).