NB
npc

[Resolvido] npc não da storage

Por nbb147, 09 de ago. de 2019 em Resolvidos

storage
8
2k
nbb147N
09 de agosto de 2019 às 23:30

Galera, eu modifiquei um npc em busca de fazer com que ele receba uma quantidade de um item especifico e em seguida dê uma storage ao player, porém, por mais que o jogador tenha os itens na bolsa, ele não os recebe e não da a storage ao player, alguem saberia como arrumar isso? Observação, não da nenhum erro na distro, script:

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) end
function onThink() npcHandler:onThink() end


function addStorage(cid, message, keywords, parameters, node)

if(not npcHandler:isFocused(cid)) then

return false

end

if getPlayerItemCount(cid, 5897) >= 10 then -- 10 wolf paws

return true,npcHandler:say('Desculpe, mas voce nao trouxe as 10 rat paws.', cid)

elseif not doPlayerRemoveItem(cid, 5897, 10) then

return true,npcHandler:say('Voce precisa me trazer 10 rat paws.', cid)

end

setPlayerStorageValue(var, storage, 1)

npcHandler:say('Otimo servico, voce tem minha autorizacao.', cid)

npcHandler:resetNpc()

return true

end


keywordHandler:addKeyword({'vengard'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Voce deseja comprar uma das montarias do Vengard? Ele esta devendo muitos impostos a vila, então, eu o proibi de vender. Ele ainda ira me pagar com dinheiro ou servicos.'})

local node0 = keywordHandler:addKeyword({'servicos'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Se voce fizer alguns servicos para mim, eu te darei a permissao para comprar uma mount. Temos um acordo?'})
node0:addChildKeyword({'yes'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'A cidade esta infestada de ratos, provavelmente eles estão saindo dos esgotos, traga-me 10 rat paws como prova de que voce os matou, e eu te darei a autorizacao.'})
node0:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Ok, ate mais.', reset = true})

local node1 = keywordHandler:addKeyword({'rats'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você trouxe as 10 rat paws?'})
node1:addChildKeyword({'yes'}, addStorage, {storage = 10105})
node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Entao me traga.', reset = true})

npcHandler:addModule(FocusModule:new())

Qualquer ajuda, agradeço desde já.

MarshmelloM
10 de agosto de 2019 às 21:47

@nbb147 Dei uma Simplificada nesse script, ficou um pouco bagunçado...

Spoiler

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 item = 5897 -- item AQui
local storage = xxxxxx  ---storage Aqui
function creatureSayCallback(cid, type, msg)


if msgcontains(msg, 'sim') or msgcontains(msg, 'yes') then

if getPlayerItemCount(cid, item) > 10 then
setPlayerStorageValue(cid, storage, 1)
selfSay('Otimo serviço, você tem minha autorização.', cid)
else
selfSay('Você precisa me trazer 10 rat paws', cid)
end

end

return true

end


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

 

nbb147N
12 de agosto de 2019 às 10:30

Funcionou, porém o jogador pode repetir a missão quando quiser, o que não é legal, como eu poderia criar uma condição para que q ele não pudesse repeti-la? Pois tentei através de storages e não consegui.

MarshmelloM
12 de agosto de 2019 às 12:24

@nbb147 Foi mal eu esqueci disso haha

Spoiler

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 item = 5897 -- item AQui
local storage = xxxxxx  ---storage Aqui
function creatureSayCallback(cid, type, msg)


if msgcontains(msg, 'sim') or msgcontains(msg, 'yes') then

if getPlayerItemCount(cid, item) > 10 then
setPlayerStorageValue(cid, storage, 1)
selfSay('Otimo serviço, você tem minha autorização.', cid)
elseif getPlayerStorageValue(cid, storage) > 0 then
selfSay('Você já fez minha missão', cid)
else
selfSay('Você precisa me trazer 10 rat paws', cid)
end

end

return true

end


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

 

nbb147N
14 de agosto de 2019 às 22:53

amigo, eu coloquei desta forma, mas ele não recebe a storage inicialmente, apenas quando eu saio do personagem e entro novamente, e mesmo estando com a storage ele continua fazendo a missão repetidamente.

MarshmelloM
14 de agosto de 2019 às 23:00
Melhor resposta

@nbb147

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 item = 5897 -- item AQui
local storage = xxxxxx  ---storage Aqui
function creatureSayCallback(cid, type, msg)


if msgcontains(msg, 'sim') or msgcontains(msg, 'yes') then

if getPlayerStorageValue(cid,  storage) == -1 then

if getPlayerItemCount(cid, item) > 10 then

setPlayerStorageValue(cid, storage, 1)
selfSay('Otimo serviço, você tem minha autorização.', cid)
else
selfSay('Você precisa me trazer 10 rat paws', cid)
end
else
selfSay('Você já fez minha missão', cid)
end
end

return true

end


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

 

nbb147N
16 de agosto de 2019 às 20:06

obg, funcionou perfeitamente amigo 

Yan LiimaY
16 de agosto de 2019 às 22:50
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.