[Encerrado] Creature not found

atakashi
em Tópicos Sem Resposta

atakashi

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 11/12/07Posts: 332

Estou com um problema nesse script, ele funciona mas as vezes da esse erro dizendo que não encontrou a criatura do jogador.

 

[Error - CreatureScript Interface]
In a timer event called from:
data/creaturescripts/scripts/exp2.0.lua:onStatsChange
Description:
(luaGetCreatureMaster) Creature not found

 

o script é este.

if isSummon(cid) and isPlayer(getCreatureMaster(cid)) then
	addEvent(function()
		if isCreature(getCreatureMaster(cid)) then
			doPlayerSendCancel(getCreatureMaster(cid), "%PokeHealth@" .. getCreatureHealth(cid) .. "@" .. getCreatureMaxHealth(cid))
		
		end
	end, 100)
end



...

botei ("...") pq continua, está parte ai que da o erro.

pokepro.gif

   Pokemon PRO, Profissionais em diversão.

 

Servidor 24 Horas
Uptime: 100%

 

 

 

Crypter

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 24/02/17Posts: 368Gênero: Masculino
if isSummon(cid) or isPlayer(getCreatureMaster(cid)) then
	addEvent(function()
		if isCreature(getCreatureMaster(cid)) then
			doPlayerSendCancel(getCreatureMaster(cid), "%PokeHealth@" .. getCreatureHealth(cid) .. "@" .. getCreatureMaxHealth(cid))
		end
	end, 100)
end

 

atakashi

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 11/12/07Posts: 332

Acho que não adianta crypter, pelo fato de eu ter tirado o " 

isPlayer(getCreatureMaster(cid))" e continuado dando erro.

pokepro.gif

   Pokemon PRO, Profissionais em diversão.

 

Servidor 24 Horas
Uptime: 100%

 

 

 

dalvorsn

õ/
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 21/12/11Posts: 750Gênero: Masculino

Não tão repassando o cid pro addEvent ...

 

if isSummon(cid) or isPlayer(getCreatureMaster(cid)) then
	addEvent(function(cid)
		if isCreature(getCreatureMaster(cid)) then
			doPlayerSendCancel(getCreatureMaster(cid), "%PokeHealth@" .. getCreatureHealth(cid) .. "@" .. getCreatureMaxHealth(cid))
		end
	end, 100, cid)
end

 

"A covardia coloca a questão: É seguro? O comodismo coloca a questão: É popular? A etiqueta coloca a questão: é elegante? Mas a consciência coloca a questão, É correto? E chega uma altura em que temos de tomar uma posição que não é segura, não é elegante, não é popular, mas o temos de fazer porque a nossa consciência nos diz que é essa a atitude correta."

(Martin Luther King)

atakashi

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 11/12/07Posts: 332

provavel seja isso mesmo, vou testa e volto com o resultado, desde ja obrigado :).


Edit: continuo mesmo erro :/

pokepro.gif

   Pokemon PRO, Profissionais em diversão.

 

Servidor 24 Horas
Uptime: 100%

 

 

 

Kydrai

"Keep Your Mind Wide Open"
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/08/06Posts: 250

O erro é pq a criatura (cid) não existe (morreu ou foi removida) quando executa a função dentro do addEvent.

Teria que passar o getCreatureMaster(cid) como parâmetro pro addEvent, ao invés de somente o cid.

Ainda sim, se o cid não existe no momento que executa o addEvent você não vai conseguir executar as funções getCreatureHealth e getCreatureMaxHealth dentro do addEvent, teria que ter outra forma de pegar o hp dele.

 

Seria algo como:

if isSummon(cid) and isPlayer(getCreatureMaster(cid)) then
    addEvent(function(cid, master)
        if isCreature(master) then
          if isCreature(cid) then
              doPlayerSendCancel(master, "%PokeHealth@" .. getCreatureHealth(cid) .. "@" .. getCreatureMaxHealth(cid))
          else
              -- outro comando para pegar o hp
          end
        end
    end, 100, cid, getCreatureMaster(cid))
end

Sobre o hp, se o max health não muda, você pode passar ele como parâmetro junto com o cid e o master. Já o health, por ser onStatsChange, dependendo dos scripts do servidor, da pra saber o hp após executar este script somando o valor do dano com o hp.

Caso contrário, imagino que você tenha algum comando pra pegar o hp da criatura que não existe (direto da pokeball, por exemplo).

~ Kydrai
Programador / Scripter

 

sign.png

atakashi

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 11/12/07Posts: 332

Pelo que percebi o HP da pokeball é dado assim, doItemSetAttribute(item.uid, "hp", )

 

    local pokelife = (getCreatureHealth(pokemon) / getCreatureMaxHealth(pokemon))

    if edit then
        doItemSetAttribute(pokeball.uid, "happy", happy)
        doItemSetAttribute(pokeball.uid, "hunger", hunger)
        doItemSetAttribute(pokeball.uid, "hp", pokelife)
    end

porem volta pro mesmo lugar.

pokepro.gif

   Pokemon PRO, Profissionais em diversão.

 

Servidor 24 Horas
Uptime: 100%

 

 

 

Poccnn

Enquanto houver armas no mundo, haverá guerra!
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 07/03/16Posts: 1418Gênero: Masculino

não se pode adicionar o cid a eventos pois o mesmo muda a cada ação da criatura.

Envie ao evento o parametro com o id GUID do player, assim ele poderá pegar o cid do player mesmo ele tendo mudado.

"Deus é amor, mas matou 99,99999% de todos os seres viventes do mundo com o diluvio.

Deus é misericórdia, mas condena as pessoas ao tormento eterno do inferno.

Deus é pai, mas abandonou seus filhos a servidão.

Deus é vida, mas condenou a humanidade a morte.

Deus é o senhor. Senhor das guerras, da morte, do ódio.

 

Ninguém que ame a humanidade, mataria 99,99999% da população, não só de humanos, bem como dos demais animais, por amor. Isso não é amor, é doença, psicose de um sádico que gosta de ver sua 'criação' sofrer e ainda quer 'pagar' de misericordioso, de deus amor.

 

Não quero seu amor; não quero sua misericórdia, não quero ser seu filho, não quero sua vida, não quero que seja meu senhor.

Tu és um psicótico, doente, hipócrita, assassino; não me venha querer se passar por bondoso, amoroso, misericordioso."

Kydrai

"Keep Your Mind Wide Open"
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/08/06Posts: 250
2 horas atrás, Poccnn disse:

não se pode adicionar o cid a eventos pois o mesmo muda a cada ação da criatura.

Envie ao evento o parametro com o id GUID do player, assim ele poderá pegar o cid do player mesmo ele tendo mudado.

 

O cid não altera a cada ação, ele é gerado quando a criatura é "colocada no mapa" (login, /m, /s, etc). E nesse caso dele o cid é um monstro, o erro é porque não localiza o monstro.

 

Não da pra saber exatamente tudo que ocorre no serv só com essas linhas, mas supondo que nada influencie no dano após esse script, você poderia trocar tudo isso por algo similar a isso:

if isSummon(cid) and isPlayer(getCreatureMaster(cid)) then
	local hp = getCreatureHealth(cid)
	if type == STATSCHANGE_HEALTHLOSS then
		hp = hp - value
	elseif type == STATSCHANGE_HEALTHGAIN then
		hp = hp + value
	end
	doPlayerSendCancel(getCreatureMaster(cid), "%PokeHealth@" .. hp .. "@" .. getCreatureMaxHealth(cid))
end

Isso é só um exemplo, vai depender do que tem no seu serv.

~ Kydrai
Programador / Scripter

 

sign.png

Stigal

don't ever stop...
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 28/11/10Posts: 3402Gênero: Masculino
A questão neste tópico de suporte foi encerrada por falta de resposta. Este tópico está fechado e foi movido para Suporte - Tópicos Sem Resposta

VI6MDIG.png

 

"O fracasso é a oportunidade de se começar de novo inteligentemente"

Minhas Redes Sociais: Youtube | Página & Grupo | Steam  | Discord Xtibia | Skype: @mrooger

 

OTpanel