Ir para conteúdo
  • 0

Vocação X não pode atacar tal monstro


OriGM

Pergunta

Olá galerinha,queria pedir um script.

 

Script: Vocação x não pode atacar tais monstros.

Função: Por exemplo,um druid não pode atacar os monstros x ,y e z ,onde fosse configuravel os monstros que não pode ser atacado.

 

+ REP quem puder ajudar.

 

E tenho outro tópico tambem de duvida,quem souber e puder responder ai vai o link.

http://www.xtibia.com/forum/topic/223360-talkaction-que-consiga-usar-item/

Editado por OriGM
Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Eu tentei fazer uma coisa meio louca aqui, fiz rapidinho, então não tenho a mínima ideia se vai funcionar :s

function onTarget(cid, target)
 
local voca_id = xxx     --Coloque aqui o ID da vocation.
local monsters = {"xxx", "yyy", "zzz"}     --Monstros que não poderão ser atacados.
 
for a, b in ipairs(monsters) do
if isPlayer(cid) and getPlayerVocation(cid) == voca_id then
if getCreatureTarget(cid) == b then
return false
end
end
end
return true
end
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

Zipter, acho que você deveria incluir a tag do creaturescripts e mencionar que o cara deveria registrar no login.lua. Além disso, acho que fazer algo bem parecido com o seu, mas usando onCombat ficaria mais abrangente.

 -- Ids das vocations separadas por vírgulas (nesse exemplo 2 - druid e 6 - elder druid)
local vocation_ids = {2, 6}
 -- nome dos monstros que não poderão ser atacados, separados por vírgulas e entre aspas
local monsterNames = {"demon", "hydra", "rat"}

function onCombat(cid, target)
	if not isPlayer(cid) or not isMonster(target) then
		return true
	end
	if isInArray(vocation_ids, getPlayerVocation(cid)) and isInArray(monsterNames, getCreatureName(target):lower()) then
		return false
	end
	return true
end

Cria um arquivo com esse código em creaturescripts/scripts, chamado vocnoattack.lua. Adicione essa tag em creaturescripts.xml:

<event type="combat" name="VocNot" event="script" value="vocnoattack.lua"/>

E adicione essa linha perto dos demais registerCreatureEvent no arquivo creaturescripts/scripts/login.lua

registerCreatureEvent(cid, "VocNot")
Link para o comentário
Compartilhar em outros sites

  • 0

Sobre a tag e registrar no login.lua, eu não achei muito necessário informar pq é algo, suponho eu, meio 'óbvio'. Mas tem razão, eu deveria ter incluído estas informações no meu comentário anterior :x

E sobre o onTarget q coloquei, na verdade, como eu nunca fiz algo com onCombat e onTarget, não sabia o que seria mais adequado colocar. Ai tirei como base um script que encontrei aqui no fórum como base e.e

De qualquer maneira, quais os erros que cometi no meu script? Saberia dizer? Pra não cometer o mesmo erro na próxima vez e.e

Link para o comentário
Compartilhar em outros sites

  • 0

É óbvio para muitos de nós, já acostumados com isso. Mas para iniciantes e OT-Admins sem intimidade com scripting, não é, infelizmente.

O que você fez está certo, mas tem um furo: vai impedir que o jogador torne o monstro seu alvo, mas não vai impedir que ele dê dano no mesmo. Ele ainda poderia receber dano de magias de área. Já com onCombat, qualquer forma de combate é suprimida. Além disso, você limitou a uma vocação por script, deixando mais complicado de editar para as promotions (já que elder druid deriva de druid, creio que as mesmas regras serão aplicadas).

Fora isso, só achei mais simples usar a função isInArray, que é basicamente esse loop que você fez.

Link para o comentário
Compartilhar em outros sites

  • 0

Pra checar as vocaçoes tambem é facil usar, por exemplo, o isSorcerer(cid) que ja engloba sorcerer e master sorcerer. Ai como cada vocaçao vai ter restriçao a diferentes tipos de monstros, fica mais facil usar o

 

if isSorcerer(cid) then

elseif isDruid(cid) then..........

Link para o comentário
Compartilhar em outros sites

  • 0

 

Zipter, acho que você deveria incluir a tag do creaturescripts e mencionar que o cara deveria registrar no login.lua. Além disso, acho que fazer algo bem parecido com o seu, mas usando onCombat ficaria mais abrangente.

 -- Ids das vocations separadas por vírgulas (nesse exemplo 2 - druid e 6 - elder druid)
local vocation_ids = {2, 6}
 -- nome dos monstros que não poderão ser atacados, separados por vírgulas e entre aspas
local monsterNames = {"demon", "hydra", "rat"}

function onCombat(cid, target)
	if not isPlayer(cid) or not isMonster(target) then
		return true
	end
	if isInArray(vocation_ids, getPlayerVocation(cid)) and isInArray(monsterNames, getCreatureName(target):lower()) then
		return false
	end
	return true
end

Cria um arquivo com esse código em creaturescripts/scripts, chamado vocnoattack.lua. Adicione essa tag em creaturescripts.xml:

<event type="combat" name="VocNot" event="script" value="vocnoattack.lua"/>

E adicione essa linha perto dos demais registerCreatureEvent no arquivo creaturescripts/scripts/login.lua

registerCreatureEvent(cid, "VocNot")

Deu certinho o seu Omega,valeu mesmo!

Eu tinha feito conseguido fazer sozinho um script,mas o problema era que se por exemplo se tivesse um "rat" me atacando,que é um monstro que eu nao podia atacar,e tivesse um outro monstro que nao fosse o rat,eu nao podia atacar. Nao sabia como colocar pra só nao atacar o monstro configurado,valeu agora eu sei!

Ah e eu sei como registrar o codigo,pelo menos isso né. rsrs

De precaução coloquei no script,onCombat ,onAttack e onTarget,só pra garantir que nao vai ter brexas para atacar,não tem nenhum problema né? Não deu erro nenhum por enquanto. rs

Link para o comentário
Compartilhar em outros sites

  • 0

Keilost, identação eu faço bunitin e talz no notepad++, mas quando eu passo pra cá o script, ele volta ao 'normal'. Ai como sou meio nb, não sei como passar pra cá já identado ._.

se alguém quiser me ajudar, ty

Link para o comentário
Compartilhar em outros sites

  • 0

Tópico movido para a seção de dúvidas e pedidos resolvidos.

De precaução coloquei no script,onCombat ,onAttack e onTarget,só pra garantir que nao vai ter brexas para atacar,não tem nenhum problema né? Não deu erro nenhum por enquanto. rs

 

Tenta só com onCombat pra não abusar de creaturescripts, que são executados muitas e muitas vezes. Mas não, fora isso, não tem problema.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...