Ir para conteúdo

Featured Replies

Postado

Olá pessoal, utilizo a versão TFS 0.4 para meu Baiak

 

O problema é o seguinte, estava fazendo um código em weapons para fazer o dano de Paladin, e queria pegar o dano do Bow para ser somado junto com o dano da munição utilizada, porem a função getItemAttribute está me retornando null, se podem me ajudar, ficarei grato!

 

Não está surgindo nenhum erro de código, apenas retornando null. 

 

O código que estou utilizando em weapons/script/distance.lua

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 0)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 0)
setCombatParam(combat, COMBAT_PARAM_TYPE, 1)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 2)
 
 
function onGetFormulaValues(cid, level, skill, attack, factor)
    local arma = getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid

    if arma ~= 0 then
        if getItemWeaponType(arma) ~= 4 then
            arma = getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid
        end
    else
        arma = getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid
    end
    danoArma = getItemAttribute(arma, 'attack') 
    print(type(danoArma)) -- print apenas para ver o que é retornado (null neste caso)
    
    min = -(((attack * 5) + (skill * 0.5) + (level * 0.04)) / factor)
    max = -(((attack * 5) + (skill * 0.8) + (level * 0.06)) / factor)
    return min, max
end
 
 
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
 
 
function onUseWeapon(cid, var)
    local ret = doCombat(cid, combat, var)
    if(ret == LUA_ERROR) then
        return LUA_ERROR
    end
    return true
end 

REP+ para quem me dar essa luz! =D

 

Editado por Balkalima (veja o histórico de edições)

Resolvido por Storm

Ir para solução
  • Respostas 6
  • Visualizações 849
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • @Balkalima Tirei aquele print(type) e mudei algumas outras coisas, tenta ai: function onGetFormulaValues(cid, level, skill, attack, factor) local arma = getPlayerSlotItem(cid, CONST_SLOT_LEFT)

Postado

@Balkalima Tenta assim:

function onGetFormulaValues(cid, level, skill, attack, factor)
	local arma = getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid
	
	if arma ~= 0 then
		if getItemWeaponType(arma) ~= 4 then
			local arma = getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid
		end
	else
		local arma = getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid
	end
	local danoArma = getItemAttribute(arma, 'attack') 
	print(type(danoArma)) -- print apenas para ver o que é retornado (null neste caso)
	
	min = -(((attack * 5) + (skill * 0.5) + (level * 0.04)) / factor)
	max = -(((attack * 5) + (skill * 0.8) + (level * 0.06)) / factor)
	return min, max
end

 

Postado
  • Autor

@Storm  continua retornando null.

 

Uma pergunta o uid não deve ser o ID do item, certo? Pois para eu conseguir o id do item eu teria que usar .itemid, ao inves de .udi, mas o método getItemAttribute aceita apenas uid.

 

O uid retornado é 70000 e o ID do item que estou utilizando para teste é 8858.

 

 

~ Edit 1

 

Acabei de ler sobre o uid, então creio estar certo utilizar o UID.

Editado por Balkalima (veja o histórico de edições)

Postado

@Balkalima Tenta usar aspas duplas ao invés de usar a aspa simples e vê se funciona.

 

Tava pesquisando aqui, vê se no seu servidor existe a função getItemAttack e usa ela no lugar do getItemAttribute

local danoArma = getItemAttack(arma)

 

Se não tiver a função, aqui está ela:

function getItemAttack(item)
	return getItemAttribute(item.uid, "attack") or getItemInfo(item.itemid).attack
end

 

Editado por Storm (veja o histórico de edições)

Postado
  • Autor

@Storm com as aspas duplas permanece na mesma, retornando null.

 

Não tinha a função e adicionei no arquivo 050-function.lua. Qual serio o parâmetro? Apenas o item?

 

Aqui está o código editado para utilizar getItemAttack (Tinha tentado mandar um contêiner do item, também, mas não funcionou):

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 0)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 0)
setCombatParam(combat, COMBAT_PARAM_TYPE, 1)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 2)

function onGetFormulaValues(cid, level, skill, attack, factor)
	local arma = getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid
	
	if arma ~= 0 then
		if getItemWeaponType(arma) ~= 4 then
			local arma = getPlayerSlotItem(cid, CONST_SLOT_RIGHT)
		end
	else
		local arma = getPlayerSlotItem(cid, CONST_SLOT_RIGHT)
	end
	local danoArma = getItemAttack(arma) 
	print(type(danoArma))
	
	min = -(((attack * 5) + (skill * 0.5) + (level * 0.04)) / factor)
	max = -(((attack * 5) + (skill * 0.8) + (level * 0.06)) / factor)
	return min, max
end
 
 
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
 
 
function onUseWeapon(cid, var)
    local ret = doCombat(cid, combat, var)
    if(ret == LUA_ERROR) then
        return LUA_ERROR
    end
    return true
end

 

O erro gerado:

Citar

[15:5:25.963] [Error - Weapon Interface]
[15:5:25.967] In a callback: data/weapons/scripts/distance.lua:onGetFormulaValues
[15:5:25.971] (Unknown script file)
[15:5:25.973] Description:
[15:5:25.975] data/lib/050-function.lua:488: attempt to index local 'item' (a number value)

 

Editado por Balkalima (veja o histórico de edições)

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.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo