Existem varios system de Task aki no Forum, alguns parecidos e iguais, cuidado.
- Fórum
- OTServ
- Recursos
- Scripting
- NPCs, monsters e raids
- [Pk] Npc Task System Para Poketibia
[Pk] Npc Task System Para Poketibia
Por GuhPk, 20 de out. de 2012 em NPCs, monsters e raids
info
Grupo: Visconde
Registrado: 22/07/12
Posts: 298
Reputação: +28
Char no Tibia: Lendreo

Editado Outubro 20 por Lendreo
info
Grupo: Campones
Registrado: 30/10/05
Posts: 27
Reputação: +3
Char no Tibia: Starvation

hmm interessante vlw ajudou muito
-- 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>
No meu não deu error nenhum, mas é melhor prevenir do que remediar neh!! xD
info
Grupo: Campones
Registrado: 28/11/12
Posts: 28
Reputação: 0

oque seria o storage id ... e como eu procuro isso no meu serv? ow eu posso colocar qualquer numero?
obrigado!
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!! =]
info
Grupo: Campones
Registrado: 28/11/12
Posts: 28
Reputação: 0

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..
info
Grupo: Visconde
Registrado: 18/01/13
Posts: 319
Reputação: +66
Gênero: Masculino

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
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 por Soulviling
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
Editado Novembro 14 por zipter98
info
Grupo: Visconde
Registrado: 18/01/13
Posts: 319
Reputação: +66
Gênero: Masculino

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!
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 por zipter98
info
Grupo: Visconde
Registrado: 18/01/13
Posts: 319
Reputação: +66
Gênero: Masculino

não deu certo, tenta colocar no script e manda todo, se for possível. Tentei fazer do meu jeito, deu errado.
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 por zipter98
info
Grupo: Visconde
Registrado: 18/01/13
Posts: 319
Reputação: +66
Gênero: Masculino

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'






info
Grupo: Conde
Registrado: 18/10/12
Posts: 757
Reputação: +111
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...
É 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 por GuhPk