GL
action

Easy Quest System

Por gledsonrt, 01 de set. de 2012 em Actions e Talkactions

script
otserv
6
1.8k
gledsonrtG
01 de setembro de 2012 às 02:10

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

2 semanas depois...
7509707
08 de setembro de 2012 às 03:13

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

e nao todos?

09 de setembro de 2012 às 14:23

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 Setembro 9 por Domis

3 semanas depois...
soldoranS
25 de setembro de 2012 às 04:04

eu tentei aqui mas na hora de tentar abrir o bau nao abre nada :/

1 mês depois...
victormoazV
17 de outubro de 2012 às 14:29

[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 Outubro 17 por BobStriker

SkymagnumS
17 de outubro de 2012 às 15:24
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