A primeira parte eu ja fiz:
Falta esse healthchange ai.. to tentando xD
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

A primeira parte eu ja fiz:
o onHealthChange é onChangeStatus, ou algo assim nas versões antigas ![]()
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Sim sim, mas o return dele não da pra fazer do jeito que vc fez, eu acho. Pelo menos nao consegui.
Consegui isso:
Editado Janeiro 18 por Skulls
info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian

Sim sim, mas o return dele não da pra fazer do jeito que vc fez, eu acho. Pelo menos nao consegui.
Consegui isso:
function onStatsChange(cid, attacker, STATSCHANGE_HEALTHLOSS, combat, value)local hasdebuff = getPlayerStorageValue(cid, 99881) --storage dada na debuff spelllocal percent = 2 -- dobro (50% seria 1.5)if hasdebuff > 0 and combat == COMBAT_FIREDAMAGE thendoTargetCombatHealth(attacker, cid, COMBAT_PHYSICALDAMAGE, -value*percent+value, -value*percent+value, CONST_ME_FIREATTACK)endreturn trueend
Muito obrigado por estar me ajudando, jaja testarei aqui.
Tenho uma pergunta: Tem como fazer de um jeito pra que a porcentagem não fique tão grande assim? E onde é que eu mudo a duração da spell no player?
Muito obrigado por estar me ajudando, jaja testarei aqui.
Tenho uma pergunta: Tem como fazer de um jeito pra que a porcentagem não fique tão grande assim? E onde é que eu mudo a duração da spell no player?
Como assim porcentagem "grande"?
Pra alterar o tempo que fica debuffado é aqui:
addEvent(removeDebuff, 10000, parameters)
Editado Janeiro 18 por felzan
info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian

Porque desse jeito ai, ele enfraquece 50%, e eu não queria tudo isso, apenas por de 10 a 20%.
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

É só mudar o percent. 2 é 100% (o dobro) e 1 é 0% (sem acrescimo), qualquer valor intermediário é uma porcentagem. (10% = 1.1)
Genti, matemática básica isso :huh:
info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian

Sim, sim. Eu não tinha entendido a lógica direito. ![]()
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Funcionou?
info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian

Não to no pc agora, daqui a uns minutos eu testo e digo se deu.
Funcionou?
Sim, o único problema é que o dano extra está saindo como dano físico e não de fogo.
Mesmo eu mudando essa parte do creaturescript :doTargetCombatHealth(attacker, cid, COMBAT_PHYSICALDAMAGE, -value*percent+value, -value*percent+value, CONST_ME_FIREATTACK), para, doTargetCombatHealth(attacker, cid, COMBAT_FIREDAMAGE, -value*percent+value, -value*percent+value, CONST_ME_FIREATTACK), continua saindo como físico e não como fire.
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Não to no pc agora, daqui a uns minutos eu testo e digo se deu.
Sim, o único problema é que o dano extra está saindo como dano físico e não de fogo.
Mesmo eu mudando essa parte do creaturescript :doTargetCombatHealth(attacker, cid, COMBAT_PHYSICALDAMAGE, -value*percent+value, -value*percent+value, CONST_ME_FIREATTACK), para, doTargetCombatHealth(attacker, cid, COMBAT_FIREDAMAGE, -value*percent+value, -value*percent+value, CONST_ME_FIREATTACK), continua saindo como físico e não como fire.
Como eu não consegui mexer nos returns como o felzan fez pro 1.1, eu não tive outra escolha. Se ele der o dano extra como do tipo fogo ele vai entrar num loop infinito de dano, a não ser que vc crie um storagezinho para limitar isso, mas eu não vejo problema do dano extra ser fisico não xP, afinal a animação é de fogo kkk
info
Grupo: Conde
Registrado: 14/02/13
Posts: 702
Reputação: +196
Gênero: Masculino

Testa assim.
function onStatsChange(cid, attacker, STATSCHANGE_HEALTHLOSS, combat, value)
local hasdebuff = getPlayerStorageValue(cid, 99881) --storage dada na debuff spell
local percent = 2 -- dobro (50% seria 1.5)
if hasdebuff <= 0 then
return true
end
doTargetCombatHealth(attacker, cid, combat, -value*percent+value, -value*percent+value, CONST_ME_FIREATTACK)
return true
end
Editado Janeiro 19 por BananaFight
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Resolvendo a questão do damage ser fisico:
function onStatsChange(cid, attacker, STATSCHANGE_HEALTHLOSS, combat, value)
local hasdebuff = getPlayerStorageValue(cid, 99881) --storage dada na debuff spell
local percent = 2 -- dobro (50% seria 1.5)
if hasdebuff <= 0 or combat ~= COMBAT_FIREDAMAGE then
return true
end
if getPlayerStorageValue(cid, 99882) ~= -1 then
setPlayerStorageValue(cid, 99882, -1)
return true
end
setPlayerStorageValue(cid, 99882, 0)
doTargetCombatHealth(attacker, cid, COMBAT_FIREDAMAGE, -value*percent+value, -value*percent+value, CONST_ME_FIREATTACK)
return true
end
Banana, do jeito que vc fez ele vai dar debuff pra qualquer tipo de ataque.
Editado Janeiro 19 por Skulls
info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian
Um membro me fez esse script pra mim, só que foi pra versão 1.x e o que uso é a 0.4. Se alguém puder me ajudar, agradeço.
player:registerEvent("PlayerDeath")
player:registerEvent("DropLoot")player:registerEvent("Debuff")
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
créditos: felzan