GuhPk 111 Postado Outubro 20, 2012 Share Postado Outubro 20, 2012 (editado) Olá, eu sou GuhPk, e venho até vocês Xtibianos trazer 1 tutorial de como criar 1 npc task quest para poketibia server!!! ========================================================================================================================== 1º Passo - Copie 1 arquivo.xml da sua pasta data/npc e mude o nome para o nome que você, depois cole isso dentro dele: -- Script Npc Task BY GuhPk <?xml version="1.0" encoding="UTF-8"?> <npc name="Brender" script="default.lua" walkinterval="350000" floorchange="0" speed="0"> <health now="150" max="150"/> <look type="255" head="91" body="114" legs="86" feet="0"/> <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME|.Voce que fazer a {task} rapido!"/> </parameters> </npc> Azul = nome do script.lua que você vai colocar na pasta data/npc/script. Vermelho = nome do Npc. Verde = roupa do seu npc, vou ver se tem tópico explicando como fazer, se tiver eu posto aqui, se não eu crio aqui posto. http://www.xtibia.co...pcs-e-monstros/ ========================================================================================================================== 2º Passo - Agora vai em data/npc/script copia qualquer arquivo.lua de la coloca o nome que você quizer (este nome vai colocar onde esta de azul no script acima) e cola isso dentro: -- Script Npc Task By GuhPk local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {20} local focus = 0 local talk_start = 0 local target = 0 local following = false local attacking = false storage = x -- storage id item = x -- coloca aqui o id do item que vai ter que ir buscar quantiitem = x -- quantidade do item acima que precisa pegar premio1 = x -- coloque aqui o id do dinheiro quant1 = x -- quantidade de grana que vai ganhar pexp = x -- experiencia que vai ganhar no premio function msgcontains(txt, str) return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)')) end function onThingMove(creature, thing, oldpos, oldstackpos, item, itemEx) end function onCreatureAppear(creature) end function onCreatureDisappear(cid, pos) if focus == cid then selfSay('Tchau, e boa sorte.',cid) focus = 0 talk_start = 0 talkState[talkUser] = 0 end end function onCreatureTurn(creature) end function msgcontains(txt, str) return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)')) end function onCreatureSay(cid, type, msg) local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if getDistanceToCreature(cid) > 4 then return false end if talkState[talkUser] ~= 3 then msg = string.lower(msg) end if (msgcontains(msg, 'hi')) then if #getCreatureSummons(cid) >= 1 then selfSay('Porfavor, chame o pokemon para a pokebola...', cid) focus = 0 talkState[talkUser] = 1 return false end if getPlayerStorageValue(cid, 17001) == 1 then focus = 0 talkState[talkUser] = 1 selfSay('Saia do Ride.', cid) return false end if getPlayerStorageValue(cid, 7778) >= 1 then focus = 0 talkState[talkUser] = 1 selfSay('Você está usando alguma habilidade.', cid) return false end fala = "Hey, eu estou precisando urgentemente de x itens. Será que você poderia me ajudar?" selfSay(fala,cid) talkState[talkUser] = 1 elseif ( ( msgcontains(msg,"yes") or (msgcontains(msg,"sim") ) ) and talkState[talkUser] == 1 ) then quest1 = getPlayerStorageValue(cid,storage) if quest1 == 2 then selfSay('Cara, você já me ajudou!',cid) else if quest1 ==1 then selfSay('Bom! Então vc trouxe os meus itens? Deixe-me ver.',cid) if doPlayerRemoveItem(cid, item, quantiitem) == true then selfSay('Obrigado! Agora poderei fazer meu projeto. Aqui esta sua recompença!',cid) doPlayerAddItem(cid,premio1,quant1) doPlayerAddExp(cid,pexp) setPlayerStorageValue(cid,storage, 2) talkState[talkUser] = 0 else selfSay('Voce não trouxe os meus itens... Volte quando tive-los.',cid) talkState[talkUser] = 0 end else selfSay('Me traga os itens para o meu projeto.',cid) setPlayerStorageValue(cid,storage, 1) end end elseif(msgcontains(msg, 'no')) then talkState[talkUser] = 0 selfSay('Okay, obrigado mesmo assim.', cid) elseif(msgcontains(msg, 'bye')) then selfSay('Até mais!', cid) talkState[talkUser] = 0 end end function onCreatureChangeOutfit(creature) end Tudo oque marquei com este azulzinho são as falas do npc que você pode editar caso queira... Créditos: 70% = Eu - GuhPk 30% = Meu amigo - Kavin Karl É isso ai, esse é meu primeiro 'Tutorial'. Npc não fui eu que criei totalmente, meu amigo que me passou, então só coloquei créditos a mim e a ele por ter me explicado!!! Até a próxima pessoal, e fuiz!! GuhPk Editado Dezembro 18, 2012 por GuhPk Juuniiioor reagiu a isso 1 Link para o comentário Compartilhar em outros sites More sharing options...
Lendreo 28 Postado Outubro 20, 2012 Share Postado Outubro 20, 2012 (editado) Existem varios system de Task aki no Forum, alguns parecidos e iguais, cuidado. Editado Outubro 20, 2012 por Lendreo Link para o comentário Compartilhar em outros sites More sharing options...
leobr 3 Postado Dezembro 17, 2012 Share Postado Dezembro 17, 2012 hmm interessante vlw ajudou muito Link para o comentário Compartilhar em outros sites More sharing options...
Flavio97 5 Postado Dezembro 17, 2012 Share Postado Dezembro 17, 2012 -- Script Npc Task BY GuhPk <?xml version="1.0" encoding="UTF-8"?> <npc name="Brender" script="default.lua" walkinterval="350000" floorchange="0" speed="0"> <health now="150" max="150"/> <look type="255" head="91" body="114" legs="86" feet="0"/> No Meu Deu um erro mais ja arrumei aconselho a Usar esse <?xml version="1.0" encoding="UTF-8"?> <npc name="Miranda" script="task.lua" walkinterval="350000" floorchange="0" speed="0"> <health now="100" max="100"/> <look type="511" head="95" body="116" legs="121" feet="115" addons="0"/> <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME|.Voce que fazer a {task} rapido!"/> </parameters> </npc> Link para o comentário Compartilhar em outros sites More sharing options...
GuhPk 111 Postado Dezembro 18, 2012 Autor Share Postado Dezembro 18, 2012 No meu não deu error nenhum, mas é melhor prevenir do que remediar neh!! xD Link para o comentário Compartilhar em outros sites More sharing options...
projectone 0 Postado Janeiro 7, 2013 Share Postado Janeiro 7, 2013 oque seria o storage id ... e como eu procuro isso no meu serv? ow eu posso colocar qualquer numero? obrigado! Link para o comentário Compartilhar em outros sites More sharing options...
GuhPk 111 Postado Janeiro 8, 2013 Autor Share Postado Janeiro 8, 2013 oque seria o storage id ... e como eu procuro isso no meu serv? ow eu posso colocar qualquer numero? obrigado! Coloque um numero qualquer mesmo!! =] Link para o comentário Compartilhar em outros sites More sharing options...
projectone 0 Postado Março 22, 2013 Share Postado Março 22, 2013 teria como o npc dar 1 poke ao invez de dinheiro ow xp?? como eu colocaria para ele entregar um pokemon ... por exemplo player daria um old amber por 1 earodactyl.. Link para o comentário Compartilhar em outros sites More sharing options...
Soulviling 65 Postado Novembro 14, 2013 Share Postado Novembro 14, 2013 (editado) Se eu quiser colocar mais de 1 item com id diferente? storage = xxx-- storage id item = xxx -- coloca aqui o id do item que vai ter que ir buscar quantiitem =xxx -- quantidade do item acima que precisa pegar item1 = xxx -- coloca aqui o id do item que vai ter que ir buscar quantiitem1 =xxx -- quantidade do item acima que precisa pegar premio1 = xxxx -- coloque aqui o id do dinheiro quant1 = xxx -- quantidade de grana que vai ganhar pexp = xxx -- experiencia que vai ganhar no premio e boto assim? if quest1 ==1 then selfSay('Bom! Entao vc trouxe os meus itens? Deixe-me ver.',cid) if doPlayerRemoveItem(cid, item, quantiitem, item1, quantiitem1) == true then selfSay('Obrigado! Agora poderei terminar. Aqui esta sua recompenca!',cid) Tem como colocar uma animação de quando receber exp aparece subindo o valor, que nem no pxg. Abraço! Editado Novembro 14, 2013 por Soulviling Link para o comentário Compartilhar em outros sites More sharing options...
zipter98 1101 Postado Novembro 14, 2013 Share Postado Novembro 14, 2013 (editado) Sobre a animação, poderia ser um doSendAnimatedText(getThingPos(cid), pexp, 215) Dessa maneira, irá simular como se o player recebesse a exp normalmente. EDIT: Sobre remover mais de um item, faz tipo assim: local t = {need_items = {2160, 2159, 2158}, remove_items = {1, 2, 3}} g = t.need_items h = t.remove_items for i = 1, #g do if getPlayerItemCount(cid, g[i]) >= h[i] then doPlayerRemoveItem(cid, g[i], h[i]) else return doPlayerSendCancel(cid, "Você não tem os items necessários.") end end Na tabela, a posição dos valores da variável need_items deve ser igual à remove_items. Assim, como o ID 2160 está na posição 1 da variável need_items, irá ser removido apenas uma unidade desde item. (Perceba que na variável remove_items, o valor 1 está na posição 1; portanto, o valor que será retirado do item que se encontra na posição 1 da variável need_items é o valor que se encontra na posição 1 da variável remove_items). Do item que se encontra na posição 2, no caso, 2159, será removido 2 unidades. Já do 2158, 3 unidades. Editado Novembro 14, 2013 por zipter98 Link para o comentário Compartilhar em outros sites More sharing options...
Soulviling 65 Postado Novembro 14, 2013 Share Postado Novembro 14, 2013 a primeira parte deu certo, mas do item local t = {need_items = {2160, 2159, 2158}, remove_items = {1, 2, 3}} g = t.need_items h = t.remove_items for i = 1, #g do if getPlayerItemCount(cid, g[i]) >= h[i] then doPlayerRemoveItem(cid, g[i], h[i]) else return doPlayerSendCancel(cid, "Você não tem os items necessários.") end end if quest1 ==1 then selfSay('Bom! Entao vc trouxe os meus itens? Deixe-me ver.',cid) if doPlayerRemoveItem(cid, item, quantiitem) == true then selfSay('Obrigado! Agora poderei termina de concertar minha bicicleta. Aqui esta sua recompenca!',cid) doPlayerAddItem(cid,premio1,quant1) o script dele está com if não está compatível com o seu, mas vô ver se pego como base e edito aqui, obrigado! Link para o comentário Compartilhar em outros sites More sharing options...
zipter98 1101 Postado Novembro 14, 2013 Share Postado Novembro 14, 2013 (editado) Sobre essa parte, tenta assim: local t = {need_items = {2160, 2159, 2158}, remove_items = {1, 2, 3}} g = t.need_items h = t.remove_items if quest1 ==1 then selfSay('Bom! Entao vc trouxe os meus itens? Deixe-me ver.',cid) for i = 1, #g do if getPlayerItemCount(cid, g[i]) >= h[i] then doPlayerRemoveItem(cid, g[i], h[i]) selfSay('Obrigado! Agora poderei termina de concertar minha bicicleta. Aqui esta sua recompenca!',cid) doPlayerAddItem(cid, premio1, quant1) else selfSay("Você não possui os items requisitados.", cid) talkState[talkUser] = 0 end end Editado Novembro 14, 2013 por zipter98 Link para o comentário Compartilhar em outros sites More sharing options...
Soulviling 65 Postado Novembro 14, 2013 Share Postado Novembro 14, 2013 não deu certo, tenta colocar no script e manda todo, se for possível. Tentei fazer do meu jeito, deu errado. Link para o comentário Compartilhar em outros sites More sharing options...
zipter98 1101 Postado Novembro 14, 2013 Share Postado Novembro 14, 2013 (editado) Fiz esse NPC rapidinho aqui, qualquer erro, só postar. 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 storage = x -- storage id local local t = {need_items = {2160, 2159, 2158}, remove_items = {1, 2, 3}} local g = t.need_items local h = t.remove_items premio1 = x -- coloque aqui o id do dinheiro quant1 = x -- quantidade de grana que vai ganhar pexp = x -- experiencia que vai ganhar no premio if msgcontains(msg, 'mission') or msgcontains(msg, 'help') then selfSay("Você gostaria de me ajudar numa missão?", cid) doPlayerSendTextMessage(cid, 27, "Say yes or no.") talkState[talkUser] = 1 return true elseif msgcontains(msg 'yes') and talkState[talkUser] == 1 then if getPlayerStorageValue(cid, storage) < 1 then selfSay("Certo, vá pegar x qnt de x items!", cid) setPlayerStorageValue(cid, 222011, 1) doPlayerSendTextMessage(cid, 27, "If you alreay have the items, say complete.") talkState[talkUser] = 2 return true else selfSay("Você já me ajudou.", cid) talkState[talkUser] = 0 return true end elseif msgcontains(msg, 'no') and talkState[talkUser] == 1 then selfSay("Ok então...", cid) talkState[talkUser] = 0 return true elseif msgcontains(msg, 'complete') and (talkState[talkUser] == 2 or getPlayerStorageValue(cid, 222011) >= 1) then for i = 1, #g do if getPlayerItemCount(cid, g[i]) >= h[i] then doPlayerRemoveItem(cid, g[i], h[i]) selfSay("Obrigado! Aqui está seu prêmio.", cid) doPlayerAddItem(cid, premio1, quant1) setPlayerStorageValue(cid, storage, 1) setPlayerStorageValue(cid, 222011, -1) talkState[talkUser] = 0 return true else selfSay("Você não possui os items requisitados.", cid) talkState[talkUser] = 0 return true end end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Editado Novembro 14, 2013 por zipter98 Link para o comentário Compartilhar em outros sites More sharing options...
Soulviling 65 Postado Novembro 14, 2013 Share Postado Novembro 14, 2013 o erro: [14/11/2013 18:38:52] [Error - LuaScriptInterface::loadFile] data/npc/scripts/task.lua:17: '<name>' expected near 'local' [14/11/2013 18:38:52] [Warning - NpcScript::NpcScript] Cannot load script: data/npc/scripts/task.lua [14/11/2013 18:38:52] data/npc/scripts/task.lua:17: '<name>' expected near 'local' Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados