Ir para conteúdo

Featured Replies

Postado

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 por Hoad
Escrevi no lugar errado x_x (veja o histórico de edições)

Postado

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

I7Pm6ih.png

(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.

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.7k

Informação Importante

Confirmação de Termo