Postado Maio 3, 2020 5 anos 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
Postado Maio 4, 2020 5 anos 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 Maio 4, 2020 5 anos 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.