Postado Abril 24, 2015 10 anos O script funciona normalmente, porém estou com um erro nas mensagem espero que ajudem! PROBLEMA: MENSAGEM DO NPC: Ao falar hi/trofeus/ouro~prata~bronze , o "npc" não fala se tem certeza que quer confirmar a troca do troféu pelo item, ou seja ele já faz a troca após escreve a opção de troféu (ouro/prata/bronze). Exemplo: #Player: Hi #NPC: Ola Fulano. Seja Bem-Vindo a Sala de Trocas. Eu coleciono {trofeus} de ouro, prata e bronze. E para garantir que todos troquem comigo, eu retribuo dando gemas aleatorias. #Player: troféu #NPC: Acho que você pretende trocar algum troféu por gemas. Qual troféu você pretende trocar comigo: {ouro}, {prata} ou {bronze} #Player: bronze #NPC: Obrigado, aqui estão sua gemas. #Player: prata #NPC: Obrigado, aqui estão suas gemas. #Player: ouro #NPC: Obrigado, aqui estão suas gemas. SOLUÇÃO: 1º MENSAGEM DO NPC: O certo é que mande uma mensagem de confirmação após escolher o tipo de troféu (bronze/prata/ouro) Exemplo: #Player: Hi #NPC: Ola Fulano. Seja Bem-Vindo a Sala de Trocas. Eu coleciono {trofeus} de ouro, prata e bronze. E para garantir que todos troquem comigo, eu retribuo dando gemas aleatorias. #Player: troféu #NPC: Acho que você pretende trocar algum troféu por gemas. Qual troféu você pretende trocar comigo: {ouro}, {prata} ou {bronze} #Player: bronze #NPC: Você tem certeza que quer trocar 1 troféu de bronze por 1 gema aleatória? #Player: sim #NPC: Obrigado, aqui estão sua gema. < AS MENSAGEM QUE EU QUERO #Player: prata #NPC: Você tem certeza que quer trocar 1 troféu de prata por 2 gemas aleatória? < QUE APAREÇA AO FALAR #Player: sim #NPC: Obrigado, aqui estão suas gemas. < O TIPO DE TROFÉU ! #Player: ouro #NPC: Você tem certeza que quer trocar 1 troféu de ouro por 3 gemas aleatória? #Player: sim #NPC: Obrigado, aqui estão suas gemas. _____________________________________________________________________________________________________ Data/npc/scripts: 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 function thinkCallback(cid) local rand = math.random(1,100) if rand == 10 then selfSay('Troque o seu troféu aqui.') -- msg que vai sair do npc end if rand == 11 then selfSay ('Só entendo português, diga oi.') end if rand == 12 then selfSay ('Oi! Troco gemas por trofeús!') end return true end function greetCallback(cid) return true end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local trophy = { ["ouro"] = {3, 5805}, --{Quantidade de items aleatórios, ID do troféu}, ["prata"] = {2, 5806}, ["bronze"] = {1, 5807}, } local items = {2154, 2156, 2158} if msgcontains(msg, "trophy") or msgcontains(msg, "trofeu") then selfSay("Acho que você pretende trocar algum troféu por gemas. Qual troféu você pretende trocar comigo: {ouro}, {prata} ou {bronze}?", cid) talkState[talkUser] = 1 return true elseif talkState[talkUser] == 1 then if trophy[msg:lower()] then local trofeu = trophy[msg:lower()] local id = trofeu[2] if getPlayerItemCount(cid, id) > 0 then for i = 1, trofeu[1] do doPlayerAddItem(cid, items[math.random(#items)], 1) end doPlayerRemoveItem(cid, id, 1) selfSay("Obrigado, aqui estão suas gemas.", cid) talkState[talkUser] = 0 return true else selfSay("Você não possui este troféu.", cid) talkState[talkUser] = 0 return true end else selfSay("Este troféu não existe.", cid) talkState[talkUser] = 0 return true end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:setCallback(CALLBACK_ONTHINK, thinkCallback) npcHandler:setCallback(CALLBACK_GREET, greetCallback) npcHandler:addModule(FocusModule:new()) Editado Abril 24, 2015 10 anos por williamcgv (veja o histórico de edições)
Postado Abril 24, 2015 10 anos Tipo assim? não respondo pms solicitando suporte em programação/scripting
Postado Abril 24, 2015 10 anos Autor que? não entendeu a explicação que quero? apenas que o npc mande mensagem pra confirmar se quer trocar o trofeu entendeu?
Postado Abril 24, 2015 10 anos Suponho que você não tenha entrado no link que enviei, então mandarei aqui mesmo o código. local mensagem = "" 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 trophy = { ["ouro"] = {3, 5805}, --{Quantidade de items aleatórios, ID do troféu}, ["prata"] = {2, 5806}, ["bronze"] = {1, 5807}, } local items = {2154, 2156, 2158} if msgcontains(msg:lower(), "trophy") or msgcontains(msg:lower(), "trofeu") then selfSay("Acho que você pretende trocar algum troféu por gemas. Qual troféu você pretende trocar comigo: {ouro}, {prata} ou {bronze}?", cid) talkState[talkUser] = 1 return true elseif talkState[talkUser] == 1 then if trophy[msg:lower()] then selfSay("Você tem certeza que quer trocar 1 troféu de "..msg:lower().." por "..trophy[msg:lower()][1].." gema"..(trophy[msg:lower()][1] > 1 and "s" or "").." aleatória"..(trophy[msg:lower()][1] > 1 and "s" or "").."?", cid) mensagem = msg:lower() talkState[talkUser] = 2 return true else selfSay("Este troféu não existe.", cid) talkState[talkUser] = 0 return true end elseif msgcontains(msg:lower(), "yes") or msgcontains(msg:lower(), "sim") and talkState[talkUser] == 2 then local trofeu = trophy[mensagem] local id = trofeu[2] if getPlayerItemCount(cid, id) > 0 then for i = 1, trofeu[1] do doPlayerAddItem(cid, items[math.random(#items)], 1) end doPlayerRemoveItem(cid, id, 1) selfSay("Obrigado, aqui estão suas gemas.", cid) talkState[talkUser] = 0 return true else selfSay("Você não possui este troféu.", cid) talkState[talkUser] = 0 return true end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Editado Abril 24, 2015 10 anos por zipter98 (veja o histórico de edições) não respondo pms solicitando suporte em programação/scripting
Postado Abril 24, 2015 10 anos Autor mano era isso que eu queria para fechar só faltou essa parte: Obrigado, aqui estão suas gemas. se for 1 gema tinha que ser: Obrigado, aqui estão suas gema. Editado Abril 24, 2015 10 anos por williamcgv (veja o histórico de edições)
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.