• 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

    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:
    'The Hunger',


    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




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

    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.