Ir para conteúdo

Featured Replies

Postado

.Qual servidor ou website você utiliza como base?  TFS 1.2

 

Qual o motivo deste tópico?  Olá, boa madrugada.

Bom, é o seguinte, no meu servidor gostaria de colocar o sistema de refinar itens..

Funciona da seguinte maneira, os 'miners/blacksmiths' podem refinar os itens.. (armors/legs/shields/helmets e weapons)

O miner deve usar a pick, nas minas e extrair os iron ore...

Até ai tudo certo..

Porém, para refinar o item, no script você coloca a porcentagem de falha ou de chance para dar certo..

Eu consegui encontrar um script funcional..

Porém, ele tem lá para configurar a chance de falha e tal..

Porém, o certo quando o player "falha no refinamento" o item deve quebrar e virar um metal trash..

E nesse script, não acontece nada quando o player falha, nem exibe a mensagem...

Um amigo meu me passou um server uma vez, que tinha esse sistema, eu dei uma olhada no script e é QUASE igual, porém, o dele era mais completo e tinha a função de "quebrar" o item..

Ai eu testei no meu (TFS 1.2) e apareceu o seguinte erro na distro..

Abaixo estarei disponibilizando os 2 scripts, oque funciona porém nao quebra, e o que faz aparecer o erro na distro, por favor, preciso muito desse script, obrigado família!

 

 

Está surgindo algum erro? Se sim coloque-o aqui. 

  Citar

Lua Script Error: [Action Interface]
data/actions/scripts/refine.lua:onUse
data/actions/scripts/refine.lua:44: attempt to call global 'getItemInfo' (a nil value)
stack traceback:
        [C]: in function 'getItemInfo'
        data/actions/scripts/refine.lua:44: in function <data/actions/scripts/refine.lua:37>

 

Você tem o código disponível? Se tiver publique-o aqui: 

Esse funciona, porém não quebra..
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 = 2, chance = 100}, -- Level do item, quantidade de Iron Ore necessaria, chance de sucesso
    {level = 1, quantOre = 2, chance = 90},
    {level = 2, quantOre = 2, chance = 80},
    {level = 3, quantOre = 2, chance = 0}
}

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().." é + " ..item:getLevel())
                        if atk > 0 then
                            item:setAttribute("attack", atk+(1*item:getLevel()))
                            return true
                        elseif arm > 0 then
                            item:setAttribute("armor", arm+(1*item:getLevel()))
                            return true
                        elseif def > 0 and atk <= 0 then
                            item:setAttribute("defense", def+(1*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

Esse é oque faz dar o erro na distro:
--- Sistema de Upgrade de itens feito por Killua.
--- Sistema feito com base no do Bronson Server.

local vocations = {1, 2, 31, 48, 49, 50} -- Vocações que podem refinar itens

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

local attributes = {{"attack", true}, {"defense", true}, {"armor", false}}

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

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 onUse(cid, item, fromPosition, itemEx, toPosition)
    if not isInArray(vocations, getPlayerVocation(cid)) then
        return doPlayerSendTextMessage(cid,18,'Você precisa ser um Blacksmith para refinar itens.')
    elseif isInArray(ids_bloqueados, itemEx.uid) then
        doPlayerSendTextMessage(cid,18,'Este item não 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", "Ele 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_RED, "Voce refinou com sucesso seu "..getItemNameById(itemEx.itemid).." agora ele esta + " ..getItemLevel(itemEx.uid).. " !")
                      if getItemInfo(itemEx.itemid).attack > 0 then
                          doItemSetAttribute(itemEx.uid, "attack", atk + 1)
                          return true
                      elseif getItemInfo(itemEx.itemid).armor > 0 then
                          doItemSetAttribute(itemEx.uid, "armor", arm + 1)
                          return true
                      elseif getItemInfo(itemEx.itemid).defense > 0 and getItemInfo(itemEx.itemid).attack <= 0 then
                          doItemSetAttribute(itemEx.uid, "defense", def + 1)
                          return true
                      end
                  else
                      doTransformItem(itemEx.uid, 2256)
                      doItemSetAttribute(itemEx.uid, 'name', "metal trash")
                      doItemSetAttribute(itemEx.uid, 'attack', 0)
                      doItemSetAttribute(itemEx.uid, 'armor', 0)
                      doItemSetAttribute(itemEx.uid, 'defense', 0)
                      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce falhou.")
                      return true
                  end
              else
                  doPlayerSendCancel(cid, "Voce nao tem iron ores o suficiente. Voce precisa de "..upgrade.quantOre.." iron ores.")
              end
          end
      end
  else
      doPlayerSendCancel(cid, "Este item nao pode ser refinado.")
  end
  return true
end

 

Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 

 

Postado

@Jonathan01 Tenta assim, usando a primeira script que você mandou:

 

Mostrar conteúdo oculto

 

Postado
  • Autor

Meu parça, funcionou sim, porém quando o refinamento falha, o item tá sumindo, é possivel você arrumar e colocar pro item virar um metal trash? 

 

ID do metal trash

16:24 You see metal trash.
It weighs 3.00 oz.
Item ID: 2256
Position: 1710, 1253, 7

Meu mano, muito obrigado pela força, localizei no script a parte de falha, e achei lá o comando pra transformar em metal trash, ai eu só substitui pelo ID e deu certo, VALEU MANO!

TMJ!

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo