Ir para conteúdo

Arrumar uma coisinha


gabriel28

Posts Recomendados

O membro zipter98 fez um action de item que dar bônus de reflect ao usar em outro item, quando usado no item, fica, You see a demon helmet ref 2% (def:10). Só que, uso um sistema de upgrade item, que deixa o item +1, +2, etc... ficando You see a demon helmet +1 (def:10). Dai, quando o item já está +1 e coloco bônus de reflect, a irformação que o item está +1 some dando lugar a informação que o item está com reflect, o mesmo acontece quando o item já tem reflect e eu ponho ele +1. Dessa forma fica ruim a comercialização desses itens e terei que acabar optando por um dos dois sistemas. Gostaria de saber se tem alguém que consiga dar essa ajuda, que consiga deixar o item da seguinte forma, You see a demon helmet +1 ref 2% (def:10).

 

Segue o script do zipter98:

 

 

 

Action:

local config = {
    reflectBonus = 2,               --Bônus de reflect, em %.
    failChance = 50,                --Chance de falhar, em porcentagem.
    types = {"armor", "legs", "helmet", "boots"},
    noReflect = {1, 2, 3, 5, 6}     --Tipos de armamento bloqueados (valores podem ser conferidos em 000-constant.lua, data/lib)
}
function onUse(cid, item, fromPos, itemEx, toPos)
    if itemEx.itemid < 100 then
        return doPlayerSendCancel(cid, "Use this in valid itens.")
    elseif isInArray(config.noReflect, getItemWeaponType(itemEx.uid)) then
        return doPlayerSendCancel(cid, "Use this in valid itens.")
    elseif getItemAttribute(itemEx.uid, "reflect") then
        return doPlayerSendCancel(cid, "This item has already a reflect bonus.")
    elseif math.random(1, 100) > config.failChance then
        return doPlayerSendTextMessage(cid, 27, "Sorry, your item didn't get a reflect bonus. Good luck at the next try! =]"), doRemoveItem(item.uid, 1)
    end
    local checkItemName
    for i = 1, #config.types do
        if getItemNameById(itemEx.itemid):find(config.types[i]) then
            checkItemName = true
            break
        end
    end
    if not checkItemName then
        return doPlayerSendCancel(cid, "Use this in valid itens.")
    end
    doPlayerSendTextMessage(cid, 27, "Congratulations, now your item has a reflect bonus of "..config.reflectBonus.."%!")
    doItemSetAttribute(itemEx.uid, "reflect", config.reflectBonus)
    doItemSetAttribute(itemEx.uid, "name", getItemNameById(itemEx.itemid).." ref "..config.reflectBonus.."%")
    doRemoveItem(item.uid, 1)
    return true
end

Creaturescript:

function onStatsChange(cid, attacker, type, combat, value)
    if isPlayer(cid) and isCreature(attacker) and type == STATSCHANGE_HEALTHLOSS then
        local bonusReflect = 0
        for i = 1, 10 do
            local item = getPlayerSlotItem(cid, i).uid
            if item > 0 and getItemAttribute(item, "reflect") then
                bonusReflect = bonusReflect + getItemAttribute(item, "reflect")
            end
        end
        if bonusReflect > 0 then
            local damage = value * bonusReflect / 100
            doSendAnimatedText(getThingPos(attacker), -damage, COLOR_RED)
            doCreatureAddHealth(attacker, -damage)
        end
    end
    return true
end

 

 


up

Link para o comentário
Compartilhar em outros sites

Qual seu sistema de upgrade?

Uso esses dois juntos:

 

http://www. tibiaking. com/forum/topic/11580-perfect-upgrade-system/

http://www.xtibia.com/forum/topic/230308-sdt-itens-ganhando-exp-e-upando-upgrade-system/

 

Também tenho o sistema de slot sistem, que funciona normal com o de upgrade, deixando o item dessa forma: You see a demon helmet +1 [hp 4%] (def: 10).

 

Vai o script:

 

 

 

  --[[
Slot system 100% by mock \o
]]
---Config
local conf = {
maxSlotCount=1,
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
        doPlayerSendCancel(cid, "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..'%]'
                doItemSetAttribute(itemEx.uid,'name',nam)
                doRemoveItem(item.uid,1)
        else
                doPlayerSendCancel(cid, "You cant open a slot on this item.")
        end
        return true
end  

 

 

up

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

Troque:

doItemSetAttribute(itemEx.uid, "name", getItemNameById(itemEx.itemid).." ref "..config.reflectBonus.."%")

por:

doItemSetAttribute(itemEx.uid, "name", getItemName(itemEx.uid).." ref "..config.reflectBonus.."%")

Link para o comentário
Compartilhar em outros sites

 

Troque:
doItemSetAttribute(itemEx.uid, "name", getItemNameById(itemEx.itemid).." ref "..config.reflectBonus.."%")
por:
doItemSetAttribute(itemEx.uid, "name", getItemName(itemEx.uid).." ref "..config.reflectBonus.."%")

 

 

Funcionou. Quando o item ta +1, ele acrescenta o ref 2% direitinho, o problema é quando já ta com ref e poem +1, dando o mesmo problema de substituir o ref pelo +1. Mas creio que eu consiga resolver isso trocando todos os item.uid, dos script de upgrade item, por itemEx.uid .

 

EDIT: Não deu certo. haha

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

  • 3 weeks later...

O tópico foi fechado e movido para lixeira por estar inativo a mais de 10 dias. Caso seja preciso reabrir o mesmo, favor entrar em contato com a equipe.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...