• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua Refin system for 10.90 - TFS 1.2

eduardocosta

New Member
Joined
Aug 27, 2009
Messages
17
Reaction score
0
Guys help me please.

My server is 10.90 tfs 1.2 and I have a problem with:
local vocations = {1, 2, 4, 5, 6, 7, 8} -- Vocações que podem refinar itens

local ids_bloqueados = {2160, 5706, 2463} -- Itens que não podem ser refinados

local controle = {
{level = 0, quantOre = 1, chance = 100}, -- Level do item, quantidade de Iron Ore necessaria, chance de sucesso
{level = 1, quantOre = 2, chance = 90},
{level = 2, quantOre = 3, chance = 80},
{level = 3, quantOre = 4, chance = 70},
{level = 4, quantOre = 5, chance = 60},
{level = 5, quantOre = 6, chance = 50},
{level = 6, quantOre = 7, chance = 40},
{level = 7, quantOre = 8, chance = 30},
{level = 8, quantOre = 9, chance = 20},
{level = 9, quantOre = 10, chance = 10}
}

function getItemLevel(uid)
if uid > 0 then
return getItemAttribute(uid, "lvl") or 0
end
return false
end

function doItemAddLevel(uid, count)
if uid > 0 and tonumber(count) > 0 then
return doItemSetAttribute(uid, "lvl", getItemLevel(uid) + count)
end
return false
end

function getItemDescriptionsById(id)

local it = ItemType(id)

return {attack = it.getAttack(), defense = it.getDefense(), armor = it.getArmor()}

end



function onUse(cid, item, fromPosition, itemEx, toPosition)
if not isInArray(vocations, getPlayerVocation(cid)) then
return doPlayerSendCancel(cid, "Sua vocacao nao pode refinar.")
elseif isInArray(ids_bloqueados, itemEx.uid) then
return doPlayerSendCancel(cid, "Este item nao pode ser refinado.")
end

if getItemInfo(itemEx.itemid).attack > 0 or getItemInfo(itemEx.itemid).defense > 0 or getItemInfo(itemEx.itemid).armor > 0 then
for _, upgrade in pairs(controle) do
local atk = getItemAttribute(itemEx.uid, "attack") or getItemInfo(itemEx.itemid).attack
local def = getItemAttribute(itemEx.uid, "defense") or getItemInfo(itemEx.itemid).defense
local arm = getItemAttribute(itemEx.uid, "armor") or getItemInfo(itemEx.itemid).armor
local chance = math.random(1, 100)
if getItemLevel(itemEx.uid) == upgrade.level then
if doPlayerRemoveItem(cid, 5880, upgrade.quantOre) then
doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_CRAPS)
if chance <= upgrade.chance then
if getItemLevel(itemEx.uid) == 0 then
doItemSetAttribute(itemEx.uid, "description", "Esse item foi refinado por " ..getCreatureName(cid))
end
doItemAddLevel(itemEx.uid, 1)
doItemSetAttribute(itemEx.uid, "name", getItemNameById(itemEx.itemid).. " + " ..getItemLevel(itemEx.uid))
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce refinou com sucesso! Agora seu "..getItemNameById(itemEx.itemid).." eh level " ..getItemLevel(itemEx.uid))
if getItemInfo(itemEx.itemid).attack > 0 then
doItemSetAttribute(itemEx.uid, "attack", atk + 3)
return true
elseif getItemInfo(itemEx.itemid).armor > 0 then
doItemSetAttribute(itemEx.uid, "armor", arm + 3)
return true
elseif getItemInfo(itemEx.itemid).defense > 0 and getItemInfo(itemEx.itemid).attack <= 0 then
doItemSetAttribute(itemEx.uid, "defense", def + 3)
return true
end

end
else
doPlayerSendCancel(cid, "Voce nao tem iron ores o suficiente. Voce precisa de "..upgrade.quantOre.." iron ores.")
end
end
end
else
doPlayerSendCancel(cid, "Esse item nao pode ser refinado.")
end
return true
end

<action itemid="2422" script="refinamento.lua"/>

579f713e8cd52_Semttulo.png.5b07526543646bd503edbcb3f2f2e57d.png
 
Guys help me please.

My server is 10.90 tfs 1.2 and I have a problem with:
local vocations = {1, 2, 4, 5, 6, 7, 8} -- Vocações que podem refinar itens

local ids_bloqueados = {2160, 5706, 2463} -- Itens que não podem ser refinados

local controle = {
{level = 0, quantOre = 1, chance = 100}, -- Level do item, quantidade de Iron Ore necessaria, chance de sucesso
{level = 1, quantOre = 2, chance = 90},
{level = 2, quantOre = 3, chance = 80},
{level = 3, quantOre = 4, chance = 70},
{level = 4, quantOre = 5, chance = 60},
{level = 5, quantOre = 6, chance = 50},
{level = 6, quantOre = 7, chance = 40},
{level = 7, quantOre = 8, chance = 30},
{level = 8, quantOre = 9, chance = 20},
{level = 9, quantOre = 10, chance = 10}
}

function getItemLevel(uid)
if uid > 0 then
return getItemAttribute(uid, "lvl") or 0
end
return false
end

function doItemAddLevel(uid, count)
if uid > 0 and tonumber(count) > 0 then
return doItemSetAttribute(uid, "lvl", getItemLevel(uid) + count)
end
return false
end

function getItemDescriptionsById(id)

local it = ItemType(id)

return {attack = it.getAttack(), defense = it.getDefense(), armor = it.getArmor()}

end



function onUse(cid, item, fromPosition, itemEx, toPosition)
if not isInArray(vocations, getPlayerVocation(cid)) then
return doPlayerSendCancel(cid, "Sua vocacao nao pode refinar.")
elseif isInArray(ids_bloqueados, itemEx.uid) then
return doPlayerSendCancel(cid, "Este item nao pode ser refinado.")
end

if getItemInfo(itemEx.itemid).attack > 0 or getItemInfo(itemEx.itemid).defense > 0 or getItemInfo(itemEx.itemid).armor > 0 then
for _, upgrade in pairs(controle) do
local atk = getItemAttribute(itemEx.uid, "attack") or getItemInfo(itemEx.itemid).attack
local def = getItemAttribute(itemEx.uid, "defense") or getItemInfo(itemEx.itemid).defense
local arm = getItemAttribute(itemEx.uid, "armor") or getItemInfo(itemEx.itemid).armor
local chance = math.random(1, 100)
if getItemLevel(itemEx.uid) == upgrade.level then
if doPlayerRemoveItem(cid, 5880, upgrade.quantOre) then
doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_CRAPS)
if chance <= upgrade.chance then
if getItemLevel(itemEx.uid) == 0 then
doItemSetAttribute(itemEx.uid, "description", "Esse item foi refinado por " ..getCreatureName(cid))
end
doItemAddLevel(itemEx.uid, 1)
doItemSetAttribute(itemEx.uid, "name", getItemNameById(itemEx.itemid).. " + " ..getItemLevel(itemEx.uid))
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce refinou com sucesso! Agora seu "..getItemNameById(itemEx.itemid).." eh level " ..getItemLevel(itemEx.uid))
if getItemInfo(itemEx.itemid).attack > 0 then
doItemSetAttribute(itemEx.uid, "attack", atk + 3)
return true
elseif getItemInfo(itemEx.itemid).armor > 0 then
doItemSetAttribute(itemEx.uid, "armor", arm + 3)
return true
elseif getItemInfo(itemEx.itemid).defense > 0 and getItemInfo(itemEx.itemid).attack <= 0 then
doItemSetAttribute(itemEx.uid, "defense", def + 3)
return true
end

end
else
doPlayerSendCancel(cid, "Voce nao tem iron ores o suficiente. Voce precisa de "..upgrade.quantOre.." iron ores.")
end
end
end
else
doPlayerSendCancel(cid, "Esse item nao pode ser refinado.")
end
return true
end

<action itemid="2422" script="refinamento.lua"/>

579f713e8cd52_Semttulo.png.5b07526543646bd503edbcb3f2f2e57d.png
next time use
Code:
[code]/code]


Code:
local vocations = {1, 2, 4, 5, 6, 7, 8} -- Vocações que podem refinar itens

local ids_bloqueados = {2160, 5706, 2463} -- Itens que não podem ser refinados

local controle = {
    {level = 0, quantOre = 1, chance = 100}, -- Level do item, quantidade de Iron Ore necessaria, chance de sucesso
    {level = 1, quantOre = 2, chance = 90},
    {level = 2, quantOre = 3, chance = 80},
    {level = 3, quantOre = 4, chance = 70},
    {level = 4, quantOre = 5, chance = 60},
    {level = 5, quantOre = 6, chance = 50},
    {level = 6, quantOre = 7, chance = 40},
    {level = 7, quantOre = 8, chance = 30},
    {level = 8, quantOre = 9, chance = 20},
    {level = 9, quantOre = 10, chance = 10}
}

function getItemLevel(uid)
    if uid > 0 then
        return getItemAttribute(uid, "lvl") or 0
    end
    return false
end

function doItemAddLevel(uid, count)
    if uid > 0 and tonumber(count) > 0 then
        return doItemSetAttribute(uid, "lvl", getItemLevel(uid) + count)
    end
    return false
end

function getItemDescriptionsById(id)

local it = ItemType(id)

return {attack = it.getAttack(), defense = it.getDefense(), armor = it.getArmor()}

end



function onUse(cid, item, fromPosition, itemEx, toPosition)
    if not isInArray(vocations, getPlayerVocation(cid)) then
        return doPlayerSendCancel(cid, "Sua vocacao nao pode refinar.")
    elseif isInArray(ids_bloqueados, itemEx.uid) then
        return doPlayerSendCancel(cid, "Este item nao pode ser refinado.")
    end

    if getItemInfo(itemEx.itemid).attack > 0 or getItemInfo(itemEx.itemid).defense > 0 or getItemInfo(itemEx.itemid).armor > 0 then
        for _, upgrade in pairs(controle) do
            local atk = getItemAttribute(itemEx.uid, "attack") or getItemInfo(itemEx.itemid).attack
            local def = getItemAttribute(itemEx.uid, "defense") or getItemInfo(itemEx.itemid).defense
            local arm = getItemAttribute(itemEx.uid, "armor") or getItemInfo(itemEx.itemid).armor
            local chance = math.random(1, 100)
            if getItemLevel(itemEx.uid) == upgrade.level then
               if doPlayerRemoveItem(cid, 5880, upgrade.quantOre) then
                   doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_CRAPS)
                  if chance <= upgrade.chance then
                      if getItemLevel(itemEx.uid) == 0 then
                          doItemSetAttribute(itemEx.uid, "description", "Esse item foi refinado por " ..getCreatureName(cid))
                      end
                      doItemAddLevel(itemEx.uid, 1)
                      doItemSetAttribute(itemEx.uid, "name", getItemNameById(itemEx.itemid).. " + " ..getItemLevel(itemEx.uid))
                      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce refinou com sucesso! Agora seu "..getItemNameById(itemEx.itemid).." eh level " ..getItemLevel(itemEx.uid))
                      if getItemInfo(itemEx.itemid).attack > 0 then
                          doItemSetAttribute(itemEx.uid, "attack", atk + 3)
                          return true
                      elseif getItemInfo(itemEx.itemid).armor > 0 then
                          doItemSetAttribute(itemEx.uid, "armor", arm + 3)
                          return true
                      elseif getItemInfo(itemEx.itemid).defense > 0 and getItemInfo(itemEx.itemid).attack <= 0 then
                          doItemSetAttribute(itemEx.uid, "defense", def + 3)
                          return true
                      end

                  end
              else
                  doPlayerSendCancel(cid, "Voce nao tem iron ores o suficiente. Voce precisa de "..upgrade.quantOre.." iron ores.")
              end
          end
      end
  else
      doPlayerSendCancel(cid, "Esse item nao pode ser refinado.")
  end
  return true
end


did it for u this time, nothing changed in script. i'll take a look at it tomorrow good night
 
pff... you are trying using an old script ?
alots of these functions not exist or were changed in the tfs 1.2 :S
 
Ya lo probe y me funciono perfectamente para tfs 1.2 espero que te funcione :)

Code:
local vocations = {1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12} -- Vocações que podem refinar itens

local ids_bloqueados = {2160, 5706, 2463} -- Itens que não podem ser refinados

local controle = {
    {level = 0, quantOre = 1, chance = 100}, -- Level do item, quantidade de Iron Ore necessaria, chance de sucesso
    {level = 1, quantOre = 2, chance = 90},
    {level = 2, quantOre = 3, chance = 80},
    {level = 3, quantOre = 4, chance = 70},
    {level = 4, quantOre = 5, chance = 60},
    {level = 5, quantOre = 6, chance = 50},
    {level = 6, quantOre = 7, chance = 40},
    {level = 7, quantOre = 8, chance = 30},
    {level = 8, quantOre = 9, chance = 20},
    {level = 9, quantOre = 10, chance = 10}
}

function Item.getLevel(self)
    if self.uid > 0 then
        if self:getAttribute("aid") < 1 then
            return 0
        else
            return (tonumber(self:getAttribute("aid"))-100) or 0
        end
    end
    return false
end

function Item.addLevel(self, count)
    if self.uid > 0 and tonumber(count) > 0 then
        return self:setAttribute("aid", (self:getLevel() + count)+100)
    end
    return false
end

function getItemDescriptionsById(id)
    local it = ItemType(id)
    return {attack = it.getAttack(), defense = it.getDefense(), armor = it.getArmor()}
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local player = Player(cid)

    if not isInArray(vocations, player:getVocation():getId()) then
        return player:sendCancelMessage("Sua vocacao nao pode refinar.")
    elseif isInArray(ids_bloqueados, itemEx.uid) then
        return player:sendCancelMessage("Este item nao pode ser refinado.")
    end

    local atk = ItemType(itemEx.itemid):getAttack() or nil
    local def = ItemType(itemEx.itemid):getDefense() or nil
    local arm = ItemType(itemEx.itemid):getArmor() or nil

    if atk > 0 or def > 0 or arm > 0 then
        for _, upgrade in pairs(controle) do
            local chance = math.random(1, 100)
            local item = Item(itemEx.uid)
            if item:getLevel() == upgrade.level then
                if player:removeItem(5880, upgrade.quantOre) then
                    item:getPosition():sendMagicEffect(CONST_ME_CRAPS)
                    if chance <= upgrade.chance then
                        if item:getLevel() == 0 then
                            item:setAttribute("description", "Esse item foi refinado por " ..player:getName())
                        end
                        item:addLevel(1)
                        item:setAttribute("name", ItemType(itemEx.itemid):getName().. " + " ..item:getLevel())
                        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Voce refinou com sucesso! Agora seu "..ItemType(itemEx.itemid):getName().." eh level " ..item:getLevel())
                        if atk > 0 then
                            item:setAttribute("attack", atk + 3)
                            return true
                        elseif arm > 0 then
                            item:setAttribute("armor", arm + 3)
                            return true
                        elseif def > 0 and atk <= 0 then
                            item:setAttribute("defense", def + 3)
                          return true
                        end
                    end
                else
                    player:sendCancelMessage("Voce nao tem iron ores o suficiente. Voce precisa de "..upgrade.quantOre.." iron ores.")
                end
            end
        end
    else
        player:sendCancelMessage("Esse item nao pode ser refinado.")
    end
  return true
end
 
Last edited:
Ya lo probe y me funciono perfectamente para tfs 1.2 espero que te funcione :)

Code:
local vocations = {1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12} -- Vocações que podem refinar itens

local ids_bloqueados = {2160, 5706, 2463} -- Itens que não podem ser refinados

local controle = {
    {level = 0, quantOre = 1, chance = 100}, -- Level do item, quantidade de Iron Ore necessaria, chance de sucesso
    {level = 1, quantOre = 2, chance = 90},
    {level = 2, quantOre = 3, chance = 80},
    {level = 3, quantOre = 4, chance = 70},
    {level = 4, quantOre = 5, chance = 60},
    {level = 5, quantOre = 6, chance = 50},
    {level = 6, quantOre = 7, chance = 40},
    {level = 7, quantOre = 8, chance = 30},
    {level = 8, quantOre = 9, chance = 20},
    {level = 9, quantOre = 10, chance = 10}
}

function Item.getLevel(self)
    if self.uid > 0 then
        if self:getAttribute("aid") < 1 then
            return 0
        else
            return (tonumber(self:getAttribute("aid"))-100) or 0
        end
    end
    return false
end

function Item.addLevel(self, count)
    if self.uid > 0 and tonumber(count) > 0 then
        return self:setAttribute("aid", (self:getLevel() + count)+100)
    end
    return false
end

function getItemDescriptionsById(id)
    local it = ItemType(id)
    return {attack = it.getAttack(), defense = it.getDefense(), armor = it.getArmor()}
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local player = Player(cid)

    if not isInArray(vocations, player:getVocation():getId()) then
        return player:sendCancelMessage("Sua vocacao nao pode refinar.")
    elseif isInArray(ids_bloqueados, itemEx.uid) then
        return player:sendCancelMessage("Este item nao pode ser refinado.")
    end

    local atk = ItemType(itemEx.itemid):getAttack() or nil
    local def = ItemType(itemEx.itemid):getDefense() or nil
    local arm = ItemType(itemEx.itemid):getArmor() or nil

    if atk > 0 or def > 0 or arm > 0 then
        for _, upgrade in pairs(controle) do
            local chance = math.random(1, 100)
            local item = Item(itemEx.uid)
            if item:getLevel() == upgrade.level then
                if player:removeItem(5880, upgrade.quantOre) then
                    item:getPosition():sendMagicEffect(CONST_ME_CRAPS)
                    if chance <= upgrade.chance then
                        if item:getLevel() == 0 then
                            item:setAttribute("description", "Esse item foi refinado por " ..player:getName())
                        end
                        item:addLevel(1)
                        item:setAttribute("name", ItemType(itemEx.itemid):getName().. " + " ..item:getLevel())
                        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Voce refinou com sucesso! Agora seu "..ItemType(itemEx.itemid):getName().." eh level " ..item:getLevel())
                        if atk > 0 then
                            item:setAttribute("attack", atk + 3)
                            return true
                        elseif arm > 0 then
                            item:setAttribute("armor", arm + 3)
                            return true
                        elseif def > 0 and atk <= 0 then
                            item:setAttribute("defense", def + 3)
                          return true
                        end
                    end
                else
                    player:sendCancelMessage("Voce nao tem iron ores o suficiente. Voce precisa de "..upgrade.quantOre.." iron ores.")
                end
            end
        end
    else
        player:sendCancelMessage("Esse item nao pode ser refinado.")
    end
  return true
end
Nice, you are amazing, but it's almost there, the modified item changes only once, look at the image.
Blacksteel sword was upgraded 2 x , look at the description atk:1203, the normal should be atk :1206, so the second upgrade didn't worked
Sem%2Bt%25C3%25ADtulo.png
 
Listo

Code:
local vocations = {1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12} -- Vocações que podem refinar itens

local ids_bloqueados = {2160, 5706, 2463} -- Itens que não podem ser refinados

local controle = {
    {level = 0, quantOre = 1, chance = 100}, -- Level do item, quantidade de Iron Ore necessaria, chance de sucesso
    {level = 1, quantOre = 2, chance = 90},
    {level = 2, quantOre = 3, chance = 80},
    {level = 3, quantOre = 4, chance = 70},
    {level = 4, quantOre = 5, chance = 60},
    {level = 5, quantOre = 6, chance = 50},
    {level = 6, quantOre = 7, chance = 40},
    {level = 7, quantOre = 8, chance = 30},
    {level = 8, quantOre = 9, chance = 20},
    {level = 9, quantOre = 10, chance = 10}
}

function Item.getLevel(self)
    if self.uid > 0 then
        if self:getAttribute("aid") < 1 then
            return 0
        else
            return (tonumber(self:getAttribute("aid"))-100) or 0
        end
    end
    return false
end

function Item.addLevel(self, count)
    if self.uid > 0 and tonumber(count) > 0 then
        return self:setAttribute("aid", (self:getLevel() + count)+100)
    end
    return false
end

function getItemDescriptionsById(id)
    local it = ItemType(id)
    return {attack = it.getAttack(), defense = it.getDefense(), armor = it.getArmor()}
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local player = Player(cid)

    if not isInArray(vocations, player:getVocation():getId()) then
        return player:sendCancelMessage("Sua vocacao nao pode refinar.")
    elseif isInArray(ids_bloqueados, itemEx.uid) then
        return player:sendCancelMessage("Este item nao pode ser refinado.")
    end

    local atk = ItemType(itemEx.itemid):getAttack() or nil
    local def = ItemType(itemEx.itemid):getDefense() or nil
    local arm = ItemType(itemEx.itemid):getArmor() or nil

    if atk > 0 or def > 0 or arm > 0 then
        for _, upgrade in pairs(controle) do
            local chance = math.random(1, 100)
            local item = Item(itemEx.uid)
            if item:getLevel() == upgrade.level then
                if player:removeItem(5880, upgrade.quantOre) then
                    item:getPosition():sendMagicEffect(CONST_ME_CRAPS)
                    if chance <= upgrade.chance then
                        if item:getLevel() == 0 then
                            item:setAttribute("description", "Esse item foi refinado por " ..player:getName())
                        end
                        item:addLevel(1)
                        item:setAttribute("name", ItemType(itemEx.itemid):getName().. " + " ..item:getLevel())
                        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Voce refinou com sucesso! Agora seu "..ItemType(itemEx.itemid):getName().." eh level " ..item:getLevel())
                        if atk > 0 then
                            item:setAttribute("attack", atk+(3*item:getLevel()))
                            return true
                        elseif arm > 0 then
                            item:setAttribute("armor", arm+(3*item:getLevel()))
                            return true
                        elseif def > 0 and atk <= 0 then
                            item:setAttribute("defense", def+(3*item:getLevel()))
                          return true
                        end
                    end
                else
                    player:sendCancelMessage("Voce nao tem iron ores o suficiente. Voce precisa de "..upgrade.quantOre.." iron ores.")
                end
            end
        end
    else
        player:sendCancelMessage("Esse item nao pode ser refinado.")
    end
  return true
end
 
Back
Top