Ir para conteúdo

Colocando Cooldown Diferenciado!


ninexin

Posts Recomendados

Aow turminha do XTIBIA, estou aqui para explicar como por um Cooldown independente para cada magia, sendo possivel se tirar o exausted do jogo e só usar o Cooldown, bom eu testei em TFS 0.3.6 e 0.4 + acho que funcione em todos 8.50+ !!!!

 

 

Bom vamos começar primeiro pegue uma magia de sua pasta spells, que deseja por o cooldown, vou usar no exemplo abaixo a magia exori vis:

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
function onGetFormulaValues(cid, level, maglevel)
min = -(level * 0.28 + maglevel * 1.48) * 1.0
max = -(level * 0.34 + maglevel * 2.34) * 1.0

return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

function onCastSpell(cid, var)
return doCombat(cid, combat, var)
end

 

bom agora a baixo de "function onCastSpell(cid, var)" voce apaga tudo e poe:

 

 if exhaustion.check(cid, 23006) == false then
               exhaustion.set(cid, 23006, 1)
return doCombat(cid, combat, var)
     else
               doPlayerSendCancel(cid, "Cooldown[" ..exhaustion.get(cid, 23006).."]")
       end
end

 

ficando assim:

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
function onGetFormulaValues(cid, level, maglevel)
min = -(level * 0.28 + maglevel * 1.48) * 1.0
max = -(level * 0.34 + maglevel * 2.34) * 1.0

return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

function onCastSpell(cid, var)
if exhaustion.check(cid, 23006) == false then
               exhaustion.set(cid, 23006, 1)
return doCombat(cid, combat, var)
     else
               doPlayerSendCancel(cid, "Cooldown[" ..exhaustion.get(cid, 23006).."]")
       end
end

 

 

Explicando:

 

if exhaustion.check(cid, 23006) == false then

exhaustion.set(cid, 23006, 1)

return doCombat(cid, combat, var)

else

doPlayerSendCancel(cid, "Cooldown[" ..exhaustion.get(cid, 23006).."]")

 

 

bom os numeros 23006 são a storage que a magia usa entao cada magia deve posuir um numero diferente!!!!

e o numero 1 é o tempo do cooldown ou seja 1segundo!!!

 

dae é só ir em spells.xml e abaixar o exausted ou até mesmo zerar se voce for usar esse sistema em todas as magias do jogo!!! ;D

 

 

BOM É MEU PRIMEIRO TUTORIAL AQUI NO XTIBIA, ESPERO AJUDAR UMA GALERA AE ^^

AJUDEM DANDO REPUTAÇÃO CASO SEJA UTIL PRA TI ESSE TUTORIAL!!!

 

SEJAM TODOS FELIZES ;)

 

T+

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

Eu já tinha desenvolvido um sistema de cooldown utilizando a função os.time e storages, mas logo percebi que é contraprodutivo.

 

É o mesmo caso, por isso, minha opinião é que não vale a pena pois usa muitos storages.

 

Já tenho ideia de como desenvolver um sistema utilizando apenas 1 storage, em breve farei.

 

Abraços e tutorial aprovado.

Link para o comentário
Compartilhar em outros sites

OPa vlw por aprovar !! ;D

simm demora um pouco pra ageitar pra usar em todas as magias :p

++ nada que uma ou 2horinhas nao resolva ;P

funciona 100% nunca tive problemas com o sistema eu uso no meu servidor!!

 

flwss bro ;D

Link para o comentário
Compartilhar em outros sites

Eu queria aproveitar este script para colocar um cooldown maior na minha shovel, será que é possivel?

 

function onUseItem(cid, item, fromPosition, itemEx, toPosition)

if exhaustion.check(cid, 23006) == false then

exhaustion.set(cid, 23006, 1)

return doCombat(cid, combat, var)

else

doPlayerSendCancel(cid, "Cooldown[" ..exhaustion.get(cid, 23006).."]")

end

 

 

 

Colocar algo parecido com isso?

 

E esse "storage" 23006, o que ele significa?

Link para o comentário
Compartilhar em outros sites

sim funciona simm brother ;)

o storage é onde vai armazenar que voce ainda esta no cooldown!

exemplo voce configura um cooldown de 10segundo essa informação fica registrada na storage pra que voce só possa usar a magia novamente quando atingir os 10segundos!!!

por isso cada script que voce for usar esse sistema de cooldown voce precisa colocar uma storage diferente pra nao dar problema ^^

abrass brother, qual quer duvida só postar!

Link para o comentário
Compartilhar em outros sites

a problema não tem nenhum até pq vai da na mesma o cara criar uma lib e vai ter q alterar todas as magias do mesmo jeito então da praticamente na mesma :D os dois funcionam perfeitamente ;)

Link para o comentário
Compartilhar em outros sites

@Lordfire

 

Para fazer que o mesmo tipo de spell use o mesmo cooldown, é só usar o mesmo storage.

 

Não mostra nada em baixo, esse tipo de cooldown (o meu também) é só para ficar exausto de usar a spell.

 

@Xin

 

Sim, as duas funcionam perfeitamente. Mas como eu disse, usar muitos storages aumenta a chance de bugar algo no OT.

 

--

 

Abraços.

Link para o comentário
Compartilhar em outros sites

@Demonbholder

é mesmo bro vlw pro criar a lib e liberar aqui pra gente usar tbm !!!

vou usa-la até pq vendo pelo lado de bugs é melhor nao usar tantas ja que posso diminuir :D

 

@Lordfire

não entendi mto bem sua pergunta, mas se os medidores que vc fala são aqueles emblemas que a cip pois depois do update 8.70 a resposta é não!

o q o sistema faz é aparecer no roda pé do jogo aparece a seguinte frase se vc tentar usar a magia: Cooldown[x]!

o X é o tempo que falta pra vc usar a magia novamente!!!

espero q sua pergunta seja essa :p

Link para o comentário
Compartilhar em outros sites

  • 1 year later...

Ae manow essa e o do exori gran ico olha so como e o script tenta ajudar eu ai

 

local combat = createCombatObject()

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true)

setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)

setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_WEAPONTYPE)

setCombatParam(combat, COMBAT_PARAM_USECHARGES, true)

 

function onGetFormulaValues(cid, level, skill, attack, element, factor)

local levelTotal, formula = level / 5, 0.1606

local normal, elemental = -(skill * attack * formula + levelTotal), math.ceil((skill * element * formula + levelTotal))

return normal/2, normal, -math.random(elemental/2, elemental)

end

 

setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onCastSpell(cid, var)

return doCombat(cid, combat, var)

end

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...