Ir para conteúdo

[Spells] Checando Interferências na Trajetória


Skulls

Posts Recomendados

Boa noite galera, tudo bem?

 

Venho compartilhar com vocês hoje um sisteminha que desenvolvi para as magias do tipo "shoot'. Foi feito inicialmente para funcionar com magias que usam a posição do mouse como referência e adaptei para cipclientes poderem usar em runas e magias de tiro.

 

O funcionamento do sistema é simples: Ao usar uma runa ou castar uma magia "shoot" com esse sistema criaturas e objetos no caminho irão interferir na trajetória, isto é, receberão o combate no lugar do alvo inicial.

 

Ilustrativo:

 

  Mostrar conteúdo oculto

 

 

Bom, vamos ao que interessa.

 

Vá em data/lib/ e crie um novo arquivo chamado spellsLib.lua (pode-se utilizar também o arquivo spells.lua contido em data/spells/lib).

 

Dentro dele inclua as seguintes funções:

 

IsWalkable (by Nord)

  Mostrar conteúdo oculto

GetPositionsAround (by Skulls)
  Mostrar conteúdo oculto

 

CheckInterceptions (by Skulls)

 

  Mostrar conteúdo oculto

 

 

SetSpellTarget (by Skulls)

 

  Mostrar conteúdo oculto

 

 

Feito isso, está tudo configurado. Basta agora adicionar às magias que você queira.

Abra o .lua da magia, por exemplo death strike.lua.

Lá você terá, entre outras coisas, a função onCastSpell como abaixo:

function onCastSpell(cid, var)
return doCombat(cid, combat, var)
end

Substitua isso por:


local range = 5
function onCastSpell(cid, var)
if getCreatureTarget(cid) == 0 then
doPlayerSendCancel(cid, "Please choose a target.")
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
return false
end
if getDistanceBetween(getPlayerPosition(cid), getCreaturePosition(getCreatureTarget(cid))) > range then
doPlayerSendCancel(cid, "Target is not reachable.")
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
return false
end
return doCombat(cid, combat, setSpellTarget(cid, var)) end
Retire qualquer tag que esteja relacionada a target (needtarget, casterTargetOrDirection, etc)
Pronto, a sua magia "Exori Mort" será parada por criaturas ou obstáculos (qualquer item que não seja móvel).
Bom é isso, espero que gostem.
Queria agradecer ao @@nightwolf e ao @Caronte pelas ajudas tentando entender alguns parâmetros e me dando algumas luzes. Ao @@nightwolf, ainda, um agradecimento especial pela maravilhosa lib dele *-*.
Abraços,

 

Um exemplo de magia que utiliza esse sistema: http://www.xtibia.com/forum/topic/239460-exori-grab-vis/


@@Daniel, na verdade move pra mim pra Downloads Spells, acho que seria mais correto.

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

  Em 15/02/2016 em 02:07, gabrielvs disse:

Nas funções CheckInterceptions e SetSpellTarget o final delas ta com 'end' colado no return. a CheckInterceptions ta 'return toPosend' e a SetSpellTarget está 'return varend'.

 

Arrumado, obrigado.

Link para o comentário
Compartilhar em outros sites

  Em 15/02/2016 em 02:28, Bluester disse:

bem que o @Daniel poderia habilitar REP pelo celular.

Muito bom o conteúdo. :)

Obrigado! Da pra dar rep pelo cel, só colocar na versão completa la embaixo ^^ hahaha

Link para o comentário
Compartilhar em outros sites

ficou realmente muito bom, meus parabéns. Você botou na cabeça que queria fazer e foi atrás de conseguir. O resultado veio com o esforço, obrigado por me citar e por contribuir ainda mais com a comunidade do Open Tibia. Abraços meu amigo.

Link para o comentário
Compartilhar em outros sites

  Em 15/02/2016 em 03:12, Night Wolf disse:

ficou realmente muito bom, meus parabéns. Você botou na cabeça que queria fazer e foi atrás de conseguir. O resultado veio com o esforço, obrigado por me citar e por contribuir ainda mais com a comunidade do Open Tibia. Abraços meu amigo.

Obrigado wolf, não teria conseguido sem você! :p

 

  Em 15/02/2016 em 03:43, Kawoszin disse:

Parabéns pelo belo sistema.

Valeu!

Adicionado um exemplo de uso.

Link para o comentário
Compartilhar em outros sites

Muito bom skulls, essa função pode ajudar até em fazer um getCreaturePathTo(...) por lua...

 

Script muito bom.

 

  Em 15/02/2016 em 03:12, Night Wolf disse:

ficou realmente muito bom, meus parabéns. Você botou na cabeça que queria fazer e foi atrás de conseguir. O resultado veio com o esforço, obrigado por me citar e por contribuir ainda mais com a comunidade do Open Tibia. Abraços meu amigo.

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

interessante seria também,ignorar a interferencia que tem na frente,porém da metade do dano no da frente,e todo o dano no de trás.

 

tipo o orc da frente recebe 50 de dano e o de trás 100,um exemplo,ficaria show,rep+

 

dai é claro,sem interferencia,como na sua giff.

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

  Em 15/02/2016 em 14:57, kaleudd disse:

interessante seria também,ignorar a interferencia que tem na frente,porém da metade do dano no da frente,e todo o dano no de trás.

 

tipo o orc da frente recebe 50 de dano e o de trás 100,um exemplo,ficaria show,rep+

 

dai é claro,sem interferencia,como na sua giff.

 

Boa ideia, também seria interessante puxar os dois kkkkk.

Link para o comentário
Compartilhar em outros sites

@@Caronte, acho q ele quis dizer estilo o Q da miss fortune no league of legends... qnd vc dá um tiro e mata o bixo o tiro rebate com dobro de dano se tiver alguém atrás (seguindo a direção), ficaria muito legal ter algo nesse sentido tb.

Link para o comentário
Compartilhar em outros sites

  Em 15/02/2016 em 13:47, Caronte disse:

Muito bom skulls, essa função pode ajudar até em fazer um getCreaturePathTo(...) por lua...

 

Script muito bom.

 

Realmente, da para usar. Ja existe uma função de path do wolf, mas talvez com essa logica fique bom também rs. O grande problema é que, para paths, você não checa só na direção que você quer andar e sim em todas, caso a sua esteja sem passagem, né? xD

 

  Em 15/02/2016 em 14:57, kaleudd disse:

interessante seria também,ignorar a interferencia que tem na frente,porém da metade do dano no da frente,e todo o dano no de trás.

 

tipo o orc da frente recebe 50 de dano e o de trás 100,um exemplo,ficaria show,rep+

 

dai é claro,sem interferencia,como na sua giff.

 

Sim, da pra fazer muita coisa. Da para fazer damage reduction tb (quanto mais alvos a magia atravessar, menos dano ela da).

 

  Em 15/02/2016 em 17:36, Night Wolf disse:

@@Caronte, acho q ele quis dizer estilo o Q da miss fortune no league of legends... qnd vc dá um tiro e mata o bixo o tiro rebate com dobro de dano se tiver alguém atrás (seguindo a direção), ficaria muito legal ter algo nesse sentido tb.

Da tambem, basta a spell ser com range fixo (por exemplo sempre que usar ela vai do player até a direção que ele mandou 5 sqm para frente) e fazer a checagem. Se tiver uma interferencia ativa o combat1 se tiver duas o combat2 ^^

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...