• TibiaFace

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

    .
    demo menumenu

    Afiliados



    Votar:

    Encantamiento de Items

    Compartir:

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

    1default Encantamiento de Items Mar Dic 21, 2021 9:27 am

    daneraots

    daneraots
    Miembro
    Miembro
    Descripcion escribió:Very Happy
    Aquí está: la primera forma de mejorar sus elementos en TFS 1.0.
    Me tomó toda la noche y mucho trabajo encontrar diferentes formas de funciones, así que espero tu comentario aquí.

    Original thread: MoveEvent - Slot system - Multi slot (No crashes) (...)
    Original author: @Mock
    Updated version: CreatureEvent - [TFS 1.3] updated Slot System (...)

    Script updated to 1.1. - 1.3 It may not work on older TFS.

    Examples:
    07:39 You see a mastermind shield (Def:37).
    It weighs 57.00 oz.
    [shield.+5%] [mp.+10%] [melee.+2%]


    07:40 You see a crossbow (Range:5).
    It weighs 40.00 oz.
    [shield.+2%] [mp.+14%] [hp.+4%]


    Instalación:
    No hay soporte con la instalación. Si no puede instalar este script, no lo leyó con comprensión. [Tienes que estar registrado y conectado para ver este vínculo]
    [Tienes que estar registrado y conectado para ver este vínculo]
    [Tienes que estar registrado y conectado para ver este vínculo]

    add this to global.lua:
    Code:
    ____________________________________________________________
     
    Código:
    function getItemAttack(uid) return ItemType(getThing(uid).itemid):getAttack() end
       function getItemDefense(uid) return ItemType(getThing(uid).itemid):getDefense() end
       function getItemArmor(uid) return ItemType(getThing(uid).itemid):getArmor() end
       function getItemWeaponType(uid) return ItemType(getThing(uid).itemid):getWeaponType() end
       function isArmor(uid) if (getItemArmor(uid) ~= 0 and getItemWeaponType(uid) == 0) then return true else return false end end
       function isWeapon(uid) return (getItemWeaponType(uid) > 0 and getItemWeaponType(uid) ~= 4) end
       function isShield(uid) return getItemWeaponType(uid) == 4 end
       function isBow(uid) return (getItemWeaponType(uid) == 5 and (not ItemType(getThing(uid).itemid):isStackable())) end
    ____________________________________________________________
    add this to actions.xml:
    Code:
    ____________________________________________________________
    Código:
    <action itemid="8300" script="slot.lua"/>

    ____________________________________________________________

    Código:
    slot.lua action
    Code:
    local conf = {
    maxSlotCount=3,
    ignoredIds={}
    }

    function choose(...)
      local arg = {...}
      return arg[math.random(1,#arg)]
    end

    function onUse(cid, item, fromPosition, itemEx, toPosition)
      if item.uid == 0 or item.itemid == 0 then return false end
      toPosition.stackpos = 255
      if isInArray(conf.ignoredIds, itemEx.itemid) or
      isItemStackable(itemEx.uid) or
      itemEx.itemid == 0 or
      itemEx.type > 1 or
      not(isArmor(itemEx.uid) or isWeapon(itemEx.uid) or isShield(itemEx.uid)) then
      return false
      end
      if isCreature(itemEx.uid) then
      return false
      end
      local nam = Item(itemEx.uid):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION)
      function getper()
      local n = 1
      for i=1,10 do
      n = n+math.random(0,10)
      if n < 8*i then
      break
      end
      end
      return n
      end
      function getSlotCount(nam)
      local c = 0
      for _ in nam:gmatch('%[(.-)%]') do
      c = c+1
      end
      return c
      end
      if getSlotCount(nam) < conf.maxSlotCount then
      local l = choose('hp','mp','ml','melee','shield','dist')
      local p = getper()
      doSendMagicEffect(toPosition,30)
      nam = nam..' ['..l..'.+'..p..'%]'
      doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,l..'.+'..p..'%')
      doSetItemSpecialDescription(itemEx.uid, nam)
      doRemoveItem(item.uid,1)
      else
      doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,"Slot limit reached.")
      end
      return true
    end
    ____________________________________________________________



    add this to creaturescripts.xml:
    Code:
    ____________________________________________________________
    Código:
    <event type="login" name="SlotLogin" script="slot.lua"/>

    ____________________________________________________________


    slot.lua creaturescript
    Código:
    Code:
    local conditionMP,conditionHP,conditionML,conditionCLUB,conditionSHI,conditionDIST,conditionAMP = {},{},{},{},{},{},{}
    for i=1,300 do
      conditionHP[i] = createConditionObject(CONDITION_ATTRIBUTES)
      setConditionParam(conditionHP[i], CONDITION_PARAM_SUBID, 50)
      setConditionParam(conditionHP[i], CONDITION_PARAM_BUFF_SPELL, 1)
      setConditionParam(conditionHP[i], CONDITION_PARAM_TICKS, -1)
      setConditionParam(conditionHP[i], CONDITION_PARAM_STAT_MAXHITPOINTSPERCENT, 100+i)

      conditionMP[i] = createConditionObject(CONDITION_ATTRIBUTES)
      setConditionParam(conditionMP[i], CONDITION_PARAM_SUBID, 51)
      setConditionParam(conditionMP[i], CONDITION_PARAM_BUFF_SPELL, 1)
      setConditionParam(conditionMP[i], CONDITION_PARAM_TICKS, -1)
      setConditionParam(conditionMP[i], CONDITION_PARAM_STAT_MAXMANAPOINTSPERCENT, 100+i)

      conditionML[i] = createConditionObject(CONDITION_ATTRIBUTES)
      setConditionParam(conditionML[i], CONDITION_PARAM_SUBID, 52)
      setConditionParam(conditionML[i], CONDITION_PARAM_BUFF_SPELL, 1)
      setConditionParam(conditionML[i], CONDITION_PARAM_TICKS, -1)
      setConditionParam(conditionML[i], CONDITION_PARAM_STAT_MAGICPOINTSPERCENT, 100+i)


      conditionCLUB[i] = createConditionObject(CONDITION_ATTRIBUTES)
      setConditionParam(conditionCLUB[i], CONDITION_PARAM_SUBID, 53)
      setConditionParam(conditionCLUB[i], CONDITION_PARAM_BUFF_SPELL, 1)
      setConditionParam(conditionCLUB[i], CONDITION_PARAM_TICKS, -1)
      setConditionParam(conditionCLUB[i], CONDITION_PARAM_SKILL_MELEEPERCENT, 100+i)


      conditionSHI[i] = createConditionObject(CONDITION_ATTRIBUTES)
      setConditionParam(conditionSHI[i], CONDITION_PARAM_SUBID, 54)
      setConditionParam(conditionSHI[i], CONDITION_PARAM_BUFF_SPELL, 1)
      setConditionParam(conditionSHI[i], CONDITION_PARAM_TICKS, -1)
      setConditionParam(conditionSHI[i], CONDITION_PARAM_SKILL_SHIELDPERCENT, 100+i)

      conditionDIST[i] = createConditionObject(CONDITION_ATTRIBUTES)
      setConditionParam(conditionDIST[i], CONDITION_PARAM_SUBID, 55)
      setConditionParam(conditionDIST[i], CONDITION_PARAM_BUFF_SPELL, 1)
      setConditionParam(conditionDIST[i], CONDITION_PARAM_TICKS, -1)
      setConditionParam(conditionDIST[i], CONDITION_PARAM_SKILL_DISTANCEPERCENT, 100+i)
    end

    function getSlotType(n)
      if not n then
      return false
      end
      if n:match('%[(.+)%]') then
      n = n:match('%[(.+)%]')
      if n == '?' then
      return 0,n
      else
      return n:match('(.-)%.([+-])(%d+)%%')
      end
      else
      return false
      end
    end

    local function loadSet(cid)
    local player = Player(cid)
    if not player then return false end
      local t = {}
      for slot=1,9 do
      t[slot] = ''
      local s = getPlayerSlotItem(player,slot).uid
      if s ~= 0 then
      t[slot] = Item(s):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION)
      end
      end
      return t
    end

    function chk(cid,f)
      if not Player(cid) then return false end
      local t = loadSet(cid)
      if not t then return false end

      for i=1,#f do
      if f[i] ~= t[i] then
      equip(player,nil,slot)
      break
      end
      end
      addEvent(chk,2000,cid,t)
    end

    function check_slot(aab, i)
      if i == 5 or i == 6 then
      if isWeapon(aab) or isShield(aab) or isBow(aab) then
      return true
      end
      else
      return true
      end
    return false
    end

    function equip(player,item,slot)
      local t = {}
      if item then
      local mm,sinal,qto = getSlotType(Item(item.uid):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION))
      t[mm] = tonumber(qto)
      end
      for i=1,9 do
      if i ~= slot then
      if getPlayerSlotItem(player,i).itemid ~= 0 then
      local aab = getPlayerSlotItem(player,i).uid
      if aab and check_slot(aab,i) then
      for _ in Item(aab):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION):gmatch('(%[.-%])') do
      local mm,sinal,qto2 = getSlotType(_)
      if mm then
      if not t[mm] then
      t[mm] = 0
      end
      t[mm] = t[mm]+tonumber(qto2)
      t[mm] = t[mm] > 300 and 300 or t[mm]
      end
      end
      end
      end
      end
      end
      local fu = 0
      local ca = {}
      local s = ''
      for sl,n in pairs(t) do
      fu = fu+1
      s = s..''..n..'% more of '..sl..'\n'
      if sl == 'hp' then
      player:addCondition(conditionHP[tonumber(n)])
      ca[50] = 1
      doSendTutorial(player,19)
      elseif sl == 'mp' then
      player:addCondition(conditionMP[tonumber(n)])
      ca[51] = 1
      doSendTutorial(player,19)
      elseif sl == 'ml' then
      player:addCondition(conditionML[tonumber(n)])
      ca[52] = 1
      elseif sl == 'melee' then
      player:addCondition(conditionCLUB[tonumber(n)])
      ca[53] = 1
      elseif sl == 'shield' then
      player:addCondition(conditionSHI[tonumber(n)])
      ca[54] = 1
      elseif sl == 'dist' then
      player:addCondition(conditionDIST[tonumber(n)])
      ca[55] = 1
      end
      end
      if fu > 0 then
      for i=50,55 do
      if not ca[i] then
      doRemoveCondition(player:getId(),CONDITION_ATTRIBUTES,i)
      end
      end
      else
      for i=50,55 do
      doRemoveCondition(player:getId(),CONDITION_ATTRIBUTES,i)
      end
      end
      return true
    end

    function onLogin(player)
      equip(player,nil,slot)
    local cid = player:getId()
      addEvent(chk,2000,cid,loadSet(cid))
      return true
    end
    ____________________________________________________________


    Very Happy
    most recent slot remover:

    actions.xml
    Code:

    ____________________________________________________________
    Código:
    <action itemid="8299" script="slotremove.lua"/>

    ____________________________________________________________

    slotremove.lua
    Code:
    Código:
    function getSlotType_full(n)
       if not n then
         return false
       end
       if n:match('%[(.+)%]') then
         n = n:match('%[(.+)%]')
         if n == '?' then
           return 0,n
         else
           return n
         end
       else
         return false
       end
    end

    function onUse(cid, item, fromPosition, itemEx, toPosition)
    item_slots_a = 0
    item_slots_n = ""
    item_slots_t = {}
       for _ in Item(itemEx.uid):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION):gmatch('(%[.-%])') do
         item_slots_a = item_slots_a + 1
         item_slots_t[item_slots_a] = getSlotType_full(_)
       end
      
       if item_slots_t[1] == nil then
         return false
       end

       for i = 1, #item_slots_t - 1 do
       item_slots_n = item_slots_n .. "[" .. item_slots_t[i] .. "]"
       end
      
       doRemoveItem(item.uid,1)
       doSendMagicEffect(toPosition,CONST_ME_MAGIC_RED)
       doSetItemSpecialDescription(itemEx.uid, item_slots_n)
       doPlayerSendTextMessage(cid,20,"Attribute removed.")
    return true
    end

    (y)
    Imagen Explicativa escribió:Imagen Explicativa: Encantamiento de Items Tibiaf10
    Version del Scripts: TFs 1.x



    Última edición por daneraots el Jue Dic 30, 2021 10:43 pm, editado 2 veces

    3 participantes
    http://imperio.servegame.com/

    2default Re: Encantamiento de Items Mar Dic 21, 2021 11:16 am

    poncex

    poncex
    Miembro
    Miembro
    como consejo deberías ordenar un poco el post, separar el script de los demás textos, pero buen aporte de todas maneras (y)

    3 participantes

    3default Re: Encantamiento de Items Jue Dic 23, 2021 7:06 pm

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    SE MOVIO EL TEMA AL AREA CORRECTAi



    Encantamiento de Items YNU5B25
    3 participantes
    https://www.tibiaface.com

    Contenido patrocinado


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