Ir para conteúdo
  • Cadastre-se

(Resolvido)Chance de aplicar Condition no Inimigo com item!


Ir para solução Resolvido por Wakon,

Posts Recomendados

5 horas atrás, FeeTads disse:

é imaginei kkkkkkkk, não aplica em monster por causa do check de storage, vou arrumar:

 


local percent = 30  --- Chance de Aplicar Condition
local storage_CD = 2353255  --storage, se não souber não mexer
local timer = 60  --timer em segundos pra aplicar o condition novamente
local tempo_de_condition = 20


local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0)

local function apply_condition(target)
  
   if isCreature(target) then		--caso o target morra, acaba o condition
    	dano = math.ceil(math.random(5000,10000))			--dano entre 5-10k
    	doCreatureAddHealth(target, -dano)
    	doSendAnimatedText(getCreaturePos(target), "-"..dano, 180)
    	if tempo_de_condition > 0 then								--tempo de condition no cabeçalho
      		tempo_de_condition = tempo_de_condition - 1				-- diminui 1 na contagem
      		addEvent(apply_condition, 1000, target)					--addEvent de 1s que chama novamente a função
      	end
    end
  return true  
end


function onUseWeapon(cid, var)
  	local target = getCreatureTarget(cid)
  	if getPlayerStorageValue(cid, storage_CD) - os.time() > 0 then
    	 return doCombat(cid, combat, var) -- não precisa nada dentro desse IF pq se não iria flodar a tela do player
    end
    local position1 = getThingPosition(target)
    if isCreature(variantToNumber(var)) then			-- isCreature = TODAS as criaturas > isPlayer > somente em player > isMonster somente em mmonster
        if percent >= math.random(1,100) then
            doSendMagicEffect(position1, 346) 
      		setPlayerStorageValue(cid, storage_CD, os.time() + timer)
      		apply_condition(target)
        end
    end
    
    return doCombat(cid, combat, var)
end

 

teste e ve se funciona

Bom Teste contra criaturas e Player X Player ele esta dando o dano Ponto positivo (Porem quando aplica a condition ele da um Dano -xxxxx e volta bater normal aplica  a exaust o dano nao esta sendo uma condition em si ele esta dando um Hit normal. 
(parei para olhar o script ele esta direcionado para aplicar dano apenas Random nao uma condition em si correto ?) 

A o meu ver apenas esta faltando a parte de quantas vezes o dano vai ser causado e a condition no caso! o dano esta Ok!

 

image.png.b3779ca54206188a2a0906bf429f8f08.png
 

Link para o post
Compartilhar em outros sites
10 horas atrás, Maniaco disse:

A o meu ver apenas esta faltando a parte de quantas vezes o dano vai ser causado e a condition no caso! o dano esta Ok!

 

coloquei um text pra mostrar qual dano saiu:

10 horas atrás, Maniaco disse:

doSendAnimatedText(getCreaturePos(target), "-"..dano, 180)

 

ele ta causando o dano apenas 1x?

Link para o post
Compartilhar em outros sites
5 horas atrás, FeeTads disse:

 

coloquei um text pra mostrar qual dano saiu:

 

ele ta causando o dano apenas 1x?

Exatamente ele da o Dano -4945 e depois ele espera o Exaust e aplica novamente!o dano -xxxx! 

Link para o post
Compartilhar em outros sites
8 horas atrás, Maniaco disse:

Exatamente ele da o Dano -4945 e depois ele espera o Exaust e aplica novamente!o dano -xxxx! 

 tenta tirar o "return true" do apply_condition()
assim:
 

local function apply_condition(target)
   if isCreature(target) then		--caso o target morra, acaba o condition
    	dano = math.ceil(math.random(5000,10000))			--dano entre 5-10k
    	doCreatureAddHealth(target, -dano)
    	doSendAnimatedText(getCreaturePos(target), "-"..dano, 180)
    	if tempo_de_condition > 0 then								--tempo de condition no cabeçalho
      		tempo_de_condition = tempo_de_condition - 1				-- diminui 1 na contagem
      		addEvent(apply_condition, 1000, target)					--addEvent de 1s que chama novamente a função
      	end
    end
end

 

Link para o post
Compartilhar em outros sites
Em 21/09/2022 em 21:25, FeeTads disse:

 tenta tirar o "return true" do apply_condition()
assim:
 



local function apply_condition(target)
   if isCreature(target) then		--caso o target morra, acaba o condition
    	dano = math.ceil(math.random(5000,10000))			--dano entre 5-10k
    	doCreatureAddHealth(target, -dano)
    	doSendAnimatedText(getCreaturePos(target), "-"..dano, 180)
    	if tempo_de_condition > 0 then								--tempo de condition no cabeçalho
      		tempo_de_condition = tempo_de_condition - 1				-- diminui 1 na contagem
      		addEvent(apply_condition, 1000, target)					--addEvent de 1s que chama novamente a função
      	end
    end
end

 

Realizei o teste e oque correu sem erro na distro!

Esta aplicando o dano porem as vezes so da 1 Hit as vezes da mais de +1 Hit! E nas criaturas ele so deu dano 1x!

Já a respeito o rastante parece tudo normal só precisa agora aplicar a condition alem de apenas tirar a vida!

Perdão a demora não estava conseguindo acessar o Fórum! @FeeTads

 

Editado por Maniaco (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 2 weeks later...

@Maniaco, testa ai, fiz umas alterações no script do @FeeTads:

local percent = 30  --- Chance de Aplicar Condition
local exhaustStorage = 2353255  -- use a mesma em todos os scripts para não ter conditions do mesmo estilo aplicando ao mesmo tempo ou use diferentes storages em cada script para permitir várias conditions diferentes no mesmo target, e cuidado para n usar em outros sistemas para n causar interferência.
local ticks = 20 -- quantidade de vezes que vai aplicar a condition
local ticksDelay = 1000 -- tempo entre os ticks em milissegundos
local minDmg, maxDmg = 5000, 10000

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0)

local function apply_condition(target, count)
    if isCreature(target) then		--caso o target morra, acaba o condition
        local dano = math.ceil(math.random(minDmg, maxDmg))
        doCreatureAddHealth(target, -dano)
        doSendAnimatedText(getCreaturePos(target), "-"..dano, 180)
        if count > 0 then
            count = count - 1
            addEvent(apply_condition, ticksDelay, target, count)
        end
    end
   return true
end

function onUseWeapon(cid, var)
    local target = getCreatureTarget(cid)
    if isCreature(target) and getCreatureStorage(target, exhaustStorage) - os.time() < 1 then
        local position1 = getThingPosition(target)
        if percent >= math.random(1, 100) then
            doSendMagicEffect(position1, 5)
            doCreatureSetStorage(target, exhaustStorage, os.time() + ticks)
            apply_condition(target, ticks)
        end
    end
   return doCombat(cid, combat, var)
end

 

Editado por Wakon (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
17 horas atrás, Wakon disse:

@Maniaco, testa ai, fiz umas alterações no script do @FeeTads:



local percent = 30  --- Chance de Aplicar Condition
local exhaustStorage = 2353255  -- use a mesma em todos os scripts para não ter conditions do mesmo estilo aplicando ao mesmo tempo ou use diferentes storages em cada script para permitir várias conditions diferentes no mesmo target, e cuidado para n usar em outros sistemas para n causar interferência.
local ticks = 20 -- quantidade de vezes que vai aplicar a condition
local ticksDelay = 1000 -- tempo entre os ticks em milissegundos
local minDmg, maxDmg = 5000, 10000

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0)

local function apply_condition(target, count)
    if isCreature(target) then		--caso o target morra, acaba o condition
        local dano = math.ceil(math.random(minDmg, maxDmg))
        doCreatureAddHealth(target, -dano)
        doSendAnimatedText(getCreaturePos(target), "-"..dano, 180)
        if count > 0 then
            count = count - 1
            addEvent(apply_condition, ticksDelay, target, count)
        end
    end
   return true
end

function onUseWeapon(cid, var)
    local target = getCreatureTarget(cid)
    if isCreature(target) and getCreatureStorage(target, exhaustStorage) - os.time() < 1 then
        local position1 = getThingPosition(target)
        if percent >= math.random(1, 100) then
            doSendMagicEffect(position1, 5)
            doCreatureSetStorage(target, exhaustStorage, os.time() + ticks)
            apply_condition(target, ticks)
        end
    end
   return doCombat(cid, combat, var)
end

 

@Wakon

Está funcionando perfeitamente agora so preciso ver a forma de aplicar a condititron de fire, ice, slow, entre outras ! 

Editado por Maniaco (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Solução

@Maniaco, tenta o seguinte, coloca essa função:

doTargetCombatHealth(nil, target, COMBAT_FIREDAMAGE, -minDmg, -maxDmg, 0xFF)

No lugar dessa:

doCreatureAddHealth(target, -dano)

E remove essas linhas:

local dano = math.ceil(math.random(minDmg, maxDmg))
doSendAnimatedText(getCreaturePos(target), "-"..dano, 180)

Ai pra trocar o tipo é só alterar no lugar de COMBAT_FIREDAMAGE, geralmente você encontra os tipos em data/lib/000-constant.lua.

Link para o post
Compartilhar em outros sites
12 horas atrás, Wakon disse:

@Maniaco, tenta o seguinte, coloca essa função:


doTargetCombatHealth(nil, target, COMBAT_FIREDAMAGE, -minDmg, -maxDmg, 0xFF)

No lugar dessa:


doCreatureAddHealth(target, -dano)

E remove essas linhas:


local dano = math.ceil(math.random(minDmg, maxDmg))
doSendAnimatedText(getCreaturePos(target), "-"..dano, 180)

Ai pra trocar o tipo é só alterar no lugar de COMBAT_FIREDAMAGE, geralmente você encontra os tipos em data/lib/000-constant.lua.

@Wakon Está perfeito! Dano tudo!
Uma duvida apenas! o exaustion - ele aplica apenas em player correto ? ja em criaturas/Monters ele sempre vai aplicar quando bater a chance correto ?

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo