Ir para conteúdo
  • Cadastre-se

(Resolvido)Boolean value - getPlayerMana(cid)


Ir para solução Resolvido por xWhiteWolf,

Posts Recomendados

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

Não se esqueça de dar REP+ para quem te ajudou e caso seja a solução marcar como melhor resposta!

 

NÃO CLIQUE AQUI!

NEM AQUI!

________________________________________________________________________________________________________________________________________________________________________________________________________________________

 

A imaginação é mais importante que o conhecimento.” Albert Einstein

Link para o post
Compartilhar em outros sites

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

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

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:

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

Não se esqueça de dar REP+ para quem te ajudou e caso seja a solução marcar como melhor resposta!

 

NÃO CLIQUE AQUI!

NEM AQUI!

________________________________________________________________________________________________________________________________________________________________________________________________________________________

 

A imaginação é mais importante que o conhecimento.” Albert Einstein

Link para o post
Compartilhar em outros sites

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

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

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 :D 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ãBeda)

Não se esqueça de dar REP+ para quem te ajudou e caso seja a solução marcar como melhor resposta!

 

NÃO CLIQUE AQUI!

NEM AQUI!

________________________________________________________________________________________________________________________________________________________________________________________________________________________

 

A imaginação é mais importante que o conhecimento.” Albert Einstein

Link para o post
Compartilhar em outros sites

não é tão simples assim kkk pra fazer isso você não vai poder usar o heal por combat mas você pode substituir facilmente por uma função do tipo:

doAreaCombatMana(cid, pos, area, min, max, effect)

CONTUDO, essa função necessitaria um valor fixo da mana de um dos caras.. já que você quer individualmente 10% de cada vai ter que fazer pegando cada posição da area individualmente e colocar numa table pra dps rodar a table inteira num for e se for player adicionar mana por essa função aqui:

doCreatureAddMana(getThingFromPos(pos[i]).uid, getCreatureMana(getThingFromPos(pos[i]).uid)/10)

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

 

não é tão simples assim kkk pra fazer isso você não vai poder usar o heal por combat mas você pode substituir facilmente por uma função do tipo:

doAreaCombatMana(cid, pos, area, min, max, effect)

CONTUDO, essa função necessitaria um valor fixo da mana de um dos caras.. já que você quer individualmente 10% de cada vai ter que fazer pegando cada posição da area individualmente e colocar numa table pra dps rodar a table inteira num for e se for player adicionar mana por essa função aqui:

doCreatureAddMana(getThingFromPos(pos[i]).uid, getCreatureMana(getThingFromPos(pos[i]).uid)/10)

Okay... Então tá, me rendo a ideia de que ele cure 10% da vida do dono para todos na área, mas eis o seguinte: onde eu uso o doAreaCombatMana(cid, pos, area, min, max, effect)? Ele substitui a variável combat ou a variável area?

Não se esqueça de dar REP+ para quem te ajudou e caso seja a solução marcar como melhor resposta!

 

NÃO CLIQUE AQUI!

NEM AQUI!

________________________________________________________________________________________________________________________________________________________________________________________________________________________

 

A imaginação é mais importante que o conhecimento.” Albert Einstein

Link para o post
Compartilhar em outros sites

remove o combat e dentro de function onCastSpell vc coloca essa função no lugar de doCombat >.<

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

remove o combat e dentro de function onCastSpell vc coloca essa função no lugar de doCombat >.<

E como eu crio uma área para essa função? :P

Não se esqueça de dar REP+ para quem te ajudou e caso seja a solução marcar como melhor resposta!

 

NÃO CLIQUE AQUI!

NEM AQUI!

________________________________________________________________________________________________________________________________________________________________________________________________________________________

 

A imaginação é mais importante que o conhecimento.” Albert Einstein

Link para o post
Compartilhar em outros sites

aproveita a area que já tem ué auheuhauh igual spell normal
 

local arr = {
{0, 1, 0},
{1, 3, 1},
{0, 1, 0}
}
 
local area = createCombatArea(arr)

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

 

aproveita a area que já tem ué auheuhauh igual spell normal

 

local arr = {
{0, 1, 0},
{1, 3, 1},
{0, 1, 0}
}
 
local area = createCombatArea(arr)

 

Ele executa o efeito, mas não cura.

local arr = ({ 
{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}, 
})
 
local area = createCombatArea(arr)
 
function onCastSpell(cid, var)
local pos = getCreaturePosition(cid)
local master = getCreatureMaster(cid)
local m = getPlayerMaxMana(master) or 0
doAreaCombatMana(cid, pos, area, m/10, m/10, CONST_ME_WATERSPLASH)
return true
end

:(

Não se esqueça de dar REP+ para quem te ajudou e caso seja a solução marcar como melhor resposta!

 

NÃO CLIQUE AQUI!

NEM AQUI!

________________________________________________________________________________________________________________________________________________________________________________________________________________________

 

A imaginação é mais importante que o conhecimento.” Albert Einstein

Link para o post
Compartilhar em outros sites
local master = getCreatureMaster(cid)

 

vc chamou a variável master como a função de pegar o master mas o parametro de getCreatureMaxMana(cid) é um uid então vc tem que colocar .uid no final, ficando assim:

 

local arr = ({ {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}, 
})


local area = createCombatArea(arr)


function onCastSpell(cid, var)
local pos = getCreaturePosition(cid)
local master = getCreatureMaster(cid).uid
local m = getCreatureMaxMana(master) or 0
doAreaCombatMana(cid, pos, area, m/10, m/10, CONST_ME_WATERSPLASH)
return true
end

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

 

vc chamou a variável master como a função de pegar o master mas o parametro de getCreatureMaxMana(cid) é um uid então vc tem que colocar .uid no final, ficando assim:

 

local arr = ({ {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}, 
})


local area = createCombatArea(arr)


function onCastSpell(cid, var)
local pos = getCreaturePosition(cid)
local master = getCreatureMaster(cid).uid
local m = getCreatureMaxMana(master) or 0
doAreaCombatMana(cid, pos, area, m/10, m/10, CONST_ME_WATERSPLASH)
return true
end

Deu esse erro: 15:Attempt to index a number value stack traceback: [C]: in function '__index'

local arr = ({ 
{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}, 
})
 
local area = createCombatArea(arr)
 
function onCastSpell(cid, var)
local pos = getCreaturePosition(cid)
local master = getCreatureMaster(cid).uid
local m = getPlayerMaxMana(master) or 0
doAreaCombatMana(cid, pos, area, m/10, m/10, CONST_ME_WATERSPLASH)
return true
end

Não se esqueça de dar REP+ para quem te ajudou e caso seja a solução marcar como melhor resposta!

 

NÃO CLIQUE AQUI!

NEM AQUI!

________________________________________________________________________________________________________________________________________________________________________________________________________________________

 

A imaginação é mais importante que o conhecimento.” Albert Einstein

Link para o post
Compartilhar em outros sites
local arr = { 
{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} 
}


local area = createCombatArea(arr)


function onCastSpell(cid, var)
local pos = getCreaturePosition(cid)
local master = getCreatureMaster(cid).uid
local m = getPlayerMaxMana(master) or 0
doAreaCombatMana(cid, pos, area, (m/10), (m/10), CONST_ME_WATERSPLASH)
return true
end

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

 

local arr = { 
{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} 
}


local area = createCombatArea(arr)


function onCastSpell(cid, var)
local pos = getCreaturePosition(cid)
local master = getCreatureMaster(cid).uid
local m = getPlayerMaxMana(master) or 0
doAreaCombatMana(cid, pos, area, (m/10), (m/10), CONST_ME_WATERSPLASH)
return true
end

 

Botei isso dai e continua dando o mesmo erro, agora na linha 17, esse .uid ai hein... :P

Não se esqueça de dar REP+ para quem te ajudou e caso seja a solução marcar como melhor resposta!

 

NÃO CLIQUE AQUI!

NEM AQUI!

________________________________________________________________________________________________________________________________________________________________________________________________________________________

 

A imaginação é mais importante que o conhecimento.” Albert Einstein

Link para o post
Compartilhar em outros sites

remove o .uid e vê se dá certo então, pra mim teria que por mas não sei como funciona seu server...

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

remove o .uid e vê se dá certo então, pra mim teria que por mas não sei como funciona seu server...

Dai ele não dá erro nenhum mas também não funciona.

 

Edit: Ele solta o efeito WATERSPLASH, coisa que com o .uid ele não fazia.

Editado por mateusak (veja o histórico de edições)

Não se esqueça de dar REP+ para quem te ajudou e caso seja a solução marcar como melhor resposta!

 

NÃO CLIQUE AQUI!

NEM AQUI!

________________________________________________________________________________________________________________________________________________________________________________________________________________________

 

A imaginação é mais importante que o conhecimento.” Albert Einstein

Link para o post
Compartilhar em outros sites
local arr = { 
{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} 
}


local area = createCombatArea(arr)


function onCastSpell(cid, var)
local pos = getCreaturePosition(cid)
local master = getCreatureMaster(cid)
local m = getPlayerMaxMana(master) or 0
doAreaCombatMana(cid, pos, area, -(m/10), -(m/10), CONST_ME_WATERSPLASH)
return true
end

tinha faltado um - na frente do m/10 porque vc tá removendo mana :D testa agora

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites
local arr = { 
{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} 
}


local area = createCombatArea(arr)


function onCastSpell(cid, var)
local pos = getCreaturePosition(cid)
local master = getCreatureMaster(cid)
local m = getPlayerMaxMana(master) or 0
doAreaCombatMana(cid, pos, area, -(m/10), -(m/10), CONST_ME_WATERSPLASH)
return true
end

tinha faltado um - na frente do m/10 porque vc tá removendo mana :D testa agora

 

Na verdade é para adicionar mana... 10% da mana do jogador que invocou o monstro para todos dentro da área :/

Não se esqueça de dar REP+ para quem te ajudou e caso seja a solução marcar como melhor resposta!

 

NÃO CLIQUE AQUI!

NEM AQUI!

________________________________________________________________________________________________________________________________________________________________________________________________________________________

 

A imaginação é mais importante que o conhecimento.” Albert Einstein

Link para o post
Compartilhar em outros sites

puts, então nao sei.. se tá dando o efeito significa que funciona mas era pra estar adicionando a mana '--'

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

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.

  • Conteúdo Similar

    • Por BonasxD
      Bom galera primeiramente não sei se estou na area correta ou se nao estou, se nao por favor mover para area certa, grato!
      Estou com esse erro ao tenta instalar o gesior usando a tfs 0.4 não passa dessa parte ja tentei de tudo e nao sei oque fazer ;(
       
      Testei o mesmo procedimento no meu Windows e Funcionou corretamente agora no meu VM(Ubuntu22) não passa desse erro. 
       
      Ja pesquisei por tudo e não sei oque fazer

    • Por Kill of sumoners
      Boa noite, estou com um erro ao atacar um player em meu sv eu nao pego pk, nem sai magia, aparece a mensagem "voce so pode usar isso em criaturas"
      obs: magia em area acerta e pega pk, apenas as targets ou hits de arma nao vao 
    • Por Guilherme HP
      ola boa noite, alguem poderia ta me ajudando nesse erro que apareceu na minha vps quando vou abrir o meu game?

      [./tfs: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory]
    • Por Biel249
      Bom dia. Estou passando por esse problema com meu otserver tibia 8.6 eu coloco online tudo certinho portas abertas dmz e dns configurada mas não fica on só eu consigo entrar. Ja entrei em contato com a fornecedora de Internet eles alegaram que meu ip é privado e só conseguiria pagando um ip público. Alguém me ajuda????
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo