Ir para conteúdo
  • 0

Reescrever script pra 0.4


gabriel28

Pergunta

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.

 

-- 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

 

créditos: felzan

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

A primeira parte eu ja fiz:

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_SKULLVERTICAL)
local condition = createConditionObject(CONDITION_PARALYZE)
setConditionParam(condition, CONDITION_PARAM_TICKS, 10000)
setConditionFormula(condition, 0, 0, 0, 0)
setCombatCondition(combat, condition)
local function removeDebuff(parameters)
setPlayerStorageValue(parameters.target, parameters.key, parameters.value)
end
function onTargetCreature(cid, target)
--if isPlayer(target) then
registerCreatureEvent(target, "debuff")
parameters = {target = target, key = 99881, value = 0}
setPlayerStorageValue(parameters.target, parameters.key, 1)
addEvent(removeDebuff, 10000, parameters)
--end
end
setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature")
function onCastSpell(cid, var)
return doCombat(cid, combat, var)
end

Falta esse healthchange ai.. to tentando xD
Link para o comentário
Compartilhar em outros sites

  • 0

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 spell
local percent = 2 -- dobro (50% seria 1.5)
if hasdebuff > 0 and combat == COMBAT_FIREDAMAGE then
doTargetCombatHealth(attacker, cid, COMBAT_PHYSICALDAMAGE, -value*percent+value, -value*percent+value, CONST_ME_FIREATTACK)
end
return true
end
Editado por Skulls
Link para o comentário
Compartilhar em outros sites

  • 0

 

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 spell
local percent = 2 -- dobro (50% seria 1.5)
if hasdebuff > 0 and combat == COMBAT_FIREDAMAGE then
doTargetCombatHealth(attacker, cid, COMBAT_PHYSICALDAMAGE, -value*percent+value, -value*percent+value, CONST_ME_FIREATTACK)
end
return true
end

 

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?

Link para o comentário
Compartilhar em outros sites

  • 0

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 por felzan
Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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 por BananaFight
Link para o comentário
Compartilhar em outros sites

  • 0

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 por Skulls
Link para o comentário
Compartilhar em outros sites

  • 0

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.

 

O lance de sair em fire, é porq eu iria usar o script pra fazer outros para os outros elementos. Dai se eu quiser fazer isso, é só mudar onde tem FIRE para o elemento que eu quiser e mudar as storages também., certo?

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...