Ir para conteúdo

Featured Replies

Postado
  • Autor
2 horas atrás, dominus disse:

Esse error se deu por causa da função isCreature(monster) que está retornando um valor falso, ou seja, não é um monstro que está na variável "monster" da função. 

 

No caso dele estar sumindo quando morto, deva ser devido o programador ter feito a função "ondeath()" igual à "onpreparedeath ()" essa em questão trata sobre como se dá a morte da criatura.

 

Como você mesmo testou, ela funciona em outros servidores menos editados.

Infelizmente é um impedimento te ajudar nessa questão. 

Eu não saberia dizer se esse error acontece exatamente devido a isso.

A base para o que tu queres, já foi feito, agora é só ir adaptando da forma que pra ti sejas mais satisfatório. 

 

 

ok obrigado, rep + pra você  axo que vou desistir disso

2 horas atrás, dominus disse:

Esse error se deu por causa da função isCreature(monster) que está retornando um valor falso, ou seja, não é um monstro que está na variável "monster" da função. 

 

No caso dele estar sumindo quando morto, deva ser devido o programador ter feito a função "ondeath()" igual à "onpreparedeath ()" essa em questão trata sobre como se dá a morte da criatura.

 

Como você mesmo testou, ela funciona em outros servidores menos editados.

Infelizmente é um impedimento te ajudar nessa questão. 

Eu não saberia dizer se esse error acontece exatamente devido a isso.

A base para o que tu queres, já foi feito, agora é só ir adaptando da forma que pra ti sejas mais satisfatório. 

 

 

olha encontrei este script que afeta todos os pokemons sera q pode ser nele o erro?
wildpokemon.lua afeta todos os pokemons selvagens
 

Spoiler

function onAttack(cid, target)

    if isSummon(target) and getDistanceBetween(getThingPos(target), getThingPos(getCreatureMaster(target))) > 1 then
            doMonsterSetTarget(cid, getCreatureMaster(target))
    elseif isPlayer(target) and #getCreatureSummons(target) > 0 then
            for _, summon in pairs(getCreatureSummons(target)) do
                    if getDistanceBetween(getThingPos(target), getThingPos(summon)) <= 1 then
                            doMonsterSetTarget(cid, summon)
                            break
                    end
            end
    end
    
return true
end

function onThink(cid, interval)

doSendAnimatedText(getThingPos(cid), getPlayerStorageValue(cid, 1008).."/"..getPlayerStorageValue(cid, 1009).."", COLOR_GRASS)

end

function onDirection(cid)

    if isSleeping(cid) or isParalyze(cid) then
    return false
    end

    if getPlayerStorageValue(cid, 446) >= 1 then
    return false
    end

    if isSummon(cid) and isCreature(getCreatureTarget(cid)) and not isSleeping(cid) and not isParalyze(cid) then
    return true
    end

    if getCreatureSpeed(cid) == 0 then
    return false
    end

    if isPassive(cid) and getCreatureSpeed(cid) ~= 1 then
    return false
    end

return true
end

function onCast(cid, target)

    if isSleeping(cid) then
    return false
    end

    if getCreatureCondition(cid, CONDITION_INVISIBLE) and not isGhostPokemon(cid) then
    return false
    end

return true
end

tive que voltar aqui pra te dizer isso
nesse script ganha o premio quem mata o monstro
no caso do tibia o proprio jogador mata mas no pokemon quem mata não é o jogador mas sim seu sumoner
sera esse o problema?
não é um monstro nem um jogador mas sim um sumoner
voutei no tibia e testei matando com summoner e é isso mesmo não ganha nada
a questão aqui é que o sumoner é quem mata e n o player

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

  • Respostas 60
  • Visualizações 2.4k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • @xWhiteWolf me ajuda aqui mano http://www.tibiaking.com/forum/topic/67062-subir-escada-bug/#comment-385003

  • Esse error se deu por causa da função isCreature(monster) que está retornando um valor falso, ou seja, não é um monstro que está na variável "monster" da função.    No caso dele estar sumind

  • Fiz uma modificação no script:     Ps: muda "isplayeron ()" por: "getCreatureName ()"

Postado
15 horas atrás, wevertonvrb disse:

ok obrigado, rep + pra você  axo que vou desistir disso

olha encontrei este script que afeta todos os pokemons sera q pode ser nele o erro?
wildpokemon.lua afeta todos os pokemons selvagens
 

  Mostrar conteúdo oculto

function onAttack(cid, target)

    if isSummon(target) and getDistanceBetween(getThingPos(target), getThingPos(getCreatureMaster(target))) > 1 then
            doMonsterSetTarget(cid, getCreatureMaster(target))
    elseif isPlayer(target) and #getCreatureSummons(target) > 0 then
            for _, summon in pairs(getCreatureSummons(target)) do
                    if getDistanceBetween(getThingPos(target), getThingPos(summon)) <= 1 then
                            doMonsterSetTarget(cid, summon)
                            break
                    end
            end
    end
    
return true
end

function onThink(cid, interval)

doSendAnimatedText(getThingPos(cid), getPlayerStorageValue(cid, 1008).."/"..getPlayerStorageValue(cid, 1009).."", COLOR_GRASS)

end

function onDirection(cid)

    if isSleeping(cid) or isParalyze(cid) then
    return false
    end

    if getPlayerStorageValue(cid, 446) >= 1 then
    return false
    end

    if isSummon(cid) and isCreature(getCreatureTarget(cid)) and not isSleeping(cid) and not isParalyze(cid) then
    return true
    end

    if getCreatureSpeed(cid) == 0 then
    return false
    end

    if isPassive(cid) and getCreatureSpeed(cid) ~= 1 then
    return false
    end

return true
end

function onCast(cid, target)

    if isSleeping(cid) then
    return false
    end

    if getCreatureCondition(cid, CONDITION_INVISIBLE) and not isGhostPokemon(cid) then
    return false
    end

return true
end

tive que voltar aqui pra te dizer isso
nesse script ganha o premio quem mata o monstro
no caso do tibia o proprio jogador mata mas no pokemon quem mata não é o jogador mas sim seu sumoner
sera esse o problema?
não é um monstro nem um jogador mas sim um sumoner
voutei no tibia e testei matando com summoner e é isso mesmo não ganha nada
a questão aqui é que o sumoner é quem mata e n o player

 

 

 

Já fiz o script pensando em summon, na qual o ataque é cogitado como se fosse o player.

 

Estive eu testando a fundo o sistema tentando encontrar um possível "bug", acabei encontrando uma falha que pode causar erro.

 

O que acontece? A variável "M" fica com os valores alocados dos players atacantes, mas ao matar a criatura, o certo seria remove essa informação para caso, venha a matar de novo, seus valores anteriores não estejam mais salvos.

 

No caso toda vez que alguém receber seu item, deveria ser retirado seus dados da variável:

Citar

if(getDamageInMonster(cid,player) > 50)then

-- adiciona o item ao player

table.remove (M, player)

-- assim ele retira os dados do player da tabela "M"

 

O script já foi feito pensando em summons:

 

Citar

if(tonumber(get) and isPlayer(get))then -- caso o summon seja de um player, adiciona o dano como se fosse o player 

 

Postado
  • Autor
4 horas atrás, dominus disse:

Já fiz o script pensando em summon, na qual o ataque é cogitado como se fosse o player.

 

Estive eu testando a fundo o sistema tentando encontrar um possível "bug", acabei encontrando uma falha que pode causar erro.

 

O que acontece? A variável "M" fica com os valores alocados dos players atacantes, mas ao matar a criatura, o certo seria remove essa informação para caso, venha a matar de novo, seus valores anteriores não estejam mais salvos.

 

No caso toda vez que alguém receber seu item, deveria ser retirado seus dados da variável:

 

O script já foi feito pensando em summons:

 

 

sim, mas teste no seu servidor matando com um sumoner para você ver, se voce matar com sumoner no tibia não ganha o item eu ja fiz esse teste, sumonei um demon skeleton e matei o monstro em questão com ele e não ganhei nada

ou seja no tibia que testei (se matar com player tudo ok, mas se eu sumonar e matar com sumoner não funciona)

acho que pra dar certo tem que deixar o único atacante como sumoner pois monstro nem player ataca



outra coisa

de repente começou a gerar um erro que não estava gerando
ERROR
 

Spoiler

[13/02/2016 13:20:38] [Error - CreatureScript Interface]
[13/02/2016 13:20:38] data/creaturescripts/scripts/kill.lua:onDeath
[13/02/2016 13:20:38] Description:
[13/02/2016 13:20:38] data/creaturescripts/scripts/stats.lua:9: function getDamageInMonster(): variavel monster nao e monstro.
[13/02/2016 13:20:38] stack traceback:
[13/02/2016 13:20:38]     [C]: in function 'error'
[13/02/2016 13:20:38]     data/creaturescripts/scripts/stats.lua:9: in function 'getDamageInMonster'
[13/02/2016 13:20:38]     data/creaturescripts/scripts/kill.lua:8: in function <data/creaturescripts/scripts/kill.lua:5>

a unica mudança que fiz no script ou adicionar isso
table.remove (M, player)

e mesmo que eu retire essa parte o erro continua
vou ate postar o script aqui novamente
kill

Spoiler

--[[
   autor = Marcryzius
   data = sexta-feira, 05 de fevereiro de 2016
   ]]
function onDeath(cid, corpse, deathList)
for _,player in pairs(deathList) do
   if(isPlayer(player) and getCreatureName(player))then
      if(getDamageInMonster(cid,player) > 50)then
      doPlayerAddItem(player, 2160, 10)
      table.remove (M, player)
      end
   end
end
return true
end 


stats

Spoiler

 --[[
   autor = Marcryzius
   data = sexta-feira, 05 de fevereiro de 2016
   ]]
local M = {}
function getDamageInMonster(monster,cid)
local monster,cid,m_life,p_dano = tonumber(monster),tonumber(cid),0,0
if not(monster or cid)then return 0,error('function getDamageInMonster(): monster or cid, not number') end
if not(isCreature(monster))then return 0,error('function getDamageInMonster(): variavel monster nao e monstro.') end
   for k,v in pairs(M[monster]) do
      if(k == cid)then p_dano = v end
      m_life = m_life + v
   end
   return math.floor(p_dano/(m_life/100))
end

function onStatsChange(cid, attacker, tipo, combat, value)
local atac = attacker
if not(M[cid])then M[cid] = {} end
if not(tipo == 1)then return true end

   if(isPlayer(attacker))then
      if not(M[cid][attacker])then M[cid][attacker] = 0   end
      M[cid][attacker] = M[cid][attacker] + value
   elseif(isMonster(attacker))then -- caso seja um monstro o atacante
   local get = getCreatureMaster(attacker) -- averigua se n�o � um summon que est� atacando
      atac = get
      if(tonumber(get) and isPlayer(get))then -- caso o summon seja de um player, adiciona o dano como se fosse o player
         if not(M[cid][get])then M[cid][get] = 0   end
         M[cid][get] = M[cid][get] + value
      end
   end
   return true
end

 

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

Postado
1 hora atrás, wevertonvrb disse:

sim, mas teste no seu servidor matando com um sumoner para você ver, se voce matar com sumoner no tibia não ganha o item eu ja fiz esse teste, sumonei um demon skeleton e matei o monstro em questão com ele e não ganhei nada

ou seja no tibia que testei (se matar com player tudo ok, mas se eu sumonar e matar com sumoner não funciona)



outra coisa

de repente começou a gerar um erro que não estava gerando
ERROR
 

  Ocultar conteúdo

[13/02/2016 13:20:38] [Error - CreatureScript Interface]
[13/02/2016 13:20:38] data/creaturescripts/scripts/kill.lua:onDeath
[13/02/2016 13:20:38] Description:
[13/02/2016 13:20:38] data/creaturescripts/scripts/stats.lua:9: function getDamageInMonster(): variavel monster nao e monstro.
[13/02/2016 13:20:38] stack traceback:
[13/02/2016 13:20:38]     [C]: in function 'error'
[13/02/2016 13:20:38]     data/creaturescripts/scripts/stats.lua:9: in function 'getDamageInMonster'
[13/02/2016 13:20:38]     data/creaturescripts/scripts/kill.lua:8: in function <data/creaturescripts/scripts/kill.lua:5>

a unica mudança que fiz no script ou adicionar isso
table.remove (M, player)

e mesmo que eu retire essa parte o erro continua
vou ate postar o script aqui novamente
kill

  Ocultar conteúdo

--[[
   autor = Marcryzius
   data = sexta-feira, 05 de fevereiro de 2016
   ]]
function onDeath(cid, corpse, deathList)
for _,player in pairs(deathList) do
   if(isPlayer(player) and getCreatureName(player))then
      if(getDamageInMonster(cid,player) > 50)then
      doPlayerAddItem(player, 2160, 10)
      table.remove (M, player)
      end
   end
end
return true
end 


stats

  Ocultar conteúdo

 --[[
   autor = Marcryzius
   data = sexta-feira, 05 de fevereiro de 2016
   ]]
local M = {}
function getDamageInMonster(monster,cid)
local monster,cid,m_life,p_dano = tonumber(monster),tonumber(cid),0,0
if not(monster or cid)then return 0,error('function getDamageInMonster(): monster or cid, not number') end
if not(isCreature(monster))then return 0,error('function getDamageInMonster(): variavel monster nao e monstro.') end
   for k,v in pairs(M[monster]) do
      if(k == cid)then p_dano = v end
      m_life = m_life + v
   end
   return math.floor(p_dano/(m_life/100))
end

function onStatsChange(cid, attacker, tipo, combat, value)
local atac = attacker
if not(M[cid])then M[cid] = {} end
if not(tipo == 1)then return true end

   if(isPlayer(attacker))then
      if not(M[cid][attacker])then M[cid][attacker] = 0   end
      M[cid][attacker] = M[cid][attacker] + value
   elseif(isMonster(attacker))then -- caso seja um monstro o atacante
   local get = getCreatureMaster(attacker) -- averigua se n�o � um summon que est� atacando
      atac = get
      if(tonumber(get) and isPlayer(get))then -- caso o summon seja de um player, adiciona o dano como se fosse o player
         if not(M[cid][get])then M[cid][get] = 0   end
         M[cid][get] = M[cid][get] + value
      end
   end
   return true
end

 

 

 

 

 

Esse erro não era para acontecer pois a função ondeath () está associada ao monstro, ou seja, apenas ele deveria executar esse script, se for ele que esteja - somente ele - executando esse script, então sua função iscreature () deva estar retornando um valor falso para que isso ocorra.

 

Vou testar usando apenas summons como você descreveu.

Postado
  • Autor
11 minutos atrás, dominus disse:

 

Esse erro não era para acontecer pois a função ondeath () está associada ao monstro, ou seja, apenas ele deveria executar esse script, se for ele que esteja - somente ele - executando esse script, então sua função iscreature () deva estar retornando um valor falso para que isso ocorra.

 

Vou testar usando apenas summons como você descreveu.

outra coisa que eu vi na sua explicação  ali que pode estar também causando o erro
você colocou para  quando monstro, prayer e sumoner atacar nessa parte
 

Spoiler

  elseif(isMonster(attacker))then -- caso seja um monstro o atacante
   local get = getCreatureMaster(attacker) -- averigua se n�o � um summon que est� atacando
      atac = get
      if(tonumber(get) and isPlayer(get))then -- caso o summon seja de um player, adiciona o dano como se fosse o player
         if not(M[cid][get])then M[cid][get] = 0   end
         M[cid][get] = M[cid][get] + value
      end
   end

no pokémon nem monstro nem player atacam os únicos atacantes são os summons dos players

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

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo