Ir para conteúdo

Slot System


fokus090

Posts Recomendados

Olá Galerinha do :XTibia_smile: , estou precisando MUITO desse script e gostaria que vocês me ajuda-se nessa. Segue Abaixo ::

 

:: Slot System ::

by: Mock

Eu gostaria que vocês me ajuda-se a modificar este script. As modificações são ::

 


  •  
  • Retirar a Porcentagem(%) na hora de colocar um atributo no Item.
  • Retirar o sistema "Aleatório" na hora de aprimorar o Item.

 

Quando eu coloco um atributo no Item aparece em forma de porcentagem.

Ex :: 11%Hp / 5%Mp ...

 

Gostaria que fosse apenas assim ::

Ex :: +50Hp / + 50Mp ...

 

 

E na hora de colocar atributo no Item, apenas o Item com ID : 8300 é usado para aprimora-lo. Fazendo com que o aprimoramento seja aleatório.

 

Ex :: Você sendo um Knight, ao aprimorar seu Item, pode acabar vindo Magic Level.

Gostaria que Items diferentes desse um determinado atributo.

Ex:

:: Item ID: 0001 = Desse +50HP

:: Item ID: 0002 = Desse +50MP

:: Item ID: 0003 = Desse +1 de Sword Fighting

 

E assim vai ...

 

Para ajudar, aí vai o Script completo do Slot System.

 

 

 

Actions.xml

<action itemid="8300" event="script" value="slot.lua"/>

 

 

--[[
Slot system 100% by mock \o
]]
---Config
local conf = {
maxSlotCount=2,
ignoredIds={}
}
--End
function choose(...) --- Function by mock.
  local arg = {...}
  return arg[math.random(1,#arg)]
end
if not getItemAttack then
  function getItemAttack(uid)
     return getItemAttribute(uid,'attack')
  end
  function getItemDefense(uid)
     return getItemAttribute(uid,'defense')
  end
end
local function isArmor(uid) -- Function by Mock the bear.
   if (getItemInfo(uid.itemid).armor ~= 0) and (getItemWeaponType(uid.uid) == 0) then
     return true
  end
  return false
end
local function isWeapon(uid) -- Function by Mock the bear.
  uid = uid or 0
  local f = getItemWeaponType(uid)
  if f == 1 or f == 2 or f == 3 then
     return true
  end
  return false
end
local function isShield(uid) -- Function by Mock the bear.
  uid = uid or 0
  if getItemWeaponType(uid) == 4 then
     return true
  end
  return false
end
local function isBow(uid) -- Function by Mock the bear.
  uid = uid or 0
  if getItemWeaponType(uid) == 5 and not isItemStackable(uid) then
     return true
  end
  return false
end
function onUse(cid, item, fromPosition, itemEx, toPosition) -- Script by mock the bear (MTB)
  if item.uid == 0 or item.itemid == 0 then return false end
  toPosition.stackpos = 255
  if item.uid == 0 or item.itemid == 0 then return false end
  toPosition.stackpos = 255
   if isInArray(conf.ignoredIds, itemEx.itemid)
       or (not getItemWeaponType(itemEx.uid) or getItemWeaponType(itemEx.uid) > 5)
       or (getItemWeaponType(itemEx.uid) == 0 and not isArmor(itemEx))
       or itemEx.itemid == 0 or itemEx.type > 1 or isItemStackable(itemEx.uid) then
       doPlayerSendTextMessage(cid, 24,"You cant open a slot on this item.")
       return TRUE
   end
   if isCreature(itemEx.uid) then
       return FALSE
   end
  local nam = getItemName(itemEx.uid)
  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','cas','shield','dist')
     local p = getper()

     doSendMagicEffect(toPosition,30)
     nam = nam..' ['..l..'.+'..p..'%]'
     doSendAnimatedText(toPosition,l..' '..p..'%',120)
     doItemSetAttribute(itemEx.uid,'name',nam)
     doRemoveItem(item.uid,1)
  else
     doPlayerSendTextMessage(cid, 24,"You cant open a slot on this item.")
  end
  return true
end

Creaturescript.xml

<event type="login" name="SlotLogin" script="slot.lua"/>

 

 

 ---Script by mock the bear!
local conditionMP,conditionHP,conditionML,conditionCLUB,conditionSHI,conditionDIST,conditionAMP = {},{},{},{},{},{},{}
for i=1,100 do ---Carrega as conditions
  --- HP
  conditionHP[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionHP[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionHP[i], CONDITION_PARAM_STAT_MAXHEALTHPERCENT, 100+i)
  setConditionParam(conditionHP[i], CONDITION_PARAM_BUFF, true)
  setConditionParam(conditionHP[i], CONDITION_PARAM_SUBID, 50)
  --MANA
  conditionMP[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionMP[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionMP[i], CONDITION_PARAM_STAT_MAXMANAPERCENT, 100+i)
  setConditionParam(conditionMP[i], CONDITION_PARAM_BUFF, true)
  setConditionParam(conditionMP[i], CONDITION_PARAM_SUBID, 51)
  --Magic level
  conditionML[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionML[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionML[i], CONDITION_PARAM_STAT_MAGICLEVELPERCENT, 100+i)
  setConditionParam(conditionML[i], CONDITION_PARAM_BUFF, true)
  setConditionParam(conditionML[i], CONDITION_PARAM_SUBID, 52)
  --club axe sword
  conditionCLUB[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_SKILL_CLUBPERCENT, 100+i)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_SKILL_SWORDPERCENT, 100+i)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_SKILL_AXEPERCENT, 100+i)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_BUFF, true)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_SUBID, 53)
  --- shield
  conditionSHI[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionSHI[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionSHI[i], CONDITION_PARAM_SKILL_SHIELDPERCENT, 100+i)
  setConditionParam(conditionSHI[i], CONDITION_PARAM_BUFF, true)
  setConditionParam(conditionSHI[i], CONDITION_PARAM_SUBID, 54)
  --- dist
  conditionDIST[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionDIST[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionDIST[i], CONDITION_PARAM_SKILL_DISTANCEPERCENT, 100+i)
  setConditionParam(conditionDIST[i], CONDITION_PARAM_BUFF, true)
  setConditionParam(conditionDIST[i], CONDITION_PARAM_SUBID, 55)
end
function getSlotType(n) --By mock the bear
  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 t = {}
  for slot=1,9 do
     t[slot] = ''

     local s = getPlayerSlotItem(cid,slot).uid
     if s ~= 0 then
        t[slot] = getItemName(s)
     end
  end
  return t
end
function isInArray2(arr,var) -- Because in some servers it return 1 and 0 and others true and false
  for i,b in pairs(arr) do
     if var == b then
        return true
     end
  end
  return false
end
function check2(cid,i)
  if i == 5 or i == 6 then
     if isInArray({'head','necklace','backpack','body','legs','feet','ring'},getItemValue(getPlayerSlotItem(cid,i).itemid,'slotType') or '') then
        return false
     end
  end
  return true
end
function chk(cid,f)
  if not isPlayer(cid) then return end
  local t = loadSet(cid)
  for i=1,#f do
     if f[i] ~= t[i] then
        equip(cid,nil,slot)
        break
     end
  end
  addEvent(chk,2000,cid,t)
end
items = { ---- Only to get attr: slotType because getItemName dont return it -.-'
  _VERSION='1.0 By mock',
  XML_DIR='data/items/items.xml',
  }
do
  local ia = os.clock()
  io.write('Loading items')
  local i = io.open(items.XML_DIR,'r')
  local u = i:read(-1)
  i:close()
  local u = u:match('<items>(.+)</items>')
  for mi,id,mid,name,data,me in u:gmatch('<(%a-)%s*id%s*=%s*"(%d+)"%s*(.-)%s*name%s*=%s*"(.-)"%s*>(.-)</(%a*)>') do
     if mi == 'item' and me == 'item' then
        local td = {name=name,id=id,type=1}
        for key,value in data:gmatch('<attribute key="(.-)" value="(.-)"/>') do
           td[key] = value
        end
        for key,value in mid:gmatch('(.-)="(.-)"') do
           td[key] = value
        end
        items[tonumber(id)] = td

        items[name] = td
     end
  end
  for mi,id,mid,name,data in u:gmatch('<(%a-)%s*id%s*=%s*"(%d*)"%s*(.-)%s*name%s*=%s*"(%a+)"%s*/>') do
     if mi == 'item' then
        local td = {name=name,id=id,type=2}
        for key,value in mid:gmatch('(.-)="(.-)"') do
           td[key] = value
        end
        items[tonumber(id)] = td
        items[name] = td
     end
  end
  io.write('[done '..os.clock()-ia..']\n')
end
function getItemValue(item,value)
  return items[item] and items[item][value]
end
function equip(cid,item,slot) --By mock the bear
  local HP = getCreatureHealth(cid)
  local MP = getCreatureMana(cid)
  local t = {}
  if item then
     local mm,sinal,qto = getSlotType(getItemName(item.uid))
     t[mm] = tonumber(qto)
  end
  for i=1,9 do -- Not on slot 10 > arrow
     if i ~= slot then
        if getPlayerSlotItem(cid,i).itemid ~= 0 then
           local aab = getPlayerSlotItem(cid,i).uid
           if aab and check2(cid,i) then
              for _ in getItemName(aab):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] > 100 and 100 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
        doAddCondition(cid,conditionHP[tonumber(n)])
        doCreatureAddHealth(cid,HP-getCreatureHealth(cid))
        ca[50] = 1
        doPlayerSendTutorial(cid,19)
     elseif sl == 'mp' then
        doAddCondition(cid,conditionMP[tonumber(n)])
        doCreatureAddMana(cid,HP-getCreatureMana(cid))
        ca[51] = 1
        doPlayerSendTutorial(cid,19)
     elseif sl == 'ml' then
        doAddCondition(cid,conditionML[tonumber(n)])
        ca[52] = 1
     elseif sl == 'cas' then
        doAddCondition(cid,conditionCLUB[tonumber(n)])
        ca[53] = 1
     elseif sl == 'shield' then
        doAddCondition(cid,conditionSHI[tonumber(n)])
        ca[54] = 1
     elseif sl == 'dist' then
        doAddCondition(cid,conditionDIST[tonumber(n)])
        ca[55] = 1
     end
  end
  if fu > 0 then
     addEvent(doPlayerSendTextMessage,100,cid,24,'You have:\n'..s)
     for i=50,55 do
        if not ca[i] then
           doRemoveCondition(cid,CONDITION_ATTRIBUTES,i)
        end
     end
  else
     for i=50,55 do
        doRemoveCondition(cid,CONDITION_ATTRIBUTES,i)
     end
  end
  return true
end
function onLogin(cid) ---Script by mock the bear!
       equip(cid,nil,slot)
       addEvent(chk,2000,cid,loadSet(cid)) -- Here we check!
       return TRUE
end

 

Já vii esse sistema em alguns OTservs, e desdo dia em que a vii, ando a procura por esse script. mas até agora, não tive muita sorte. Espero contar com a ajuda de vocês.

 

Abraços a Todos !! :smile_positivo:

Editado por Frenesy
Link para o comentário
Compartilhar em outros sites

  • 3 months later...
×
×
  • Criar Novo...