[Pk] Npc Task System Para Poketibia

GuhPk
Por GuhPk
em NPCs, monsters e raids
  • 1
  • 2

GuhPk

Rep+ ai se ajudei? asusah'
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 18/10/12Posts: 757

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 -
G
uhP
k

30%
= Meu amigo -
K
avin
K
arl

 

 

 

 

 

É 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

Oi, eu sou o GuhPk!

Quer ver meus trabalhinhos e outras coisas? Só clicar aqui !!!

Olha meu ShowOff do Mapa de OtPokemon aqui. Caso tenha uma dúvida ou dica comenta lá!

 

Aprendendo mais... Sempre mais...

Lendreo

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 22/07/12Posts: 298Char no Tibia: Lendreo

Existem varios system de Task aki no Forum, alguns parecidos e iguais, cuidado.

leobr

SlAyErS
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 30/10/05Posts: 27Char no Tibia: Starvation

hmm interessante vlw ajudou muito

 

Flavio97

Cavaleiro
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/11/12Posts: 43

-- 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>

 

GOSTOU REP ++



 

 

wJ5nj.gif

 

 

noflooduf34cyvi5.gif

projectone

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 28/11/12Posts: 28

oque seria o storage id ... e como eu procuro isso no meu serv? ow eu posso colocar qualquer numero?

obrigado!

projectone

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 28/11/12Posts: 28

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..

Soulviling

facebook.com/hpokemon
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 19/01/13Posts: 319Gê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
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!

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

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.

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

Soulviling

facebook.com/hpokemon
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 19/01/13Posts: 319Gê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!

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

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

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

Soulviling

facebook.com/hpokemon
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 19/01/13Posts: 319Gênero: Masculino

não deu certo, tenta colocar no script e manda todo, se for possível. Tentei fazer do meu jeito, deu errado.

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

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())

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

Soulviling

facebook.com/hpokemon
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 19/01/13Posts: 319Gê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'
  • 1
  • 2