Postado Outubro 16, 2014 10 anos Estou fazendo um script e usei a seguinte variável: local m = getPlayerMana(cid) e depois: setConditionParam(condition, CONDITION_PARAM_MANAGAIN, m/10) (a syntax não está assim, só coloquei o que precisava) Mas o distro indica que ele não consegue fazer operações aritméticas em um valor Boolean, então ou getPlayerMana(cid) não retorna a quantidade de mana do player em números(o que acho bem improvável) ou eu estou fazendo alguma coisa errada. REP+ para quem ajudar
Postado Outubro 16, 2014 10 anos vc tá atribuindo um operador boolean em uma variável e fazendo aritmética. getPlayerMana(cid) não é uma função, é um atalho de função!! a função em si é a getCreatureMana(cid); Fora que você tem que setar um or pra garantir a existencia desse valor e impedir erros... mas como? Simples: usando um or! local m = getCreatureMana(cid) or 0 setConditionParam(condition, CONDITION_PARAM_MANAGAIN, m/10) mas vc tem que garantir que essa atribuição de m venha antes do setConditionParam, do contrário você vai ter que fazer uma coisa muito chatinha que é editar o param da condition dentro do script pra garantir que m exista como parâmetro
Postado Outubro 16, 2014 10 anos Autor Em 16/10/2014 em 02:35, xWhiteWolf disse: vc tá atribuindo um operador boolean em uma variável e fazendo aritmética. getPlayerMana(cid) não é uma função, é um atalho de função!! a função em si é a getCreatureMana(cid); Fora que você tem que setar um or pra garantir a existencia desse valor e impedir erros... mas como? Simples: usando um or! local m = getCreatureMana(cid) or 0 setConditionParam(condition, CONDITION_PARAM_MANAGAIN, m/10) mas vc tem que garantir que essa atribuição de m venha antes do setConditionParam, do contrário você vai ter que fazer uma coisa muito chatinha que é editar o param da condition dentro do script pra garantir que m exista como parâmetro Agora retornou um valor nil Olhe o script: Mostrar conteúdo oculto local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_WATERSPLASH) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_REGENERATION) local player = Player(cid) local m = getCreatureMana(cid) or 0 local condition = createConditionObject(CONDITION_REGENERATION) setConditionParam(condition, CONDITION_PARAM_SUBID, 1) setConditionParam(condition, CONDITION_PARAM_BUFF_SPELL, 1) setConditionParam(condition, CONDITION_PARAM_TICKS, 1) setConditionParam(condition, CONDITION_PARAM_MANAGAIN, m/10) setConditionParam(condition, CONDITION_PARAM_MANATICKS, 1) setCombatCondition(combat, condition) local area = createCombatArea({ {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 3, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0}, }) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Eu acho que está retornando um valor nil porque player também é um valor nil, já que a magia ainda não foi executada. Outra coisa: esta magia é a magia de um monstro, e não a de um player. A ideia seria a seguinte: O player invoca um monstro que fica curando o 10% da mana do player a cada 10 segundos(o que eu não defini no script, e sim no delay para ele usar a magia). Outra coisa é que como eu não sabia como fazer ele curar mana, fiz que o player ganha um buff de mana por 1 tick. Se não for pedir muito, peço para que arrume meu script, para que eu possa aprender com meus erros
Postado Outubro 16, 2014 10 anos exatamente oque eu havia dito amigo, você só pode usar coisas que já existam.. vc tá entando pegar a mana de um cid mas o script não sabe oque é cid.. ele vai saber qnd a magia for executada (no callback OnCastSpell).. eu não vou refazer o script pra você porque daria muito trabalho mas vou fazer melhor:http://www.tibiaking.com/forum/topic/39219-monstro-que-enche-vida-e-mana/ aqui tem um link de uma coisa parecida que eu fiz espero que te ajude. A coisa mais legal desse script que eu passei o link é que ele divide a vida/mana pelos players da party, como vc só quer mana você pode remover as linhas que adicionam vida
Postado Outubro 16, 2014 10 anos Autor Em 16/10/2014 em 03:31, xWhiteWolf disse: exatamente oque eu havia dito amigo, você só pode usar coisas que já existam.. vc tá entando pegar a mana de um cid mas o script não sabe oque é cid.. ele vai saber qnd a magia for executada (no callback OnCastSpell).. eu não vou refazer o script pra você porque daria muito trabalho mas vou fazer melhor: http://www.tibiaking.com/forum/topic/39219-monstro-que-enche-vida-e-mana/ aqui tem um link de uma coisa parecida que eu fiz espero que te ajude. A coisa mais legal desse script que eu passei o link é que ele divide a vida/mana pelos players da party, como vc só quer mana você pode remover as linhas que adicionam vida Eu acho que eu não expliquei muito bem O player invoca um monstro que cura todas as pessoas dentro de uma certa área, porém ele não cura 10% da vida do master, e sim 10% da vida de cada um dentro da área. Além disso createCombatObject() e createConditionObject() só podem ser postas antes da função(onCastSpell) e o getCreatureMana(cid) só pode ser posta depois da função. Claro, não faça se não tiver tempo ou estiver ocupado, mas do contrário, me ensine como carregar uma coisa que está mais para frente no script, já encarei esse problema várias vezes. "Há três caminhos para o fracasso: não ensinar o que sabe, não praticar o que ensina, e não perguntar o que ignora". (São Beda)
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.