• TibiaFace

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

    .
    demo menumenu

    Afiliados



    Votar:

    [Actions] Entrenar skill con cargas de weapon para 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: Sarah Wesker

    Este sistema fue testeado en TFS 0.4 y funciona correctamente.

    ¿Que hace el sistema? Primero debes equiparte un arma determinada (ids de local weapons) con un action id asignado y que ademas tenga cargas. Al momento de utilizarla en un tipo de estatua (ids de local dummies) el arma comenzara a consumir cargas y tus skills comenzaran a subir.



    ¿Como instalar el sistema? Para instalar este sistema, primero debes ir al archivo items.xml y colocar lo siguiente bajo el codigo de las armas mencionadas en local weapons (26404, 26401, 26400, 2376, 26398, 26999):

    Código:
    <attribute key="charges" value="200" />
    <attribute key="showcharges" value="1" /

    Como recomendación, elijan otras armas en ves de las id mencionadas. Es importante recordar que si cambiamos el id debemos asignar cargas a ese id. Para implementar el script abriremos el archivo actions.xml (data/actions) y agregaremos:

    Código:
    <action actionid="1443" event="script" value="dummy.lua"/>

    Esto significara que el arma que tenga el action id 1443 y pertenezca a la lista de local weapons (26404, 26401, 26400, 2376, 26398, 26999) activara el sistema al ser utilizada en las estatuas 1443 y 26404 (local dummies).

    Lo siguiente es ir a actions/scripts y crear el archivo trainingdummy.lua

    Código:
    ---@ Create by Sarah Wesker | Tested Version: TFS 0.4
    ---@ list of training dummies.
    local dummies = {
        [1443] = { skillRate = 1, skillSpeed = 1 },
        [26404] = { skillRate = 1, skillSpeed = 1 }
    }

    ---@ Global training parameters of the system.
    local staminaTries = 1 --# on minutes
    local skillTries = 7 --# tries by blow
    local skillSpent = function() return math.random(425, 575) end --# mana consumed by blow
    local slotForUse = CONST_SLOT_AMMO

    ---@ list of weapons to train.
    local weapons = {
        [26401] = { shootEffect = CONST_ME_HITAREA, shootDistEffect = CONST_ANI_CAKE, skillType = SKILL_MAGLEVEL }, -- magicLevel Dru
        [26402] = { shootEffect = CONST_ME_HITAREA, shootDistEffect = CONST_ANI_ENERGY, skillType = SKILL_MAGLEVEL }, -- magicLevel Sor
        [26400] = { shootEffect = CONST_ME_HITAREA, shootDistEffect = CONST_ANI_SIMPLEARROW, skillType = SKILL_DISTANCE }, -- distance
        [2376] = { shootEffect = CONST_ME_HITAREA, skillType = SKILL_SWORD }, -- sword
        [26398] = { shootEffect = CONST_ME_HITAREA, skillType = SKILL_AXE }, -- axe
        [26399] = { shootEffect = CONST_ME_HITAREA, skillType = SKILL_CLUB } -- club
    }

    ---@ EDTE is the global event table to control the system correctly.
    if not EDTE then EDTE = {} end

    ---@ functions to assign or obtain the training status of a player.
    function getPlayerExerciseTrain(cid) return EDTE[cid] or false end
    function setPlayerExerciseTrain(cid, status) EDTE[cid] = status return status end

    ---@ local training function.
    local function exerciseDummyTrainEvent(params, weapon)
        if isPlayer(params.cid) then
            local item = getPlayerSlotItem(params.cid, slotForUse)
            local playerPosition = getCreaturePosition(params.cid)
            if getDistanceBetween(playerPosition, params.currentPos) == 0 and item.itemid == params.itemid then
                local weaponCharges = getItemAttribute(item.uid, "charges") or getItemInfo(params.itemid).charges
                local reloadMs = getVocationInfo(getPlayerVocation(params.cid)).attackSpeed * params.dummy.skillSpeed
                if weaponCharges >= 1 then
                    doItemSetAttribute(item.uid, "charges", weaponCharges -1)
                    if weapon.shootDistEffect then doSendDistanceShoot(playerPosition, params.dummyPos, weapon.shootDistEffect) end
                    if weapon.shootEffect then doSendMagicEffect(params.dummyPos, weapon.shootEffect) end
                    if weapon.skillType == SKILL_MAGLEVEL then
                        doPlayerAddManaSpent(params.cid, (skillSpent() * params.dummy.skillRate) * getConfigValue("rateMagic"))
                    else
                        doPlayerAddSkillTry(params.cid, weapon.skillType, (skillTries * params.dummy.skillRate) * getConfigValue("rateSkill"))
                    end
                    local currentStamina = getPlayerStamina(params.cid)
                    doPlayerSetStamina(params.cid, currentStamina + staminaTries)
                    if weaponCharges <= 1 then
                        exerciseDummyTrainEvent(params, weapon)
                    else
                        setPlayerExerciseTrain(params.cid, addEvent(exerciseDummyTrainEvent, reloadMs, params, weapon))
                    end
                    return true
                else
                    doRemoveItem(item.uid)
                    doPlayerSendTextMessage(params.cid, MESSAGE_EVENT_ADVANCE, "Your exercise weapon has expired, therefore your training too.")
                end
            else
                doPlayerSendTextMessage(params.cid, MESSAGE_EVENT_ADVANCE, "You have finished your training.")
            end
        end
        return setPlayerExerciseTrain(params.cid, nil)
    end

    function onUse(cid, item, fromPos, target, toPos, isHotkey)
        local ammo = getPlayerSlotItem(cid, slotForUse)
        if ammo.uid ~= item.uid then
            return doPlayerSendCancel(cid, "The weapon must be located in your slot ammunition.")
        end
        if not target then
            return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
        end
        local playerPosition = getCreaturePosition(cid)
        if not getTileInfo(playerPosition).protection then
            return doPlayerSendCancel(cid, "You can only train in protection zone.")
        end
        local dummy = dummies[target.itemid]
        local weapon = weapons[item.itemid]
        if not weapon or not dummy then
            return doPlayerSendDefaultCancel(cid, RETURNVALUE_CANNOTUSETHISOBJECT)
        end
        local dummyPosition = getThingPosition(target.uid)
        if getDistanceBetween(playerPosition, dummyPosition) > 1 then
            return doPlayerSendDefaultCancel(cid, RETURNVALUE_THEREISNOWAY)
        end
        if not getPlayerExerciseTrain(cid) then
            local params = {}
            params.cid = cid
            params.currentPos = playerPosition
            params.dummyPos = dummyPosition
            params.itemid = item.itemid
            params.dummy = dummy
            exerciseDummyTrainEvent(params, weapon)
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You have started training with dummy.")
        else
            doPlayerSendCancel(cid, "You can not train")
        end
        return true
    end

    Y el sistema estara listo para ser usado. Si quieres hacer un testeo de este sistema, crea una estatua desde el GM con /i 1443, una sword con /i 2376, y asigna la id /attr aid 1443 a la estatua y a la sword.

    Saludos
    Smile



    Última edición por ralke el Mar Jul 23, 2019 8:01 pm, editado 1 vez

    4 participantes
    http://greedisland.ml/index.php

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    my buen aporte pero yo lo refine mas mejor este sitema pero ahi tiene tu me encanta +1 (y)



    [Actions] Entrenar skill con cargas de weapon para TFS 0.4 YNU5B25
    4 participantes
    http://www.tibiaface.com

    ralke

    ralke
    Miembro
    Miembro
    Si alguien tiene el siguiente error al instalar el sistema

    Código:
    [0:2:40.935] [Error - Action Interface]
    [0:2:40.935] data/actions/scripts/exercise_dummy.lua:onUse
    [0:2:40.935] Description:
    [0:2:40.935] data/actions/scripts/exercise_dummy.lua:44: attempt to call global 'DoPlayerAddSpentMana' (a nil value)
    [0:2:40.935] stack traceback:
    [0:2:40.935]    data/actions/scripts/exercise_dummy.lua:44: in function 'exerciseDummyTrainEvent'
    [0:2:40.935]    data/actions/scripts/exercise_dummy.lua:92: in function <data/actions/scripts/exercise_dummy.lua:67>

    Solo deben cambiar donde dice

    Código:
    doPlayerAddManaSpent

    Por lo siguiente

    Código:
    doPlayerAddSpentMana

    4 participantes
    http://greedisland.ml/index.php

    gzdiaz20

    gzdiaz20
    Miembro
    Miembro
    no hace nada

    4 participantes

    ralke

    ralke
    Miembro
    Miembro
    post actualizado-- hubieron algunas correciones en el sistema
    [Tienes que estar registrado y conectado para ver este vínculo] prueba con el codigo nuevo que edite en el post principal, para usarlo equipate el arma con el aid 1443 que corresponde en el espacio del escudo (mano derecha), le das a use, y le clicas al target itemID 5777

    en local weapons debes especificar el id de las armas que accionaran el sistema

    4 participantes
    http://greedisland.ml/index.php

    Dfsuno

    Dfsuno
    Miembro
    Miembro
    funciona en 8.6?

    4 participantes

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    Dfsuno escribió:funciona en 8.6?

    es para tibia 8.60



    [Actions] Entrenar skill con cargas de weapon para TFS 0.4 YNU5B25
    4 participantes
    http://www.tibiaface.com

    Dfsuno

    Dfsuno
    Miembro
    Miembro
    Tiene un problema, el skill distance no funciona todos los demas si, creo que el script tiene un problema.

    4 participantes

    Contenido patrocinado


    4 participantes

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