• TibiaFace

    Tibiaface | Una comunidad Open Tibia donde encontras : mapas, scripts, Otserver, npc y amigos etc ...

    .
    demo menumenu

    Afiliados



    Votar:

    Error Actions

    Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje (Página 1 de 1.)

    1default Error Actions el Lun Dic 04, 2017 6:01 am

    Mi Problema:
    Buenas
    Estoy usando este Actions de Upgrade item
    pero cuando lo utilizo en cualquer bow/o crossbow
    solo le aumenta la def es decir


    ATK 3 DEF 3
    +3 (ATK 3 DEF 6)

    Código:
    --- Perfect refine system by Mock the bear (MTB).
    --- Email: [email]mock_otnet@hotmail.com[/email]
    -- &a = weapon attack
    -- &d = weapon defense
    -- &s = shield defense
    -- &p = armor defense
    -- # = nivel do item
    -- @ = max level
    local gain = {
    gainArmor='&p+(1)',loseArmor='&p-(1)',
    gainShield='&s+#',loseShield='&s-(#+1)',
    gainAttack='&a+(1*(#))',loseAttack='&a-(1*(#+1))',
    gainDefense='&d+(1*(#))',loseDefense='&d-(1*(#+1))',
    chance='(100/math.sqrt((((@/4)+(#*2))/@)*#))',
    maxlvl = 3,
    blocked_ids = {8881}
    }
    local it = {
    --[itemid] = [percent]
    [8306] = 0, -- 0% additional
    [2270] = 100, -- 50%
    }
    if not setItemName then
        function setItemName(uid,name)
            return doItemSetAttribute(uid,'name',name)
        end
        function setItemArmor(uid,name)
            return doItemSetAttribute(uid,'armor',name)
        end
        function setItemDefense(uid,name)
            return doItemSetAttribute(uid,'defense',name)
        end
        function setItemAttack(uid,name)
            return doItemSetAttribute(uid,'attack',name)
        end
        function getItemAttack(uid)
            return getItemAttribute(uid,'attack')
        end
        function getItemDefense(uid)
            return getItemAttribute(uid,'defense')
        end
    function getItemArmor(uid)
       if type(uid) == 'number' then
          return getItemAttribute(uid,'armor')
       else
          return getItemInfo(uid.itemid).armor
       end
    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 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
    local function doTransform(s,i) -- Function by Mock the bear.
        local c = string.gsub(s,'@',gain.maxlvl)
        local c = string.gsub(c,'&a',(getItemAttack(i.uid) ~= 0 and getItemAttack(i.uid) or getItemInfo(i.itemid).attack))
        local c = string.gsub(c,'&d',(getItemDefense(i.uid) ~= 0 and getItemDefense(i.uid) or getItemInfo(i.itemid).defense))
        local c = string.gsub(c,'&s',(getItemDefense(i.uid) ~= 0 and getItemDefense(i.uid) or getItemInfo(i.itemid).defense))
        local c = string.gsub(c,'&p',(getItemArmor(i.uid) ~= 0 and getItemArmor(i.uid) or getItemInfo(i.itemid).armor))
        local c = string.gsub(c,'#',getWeaponLevel(i))
        local q =  assert(loadstring('return '..c))
        return math.floor(assert(q()))
    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(gain.blocked_ids, 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 refine this item.")
                    return TRUE
             end
             if isCreature(itemEx.uid) == TRUE then
                return FALSE
             end
            local level = getWeaponLevel(itemEx)
            local chance = doTransform(gain.chance,itemEx)
            if level == gain.maxlvl then
                doSendMagicEffect(toPosition, 2)
                return doPlayerSendTextMessage(cid, 24,"Your item is on max level, you can't upgrade it.")
            end
            doPlayerSendTextMessage(cid, 24,"Trying refine with "..(chance+it[item.itemid] > 100 and 100 or chance+it[item.itemid]).."% of sucess!")
            if chance+it[item.itemid] >= math.random(0,100) then
                local nm = getItemName(itemEx.uid)
                local slot = nm:match('(%[.+%])') or '' ---If you server use slot system dont change it ^^
                slot = slot~='' and ' '..slot or slot
                setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level+1)..slot)
                addEvent(doPlayerSendTextMessage,500,cid, 24,"Your item has been upgrated to +"..(level+1)..slot..".")
                doSendMagicEffect(toPosition, 12)
                if isArmor(itemEx) then
                    local get = doTransform(gain.gainArmor,itemEx)
                    setItemArmor(itemEx.uid,get)
                elseif isBow(itemEx.uid) then
                    setItemAttack(itemEx.uid, doTransform(gain.gainAttack,itemEx))
                elseif isWeapon(itemEx.uid) then
                    setItemAttack(itemEx.uid, doTransform(gain.gainAttack,itemEx))
                    setItemDefense(itemEx.uid, doTransform(gain.gainDefense,itemEx))
                elseif isShield(itemEx.uid) then
                    setItemDefense(itemEx.uid, doTransform(gain.gainShield,itemEx))
                end
            else
                if level == 0 then
                    addEvent(doPlayerSendTextMessage,500,cid, 24,"No effect.")
                    doSendMagicEffect(toPosition, 2)
                elseif level > 0 then
                local nm = getItemName(itemEx.uid)
                local slot = nm:match('(%[.+%])') or '' ---If you server use slot system dont change it ^^
                    slot = slot~='' and ' '..slot or slot
                    if level == 1 then
                        setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..slot)
                        addEvent(doPlayerSendTextMessage,500,cid, 24,"Your item back to normal.")
                    else
                        setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level-1)..slot)
                        addEvent(doPlayerSendTextMessage,500,cid, 24,"Your item back to +"..(level-1)..slot..".")
                    end
                    if isArmor(itemEx) then
                        setItemArmor(itemEx.uid,doTransform(gain.loseArmor  ,itemEx))
                    elseif isWeapon(itemEx.uid) then
                        setItemAttack(itemEx.uid, doTransform(gain.loseAttack,itemEx))
                        setItemDefense(itemEx.uid, doTransform(gain.loseDefense,itemEx))
                    elseif isBow(itemEx.uid) then
                        setItemAttack(itemEx.uid, doTransform(gain.loseAttack,itemEx))
                    elseif isShield(itemEx.uid) then
                        setItemDefense(itemEx.uid, doTransform(gain.loseShield,itemEx))
                    end
                end
                doSendMagicEffect(toPosition, 9)
            end
        doRemoveItem(item.uid,1)
        return true
    end
     

    Bueno les agradecería su ayuda


    Imagen de mi error:


    Esta en:
    Consola

    Ver perfil de usuario

    2default Re: Error Actions el Lun Dic 04, 2017 7:00 pm

    [Admin] God Maya

    avatar
    Administrador
    Administrador
    creo que el problema de tu scripts esta aqui



    Código:
    local function isShield(uid) -- Function by Mock the bear.
        uid = uid or 0
        if getItemWeaponType(uid) == 4 then  -------> el shield lo esta tomando como bow
            return true
        end
        return false
    end
    local function isBow(uid) -- Function by Mock the bear.
        uid = uid or 0
        if getItemWeaponType(uid) == 5 then  -------> y el bow lo esta tomando como shield
            return true
        end
        return false
    end


    remplazalo por:


    Código:
    local function isShield(uid) -- Function by Mock the bear.
        uid = uid or 0
        if getItemWeaponType(uid) == 5 then
            return true
        end
        return false
    end
    local function isBow(uid) -- Function by Mock the bear.
        uid = uid or 0
        if getItemWeaponType(uid) == 4 then
            return true
        end
        return false
    end



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

    3default Re: Error Actions el Lun Dic 04, 2017 7:28 pm

    Funciono Gracias

    Ver perfil de usuario

    4default Re: Error Actions el Lun Dic 04, 2017 7:37 pm

    [Admin] God Maya

    avatar
    Administrador
    Administrador
    Resuelto



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