Ir para conteúdo
  • Cadastre-se

(Resolvido)Spell de cura em area


Ir para solução Resolvido por Yamili,

Posts Recomendados

Uma spell que regenera, a cada 1 segundo, uma certa quantidade de vida própria e de seus aliados em party (sistema de party) que estejam ao alcance de uma área ao seu redor.

 

obs: a spell ficará ativa por 20 segundos.

 

tfs 0.4

Link para o post
Compartilhar em outros sites
9 horas atrás, FlameArcixt disse:

Acredito que nesse tópico, você encontra a solução: Tópico

Bom primeiramente obg pow min responde. Mas não é o que quero. Por que os membro precisa está dentro da xarea pra se curar. E ali basta está na party que já curado também.

 

 

7 minutos atrás, BangxD disse:

Bom primeiramente obg pow min responde. Mas não é o que quero. Por que os membro precisa está dentro da xarea pra se curar. E ali basta está na party que já curado.

 

 

 

Link para o post
Compartilhar em outros sites
  • 2 weeks later...
  • Solução

Não sei se entendi direito o que você queria.
Mas acho que eu tinha uma spell assim, que usei a um tempo atrás. 
Não testei atualmente (mas quando usei funcionava perfeitamente).
Só funciona em party.

 

local config = {
tempo = 20, --- tempo que vai durar a spell
intervalo = 1,  --- intervalo que leva pra recuperar X de mana/vida (em segundos)
hp = 5000, -- quanto de hp ganha a cada intervalo
mana = 5000, -- quanto de mana ganha a cada intervalo
}

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, 349) -- efeito 
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE)

CROSS5X5 = {
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
}

local area = createCombatArea(CROSS5X5)
setCombatArea(combat, area)
 
local condition = createConditionObject(CONDITION_FOOD)
setConditionParam(condition, CONDITION_PARAM_TICKS, config.tempo*1000)
setConditionParam(condition, CONDITION_PARAM_BUFF, true)
setConditionParam(condition, CONDITION_PARAM_MANAGAIN, config.mana)
setConditionParam(condition, CONDITION_PARAM_MANATICKS, config.intervalo*1000)
setConditionParam(condition, CONDITION_PARAM_HEALTHGAIN, config.hp)
setConditionParam(condition, CONDITION_PARAM_HEALTHTICKS, config.intervalo*1000)
 
local baseMana = 120
function onCastSpell(cid, var)
local waittime = 30 -- Tempo de exhaustion
local storage = 115826
if exhaustion.check(cid, storage) then
		doPlayerSendCancel(cid, "Podera usar novamente dentro de 30 segundos.")
		return false
end
local pos = getCreaturePosition(cid)
 
local membersList = getPartyMembers(cid)
if(membersList == nil or type(membersList) ~= 'table' or table.maxn(membersList) <= 1) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOPARTYMEMBERSINRANGE)
doSendMagicEffect(pos, CONST_ME_POFF)
return LUA_ERROR
end
 
local affectedList = {}
for _, pid in ipairs(membersList) do
if(getDistanceBetween(getCreaturePosition(pid), pos) <= 36) then
table.insert(affectedList, pid)
end
end
 
local tmp = table.maxn(affectedList)
if(tmp <= 1) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOPARTYMEMBERSINRANGE)
doSendMagicEffect(pos, CONST_ME_POFF)
return LUA_ERROR
end
 
local mana = math.ceil((0.9 ^ (tmp - 1) * baseMana) * tmp)
if(getCreatureMana(cid) < mana) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA)
doSendMagicEffect(pos, CONST_ME_POFF)
return LUA_ERROR
end
 
if(doCombat(cid, combat, var) ~= LUA_NO_ERROR) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
doSendMagicEffect(pos, CONST_ME_POFF)
return LUA_ERROR
end
 
doCreatureAddMana(cid, -(mana - baseMana), FALSE)
doPlayerAddSpentMana(cid, (mana - baseMana))
for _, pid in ipairs(affectedList) do
doAddCondition(pid, condition)
end

exhaustion.set(cid, storage, waittime)
return LUA_NO_ERROR
end

 

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

Não sei se entendi direito o que você queria.
Mas acho que eu tinha uma spell assim, que usei a um tempo atrás. 
Não testei atualmente (mas quando usei funcionava perfeitamente).
Só funciona em party.

 


local config = {
tempo = 20, --- tempo que vai durar a spell
intervalo = 1,  --- intervalo que leva pra recuperar X de mana/vida (em segundos)
hp = 5000, -- quanto de hp ganha a cada intervalo
mana = 5000, -- quanto de mana ganha a cada intervalo
}

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, 349) -- efeito 
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE)

CROSS5X5 = {
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
}

local area = createCombatArea(CROSS5X5)
setCombatArea(combat, area)
 
local condition = createConditionObject(CONDITION_FOOD)
setConditionParam(condition, CONDITION_PARAM_TICKS, config.tempo*1000)
setConditionParam(condition, CONDITION_PARAM_BUFF, true)
setConditionParam(condition, CONDITION_PARAM_MANAGAIN, config.mana)
setConditionParam(condition, CONDITION_PARAM_MANATICKS, config.intervalo*1000)
setConditionParam(condition, CONDITION_PARAM_HEALTHGAIN, config.hp)
setConditionParam(condition, CONDITION_PARAM_HEALTHTICKS, config.intervalo*1000)
 
local baseMana = 120
function onCastSpell(cid, var)
local waittime = 30 -- Tempo de exhaustion
local storage = 115826
if exhaustion.check(cid, storage) then
		doPlayerSendCancel(cid, "Podera usar novamente dentro de 30 segundos.")
		return false
end
local pos = getCreaturePosition(cid)
 
local membersList = getPartyMembers(cid)
if(membersList == nil or type(membersList) ~= 'table' or table.maxn(membersList) <= 1) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOPARTYMEMBERSINRANGE)
doSendMagicEffect(pos, CONST_ME_POFF)
return LUA_ERROR
end
 
local affectedList = {}
for _, pid in ipairs(membersList) do
if(getDistanceBetween(getCreaturePosition(pid), pos) <= 36) then
table.insert(affectedList, pid)
end
end
 
local tmp = table.maxn(affectedList)
if(tmp <= 1) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOPARTYMEMBERSINRANGE)
doSendMagicEffect(pos, CONST_ME_POFF)
return LUA_ERROR
end
 
local mana = math.ceil((0.9 ^ (tmp - 1) * baseMana) * tmp)
if(getCreatureMana(cid) < mana) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA)
doSendMagicEffect(pos, CONST_ME_POFF)
return LUA_ERROR
end
 
if(doCombat(cid, combat, var) ~= LUA_NO_ERROR) then
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
doSendMagicEffect(pos, CONST_ME_POFF)
return LUA_ERROR
end
 
doCreatureAddMana(cid, -(mana - baseMana), FALSE)
doPlayerAddSpentMana(cid, (mana - baseMana))
for _, pid in ipairs(affectedList) do
doAddCondition(pid, condition)
end

exhaustion.set(cid, storage, waittime)
return LUA_NO_ERROR
end

 

Opa muito obrigado

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