Ir para conteúdo
  • Cadastre-se

(Resolvido)NPC que troca varios itens por x item em determinado tempo


Ir para solução Resolvido por FeeTads,

Posts Recomendados

Olá, boa noite, eu gostaria de um script 8.60 que funciona da seguinte maneira, vc tem vários itens digamos que seja 4 itens diferentes e usa esses itens para trocar por x item ( um unico item ), e qnd vc falar com o npc ele fala que vai demorar x tempo para montar o item, após passar esse tempo vc vai ter que voltar lá falar com ele e pegar o item. ( a ideia é entregar vários itens para ele, qnd falar com ele remover os itens e dps do x tempo ter que falar novamente e assim entrega o item que no caso seria uma espada).

Link para o post
Compartilhar em outros sites
  • Moderador
Em 27/07/2022 em 20:13, Strikerzerh disse:

vc tem vários itens digamos que seja 4 itens diferentes e usa esses itens para trocar por x item (um unico item)

 

vai em e cria um arquivo .lua chamado NPCtroca.lua
vai ficar assim:
data > npc > scripts > NPCtroca.lua

ai add esse código:
 

-- make by FeeTads //assistente TibiaKing

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 = {}

local itemid = {1111,2222,3333,4444}		-- id dos items necessários pra troca
local save_items = 0						-- variavel apenas pra salvar a quantidade de items //nao mexer
local tempo_de_espera = 60  				-- em minutos	
local storage = 58458711					-- storage //se não souber, não mexer
local item_trocado = 6565					-- id do item que vira após a troca
local trocar_mais_de_uma_vez = true  		-- o player pode trocar varias vezes esse 4 items por 1?  //true pode trocar mais de 1x //false só troca uma vez
 
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 msg = string.lower(msg)
	
  
	if isInArray({"trocar","troca","trocar item"}, msg) then								-- mensagem do player
      selfSay("Você deseja trocar"..#itemid.." items pelo supremo item?", cid)				-- msg do NPC
      talkState[talkUser] = 2
    elseif isInArray({"sim","quero","yes","yeah"}, msg) and talkState[talkUser] == 2 then
		if trocar_mais_de_uma_vez == false and getPlayerStorageValue(cid, storage) ~= -1 then
			selfSay("Desculpe, você já fez sua troca!", cid)
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
			return true
		 end
		for i=1, #itemid do																	-- for pra fazer a contagem dos items
			if getPlayerItemCount(cid, itemid[i]) > 0 then									-- caso o player tenha o item
				save_items = save_items + 1													-- salva na variavel
			end
		end
		if save_items >= #itemid then														-- se tiver todos os items necessários
			selfSay("Parabéns! agora vou craftar seu item, ele irá demorar"..tempo_de_espera.." pra ficar pronto", cid)		-- manda a mensagem
			setPlayerStorageValue(cid, storage, os.time() + (tempo_de_espera*60))											-- seta a storage pra 60 minutos
			for i=1, #itemid do
				doPlayerRemoveItem(cid, itemid[i], 1)																		-- remove os items do player
			end
		else
			selfSay("Desculpe, você não tem os items necessários!", cid)									-- mensagem caso não tenha os items necessários
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
		end
	elseif isInArray({"no","não","nao","not"}, msg) and talkState[talkUser] == 2 then						-- caso o player não queira trocar, só da tchau
		 selfSay("Tudo bem então, Bye!", cid)
		 talkState[talkUser] = 0
		 npcHandler:releaseFocus(cid)
	elseif isInArray({"receber","receber item"}, msg) then															-- caso o player digite "receber"
		if getPlayerStorageValue(cid, storage) - os.time() <= 0 and getPlayerStorageValue(cid, storage) ~= 0 then	-- checa se já passou [tempo de espera], e não é 0
			if (doPlayerAddItemEx(cid, item_trocado, true) ~= RETURNVALUE_NOERROR) then								-- caso o player tenha slot na bp, etc..
				selfSay("Parabéns! seu item está entregue, bom jogo!", cid)											-- msg do NPC
				setPlayerStorageValue(cid, storage, 0)																-- seta a storage do player pra 0
				talkState[talkUser] = 0
				npcHandler:releaseFocus(cid)
			else
				selfSay("Seu item está pronto, deixe espaço em sua BP!", cid)										-- caso não consiga entregar o item só pede pra deixar espaço	
				talkState[talkUser] = 0
				npcHandler:releaseFocus(cid)
			end
		else
			selfSay("Seu item {não está pronto}, volte em"..math.floor((getPlayerStorageValue(cid, storage)-os.time())/60).." minutos e"..((getPlayerStorageValue(cid, storage)-os.time())%60).." segundos", cid)	-- caso ainda não esteja pronto o item
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
		end
	end
 
   return true
end
 
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())



ai cria o xml do NPC
data > npc > NPCtroca.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<npc name="[NPC] Troca" script="data/npc/scripts/NPCtroca.lua" walkinterval="0" floorchange="0" emblem="3">
<health now="100" max="100"/>
<look type="133" head="21" body="1" legs="76" feet="25" addons="3"/>
	<parameters>
	<parameter key="message_greet" value="Ola, voce gostaria de {trocar} seus items pelo item supremo, ou {receber}?" />
	</parameters>
</npc>



 

Link para o post
Compartilhar em outros sites
Em 28/07/2022 em 15:30, FeeTads disse:

 

vai em e cria um arquivo .lua chamado NPCtroca.lua
vai ficar assim:
data > npc > scripts > NPCtroca.lua

ai add esse código:
 


-- make by FeeTads //assistente TibiaKing

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 = {}

local itemid = {1111,2222,3333,4444}		-- id dos items necessários pra troca
local save_items = 0						-- variavel apenas pra salvar a quantidade de items //nao mexer
local tempo_de_espera = 60  				-- em minutos	
local storage = 58458711					-- storage //se não souber, não mexer
local item_trocado = 6565					-- id do item que vira após a troca
local trocar_mais_de_uma_vez = true  		-- o player pode trocar varias vezes esse 4 items por 1?  //true pode trocar mais de 1x //false só troca uma vez
 
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 msg = string.lower(msg)
	
  
	if isInArray({"trocar","troca","trocar item"}, msg) then								-- mensagem do player
      selfSay("Você deseja trocar"..#itemid.." items pelo supremo item?", cid)				-- msg do NPC
      talkState[talkUser] = 2
    elseif isInArray({"sim","quero","yes","yeah"}, msg) and talkState[talkUser] == 2 then
		if trocar_mais_de_uma_vez == false and getPlayerStorageValue(cid, storage) ~= -1 then
			selfSay("Desculpe, você já fez sua troca!", cid)
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
			return true
		 end
		for i=1, #itemid do																	-- for pra fazer a contagem dos items
			if getPlayerItemCount(cid, itemid[i]) > 0 then									-- caso o player tenha o item
				save_items = save_items + 1													-- salva na variavel
			end
		end
		if save_items >= #itemid then														-- se tiver todos os items necessários
			selfSay("Parabéns! agora vou craftar seu item, ele irá demorar"..tempo_de_espera.." pra ficar pronto", cid)		-- manda a mensagem
			setPlayerStorageValue(cid, storage, os.time() + (tempo_de_espera*60))											-- seta a storage pra 60 minutos
			for i=1, #itemid do
				doPlayerRemoveItem(cid, itemid[i], 1)																		-- remove os items do player
			end
		else
			selfSay("Desculpe, você não tem os items necessários!", cid)									-- mensagem caso não tenha os items necessários
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
		end
	elseif isInArray({"no","não","nao","not"}, msg) and talkState[talkUser] == 2 then						-- caso o player não queira trocar, só da tchau
		 selfSay("Tudo bem então, Bye!", cid)
		 talkState[talkUser] = 0
		 npcHandler:releaseFocus(cid)
	elseif isInArray({"receber","receber item"}, msg) then															-- caso o player digite "receber"
		if getPlayerStorageValue(cid, storage) - os.time() <= 0 and getPlayerStorageValue(cid, storage) ~= 0 then	-- checa se já passou [tempo de espera], e não é 0
			if (doPlayerAddItemEx(cid, item_trocado, true) ~= RETURNVALUE_NOERROR) then								-- caso o player tenha slot na bp, etc..
				selfSay("Parabéns! seu item está entregue, bom jogo!", cid)											-- msg do NPC
				setPlayerStorageValue(cid, storage, 0)																-- seta a storage do player pra 0
				talkState[talkUser] = 0
				npcHandler:releaseFocus(cid)
			else
				selfSay("Seu item está pronto, deixe espaço em sua BP!", cid)										-- caso não consiga entregar o item só pede pra deixar espaço	
				talkState[talkUser] = 0
				npcHandler:releaseFocus(cid)
			end
		else
			selfSay("Seu item {não está pronto}, volte em"..((getPlayerStorageValue(cid, storage)-os.time())/60).." minutos", cid)	-- caso ainda não esteja pronto o item
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
		end
	end
 
   return true
end
 
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())



ai cria o xml do NPC
data > npc > NPCtroca.xml

 


<?xml version="1.0" encoding="UTF-8"?>
<npc name="[NPC] Troca" script="data/npc/scripts/NPCtroca.lua" walkinterval="0" floorchange="0" emblem="3">
<health now="100" max="100"/>
<look type="133" head="21" body="1" legs="76" feet="25" addons="3"/>
	<parameters>
	<parameter key="message_greet" value="Ola, voce gostaria de {trocar} seus items pelo item supremo, ou {receber}?" />
	</parameters>
</npc>



 

Está dando esse erro na distro quando o player vai receber o item e o player não recebe o item, e eu gostaria se possível que colocasse quantidade nos itens para entregar ao npc, e um outro bug seria esse aqui o minuto ta bugado em vez de aparecer tipo 55:16 aparece 55.16666666616:02 Roger: Seu item não está pronto, volte em55.166666666666 minutos

image.png

Link para o post
Compartilhar em outros sites
  • Moderador
2 horas atrás, Strikerzerh disse:

Está dando esse erro na distro quando o player vai receber o item e o player não recebe o item

trocou os ID's certinho no cabeçalho?
confere o ID do "item_trocado"

 

2 horas atrás, Strikerzerh disse:

tipo 55:16 aparece 55.1666666661

nesse, troque isso:
 

selfSay("Seu item {não está pronto}, volte em"..((getPlayerStorageValue(cid, storage)-os.time())/60).." minutos", cid)	-- caso ainda não esteja pronto o item

pra isso:
 

selfSay("Seu item {não está pronto}, volte em"..math.floor((getPlayerStorageValue(cid, storage)-os.time())/60).." minutos e"..((getPlayerStorageValue(cid, storage)-os.time())%60).." segundos", cid)	-- caso ainda não esteja pronto o item

 

2 horas atrás, Strikerzerh disse:

player não recebe o item

caso esteja certo os ID's, tenta essa script:

1º fix: coloquei o "doCreateItemEx" antes de add
 

-- make by FeeTads //assistente TibiaKing

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 = {}

local itemid = {8976,8978}		-- id dos items necessários pra troca
local save_items = 0						-- variavel apenas pra salvar a quantidade de items //nao mexer
local tempo_de_espera = 20  				-- em minutos	
local storage = 58458711					-- storage //se não souber, não mexer
local item_trocado = 7775					-- id do item que vira após a troca
local trocar_mais_de_uma_vez = true  		-- o player pode trocar varias vezes esse 4 items por 1?  //true pode trocar mais de 1x //false só troca uma vez
 
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 msg = string.lower(msg)
	
  
	if isInArray({"trocar","troca","trocar item"}, msg) then								-- mensagem do player
      selfSay("Você deseja trocar"..#itemid.." items pelo supremo item?", cid)				-- msg do NPC
      talkState[talkUser] = 2
    elseif isInArray({"sim","quero","yes","yeah"}, msg) and talkState[talkUser] == 2 then
		if trocar_mais_de_uma_vez == false and getPlayerStorageValue(cid, storage) ~= -1 then
			selfSay("Desculpe, você já fez sua troca!", cid)
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
			return true
		 end
		for i=1, #itemid do																	-- for pra fazer a contagem dos items
			if getPlayerItemCount(cid, itemid[i]) > 0 then									-- caso o player tenha o item
				save_items = save_items + 1													-- salva na variavel
			end
		end
		if save_items >= #itemid then														-- se tiver todos os items necessários
			selfSay("Parabéns! agora vou craftar seu item, ele irá demorar"..tempo_de_espera.." pra ficar pronto", cid)		-- manda a mensagem
			setPlayerStorageValue(cid, storage, os.time() + (tempo_de_espera))											-- seta a storage pra 60 minutos
			for i=1, #itemid do
				doPlayerRemoveItem(cid, itemid[i], 1)																		-- remove os items do player
			end
		else
			selfSay("Desculpe, você não tem os items necessários!", cid)									-- mensagem caso não tenha os items necessários
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
		end
	elseif isInArray({"no","não","nao","not"}, msg) and talkState[talkUser] == 2 then						-- caso o player não queira trocar, só da tchau
		 selfSay("Tudo bem então, Bye!", cid)
		 talkState[talkUser] = 0
		 npcHandler:releaseFocus(cid)
	elseif isInArray({"receber","receber item"}, msg) then															-- caso o player digite "receber"
		if getPlayerStorageValue(cid, storage) - os.time() <= 0 and getPlayerStorageValue(cid, storage) ~= 0 then	-- checa se já passou [tempo de espera], e não é 0
      		local new_item = doCreateItemEx(item_trocado, 1)
			local receive = doPlayerAddItemEx(cid, new_item)
			if receive == RETURNVALUE_NOERROR then								-- caso o player tenha slot na bp, etc..
				selfSay("Parabéns! seu item está entregue, bom jogo!", cid)											-- msg do NPC
				setPlayerStorageValue(cid, storage, 0)																-- seta a storage do player pra 0
				talkState[talkUser] = 0
				npcHandler:releaseFocus(cid)
			else
				selfSay("Seu item está pronto, deixe espaço em sua BP!", cid)										-- caso não consiga entregar o item só pede pra deixar espaço	
				talkState[talkUser] = 0
				npcHandler:releaseFocus(cid)
			end
		else
			selfSay("Seu item {não está pronto}, volte em"..math.floor((getPlayerStorageValue(cid, storage)-os.time())/60).." minutos e"..((getPlayerStorageValue(cid, storage)-os.time())%60).." segundos", cid)	-- caso ainda não esteja pronto o item
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
		end
	end
 
   return true
end
 
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())


 

Link para o post
Compartilhar em outros sites

O erro ainda esta na parte do timing... e eu gostaria se possível que colocasse quantidade nos itens para entregar ao npc, e que falasse com ele antes de pegar os itens ( exemplo: ele passar as listas dos itens para pegar e perguntar para o player se ele aceita pegar os itens ).

Link para o post
Compartilhar em outros sites
  • Moderador
Em 29/07/2022 em 22:40, Strikerzerh disse:

teria como vc me adicionar no discord

Não posso dar suporte de scripts postados aki, fora do TibiaKing manin

segue o código arrumado:
caso tenha algum bug, manda print do erro do console.

data > npc > scripts > NPCtroca.lua

-- make by FeeTads //assistente TibiaKing

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 de tempo //NÃO MEXER
local function getTimeString(self)
    local format = {
        {'dia', self / 60 / 60 / 24},
        {'hora', self / 60 / 60 % 24},
        {'minuto', self / 60 % 60},
        {'segundo', self % 60}
    }

    local out = {}
    for k, t in ipairs(format) do
        local v = math.floor(t[2])
        if(v > 0) then
            table.insert(out, (k < #format and (#out > 0 and ', ' or '') or ' e ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or ''))
        end
    end
    local ret = table.concat(out)
    if ret:len() < 16 and ret:find('segundo') then
        local a, b = ret:find(' e ')
        ret = ret:sub(b+1)
    end
    return ret
end


local itemid = {						-- id dos items necessários pra troca
	[1] = {item = 7775, count = 1},     -- item = ID do item  // count = quantidade de items
}		

local save_items = 0						-- variavel apenas pra salvar a quantidade de items //nao mexer
local tempo_de_espera = 1    				-- em minutos	
local storage = 58458711					-- storage //se não souber, não mexer
local storageAceitar = 58458712 			-- storage //se não souber, não mexer
local item_trocado = 7775					-- id do item que vira após a troca
local trocar_mais_de_uma_vez = true  		-- o player pode trocar varias vezes esse 4 items por 1?  //true pode trocar mais de 1x //false só troca uma vez
 
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 msg = string.lower(msg)
	
	if isInArray({"items", "items", "lista"}, msg) then							-- se o player disser "lista"
		local lista = ''														-- string pra salvar a lista de items
		for i=1, #itemid do	
			lista = lista..itemid[i].count..' - '..getItemNameById(itemid[i].item)		-- salva a quantidade e o nome dos items
			if i+1 <= #itemid then
				lista = lista..', '														-- caso ainda tenha items, coloca uma virgula pra separar //n mexer
			end
		end
		selfSay("A lista de items são: {"..lista.."}", cid)								-- mostra a lista de items
		selfSay("Você {aceita} pegar esses items?", cid)
		talkState[talkUser] = 10
	elseif isInArray({"no", "não", "nop", "not"}, msg) and talkState[talkUser] == 10 then	-- caso o player n aceite, só da BYE
		selfSay("OK, Bye!", cid)
		talkState[talkUser] = 0
		npcHandler:releaseFocus(cid)
	elseif isInArray({"yes", "aceito", "sim"}, msg) and talkState[talkUser] == 10 then		-- se o player aceitar
		selfSay("OK! estarei a espera!", cid)
		setPlayerStorageValue(cid, storageAceitar, 1)										-- seta a storage pra1
		talkState[talkUser] = 0
		npcHandler:releaseFocus(cid)
	elseif isInArray({"trocar","troca","trocar item"}, msg) then								-- mensagem do player
		if getPlayerStorageValue(cid, storageAceitar) == 1 then								-- se o player ja tiver aceitado a missão
			local lista = ''
			for i=1, #itemid do
				lista = lista..itemid[i].count..' - '..getItemNameById(itemid[i].item)
				if i+1 <= #itemid then
					lista = lista..', '
				end
			end
			selfSay("Você deseja trocar {"..lista.."} pelo supremo item?", cid)				-- msg do NPC mostrando a lista
			talkState[talkUser] = 2
		else
			selfSay("Primeiro gostaria de ver a {lista} de items?", cid)					-- se o player não tiver aceitado, pede pra ele ver a lista
			talkState[talkUser] = 11
		end
	elseif isInArray({"no","não","bye","not"}, msg) and talkState[talkUser] == 11 then
		selfSay("OK, Bye!", cid)
		talkState[talkUser] = 0
		npcHandler:releaseFocus(cid)
	elseif isInArray({"sim","quero","yes","yeah"}, msg) and talkState[talkUser] == 11 then
		local lista = ''
		for i=1, #itemid do
			lista = lista..itemid[i].count..' - '..getItemNameById(itemid[i].item)
			if i+1 <= #itemid then
				lista = lista..', '
			end
		end
		selfSay("A lista de items são: {"..lista.."}", cid)
		selfSay("Você {aceita} pegar esses items?", cid)
		talkState[talkUser] = 10																		-- basicamente mostra a lista...
    elseif isInArray({"sim","quero","yes","yeah"}, msg) and talkState[talkUser] == 2 then
		if trocar_mais_de_uma_vez == false and getPlayerStorageValue(cid, storage) ~= -1 then			-- se puder trocar apenas 1x deixar false
			selfSay("Desculpe, você já fez sua troca!", cid)
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
			return true
		 end
		for i=1, #itemid do																	-- for pra fazer a contagem dos items
			if getPlayerItemCount(cid, itemid[i].item) >= itemid[i].count then									-- caso o player tenha o item
				save_items = save_items + 1													-- salva na variavel
			end
		end
		if save_items >= #itemid then														-- se tiver todos os items necessários
			selfSay("Parabéns! agora vou craftar seu item, ele irá demorar "..getTimeString(tempo_de_espera*60).." pra ficar pronto.", cid)		-- manda a mensagem
			setPlayerStorageValue(cid, storage, os.time() + (tempo_de_espera*60))											-- seta a storage pra 60 minutos
			for i=1, #itemid do
				doPlayerRemoveItem(cid, itemid[i].item, itemid[i].count)																		-- remove os items do player
			end
		else
			selfSay("Desculpe, você não tem os items necessários!", cid)									-- mensagem caso não tenha os items necessários
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
		end
	elseif isInArray({"no","não","nao","not"}, msg) and talkState[talkUser] == 2 then						-- caso o player não queira trocar, só da tchau
		 selfSay("Tudo bem então, Bye!", cid)
		 talkState[talkUser] = 0
		 npcHandler:releaseFocus(cid)
	elseif isInArray({"receber","receber item"}, msg) then															-- caso o player digite "receber"
		if (getPlayerStorageValue(cid, storage) - os.time() <= 0 and getPlayerStorageValue(cid, storage) ~= 0) then	-- checa se já passou [tempo de espera], e não é 0
      		local new_item = doCreateItemEx(item_trocado, 1)
			local receive = doPlayerAddItemEx(cid, new_item)
			if receive == RETURNVALUE_NOERROR then								-- caso o player tenha slot na bp, etc..
				selfSay("Parabéns! seu item está entregue, bom jogo!", cid)											-- msg do NPC
				setPlayerStorageValue(cid, storage, 0)																-- seta a storage do player pra 0
				talkState[talkUser] = 0
				npcHandler:releaseFocus(cid)
			else
				selfSay("Seu item está pronto, deixe espaço em sua BP!", cid)										-- caso não consiga entregar o item só pede pra deixar espaço	
				talkState[talkUser] = 0
				npcHandler:releaseFocus(cid)
			end
		elseif getPlayerStorageValue(cid, storage) - os.time() > 0 then
			selfSay("Seu item {não está pronto}, volte em "..getTimeString((getPlayerStorageValue(cid, storage)-os.time()))..".", cid)	-- caso ainda não esteja pronto o item
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
		elseif getPlayerStorageValue(cid, storage) == 0 then
			selfSay("Você não me entregou nenhum item ainda!", cid)	-- caso ainda não esteja pronto o item
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
		end
	end
 
   return true
end
 
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())


e o XML do NPC, troca pra esse:

data > npc > NPCtroca.xml

<?xml version="1.0" encoding="UTF-8"?>
<npc name="[NPC] Troca" script="data/npc/scripts/NPCtroca.lua" walkinterval="0" floorchange="0" emblem="3">
<health now="100" max="100"/>
<look type="133" head="21" body="1" legs="76" feet="25" addons="3"/>
	<parameters>
	<parameter key="message_greet" value="Ola, voce gostaria de saber a {lista}, {trocar} seus items pelo item supremo, ou {receber}?" />
	</parameters>
</npc>

 

Link para o post
Compartilhar em outros sites

O sistema ta totalmente funcional, muito bom mesmo! obrigado pela ajuda ;)

Descobri um erro... se vc aceita a missao e dps fala receber ele da o item 

As vezes sem aceitar a primeira parte e so escrever receber tbm da os itens ( tudo oq falei acaba nao removendo os itens )

Editado por Strikerzerh (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Moderador
Em 03/08/2022 em 07:14, Strikerzerh disse:

Que parte tem q trocar pra resolver esse problema do RECEBER e ganhar o item sem entregar nada?

provavelmente na parte de receber o item, vou checar aqui depois certinho o script, e ver eventuais erros, ja retorno com ele certin

Link para o post
Compartilhar em outros sites
  • 3 weeks later...
  • Moderador
Em 31/07/2022 em 00:25, FeeTads disse:

elseif isInArray({"receber","receber item"}, msg) then -- caso o player digite "receber" if (getPlayerStorageValue(cid, storage) - os.time() <= 0 and getPlayerStorageValue(cid, storage) ~= 0) then -- checa se já passou [tempo de espera], e não é 0

 nessa parte coloca assim:

elseif isInArray({"receber","receber item"}, msg) then -- caso o player digite "receber" 
	if (getPlayerStorageValue(cid, storage) - os.time() <= 0 and getPlayerStorageValue(cid, storage) ~= 0 and getPlayerStorageValue(cid, storage) ~= -1) then -- checa se já passou [tempo de espera], e não é 0

 

Link para o post
Compartilhar em outros sites
  • Moderador
Em 31/07/2022 em 00:25, FeeTads disse:

selfSay("Desculpe, você não tem os items necessários!", cid)

ele ja diz quando não tem os items

 

Em 31/07/2022 em 00:25, FeeTads disse:

local tempo_de_espera = 1 -- em minutos

vc precisa alterar aki em cima
deu 1 minuto pq precisa alterar la, e o tempo precisa ser em minutos
9h em minutos = 9*60

Link para o post
Compartilhar em outros sites
  • Moderador
2 minutos atrás, Strikerzerh disse:

sim porém nao gastou os itens

ele só consome os items, caso vc tenha a quantidade que ele pediu, se não ele só diz que não tem a quantidade necessária

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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo