GA
dúvida

Spell de 'Dbuff'

Por gabriel28, 17 de jan. de 2016 em Scripts

25
3.9k
gabriel28G
17 de janeiro de 2016 às 14:07

Tem como fazer uma spell de dbuff?
Exemplo: Fazer o inimigo tomar mais dano de fire por X segundos.


up

SkullsS
17 de janeiro de 2016 às 18:10

addDamageCondition(CONDITION_FIRE, rounds, time, value)

gabriel28G
17 de janeiro de 2016 às 21:21

addDamageCondition(CONDITION_FIRE, rounds, time, value)

 

Eu não manjo de fazer script, tem como formular um pra mim que seja por target, se possível?

up

felzanF
17 de janeiro de 2016 às 22:29

O debuff seria aplicado como?

Seria uma habilidade de uma arma, uma spell...?

 

Eu faria com storages, pois condition até ficaria com o ícone, mas iria dar dano pela condição, e não um dano extra

Vou pensar em algo... ;)

gabriel28G
17 de janeiro de 2016 às 22:38

O debuff seria aplicado como?

Seria uma habilidade de uma arma, uma spell...?

 

Eu faria com storages, pois condition até ficaria com o ícone, mas iria dar dano pela condição, e não um dano extra

Vou pensar em algo... ;)

 

Seria uma spell por target.

Ex: O cara conjuraria a spell no targert (utivo flam, exemplo), dai o target ficaria mais fraco (X porcento) contra determinado elemento, nesse caso, o fogo, por X segundos.

 

Deu pra pegar a ideia? kkkk

SkullsS
17 de janeiro de 2016 às 23:27

Ah, o felzan tem razão. Eu entendi errado. Estou pelo celular, as vezes leio correndo. Amanhã chego em casa e bolo uma solucao, se ng tiver feito ainda.

gabriel28G
18 de janeiro de 2016 às 16:10

Conseguiram? =S

felzanF
18 de janeiro de 2016 às 20:59

Bom, fiz assim :p

 

0oI8VNz.gif

 

 

Add no final do creaturescripts\scripts\login.lua

Abaixo de:
-- Events
player:registerEvent("PlayerDeath")
player:registerEvent("DropLoot")
player:registerEvent("Debuff")
Add no creaturescripts.xml
<event type="healthchange" name="Debuff" script="debuff.lua"/>

 

Exemplo de spells.xml

<instant group="attack" spellid="61" name="Debuff" words="debuff" lvl="1" mana="0" prem="0" range="4" needtarget="1" blockwalls="1" needweapon="0" exhaustion="6000" groupcooldown="2000" needlearn="0" script="debuff.lua">
</instant>

 

spells\scripts\debuff.lua

local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_SKULLVERTICAL)


local conditionDebuff = Condition(CONDITION_PARALYZE)
conditionDebuff:setParameter(CONDITION_PARAM_TICKS, 10000)
conditionDebuff:setFormula(0, 0, 0, 0)
combat:setCondition(conditionDebuff)

local function removeDebuff(parameters)
	parameters.target:setStorageValue(parameters.key, parameters.value)
end

function onCastSpell(creature, var)
	local cid = creature:getId()
	parameters = {target = Creature(var:getNumber()), key = 99881, value = 0}
	parameters.target:setStorageValue(parameters.key, 1)
	addEvent(removeDebuff, 10000, parameters)
	
  return combat:execute(creature, var)
end

creaturescripts\scripts\debuff.lua

function onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)
  local hasdebuff = creature:getStorageValue(99881) --storage dada na debuff spell
  local percent = 2 -- dobro (50% seria 1.5)
  local tipoDano = COMBAT_FIREDAMAGE
  if hasdebuff > 0 then
  	return primaryDamage*percent, tipoDano, secondaryDamage, secondaryType
  else
  	return primaryDamage, primaryType, secondaryDamage, secondaryType
  end
end

Editado Janeiro 18 por felzan

SkullsS
18 de janeiro de 2016 às 21:05

Bela magia, comente se funcionou.

gabriel28G
18 de janeiro de 2016 às 21:35

Deu um erro no script do SPELL

lua:1: attempt to call global 'Combat' a nil value.

Uso TFS 0.4, só caso disso ser o problema.

felzanF
18 de janeiro de 2016 às 21:51

Deu um erro no script do SPELL

lua:1: attempt to call global 'Combat' a nil value.

 

Uso TFS 0.4, só caso disso ser o problema.

 

Deve ser a versão entao, pq fiz pra 1.x

Faz mt tempo que não faço nada pra versões antigas.

Vai ter de traduzir de 1.x pra 0.4

gabriel28G
18 de janeiro de 2016 às 21:57

Vixe, então ferrou. kkkkkkkk
Por isso percebi as tags estranhas no creaturescript, dai deixei igual ao que tinha aqui. dai só deu esse erro que falei, até agora.

 

Night WolfN
19 de janeiro de 2016 às 16:32

Se vc não tiver nada na source que defina a resistencia positiva ou negativa à determinado elemento, vc pode tentar alterar um item aleatório e botar resistencia negativa nele por certo tempo. O único problema q imagino é se o player remover o item, deslogar ou morrer... mas aí vc pode fazer creaturescripts pra evitar isso.

Com movements vc evita de remover o item q tá com debuff, com condition_infight vc evita q deslogue e com onDeath vc evita q ele drope o item com a resist.

SkullsS
19 de janeiro de 2016 às 16:46

Se vc não tiver nada na source que defina a resistencia positiva ou negativa à determinado elemento, vc pode tentar alterar um item aleatório e botar resistencia negativa nele por certo tempo. O único problema q imagino é se o player remover o item, deslogar ou morrer... mas aí vc pode fazer creaturescripts pra evitar isso.

 

Com movements vc evita de remover o item q tá com debuff, com condition_infight vc evita q deslogue e com onDeath vc evita q ele drope o item com a resist.

Mas acredito que o onStatsChange seja mais pratico e igualmente funcional, não?

Night WolfN
19 de janeiro de 2016 às 16:49

statschange tem um problema de callstack overflow que toda vez que vc trabalha com danos que vão ser recalculados vc precisa contornar com uma das soluções abaixo:
1- Usar a spell durar só 1 dano
2- Controlar o combat por storage (funciona mas é falho e custoso)

Vocês conseguiram fazer pro primeiro caso, mas a real é q a idéia inicial era a spell durar um tempo o debuff, e não só até o proximo dano.