• 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:
    '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

    vine96

    avatar
    Nuevo Miembro
    Nuevo Miembro
    Not working in tfs 1.2 and tfs 1.3
    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 functio

    Ver perfil de usuario

    daneraots

    avatar
    Nuevo Miembro
    Nuevo 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

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