• TibiaFace

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

    .
    demo menumenu

    Afiliados



    Votar:

    [Sistema] Slot System Tfs 1.3, Tfs 1.2, Tfs 1.1

    Compartir:

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

    1default [Sistema] Slot System Tfs 1.3, Tfs 1.2, Tfs 1.1 el Miér Sep 13, 2017 1:06 am

    [Admin] God Maya

    avatar
    Administrador
    Administrador
    Hola usuarios de tibiaface


    Bueno aqui les traigo el sistema de slot system para las tfs 1.x

    ejemplo de como quedaria el item:

    Código:

    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%]

    Instalacion:

    nos vamos a data/actions/scripts copiamos cualquier archivo y renombramos por slot.lua

    Código:
    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)
      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
     
      local number = math.random(0,100)
      doPlayerSendTextMessage(cid,20,' tu exito fue '..number..'%')
     
      if number <= 3 then
          Player:SendTextMessage(20,"Your item broke in the proccess.")
          doRemoveItem(item.uid,1)
          doRemoveItem(itemEx.uid,1)
          return false
      end
     
      if number <= 60 then
          doPlayerSendTextMessage(cid,20,"Fail to gain power.")
          doRemoveItem(item.uid,1)
          return false
      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, 20,l..'.+'..p..'%')
        doSetItemSpecialDescription(itemEx.uid, nam)
        doRemoveItem(item.uid,1)
        return false
      else
        doPlayerSendTextMessage(cid, 20,"Slot limit reached.")
      end
      return true
    end

    y en actions.xml agregamos esta tag:

    Código:
    <action itemid="8300" script="slot.lua"/>

    Ahora nos vamos a data/creaturescripts/scripts copiamos cualquier archivo y renombramos por slot.lua

    Código:
    local conditionMP,conditionHP,conditionML,conditionCLUB,conditionSHI,conditionDIST,conditionAMP = {},{},{},{},{},{},{}
    for i=1,20 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)
      local player = Player(cid)
      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(cid,item,slot)
    local player = Player(cid)
      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] > 20 and 20 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

    y en creaturescript.xml agregamos esta tag:

    Código:
    <event type="login" name="SlotLogin" script="slot.lua"/>

    y en el archivo login.lua registramos el evento:

    algunos servidor se registra asi

    Código:
    player:registerEvent("SlotLogin")

    y en los nuevo tfs 1.3 asi

    Código:
    'SlotLogin',


    bueno ahora si ustedes quieren eliminar el slot agregado del item.

    nos vamos a data/actions/scripts copiamos cualquier archivo y renombramos por slotr.lua

    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 en actions.xml agregamos esta tag:
    Código:

    <action itemid="8299" script="slotr.lua"/>


    nota: el slot solo llega al 20% si necesitan que llegue al 100% con gusto le explicare como modificarlo



    Última edición por [Admin] God Maya el Lun Jul 30, 2018 1:15 am, editado 1 vez



    Ver perfil de usuario http://www.tibiaface.com

    vine96

    avatar
    Nuevo Miembro
    Nuevo Miembro
    Not working in tfs 1.2 and tfs 1.3
    Código:
    Lua Script Error: [CreatureScript Interface]
    data/creaturescripts/scripts/slot.lua:onLogin
    data/creaturescripts/scripts/slot.lua:89: attempt to call global 'isWeapon' (a nil value)
    stack traceback:
    [C]: in function 'isWeapon'
    data/creaturescripts/scripts/slot.lua:89: in function 'check_slot'
    data/creaturescripts/scripts/slot.lua:109: in function 'equip'
    data/creaturescripts/scripts/slot.lua:167: in function

    Error solucionado: [Tienes que estar registrado y conectado para ver este vínculo]
    Faltaba la funcion isWeapon en mi global.lua



    Última edición por [Adm] SevuOT el Lun Jul 30, 2018 2:22 am, editado 1 vez (Razón : Mas claridad!)

    Ver perfil de usuario

    daneraots

    avatar
    Miembro
    Miembro
    Hola no me funciono, agrega los atributos, pero no se refleja en los skill. ayuda porfabor es server 10.98

    Ver perfil de usuario

    [Admin] God Maya

    avatar
    Administrador
    Administrador
    [Tienes que estar registrado y conectado para ver este vínculo] escribió:Hola no me funciono, agrega los atributos, pero no se refleja en los skill. ayuda porfabor es server 10.98

    es muy probable que el registro en el creaturescripts necesite un reset del servidor o este mal agregado



    Ver perfil de usuario http://www.tibiaface.com

    daneraots

    avatar
    Miembro
    Miembro
    no se si el error, sea porque lo estoy jalando en 11.47 aunque ya me avia salido pero no se que me salio mal.

    Ver perfil de usuario

    [Admin] God Maya

    avatar
    Administrador
    Administrador
    [Tienes que estar registrado y conectado para ver este vínculo] escribió:no se si el error, sea porque lo estoy jalando en 11.47 aunque ya me avia salido pero no se que me salio mal.

    pero que error sale



    isWeapon

    Código:
    function isWeapon(uid)
       local item = Item(uid)
       return isInArray({1,2,3,4,5}, ItemType(item:getId()):getWeaponType())
    end



    Ver perfil de usuario http://www.tibiaface.com
    Bueno aquí les dejo la traducción correcta del ACTION slot.lua para TFS 1.x+
    Luego lo haré con los demás scripts.
    Código:
    local conf = {
        maxSlotCount = 3,
        ignoredIds = {}
    }
     
    function choose(...)
      local arg = {...}
      return arg[math.random(1,#arg)]
    end

    local 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

    local function getSlotCount(nam)
        local c = 0
        for _ in nam:gmatch('%[(.-)%]') do
            c = c+1
        end
        return c
    end
     
    function onUse(player, item, fromPosition, target, toPosition, isHotkey)
        if not isInArray(conf.ignoredIds, Item.getId(target)) and not isCreature(target) then
            local nam = Item.getAttribute(target, ITEM_ATTRIBUTE_DESCRIPTION)
            local number = math.random(0, 100)
            Player.sendTextMessage(player, MESSAGE_STATUS_CONSOLE_ORANGE, string.format('Tu exito fue de %u%', number))
            if number <= 3 then
                Player.sendTextMessage(player, MESSAGE_STATUS_CONSOLE_ORANGE, 'Your item broke in the proccess.')
                Item.remove(target, 1)
                Item.remove(item, 1)
                return false
            end
            if number <= 60 then
                Player.sendTextMessage(player, MESSAGE_STATUS_CONSOLE_ORANGE, 'Fail to gain power.')
                Item.remove(item, 1)
                return false
            end
            if getSlotCount(nam) < conf.maxSlotCount then
                local l = choose('hp','mp','ml','melee','shield','dist')
                local p = getper()
                Position.sendMagicEffect(toPosition, 30)
                nam = nam..' ['..l..'.+'..p..'%]'
                Player.sendTextMessage(player, MESSAGE_STATUS_CONSOLE_ORANGE, l..'.+'..p..'%')
                Item.setAttribute(target, ITEM_ATTRIBUTE_DESCRIPTION, nam)
                Item.remove(item, 1)
                return false
            else
                Player.sendTextMessage(player, MESSAGE_STATUS_CONSOLE_ORANGE, 'Slot limit reached.')
            end
        end
        return true
    end



    Si necesitas hospedaje para tu servidor usa este enlace y mira las buenos planes de Windows y Linux:

    SevuOT Online, Version:10 and Custom.

    Ver perfil de usuario

    Pldgames11

    avatar
    Nuevo Miembro
    Nuevo Miembro
    Very Happy Resuelto Gracias Very Happy

    Ver perfil de usuario

    Pldgames11

    avatar
    Nuevo Miembro
    Nuevo Miembro
    <action itemid="8299" script="slot.lua"/>

    poner el id de una spell rune que no tenga ninguna funcion por que si ponen el de alguna quest como por ejemplo el id de un item de quest les dara duplicate y no les funcionara

    Ver perfil de usuario

    [Admin] God Maya

    avatar
    Administrador
    Administrador
    aqui estan las funciones para que funcione perfctamente esto

    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
     



    Ver perfil de usuario http://www.tibiaface.com

    TheFlariuz

    avatar
    Nuevo Miembro
    Nuevo Miembro
    ya agregue todo pero me di cuenta que faltan atributos que quisiera saber como ponerle mas atributos todos las skill etc

    Ver perfil de usuario

    [Admin] God Maya

    avatar
    Administrador
    Administrador
    [Tienes que estar registrado y conectado para ver este vínculo] escribió:ya agregue todo pero me di cuenta que faltan atributos que quisiera saber como ponerle mas atributos todos las skill etc

    aqui tienes con los nuevos atributos

    Código:


    local conditionMP,conditionHP,conditionML,conditionCLUB,conditionSHI,conditionDIST,conditionAMP = {},{},{},{},{},{},{}
    local conditionCRITCHANCE, conditionCRITDMG, conditionLIFELEECH, conditionLIFELEECHAMM, conditionMANALEECH, conditionMANALEECHAMM = {},{},{},{},{},{}
    for i=1,20 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)

      conditionCRITCHANCE[i] = createConditionObject(CONDITION_ATTRIBUTES)
      setConditionParam(conditionCRITCHANCE[i], CONDITION_PARAM_SUBID, 56)
      setConditionParam(conditionCRITCHANCE[i], CONDITION_PARAM_BUFF_SPELL, 1)
      setConditionParam(conditionCRITCHANCE[i], CONDITION_PARAM_TICKS, -1)
      setConditionParam(conditionCRITCHANCE[i], CONDITION_PARAM_SKILL_CRITICAL_HIT_CHANCE, 100+i)

      conditionCRITDMG[i] = createConditionObject(CONDITION_ATTRIBUTES)
      setConditionParam(conditionCRITDMG[i], CONDITION_PARAM_SUBID, 57)
      setConditionParam(conditionCRITDMG[i], CONDITION_PARAM_BUFF_SPELL, 1)
      setConditionParam(conditionCRITDMG[i], CONDITION_PARAM_TICKS, -1)
      setConditionParam(conditionCRITDMG[i], CONDITION_PARAM_SKILL_CRITICAL_HIT_DAMAGE, 100+i)

      conditionLIFELEECH[i] = createConditionObject(CONDITION_ATTRIBUTES)
      setConditionParam(conditionLIFELEECH[i], CONDITION_PARAM_SUBID, 58)
      setConditionParam(conditionLIFELEECH[i], CONDITION_PARAM_BUFF_SPELL, 1)
      setConditionParam(conditionLIFELEECH[i], CONDITION_PARAM_TICKS, -1)
      setConditionParam(conditionLIFELEECH[i], CONDITION_PARAM_SKILL_LIFE_LEECH_CHANCE, 100+i)

      conditionLIFELEECHAMM[i] = createConditionObject(CONDITION_ATTRIBUTES)
      setConditionParam(conditionLIFELEECHAMM[i], CONDITION_PARAM_SUBID, 59)
      setConditionParam(conditionLIFELEECHAMM[i], CONDITION_PARAM_BUFF_SPELL, 1)
      setConditionParam(conditionLIFELEECHAMM[i], CONDITION_PARAM_TICKS, -1)
      setConditionParam(conditionLIFELEECHAMM[i], CONDITION_PARAM_SKILL_LIFE_LEECH_AMOUNT, 100+i)

      conditionMANALEECH[i] = createConditionObject(CONDITION_ATTRIBUTES)
      setConditionParam(conditionMANALEECH[i], CONDITION_PARAM_SUBID, 60)
      setConditionParam(conditionMANALEECH[i], CONDITION_PARAM_BUFF_SPELL, 1)
      setConditionParam(conditionMANALEECH[i], CONDITION_PARAM_TICKS, -1)
      setConditionParam(conditionMANALEECH[i], CONDITION_PARAM_SKILL_MANA_LEECH_CHANCE, 100+i)

      conditionMANALEECHAMM[i] = createConditionObject(CONDITION_ATTRIBUTES)
      setConditionParam(conditionMANALEECHAMM[i], CONDITION_PARAM_SUBID, 61)
      setConditionParam(conditionMANALEECHAMM[i], CONDITION_PARAM_BUFF_SPELL, 1)
      setConditionParam(conditionMANALEECHAMM[i], CONDITION_PARAM_TICKS, -1)
      setConditionParam(conditionMANALEECHAMM[i], CONDITION_PARAM_SKILL_MANA_LEECH_AMOUNT, 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)
         local player = Player(cid)
         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(cid, item, slot)
       local player = Player(cid)
         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] > 20 and 20 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
            elseif sl == 'critChance' then
               player:addCondition(conditionCRITCHANCE[tonumber(n)])
               ca[56] = 1
            elseif sl == 'critAmount' then
               player:addCondition(conditionCRITDMG[tonumber(n)])
               ca[57] = 1
            elseif sl == 'leechHp' then
               player:addCondition(conditionLIFELEECH[tonumber(n)])
               ca[58] = 1
            elseif sl == 'leechHpAm' then
               player:addCondition(conditionLIFELEECHAMM[tonumber(n)])
               ca[59] = 1
            elseif sl == 'leechMp' then
               player:addCondition(conditionMANALEECH[tonumber(n)])
               ca[60] = 1
            elseif sl == 'leechMpAm' then
               player:addCondition(conditionMANALEECHAMM[tonumber(n)])
               ca[61] = 1
            end
         end
         if fu > 0 then
            for i = 50, 61 do
               if not ca[i] then
                  doRemoveCondition(player:getId(), CONDITION_ATTRIBUTES, i)
               end
            end
         else
            for i = 50, 61 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


    y para el action, cambias las opciones: local l = choose('hp','mp','ml','melee','shield','dist', 'critChance', 'critAmount', 'leechHp', 'leechHpAm', 'leechMp', 'leechMpAm')

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

    modificas esta linea
    Código:

    local l = choose('hp','mp','ml','melee','shield','dist')

    por esta

    Código:

    local l = choose('hp','mp','ml','melee','shield','dist', 'critChance', 'critAmount', 'leechHp', 'leechHpAm', 'leechMp', 'leechMpAm')

    de igual amnera si usa el action del tema principal o de [Adm] SevuOT como te postee arriba modificas esa linea



    Ver perfil de usuario http://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).