Postado Agosto 31, 2022 2 anos 2 minutos atrás, Strikerzerh disse: ele me entregou sem eu ter os itens na mochila sim, pra receber não precisa dos items na BP, precisa ter os items na hora de aceitar a missão. a não ser que vc modificou e tirou, me manda seu script como ta em spoiler pf
Postado Agosto 31, 2022 2 anos Autor Mais ai q ta em nenhum momento eu coloquei os itens na mochila até pq n teria cap eu não sei como coloca em spoiler... desculpa 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 = 8976, count = 1}, [2] = {item = 2350, count = 1}, [3] = {item = 2160, count = 1000}, } 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 local item_trocado = 10313 -- id do item que vira após a troca local trocar_mais_de_uma_vez = false -- 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({"espada", "itens", "lista"}, msg) 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("Onde voce encontrou esta espada quebrada? com ela posso fazer uma poderosa espada, mais vc vai precisar trazer 30 pieces of iron, 30 silver broochs, 1o golden mugs, 1 demonic essence e 10kk. Aceita?", cid) talkState[talkUser] = 10 elseif isInArray({"yes", "aceito", "sim"}, msg) and talkState[talkUser] == 10 then selfSay("Otimo, me traga o que te pedi: 30 pieces of iron, 30 silver broochs, 10 golden mugs, 1 demonic essence e 10kk.", cid) setPlayerStorageValue(cid, storageAceitar, 1) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) elseif isInArray({"espada","troca","trocar"}, msg) then -- mensagem do player if getPlayerStorageValue(cid, storageAceitar) == 1 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("Voce aceita me pagar 10kk pela espada?", cid) -- msg do NPC talkState[talkUser] = 2 else selfSay("Primeiro gostaria de ver a {lista} de itens para me trazer?", cid) 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 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, voce ja 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("Otimo! vai levar 9 horas ate que a espada fique pronta, volte aqui em "..getTimeString(tempo_de_espera*60)..".", 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, mas o senhor nao me trouxe os itens necessarios!", 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 and getPlayerStorageValue(cid, storage) ~= -1) 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("Sua espada esta pronta, aqui esta!", cid) -- msg do NPC setPlayerStorageValue(cid, storage, 0) -- seta a storage do player pra 0 talkState[talkUser] = 0 npcHandler:releaseFocus(cid) else selfSay("Sua espada esta pronta, deixe espaço em sua mochila!", 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("Sua espada ainda {nao esta pronta}, 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("Desculpe, mas o senhor nao me trouxe os itens necessarios!", 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())
Postado Agosto 31, 2022 2 anos Solução 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 = 8976, count = 1}, [2] = {item = 2350, count = 1}, [3] = {item = 2160, count = 1000}, } 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 local item_trocado = 10313 -- id do item que vira após a troca local trocar_mais_de_uma_vez = false -- 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({"espada", "itens", "lista"}, msg) 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("Onde voce encontrou esta espada quebrada? com ela posso fazer uma poderosa espada, mais vc vai precisar trazer 30 pieces of iron, 30 silver broochs, 1o golden mugs, 1 demonic essence e 10kk. Aceita?", cid) talkState[talkUser] = 10 elseif isInArray({"yes", "aceito", "sim"}, msg) and talkState[talkUser] == 10 then selfSay("Otimo, me traga o que te pedi: 30 pieces of iron, 30 silver broochs, 10 golden mugs, 1 demonic essence e 10kk.", cid) setPlayerStorageValue(cid, storageAceitar, 1) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) elseif isInArray({"espada","troca","trocar"}, msg) then -- mensagem do player if getPlayerStorageValue(cid, storageAceitar) == 1 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("Voce aceita me pagar {"..lista.."} pela espada?", cid) -- msg do NPC talkState[talkUser] = 2 else selfSay("Primeiro gostaria de ver a {lista} de itens para me trazer?", cid) 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 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, voce ja 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("Otimo! vai levar 9 horas ate que a espada fique pronta, volte aqui em "..getTimeString(tempo_de_espera*60)..".", 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, mas o senhor nao me trouxe os itens necessarios!", 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 and getPlayerStorageValue(cid, storage) ~= -1) 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("Sua espada esta pronta, aqui esta!", cid) -- msg do NPC setPlayerStorageValue(cid, storage, 0) -- seta a storage do player pra 0 talkState[talkUser] = 0 npcHandler:releaseFocus(cid) else selfSay("Sua espada esta pronta, deixe espaço em sua mochila!", 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("Sua espada ainda {nao esta pronta}, 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("Desculpe, mas o senhor nao me trouxe os itens necessarios!", 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()) @Strikerzerah trocar a fala de 10kk por selfSay("Voce aceita me pagar {"..lista.."} pela espada?", cid) coloca o script acima, e reabre o ot ou recria o NPC, sempre que editar script de NPC´, é necessário recria-lo
Postado Agosto 31, 2022 2 anos Autor essa função da lista teria como remover? pq dai falaria isso 23:01 Kavek: Otimo, me traga o que te pedi: 30 pieces of iron, 30 silver broochs, 10 golden mugs, 1 demonic essence e 10kk. agora funcionou... ta tudo certinho!!! Editado Agosto 31, 2022 2 anos por Strikerzerh (veja o histórico de edições)
Postado Agosto 31, 2022 2 anos elseif isInArray({"espada","troca","trocar"}, msg) then -- mensagem do player if getPlayerStorageValue(cid, storageAceitar) == 1 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("Voce aceita me pagar {"..lista.."} pela espada?", cid) -- msg do NPC selfSay("Voce aceita me pagar 10KK pela espada?", cid) -- msg do NPC talkState[talkUser] = 2 só trocar aquela parte por essa. mas tipo, o player vai falar espada e ele vai querer só 10kk, ai depois vai pedir outros items? lembrando, depois que alterar RECRIE o NPC
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.