• TibiaFace

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

    .
    demo menumenu

    Afiliados



    Votar:

    [Function] Arreglar script de torch que al equipar regenere dependiendo de la voacion

    Compartir:

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

    Cabusito

    Cabusito
    Nuevo Miembro
    Nuevo Miembro
    Descripcion escribió:Muy buenas tardes estoy tratando de hacer un script para mi servidor Canary para cliente 13.11

    Consise en que cuando te equipes una antorcha en el slot de ammo regenere mana y vida dependiendo de tu vocacion logre hacer el siguiente codigo pero tengo varios problema no funciona y no se si es por donde lo estoy colocando, no lo estoy mandando a llamar el equipar y desequipar correctamente

    Entonces necesito que me ayuden a correguir el script y a una guia de donde lo tengo que pegar y hacerlo funcionar

    Código:

    local storage = 25977

    local sorcRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(sorcRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(sorcRegeneration, CONDITION_PARAM_HEALTHGAIN, 35)
    setConditionParam(sorcRegeneration, CONDITION_PARAM_MANAGAIN, 150)

    local druidRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(druidRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(druidRegeneration, CONDITION_PARAM_HEALTHGAIN, 35)
    setConditionParam(druidRegeneration, CONDITION_PARAM_MANAGAIN, 150)

    local paladinRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(paladinRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(paladinRegeneration, CONDITION_PARAM_HEALTHGAIN, 35)
    setConditionParam(paladinRegeneration, CONDITION_PARAM_MANAGAIN, 150)

    local knightRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(knightRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(knightRegeneration, CONDITION_PARAM_HEALTHGAIN, 35)
    setConditionParam(knightRegeneration, CONDITION_PARAM_MANAGAIN, 150)


    function onEquip(cid, player, item, slot)
        if player:getStorageValue(cid, storage) ~= 1 then
            if player:getSlotItem(CONST_SLOT_AMMO).itemid == 39697 then
     if player:getVocation():getBase():getId() == 1 then
     player:setStorageValue(storage, 1)
     player:addCondition(sorcRegeneration)
     end
     if player:getVocation():getBase():getId() == 2 then
     player:setStorageValue(storage, 1)
     player:addCondition(druidRegeneration)
     end
     if player:getVocation():getBase():getId() == 3 then
     player:setStorageValue(storage, 1)
     player:addCondition(paladinRegeneration)
     end
     if player:getVocation():getBase():getId() == 4 then
     player:setStorageValue(storage, 1)
     player:addCondition(knightRegeneration)
     end
            end
        end
        return true
    end

    function onDeEquip(cid, player, item, slot)
        if player:getStorageValue(cid, storage) == 1 then
            player:removeCondition(CONDITION_REGENERATION, CONDITION_SUBID.REGENERATION)
            player:setStorageValue(storage, 0)
        end
        return true
    end

    este es mi codigo del script
    y tengo estas posibles rutas de donde pegarlo
    canary\data-real-map\scripts\movements\equipment\regen_item.lua
    y
    canary\data-real-map\scripts\custom\movements\regen_item.lua


    luego tengo mi codigo que se encuentra en el archivo canary\scripts\movements\equipment\unscripted_equipments.lua

    Código:

    {
     -- lit rainbow torch.
     itemid = 39702,
     type = "equip",
     slot = "ammo",
     event="script",
     value= "movements/equipment/regen_item.lua"
     },
     {
     -- lit rainbow torch.
     itemid = 39702,
     type = "deequip",
     slot = "ammo",
     event = "script",
     value = "movements/equipment/regen_item.lua"
     },

    esta es la parte del codigo que tengo unscripted_equipments tampoco estoy seguro de que estoy se pegue aqui pero agraeceria su ayuda si me ayuda a hacer que funcione correctamente

    Muchas gracias
    Captura del Error escribió:Imagen del error: [Function] Arreglar script de torch que al equipar regenere dependiendo de la voacion Empty
    El error radica en: MoveEvents

    2 participantes

    SoyFabi

    SoyFabi
    Miembro
    Miembro
    Si usas (player) no hace falta usar (cid), player es lo mismo que cid, por eso no jala.

    Te lo deje de Revscripts

    Código:
    local sorcRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(sorcRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(sorcRegeneration, CONDITION_PARAM_HEALTHGAIN, 35)
    setConditionParam(sorcRegeneration, CONDITION_PARAM_MANAGAIN, 150)

    local druidRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(druidRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(druidRegeneration, CONDITION_PARAM_HEALTHGAIN, 35)
    setConditionParam(druidRegeneration, CONDITION_PARAM_MANAGAIN, 150)

    local paladinRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(paladinRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(paladinRegeneration, CONDITION_PARAM_HEALTHGAIN, 35)
    setConditionParam(paladinRegeneration, CONDITION_PARAM_MANAGAIN, 150)

    local knightRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(knightRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(knightRegeneration, CONDITION_PARAM_HEALTHGAIN, 35)
    setConditionParam(knightRegeneration, CONDITION_PARAM_MANAGAIN, 150)

    local storage = 25977

    local antorch = MoveEvent()
    function antorch.onEquip(player, item, slot)

       if player:getStorageValue(storage) ~= 1 then
          --if player:getSlotItem(CONST_SLOT_AMMO).itemid == 39697 then
             -- Si es Revscripts no hace falta añadir esta funcion ^^
             if player:getVocation():getBase():getId() == 1 then -- MS
                player:setStorageValue(storage, 1)
                player:addCondition(sorcRegeneration)
             elseif player:getVocation():getBase():getId() == 2 then -- ED
                player:setStorageValue(storage, 1)
                player:addCondition(druidRegeneration)
             elseif player:getVocation():getBase():getId() == 3 then -- RP
                player:setStorageValue(storage, 1)
                player:addCondition(paladinRegeneration)
             else -- EK
                player:setStorageValue(storage, 1)
                player:addCondition(knightRegeneration)
             end
            --end
       end
        return true
    end

    antorch:type("equip")
    antorch:slot("ammo")
    antorch:id(39697)
    antorch:register()

    local antorchde = MoveEvent()

    function antorchde.onDeEquip(player, item, slot)
        if player:getStorageValue(storage) == 1 then
            player:removeCondition(CONDITION_REGENERATION)
            player:setStorageValue(storage, 0)
        end
        return true
    end

    antorchde:type("equip")
    antorchde:type("deequip")
    antorchde:slot("ammo")
    antorchde:id(39697)
    antorchde:register()



    2 participantes

    Cabusito

    Cabusito
    Nuevo Miembro
    Nuevo Miembro


    SoyFabi escribió:Si usas (player) no hace falta usar (cid), player es lo mismo que cid, por eso no jala.

    Te lo deje de Revscripts

    Código:
    local sorcRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(sorcRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(sorcRegeneration, CONDITION_PARAM_HEALTHGAIN, 35)
    setConditionParam(sorcRegeneration, CONDITION_PARAM_MANAGAIN, 150)

    local druidRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(druidRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(druidRegeneration, CONDITION_PARAM_HEALTHGAIN, 35)
    setConditionParam(druidRegeneration, CONDITION_PARAM_MANAGAIN, 150)

    local paladinRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(paladinRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(paladinRegeneration, CONDITION_PARAM_HEALTHGAIN, 35)
    setConditionParam(paladinRegeneration, CONDITION_PARAM_MANAGAIN, 150)

    local knightRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(knightRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(knightRegeneration, CONDITION_PARAM_HEALTHGAIN, 35)
    setConditionParam(knightRegeneration, CONDITION_PARAM_MANAGAIN, 150)

    local storage = 25977

    local antorch = MoveEvent()
    function antorch.onEquip(player, item, slot)

       if player:getStorageValue(storage) ~= 1 then
          --if player:getSlotItem(CONST_SLOT_AMMO).itemid == 39697 then
             -- Si es Revscripts no hace falta añadir esta funcion ^^
             if player:getVocation():getBase():getId() == 1 then -- MS
                player:setStorageValue(storage, 1)
                player:addCondition(sorcRegeneration)
             elseif player:getVocation():getBase():getId() == 2 then -- ED
                player:setStorageValue(storage, 1)
                player:addCondition(druidRegeneration)
             elseif player:getVocation():getBase():getId() == 3 then -- RP
                player:setStorageValue(storage, 1)
                player:addCondition(paladinRegeneration)
             else -- EK
                player:setStorageValue(storage, 1)
                player:addCondition(knightRegeneration)
             end
            --end
       end
        return true
    end

    antorch:type("equip")
    antorch:slot("ammo")
    antorch:id(39697)
    antorch:register()

    local antorchde = MoveEvent()

    function antorchde.onDeEquip(player, item, slot)
        if player:getStorageValue(storage) == 1 then
            player:removeCondition(CONDITION_REGENERATION)
            player:setStorageValue(storage, 0)
        end
        return true
    end

    antorchde:type("equip")
    antorchde:type("deequip")
    antorchde:slot("ammo")
    antorchde:id(39697)
    antorchde:register()




    Muchas gracias ya me funciono, ahora el problema que pasa es que cuando lo equipo regenera mana y pero cuando lo desequipo sigue regenerando mana y otra pregunta como podria hacer para cambiar el tiempo de cada cuanto regenera mana y hp?



    ya pude solucionar que deje de regenerar mana y hp cuando lo desequipas, pero ahora tengo un problema es que el valor del storage no es perscistente es decir que si relogeo y te dejaste el item equipado, cuando vuelves a conectar no se aplica la regeneracion y tienes que quitarlo y volverlo a equipar, hay alguna forma de que si te deconectas con el item equipado y te conectas siga activado y regenere, dejo el codigo de como quedo

    Código:

    local storage = 25977

    local rookRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(rookRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(rookRegeneration, CONDITION_PARAM_HEALTHGAIN, 10)
    setConditionParam(rookRegeneration, CONDITION_PARAM_MANAGAIN, 10)

    local sorcRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(sorcRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(sorcRegeneration, CONDITION_PARAM_HEALTHGAIN, 20)
    setConditionParam(sorcRegeneration, CONDITION_PARAM_MANAGAIN, 80)

    local druidRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(druidRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(druidRegeneration, CONDITION_PARAM_HEALTHGAIN, 20)
    setConditionParam(druidRegeneration, CONDITION_PARAM_MANAGAIN, 80)

    local paladinRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(paladinRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(paladinRegeneration, CONDITION_PARAM_HEALTHGAIN, 50)
    setConditionParam(paladinRegeneration, CONDITION_PARAM_MANAGAIN, 50)

    local knightRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(knightRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(knightRegeneration, CONDITION_PARAM_HEALTHGAIN, 75)
    setConditionParam(knightRegeneration, CONDITION_PARAM_MANAGAIN, 30)

    local equipTorch = MoveEvent()
    local unEquipTorch = MoveEvent()


    function equipTorch.onEquip(player, item, slot)
       print(player:getStorageValue(storage), player:getName(), "Equip")
        if player:getStorageValue(storage) ~= 1 then
          if player:getVocation():getBase():getId() == 0 then -- Rookgard
             player:setStorageValue(storage, 1)
             player:addCondition(sorcRegeneration)      
          elseif player:getVocation():getBase():getId() == 1 then -- Sorcerer
             player:setStorageValue(storage, 1)
             player:addCondition(sorcRegeneration)
          elseif player:getVocation():getBase():getId() == 2 then -- Druid
             player:setStorageValue(storage, 1)
             player:addCondition(druidRegeneration)
          elseif player:getVocation():getBase():getId() == 3 then -- Paladin
             player:setStorageValue(storage, 1)
             player:addCondition(paladinRegeneration)
          else  -- Knight
             player:setStorageValue(storage, 1)
             player:addCondition(knightRegeneration)
          end
        end
        return true
    end

    equipTorch:type("equip")
    equipTorch:slot("ammo")
    equipTorch:id(39702)
    equipTorch:register()


    function unEquipTorch.onDeEquip(player, item, slot)
       print(player:getStorageValue(storage), player:getName(), "UnEquip")
        if player:getStorageValue(storage) == 1 then
            player:removeCondition(CONDITION_REGENERATION)
            player:setStorageValue(storage, 0)
        end
        return true
    end

    unEquipTorch:type("deequip")
    unEquipTorch:slot("ammo")
    unEquipTorch:id(39702)
    unEquipTorch:register()



    tengo otro problema mande a imprimir a la consola cuando alguien se equipe el el item  en primer lugar imprime el valor del storage, en segundo el nombre del personaje y en tercero la accion y me imprime lo siguiente
    y pasa que es como si se equiparan el item 3 veces y al desequiparlo solo 1 o es normal que pase esto?
    [Function] Arreglar script de torch que al equipar regenere dependiendo de la voacion Image_10




    Buenas noches, analizando el codigo vi que practicamente no tenia sentido usar un storage ya que entendi que realmente se guarda el valor del storage cuando te desconectas y lo que pasa es que cuando logeas al char e intenta obtener el valor del storage para activar la regen
    Código:
    if player:getStorageValue(storage) ~= 1 then
    pasa que ya tiene el valor de 1 no entra a buscar su voc para poner el parametro de regeneracion entonces lo que hize fue eliminarlo por completo y ahora cada vez que un jugador se desconecto con el item equipado lo unico que hace es verificar que clase es y asignarle la regen indicada. Muchas gracias por su ayuda

    Dejo el codigo totalmente funcional como aporte para alguien mas si le llega a servir

    Código:

    local rookRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(rookRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(rookRegeneration, CONDITION_PARAM_HEALTHTICKS, 2000)
    setConditionParam(rookRegeneration, CONDITION_PARAM_HEALTHGAIN, 10)
    setConditionParam(rookRegeneration, CONDITION_PARAM_MANATICKS, 2000)
    setConditionParam(rookRegeneration, CONDITION_PARAM_MANAGAIN, 10)

    local sorcRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(sorcRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(sorcRegeneration, CONDITION_PARAM_HEALTHTICKS, 2000)
    setConditionParam(sorcRegeneration, CONDITION_PARAM_HEALTHGAIN, 20)
    setConditionParam(sorcRegeneration, CONDITION_PARAM_MANATICKS, 2000)
    setConditionParam(sorcRegeneration, CONDITION_PARAM_MANAGAIN, 80)

    local druidRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(druidRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(druidRegeneration, CONDITION_PARAM_HEALTHTICKS, 2000)
    setConditionParam(druidRegeneration, CONDITION_PARAM_HEALTHGAIN, 20)
    setConditionParam(druidRegeneration, CONDITION_PARAM_MANATICKS, 2000)
    setConditionParam(druidRegeneration, CONDITION_PARAM_MANAGAIN, 80)

    local paladinRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(paladinRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(paladinRegeneration, CONDITION_PARAM_HEALTHTICKS, 2000)
    setConditionParam(paladinRegeneration, CONDITION_PARAM_HEALTHGAIN, 50)
    setConditionParam(paladinRegeneration, CONDITION_PARAM_MANATICKS, 2000)
    setConditionParam(paladinRegeneration, CONDITION_PARAM_MANAGAIN, 50)

    local knightRegeneration = createConditionObject(CONDITION_REGENERATION)
    setConditionParam(knightRegeneration, CONDITION_PARAM_TICKS, -1)
    setConditionParam(knightRegeneration, CONDITION_PARAM_HEALTHTICKS, 2000)
    setConditionParam(knightRegeneration, CONDITION_PARAM_HEALTHGAIN, 75)
    setConditionParam(knightRegeneration, CONDITION_PARAM_MANATICKS, 2000)
    setConditionParam(knightRegeneration, CONDITION_PARAM_MANAGAIN, 30)

    local equipTorch = MoveEvent()
    local unEquipTorch = MoveEvent()

    function equipTorch.onEquip(player, item, slot)
       if player:getVocation():getBase():getId() == 0 then -- Rookgard
             player:addCondition(sorcRegeneration)      
       elseif player:getVocation():getBase():getId() == 1 then -- Sorcerer
          player:addCondition(sorcRegeneration)
       elseif player:getVocation():getBase():getId() == 2 then -- Druid
          player:addCondition(druidRegeneration)
       elseif player:getVocation():getBase():getId() == 3 then -- Paladin
          player:addCondition(paladinRegeneration)
       else  -- Knight
          player:addCondition(knightRegeneration)
       end
      return true
    end

    equipTorch:type("equip")
    equipTorch:slot("ammo")
    equipTorch:id(39698)
    equipTorch:register()

    function unEquipTorch.onDeEquip(player, item, slot)
       player:removeCondition(CONDITION_REGENERATION)
      return true
    end

    unEquipTorch:type("deequip")
    unEquipTorch:slot("ammo")
    unEquipTorch:id(39698)
    unEquipTorch:register()


    Solo quedo mi duda de por que siempre ejecuta el codigo 3 veces al equiparse el item y solo 1 al quitarlo
    [Function] Arreglar script de torch que al equipar regenere dependiendo de la voacion Image_10

    Espero me puedan ayudar con este ultimo problema para poder cerrar el post stisfactoriamente

    2 participantes

    Contenido patrocinado


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