• TibiaFace

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

    .
    demo menumenu

    Afiliados



    Votar:

    [Actions] Exercise Weapons And Dummies

    Compartir:

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

    1[Actions] Exercise Weapons And Dummies Empty [Actions] Exercise Weapons And Dummies Jue Feb 21, 2019 8:37 pm

    [Adm] SevuOT

    [Adm] SevuOT
    Miembro
    Miembro
    Hola amigos, aquí les traigo el sistema: maniquíes y armas de entrenamiento, comúnmente conocido como exercise weapons!

    bueno esta es mi versión personalizada y se que les gustara!

    REQUISITOS:
    >> TFS 1.X+

    Aqui el codigo de action:
    Código:

    --[[ Creditos: [Adm] SevuOT from Tibiaface.com ]]--
    --[[ Lista de ID para los maniquies disponibles ]]--
    --# skillSpeed ref: 1 = 100%, 0.5 = 50%, 0.25 = 25%
    local dummies = {
       [26403] = { skillRate = 1, skillSpeed = 1 },
       [26404] = { skillRate = 1, skillSpeed = 1 }
    }

    --[[ Parametros para el entrenamiento ]]--
    local staminaTries = 60 --[[ valor por defecto 60 ]] -- este valor equivale a 60 segundos
    local skillTries = 7 --[[ valor por defecto 7 ]] -- este valor se modifica segun el skillRate del maniquie asi que ten cuidado.
    local skillSpent = function() return math.random(425, 575) end --[[ valores por defecto 425, 575 ]] -- este valor se modifica segun el skillRate del maniquie asi que ten cuidado.

    --[[ Lista de ID, Effect, DistEffect para las vocations ]]--
    local weapons = {
       --[[ magiclevel druid ]] [26401] = { shootEffect = CONST_ME_HITAREA, shootDistEffect = CONST_ANI_CAKE, skillType = SKILL_MAGLEVEL },
       --[[ magiclevel sorcerer ]] [26402] = { shootEffect = CONST_ME_HITAREA, shootDistEffect = CONST_ANI_ENERGY, skillType = SKILL_MAGLEVEL },
       --[[ distance ]] [26400] = { shootEffect = CONST_ME_HITAREA, shootDistEffect = CONST_ANI_SIMPLEARROW, skillType = SKILL_DISTANCE },
       --[[ sword ]] [26397] = { shootEffect = CONST_ME_HITAREA, skillType = SKILL_SWORD },
       --[[ axe ]] [26398] = { shootEffect = CONST_ME_HITAREA, skillType = SKILL_AXE },
       --[[ club ]] [26399] = { shootEffect = CONST_ME_HITAREA, skillType = SKILL_CLUB }
    }

    --[[ tabla de eventos "esta variable no debe ser modificada en ninguna parte del script a menos que quieras bugs" ]]
    if not e_traingEvents then e_traingEvents = {} end

    local function exerciseDummyTrainEvent(params, weapon)
       local player = Player(params.cid)
       if player then
          if player:getPosition():getDistance(params.currentPos) == 0 then
             if weapon.shootDistEffect then player:getPosition():sendDistanceEffect(params.dummyPos, weapon.shootDistEffect) end
             if weapon.shootEffect then params.dummyPos:sendMagicEffect(weapon.shootEffect) end
             if weapon.skillType == SKILL_MAGLEVEL then
                player:addManaSpent((skillSpent() * params.dummy.skillRate) * configManager.getNumber(configKeys.RATE_MAGIC))
             else
                player:addSkillTries(weapon.skillType, (skillTries * params.dummy.skillRate) * configManager.getNumber(configKeys.RATE_SKILL))
             end
             local currentStamina = player:getStamina()
             if currentStamina <
             player:setStamina(player:getStamina() + staminaTries)
             local weaponCharges = params.item:getCharges()
             if weaponCharges > 1 then
                params.item:transform(params.item:getId(), weaponCharges - 1)
                e_traingEvents[params.cid] = addEvent(exerciseDummyTrainEvent, player:getVocation():getAttackSpeed() * params.dummy.skillSpeed, params, weapon)
                return true
             else
                params.item:remove()
                player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Your exercise weapon has expired, therefore your training too.")
             end
          else
             player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have finished your training.")
          end
       end
       e_traingEvents[params.cid] = nil
    end

    function onUse(player, item, fromPos, target, toPos, isHotkey)
       if not target then
          return player:sendCancelMessage(Game.getReturnMessage(RETURNVALUE_NOTPOSSIBLE))
       end
       if not player:getPosition():getTile():hasFlag(TILESTATE_PROTECTIONZONE) then
          return player:sendCancelMessage("You can only train in protection zone.")
       end
       local dummy = dummies[target:getId()]
       local weapon = weapons[item:getId()]
       if not weapon or not dummy then
          return player:sendCancelMessage(Game.getReturnMessage(RETURNVALUE_CANNOTUSETHISOBJECT))
       end
       if player:getPosition():getDistance(target:getPosition()) > 1 then
          return player:sendCancelMessage(Game.getReturnMessage(RETURNVALUE_THEREISNOWAY))
       end
       local params = {}
       params.cid = player:getId()
       if not e_traingEvents[params.cid] then
          params.currentPos = player:getPosition()
          params.dummyPos = target:getPosition()
          params.item = item
          params.dummy = dummy
          exerciseDummyTrainEvent(params, weapon)
          player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have started training with dummy.")
       else
          player:sendCancelMessage("You can not train with 2 weapons at the same time.")
       end
       return true
    end

    Este es un action-script, sigue los pasos del tutorial de maya para configurar algunas cosas importantes, si desea que los jugadores incrementen 1 skill level completo por cada hit, entonces ignore este post y siga el de maya!

    Aquí el link: [Tienes que estar registrado y conectado para ver este vínculo]

    Si este script te genera algún error en consola, por favor publique el mensaje de error o en su defecto el capture de la consola!

    Si el script no te funciona, pero no tienes mensajes de error en la consola, no publiques nada aquí, es mas que obvio que el error es suyo y deberá seguir los pasos correctamente una ves mas!



    Última edición por [Adm] SevuOT el Jue Jun 06, 2019 8:43 pm, editado 1 vez



    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.


    [Actions] Exercise Weapons And Dummies TRJEB8aSRYK5IulEU6ilJw
    5 participantes

    2[Actions] Exercise Weapons And Dummies Empty Re: [Actions] Exercise Weapons And Dummies Mar Mar 05, 2019 10:59 am

    vine96

    vine96
    Nuevo Miembro
    Nuevo Miembro
    no funcional =/ tfs 1.3 otx 3.10

    5 participantes

    reaves17

    reaves17
    Miembro
    Miembro
    Hola me arroja este error.

    Lua Script Error: [Event Interface]
    data/events/scripts/player.lua
    data/events/scripts/player.lua:355: attempt to index global 'item' (a nil value)
    stack traceback:
    [C]: in function '__index'
    data/events/scripts/player.lua:355: in main chunk
    [Warning - Events::load] Can not load script: player.lua

    5 participantes

    potinho

    potinho
    Nuevo Miembro
    Nuevo Miembro
    tienes alguna possibilidad de fazeres esto en otx 2?

    5 participantes

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    potinho escribió:tienes alguna possibilidad de fazeres esto en otx 2?

    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

    ---@ 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 = getPlayerItemById(params.cid, true, params.itemid)
            local playerPosition = getCreaturePosition(params.cid)
            if getDistanceBetween(playerPosition, params.currentPos) == 0 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)
        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.item = item.uid
            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



    [Actions] Exercise Weapons And Dummies YNU5B25
    5 participantes
    http://www.tibiaface.com

    Contenido patrocinado


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