Ir para conteúdo

[Pk] Npc Task System Para Poketibia


GuhPk

Posts Recomendados

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

Editado por GuhPk
Link para o comentário
Compartilhar em outros sites

  • 1 month later...

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

  • 3 weeks later...

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

  • 2 months later...
  • 7 months later...

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 por Soulviling
Link para o comentário
Compartilhar em outros sites

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 por zipter98
Link para o comentário
Compartilhar em outros sites

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

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 por zipter98
Link para o comentário
Compartilhar em outros sites

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 por zipter98
Link para o comentário
Compartilhar em outros sites

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

×
×
  • Criar Novo...