Postado Maio 3, 2020 5 anos 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! Editado Maio 3, 2020 5 anos por Balkalima (veja o histórico de edições)
Postado Maio 3, 2020 5 anos @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 Maio 3, 2020 5 anos 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 Maio 3, 2020 5 anos por Balkalima (veja o histórico de edições)
Postado Maio 3, 2020 5 anos @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 Maio 3, 2020 5 anos por Storm (veja o histórico de edições)
Postado Maio 3, 2020 5 anos 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 Maio 3, 2020 5 anos 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.