Ir para conteúdo
  • Cadastre-se

(Resolvido)Npc do Destino


Ir para solução Resolvido por elton123,

Posts Recomendados

Bom galera do tk vir atrás do npc basicamente assim. Ao player fala com o npc, esse npc escolherá uma sala aleatoriamente para o player(sala 1 ou sala 2). O player ficará nessa sala por 2 minutos. Ao acaba o templo o player que fica nas duas sala será teleportado por templo. Esse npc tem hora e dia pra fala com ele.

Pra quem n entendeu vou explica assim.

Player= hi

Npc= ola [nome do player], o que vc quer?

Player= destino

Npc= vc quer que eu escolha o seu destino.

Player= Yes

ao o npc escolhe aleatoriamente sala 1 ou sala 2. Aí o player passará 2 minutos nessa duas sala ao acaba o templo será teleportado por templo.

Se n der por npc, der alguma idéia maneira pra min ajuda.

Editado por Admnwso (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

cara da pra fazer em dois script 

primeiro script ia criar um npc no dia e hora e no minuto marcado

segundo script ia ser npc que manda para sala 1 e 2 etc

 

uma pergunta é você queria npc um dia por semana ou

15 em 15 dias

 

tava fazendo a tabela aqui já 

se for de 15 em 15 dia ia ser assim +ou-

config_data = {
["06/05/15"] = {horas = "18:48",name_npc  = "Obi",pos_npc = {x=160, y=54, z=7}}, -- mês dia e ano
} 

por semana ia ser assim

config_data = {
["Friday"] = {horas = "18:48",name_npc  = "Obi",pos_npc = {x=160, y=54, z=7}}, -- nome do dia em inglês
}

quero saber se npc tem tempo para ele sumir

Editado por elton123 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

cara da pra fazer em dois script

primeiro script ia criar um npc no dia e hora e no minuto marcado

segundo script ia ser npc que manda para sala 1 e 2 etc

uma pergunta é você queria npc um dia por semana ou

15 em 15 dias

tava fazendo a tabela aqui já

se for de 15 em 15 dia ia ser assim +ou-

config_data = {["06/05/15"] = {horas = "18:48",name_npc  = "Obi",pos_npc = {x=160, y=54, z=7}}, -- mês dia e ano}
por semana ia ser assim

config_data = {["Friday"] = {horas = "18:48",name_npc  = "Obi",pos_npc = {x=160, y=54, z=7}}, -- nome do dia em inglês}
quero saber se npc tem tempo para ele sumir

eu queria um dia sim e outro dia não. Todas as 19:00 e pode ser dois script. Qualquer maneira que vc ajuda tá bom. Editado por Admnwso (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

eu criei a parte que eu acredito ser a mais difícil que tem que usar pattern e bibliotecas  que é dia e hora que npc vai aparecer

data\globalevents\scripts

arquivo.lua

config_data = {
    msg = "o npc foi criando", -- pode editar
    remove_npc = {tempo = 720,msg  = "o npc saiu"}, -- quanto tempo em minutos o npc vai ficar e msg quando ele sair
    ["Friday"] = {horas = "19:43",name_npc  = "Obi",pos_npc = {x=160, y=54, z=7}}, -- Sexta horas nome do npc posição do npc
    ["Sunday"] = {horas = "19:00",name_npc  = "Obi",pos_npc = {x=160, y=54, z=7}}, -- Domingo
    ["Tuesday"] = {horas = "19:00",name_npc  = "Obi",pos_npc = {x=160, y=54, z=7}}, -- Tuesday

}
-- parte que pode ser configurada a cima

function onThink(interval)
      if config_data[os.date("%A")] then
            if config_data[os.date("%A")].horas  == tostring(os.date("%X")):sub(1, 5) then
                  doBroadcastMessage(config_data.msg)
                  local npc_momento = doCreateNpc(config_data[os.date("%A")].name_npc,config_data[os.date("%A")].pos_npc)
                  addEvent(removerNpc,config_data.remove_npc.tempo*60000,npc_momento)
            end
      end
      return true
end

function removerNpc (npc_momento)
      doBroadcastMessage(config_data.remove_npc.msg)
      doRemoveCreature(npc_momento)
      return true
end

TAG

<globalevent name="think" interval="60000" event="script" value="arquivo.lua"/>

interval você tem que edita tanto que vale um minuto no seu ot

no meu é 60mil

 

pra fazer test só editar posição e nome do npc

em 

data\npc

pega nome do arquivo.xml

resume com god aquele nome que você usa com /n nomedonpc

 

esse é o primeiro script no momento to fazendo outras coisas aqui...

se ngm fazer segundo script pra você mais tarde eu faço

Editado por elton123 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

eu criei a parte que eu acredito ser a mais difícil que tem que usar pattern e bibliotecas  que é dia e hora que npc vai aparecer

data\globalevents\scripts

arquivo.lua

config_data = {
    msg = "o npc foi criando", -- pode editar
    remove_npc = {tempo = 720,msg  = "o npc saiu"}, -- quanto tempo em minutos o npc vai ficar e msg quando ele sair
    ["Friday"] = {horas = "19:43",name_npc  = "Obi",pos_npc = {x=160, y=54, z=7}}, -- Sexta horas nome do npc posição do npc
    ["Sunday"] = {horas = "19:00",name_npc  = "Obi",pos_npc = {x=160, y=54, z=7}}, -- Domingo
    ["Tuesday"] = {horas = "19:00",name_npc  = "Obi",pos_npc = {x=160, y=54, z=7}}, -- Tuesday

}
-- parte que pode ser configurada a cima

function onThink(interval)
      if config_data[os.date("%A")] then
            if config_data[os.date("%A")].horas  == tostring(os.date("%X")):sub(1, 5) then
                  doBroadcastMessage(config_data.msg)
                  local npc_momento = doCreateNpc(config_data[os.date("%A")].name_npc,config_data[os.date("%A")].pos_npc)
                  addEvent(removerNpc,config_data.remove_npc.tempo*60000,npc_momento)
            end
      end
      return true
end

function removerNpc (npc_momento)
      doBroadcastMessage(config_data.remove_npc.msg)
      doRemoveCreature(npc_momento)
      return true
end

TAG

<globalevent name="think" interval="60000" event="script" value="arquivo.lua"/>
interval você tem que edita tanto que vale um minuto no seu ot

no meu é 60mil

 

pra fazer test só editar posição e nome do npc

em 

data\npc

pega nome do arquivo.xml

resume com god aquele nome que você usa com /n nomedonpc

 

esse é o primeiro script no momento to fazendo outras coisas aqui...

se ngm fazer segundo script pra você mais tarde eu faço

testei e funcionou, ficou muito bom.

Vou espera a segunda,aguardando...

Rep+

Link para o post
Compartilhar em outros sites

npc.xml

<npc name="destino" script="data/npc/scripts/arquivo.lua" floorchange="0" access="5" level="1" maglevel="1">
	<health now="150" max="150"/>
	<look type="128" head="0" body="87" legs="39" feet="0"/>
	<parameters>
      <parameter key="module_travel" value="1"/>
	<parameter key="message_greet" value="Olá |PLAYERNAME|. o que vc quer {destino} ?" />
	</parameters>
</npc>

 

arquivo.lua

-- config elton123
local npc_destino = {
msg = "vc quer que eu escolha o seu destino",  -- frase do npc
tempo = 120, --em segundos 
destino_final = {x=160, y=54, z=8},
salas = {
{{x=160, y=54, z=7},sala_msg ="espere eu vou teletransportar você para sala 1"},
{{x=160, y=55, z=7},sala_msg ="espere eu vou teletransportar você para sala 2"},
},
}
-- config elton123

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
function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end
      local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
      if msgcontains(msg, 'destino') then
            selfSay(npc_destino.msg, cid)
            talkState[talkUser] = 1
      elseif (msgcontains(msg,'no') and talkState[talkUser] == 1) then
            selfSay("bye", cid)
            talkState[talkUser] = 0
      elseif (msgcontains(msg,'yes') and talkState[talkUser] == 1) then
            local do_destino = math.random(1,#npc_destino.salas)
            selfSay(npc_destino.salas[do_destino].sala_msg, cid)
            doCreatureSetNoMove(cid,true)
            addEvent(doTeleportThing,5000,cid,npc_destino.salas[do_destino][1])
            addEvent(doCreatureSetNoMove,4999,cid,false)
            addEvent(destinoFinal,npc_destino.tempo*1000,cid,npc_destino.destino_final)
            talkState[talkUser] = 0
      end     
end

function destinoFinal (cid,fim)
      return doTeleportThing(cid,fim) and true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

só achei estranho  que o cara vai ser teletransportado 

para uma sala ou para outra sala só que no final

tem que ir para templo é isso msm?

Editado por elton123 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

npc.xml

<npc name="destino" script="data/npc/scripts/arquivo.lua" floorchange="0" access="5" level="1" maglevel="1">	<health now="150" max="150"/>	<look type="128" head="0" body="87" legs="39" feet="0"/>	<parameters>      <parameter key="module_travel" value="1"/>	<parameter key="message_greet" value="Olá |PLAYERNAME|. o que vc quer {destino} ?" />	</parameters></npc>

arquivo.lua

-- config elton123local npc_destino = {msg = "vc quer que eu escolha o seu destino",  -- frase do npctempo = 120, --em segundos destino_final = {x=160, y=54, z=8},salas = {{{x=160, y=54, z=7},sala_msg ="espere eu vou teletransportar você para sala 1"},{{x=160, y=55, z=7},sala_msg ="espere eu vou teletransportar você para sala 2"},},}-- config elton123local keywordHandler = KeywordHandler:new()local npcHandler = NpcHandler:new(keywordHandler)NpcSystem.parseParameters(npcHandler)local talkState = {}function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) endfunction onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) endfunction onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) endfunction onThink() npcHandler:onThink() endfunction creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end      local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid      if msgcontains(msg, 'destino') then            selfSay(npc_destino.msg, cid)            talkState[talkUser] = 1      elseif (msgcontains(msg,'no') and talkState[talkUser] == 1) then            selfSay("bye", cid)            talkState[talkUser] = 0      elseif (msgcontains(msg,'yes') and talkState[talkUser] == 1) then            local do_destino = math.random(1,#npc_destino.salas)            selfSay(npc_destino.salas[do_destino].sala_msg, cid)            doCreatureSetNoMove(cid,true)            addEvent(doTeleportThing,5000,cid,npc_destino.salas[do_destino][1])            addEvent(doCreatureSetNoMove,4999,cid,false)            addEvent(destinoFinal,npc_destino.tempo*1000,cid,npc_destino.destino_final)            talkState[talkUser] = 0      end     endfunction destinoFinal (cid,fim)      return doTeleportThing(cid,fim) and trueendnpcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)npcHandler:addModule(FocusModule:new())

só achei estranho que o cara vai ser teletransportado

para uma sala ou para outra sala só que no final

tem que ir para templo é isso msm?

cara esse addevent eu acho que vai da erro tipo, eu crie as salas 4x4 se o player sair desse 4x4 ele n volta por templo, só volta que fica nesses 4x4 nas duas sala. Se n tiver como fazer isso, então remover o tempo de volta deixa só pra ir, aí eu coloco um teleporte pra ir pow templo.
Link para o post
Compartilhar em outros sites
  • Solução

eu tinha imaginado que as salas seria fechadas sem poder desloga dps eles seria tele...

 

seria assim

-- config elton123
local npc_destino = {
msg = "vc quer que eu escolha o seu destino",  -- frase do npc
tempo = 10, --em segundos
destino_final = {x=160, y=54, z=8},

area  = {
x = {152,164},  -- posição x as duas pontas horizontal a direita e a esquerda
y = {47,54}, -- posição y as duas pontas vertical de cima e de baixo
z = {7},
},

salas = {
{{x=160, y=54, z=7},sala_msg ="espere eu vou teletransportar você para sala 1"},
{{x=160, y=55, z=7},sala_msg ="espere eu vou teletransportar você para sala 2"},
},
}
-- config elton123

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
function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end
      local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
      if msgcontains(msg, 'destino') then
            selfSay(npc_destino.msg, cid)
            talkState[talkUser] = 1
      elseif (msgcontains(msg,'no') and talkState[talkUser] == 1) then
            selfSay("bye", cid)
            talkState[talkUser] = 0
      elseif (msgcontains(msg,'yes') and talkState[talkUser] == 1) then
            local do_destino = math.random(1,#npc_destino.salas)
            selfSay(npc_destino.salas[do_destino].sala_msg, cid)
            doCreatureSetNoMove(cid,true)
            addEvent(doTeleportThing,5000,cid,npc_destino.salas[do_destino][1])
            addEvent(doCreatureSetNoMove,4999,cid,false)
            addEvent(destinoFinal,npc_destino.tempo*1000,cid,npc_destino.destino_final)
            talkState[talkUser] = 0
      end
end

function destinoFinal (cid,fim)
      for xx = npc_destino.area.x[1] , npc_destino.area.x[2] do
            for yy = npc_destino.area.y[1] , npc_destino.area.y[2] do
                  local floor1 = getTopCreature({x=xx,y=yy,z=npc_destino.area.z[1]}).uid
                        if floor1 > 0 and isPlayer(floor1) then
                              doTeleportThing(cid,fim)
                        end
            end
      end
      return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

só editar essa parte

area = {
x = {152,164}, -- posição x as duas pontas horizontal a direita e a esquerda
y = {47,54}, -- posição y as duas pontas vertical de cima e de baixo
z = {7},
},

Editado por elton123 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Poderia coloca uma alerta pra quando o tempo acaba. tipo, "o Tempo acabou, quem n saiu da sala voltará por tempo".

tem como pow pra quando o primeiro player fala sempre e pra sala 1, o segundo pra sala 2 eo 3 pra sala 1 assim por diante. tipo impar, par.

-- edit -- Arrumei geral vlw

Link para o post
Compartilhar em outros sites

cara tem um bug que só ta olhando area de uma sala

eu arrumei nesse

-- config elton123
local npc_destino = {
msg = "vc quer que eu escolha o seu destino",  -- frase do npc
tempo = 60, --em segundos
destino_final = {x=160, y=54, z=8},
salas = {
{
    {x=160, y=54, z=7},sala_msg ="espere eu vou teletransportar você para sala 1",
    area  = {
    x = {152,164},  -- posição x as duas pontas horizontal a direita e a esquerda
    y = {47,54}, -- posição y as duas pontas vertical de cima e de baixo
    z = {7},
    frase = "volte para sala 1 que sera teletransportado",
},
},
{
    {x=160, y=54, z=8},sala_msg ="espere eu vou teletransportar você para sala 2",
    area  = {
    x = {152,164},  -- posição x as duas pontas horizontal a direita e a esquerda
    y = {47,54}, -- posição y as duas pontas vertical de cima e de baixo
    z = {8},
    frase = "volte para sala 2 que sera teletransportado",
},
},
},
}
-- config elton123

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
function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end
      local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
      if msgcontains(msg, 'destino') then
            selfSay(npc_destino.msg, cid)
            talkState[talkUser] = 1
      elseif (msgcontains(msg,'no') and talkState[talkUser] == 1) then
            selfSay("bye", cid)
            talkState[talkUser] = 0
      elseif (msgcontains(msg,'yes') and talkState[talkUser] == 1) then
            local do_destino = math.random(1,#npc_destino.salas)
            selfSay(npc_destino.salas[do_destino].sala_msg, cid)
            doCreatureSetNoMove(cid,true)
            addEvent(doTeleportThing,5000,cid,npc_destino.salas[do_destino][1])
            addEvent(doCreatureSetNoMove,4999,cid,false)
            addEvent(msgPlay,(npc_destino.tempo-10)*1000,cid,22,npc_destino.salas[do_destino].area.frase)
            addEvent(destinoFinal,npc_destino.tempo*1000,cid,npc_destino.destino_final,do_destino)
            talkState[talkUser] = 0
      end
end

function destinoFinal (cid,fim,s)
      for xx = npc_destino.salas[s].area.x[1],npc_destino.salas[s].area.x[2] do
            for yy = npc_destino.salas[s].area.y[1] , npc_destino.salas[s].area.y[2] do
                  local floor1 = getTopCreature({x=xx,y=yy,z=npc_destino.salas[s].area.z[1]}).uid
                        if floor1 > 0 and isPlayer(floor1) then
                              doTeleportThing(cid,fim)
                        end
            end
      end
      return true
end

function msgPlay (cid,cor,m)
      if isPlayer(cid) then 
            doPlayerSendTextMessage(cid,cor,m)
      end
      return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new()) 
{
    {x=160, y=54, z=8}, -- posição que play vai cair na sala
    sala_msg ="espere eu vou teletransportar você para sala 2", -- frase do npc
    area  = {
    x = {152,164},  -- posição x as duas pontas horizontal a direita e a esquerda
    y = {47,54}, -- posição y as duas pontas vertical de cima e de baixo
    z = {8},
    frase = "volte para sala 2 que sera teletransportado", -- frase que vai falar 10 segundos antes
},
},
Editado por elton123 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo