Ir para conteúdo
  • 0

Formula De Damage Para Periodic Condition


razurator

Pergunta

Olá venho tentando alterar a magia de BLEED para que ela não desfira sempre o mesmo dano mas sim um dano de acordo com o level e o skill.

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 0)
setCombatParam(combat, COMBAT_PARAM_USECHARGES, true)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_REDSTAR)
local condition = createConditionObject(CONDITION_PHYSICAL)
setConditionParam(condition, CONDITION_PARAM_DELAYED, 1)
addDamageCondition(condition, 15, 3000, -70)
setCombatCondition(combat, condition)
function onCastSpell(cid, var)
return doCombat(cid, combat, var)
end

 

 

Por favor, como faço para colocar esse damage no lugar de [-70]

 

 

function getSpellDamage(cid, lv, skill)
			damage_min = (lv + skill) * 0.20
			damage_max = (lv + skill) * 0.25
			if(damage_max < damage_min) then
							local tmp = damage_max
			  damage_max = damage_min
			  damage_min = tmp
			end
			return -damage_min, -damage_max
end

 

 

 

Agradeço deis de já a quem me ajudar.

 

Dou REP+ se me ajudarem e explicarem como faz

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

9 respostass a esta questão

Posts Recomendados

  • 0

Não há como amigo, a função addDamageCondition é meio limitada e não existem callbacks para usar com conditions.

 

Abraços.

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

  • 0

Não há como amigo, a função addDamageCondition é meio limitada e não existem callbacks para usar com conditions.

 

Abraços.

 

Então, mas teria como eu fazer um novo script para essa magia especificando como ela deveria agir?

No caso dizendo a ela quanto de damage, o intervalo entre um e outro e quantos damages.

Link para o comentário
Compartilhar em outros sites

  • 0

Isso sim dá para fazer.

 



local damage = COMBAT_LIFEDRAIN
local rounds = 15
local delay = 3 * 1000

local function doCombatCondition(cid, target, type, area, min, max, effect, rounds)
if isCreature(target) then
	doAreaCombatHealth(cid, type, getThingPosition(target), area, min, max, effect)
	if rounds > 0 then
		addEvent(doCombatCondition, delay, cid, target, type, area, min, max, effect, (rounds - 1))
	end
end
return true
end

function onCastSpell(cid, var)
local formula_min = getPlayerLevel(cid)
local formula_max = getPlayerLevel(cid) * 2.5 + 32

local target = variantToNumber(var)
addEvent(doCombatCondition, delay, cid, target, damage, 0, -formula_min, -formula_max, CONST_ME_DRAWBLOOD, rounds)
return true
end

 

Tá aí algo que simula mais ou menos uma condição de dano com atraso em segundos e que você pode manipular o dano mínimo e máximo com fórmulas.

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

  • 0

esta pegando bunitinho mas teria como colocar uma distanceEffect para mim

 

 

local damage = COMBAT_PHYSICALDAMAGE
local rounds = 15
local delay = 3 * 1000
local function doCombatCondition(cid, target, type, area, min, max, effect, distanceEffect, rounds)
    if isCreature(target) then
		    doAreaCombatHealth(cid, type, getThingPosition(target), area, min, max, effect)
		    if rounds > 0 then
				    addEvent(doCombatCondition, delay, cid, target, type, area, min, max, effect, distanceEffect, (rounds - 1))
		    end
    end
    return true
end
function onCastSpell(cid, var)
    local formula_min = getPlayerLevel(cid) * 0.28
    local formula_max = getPlayerLevel(cid) * 0.30
    local target = variantToNumber(var)
    addEvent(doCombatCondition, delay, cid, target, damage, 0, -formula_min, -formula_max, CONST_ME_HITAREA, CONST_ANI_REDSTAR, rounds)
    return true
end

 

 

tentei fazer mas acho que fiz cáca psakspaks.

Link para o comentário
Compartilhar em outros sites

  • 0

local damage = COMBAT_PHYSICALDAMAGE
local effect = CONST_ME_DRAWBLOOD
local animation = CONST_ANI_REDSTAR

local rounds = 15
local delay = 3 * 1000

local function doCombatCondition(cid, target, type, area, min, max, effect, rounds)
   if isCreature(target) then
       doAreaCombatHealth((isCreature(cid) and cid or 0), type, getThingPosition(target), area, min, max, effect)
       if rounds > 0 then
           addEvent(doCombatCondition, delay, cid, target, type, area, min, max, effect, (rounds - 1))
       end
   end
   return true
end

function onCastSpell(cid, var)
   local formula_min = getPlayerLevel(cid)
   local formula_max = getPlayerLevel(cid) * 2.5 + 32

   local target = variantToNumber(var)
   if getDistanceBetween(getThingPosition(target), getThingPosition(cid)) < 4 then
       doSendDistanceShoot(getThingPosition(cid), getThingPosition(target), animation)
   end
   addEvent(doCombatCondition, delay, cid, target, damage, 0, -formula_min, -formula_max, CONST_ME_DRAWBLOOD, rounds)
   return true
end

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

  • 0

Não sei muito bem o quê a exana kor faz, mas se você fizer uma pequena modificação no script acima:

 



local damage = COMBAT_PHYSICALDAMAGE
local effect = CONST_ME_DRAWBLOOD
local animation = CONST_ANI_REDSTAR

local rounds = 15
local delay = 3 * 1000

local condition = createConditionObject(CONDITION_BLEEDING)

local function doCombatCondition(cid, target, type, area, min, max, effect, rounds)
   if isCreature(target) then
       if getCreatureCondition(target, CONDITION_BLEEDING) then
           doAreaCombatHealth((isCreature(cid) and cid or 0), type, getThingPosition(target), area, min, max, effect)
           if rounds > 0 then
               addEvent(doCombatCondition, delay, cid, target, type, area, min, max, effect, (rounds - 1))
           end
       end
   end
   return true
end

function onCastSpell(cid, var)
   local formula_min = getPlayerLevel(cid)
   local formula_max = getPlayerLevel(cid) * 2.5 + 32

   local target = variantToNumber(var)
   if getDistanceBetween(getThingPosition(target), getThingPosition(cid)) < 4 then
       doSendDistanceShoot(getThingPosition(cid), getThingPosition(target), animation)
   end
   doAddCondition(target, condition)
   addEvent(doCombatCondition, delay, cid, target, damage, 0, -formula_min, -formula_max, CONST_ME_DRAWBLOOD, rounds)
   return true
end

 

Esse script acima só dá o dano periódico se o alvo tem a condição Bleeding, caso contrário nada acontece. Caso a tal exana kor seja uma magia de dispel para a condição Bleeding então se encaixa perfeitamente.

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

  • 0

Exatamente cara, exana kor da dispel em condition bleeding se for isso mesmo então minha nova classe está pronta graças a vosso conhecimento.

 

Muito obrigado, duvida sanada.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...