Ir para conteúdo
  • Cadastre-se

(Resolvido)Spell que hita a vida do alvo em %.


Ir para solução Resolvido por roriscrave,

Posts Recomendados

@Gustavo Ntos boa pergunta, a maioria dos membros sempre pedem coisas com porcentagem, mais a questão é que algumas coisas são possíveis e outras não, a sua por exemplo:

Pega o Hp do Player/Monstro e mandar a spell retorna um dano de 20% sobre o total de hp que o target tem, precisaria de uma mudança na source, uma puta de uma mudança! 

Resumindo: A menos que você seja um programador para fazer isso, se contenta no last hit mesmo.

Outra coisa bem comum que outros membros pedem, é algum script que quem tirou tanto porcento do hp do target, ganha tal coisa, quem tirou 20% ganha tal coisa, e assim por diante.

Consultei um colega que entende da questão, sobre contar nas task para quem deu 40% de dano no monstro e a resposta dele sobre isso foi a seguinte:

Spoiler

não tem como eu verificar quem tirou 40% da vida do monstro via Lua. Ele só executa os callbacks onKill e onDeath pra quem deu o last hit OU pra quem tirou mais dano. Teria que mudar isso na source pra ele retornar todo mundo que bateu no monstro e retornar também o damage map (um vetor de quanto cada pessoa tirou de life do monstro) e aí com esses dados você poderia ver quem tirou mais de 40% da vida do monstro e contar a task pra ele.

 

outra explicação que ele me deu foi essa:

Spoiler

pra eu "tirar na sorte" eu precisaria da lista de pessoas que atacou o monstro e eu não tenho isso. Não tenho e não tenho como gerar. Na source ela existe, então eu precisaria arrumar uma forma de passar esse vetor chamado damagemap na source pra Lua e aí rodar todo o vetor

function onDeath(cid, corpse, lasthitkiller, mostdamagekiller, lasthitunjustified, mostdamageunjustified)
for player, dano in ipairs(damagemap) do
 if isPlayer(player) and dano >= getCreatureMaxHealth(cid) * 0.4 then
    -- conta o player como se tivesse feito a task
end
end
return true
end


se  vc executar isso ele vai dar erro pq damagemap não existe... vc precisaria modificar na source a função onDeath pra ele rodar usando os seguintes parametros:

function onDeath(cid, corpse, damagemap)
 aí quando vc fazer o for de damagemap ele verificaria todo o vetor de quem matou e nesse caso eu to pensando num vetor que seria mais ou menos assim:

damagemap = {
[uid player 1] = quanto de dano ele tirou,
[uid player 2] = quanto ele tirou,
:
:
}

PORÉM, como isso não está implementado, não é possível. 

 

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link para o post
Compartilhar em outros sites

@KotZletY na verdade não precisa de nenhuma mudança na source para a spell retirar 20% do hp.... basta ele botar a função no script:

 

local Hp = getCreatureHealth(cid)*0.2 -- salva o valor de 20% da vida do jogador
doCreatureAddHealth(cid, -health) -- remove o valor de 20% da vida do jogador

basta ele saber usar e montar o script

Editado por roriscrave (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Não sou de ir contra a ninguém, posso está errado no que falei para spell, mais o restante que disse, foi de uma fonte mais que segura:

Spoiler

1.png

 

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link para o post
Compartilhar em outros sites
1 hora atrás, KotZletY disse:

Não sou de ir contra a ninguém, posso está errado no que falei para spell, mais o restante que disse, foi de uma fonte mais que segura:

  Ocultar conteúdo

1.png

 

 

Só temos uma lista em onDeath, e isso é quando o cid já morreu.

é pra esse tipo de coisa que temos statusCombat(cid, attacker, combat, value)

if value == (getCreatureMaxHealth(cid)*0.20) then
 ...
end

 

download.jpg

Link para o post
Compartilhar em outros sites
1 hour ago, KotZletY said:

Não sou de ir contra a ninguém, posso está errado no que falei para spell, mais o restante que disse, foi de uma fonte mais que segura:

  Hide contents

1.png

 

Essa resposta do whitewolf não tem absolutamente nada a ver com o que o OP pediu. Tá certa, só não tem relação.

Link para o post
Compartilhar em outros sites

@Lordfire exatamente como você disse, mais se vocês prestarem atenção, falei que boa parte do que pedem é impossível de fazer, disse isso e nada mais, na primeira resposta falei que era impossível a parte da spell, porém pessoas mais experiente do que eu me corrigiu, afinal, estudo lua, e em relação ao tibia, estudo por parte, porém o outro detalhe do que falei, esse sim está correto, mais em relação a spell, estou enganado. Isso que quis dizer.

Realmente fico honrado em vocês me corrigirem, principalmente você, um programador que tem bastante conhecimento.

Em fim, obrigado a ambos por me corrigirem, mas errei no primeiro ponto, que é o foco da duvida do tópico, porém no outro ponto, estou correto!

 

Thx guys! 

 

xD

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link para o post
Compartilhar em outros sites

Tentei fazer aqui e não deu muito certo fiz algumas alterações e mesmo assim não foi:

 

function onCastSpell(cid, var)
local Hp = (20*getCreatureHealth(cid)/100)
---local Hp = getCreatureHealth(cid)*0.2 -- salva o valor de 20% da vida do jogador
local target = getCreatureTarget(cid)
if isCreature(target) and isCreature(getCreatureTarget(cid)) then
doCreatureAddHealth(cid, -Hp) -- remove o valor de 20% da vida do jogador
end
return true
end
 

Link para o post
Compartilhar em outros sites
function onCastSpell(cid, var)
local target = getCreatureTarget(cid)
local Hp = (getCreatureHealth(target))*0.2

if isCreature(target) then
doCreatureAddHealth(cid, -Hp) -- remove o valor de 20% da vida do jogador
doSendMagicEffect(getCreaturePosition(target), 10) -- EFEITO DA MAGIA
end
return true
end

 

Link para o post
Compartilhar em outros sites
48 minutos atrás, roriscrave disse:

function onCastSpell(cid, var)
local target = getCreatureTarget(cid)
local Hp = (getCreatureHealth(target))*0.2

if isCreature(target) then
doCreatureAddHealth(cid, -Hp) -- remove o valor de 20% da vida do jogador
doSendMagicEffect(getCreaturePosition(target), 10) -- EFEITO DA MAGIA
end
return true
end

 

Não faz nada....

so manda o efeito... igual a minha script ali de cima

Agora, Gustavo Ntos disse:

Não faz nada....

so manda o efeito... igual a minha script ali de cima

tfs é 0.3.6

 

Link para o post
Compartilhar em outros sites
  • Solução
17 minutos atrás, Gustavo Ntos disse:

Não faz nada....

so manda o efeito... igual a minha script ali de cima

tfs é 0.3.6

 

function onCastSpell(cid, var)

local effect = 10 -- efeito da magia

local target = getCreatureTarget(cid)
local Hp = (getCreatureHealth(target))*0.2
if isCreature(target) then
doCreatureAddHealth(target, -Hp)
doSendMagicEffect(getCreaturePosition(target), "..effect..")
doSendAnimatedText(getCreaturePosition(target),"- "..Hp.."", 180)
end
return true
end

 

 

Editado por roriscrave (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
15 horas atrás, roriscrave disse:

function onCastSpell(cid, var)

local effect = 10 -- efeito da magia

local target = getCreatureTarget(cid)
local Hp = (getCreatureHealth(target))*0.2
if isCreature(target) then
doCreatureAddHealth(target, -Hp)
doSendMagicEffect(getCreaturePosition(target), "..effect..")
doSendAnimatedText(getCreaturePosition(target),"- "..Hp.."", 180)
end
return true
end

 

 

 

Vlw mano funcionou so arrumei umas paradas vlw ae.

Link para o post
Compartilhar em outros sites
  • 2 years later...
Em 10/01/2017 em 22:24, roriscrave disse:

function onCastSpell(cid, var)
local target = getCreatureTarget(cid)
local Hp = (getCreatureHealth(target))*0.2

if isCreature(target) then
doCreatureAddHealth(cid, -Hp) -- remove o valor de 20% da vida do jogador
doSendMagicEffect(getCreaturePosition(target), 10) -- EFEITO DA MAGIA
end
return true
end

 

 

Desculpe reviver, estou precisando.

mas quero que o dano seja no target, não no player que usa.

Link para o post
Compartilhar em outros sites
function onCastSpell(cid, var)
local target = getCreatureTarget(cid)
local Hp = (getCreatureHealth(target))*0.2

if isCreature(target) then
doCreatureAddHealth(target, -Hp) -- remove o valor de 20% da vida do jogador
doSendMagicEffect(getCreaturePosition(target), 10) -- EFEITO DA MAGIA
end
return true
end

^^^^

assim pega no target

Toda terça-feira um tópico novo:

Descanso para curar mana (Spell): https://tibiaking.com/forums/topic/94615-spell-descanso-para-curar-mana/

Peça sua spell (Suporte):                https://tibiaking.com/forums/topic/84162-peça-sua-spell/                        

Chuva de flechas (Spell):                https://tibiaking.com/forums/topic/72232-chuva-de-flechas-spell/

Doom (Spell):                                https://tibiaking.com/forums/topic/51622-doom-spell/

Utilização do VS Code (Infra)       https://tibiaking.com/forums/topic/94463-utilizando-o-visual-studio-code-notepad-nunca-mais/

SD com Combo (Spell):                 https://tibiaking.com/forums/topic/94520-sd-modificada/

Alteração attack speed (C++):        https://tibiaking.com/forums/topic/94714-c-attack-speed-spells-itens-e-onde-você-quiser/  

Bônus de Speed (NPC)                  https://tibiaking.com/forums/topic/94809-npc-concede-bônus-aos-players/
 

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo