• TibiaFace

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

    .
    demo menumenu

    Afiliados



    Votar:

    [Talkactions] Duda sobre como cambiar daño de varita con talkaction (TFS 0.4)

    Compartir:

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

    ralke

    ralke
    Miembro
    Miembro
    Creditos script original: sTrutz
    Solucion (Sarah Wesker): [Tienes que estar registrado y conectado para ver este vínculo]

    [Tienes que estar registrado y conectado para ver este vínculo] escribió:Hola, hice un intento de convertir el siguiente script de TFS 1.2 a TFS 0.4 sin embargo, es el primer script que intento hacer y necesito de su ayuda para poder lograrlo xD:

    Script original 1.2 (debe usarse con una lib de modal window que esta aqui [Tienes que estar registrado y conectado para ver este vínculo] y un script de weapons.xml aqui [Tienes que estar registrado y conectado para ver este vínculo]
    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) +  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"},
    }

    Mi intento: Para el script de 0.4 me guie con el talkaction de !rank, fue lo primero que se me ocurrió. La idea es convertirlo en un talkaction que permita cambiar el elemento de tu wand asociandolo a un item especifico.  Si alguien me pudiera dar más pistas sobre cómo hacerlo, lo agradecería!!

    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}

    local displayoutput = {"Fire","Holy","Death","Poison","Energy","Earth","Ice"}
       storage = 10009,
       doPlayerSendChannelMessage = "Change Weapon Damage Type",
       mainMsg = "Choose a damage type from the list",


    function onSay(cid, words, param)
        number = 1
        param = string.lower(param)
        skilllist = ""
        command = TRUE
        if param == "fire" then        
            display = 1
        elseif param == "holy" then
            display = 2
        elseif param == "death" then
            id = 0
            display = 3
        elseif param == "poison" then
            id = 1
            display = 4
        elseif param == "energy" then
            id = 2
            display = 5
        elseif param == "earth" then
            id = 3
            display = 6
        elseif param == "ice" then
            id = 4
            display = 7
        else
            error = 'You did not choose a correct element'

            doShowTextDialog(cid, 5958, error)
            command = FALSE
     
     end
        if command ~= FALSE then
            if display == 1 then

    local combat = createCombatObject()
    setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
    setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA)
    setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
    setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.0, -60, -1.0, -70)
     
    function onUseWeapon(cid, var)
    return doCombat(cid, combat, var)
    end
          
       elseif display == 2 then
      
    local combat = createCombatObject()
    setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
    setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
    setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH)
    setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.0, -60, -1.0, -70)

    function onUseWeapon(cid, var)
    return doCombat(cid, combat, var)
    end

    La idea es por ejemplo, si dices !wand fire cambias el daño de la wand (de una id especifica) a fuego, o !wand energy, a energia... Si puede usarse popUpWindow para mostrar las opciones como en el comando de autoloot seria genial.

    Saludos
    Smile
    Captura del Error escribió:Imagen del error: [Talkactions] Duda sobre como cambiar daño de varita con talkaction (TFS 0.4) Empty
    La config. radica en: Actions



    Última edición por ralke el Dom Jun 02, 2019 10:42 pm, editado 8 veces

    http://greedisland.ml/index.php

    [Adm] SevuOT

    [Adm] SevuOT
    Miembro
    Miembro
    Creo que el titulo no es muy espesifico para lo que estas publicando amigo, procura crear los temas correctamente, ya que de lo contrario esto puede ir a la basura.

    Estas mostrando como implementar un sistema para TFS 1.2 y el titulo menciona que es un sistema para TFS 0.4, mas abajo estas dejando algunos scripts incompletos que requieren modificaciones, por que te digo esto? - facil, por que aqui las personas no saben mucho de programacion y cuando buscan algo, lo que quieren es encontrar algo util y no algo en lo cual tengan que trabajar para poder hacerlo funcionar!

    esto es una critica constructiva, tambien veo que no das creditos a las personas que han creado tal sistema y eso esta mal visto en la comunidad, creo que en cualquier comunidad.

    procura no hacerlo nuevamente, de igual manera te agradecemos que quieras apoyar con nuevos temas al foro.



    Si necesitas hospedaje para tu servidor usa este enlace y mira los buenos planes de Windows y Linux:
    Si tu cuenta de PayPal no esta verificada no importara, igual aceptan pagos con cuentas no verificadas.


    [Talkactions] Duda sobre como cambiar daño de varita con talkaction (TFS 0.4) TRJEB8aSRYK5IulEU6ilJw

    ralke

    ralke
    Miembro
    Miembro
    Gracias sevu, lo que busco es una explicacion de como lograr cambiar el script que publique de TFS 1.2 y convetirlo para 0.4, ya que el script de TFS 1.2 usa modal windows y eso no funcionaria en 0.4. Por eso, hice esas lineas de script incompletas para ver si voy por buen camino intentando scriptear el mismo sistema a traves de talkactions compatibles en 0.4, y entender que lineas pueden servir para crear el sistema, cuales debo descartar, y porque, si es posible, a fin de aprender un poquito de script

    Los creditos del script original son para sTrutz.
    Saludos!!

    Edito: Encontré solucion al script, creditos a Sarah Wesker por convertirlo en talkaction.
    Para implementar el sistema:

    Primero ir a talkactions.xml y lo siguiente (en words escribes las palabras que accionan el talkaction):

    Código:
    <talkaction words="!changeElement" event="script" value="changeElementWand.lua"/>

    Luego ir a talkactions/scripts/ y crear el archivo changeElementWand.lua con lo siguiente:

    Código:
    local elementWandStorageID = 666778
    local elementWandTypes = {
        ["physical"] = { COMBAT_PHYSICALDAMAGE, CONST_ME_HITAREA },
        ["energy"] = { COMBAT_ENERGYDAMAGE, CONST_ME_ENERGYAREA },
        ["earth"] = { COMBAT_EARTHDAMAGE, CONST_ME_POISONAREA },
        ["fire"] = { COMBAT_FIREDAMAGE, CONST_ME_FIREAREA },
        ["drown"] = { COMBAT_DROWNDAMAGE, CONST_ME_WATERSPLASH },
        ["ice"] = { COMBAT_ICEDAMAGE, CONST_ME_ICEATTACK },
        ["holy"] = { COMBAT_HOLYDAMAGE, CONST_ME_HOLYDAMAGE },
        ["death"] = { COMBAT_DEATHDAMAGE, CONST_ME_MORTAREA }
    }

    function onSay(cid, words, param, channel)

        local split = string.explode(param, ",")
        if #split == 0 then
            return doPlayerSendCancel(cid, "The command requires a parameter.")
        end

        local elementType = elementWandTypes[split[1] and string.lower(split[1])]
        if not elementType then
            return doPlayerSendCancel(cid, string.format("This element %s does not exist.", split[1]))
        end

        setPlayerStorageValue(cid, elementWandStorageID, elementType[1])
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, string.format("You have changed the element to %s.", string.lower(split[1])))
        doSendMagicEffect(getCreaturePosition(cid), elementType[2])

        return true
    end

    Luego ir a weapons.xml y agregar lo siguiente (puedes modificar los valores):

    Código:
    <wand id="2190" level="7" mana="2" event="script" value="elementWand.lua">
    <vocation id="1"/> ---- aqui añadir la vocacion que corresponda
    </wand>

    Y finalmente en Weapons/scripts/ crear el archivo elementWand.lua

    Código:
    local elementWandStorageID = 666778
    local elementWandTypes = {
        { COMBAT_PHYSICALDAMAGE, CONST_ME_HITAREA, CONST_ANI_EXPLOSION },
        { COMBAT_ENERGYDAMAGE, CONST_ME_ENERGYAREA, CONST_ANI_ENERGY },
        { COMBAT_EARTHDAMAGE, CONST_ME_POISONAREA, CONST_ANI_POISON },
        { COMBAT_FIREDAMAGE, CONST_ME_FIREAREA, CONST_ANI_FIRE },
        { COMBAT_DROWNDAMAGE, CONST_ME_WATERSPLASH, CONST_ANI_ENERGYBALL },
        { COMBAT_ICEDAMAGE, CONST_ME_ICEATTACK, CONST_ANI_ICE },
        { COMBAT_HOLYDAMAGE, CONST_ME_HOLYDAMAGE, CONST_ANI_HOLY },
        { COMBAT_DEATHDAMAGE, CONST_ME_MORTAREA, CONST_ANI_DEATH }
    }

    local combats = {}
    function onGetFormulaValues(cid, level, magiclevel)
        local min = level + magiclevel * 2.0
        local max = level + magiclevel * 2.5
        return -min, -max
    end

    for index, elementInfo in pairs(elementWandTypes) do
        combats[elementInfo[1]] = createCombatObject()
        setCombatParam(combats[elementInfo[1]], COMBAT_PARAM_TYPE, elementInfo[1])
        setCombatParam(combats[elementInfo[1]], COMBAT_PARAM_EFFECT, elementInfo[2])
        setCombatParam(combats[elementInfo[1]], COMBAT_PARAM_DISTANCEEFFECT, elementInfo[3])
        setCombatCallback(combats[elementInfo[1]], CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
    end

    function onUseWeapon(cid, var)
        local elementType = getPlayerStorageValue(cid, elementWandStorageID)
        local combat = combats[elementType] or combats[COMBAT_PHYSICALDAMAGE]
        return doCombat(cid, combat, var)
    end

    Ahora solo queda sentarme a comparar el intento de script que hice y el resultado para entender donde falle xD

    Saludos y gracias!
    Smile

    http://greedisland.ml/index.php

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    [Tienes que estar registrado y conectado para ver este vínculo] escribió:Gracias sevu, lo que busco es una explicacion de como lograr cambiar el script que publique de TFS 1.2 y convetirlo para 0.4, ya que el script de TFS 1.2 usa modal windows y eso no funcionaria en 0.4. Por eso, hice esas lineas de script incompletas para ver si voy por buen camino intentando scriptear el mismo sistema a traves de talkactions compatibles en 0.4, y entender que lineas pueden servir para crear el sistema, cuales debo descartar, y porque, si es posible, a fin de aprender un poquito de script

    Los creditos del script original son para sTrutz.
    Saludos!!

    Edito: Encontré solucion al script, creditos a Sarah Wesker por convertirlo en talkaction.
    Para implementar el sistema:

    Primero ir a talkactions.xml y lo siguiente (en words escribes las palabras que accionan el talkaction):

    Código:
    <talkaction words="!changeElement" event="script" value="changeElementWand.lua"/>

    Luego ir a talkactions/scripts/ y crear el archivo changeElementWand.lua con lo siguiente:

    Código:
    local elementWandStorageID = 666778
    local elementWandTypes = {
        ["physical"] = { COMBAT_PHYSICALDAMAGE, CONST_ME_HITAREA },
        ["energy"] = { COMBAT_ENERGYDAMAGE, CONST_ME_ENERGYAREA },
        ["earth"] = { COMBAT_EARTHDAMAGE, CONST_ME_POISONAREA },
        ["fire"] = { COMBAT_FIREDAMAGE, CONST_ME_FIREAREA },
        ["drown"] = { COMBAT_DROWNDAMAGE, CONST_ME_WATERSPLASH },
        ["ice"] = { COMBAT_ICEDAMAGE, CONST_ME_ICEATTACK },
        ["holy"] = { COMBAT_HOLYDAMAGE, CONST_ME_HOLYDAMAGE },
        ["death"] = { COMBAT_DEATHDAMAGE, CONST_ME_MORTAREA }
    }

    function onSay(cid, words, param, channel)

        local split = string.explode(param, ",")
        if #split == 0 then
            return doPlayerSendCancel(cid, "The command requires a parameter.")
        end

        local elementType = elementWandTypes[split[1] and string.lower(split[1])]
        if not elementType then
            return doPlayerSendCancel(cid, string.format("This element %s does not exist.", split[1]))
        end

        setPlayerStorageValue(cid, elementWandStorageID, elementType[1])
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, string.format("You have changed the element to %s.", string.lower(split[1])))
        doSendMagicEffect(getCreaturePosition(cid), elementType[2])

        return true
    end

    Luego ir a weapons.xml y agregar lo siguiente (puedes modificar los valores):

    Código:
    <wand id="2190" level="7" mana="2" event="script" value="elementWand.lua">
    <vocation id="1"/> ---- aqui añadir la vocacion que corresponda
    </wand>

    Y finalmente en Weapons/scripts/ crear el archivo elementWand.lua

    Código:
    local elementWandStorageID = 666778
    local elementWandTypes = {
        { COMBAT_PHYSICALDAMAGE, CONST_ME_HITAREA, CONST_ANI_EXPLOSION },
        { COMBAT_ENERGYDAMAGE, CONST_ME_ENERGYAREA, CONST_ANI_ENERGY },
        { COMBAT_EARTHDAMAGE, CONST_ME_POISONAREA, CONST_ANI_POISON },
        { COMBAT_FIREDAMAGE, CONST_ME_FIREAREA, CONST_ANI_FIRE },
        { COMBAT_DROWNDAMAGE, CONST_ME_WATERSPLASH, CONST_ANI_ENERGYBALL },
        { COMBAT_ICEDAMAGE, CONST_ME_ICEATTACK, CONST_ANI_ICE },
        { COMBAT_HOLYDAMAGE, CONST_ME_HOLYDAMAGE, CONST_ANI_HOLY },
        { COMBAT_DEATHDAMAGE, CONST_ME_MORTAREA, CONST_ANI_DEATH }
    }

    local combats = {}
    function onGetFormulaValues(cid, level, magiclevel)
        local min = level + magiclevel * 2.0
        local max = level + magiclevel * 2.5
        return -min, -max
    end

    for index, elementInfo in pairs(elementWandTypes) do
        combats[elementInfo[1]] = createCombatObject()
        setCombatParam(combats[elementInfo[1]], COMBAT_PARAM_TYPE, elementInfo[1])
        setCombatParam(combats[elementInfo[1]], COMBAT_PARAM_EFFECT, elementInfo[2])
        setCombatParam(combats[elementInfo[1]], COMBAT_PARAM_DISTANCEEFFECT, elementInfo[3])
        setCombatCallback(combats[elementInfo[1]], CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
    end

    function onUseWeapon(cid, var)
        local elementType = getPlayerStorageValue(cid, elementWandStorageID)
        local combat = combats[elementType] or combats[COMBAT_PHYSICALDAMAGE]
        return doCombat(cid, combat, var)
    end

    Ahora solo queda sentarme a comparar el intento de script que hice y el resultado para entender donde falle xD

    Saludos y gracias!
    Smile


    aqui esta lo que quieres

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



    [Talkactions] Duda sobre como cambiar daño de varita con talkaction (TFS 0.4) YNU5B25
    https://www.tibiaface.com

    Contenido patrocinado


    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).