eduardogaier 61 Postado 17 de Agosto 2023 Compartilhar Postado 17 de Agosto 2023 Opa estou criando esse npc onde ele me dara 5 missoes para fazer, é atualizado no questlog, é claro que cada missao libera a proxima, estou meio perdido na separação das missoes e to achando o codigo muito grande com muitas checagens de storage, se alguem puder dar uma olhada e me dar laguma dica de como otimizar agradeço. local internalNpcName = "Wagner" local npcType = Game.createNpcType(internalNpcName) local npcConfig = {} npcConfig.name = internalNpcName npcConfig.description = internalNpcName npcConfig.health = 100 npcConfig.maxHealth = npcConfig.health npcConfig.walkInterval = 1000 npcConfig.walkRadius = 2 npcConfig.outfit = { lookType = 432, lookHead = 114, lookBody = 0, lookLegs = 114, lookFeet = 0, lookAddons = 3 } npcConfig.flags = { floorchange = false } --- Mensagens automaticas que seram ditas sem a interação npcConfig.voices = { interval = 15000, chance = 50, { text = 'Sentindo-se perdido, meu filho? Peça-me dicas ou ajuda!' }, { text = 'Sou o cidadão Mais antigo de todos!' }, { text = 'Bem-vindo a cidade de RookLand!' }, { text = 'Vendo Backpack de UH venha conferir!' } } local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) npcType.onThink = function(npc, interval) npcHandler:onThink(npc, interval) end npcType.onAppear = function(npc, creature) npcHandler:onAppear(npc, creature) end npcType.onDisappear = function(npc, creature) npcHandler:onDisappear(npc, creature) end npcType.onMove = function(npc, creature, fromPosition, toPosition) npcHandler:onMove(npc, creature, fromPosition, toPosition) end npcType.onSay = function(npc, creature, type, message) npcHandler:onSay(npc, creature, type, message) end npcType.onCloseChannel = function(npc, creature) npcHandler:onCloseChannel(npc, creature) end local topic = {} local renown = {} local function creatureSayCallback(npc, creature, type, message) local player = Player(creature) local playerId = player:getId() if not npcHandler:checkInteraction(npc, creature) then return false end if MsgContains(message, 'no') or MsgContains(message, 'não') then npcHandler:say('Ok, até a próxima.', npc, creature) npcHandler:removeInteraction(npc, creature) npcHandler:resetNpc(creature) elseif MsgContains(message, 'trabalho') then if player:getStorageValue(60163) == -1 then npcHandler:say('Ok, Anderson o Alquimista está me devendo 5 blank Runes, você poderia buscar para mim? {yes} ou {no}', npc, creature) topic[playerId] = 1 elseif player:getStorageValue(60163) == 1 then npcHandler:say('Você já está participando da missão. Lembre-se de trazer as runas. {Entregar}', npc, creature) elseif player:getStorageValue(60164) == 2 then npcHandler:say('Iai trouxe as runas ? {Entregar}', npc, creature) end elseif topic[playerId] == 1 and (MsgContains(message, 'yes') or MsgContains(message, 'sim')) then npcHandler:say('Ótimo! Vá até a saída sul esquerda da cidade e fale com o Anderson e me traga as Blank Runes.', npc, creature) player:setStorageValue(60163, 1) player:setStorageValue(60164, 1) npcHandler:removeInteraction(npc, creature) npcHandler:resetNpc(creature) elseif MsgContains(message, 'Entregar') then if player:getItemCount(3147) >= 5 then if player:getStorageValue(60164) == 2 then npcHandler:say('Você me trouxe as runas? {yes} ou {no}', npc, creature) topic[playerId] = 2 else npcHandler:say('Volte lá e me traga as runas logo.', npc, creature) npcHandler:removeInteraction(npc, creature) npcHandler:resetNpc(creature) end else npcHandler:say('Volte lá e me traga as runas logo.', npc, creature) npcHandler:removeInteraction(npc, creature) npcHandler:resetNpc(creature) end end if topic[playerId] == 2 and (MsgContains(message, 'yes') or MsgContains(message, 'sim')) then if player:removeItem(3147, 5) then npcHandler:say('Parabéns! Você concluiu seu primeiro trabalho. Aqui está sua recompensa.', npc, creature) -- entrega os itens e já dá a xp, não precisa de mais nada além disso player:addExperience(500, true) player:setStorageValue(60164, 3) else npcHandler:say('Você não possui os itens necessários.', npc, creature) end npcHandler:removeInteraction(npc, creature) npcHandler:resetNpc(creature) elseif player:getStorageValue(60164) == 3 and topic[playerId] ~= 2 then npcHandler:say('Você já concluiu esta missão. Vamos para a missão {mission2} ?', npc, creature) topic[playerId] = 3 end if topic[playerId] == 3 and (MsgContains(message, 'yes') or MsgContains(message, 'sim')) then if player:getStorageValue(60164) == 3 then npcHandler:say('Você já concluiu esta missão. Vamos para a missão {mission2} ?', npc, creature) topic[playerId] = 4 else npcHandler:say('Você já concluiu esta missão. O que você quer fazer agora?', npc, creature) npcHandler:removeInteraction(npc, creature) npcHandler:resetNpc(creature) end end if topic[playerId] == 4 and MsgContains(message, 'mission2') then if player:getStorageValue(60164) == 3 then if player:getStorageValue(60165) == 1 then npcHandler:say('Ok, pegue esta foice e corte 5 trigos.', npc, creature) player:setStorageValue(60165, 2) else npcHandler:say('Você já pegou a foice. Vá cortar os trigos!', npc, creature) end else npcHandler:say('Você já concluiu esta missão. O que você quer fazer agora?', npc, creature) end npcHandler:removeInteraction(npc, creature) npcHandler:resetNpc(creature) end return true end local function onReleaseFocus(npc, creature) local playerId = creature:getId() topic[playerId], renown[playerId] = nil, nil end keywordHandler:addKeyword({'informação'}, StdModule.say, {npcHandler = npcHandler, text = 'A ok eu gosto de ser objetivo tenho alguns tópicos que talvez te interessar como:\n {minha vida} \n{rookland} \n{missões}.'}) keywordHandler:addKeyword({'minha vida'}, StdModule.say, {npcHandler = npcHandler, text = 'Eu sempre fiquei na frente do DP runando UH, para vender para outros guerreiros, não fiquei rico, mas consegui me manter por um tempo.\n Assim adquiri muito conhecimento da cidade e conheci muitas pessoas, por isso pode me perguntar qualquer coisa que poderei te ajudar.\n só não me peça para fazer LMMs que tenho uma péssima lembrança sobre isso, consegui chegar apenas até o nível 24, mas quem sabe posso te ajudar a alcançar este nível também! {informação} '}) keywordHandler:addKeyword({'rookland'}, StdModule.say, {npcHandler = npcHandler, text = 'Rookland é um pequeno vilarejo de fazendeiros, onde há inúmeras possibilidades de trabalhos e missões, onde você pode provar o seu valor, ter sua casa, sua plantação e se tornar um ótimo Guerreiro, Druida, Sorcerer, Paladino ou até mesmo um arqueiro, logo te darei mais informações, no momento estou meio ocupado, tenho que entregar algumas UHSS.'}) keywordHandler:addKeyword({'missões'}, StdModule.say, {npcHandler = npcHandler, text = 'Humm! você veio da batalha e não tem nada, mas eu posso arranjar algum trabalho para você se reerguer, porem não sairá de graça. Você aceita o {trabalho} ?'}) npcHandler:setMessage(MESSAGE_GREET, 'Olá |PLAYERNAME|, Olá eu posso te ajudar com alguma, {informação} ?') npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:setCallback(CALLBACK_REMOVE_INTERACTION, onReleaseFocus) npcHandler:addModule(FocusModule:new(), npcConfig.name, true, true, true) -- npcType registering the npcConfig table npcType:register(npcConfig) 12 1 Citar Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
Suporte Mixlort 203 Postado 17 de Agosto 2023 Suporte Compartilhar Postado 17 de Agosto 2023 Seu tópico foi aprovado! Citar Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
Icaro Pimentel 10 Postado 18 de Agosto 2023 Compartilhar Postado 18 de Agosto 2023 local internalNpcName = "Wagner" local npcConfig = { name = internalNpcName, description = internalNpcName, health = 100, maxHealth = 100, walkInterval = 1000, walkRadius = 2, outfit = { lookType = 432, lookHead = 114, lookBody = 0, lookLegs = 114, lookFeet = 0, lookAddons = 3 }, flags = { floorchange = false }, voices = { interval = 15000, chance = 50, { text = 'Sentindo-se perdido, meu filho? Peça-me dicas ou ajuda!' }, { text = 'Sou o cidadão Mais antigo de todos!' }, { text = 'Bem-vindo a cidade de RookLand!' }, { text = 'Vendo Backpack de UH venha conferir!' } } } local function onReleaseFocus(npc, creature) local playerId = creature:getId() topic[playerId], renown[playerId] = nil, nil end local function workMessage(player) if player:getStorageValue(60164) == 3 then return '' end return ' Ok, Anderson o Alquimista está me devendo 5 blank Runes, você poderia buscar para mim? {yes} ou {no}' end local function doWork(npcHandler, text, topic, playerId, work) if topic[playerId] == 1 and (MsgContains(text, 'yes') or MsgContains(text, 'sim')) then npcHandler:say('Ótimo! Vá até a saída sul esquerda da cidade e fale com o Anderson e me traga as Blank Runes.', npc, creature) player:setStorageValue(60163, 1) player:setStorageValue(60164, 1) npcHandler:resetNpc(creature) elseif MsgContains(text, 'Entregar') then if player:getItemCount(3147) >= 5 then if player:getStorageValue(60164) == 2 then npcHandler:say('Você me trouxe as runas? {yes} ou {no}', npc, creature) topic[playerId] = 2 else npcHandler:say('Volte lá e me traga as runas logo.', npc, creature) npcHandler:resetNpc(creature) end else npcHandler:say('Volte lá e me traga as runas logo.', npc, creature) npcHandler:resetNpc(creature) end end end local function doSecondMission(npcHandler, text, topic, playerId) if topic[playerId] == 2 and (MsgContains(text, 'yes') or MsgContains(text, 'sim')) then if player:removeItem(3147, 5) then npcHandler:say('Parabéns! Você concluiu seu primeiro trabalho. Aqui está sua recompensa.', npc, creature) player:addExperience(500, true) player:setStorageValue(60164, 3) else npcHandler:say('Você não possui os itens necessários.', npc, creature) end npcHandler:resetNpc(creature) elseif player:getStorageValue(60164) == 3 and topic[playerId] ~= 2 then npcHandler:say('Você já concluiu esta missão. Vamos para a missão {mission2} ?', npc, creature) topic[playerId] = 3 end end local function doThirdMission(npcHandler, text, topic, playerId) if topic[playerId] == 3 and (MsgContains(text, 'yes') or MsgContains(text, 'sim')) then if player:getStorageValue(60164) == 3 then npcHandler:say('Você já concluiu esta missão. Vamos para a missão {mission2} ?', npc, creature) topic[playerId] = 4 else npcHandler:say('Você já concluiu esta missão. O que você quer fazer agora?', npc, creature) npcHandler:resetNpc(creature) end end end local function doFourthMission(npcHandler, text, topic, playerId) if topic[playerId] == 4 and MsgContains(text, 'mission2') then if player:getStorageValue(60164) == 3 then if player:getStorageValue(60165) == 1 then npcHandler:say('Ok, pegue esta foice e corte 5 trigos.', npc, creature) player:setStorageValue(60165, 2) else npcHandler:say('Você já pegou a foice. Vá cortar os trigos!', npc, creature) end else npcHandler:say('Você já concluiu esta missão. O que você quer fazer agora?', npc, creature) end npcHandler:resetNpc(creature) end end local function creatureSayCallback(npc, creature, type, message) local player = Player(creature) local playerId = player:getId() if not npcHandler:checkInteraction(npc, creature) then return false end if MsgContains(message, 'no') or MsgContains(message, 'não') then npcHandler:say('Ok, até a próxima.', npc, creature) npcHandler:resetNpc(creature) elseif MsgContains(message, 'trabalho') then npcHandler:say(workMessage(player), npc, creature) topic[playerId] = 1 end doWork(npcHandler, message, topic, playerId) doSecondMission(npcHandler, message, topic, playerId) doThirdMission(npcHandler, message, topic, playerId) doFourthMission(npcHandler, message, topic, playerId) return true end local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) keywordHandler:addKeyword({'informação'}, StdModule.say, {npcHandler = npcHandler, text = 'A ok eu gosto de ser objetivo tenho alguns tópicos que talvez te interessar como:\n {minha vida} \n{rookland} \n{missões}.'}) keywordHandler:addKeyword({'minha vida'}, StdModule.say, {npcHandler = npcHandler, text = 'Eu sempre fiquei na frente do DP runando UH, ...'}) npcHandler:setMessage(MESSAGE_GREET, 'Olá |PLAYERNAME|, Olá eu posso te ajudar com alguma, {informação} ?') npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:setCallback(CALLBACK_REMOVE_INTERACTION, onReleaseFocus) npcHandler:addModule(FocusModule:new(), internal This is the hidden content, please Entre ou Cadastre-se faça o teste e veja se funciona de acordo com sua necessidade, caso não, envie uma mensagem ao chat gpt e peça para que ele faça as mudanças necessarias, abc 5 Citar Link para o comentário Compartilhar em outros sites Mais opções de compartilhamento...
Posts Recomendados
Participe da Conversa
Você pode postar agora e se cadastrar mais tarde. Cadastre-se Agora para publicar com Sua Conta.