Ir para conteúdo

[ Resolvido ] [npc] Cantor


HeXo

Posts Recomendados

Olá pessoal. To precisando de uma ajuda nesse npc:

(baseado no [npc]cantor do frerety)

 

local focus = 0

local talk_start = 0

local target = 0

local following = false

local attacking = false

 

local tempo = 2

local musica = {"LALALA";"LULULU";}

 

start = os.clock()

step = 1

 

onThink = function ()

 

if step > 0 and os.clock() - start >= tempo then

start = os.clock()

if musica[step] == nil then

step = 0

return 1

elseif musica[step] ~= 0 then

selfSay(musica[step])

end

step = step + 1

end

end

Seguinte, ele fala as frases de 2 em 2 segundos, mas depois que ele fala as 2 frases, ele nao fala mais nada.

Como eu faço para ele repetir as frases??

 

Obrigado!

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

Caso queira um loop:

 

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

local tempo = 2
local musica = {"LALALA";"LULULU";}

start = os.clock()
step = 1

onThink = function ()

if step > 0 and os.clock() - start >= tempo then
start = os.clock()
if musica[step] == nil then
step = 0
return 1
elseif musica[step] ~= 0 then
selfSay(musica[step])
end
if step == table.getn(musica) + 1 then
step = 1
else
step = step + 1
end
end
end

Link para o comentário
Compartilhar em outros sites

Caso queira um loop:

 

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

local tempo = 2
local musica = {"LALALA";"LULULU";}

start = os.clock()
step = 1

onThink = function ()
...

 

Exato, eu quero um loop. Porém eu testei esse exemplo que vc postou e não funcionou aqui.

O npc fala 1 vez as duas palavras e depois para.

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

que ot voce usa e que versao e ele.

 

local focus = 0

local talk_start = 0

local target = 0

local following = false

local attacking = false

 

local musica = {"LALALA";"LULULU";}

local tempo=2; var=math.random(1,2);

time = os.clock()

function onThink()

npcHandler:onThink()

if (time + tempo) < os.clock() then

selfSay(musica[var])

time = os.clock()

end

end

 

esse script que voce postou voce nao pode usar mate rand por que o mat rand pega um dos numeros aleatoriamente o que voce deveria fazer e usar for que resolveria o problema

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

que ot voce usa e que versao e ele.

 

esse script que voce postou voce nao pode usar mate rand por que o mat rand pega um dos numeros aleatoriamente o que voce deveria fazer e usar for que resolveria o problema

 

estou usando o TFS 0.3.4

 

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)



-- OTServ event handling functions start
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
-- OTServ event handling functions end

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

local musica = {"LALALA";"LULULU";}
local tempo=2; var=math.random(1,2);
time = os.clock()
function onThink()
npcHandler:onThink()
if (time + tempo) < os.clock() then
selfSay(musica[var])
time = os.clock()
end
end

desse jeito ele fica repetindo apenas a primeira palavra.

e ele não fala a segunda.

Obs: ele precisa falar as frases em ordem

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

porque esta de forma errada o script.

 

local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)

NpcSystem.parseParameters(npcHandler)

local talkState = {}

 

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end

function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end

function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end

function onThink() npcHandler:onThink() end

 

 

local musica = {"LALALA";"LULULU";}

local tempo=2; var=math.random(1,2);

time = os.clock()

function onThink()

npcHandler:onThink()

if (time + tempo) < os.clock() then

selfSay(musica[var])

time = os.clock()

end

end

 

 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

 

 

agora que vi a obs tem que ser na ordem vo refazer e posto pra voce arruamdo.

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

porque esta de forma errada o script.

 

Agora ele só repete a segunda palavra

17:21 Gaucho dono do pingo: LULULU

17:21 Gaucho dono do pingo: LULULU

17:21 Gaucho dono do pingo: LULULU

17:21 Gaucho dono do pingo: LULULU

17:21 Gaucho dono do pingo: LULULU

17:22 Gaucho dono do pingo: LULULU

17:22 Gaucho dono do pingo: LULULU

17:22 Gaucho dono do pingo: LULULU

17:22 Gaucho dono do pingo: LULULU

17:22 Gaucho dono do pingo: LULULU

17:22 Gaucho dono do pingo: LULULU

17:22 Gaucho dono do pingo: LULULU

17:22 Gaucho dono do pingo: LULULU

17:22 Gaucho dono do pingo: LULULU

17:22 Gaucho dono do pingo: LULULU

:cry:

 

 

 

----EDIT----

 

 

não, não é isso. quando eu coloco ele no mapa, ele escolhe uma frase aleatoriamente, ai começa a repetir a mesma frase infinitas vezes.

só que eu preciso que ele diga as frases em ordem, e depois que acabar de falar um segmento de frases, começar a repeti-las, desde a primeira.

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

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

local tempo = 2
local musica = {"LALALA";"LULULU";}

start = os.clock()
step = 1

onThink = function ()

if step > 0 and os.clock() - start >= tempo then
start = os.clock()
if musica[step] == nil then
step = 0
return 1
elseif musica[step] ~= 0 then
selfSay(musica[step])
end
if (step == table.getn(musica)) then
step = 1
else
step = step + 1
end
end
end

 

Se não funcionar tente:

 

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

local tempo = 2
local musica = {"LALALA";"LULULU";}

start = os.clock()
step = 1

onThink = function ()

if step > 0 and os.clock() - start >= tempo then
start = os.clock()
if musica[step] == nil then
step = 0
return 1
elseif musica[step] ~= 0 then
selfSay(musica[step])
end
if (step == 2) then
step = 1
else
step = step + 1
end
end
end

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

Muito Obrigado lucasjockey e Marcryzius.

 

@lucasjockey

Os dois exemplos que você citou pr ultimo funcionaram.

 

 

Obrigado a todos :smile_positivo:

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...