Ir para conteúdo
  • Cadastre-se

Normal Problema para remover atributo do slot system


Posts Recomendados

Boa noite pessoas,

 

Coloquei no servidor o sistema de slots do mock (abaixo segue o script). O sistema funcionou normalmente, mas precisava também de um item que removesse só o ultimo atributo fornecido pelo slot system...

Achei um script, mas ele só remove todos, e eu queria um que removesse apenas o ultimo...

 

Seguem os scripts:

 

Slot (action)

Spoiler

 
--[[
Slot system 100% by mock \o
]]
---Config
local conf = {
maxSlotCount=3,
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','melee','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

 

 

Slot (Creaturescript)

Spoiler

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

 

Remover Slot (action)

Spoiler

---Config
local conf = {
maxSlotCount=2,
ignoredIds={}
}
--End
function choose(...) 
        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
local function getWeaponLevel(uid) -- Function by Mock the bear.
uid = uid or 0
local name = getItemName(uid.uid) or getItemInfo(uid.itemid).name or ''
local lvl = string.match(name,'%s%+(%d+)%s*')
return tonumber(lvl) or 0
end
function onUse(cid, item, fromPosition, itemEx, toPosition) 
        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
        doPlayerSendCancel(cid, "You cant reset this item.")
        return TRUE
    end
    if isCreature(itemEx.uid) then
        return FALSE
    end
 
       local level = getWeaponLevel(itemEx)    
        if level > 0 then
upgrade = refine        
                doSendMagicEffect(toPosition,30)
                setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level))
doPlayerSendCancel(cid, "All slots were removed.")         
                doRemoveItem(item.uid,1)
        else  
                doSendMagicEffect(toPosition,30)
setItemName(itemEx.uid, getItemNameById(itemEx.itemid))
                doPlayerSendCancel(cid, "All slots were removed.")
       doRemoveItem(item.uid,1)
        end
        return true
end  

 

Agradeço desde ja e fico no aguardo

Link para o post
Compartilhar em outros sites
  • 2 weeks later...
Em 2017-5-16 ás 06:37, Mirkaan disse:

doRemoveCondition(cid,CONDITION_ATTRIBUTES,i)

 

1 - O sistema é o seguinte.. você usa certo item nas armas e eles dao até 3 atributos em cada parte do set (shield, hp, mp, distance e melee).Este sistema está funcionando perfeitamente.

 

2 - No script abaixo, é um outro item que reseta todos esses atributos fornecidos pelo sistema acima... Porém ele tira todos os 3 atributos, e eu queria que ele apenas removesse o ultimo... Caso o player quisesse remover todos ele teria que usar 3 itens desse para resetar totalmente os atributos do item fornecidos pelo sistema acima...

 

 

Coloquei isso e não mudou em nada... Ele continua removendo os três atributos..

Link para o post
Compartilhar em outros sites
  • 2 weeks later...

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por Jaurez
      .
    • Por Cat
      Em alguns casos, o tibia 8.60 comum não abre de jeito nenhum no map editor, mesmo desmarcando check file signatures e configurando o path corretamente.
       
      Este é o client 8.60 adaptado para o Remere's Map Editor. Resolvi postar já que ele foi removido do site oficial do RME. (ficou apenas a versão para linux lá)
      Se estiver tendo problemas para abrir a versão 8.60, tente utilizar este.
                                                                                                                     
      Baixar o Tibia Client 8.60 que funciona no Remere’s Map Editor
      Essa versão do Tibia 8.60 client resolve o erro unsupported client version ou Could not locate tibia.dat and/or tibia.spr, please navigate to your tibia 8.60 installation folder.
       
      Downloads
      https://tibiaking.com/applications/core/interface/file/attachment.php?id=47333

      Scan: https://www.virustotal.com/gui/file/333e172ac49ba2028db9eb5889994509e7d2de28ebccfa428c04e86defbe15cc
       
    • Por danilo belato
      Fala Galera To Com um problema aki 
       
      quero exporta umas sprites de um server para colocar em outro 
       
      eu clico na sprites ai aparece tds a forma delas do lado de la >>
       
      ai eu clico nela e ponho a opiçao de export mais quando salvo a sprite ela n abri 
       
      aparece isso quando tento vê-la 
       
      visualização não disponível ( no formatos png e bitmap)
       
      Agora no formato idc fala que o paint n pode ler 
       
      me ajudem ae...
    • Por Vitor Bicaleto
      Galera to com o script do addon doll aqui, quando eu digito apenas "!addon" ele aparece assim: Digite novamente, algo está errado!"
      quando digito por exemplo: "!addon citizen" ele não funciona e não da nenhum erro
       
      mesma coisa acontece com o mount doll.. 
    • Por Ayron5
      Substitui uma stone no serve, deu tudo certo fora  esse  erro ajudem  Valendo  Rep+  Grato  

      Erro: data/actions/scripts/boost.lua:557: table index is nil
       [Warning - Event::loadScript] Cannot load script (data/actions/scripts/boost.lua)

      Script:
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo