Postado Fevereiro 11, 2016 9 anos Bom dia, estou criando uma spell, que so pode ser usada se o player tiver um arco equipado e que tenha pelo menos um tipo de flecha no inventario. O script que fiz foi esse: Spoiler local x = {2456, 8855, 8858, 7438, 8854, 8856} --Os arcos que precisam estar equipados local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 6) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 6) local area = createCombatArea({ {1, 1, 1}, {1, 3, 1}, {1, 1, 1} }) setCombatArea(combat, area) function onGetFormulaValues(cid, level, distance, attack, factor) min = -(level + (skill * 2) + (attack * 3/2)) * 1 max = -(level + (skill * 2) + (attack * 3/2)) * 1 return min, max end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function onCastSpell(cid, var) local y = getPlayerSlotItem(cid, 5) -- id do item na mão direita local z = getPlayerSlotItem(cid, 6) --id do item na mão esquerda if isInArray(x, y) or isInArray(x, z) then if getPlayerItemCount(cid, 2546) >= 1 then -- flecha necessaria doPlayerRemoveItem(cid, 2546, 1) doCombat(cid, combat, var) else doSendMagicEffect(getCreaturePosition(cid), 2) doSendAnimatedText(getCreaturePosition(cid), "You need at least 1 Burst Arrow", 33) end else doSendMagicEffect(getCreaturePosition(cid), 2) doSendAnimatedText(getCreaturePosition(cid), "You must equip a Bow", 33) end return true end Eu comecei fazendo ela pelo meio, pedindo apenas as flechas para a magia ser castada, e ela funcionou perfeitamente, entretanto, ao pedir um arco equipado como requisito, a spell passou a não funcionar direito, quando eu casto aparece apenas as palavras "You must" e solta a fumacinha. Podem me ajudar a encontrar e erro dela D:? Editado Fevereiro 11, 2016 9 anos por Hoad Escrevi no lugar errado x_x (veja o histórico de edições)
Postado Fevereiro 11, 2016 9 anos tem alguns erros de lógica no seu script, vamos lá: local y = getPlayerSlotItem(cid, 5) -- id do item na mão direita local z = getPlayerSlotItem(cid, 6) --id do item na mão esquerda if isInArray(x, y) or isInArray(x, z) then essa função que vc atribuiu a y e z retorna o item em si, vc quer verificar o id dele então precisaria de .itemid. Mas antes vc precisa garantir que isso exista então local y = getPlayerSlotItem(cid, 5) -- id do item na mão direita local z = getPlayerSlotItem(cid, 6) --id do item na mão esquerda if (y.uid > 0 and isInArray(x, y.itemid)) or (z.uid > 0 and isInArray(x, z.itemid)) then Ao final a gente precisa botar return false nos casos onde a spell não vai pra nao dar exhaust/consumir mana atoa: Spoiler function onCastSpell(cid, var) local y = getPlayerSlotItem(cid, 5) local z = getPlayerSlotItem(cid, 6) if (y.uid > 0 and isInArray(x, y.itemid)) or (z.uid > 0 and isInArray(x, z.itemid)) then if getPlayerItemCount(cid, 2546) >= 1 then -- flecha necessaria doPlayerRemoveItem(cid, 2546, 1) doCombat(cid, combat, var) else doSendMagicEffect(getCreaturePosition(cid), 2) doSendAnimatedText(getCreaturePosition(cid), "You need at least 1 Burst Arrow", 33) return false end else doSendMagicEffect(getCreaturePosition(cid), 2) doSendAnimatedText(getCreaturePosition(cid), "You must equip a Bow", 33) return false end return true end Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá! "Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda (obg ao @Beeny por fazer essa linda sign <3)
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.