ND

[Resolvido] [Pedido] 3 Npcs [Acredito Médio]

Por NdboHakai, 01 de mar. de 2019 em Resolvidos

29
3.5k
NdboHakaiN
03 de março de 2019 às 00:16
4 minutos atrás, gabriel28 disse:

@NdboHakai
Vê agora. (mude todo o script)
 

  Ocultar conteúdo

local DESTINO = {x=1024, y=1026, z=7} -- POS
local DESTINO2 = {x=1358, y=669, z=6} -- POS
local DESTINO3 = {x=592, y=829, z=7} -- POS

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
 
function onCreatureAppear(cid)         npcHandler:onCreatureAppear(cid)         end
function onCreatureDisappear(cid)      npcHandler:onCreatureDisappear(cid)         end
function onCreatureSay(cid, type, msg)   npcHandler:onCreatureSay(cid, type, msg:lower())   end
function onThink()                  npcHandler:onThink()                  end
local talkState = {}
 
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 getCreatureCondition(cid, CONDITION_INFIGHT) == false then
 
   if msgcontains(msg, "viajar") then
   selfSay("Posso te levar para: {Hakai City}, {Desert City}, {Ice City}", cid)
   talkState[talkUser] = 1
   npcHandler:addFocus(cid)
   end
   
   if msgcontains(msg, "hakai city") and talkState[talkUser] == 1 then
      selfSay("OK!", cid)
      doSendMagicEffect(getThingPos(cid), 10)
      npcHandler:releaseFocus(cid)
      doTeleportThing(cid, DESTINO)
      doSendMagicEffect(DESTINO, 10)
   elseif msgcontains(msg, "desert city") then
      selfSay("OK!", cid)
      doSendMagicEffect(getThingPos(cid), 10)
      npcHandler:releaseFocus(cid)
      doTeleportThing(cid, DESTINO2)
      doSendMagicEffect(DESTINO2, 10)
   elseif msgcontains(msg, "ice city") then
      selfSay("OK!", cid)
      doSendMagicEffect(getThingPos(cid), 10)
      npcHandler:releaseFocus(cid)
      doTeleportThing(cid, DESTINO3)
      doSendMagicEffect(DESTINO3, 10)
   end
   else
         selfSay("Desculpe, mas você está em batalha.", cid)
end
   return true
end
 
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

 

Desculpe, mas gostaria de saber oque você fez no npc? [Obs: o npc só precisava de 2 funções = Premium em cidade escolhida e Se possivel proibir viajar para alguma cidade sem falar "viajar" antes.

Editado Março 3 por NdboHakai

gabriel28G
03 de março de 2019 às 00:19

@NdboHakai
Nada, só mudei pra necessitar falar o "viajar" que você quer, já que no outro, apesar de ter o "viajar", tinha a condição 'elseif', dai, se falasse um ou outro ia da no mesmo.
Só disse pra mudar todo o script porque antes eu tinha mandado só uma parte e agora mandei ele todo, alterando o que o outro usuário tinha mandado.

NdboHakaiN
03 de março de 2019 às 00:20
5 minutos atrás, gabriel28 disse:

@NdboHakai
Nada, só mudei pra necessitar falar o "viajar" que você quer, já que no outro, apesar de ter o "viajar", tinha a condição 'elseif', dai, se falasse um ou outro ia da no mesmo.
Só disse pra mudar todo o script porque antes eu tinha mandado só uma parte e agora mandei ele todo, alterando o que o outro usuário tinha mandado.

Atá, irei substituir e testar.

=======================

Não funcionou, deu no mesmo

Eu digitando [hi/hakai city] o meu personagem é teleportado.

Editado Março 3 por NdboHakai

gabriel28G
03 de março de 2019 às 00:29
13 minutos atrás, NdboHakai disse:

Atá, irei substituir e testar.

=======================

Não funcionou, deu no mesmo

Eu digitando [hi/hakai city] o meu personagem é teleportado.

EDITADO (Reparei que do jeito que estava, o NPC não iria dizer ao jogador que precisaria ser premium pra ir pra cidade?
Ficaria assim:

elseif msgcontains(msg, "desert city") then
if isPremium(cid)
      selfSay("OK!", cid)
      doSendMagicEffect(getThingPos(cid), 10)
      npcHandler:releaseFocus(cid)
      doTeleportThing(cid, DESTINO2)
      doSendMagicEffect(DESTINO2, 10)
else
	  selfSay("precisa ser premium", cid)
end

 

Editado Março 3 por gabriel28

NdboHakaiN
03 de março de 2019 às 01:04
33 minutos atrás, gabriel28 disse:

EDITADO (Reparei que do jeito que estava, o NPC não iria dizer ao jogador que precisaria ser premium pra ir pra cidade?
Ficaria assim:

elseif msgcontains(msg, "desert city") then
if isPremium(cid)
      selfSay("OK!", cid)
      doSendMagicEffect(getThingPos(cid), 10)
      npcHandler:releaseFocus(cid)
      doTeleportThing(cid, DESTINO2)
      doSendMagicEffect(DESTINO2, 10)
else
	  selfSay("precisa ser premium", cid)
end

 

Não existe uma forma mais facil?, nessa forma se eu quisesse que todas as cidades fossem premium e se também eu tivesse vontade de por alguma free eu não conseguiria.

Yan LiimaY
03 de março de 2019 às 01:05

Fiz como pediu, teste ai:

local DESTINO = {x=1024, y=1026, z=7} -- POS
local DESTINO2 = {x=1358, y=669, z=6} -- POS
local DESTINO3 = {x=592, y=829, z=7} -- POS

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
 
function onCreatureAppear(cid)         npcHandler:onCreatureAppear(cid)         end
function onCreatureDisappear(cid)      npcHandler:onCreatureDisappear(cid)         end
function onCreatureSay(cid, type, msg)   npcHandler:onCreatureSay(cid, type, msg:lower())   end
function onThink()                  npcHandler:onThink()                  end
local talkState = {}
 
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 getCreatureCondition(cid, CONDITION_INFIGHT) == false then
 
   if msgcontains(msg, "viajar") then
   selfSay("Posso te levar para: {Hakai City}, {Desert City}, {Ice City}.", cid)
   talkState[talkUser] = 1
   end
   if talkState[talkUser] == 1 then
   if msgcontains(msg, "hakai city") then
    if isPremium(cid) == false then -- Altere o "false" para "true" caso precise de premium.
      selfSay("OK!", cid)
      doSendMagicEffect(getThingPos(cid), 10)
      npcHandler:releaseFocus(cid)
      doTeleportThing(cid, DESTINO)
      doSendMagicEffect(DESTINO, 10)
	  talkState[talkUser] = 0
	  else
	  selfSay("Você não é premium account!", cid)
	  end
   end  
   if msgcontains(msg, "desert city") then
    if isPremium(cid) == false then -- Altere o "false" para "true" caso precise de premium.
      selfSay("OK!", cid)
      doSendMagicEffect(getThingPos(cid), 10)
      npcHandler:releaseFocus(cid)
      doTeleportThing(cid, DESTINO2)
      doSendMagicEffect(DESTINO2, 10)
	  talkState[talkUser] = 0
	  else
	  selfSay("Você não é premium account!", cid)
	  end
   end  
   if msgcontains(msg, "ice city") then
    if isPremium(cid) == false then -- Altere o "false" para "true" caso precise de premium.
      selfSay("OK!", cid)
      doSendMagicEffect(getThingPos(cid), 10)
      npcHandler:releaseFocus(cid)
      doTeleportThing(cid, DESTINO3)
      doSendMagicEffect(DESTINO3, 10)
	  talkState[talkUser] = 0
	  else
	  selfSay("Você não é premium account!", cid)
	  end
     end  
   end
   else
         selfSay("Desculpe, mas você está em batalha.", cid)
end
   return true
end
 
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

gabriel28G
03 de março de 2019 às 01:11

@NdboHakai
Conseguiria, só você comparar como ta no script e como ta a forma que mandei, dai veria as diferenças e como adicionar uma nova cidade premium ou free.

NdboHakaiN
03 de março de 2019 às 01:12
5 minutos atrás, Yan Liima disse:

Fiz como pediu, teste ai:

local DESTINO = {x=1024, y=1026, z=7} -- POS
local DESTINO2 = {x=1358, y=669, z=6} -- POS
local DESTINO3 = {x=592, y=829, z=7} -- POS

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
 
function onCreatureAppear(cid)         npcHandler:onCreatureAppear(cid)         end
function onCreatureDisappear(cid)      npcHandler:onCreatureDisappear(cid)         end
function onCreatureSay(cid, type, msg)   npcHandler:onCreatureSay(cid, type, msg:lower())   end
function onThink()                  npcHandler:onThink()                  end
local talkState = {}
 
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 getCreatureCondition(cid, CONDITION_INFIGHT) == false then
 
   if msgcontains(msg, "viajar") then
   selfSay("Posso te levar para: {Hakai City}, {Desert City}, {Ice City}.", cid)
   talkState[talkUser] = 1
   end
   if talkState[talkUser] == 1 then
   if msgcontains(msg, "hakai city") then
    if isPremium(cid) == false then -- Altere o "false" para "true" caso precise de premium.
      selfSay("OK!", cid)
      doSendMagicEffect(getThingPos(cid), 10)
      npcHandler:releaseFocus(cid)
      doTeleportThing(cid, DESTINO)
      doSendMagicEffect(DESTINO, 10)
	  talkState[talkUser] = 0
	  else
	  selfSay("Você não é premium account!", cid)
	  end
   end  
   if msgcontains(msg, "desert city") then
    if isPremium(cid) == false then -- Altere o "false" para "true" caso precise de premium.
      selfSay("OK!", cid)
      doSendMagicEffect(getThingPos(cid), 10)
      npcHandler:releaseFocus(cid)
      doTeleportThing(cid, DESTINO2)
      doSendMagicEffect(DESTINO2, 10)
	  talkState[talkUser] = 0
	  else
	  selfSay("Você não é premium account!", cid)
	  end
   end  
   if msgcontains(msg, "ice city") then
    if isPremium(cid) == false then -- Altere o "false" para "true" caso precise de premium.
      selfSay("OK!", cid)
      doSendMagicEffect(getThingPos(cid), 10)
      npcHandler:releaseFocus(cid)
      doTeleportThing(cid, DESTINO3)
      doSendMagicEffect(DESTINO3, 10)
	  talkState[talkUser] = 0
	  else
	  selfSay("Você não é premium account!", cid)
	  end
     end  
   end
   else
         selfSay("Desculpe, mas você está em batalha.", cid)
end
   return true
end
 
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Nice, funcionou perfeitamente.

Estou na espera caso for ajudar, do npc 2

 

[Tem condições de desenvolver o npc 1 ou adicionar a função de quantidade do npc que o  @Kuro o Shiniga fez?

Kuro o ShinigaK
03 de março de 2019 às 13:32

Desculpa a demora brother, tava ocupado, aqui 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

function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false 
end 

local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid 

str = 192537 --- STORAGE QUE VAI GANHAR
local temitens = {{id = 2160, count = 100}, {id = 8306, count = 3}, {id = 2400, count = 2}, {id = 5878, count = 100}, {id = 2494, count = 2}, {id = 2486, count = 2}, {id = 2491, count = 2}} --- ID DOS ITENS QUE PRECISA PRA TROCAR PELA STORAGE!



function onItemPlayer(cid, itemid)
for i = 1, #temitens do
if getPlayerItemCount(cid, temitens[i].id) < temitens[i].count then
return false
end
end
return true
end


function removeItem(cid)
for i in ipairs (temitens) do
doPlayerRemoveItem(cid, temitens[i].id, temitens[i].count)
end
end

if msgcontains(msg, "trocar") and onItemPlayer(cid, temitens) and getPlayerStorageValue(cid, str) < 1 then
removeItem(cid)
setPlayerStorageValue(cid, str, 1)
doSendMagicEffect(getThingPos(cid), 12)
selfSay("Storage Adicionada !", cid)
else
selfSay("Voce nao tem os itens necessarios ou ja tem a storage!", cid)
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Aqui você muda a quantidade e o item que vai ser entregue ao NPC :

local temitens = {{id = 2160, count = 100}

Em "ID" é o id do item e em "COUNT" a quantidade !

NdboHakaiN
03 de março de 2019 às 13:34
2 minutos atrás, Kuro o Shiniga disse:

Desculpa a demora brother, tava ocupado, aqui 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

function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false 
end 

local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid 

str = 192537 --- STORAGE QUE VAI GANHAR
local temitens = {{id = 2160, count = 100}, {id = 8306, count = 3}, {id = 2400, count = 2}, {id = 5878, count = 100}, {id = 2494, count = 2}, {id = 2486, count = 2}, {id = 2491, count = 2}} --- ID DOS ITENS QUE PRECISA PRA TROCAR PELA STORAGE!



function onItemPlayer(cid, itemid)
for i = 1, #temitens do
if getPlayerItemCount(cid, temitens[i].id) < temitens[i].count then
return false
end
end
return true
end


function removeItem(cid)
for i in ipairs (temitens) do
doPlayerRemoveItem(cid, temitens[i].id, temitens[i].count)
end
end

if msgcontains(msg, "trocar") and onItemPlayer(cid, temitens) and getPlayerStorageValue(cid, str) < 1 then
removeItem(cid)
setPlayerStorageValue(cid, str, 1)
doSendMagicEffect(getThingPos(cid), 12)
selfSay("Storage Adicionada !", cid)
else
selfSay("Voce nao tem os itens necessarios ou ja tem a storage!", cid)
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Aqui você muda a quantidade e o item que vai ser entregue ao NPC :

local temitens = {{id = 2160, count = 100}

Em "ID" é o id do item e em "COUNT" a quantidade !

Irei testar, você poderia fazer o npc 2?

Kuro o ShinigaK
03 de março de 2019 às 14:38

Npc 2  :

 

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 

local itenscoleta = {{id =5878 , count =100}, {id =5876 , count =100}, {id =5880 , count =100}} --- ITEMS QUE O NPC VAI PEDIR E A QUANTIDADE
local str = { {mission1 = 58321, recompensa = 2160}, {mission2 = 58322, recompensa = 5922}, {mission3 = 58323, recompensa = 2400} } -- STORAGE QUE VAI GANHAR DEPOIS DE COMPLETAR A QUEST E A RECOMPENSA EM ITEM
name = getCreatureName(cid)
strstart = 998292


if msgcontains(msg, "mission") and getPlayerStorageValue(cid, strstart) < 1 then
selfSay("Ola" ..name.. ", tenho algumas missoes interessantes para voce, deseja saber quais sao?", cid)
talkState[talkUser] = 1

elseif msgcontains(msg, "mission") and getPlayerStorageValue(cid, strstart) == 1 then
selfSay("Voce esta em missao, ou falta entregar os itens para mim!", cid)

elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then
selfSay("Tenho 5 missoes, voce tem que coletar a quatidade de 100 itens em cada missao, digite (primeira missao, segunda missao ou terceira missao) e escolha qual deseja!", cid)
talkState[talkUser] = 2

elseif msgcontains(msg, "primeira missao") and talkState[talkUser] == 2 and getPlayerStorageValue(cid, strstart) < 1 and getPlayerStorageValue(cid, str[1].mission1) < 1 then
selfSay("Colete 100 minotaur leather!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Start!")
setPlayerStorageValue(cid, strstart, 1)

elseif msgcontains(msg, "segunda missao") and talkState[talkUser] == 2 and getPlayerStorageValue(cid, strstart) < 1 and getPlayerStorageValue(cid, str[2].mission2) < 1 then
selfSay("Colete 100 lizard leather!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Start!")
setPlayerStorageValue(cid, strstart, 1)

elseif msgcontains(msg, "terceira missao") and talkState[talkUser] == 2 and getPlayerStorageValue(cid, strstart) < 1 and getPlayerStorageValue(cid, str[3].mission3) < 1 then
selfSay("Colete 100 iron ore!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Start!")
setPlayerStorageValue(cid, strstart, 1)
end

if msgcontains(msg, "primeira missao") and getPlayerStorageValue(cid, strstart) == 1 and getPlayerItemCount(cid, itenscoleta[1].id) >= itenscoleta[1].count then
doPlayerRemoveItem(cid, itenscoleta[1].id, itenscoleta[1].count)
selfSay("Que assim seja!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Completed!")
setPlayerStorageValue(cid, strstart, -1)
setPlayerStorageValue(cid, str.misson1, 1)
doPlayerAddItem(cid, str[1].recompensa, 100) --- O VALOR 100 E O TANTO DE ITEM QUE VAI GANHAR NA RECOMPENSA
talkstate[talkUser] = 0

elseif msgcontains(msg, "segunda missao") and getPlayerStorageValue(cid, strstart) == 1 and getPlayerItemCount(cid, itenscoleta[2].id) >= itenscoleta[2].count then
doPlayerRemoveItem(cid, itenscoleta[2].id, itenscoleta[2].count)
selfSay("Que assim seja!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Completed!")
setPlayerStorageValue(cid, strstart, -1)
setPlayerStorageValue(cid, str.misson2, 1)
doPlayerAddItem(cid, str[2].recompensa, 100) --- O VALOR 100 E O TANTO DE ITEM QUE VAI GANHAR NA RECOMPENSA
talkstate[talkUser] = 0

elseif msgcontains(msg, "terceira missao") and getPlayerStorageValue(cid, strstart) == 1 and getPlayerItemCount(cid, itenscoleta[3].id) >= itenscoleta[3].count then
doPlayerRemoveItem(cid, itenscoleta[3].id, itenscoleta[3].count)
selfSay("Que assim seja!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Completed!")
setPlayerStorageValue(cid, strstart, -1)
setPlayerStorageValue(cid, str.misson3, 1)
doPlayerAddItem(cid, str[3].recompensa, 1) --- O VALOR 1 E O TANTO DE ITEM QUE VAI GANHAR NA RECOMPENSA
talkstate[talkUser] = 0
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

O script esta todo comentado, leia os comentarios que você vai entender como configurar !

Não esqueça de marcar melhor resposta, para o post ser fechado!

abraço

Editado Março 3 por Kuro o Shiniga

NdboHakaiN
03 de março de 2019 às 14:41
30 minutos atrás, Kuro o Shiniga disse:

Npc 2  :

 

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 

local itenscoleta = {{id =5878 , count =100}, {id =5876 , count =100}, {id =5880 , count =100}} --- ITEMS QUE O NPC VAI PEDIR E A QUANTIDADE
local str = { {mission1 = 58321, recompensa = 2160}, {mission2 = 58322, recompensa = 5922}, {mission3 = 58323, recompensa = 2400} } -- STORAGE QUE VAI GANHAR DEPOIS DE COMPLETAR A QUEST E A RECOMPENSA EM ITEM
name = getCreatureName(cid)
strstart = 998292


if msgcontains(msg, "mission") and getPlayerStorageValue(cid, strstart) < 1 then
selfSay("Ola" ..name.. ", tenho algumas missoes interessantes para voce, deseja saber quais sao?", cid)
talkState[talkUser] = 1

elseif msgcontains(msg, "mission") and getPlayerStorageValue(cid, strstart) == 1 then
selfSay("Voce esta em missao, ou falta entregar os itens para mim!", cid)

elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then
selfSay("Tenho 5 missoes, voce tem que coletar a quatidade de 100 itens em cada missao, digite (primeira missao, segunda missao ou terceira missao) e escolha qual deseja!", cid)
talkState[talkUser] = 2

elseif msgcontains(msg, "primeira missao") and talkState[talkUser] == 2 and getPlayerStorageValue(cid, strstart) < 1 and getPlayerStorageValue(cid, str[1].mission1) < 1 then
selfSay("Colete 100 minotaur leather!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Start!")
setPlayerStorageValue(cid, strstart, 1)

elseif msgcontains(msg, "segunda missao") and talkState[talkUser] == 2 and getPlayerStorageValue(cid, strstart) < 1 and getPlayerStorageValue(cid, str[2].mission2) < 1 then
selfSay("Colete 100 lizard leather!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Start!")
setPlayerStorageValue(cid, strstart, 1)

elseif msgcontains(msg, "terceira missao") and talkState[talkUser] == 2 and getPlayerStorageValue(cid, strstart) < 1 and getPlayerStorageValue(cid, str[3].mission3) < 1 then
selfSay("Colete 100 iron ore!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Start!")
setPlayerStorageValue(cid, strstart, 1)
end

if msgcontains(msg, "primeira missao") and getPlayerStorageValue(cid, strstart) == 1 and getPlayerItemCount(cid, itenscoleta[1].id) >= itenscoleta[1].count then
doPlayerRemoveItem(cid, itenscoleta[1].id, itenscoleta[1].count)
selfSay("Que assim seja!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Completed!")
setPlayerStorageValue(cid, strstart, -1)
setPlayerStorageValue(cid, str.misson1, 1)
doPlayerAddItem(cid, str[1].recompensa, 100) --- O VALOR 100 E O TANTO DE ITEM QUE VAI GANHAR NA RECOMPENSA
talkstate[talkUser] = 0

elseif msgcontains(msg, "segunda missao") and getPlayerStorageValue(cid, strstart) == 1 and getPlayerItemCount(cid, itenscoleta[2].id) >= itenscoleta[2].count then
doPlayerRemoveItem(cid, itenscoleta[2].id, itenscoleta[2].count)
selfSay("Que assim seja!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Completed!")
setPlayerStorageValue(cid, strstart, -1)
setPlayerStorageValue(cid, str.misson2, 1)
doPlayerAddItem(cid, str[2].recompensa, 100) --- O VALOR 100 E O TANTO DE ITEM QUE VAI GANHAR NA RECOMPENSA
talkstate[talkUser] = 0

elseif msgcontains(msg, "terceira missao") and getPlayerStorageValue(cid, strstart) == 1 and getPlayerItemCount(cid, itenscoleta[3].id) >= itenscoleta[3].count then
doPlayerRemoveItem(cid, itenscoleta[3].id, itenscoleta[3].count)
selfSay("Que assim seja!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Completed!")
setPlayerStorageValue(cid, strstart, -1)
setPlayerStorageValue(cid, str.misson3, 1)
doPlayerAddItem(cid, str[3].recompensa, 1) --- O VALOR 1 E O TANTO DE ITEM QUE VAI GANHAR NA RECOMPENSA
talkstate[talkUser] = 0
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

O script esta todo comentado, leia os comentarios que você vai entender como configurar !

Não esqueça de marcar melhor resposta, para o post ser fechado!

abraço

Irei testar

========================

Tem 2 problemas, o jogador pode fazer a mesma missão quantas vezes quiser.

E outro problema é que se o jogador digitar : hi/primeira missão , e não tiver os items não volta sinal de error, falando que ele ainda não está com os items da missão.

 

Editado Março 3 por NdboHakai

Kuro o ShinigaK
03 de março de 2019 às 15:34
52 minutos atrás, NdboHakai disse:

Irei testar

========================

Tem 2 problemas, o jogador pode fazer a mesma missão quantas vezes quiser.

E outro problema é que se o jogador digitar : hi/primeira missão , e não tiver os items não volta sinal de error, falando que ele ainda não está com os items da missão.

 

Desculpa, erro bobo, segue 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

function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false 
end 

local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid 

local itenscoleta = {{id =5878 , count =100}, {id =5876 , count =100}, {id =5880 , count =100}} --- ITEMS QUE O NPC VAI PEDIR E A QUANTIDADE
local str = { {mission1 = 58321, recompensa = 2160}, {mission2 = 58322, recompensa = 5922}, {mission3 = 58323, recompensa = 2400} } -- STORAGE QUE VAI GANHAR DEPOIS DE COMPLETAR A QUEST E A RECOMPENSA EM ITEM
name = getCreatureName(cid)
strstart = 988223


if msgcontains(msg, "mission") and getPlayerStorageValue(cid, strstart) < 1 then
selfSay("Ola" ..name.. ", tenho algumas missoes interessantes para voce, deseja saber quais sao?", cid)
talkState[talkUser] = 1

elseif msgcontains(msg, "mission") and getPlayerStorageValue(cid, strstart) == 1 then
selfSay("Voce esta em missao, ou falta entregar os itens para mim!", cid)

elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then
selfSay("Tenho 3 missoes, voce tem que coletar a quatidade de 100 itens em cada missao, digite (primeira missao, segunda missao ou terceira missao) e escolha qual deseja!", cid)
talkState[talkUser] = 2

elseif msgcontains(msg, "primeira missao") and talkState[talkUser] == 2 and getPlayerStorageValue(cid, strstart) < 1 and getPlayerStorageValue(cid, str[1].mission1) < 1 then
selfSay("Colete 100 minotaur leather!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Start!")
setPlayerStorageValue(cid, strstart, 1)


elseif msgcontains(msg, "segunda missao") and talkState[talkUser] == 2 and getPlayerStorageValue(cid, strstart) < 1 and getPlayerStorageValue(cid, str[2].mission2) < 1 then
selfSay("Colete 100 lizard leather!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Start!")
setPlayerStorageValue(cid, strstart, 1)


elseif msgcontains(msg, "terceira missao") and talkState[talkUser] == 2 and getPlayerStorageValue(cid, strstart) < 1 and getPlayerStorageValue(cid, str[3].mission3) < 1 then
selfSay("Colete 100 iron ore!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Start!")
setPlayerStorageValue(cid, strstart, 1)


elseif msgcontains(msg, "primeira missao")  and getPlayerStorageValue(cid, strstart) == 1 and getPlayerItemCount(cid, itenscoleta[1].id) >= itenscoleta[1].count and getPlayerStorageValue(cid, str[1].mission1) < 1 then
setPlayerStorageValue(cid, str[1].mission1, 1)
doPlayerRemoveItem(cid, itenscoleta[1].id, itenscoleta[1].count)
selfSay("Que assim seja!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Completed!")
setPlayerStorageValue(cid, strstart, -1)
doPlayerAddItem(cid, str[1].recompensa, 100) --- O VALOR 100 E O TANTO DE ITEM QUE VAI GANHAR NA RECOMPENSA
talkstate[talkUser] = 0

elseif msgcontains(msg, "segunda missao") and getPlayerStorageValue(cid, strstart) == 1 and getPlayerItemCount(cid, itenscoleta[2].id) >= itenscoleta[2].count and getPlayerStorageValue(cid, str[2].mission2) < 1 then
doPlayerRemoveItem(cid, itenscoleta[2].id, itenscoleta[2].count)
selfSay("Que assim seja!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Completed!")
setPlayerStorageValue(cid, strstart, -1)
setPlayerStorageValue(cid, str[2].mission2, 1)
doPlayerAddItem(cid, str[2].recompensa, 100) --- O VALOR 100 E O TANTO DE ITEM QUE VAI GANHAR NA RECOMPENSA
talkstate[talkUser] = 0

elseif msgcontains(msg, "terceira missao") and getPlayerStorageValue(cid, strstart) == 1 and getPlayerItemCount(cid, itenscoleta[3].id) >= itenscoleta[3].count and getPlayerStorageValue(cid, str[3].mission3) < 1 then
doPlayerRemoveItem(cid, itenscoleta[3].id, itenscoleta[3].count)
selfSay("Que assim seja!", cid)
doSendMagicEffect(getThingPos(cid), 12)
doPlayerSendTextMessage(cid, 22, "Mission Completed!")
setPlayerStorageValue(cid, strstart, -1)
setPlayerStorageValue(cid, str[3].mission3, 1)
doPlayerAddItem(cid, str[3].recompensa, 1) --- O VALOR 1 E O TANTO DE ITEM QUE VAI GANHAR NA RECOMPENSA
talkstate[talkUser] = 0
else
selfSay("voce ja completou essa missao!", cid)
end
end






npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Yan LiimaY
03 de março de 2019 às 23:48
A questão neste tópico de suporte foi respondida e/ou o autor do tópico resolveu o problema. Este tópico está fechado e foi movido para Suporte - Resolvidos. Se você tiver outras dúvidas, crie um novo tópico.