Ir para conteúdo

Featured Replies

Postado
  • 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

 

  • Respostas 6
  • Visualizações 848
  • 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
  • Autor

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

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