Ir para conteúdo
  • Cadastre-se

(Resolvido)Healando por segundo usando ML


Ir para solução Resolvido por Mathias Kenfi,

Posts Recomendados

Bom dia povo, eu to com o seguinte erro: data/spells/scripts/healing/utura test.lua:17: bad argument #1 to 'random' (number expected, got nil)

 

Eu gostaria de uma magia que seria igual Utura, mas não seria uma cura fixa (20). A spell usaria o lvl e ml do jogador pra calcular o healing.

 

Essa é a script da magia:

Citar

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)

function onGetFormulaValues(cid, level, maglevel)
    local min = (((level/5)+(maglevel*1) +1))
    local max = (((level/5)+(maglevel*2) +3))
    return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local condition = createConditionObject(CONDITION_REGENERATION)
setConditionParam(condition, CONDITION_PARAM_SUBID, 1)
setConditionParam(condition, CONDITION_PARAM_BUFF, true)
setConditionParam(condition, CONDITION_PARAM_TICKS, 1 * 60 * 1000)
setConditionParam(condition, CONDITION_PARAM_HEALTHGAIN, math.max(math.random(min, max)))
setConditionParam(condition, CONDITION_PARAM_HEALTHTICKS, 1000)
setCombatCondition(combat, condition)


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

 

 

Link para o post
Compartilhar em outros sites

@Zazeros usa esse tópico que eu criei ai tu adapta para tua spell o conceito é o mesmo pra tudo não só pra spells de dano como no tópico só utilizei como exemplo a spell de dano lá

 

 

Compre seus Scripts Agora totalmente seguro e de forma rápida, aceitamos também encomendas.

discord.gg/phJZeHa2k4

 

Projeto ATS (Naruto)

Informações Abaixo

Facebook

Youtube
Discord

 

Tutoriais / Conteúdos

Clique Aqui

Link para o post
Compartilhar em outros sites

@LeoTK Então cara, eu substitui a formula e troquei os valores, mas o mesmo erro apareceu. Eu não acho que o problema seja na formula, e sim nessa parte:

Citar

setConditionParam(condition, CONDITION_PARAM_HEALTHGAIN, math.max(math.random(min, max)))

Mas eu não tenho certeza

Link para o post
Compartilhar em outros sites

@Zazeros testa assim
 

setConditionParam(condition, CONDITION_PARAM_HEALTHGAIN, math.random(min, max)

 

Compre seus Scripts Agora totalmente seguro e de forma rápida, aceitamos também encomendas.

discord.gg/phJZeHa2k4

 

Projeto ATS (Naruto)

Informações Abaixo

Facebook

Youtube
Discord

 

Tutoriais / Conteúdos

Clique Aqui

Link para o post
Compartilhar em outros sites

@LeoTK Cara, nem fecha a função: image.thumb.png.7841a69870e7e5ec245b509c23933d99.png

 

Então eu coloquei ")" até fechar a função e deu erro:

Citar

.lua:21: bad argument #1 to 'random' (number expected, got nil)

 

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

@Zazeros sim faltou um ) erro meu testa dessa forma

obs: eu adicionei um local puxando o min e max dentro de um math.random declarando ele como amount para ser puxado dentro da condition como amount não testei in-game
 

Spoiler

 


local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)

function onGetFormulaValues(cid, level, maglevel)
    local min = (((level/5)+(maglevel*1) +1))
    local max = (((level/5)+(maglevel*2) +3))
    return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local condition = createConditionObject(CONDITION_REGENERATION)
setConditionParam(condition, CONDITION_PARAM_SUBID, 1)
setConditionParam(condition, CONDITION_PARAM_BUFF, true)
setConditionParam(condition, CONDITION_PARAM_TICKS, 1 * 60 * 1000)
setConditionParam(condition, CONDITION_PARAM_HEALTHGAIN, math.ceil(math.random(min, max)))
setConditionParam(condition, CONDITION_PARAM_HEALTHTICKS, 1000)
setCombatCondition(combat, condition)


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

 

 

 

 

Compre seus Scripts Agora totalmente seguro e de forma rápida, aceitamos também encomendas.

discord.gg/phJZeHa2k4

 

Projeto ATS (Naruto)

Informações Abaixo

Facebook

Youtube
Discord

 

Tutoriais / Conteúdos

Clique Aqui

Link para o post
Compartilhar em outros sites

@Zazeros eu nunca tentei utilizar um math.random dessa forma vou testar mais tarde novas possibilidades

Compre seus Scripts Agora totalmente seguro e de forma rápida, aceitamos também encomendas.

discord.gg/phJZeHa2k4

 

Projeto ATS (Naruto)

Informações Abaixo

Facebook

Youtube
Discord

 

Tutoriais / Conteúdos

Clique Aqui

Link para o post
Compartilhar em outros sites
  • 4 weeks later...
Em 28/12/2019 em 06:38, Zazeros disse:

Bom dia povo, eu to com o seguinte erro: data/spells/scripts/healing/utura test.lua:17: bad argument #1 to 'random' (number expected, got nil)

 

Eu gostaria de uma magia que seria igual Utura, mas não seria uma cura fixa (20). A spell usaria o lvl e ml do jogador pra calcular o healing.

 

Essa é a script da magia:

 

 

Você não criou uma local global para min, max

 

Elas existem apenas na função onGetFormulaValue

 

 

Link para o post
Compartilhar em outros sites
7 horas atrás, Zazeros disse:

@Joaovettor Cara, pode explicar melhor, fazendo o favor?

 

No seu script

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)

function onGetFormulaValues(cid, level, maglevel)
    local min = (((level/5)+(maglevel*1) +1))
    local max = (((level/5)+(maglevel*2) +3)) -- Essas variáveis são validas apenas para esta função, pois você fechou o escopo
    return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local condition = createConditionObject(CONDITION_REGENERATION)
setConditionParam(condition, CONDITION_PARAM_SUBID, 1)
setConditionParam(condition, CONDITION_PARAM_BUFF, true)
setConditionParam(condition, CONDITION_PARAM_TICKS, 1 * 60 * 1000)
setConditionParam(condition, CONDITION_PARAM_HEALTHGAIN, math.random(min, max)) -- Você não declarou as variáveis min e max
setConditionParam(condition, CONDITION_PARAM_HEALTHTICKS, 1000)
setCombatCondition(combat, condition)


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

As variáveis min e max não estão declaradas

Para declarar um variável global, você deve criar ela fora de um escopo, switch case, função, etc...

 

Ficando assim V

local min, max = 15, 30 -- Isto é um exemplo de uma variável global

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)

function onGetFormulaValues(cid, level, maglevel)
    local min = (((level/5)+(maglevel*1) +1))
    local max = (((level/5)+(maglevel*2) +3))
    return min, max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local condition = createConditionObject(CONDITION_REGENERATION)
setConditionParam(condition, CONDITION_PARAM_SUBID, 1)
setConditionParam(condition, CONDITION_PARAM_BUFF, true)
setConditionParam(condition, CONDITION_PARAM_TICKS, 1 * 60 * 1000)
setConditionParam(condition, CONDITION_PARAM_HEALTHGAIN, math.random(min, max))
setConditionParam(condition, CONDITION_PARAM_HEALTHTICKS, 1000)
setCombatCondition(combat, condition)


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

 

Link para o post
Compartilhar em outros sites
4 horas atrás, Zazeros disse:

@Joaovettor Hm, mas elas não estão sendo calculadas aqui?


 local min = (((level/5)+(maglevel*1) +1))
    local max = (((level/5)+(maglevel*2) +3))

  Porque se for do teu jeito, não vai usar o ML do mesmo jeito que o Utura já não usa

 

Não, pois, como citado, elas estão declaradas no escopo de function onGetFormulasValue(cid)

Link para o post
Compartilhar em outros sites

Você declarou as variáveis, min e max, na função abaixo

function onGetFormulaValues(cid, level, maglevel)
    local min = (((level/5)+(maglevel*1) +1))
    local max = (((level/5)+(maglevel*2) +3))
    return min, max
end

Você deve declarar essas funções de forma global, como eu mostrei

local min, max = 15, 30 -- Isto é um exemplo de uma variável global

Desta forma, o valor será global. Só não fechar com end

 

Link para o post
Compartilhar em outros sites
27 minutos atrás, Zazeros disse:

@Joaovettor Pra mim não faz sentido... Porque o script pegaria o valor min (fixo) e max (tambem fixo) e não usaria ml pra nada

 

Eu acabei de testa com um lv 1 com ml 1 e um com ml 52, os dois curaram 24

 

Você não entendeu nada do que expliquei

 

É claro que você curou, afinal a varíavel min e max estão declaras na função

function onGetFormulaValues(cid, level, maglevel)

 

Já aqui, não está declarado o que seria min e max, pois elas não foram decladas. Elas foram declaradas apenas na função citada acima

setConditionParam(condition, CONDITION_PARAM_HEALTHGAIN, math.random(min, max))
Link para o post
Compartilhar em outros sites

@Joaovettor Cara, eu disse que não entendia muito disso, mas eu realmente to tentando entender o que tu disse.

Eu pedi pra ajudar a fazer uma magia que curasse de acordo com o ML, ai ela tava retornando um erro ou curava um valor fixo, depoisi voce veio e colocou o valor fixo no começo do script, usando como exemplo, mas exemplo de que? O que eu deveria colocar para que ele usasse uma formula para curar ao inves dos valores fixos?

Eu entendi que se eu quiser que a magia cure, eu tenho que colocar os valores fora da função, mas ai como eu colocaria pra que o script detecte o ML do jogador e faça o calculo sem colocar na função?

Link para o post
Compartilhar em outros sites
  • Solução
10 minutos atrás, Zazeros disse:

@Joaovettor Cara, eu disse que não entendia muito disso, mas eu realmente to tentando entender o que tu disse.

Eu pedi pra ajudar a fazer uma magia que curasse de acordo com o ML, ai ela tava retornando um erro ou curava um valor fixo, depoisi voce veio e colocou o valor fixo no começo do script, usando como exemplo, mas exemplo de que? O que eu deveria colocar para que ele usasse uma formula para curar ao inves dos valores fixos?

Eu entendi que se eu quiser que a magia cure, eu tenho que colocar os valores fora da função, mas ai como eu colocaria pra que o script detecte o ML do jogador e faça o calculo sem colocar na função?

 

Os valores fixos foram exemplos de como deve ser feito, afinal da maneira que você estava fazendo não ia funcionar

 

Para não ser valor fixo, basta você fazer da mesma forma que está escrito na função abaixo:

function onGetFormulaValues(cid, level, maglevel)
    local min = (((level/5)+(maglevel*1) +1))
    local max = (((level/5)+(maglevel*2) +3))
    return min, max
end

Neste caso é só você criar uma variável GLOBAL da mesma forma que está escrito acima

 

EXEMPLO:

local level = getPlayerLevel(cid)
local maglevel = getPlayerMagLevel(cid)
local min, max = (((level/5)+(maglevel*1) +1)), (((level/5)+(maglevel*2) +3))

Mas deve ser declarado com variável GLOBAL, neste caso você deve declarar ela fora de uma função

 

Porém você vai se deparar com outro problema, que é a variável "cid", porque você precisa de uma função padrão para declarar esta variável.

Então para TENTAR resolver este problema tente usar o script dessa forma

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)

function onGetFormulaValues(cid, level, maglevel)
    local min = (((level/5)+(maglevel*1) +1))
    local max = (((level/5)+(maglevel*2) +3)) -- Essas variáveis são validas apenas para esta função, pois você fechou o escopo
    return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local condition = createConditionObject(CONDITION_REGENERATION)


function onCastSpell(cid, var) -- Perceba que eu coloquei dentro desta função para definir a variável cid
local level = getPlayerLevel(cid)
local maglevel = getPlayerMagLevel(cid)
local min, max = math.ceil((((level/5)+(maglevel*1) +1))), math.ceil((((level/5)+(maglevel*2) +3)))

setConditionParam(condition, CONDITION_PARAM_BUFF, true)
setConditionParam(condition, CONDITION_PARAM_TICKS, 1 * 60 * 1000)
setConditionParam(condition, CONDITION_PARAM_HEALTHGAIN, math.random(min, max)) -- Agora estão declaradas logo acima
setConditionParam(condition, CONDITION_PARAM_HEALTHTICKS, 1000)
setCombatCondition(combat, condition)

    return doCombat(cid, combat, var)
end

É uma das possibilidades de resolver o problema (existe script melhor pra tal coisa, porém é a mesma coisa)

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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo