GA
dúvida

Como colocar cooldown em spell

Por gabriel28, 07 de ago. de 2015 em Scripts

10
2.3k
gabriel28G
07 de agosto de 2015 às 22:22

Como coloco cooldown em spell? TFS 0.4 rev 3884 v8.60.

zipter98Z
08 de agosto de 2015 às 00:12

Tem duas opções: diretamente na tag ou manipulando storages no código lua da spell.

gabriel28G
08 de agosto de 2015 às 00:21

Na tag falas do exaust? Se for, assim é problema, porq se eu por um exaust grande em uma, acaba afetando as outras da mesma categoria e não é isso que quero. Creio que a solução seja por storage. Tem como me mostrar como ponho no script da spell?

 

Vou deixar um script aqui, se puder, me mostra nele e diz se posso seguir a mesma forma para acrescentar nas outras.

 

Ta ela:

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0)
setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)

function onGetFormulaValues(cid, level, maglevel)
	min = (level * 2 + maglevel * 3) * 1
	max = (level * 2 + maglevel * 3) * 1.75

	return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

function onCastSpell(cid, var)
	return doCombat(cid, combat, var)
end
zipter98Z
08 de agosto de 2015 às 00:39
Melhor resposta


local combat = createCombatObject()

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING)

setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)

setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1)

setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0)

setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)

 

function onGetFormulaValues(cid, level, maglevel)

min = (level * 2 + maglevel * 3) * 1

max = (level * 2 + maglevel * 3) * 1.75

 

return min, max

end

 

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

 

local time = xxx --Cooldown, em segundos.

local storage = 91812 --Uma storage qualquer que não esteja em uso no seu servidor.

function onCastSpell(cid, var)

if getPlayerStorageValue(cid, storage) > os.time() then --Checando se ainda está em cooldown.

return doPlayerSendCancel(cid, "Wait "..getPlayerStorageValue(cid, storage) - os.time().." second(s) to use this spell again.")

end

setPlayerStorageValue(cid, storage, os.time() + time) --Setando CD na spell.

return doCombat(cid, combat, var)

end

 

Editado Agosto 8 por zipter98

gabriel28G
08 de agosto de 2015 às 00:45

Eu tenho spells que atiram magias seguidas, adicionando dessa forma, funcionaria com elas?

 

Da uma olhada:

 

 

 

-- Areas/Combat for 0ms
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ETHEREALSPEAR)

function onGetFormulaValues(cid, level, skill, attack, factor)
	
min = -(level * 1 + skill * 1.5) * 0.3
max = -(level * 1 + skill * 1.5) * 0.7
	return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
function onCastSpell(cid, var)
	return doCombat(cid, combat, var)
end

-- Areas/Combat for 100ms
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ETHEREALSPEAR)

function onGetFormulaValues(cid, level, skill, attack, factor)
	
min = -(level * 1 + skill * 1.5) * 0.3
max = -(level * 1 + skill * 1.5) * 0.7
	return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
function onCastSpell(cid, var)
	return doCombat(cid, combat, var)
end

-- Areas/Combat for 200ms
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ETHEREALSPEAR)

function onGetFormulaValues(cid, level, skill, attack, factor)
	
min = -(level * 1 + skill * 1.5) * 0.3
max = -(level * 1 + skill * 1.5) * 0.7
	return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
function onCastSpell(cid, var)
	return doCombat(cid, combat, var)
end

-- Areas/Combat for 300ms
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ETHEREALSPEAR)

function onGetFormulaValues(cid, level, skill, attack, factor)
	
min = -(level * 1 + skill * 1.5) * 0.3
max = -(level * 1 + skill * 1.5) * 0.7
	return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
function onCastSpell(cid, var)
	return doCombat(cid, combat, var)
end

-- =============== CORE FUNCTIONS ===============
local function RunPart(c,cid,var,dirList,dirEmitPos) -- Part
	if (isCreature(cid)) then
		doCombat(cid, c, var)
		if (dirList ~= nil) then -- Emit distance effects
			local i = 2;
			while (i < #dirList) do
				doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList[i],y=dirEmitPos.y-dirList[i+1],z=dirEmitPos.z},dirList[1])
				i = i + 2
			end		
		end
	end
end

function onCastSpell(cid, var)
	local startPos = getCreaturePosition(cid)
	RunPart(combat,cid,var)
	addEvent(RunPart,100,combat,cid,var)
	addEvent(RunPart,200,combat,cid,var)
	addEvent(RunPart,300,combat,cid,var)
	return true
end

 

 

zipter98Z
08 de agosto de 2015 às 00:48

Basta colocar no local apropriado, como indiquei, e sim, irá funcionar.

gabriel28G
08 de agosto de 2015 às 00:50

Então colocaria a storage em cada evento, certo?

zipter98Z
08 de agosto de 2015 às 00:55

Uma storage diferente para cada spell.

gabriel28G
08 de agosto de 2015 às 00:57

Ok, obrigado pela ajuda.

MudrockM
08 de agosto de 2015 às 02:11

Tópico Resolvido