Ir para conteúdo
  • Cadastre-se

[Pedido] Adicionar quest de drop no comando !task


Posts Recomendados

Faaala ae galera do TK

Tudo blz?

 

Bom o meu pedido hoje é uma adição a um comando que já possuo em meu servidor.

Ele funciona da seguinte forma.

 

!task npcs (Ele me mostrará qual os npcs que tenho quests pendentes)

!task [nome do npc] (Ele me mostra o nome, objetivo, local e recompensa da quest)

 

Porém, ele só me mostra as quests que são de kill.

E eu as configuro da seguinte forma.

 

Primeiramente, script do npc.

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 task = {
["Junior"] = {{"Pidgey", 20}, {"Rattata", 15}},
}

if msgcontains(msg, 'quest') or msgcontains(msg, 'Quest') then
if isMyTaskComplete(cid, getNpcCid()) then
selfSay("Voce e um bravo treinador! Agora esta pronto para seguir sua jornada, use esta berry quando seu pokemon inicial alcancar o level 15!", cid)
doPlayerAddItem(cid, 11448, 1) --premio
local sto = getMyTaskSto(cid, getNpcCid())
setPlayerStorageValue(cid, sto, -1)
talkState[talkUser] = 0
return true
else
selfSay("Hehe e oque vejo e verdade, seu pokemon esta realmente sem coragem para evoluir, eu tenho uma berry que aumenta a coragem dele. Mas voce precisa me provar que a merece. Derrote {20 Pidgeys e 15 Rattatas}, voce aceita este desafio?", cid)
talkState[talkUser] = 2
end
elseif (msgcontains(msg, 'sim') or msgcontains(msg, 'Sim')) and talkState[talkUser] == 2 then
if getMyTaskSto(cid, getNpcCid()) ~= -1 then
selfSay("Voce ja esta fazendo o meu desafio! va termina-lo!", cid)
talkState[talkUser] = 0
return true
end
local sto = getFreeTaskStorage(cid)
if sto == -1 then
selfSay("Voce nao pode pegar mais quests! sua lista de tarefas esta lotada com "..(maxTasks).." quests!", cid)
talkState[talkUser] = 0
return true
end

selfSay("Okay entao... Va e faca o seu melhor!", cid)
setStorageArray(cid, sto, task)
talkState[talkUser] = 0
return true
end

return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

 

E depois vou na seguinte linha no meu arquivo configuration.lua na pasta lib, e adiciono as informações que aparecerão no comando !task [nome do npc]

 

Que é assim:

----------------------- TASK SYSTEM ------------------------


maxTasks = 30 --numero maximo de tasks q um player pode ter simultaniamente... aconcelho 30~40maximo!
---
npcsTask = { --["npc name"] = {"city do npc", "task", "reward"},
["Junior"] = {"Pallet Town", "Treinador de coragem", "Courage Berry"},
---

 

 

Daí então fica tudo certinho e aparece tudo de boas no game.

Contudo, meu servidor possui muito rpg, sendo assim, muitas quests.

E as quests de drop(loot) não aparecem neste sistema, e seria muito bacana aparecer também pra facilitar a vida dos players.

 

Aqui está o script do npc que da uma quest de drop.

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 stg = 17760 -- storage para falar com o npc
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

if msgcontains(msg, 'quest') then
if getPlayerStorageValue(cid, stg) >= 12191 then
selfSay("Desculpe, mas voce ja fez a minha quest!!", cid)
talkState[talkUser] = 0
else
selfSay("Eu estava procurando Pokemon's insetos, mas a minha isca acabou... Voce pode trazer 30 Folhas I para mim?", cid)
talkState[talkUser] = 1
end
end
---------------------------------------------------------
if (msgcontains(msg, "yes") or msgcontains(msg, "sim")) and talkState[talkUser] == 1 then
if doPlayerRemoveItem(cid, 26596, 30) == TRUE then
selfSay("Obrigado. Hey voce pode ser um otimo Bug Catcher, procure meus irmaos!", cid)
setPlayerStorageValue(cid, stg, 12191) -- para ele nao fazer a missao novamente
doPlayerAddExperience(cid,15000) -- experiencia
local bags = getPlayerSlotItem(cid, 3)
doAddContainerItem(bags.uid, 26479, 1) -- Caterpie egg
doAddContainerItem(bags.uid, 26480, 1) -- Weedle egg
else
selfSay("Seja rapido, me traga logo essas folhas !.", cid)
talkState[talkUser] = 0
end
elseif (msgcontains(msg, "no") or msgcontains(msg, "nao")) and talkState[talkUser] == 1 then
selfSay("Entao saia daqui", cid)
talkState[talkUser] = 0
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

E aqui o script do comando !task

 

function onSay(cid, words, param)



if param == '' then
sendMsgToPlayer(cid, 20, "Param required.\n!task [name npc] ou !task npcs")
return true
end

if param == "npcs" or param == "Npcs" then
local str = "Name of npcs of task: \n\n"
local send = false
for i = 91001, (91000+maxTasks) do
if getPlayerStorageValue(cid, i) ~= -1 and tostring(getPlayerStorageValue(cid, i)) then
local array = getArrayFromStorage(cid, i)
if arrayHasContent(array) then
for e, f in pairs(array) do
local j = e
if string.find(e, "Trainer") then
if getPlayerStorageValue(cid, 854789) == 5 then
j = j.."_1"
elseif getPlayerStorageValue(cid, 854789) == 7 then
j = j.."_2"
end
end
if npcsTask[j] then
str = str..e.."\n"
send = true
end
end
end
end
end
if send then
doShowTextDialog(cid, 2395, str)
else
doShowTextDialog(cid, 2395, "Voce nao tem nenhuma quest!")
end
return true
end

local npc = doCorrectString(tostring(param))
local npc2 = npc
local sto = getMyTaskSto(cid, npc)
local str = "Name: "..npc..".\n"

if npcsTask[npc.."_1"] then
if getPlayerStorageValue(cid, 854789) == 5 then
npc2 = npc2.."_1"
elseif getPlayerStorageValue(cid, 854789) == 7 then
npc2 = npc2.."_2"
end
end

if sto == -1 or not npcsTask[npc2] then
doShowTextDialog(cid, 2395, "Voce nao tem quest deste npc!")
return true
end

if isMyTaskComplete(cid, npc) then
str = str.."Task: "..npcsTask[npc2][2]..".\n"
str = str.."Status: Completa.\n"
str = str.."Local: "..npcsTask[npc2][1]..".\n"
str = str.."Recompenca: "..npcsTask[npc2][3].."."
else
str = str.."Task: "..npcsTask[npc2][2]..".\n"
str = str.."Status: Pendente.\n"
str = str.."Derrote: "..getStingOfTask(cid, npc)
str = str.."Local: "..npcsTask[npc2][1]..".\n"
str = str.."Recompenca: "..npcsTask[npc2][3].."."
end
doShowTextDialog(cid, 2395, str)
return true
end

 

Abaixo vou deixar uma imagem pra mostrar como o sistema funciona com o kill.

E como eu queria que funcionasse com os drops( A imagem de drop é monstagem)

 

Meu servidor é PDA 8.54 base Gabrieltxu, se precisar de mais infos é só me solicitar, obrigado desde já Rep+

post-74390-0-44980100-1431047097_thumb.p

post-74390-0-50836800-1431047099_thumb.p

Link para o post
Compartilhar em outros sites

NPC:

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 stg = 17760 -- storage para falar com o npc
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

if msgcontains(msg, 'quest') then
if getPlayerStorageValue(cid, stg) >= 12191 then
selfSay("Desculpe, mas voce ja fez a minha quest!!", cid)
talkState[talkUser] = 0
else

setPlayerStorageValue(cid, 7372, 1)
selfSay("Eu estava procurando Pokemon's insetos, mas a minha isca acabou... Voce pode trazer 30 Folhas I para mim?", cid)
talkState[talkUser] = 1
end
end
---------------------------------------------------------
if (msgcontains(msg, "yes") or msgcontains(msg, "sim")) and talkState[talkUser] == 1 then
if doPlayerRemoveItem(cid, 26596, 30) == TRUE then
selfSay("Obrigado. Hey voce pode ser um otimo Bug Catcher, procure meus irmaos!", cid)
setPlayerStorageValue(cid, stg, 12191) -- para ele nao fazer a missao novamente
doPlayerAddExperience(cid,15000) -- experiencia
local bags = getPlayerSlotItem(cid, 3)
doAddContainerItem(bags.uid, 26479, 1) -- Caterpie egg
doAddContainerItem(bags.uid, 26480, 1) -- Weedle egg
else
selfSay("Seja rapido, me traga logo essas folhas !.", cid)
talkState[talkUser] = 0
end
elseif (msgcontains(msg, "no") or msgcontains(msg, "nao")) and talkState[talkUser] == 1 then
selfSay("Entao saia daqui", cid)
talkState[talkUser] = 0
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Script do comando

function onSay(cid, words, param)
if param == '' then
sendMsgToPlayer(cid, 20, "Param required.\n!task [name npc] ou !task npcs or !task others")
return true
end
 
if param == "others" then
if getPlayerStorageValue(cid, 7372) < 1 then
doShowTextDialog(cid, 2395, "Voce nao possui nenhuma task dessa area, pegue com o npc.")
return true
end
if getPlayerItem(cid, 26596) >= 30 then
local str = "Drop Task: \n\n"
str = str.."Task: Drop Task.\n"
str = str.."Status: Completa.\n"
str = str.."Recompenca: Poke egg\n."
else
str = str.."Task: Drop Task.\n"
str = str.."Status: Incompleta.\n"
str = str.."Recompenca: Poke egg\n."
end
doShowTextDialog(cid, 2395, str)
return true
end
 
if param == "npcs" or param == "Npcs" then
local str = "Name of npcs of task: \n\n"
local send = false
for i = 91001, (91000+maxTasks) do
if getPlayerStorageValue(cid, i) ~= -1 and tostring(getPlayerStorageValue(cid, i)) then
local array = getArrayFromStorage(cid, i)
if arrayHasContent(array) then
for e, f in pairs(array) do
local j = e
if string.find(e, "Trainer") then
if getPlayerStorageValue(cid, 854789) == 5 then
j = j.."_1"
elseif getPlayerStorageValue(cid, 854789) == 7 then
j = j.."_2"
end
end
if npcsTask[j] then
str = str..e.."\n"
send = true
end
end
end
end
end
if send then
doShowTextDialog(cid, 2395, str)
else
doShowTextDialog(cid, 2395, "Voce nao tem nenhuma quest!")
end
return true
end
 
local npc = doCorrectString(tostring(param))
local npc2 = npc
local sto = getMyTaskSto(cid, npc)
local str = "Name: "..npc..".\n"
 
if npcsTask[npc.."_1"] then
if getPlayerStorageValue(cid, 854789) == 5 then
npc2 = npc2.."_1"
elseif getPlayerStorageValue(cid, 854789) == 7 then
npc2 = npc2.."_2"
end
end
 
if sto == -1 or not npcsTask[npc2] then
doShowTextDialog(cid, 2395, "Voce nao tem quest deste npc!")
return true
end
 
if isMyTaskComplete(cid, npc) then
str = str.."Task: "..npcsTask[npc2][2]..".\n"
str = str.."Status: Completa.\n"
str = str.."Local: "..npcsTask[npc2][1]..".\n"
str = str.."Recompenca: "..npcsTask[npc2][3].."."
else
str = str.."Task: "..npcsTask[npc2][2]..".\n"
str = str.."Status: Pendente.\n"
str = str.."Derrote: "..getStingOfTask(cid, npc)
str = str.."Local: "..npcsTask[npc2][1]..".\n"
str = str.."Recompenca: "..npcsTask[npc2][3].."."
end
doShowTextDialog(cid, 2395, str)
return true
end

qual comando usar ?? !task others

Ando devagar, porque já tive pressa. E levo esse sorriso, porque já chorei demais...

________________________________________________________________________________

Minhas Sprites:

Mega Metagross

Mega Abomasnow

Pack de Shinys

[Posso atualizá-lo com novos shinys a qualquer momento]

Tutoriais:

[Completo] Criando e adicionando um novo Pokémon

[Actions] Criando quest no RME

Editores Lua/Xml/Sync Entre outros:

Editores Win/Mac/Linux

Link para o post
Compartilhar em outros sites
if param == "others" then
if getPlayerStorageValue(cid, 7372) < 1 then --storage que adicionei no npc para checar se ele falou com o npc.
doShowTextDialog(cid, 2395, "Voce nao possui nenhuma task dessa area, pegue com o npc.")
return true
end
if getPlayerItem(cid, 26596) >= 30 then --Item que conta se a task foi completa
local str = "Drop Task: \n\n"
str = str.."Task: Drop Task.\n"
str = str.."Status: Completa.\n"
str = str.."Recompenca: Poke egg\n."
else   --se não estiver completa:
str = str.."Task: Drop Task.\n"
str = str.."Status: Incompleta.\n"
str = str.."Recompenca: Poke egg\n."
end
doShowTextDialog(cid, 2395, str)
return true
end

Vinicius como eu a configuro?

Porque eu coloquei aqui e nada houve.

Não entendi esse "nada houve" se for o caso do comando use: !task others

Ando devagar, porque já tive pressa. E levo esse sorriso, porque já chorei demais...

________________________________________________________________________________

Minhas Sprites:

Mega Metagross

Mega Abomasnow

Pack de Shinys

[Posso atualizá-lo com novos shinys a qualquer momento]

Tutoriais:

[Completo] Criando e adicionando um novo Pokémon

[Actions] Criando quest no RME

Editores Lua/Xml/Sync Entre outros:

Editores Win/Mac/Linux

Link para o post
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo