(pedido) receber menos % de dano

LeoPetryScript
em Scripts

LeoPetryScript

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 14/03/20Posts: 25

quando player sofrer um ataque de 1000, receber só 800 de dano que no caso seria (80/100)

no caso abaixo, o player recebe os 1000 de dano + 20%, teria que ser - 20%

function onStatsChange(cid, attacker, type, combat, value, summons)
local summons = getCreatureSummons(cid)
local angel = "death angel [0]"
if #summons >= 1 then
for j = 1, #summons do
if getCreatureName(summons[j]):lower() == string.lower(angel) then
if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then
	dano = math.ceil(value*0.2)
	doTargetCombatHealth(attacker, cid, combat, -dano, -dano, 255)
	end
else
return true
end
end
end
return true
end

 

nociam

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 04/02/13Posts: 541Gênero: Masculino

 

dano = dano - (dano * 0.2)  se não for isso não saquei o que quer direito.

LeoPetryScript

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 14/03/20Posts: 25
4 horas atrás, nociam disse:

 

dano = dano - (dano * 0.2)  se não for isso não saquei o que quer direito.

tipo: eu coloquei assim da maneira que está, porém o player deveria receber 800 de dano, e não recebe, recebe 1200 assim.

aí tentei colocar pra não receber o dano normal, apenas 80* dele, com um return false no final, mas daí ele não recebe nem um e nem outro

 

 

edit1 --

É pra ser tipo um absorvPercentAll = 20 do items.XML mas em vez de ser no item, ser quando o player estiver com um summon

DarkWore

Ex - Moderador
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 23/05/17Posts: 584Gênero: MasculinoChar no Tibia: Não Tenho

Tente assim:

function onStatsChange(cid, attacker, type, combat, value, summons)
  local summons = getCreatureSummons(cid)
  local angel = "death angel [0]"
  if #summons >= 1 then
    for j = 1, #summons do
      if getCreatureName(summons[j]):lower() == string.lower(angel) then
        if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then
          dano = dano - (value*0.2)
          doTargetCombatHealth(attacker, cid, combat, -dano, -dano, 255)
        end
      else
        return true
      end
    end
  end
  return true
end

 

uHtXRtd.png.3908e825830f508573fee9a45063e737.png

 

Não dou suporte via PM, em caso de duvidas abra um tópico na seção correta e aguarde ser respondido.

LeoPetryScript

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 14/03/20Posts: 25
5 minutos atrás, DarkWore disse:

Tente assim:

function onStatsChange(cid, attacker, type, combat, value, summons)
  local summons = getCreatureSummons(cid)
  local angel = "death angel [0]"
  if #summons >= 1 then
    for j = 1, #summons do
      if getCreatureName(summons[j]):lower() == string.lower(angel) then
        if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then
          dano = dano - (value*0.2)
          doTargetCombatHealth(attacker, cid, combat, -dano, -dano, 255)
        end
      else
        return true
      end
    end
  end
  return true
end

 

da erro pq nao reconhece dano = "dano" - (value*0.2)

lSainty

xd
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 30/10/11Posts: 509Gênero: Masculino
43 minutos atrás, LeoPetryScript disse:

da erro pq nao reconhece dano = "dano" - (value*0.2)

Provavelmente pq a variável 'dano' n foi declarada, tenta assim:

function onStatsChange(cid, attacker, type, combat, value, summons)
  local summons = getCreatureSummons(cid)
  local angel = "death angel [0]"
  if #summons >= 1 then
    for j = 1, #summons do
      if getCreatureName(summons[j]):lower() == string.lower(angel) then
        if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then
          value = value - (value*0.2)
          doTargetCombatHealth(attacker, cid, combat, -value, -value, 255)
        end
      else
        return true
      end
    end
  end
  return true
end

 

re2JIBH.jpg

LeoPetryScript

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 14/03/20Posts: 25
2 minutos atrás, lSainty disse:

Provavelmente pq a variável 'dano' n foi declarada, tenta assim:

function onStatsChange(cid, attacker, type, combat, value, summons)
  local summons = getCreatureSummons(cid)
  local angel = "death angel [0]"
  if #summons >= 1 then
    for j = 1, #summons do
      if getCreatureName(summons[j]):lower() == string.lower(angel) then
        if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then
          value = value - (value*0.2)
          doTargetCombatHealth(attacker, cid, combat, -value, -value, 255)
        end
      else
        return true
      end
    end
  end
  return true
end

 

testei com um monstro que hita sempre 1100-1200

ele começou a hitar 3200 com esse efeito ativo

lSainty

xd
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 30/10/11Posts: 509Gênero: Masculino
2 minutos atrás, LeoPetryScript disse:

testei com um monstro que hita sempre 1100-1200

ele começou a hitar 3200 com esse efeito ativo

Infelizmente eu n manjo dessas formulas de dano, mas n faz sentido visto que se o 'value' fosse 100 por exemplo, a conta seria: value = 100 - (100*0.2) = 80

re2JIBH.jpg

LeoPetryScript

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 14/03/20Posts: 25
6 minutos atrás, lSainty disse:

Infelizmente eu n manjo dessas formulas de dano, mas n faz sentido visto que se o 'value' fosse 100 por exemplo, a conta seria: value = 100 - (100*0.2) = 80

é que tem que ter tipo um return false pro dano primario, mas se eu coloco return false, n sai nenhum dano

lSainty

xd
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 30/10/11Posts: 509Gênero: Masculino
8 minutos atrás, LeoPetryScript disse:

é que tem que ter tipo um return false pro dano primario, mas se eu coloco return false, n sai nenhum dano

Dei uma pesquisada e creio que vc vai ter que fazer nas sources. Ao colocar return false (que cancela o dano "original" para causar apenas o do doTargetCombatHealth) ele entra no onStatsChange novamente e vira um loop cancelando o dano.

re2JIBH.jpg

LeoPetryScript

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 14/03/20Posts: 25
29 minutos atrás, lSainty disse:

Dei uma pesquisada e creio que vc vai ter que fazer nas sources. Ao colocar return false (que cancela o dano "original" para causar apenas o do doTargetCombatHealth) ele entra no onStatsChange novamente e vira um loop cancelando o dano.

não sei como faz isso, ai fiz diferente aqui, coloquei pra aparecer do lado do hit "-20%" ai coloquei 

doTargetCombatHealth(attacker, cid, combat, dano, dano, nill)

Poccnn

Enquanto houver armas no mundo, haverá guerra!
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 07/03/16Posts: 1418Gênero: Masculino

onstatchange quer dizer que já foi sofrido o dano. o que tu pode fazer com esse script é devolver parte do valor do dano sofrido.

"Deus é amor, mas matou 99,99999% de todos os seres viventes do mundo com o diluvio.

Deus é misericórdia, mas condena as pessoas ao tormento eterno do inferno.

Deus é pai, mas abandonou seus filhos a servidão.

Deus é vida, mas condenou a humanidade a morte.

Deus é o senhor. Senhor das guerras, da morte, do ódio.

 

Ninguém que ame a humanidade, mataria 99,99999% da população, não só de humanos, bem como dos demais animais, por amor. Isso não é amor, é doença, psicose de um sádico que gosta de ver sua 'criação' sofrer e ainda quer 'pagar' de misericordioso, de deus amor.

 

Não quero seu amor; não quero sua misericórdia, não quero ser seu filho, não quero sua vida, não quero que seja meu senhor.

Tu és um psicótico, doente, hipócrita, assassino; não me venha querer se passar por bondoso, amoroso, misericordioso."