Ir para conteúdo
  • 0

Spring Trap

Pergunta

Galera sera q alguem pode me ajudar? estou tendo problemas com alguns npcs do meu servidor. Eles funciona normal mais quando eu falo HI e vou pra bem longe sem falar bye eles ainda fica como se tivesse falando comigo, quando eu volto eles ainda estao esperando respostas de mim. 

 

E na distro fica varias vezes repetindo o mesmo erro

 

ERRO:

Spoiler

[Error - NpcScript Interface] 
data/npc/scripts/mayor2.lua:onThink
Description: 
data/npc/scripts/mayor2.lua:92: attempt to compare number with nil
stack traceback:
data/npc/scripts/mayor2.lua:92: in function <data/npc/scripts/mayor2.lua:83>

 

Script mayor2:

Spoiler

local focus = 0
local talk_start = 0
local target = 0
local following = false
local attacking = false

function onThingMove(creature, thing, oldpos, oldstackpos)

end


function onCreatureAppear(creature)

end


function onCreatureDisappear(cid, pos)
      if focus == cid then
          selfSay('Good bye then.')
          focus = 0
          talk_start = 0
      end
end


function onCreatureTurn(creature)

end


function msgcontains(txt, str)
      return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end


function onCreatureSay(cid, type, msg)
      msg = string.lower(msg)

  
    if msgcontains(msg, 'hi') then

selfSay('Hey Can you give me 1 Bandit King Hood?.')    
          focus = cid
          talk_start = os.clock()

      elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
          selfSay('Sorry, ' .. getCreatureName(cid) .. '! I talk to you in a minute.')

    elseif focus == cid then
        talk_start = os.clock()

                        if msgcontains(msg, 'yes') then
            if getPlayerStorageValue(cid,6004) == 1 then
            
        selfSay('Sorry You Cant Do this quest.')    
            elseif msgcontains(msg, 'yes') then
                       if doPlayerRemoveItem(cid,5879,1) == 0 then
                       selfSay('Sorry Dont have that items.')    

else        
                if doPlayerAddItem(cid,5919,1) then
                
                    setPlayerStorageValue(cid,6004,1)
                                    selfSay('Thanks take this')
                    focus = 0
                    talk_start = 0

            
end
end
end
        
elseif msgcontains(msg, 'bye') and getDistanceToCreature(cid) < 4 then
            selfSay('Good bye, ' .. getCreatureName(cid) .. '!')
            focus = 0
            talk_start = 0
        end
    end

end
function onThink()
    doNpcSetCreatureFocus(focus)
      if (os.clock() - talk_start) > 45 then
          if focus > 0 then
              selfSay('Next Please...')
          end
              focus = 0
      end
     if focus ~= 0 then
         if getDistanceToCreature(focus) > 5 then
             selfSay('Good bye then.')
             focus = 0
         end
     end
end
 

 

Tem varios npc igual a esse que da esse erro na distro tem um parecido mais nao da, e esta a mesma coisa

 

Esse nao da erro:

Spoiler

local focus = 0
local talk_start = 0
local target = 0
local following = false
local attacking = false

function onThingMove(creature, thing, oldpos, oldstackpos)

end


function onCreatureAppear(creature)

end


function onCreatureDisappear(cid, pos)
      if focus == cid then
          selfSay('Hey!.')
          focus = 0
          talk_start = 0
      end
end


function onCreatureTurn(creature)

end


function msgcontains(txt, str)
      return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end


function onCreatureSay(cid, type, msg)
      msg = string.lower(msg)

      if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 and getCreatureCondition(cid, CONDITION_INFIGHT) == false then
        
            selfSay('I see you want to fight with me, But not in the town???')
            focus = cid
            talk_start = os.clock()
        

      elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
          selfSay('Sorry, ' .. getCreatureName(cid) .. '! ????????.')

      elseif focus == cid then
        talk_start = os.clock()

            if msgcontains(msg, 'yes') then
                if getPlayerStorageValue(cid,8000) == 16 then
                    doTeleportThing(cid, { x=46, y=553, z=7})
                    selfSay('Yes!')
                    focus = 0
                    talk_start = 0
                else
                    selfSay('Sorry You Cant Do this saga.')
                end

        elseif msgcontains(msg, 'bye') and getDistanceToCreature(cid) < 4 then
            selfSay('Good bye, ' .. getCreatureName(cid) .. '!')
            focus = 0
            talk_start = 0
        end
    end
end

function onThink()
    doNpcSetCreatureFocus(focus)
      if (os.clock() - talk_start) > 45 then
          if focus > 0 then
              selfSay('Next Please...')
          end
              focus = 0
      end
     if focus ~= 0 then
         if getDistanceToCreature(focus) > 5 then
             selfSay('Good bye then.')
             focus = 0
         end
     end
end
 

 

Rep + pra quem ajudar

@Danihcv @dalvorsn @Yan Liima

Editado por Spring Trap
Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

@Spring Trap, ah saquei... Então nesse caso deixa o npc.lua como tava, então.. :v

*ou seja, remove essa checagem:

if s.z ~= c.z then
	return nil
end

 

Ficando assim:

function getNpcDistanceToCreature(id)
	if id == 0 or id == nil then
		selfIdle()
		return nil
	end

	c = getCreaturePosition(id)
	if c == nil then
		return nil
	end

	s = getNpcPos()
	return math.max(math.abs(s.x-c.x), math.abs(s.y-c.y))
end

 

Link para o comentário
Compartilhar em outros sites

  • 0
15 minutos atrás, Danihcv disse:

@Spring Trap, ah saquei... Então nesse caso deixa o npc.lua como tava, então.. :v

*ou seja, remove essa checagem:


if s.z ~= c.z then
	return nil
end

 

Ficando assim:


function getNpcDistanceToCreature(id)
	if id == 0 or id == nil then
		selfIdle()
		return nil
	end

	c = getCreaturePosition(id)
	if c == nil then
		return nil
	end

	s = getNpcPos()
	return math.max(math.abs(s.x-c.x), math.abs(s.y-c.y))
end

 

 

Funcionou obrigado man serio mesmo esse erro tava enchendo meu saco

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...