Postado Junho 6, 2017 8 anos 3 NPC's com storage, onde o: 1º NPC vai executar uma missão de eliminar um boss, e dará ("quant x" de XP) e ("x" Item com uma action vinculada para o próximo NPC); 2º NPC só ira responder o player caso a missão do 1º NPC tenha sido totalmente concluída, caso a missão tenha sido finalizada, o 2º NPC irá exigir o ("x" ITEM) que o 1º NPC deu; Recompensa: Otfit exclusiva; 3º NPC só ira responder o player caso a missão do 1º NPC e do 2º NPC tenha sido concluído, caso sim, dará uma missão de executar 6 monstros diferentes, 300 de cada; Recompensa: (XP) e (ITEM). OBS: Cada item deverá ter uma action ou storage vinculada com a missão. Não sei se é necessário. Obrigado pela ajuda Editado Junho 7, 2017 8 anos por martimtiburcio (veja o histórico de edições)
Postado Junho 8, 2017 8 anos NPC1: <?xml version="1.0" encoding="UTF-8"?> <npc name="Npc um" script="NPC1.lua" walkinterval="2000" floorchange="0"> <health now="150" max="150"/> <look type="139" head="132" body="79" legs="97" feet="132" corpse="2212"/> <parameters> <parameter key="message_greet" value="Olá, |PLAYERNAME|. Você quer me {ajudar}? Eu posso te recompensar..."/> </parameters> </npc> 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, 'ajudar')) then selfSay('Você pode me ajudar? Preciso que mate um {boss} para mim e assim eu lhe darei uma recompensa!', cid) end --------------------------------------------------------- if(msgcontains(msg, 'boss')) then if (getPlayerStorageValue(cid,15001) == -1) then selfSay('Mate o boss e eu irei te recompensar!', cid) doTeleportThing(cid,{x=160, y=54, z=7}) elseif (getPlayerStorageValue(cid,15001) == 1) then selfSay('Você já matou o boss!', cid) end return true end --------------------------------------------------------- if(msgcontains(msg, 'recompensa')) then if (getPlayerStorageValue(cid,15001) == -1) then selfSay('Você ainda não matou o boss!', cid) elseif (getPlayerStorageValue(cid,15001) == 1) then local itemr = doPlayerAddItem(cid, 4863, 1) doSetItemActionId(itemr, 10213) selfSay('Parabéns, aqui está sua recompensa!', cid) end return true end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Agora vai em creaturescripts/scripts, crie um arquivo com o nome de boss e adicione: function onKill(cid, target, lastHit) if(isMonster(cid)) and getCreatureName(cid) == "NOMEDOBOSS") then setPlayerStorageValue(lastHit, 15001, 1) doTeleportThing(lastHit,{x=POS DO NPC, y=POS DO NPC, z=POS DO NPC}) end return true end Em creaturescripts.xml adicione a tag: <event type="kill" name="BossKill" event="script" value="boss.lua"/> Em login.lua adicione: registerCreatureEvent(cid, "BossKill") NPC2: <?xml version="1.0" encoding="UTF-8"?> <npc name="Npc dois" script="NPC2.lua" walkinterval="2000" floorchange="0"> <health now="150" max="150"/> <look type="139" head="132" body="79" legs="97" feet="132" corpse="2212"/> <parameters> <parameter key="message_greet" value="Olá, |PLAYERNAME|!"/> </parameters> </npc> 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 itemRemove = 105 -- Item que irár "perder" local Outfits = { ["citizen"]={136} } function Remove(cid) if doPlayerRemoveItem(cid,itemRemove, 1) then if(getPlayerSex(cid) == 0)then doPlayerAddOutfit(cid, Outfits[param][1], 3) selfSay("Parabéns, você ganhou um novo outfit!", cid) talkState[talkUser] = 0 else doPlayerPopupFYI(cid, "Você não pode receber o outfit, pois está faltando o item!") return false end end end if getPlayerStorageValue(cid, 15001) == -1 then selfSay("Fale com o outro NPC e volte depois!!") talkState[talkUser] = 0 elseif (msgcontains(msg, 'mission')) then selfSay("Você quer receber seu outfit?") talkState[talkUser] = 1 elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1) then if Remove(cid) then elseif msg == "no" and talkState[talkUser] >= 1 then selfSay("Bye!", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end return TRUE end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) O NPC3 vou tentar fazer e posto aqui. Testa esses e me diz se funcionou. Editado Junho 8, 2017 8 anos por PsyMcKenzie (veja o histórico de edições)
Postado Junho 8, 2017 8 anos Autor Bom dia, até então ocorreu tudo bem com exceção deste trecho: Citar [08/06/2017 09:36:02] [Error - LuaScriptInterface::loadFile] data/creaturescripts/scripts/boss.lua:3: 'then' expected near ')' [08/06/2017 09:36:02] [Warning - Event::loadScript] Cannot load script (data/creaturescripts/scripts/boss.lua) [08/06/2017 09:36:02] data/creaturescripts/scripts/boss.lua:3: 'then' expected near ')' O restante não acusou quando inicio o servidor, mas só posso testar o segundo NPC se o primeiro estiver totalmente ok.
Postado Junho 8, 2017 8 anos function onKill(cid, target, lastHit) if(isMonster(cid)) and (getCreatureName(cid) == "NOMEDOBOSS") then setPlayerStorageValue(lastHit, 15001, 1) doTeleportThing(lastHit,{x=POS DO NPC, y=POS DO NPC, z=POS DO NPC}) end return true end Opa, faltou um "(" aqui, tenta agora.
Postado Junho 8, 2017 8 anos Autor Ótimo, o erro anterior foi reparado, a distro não o acusa mais, agora acontece o seguinte, eu pego a missão, sou teleportado, elimino o boss, mas na hora de entregar a missão o NPC não reconhece, ele simplesmente me oferece a missão novamente como se eu nem tivesse falado com ele. valeu...
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.