Postado Julho 15, 2016 8 anos Olá pessoal, Procurei muito pelo fórum e não encontrei o npc da forma que desejo e até tentei montar a script mas sem sucesso. 1. O que desejo é simples, um NPC que venda todas as bless de uma só vez (50k) na versão 8.6 e se possível que ele venda aol também (20k). 2. E aproveitando o tópico para não criar vários, também estou tentando montar um NPC que só interaja com o player (que vá contando a história do servidor) usando "Você poderia visitar a {forja} não é mesmo?!" Mas o parâmetro em questão eu não consigo usar. O que criei está assim: <?xml version="1.0" encoding="UTF-8"?> <npc name="Krulzorg" walkinterval="0" floorchange="0"> <health now="100" max="100"/> <look type="300" corpse="8955"/> <interaction range="3" idletime="60"> <interact keywords="hi" focus="1"> <keywords>hello</keywords> <response text="Welcome to the invocation center of Draenor, noble |PLAYERVOCATION|. You will want to make a {sacrifice} or {quest} today?"> <action name="idle" value="1"/> </response> </interact> <interact keywords="sacrifice" focus="1"> <keywords>invocation</keywords> <response text="We need sacrifices to keep open portals. Go to the library when you can and read something."> <action name="idle" value="1"/> </response> </interact> <interact keywords="quest" focus="1"> <keywords>quests</keywords> <response text="There are several quests to be performed. Talk to other summoners like me."> <action name="idle" value="1"/> </response> </interact> <interact keywords="bye" focus="0"> <keywords>farewell</keywords> <response text="Good bye."/> </interact> </interaction> </npc> 3. Quero desenvolver uma série de quests em que o NPC X envia o player para o destino, mas só se o players trouxer os itens a, b e c. Como desenvolvo esse NPC? Agradeço desde já. Editado Julho 15, 2016 8 anos por Felipe Lotz (veja o histórico de edições) Atenciosamente, Felipe Lotz.
Postado Julho 15, 2016 8 anos 2 horas atrás, Felipe Lotz disse: Olá pessoal, Procurei muito pelo fórum e não encontrei o npc da forma que desejo e até tentei montar a script mas sem sucesso. 1. O que desejo é simples, um NPC que venda todas as bless de uma só vez (50k) na versão 8.6 e se possível que ele venda aol também (20k). 2. E aproveitando o tópico para não criar vários, também estou tentando montar um NPC que só interaja com o player (que vá contando a história do servidor) usando "Você poderia visitar a {forja} não é mesmo?!" Mas o parâmetro em questão eu não consigo usar. O que criei está assim: <?xml version="1.0" encoding="UTF-8"?> <npc name="Krulzorg" walkinterval="0" floorchange="0"> <health now="100" max="100"/> <look type="300" corpse="8955"/> <interaction range="3" idletime="60"> <interact keywords="hi" focus="1"> <keywords>hello</keywords> <response text="Welcome to the invocation center of Draenor, noble |PLAYERVOCATION|. You will want to make a {sacrifice} or {quest} today?"> <action name="idle" value="1"/> </response> </interact> <interact keywords="sacrifice" focus="1"> <keywords>invocation</keywords> <response text="We need sacrifices to keep open portals. Go to the library when you can and read something."> <action name="idle" value="1"/> </response> </interact> <interact keywords="quest" focus="1"> <keywords>quests</keywords> <response text="There are several quests to be performed. Talk to other summoners like me."> <action name="idle" value="1"/> </response> </interact> <interact keywords="bye" focus="0"> <keywords>farewell</keywords> <response text="Good bye."/> </interact> </interaction> </npc> 3. Quero desenvolver uma série de quests em que o NPC X envia o player para o destino, mas só se o players trouxer os itens a, b e c. Como desenvolvo esse NPC? Agradeço desde já. 1 - local tab = { price = 50, -- Preco BLESS, 50 = 50k price2 = 20 -- Preco AOL, 20 = 20k } local bless = {1, 2, 3, 4, 5} 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 if (msgcontains(msg, 'bless')) then talkState[talkUser] = 1 selfSay('Deseja comprar todas as bles? Isso ira te custar '..tab.price..'k!', cid) elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1) then for i = 1, table.maxn(bless) do if getPlayerBlessing(cid, bless[i]) then selfSay('Voce ja tem todas as blessings.', cid) elseif (doPlayerRemoveMoney(cid, tab.price) == TRUE) then doPlayerAddBlessing(cid, bless[i]) talkState[talkUser] = 0 selfSay('Voce comprou todas as blessings.', cid) doSendMagicEffect(getPlayerPosition(cid), 49) elseif (doPlayerRemoveMoney(cid, tab.price) == FALSE) then selfSay('Voce nao tem dinheiro suficiente!', cid) end end elseif msgcontains(msg, 'aol') then talkState[talkUser] = 2 selfSay('Deseja comprar uma AOL por '..tab.price2..'k?', cid) elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 2) then if (doPlayerRemoveMoney(cid, tab.price2) == TRUE) then doPlayerAddItem(cid,2173,1) talkState[talkUser] = 0 doSendMagicEffect(getPlayerPosition(cid),6) selfSay('Aqui esta sua AOL!', cid) else selfSay('Voce nao tem dinheiro suficiente!', cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) 2 - É um NPC fácil, você só precisa especificar as falas. 3 - local tab = { pos = {x = 1004, y = 1021, z = 7}, -- posição x, y, z do local a teleportar o player item = {5920, 50}, -- {id, quantidade} item2 = {5882, 30}, -- {id, quantidade} item3 = {11199, 20} -- {id, quantidade} } 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 if (msgcontains(msg, 'teleport')) then talkState[talkUser] = 1 selfSay('Lembre-se.. Voce precisa de '..tab.item[2]..' '..getItemNameById(tab.item[1])..', '..tab.item2[2]..' '..getItemNameById(tab.item2[1])..' e '..tab.item3[2]..' '..getItemNameById(tab.item3[1])..' para teleportar, voce tem todos os itens?', cid) elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1) then if (getPlayerItemCount(cid, tab.item[1]) >= tab.item[2] and getPlayerItemCount(cid, tab.item2[1]) >= tab.item2[2] and getPlayerItemCount(cid, tab.item3[1]) >= tab.item3[2]) then doPlayerRemoveItem(cid, tab.item[1], tab.item[2]) doPlayerRemoveItem(cid, tab.item2[1], tab.item2[2]) doPlayerRemoveItem(cid, tab.item3[1], tab.item3[2]) doTeleportThing(cid, tab.pos) doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT) selfSay('Voce foi teleportado!', cid) else talkState[talkUser] = 0 selfSay('Perdao, mas voce nao tem os itens necessarios ainda.', cid) end elseif (msgcontains(msg, 'no') and talkState[talkUser] == 1) then talkState[talkUser] = 0 selfSay('Pois bem, pegue os itens e retorne.', cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
Postado Julho 15, 2016 8 anos Autor @Kemmlly Muito obrigado pelos 2 scripts camarada! Ficaram exatamente como queria. E sobre o segundo então eu sei que é simples e se fosse possível gostaria de aprender como fazer, porque vão ser vários NPCs assim e não quero dar todo trabalho pra você. Mas como exemplo: Citar Player - hi NPC - Olá |PLAYERNAME|, você veio me trazer um {sacrifício}? Player - sacrificio NPC - Precisamos de sacrificios para manter os portais abertos e também o acesso as {quests}. Player - quests NPC - ... Nesse estilo, que a conversa fique no chat de npc e com as palavras destacadas. Agradeço muito o que já fez! Fico o REP como agradecimento. Atenciosamente, Felipe Lotz.
Postado Julho 15, 2016 8 anos Pelo que vi, você tentou fazer o NPC todo no XML, o ideal é usar o XML só para chamar o script do NPC e nesse script fazer o resto. Se o NPC for só de fala, você usa o elseif para cada fala e registra o talkState[talkUser] = para gravar a mensagem falada, exemplo; if (msgcontains(msg, 'sacrificio')) then talkState[talkUser] = 1 selfSay('Precisamos de sacrificios para manter os portais abertos e também o acesso as {quests}.', cid) elseif (msgcontains(msg, 'quest') and talkState[talkUser] == 1) then selfSay('Texto que o npc vai falar com {palavra} pra frase 2.', cid) talkState[talkUser] = 2 elseif (msgcontains(msg, 'palavra') and talkState[talkUser] == 2) then selfSay('Texto que o npc vai falar com {palavra} pra frase 3.', cid) talkState[talkUser] = 3 Nesse caso, se um player chegar no NPC e falar diretamente QUEST, como o talkState[talkUser] não é igual a 1 ainda, ele não falará nada, mas se falar as frases na ordem, o NPC irá contar toda a história. Acredito que seja o suficiente pra você criar seu NPC.
Postado Julho 15, 2016 8 anos Autor 2 minutos atrás, Kemmlly disse: Pelo que vi, você tentou fazer o NPC todo no XML, o ideal é usar o XML só para chamar o script do NPC e nesse script fazer o resto. Se o NPC for só de fala, você usa o elseif para cada fala e registra o talkState[talkUser] = para gravar a mensagem falada, exemplo; if (msgcontains(msg, 'sacrificio')) then talkState[talkUser] = 1 selfSay('Precisamos de sacrificios para manter os portais abertos e também o acesso as {quests}.', cid) elseif (msgcontains(msg, 'quest') and talkState[talkUser] == 1) then selfSay('Texto que o npc vai falar com {palavra} pra frase 2.', cid) talkState[talkUser] = 2 elseif (msgcontains(msg, 'palavra') and talkState[talkUser] == 2) then selfSay('Texto que o npc vai falar com {palavra} pra frase 3.', cid) talkState[talkUser] = 3 Nesse caso, se um player chegar no NPC e falar diretamente QUEST, como o talkState[talkUser] não é igual a 1 ainda, ele não falará nada, mas se falar as frases na ordem, o NPC irá contar toda a história. Acredito que seja o suficiente pra você criar seu NPC. É isso mesmo, muito obrigado pela ajuda! Atenciosamente, Felipe Lotz.
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.