• TibiaFace

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

    .
    demo menumenu

    Afiliados



    Votar:

    [Weapons] Change Damage Type Wand (TFS 1.2)

    Compartir:

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

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    Hola usuario de tibiaface


    Bueno aqui les traigo un wand para las consolas tfs 1.2 mas conocido por change wand effect


    En data/actions/actions.xml agregar esta linea

    Código:

    <action itemid="ITEMID" script="weapon_damage.lua"/>

    itemid="ITEMID"  -----> en itemid agregar el id del item a ser el wand

    En data/actions/scripts crear un archivo llamado weapon_damage.lua y pegan esto dentro

    Código:

    -- Config

    -- Set wand how the wand deals damage
    DamageTypeWand = {
     values = false, -- If this is set to true then it will use the min and max values. If set to false the wand will use the formula
     
     -- Damage Values min/max
     wandMinDam = 20,
     wandMaxDam = 50,
     
     -- Damage Formula
     formula = {
     wandMinDam = function(level, maglevel) return -((level / 5) + (maglevel * 1.4) + 8) end,
     wandMaxDam = function(level, maglevel) return -((level / 5) + (maglevel * 2.2) + 14) end,
     }
    }

    -- Modal window config and storage id
    local config = {
     storage = 10009,
     titleMsg = "Change Weapon Damage Type",
     mainMsg = "Choose a damage type from the list",
    -- End Config

     -- Damage Table
     [1] = {element = "Holy"},
     [2] = {element = "Fire"},
     [3] = {element = "Death"},
     [4] = {element = "Poison"},
     [5] = {element = "Energy"},
     [6] = {element = "Earth"},
     [7] = {element = "Ice"},
    }

    function onUse(player, item, fromPosition, itemEx, toPosition, isHotkey)
        player:sendDamageWindow(config)
        return true
    end

    En data/weapons/scripts crear un archivo llamado weapon_damage.lua y aagregan esto dentro

    Código:

    local DamageTypes = {
        [1] = {DamageType = COMBAT_HOLYDAMAGE, DamageEffect = CONST_ANI_HOLY},
        [2] = {DamageType = COMBAT_FIREDAMAGE, DamageEffect = CONST_ANI_FIRE},
        [3] = {DamageType = COMBAT_DEATHDAMAGE, DamageEffect = CONST_ANI_DEATH},
        [4] = {DamageType = COMBAT_POISONDAMAGE, DamageEffect = CONST_ANI_POISON},
        [5] = {DamageType = COMBAT_ENERGYDAMAGE, DamageEffect = CONST_ANI_ENERGY},
        [6] = {DamageType = COMBAT_EARTHDAMAGE, DamageEffect = CONST_ANI_EARTH},
        [7] = {DamageType = COMBAT_ICEDAMAGE, DamageEffect = CONST_ANI_ICE}
    }

    function onGetFormulaValues(player, level, maglevel)
     if DamageTypeWand.values == true then
     min = -(DamageTypeWand.wandMinDam)
     max = -(DamageTypeWand.wandMaxDam)
     else
     min = DamageTypeWand.formula.wandMinDam(level, maglevel)
     max = DamageTypeWand.formula.wandMaxDam(level, maglevel)
     end
        return min, max
    end
     
    local combat = {}
    for k, dam_Table in pairs(DamageTypes) do
     combat[k] = Combat()
     combat[k]:setParameter(COMBAT_PARAM_BLOCKARMOR, 1)
     combat[k]:setParameter(COMBAT_PARAM_BLOCKSHIELD, 1)
     combat[k]:setParameter(COMBAT_PARAM_TYPE, dam_Table.DamageType)
     combat[k]:setParameter(COMBAT_PARAM_DISTANCEEFFECT, dam_Table.DamageEffect)
     
     -- _G Is used to manually define 'onGetFormulaValues' in this loop in doesnt seem to be able to find the function.
     _G['onGetFormulaValues' .. k] = onGetFormulaValues
     combat[k]:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues" .. k)
    end
     
    function onUseWeapon(player, var)
        local value = player:getStorageValue(10009)
        local combatUse = combat[value]
        if not combatUse then
            return true
        end
        return combatUse:execute(player, var)
    end

    En data/weapons/weapons.xml agrega esta linea

    Código:

    <wand id="ITEM ID HERE" level="300" mana="20" script="weapon_damage.lua">
                <vocation name="Sorcerer" />
    </wand>

    en wand id="ITEM ID HERE" -----> agregar el id del objeto que sera el wand

    en data/global.lua agregar esta linea

    Código:

    dofile('data/lib/weapon_damage.lua')

    En data/lib crear un archivo llamado weapon_damage.lua y pegar esto

    Código:

    function Player:sendDamageWindow(config)
     local function buttonCallback(button, choice)
     -- Modal window functionallity
     if button.text == "Confirm" then
     self:setStorageValue(10009, choice.id)
     end
     end
     
    -- Modal window design
     local window = ModalWindow {
     title = config.titleMsg, -- Title of the modal window
     message = config.mainMsg, -- The message to be displayed on the modal window
     }

     -- Add buttons to the window (Note: if you change the names of these you must change the functions in the modal window functionallity!)
     window:addButton("Confirm", buttonCallback)
     window:addButton("Cancel")

     -- Set what button is pressed when the player presses enter or escape
     window:setDefaultEnterButton("Confirm")
     window:setDefaultEscapeButton("Cancel")

     -- Add choices from the action script
     for i = 1, #config do
     local o = config[i].element
     window:addChoice(o)
        end

     -- Send the window to player
     window:sendToPlayer(self)
    end



    [Weapons] Change Damage Type Wand (TFS 1.2) YNU5B25
    http://www.tibiaface.com

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    POR SI NO TIENEN EL SISTEMA DE MODAL WINDOWS

    nos vamos a Data/Global.lua y agregamos esto

    Código:

    dofile('data/lib/modalwindow.lua')

    en data/lib/ creamos un archivo llamado modalwindow.lua y dentro pegamos esto

    Código:

    if not modalWindows then
        modalWindows = {
            modalWindowConstructor = ModalWindow,
            nextFreeId = 500,

            windows = {}
        }
    end

    local MT = {}
    MT.__index = MT

    function ModalWindow(...)
        local args = {...}
        if type(args[1]) == 'table' then
            local self = setmetatable(args[1], MT)
            local id = modalWindows.nextFreeId       
            self.id = id
            self.buttons = {}
            self.choices = {}
            self.players = {}
            self.created = false

            modalWindows.nextFreeId = id + 1
            table.insert(modalWindows.windows, self)
            return self
        end

        return modalWindows.modalWindowConstructor(...)
    end

    function MT:setDefaultCallback(callback)
        self.defaultCallback = callback
    end

    function MT:addButton(text, callback)
        local button = {text = tostring(text), callback = callback}
        table.insert(self.buttons, button)
        return button
    end

    function MT:addButtons(...)
        for _, text in ipairs({...}) do
            table.insert(self.buttons, {text = tostring(text)})
        end
    end

    function MT:addChoice(text)
        local choice = {text = tostring(text)}
        table.insert(self.choices, choice)
        return choice
    end

    function MT:addChoices(...)
        for _, text in ipairs({...}) do
            table.insert(self.choices, {text = tostring(text)})
        end
    end

    function MT:setDefaultEnterButton(text)
        self.defaultEnterButton = text
    end

    function MT:setDefaultEscapeButton(text)
        self.defaultEscapeButton = text
    end

    function MT:setTitle(title)
        self.title = tostring(title)
    end

    function MT:setMessage(message)
        self.message = tostring(message)
    end

    local buttonOrder = {
        [4] = {3, 4, 2, 1},
        [3] = {2, 3, 1},
        [2] = {1, 2},
        [1] = {1}
    }
    function MT:create()
        local modalWindow = modalWindows.modalWindowConstructor(self.id, self.title, self.message)
        local order = buttonOrder[math.min(#self.buttons, 4)]

        if order then
            for _, i in ipairs(order) do
                local button = self.buttons[i]
                modalWindow:addButton(i, button.text)
                button.id = i

                if button.text == self.defaultEnterButton then
                    modalWindow:setDefaultEnterButton(i)
                elseif button.text == self.defaultEscapeButton then
                    modalWindow:setDefaultEscapeButton(i)
                end
            end
        end

        for _, choice in ipairs(self.choices) do
            modalWindow:addChoice(_, choice.text)
            choice.id = _
        end

        self.modalWindow = modalWindow
    end

    function MT:sendToPlayer(player)
        if not self.modalWindow then
            self:create()
        end

        player:registerEvent('ModalWindowHelper')
        self.players[player:getId()] = true
        return self.modalWindow:sendToPlayer(player)
    end

    En data/creaturescripts/creaturescripts.xml agregamos esta linea

    Código:
    <event type="modalwindow" name="ModalWindowHelper" script="modalwindowhelper.lua" />

    en data/creaturescripts/scripts creamos un archivo llamado modalwindowhelper.lua y dentro pegamos esto

    Código:

    function onModalWindow(player, modalWindowId, buttonId, choiceId)
       local modalWindow
       for _, window in ipairs(modalWindows.windows) do
          if window.id == modalWindowId then
             modalWindow = window
             break
          end
       end

       if not modalWindow then
          return true
       end

       local playerId = player:getId()
       if not modalWindow.players[playerId] then
          return true
       end
       modalWindow.players[playerId] = nil

       local choice = modalWindow.choices[choiceId]

       for _, button in ipairs(modalWindow.buttons) do
          if button.id == buttonId then
             local callback = button.callback or modalWindow.defaultCallback
             if callback then
                callback(button, choice)
                break
             end
          end
       end

       return true
    end



    [Weapons] Change Damage Type Wand (TFS 1.2) YNU5B25
    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).