Postado Setembro 21, 2019 5 anos 0.4 Boa tarde povo, eu tenho um script de npc de task. Voce mata certo bicho, e volta pra ele e ele te da uma recompensa. Eu queria que quando voce fosse entregar a task, ele te desse um premio de acordo com sua vocação, somente entre 2. Se voce fosse sorcerer, ele te daria x item, se fosse druid, y item. Script do NPC: Citar local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} local quest = 22542 local reward = 70000 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) local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if(not npcHandler:isFocused(cid)) then return false elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then npcHandler:say("", cid) talkState[talkUser] = 2 elseif msgcontains(msg, "yes") and talkState[talkUser] == 2 then npcHandler:say("", cid) setPlayerStorageValue(cid, quest, 2) talkState[talkUser] = 0 elseif msgcontains(msg, "aceitar") then local str = getPlayerStorageValue(cid, quest) if(str < 2) then npcHandler:say("", cid) talkState[talkUser] = 1 return true elseif(str == 2) then npcHandler:say("", cid) elseif(str == 3) then npcHandler:say(".", cid) doPlayerAddExp(cid, 50000) setPlayerStorageValue(cid, quest, 4) elseif(str == 4) then npcHandler:say("", cid) end talkState[talkUser] = 0 end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
Postado Setembro 24, 2019 5 anos Sou leigo na programação mas vou te dar uma solução pra você resolver seu problema. Cria uma sala de recompensa com uma porta e coloca no uniqueid = 14799 (da porta) e coloque o uniqueid = 14798 no bau Mude o seu script para o script abaixo: (mudei o storage para o player ganhar um storage para entrar na porta) Citar local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} local quest = 22542 local reward = 70000 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) local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if(not npcHandler:isFocused(cid)) then return false elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then npcHandler:say("", cid) talkState[talkUser] = 2 elseif msgcontains(msg, "yes") and talkState[talkUser] == 2 then npcHandler:say("", cid) setPlayerStorageValue(cid, quest, 2) talkState[talkUser] = 0 elseif msgcontains(msg, "aceitar") then local str = getPlayerStorageValue(cid, quest) if(str < 2) then npcHandler:say("", cid) talkState[talkUser] = 1 return true elseif(str == 2) then npcHandler:say("", cid) elseif(str == 3) then npcHandler:say(".", cid) doPlayerAddExp(cid, 50000) setPlayerStorageValue(cid, 14799) elseif(str == 4) then npcHandler:say("", cid) end talkState[talkUser] = 0 end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Em actions.xml Citar <action uniqueid="14798" script="chestvoc.lua" / Na pasta scripts de action Crie um arquivo chamado chestvoc.lua e cole isso abaixo: OBS: em (ID DO ITEM SE FOR...) voce coloca o ID do item que cada vocação vai receber Citar -- ITEM if item.uid == 14798 thenplayervoc = getPlayerVocation(cid)queststatus = getPlayerStorageValue(cid,14798)if queststatus == -1 thenif playervoc == 1 thendoPlayerSendTextMessage(cid,22,"Você achou um ITEM")doPlayerAddItem(cid,ID DO ITEM SE FOR SORC,1)setPlayerStorageValue(cid,14798,1)elseif playervoc == 2 thendoPlayerSendTextMessage(cid,22,"Você achou um ITEM")doPlayerAddItem(cid,ID DO ITEM SE FOR DRUID,1)setPlayerStorageValue(cid,14798,1)elseif playervoc == 3 thendoPlayerSendTextMessage(cid,22,"Você achou um ITEM")doPlayerAddItem(cid,ID DO ITEM SE FOR PALLY,1)setPlayerStorageValue(cid,14798,1)elseif playervoc == 4 thendoPlayerSendTextMessage(cid,22,"Você achou um ITEM")doPlayerAddItem(cid,ID DO ITEM SE FOR KINA,1)setPlayerStorageValue(cid,14798,1)endelsedoPlayerSendTextMessage(cid,22,"Está vazio!")endreturn 1end Explicando: Em vez do npc presentear o npc, ele vai ganhar um storage para abrir a porta dentro da sala vai ter um baú que vai dar items conforme cada vocação. Bom qualquer coisa me fale se deu certo ou errado, poste prints de erro caso de. ABRAÇOS!
Postado Setembro 25, 2019 5 anos Autor @Cricket Olá, vlw por responder. Eu ja tinha pensado nisso, mas como serão varios npc de quest em uma area relativamente pequena, não é possivel criar uma sala pra cada um para dar as recompensas, queria que o proprio npc conseguisse distinguir quem é quem e dar a recompensa apropriada
Postado Setembro 25, 2019 5 anos Então você pode colocar 1 unica sala de recompensas com os baus e em vez da porta colocar um teleport para essa sala ? Agora criar um NPC vai dar mais trabalho... só se algum programador mesmo pegar seu script e refazer ele da forma que você quer... Bom tentei ajudar
Postado Setembro 25, 2019 5 anos Autor @Cricket Sim, poderia fazer isso, mas quebraria o rpg do jogo, sabe? Mas vlw pelas dicas cara
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.