Ir para conteúdo
  • Cadastre-se

(Resolvido)getItemAttribute retornando null


Ir para solução Resolvido por Storm,

Posts Recomendados

  • Solução

@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)
	
	if getItemWeaponType(arma.uid) ~= 4 then
		local danoArma = getItemInfo(arma.itemid).attack
	else
		local danoArma = getItemInfo(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid).attack
	end
	print(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

 

Link para o post
Compartilhar em outros sites
  • Respostas 6
  • Created
  • Última resposta

Top Posters In This Topic

Popular Days

Top Posters In This Topic

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) if getItemWeaponType(arma.uid) ~= 4 then local danoArma = getItemInfo(arma.itemid).attack else local danoArma = getItemInfo(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid).attack end print(danoArma) -- print apenas para ver o que é retornado (null neste caso) min = -(((attack * 5) + (ski

@Storm era esse getItemInfo que me faltava rsrsrs, tinha procurado os métodos do TFS 0.4 e pelo visto estava focando no errado, tinha até pensado em uma gambiarra para ter o dano da arma, mas este seu código é a melhor forma, editando o attack em um só lugar (items.xml) e aplicando em todo o servidor.

 

Funcionou perfeitamente o código cara, muito obrigado, estou lhe dando REP+.  ?

Só não sei se marco sua resposta como melhor resposta ou esta, onde estarei colocando o código final, corrigindo e explicando a lógica, pois tinha um pequeno problema:

 

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) -- Pego o item que ele está usando no lado esquerdo
    
    if arma.uid ~= 0 then -- checo se realmente tinha algum item do lado esquerdo (poderia estar utilizando do lado direito e não ter nada no slot esquerdo).
        if getItemWeaponType(arma.uid) == 4 then -- se estiver utilizando algo do lado esquerdo e for uma arma (bow, crosbow) o getItemWeaponType retorna 4.
            danoArma = getItemInfo(arma.itemid).attack
        else -- se a arma não estava no lado esquerdo, só pode estar do lado direito
            danoArma = getItemInfo(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid).attack
        end
    else -- caso a arma esteja no lado direito e o lado esquerdo está vazio, a arma só pode estar do lado direito
        danoArma = getItemInfo(getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid).attack
    end
    
    attack = attack + 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 

Obs: Nota-se que a lógica que usei foi para deixar o mais genérico possível, funcionando para armas de uma e duas mão, você que escolhe, e também por não saber a ação do player, em qual mão ele pretende utilizar a arma se faz necessário o primeiro if.

 

weapons/weapons.xml:

<!-- Ammunition -->
<distance id="2352" level="120" event="script" value="distance.lua"/> <!-- Crystal Arrow -->

 

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

Ajudar os outros sobre o que se sabe não dói pois amanhã quem pode precisar de ajuda é você!  ;)

 

 

Só sei que nada sei. ~ Sócrates  :cool:

 

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Estatísticas dos Fóruns

    96844
    Tópicos
    519600
    Posts



×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo