Ir para conteúdo

Easy Quest System


gledsonrt

Posts Recomendados

Olá galera!

 

Montei esse script para meu OTServ, e achei que poderia ser de utilidade pública, então resolvi postar aqui!

Ele funciona para quests simples, onde o player clica em um baú e recebe um item!

 

E você deve estar se perguntando: "Ok, todos sabem fazer uma quest, qual a vantagem?

 

A vantagem é: você só usará este script para TODAS as quests do seu server!

 

Adicione em data/actions/actions.xml:

<action actionid="5000" script="quest.lua"/>

 

Crie um arquivo em data/actions/scripts com o nome 'quest.lua', e adicione:

function onUse(cid, item, frompos, item2, topos)
queststatus = getPlayerStorageValue(cid, item.uid)
if queststatus == -1 or queststatus == 0 then
 qitem = getContainerItem(item.uid, 0)
 if getPlayerFreeCap(cid) > getItemWeight(qitem.uid) then
  doPlayerSendTextMessage(cid, 22, "You have found a "..getItemName(qitem.itemid)..".")
  doPlayerAddItem(cid, qitem.itemid)
  setPlayerStorageValue(cid, item.uid, 1)
 else
  doPlayerSendTextMessage(cid, 24, "You don't have enought capacity.")
 end
else
 doPlayerSendTextMessage(cid, 22, "The chest is empty.")
end
return 1
end

 

Funciona assim:

 

1) Adicione no seu map editor um baú, e nas opções dele, coloque:

Action ID: 5000

Unique ID: O que você desejar, porém não pode se repetir com outra quest.

E adicione o prêmio da quest no baú. No meu caso, uma DSM.

 

Veja o exemplo:

 

quest10.png

 

O player clicará no baú e ganhará uma DSM.

 

A vantagem é: caso você queira fazer outra quest, baita adicionar outro baú, com Action ID 5000, Unique ID qualquer, e com o prêmio da quest dentro.

Um único script funciona para todas as quests!

 

Espero que gostem!

 

Kaul OTServ:GOD

gledsonrt

Link para o comentário
Compartilhar em outros sites

e se a quest tiver varios itens, como colocaria, para o tal player pegar só 1 item?

e nao todos?

 

vc teria que fazer varios chests com os itens diferente mais com o mesmo action id/unique id, para que ele possa pegar apenas 1.

eu acho que é isso, espero ter ajudado.

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

  • 3 weeks later...
  • 4 weeks later...

[17/10/2012 14:26:35] [Error - Action Interface]
[17/10/2012 14:26:35] data/actions/scripts/quests/quest.lua:onUse
[17/10/2012 14:26:36] Description:
[17/10/2012 14:26:36] (luaGetThing) Thing not found
[17/10/2012 14:26:36] [Error - Action Interface]
[17/10/2012 14:26:36] data/actions/scripts/quests/quest.lua:onUse
[17/10/2012 14:26:36] Description:
[17/10/2012 14:26:36] data/lib/050-function.lua:239: attempt to index a boolean value
[17/10/2012 14:26:36] stack traceback:
[17/10/2012 14:26:36]  data/lib/050-function.lua:239: in function 'getItemName'
[17/10/2012 14:26:36]  data/actions/scripts/quests/quest.lua:6: in function <data/actions/scripts/quests/quest.lua:1

 

apareceu esse erro p mim

--EDIT-------------------------

Ja resolvi...

 

teria como adicionar uma quantidade de item para receber?

Tipo, se for gold o premio, uma certa quantidade tipo 30 gold.

Pelo seu script so adiciona 1, mesmo que coloque count 30 pelo map editor.

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

function onUse(cid, item)

if getPlayerStorageValue(cid, STORAGE_DA_QUEST) > 0 then
   return doPlayerSendCancel(cid, "Chest is empty.")
       end
         if getPlayerFreeCap(cid) < getItemWeight(ITEM_A_GANHAR) then
    return doPlayerSendCancel(cid, "You don't have capacity.")
end


return doPlayerAddItem(cid, ITEM_A_GANHAR, 1) and doPlayerSendTextMessage(cid, 27, "You win a " .. getItemNameById(ITEM_A_GANHAR) .. ", congrutulations.")
end

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...