Ir para conteúdo
Faça parte da equipe! (2024) ×
Conheça nossa Beta Zone! Novas áreas a caminho! ×
  • Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.

Full tutorial de quests


Isonix
 Compartilhar

Posts Recomendados

Olá pessoal, estou vendo muitos servers com apenas quest simples, ou seja:

tem um monstro, e atras um baú.

e quests exageradas:

Tem mil Demons, Cem Ferumbras, 50 Orshas e dps um baú...

tem alguns que nem Anihi tem...

Chega disso!

Ai vai um Tutorial ensinando a fazer quest boas, npcs de quest e etc...

 

Vamos come´ar ensinando uma Quest Simples ( que pode servir de base para mais coisas basta usar a criatividade...)

 

Vou dar de exemplo uma Quest Simples de um Present box:

Adicione isto na pasta Script que fica nas actions.

 

Cita´ão:

function onUse(cid, item, frompos, item2, topos)

if item.uid == 1111 then

queststatus = getPlayerStorageValue(cid,1234)

if queststatus == -1 or queststatus == 0 then

doPlayerSendTextMessage(cid,22,"You have found a Present Box")

item_uid = doPlayerAddItem(cid,1990,1)

setPlayerStorageValue(cid,1234,1)

else

doPlayerSendTextMessage(cid,22,"Empty.")

end

else

return 0

end

return 1

end

 

 

Explicando: if item.uid == 1111 then este eh o Unique Id da quest ( Unique Id eh um id unico do Baú ou qualquer item q vai ser onde voce vai receber o item... lembrando Unique Id eh um Id UNICO nao pode haver outra quest com o msm id! )

 

queststatus = getPlayerStorageValue(cid,1234) Este eh o Storage Value, ele serve para o Player só pegar o Item uma vez, se ele tentar pegar dnovo vai dar "This Chest is Empty"

 

item_uid = doPlayerAddItem(cid,1990,1) Id do item, e quantidade.

 

doPlayerSendTextMessage(cid,22,"Empty.") Está eh a msg q ira aparecer se o player tentar pegar dnovo o item ( voce pode colocar como quizer!

 

Agora voce vai ir nos Actions.xml e adiciona isto:

 

<action uniqueid="1111" script="exemplo.lua" /> Ai fica a Unique id que voce pois no script, e na parte script="exemplo.lua" coloque o Nome do arquivo que voce salvou o script...

 

Pronto agora ja esta feita sua Simple Quest, agora eh só ir no seu Map colocar o Baú ir no Properties dele ai voce coloca o Unique id e o Action id la.. lembrando que nao precisa ser um Baú pode ser qualquer OBjeto: um corpo, Pedra, Cama, Estante.

 

Como fazer quests apenas para vocs certas ( ex: só kinas podem pegar item do baú ) By Tr0p5

 

Cita´ão:

-- By Tr0p5

function onUse(cid, item, frompos, item2, topos)

if item.uid == 7864 then

queststatus = getPlayerStorageValue(cid,7864)

 

if queststatus == -1 then

voc = getPlayerVocation(cid)

if voc == 1 then

doPlayerSendTextMessage(cid,22,'You have found a ITEM SORCERER.')

doPlayerAddItem(cid,ID ITEM SORCERER,1)

doSendMagicEffect(frompos, 18)

setPlayerStorageValue(cid,7864,1)

 

elseif voc == 2 then

doPlayerSendTextMessage(cid,22,'You have found a ITEM DRUID.')

doPlayerAddItem(cid,ID ITEM DRUID,1)

doSendMagicEffect(frompos, 18)

setPlayerStorageValue(cid,7864,1)

 

elseif voc == 3 then

doPlayerSendTextMessage(cid,22,'You have found a ITEM PALADIN.')

doPlayerAddItem(cid,ID ITEM PALADIN,1)

doSendMagicEffect(frompos, 18)

setPlayerStorageValue(cid,7864,1)

 

elseif voc == 4 then

doPlayerSendTextMessage(cid,22,'You have found a ITEM KNIGHT.')

doPlayerAddItem(cid,ID ITEM KNIGHT,1)

doSendMagicEffect(frompos, 18)

setPlayerStorageValue(cid,7864,1)

 

elseif voc == 0 then

doPlayerSendTextMessage(cid,22,'You have no vocation.')

end

else

doPlayerSendTextMessage(cid,22,"It is empty.")

end

end

end

 

 

Aqui vou ensinar como fazer alavancas ( que tiram obstaculos )

 

Cita´ão:

 

function onUse(cid, item, frompos, item2, topos)

gatepos = {x=181, y=135, z=11, stackpos=1}

getgate = getThingfromPos(gatepos)

if item.uid == 5555 and item.itemid == 2711 and getgate.itemid == 1445 then

doRemoveItem(getgate.uid,1)

doTransformItem(item.uid,item.itemid+1)

elseif item.uid == 3002 and item.itemid == 2712 and getgate.itemid == 0 then

doCreateItem(1445,1,gatepos)

doTransformItem(item.uid,item.itemid-1)

else

doPlayerSendCancel(cid,"Sorry, this is not possible.")

end

return 1

end

 

 

Explicando: if item.uid == 5555 and item.itemid == 2711 and getgate.itemid == 1445 then Apenas coloque o Unique id, estou usando o 5555, na parte == 2711 and getgate.itemid == 1445 then Só mude o id do obstaculo no 1445

 

doCreateItem(1445,1,gatepos) Id do obstaculo.

 

isso é o necessario, nao mecha no resto...

 

Agora vamos para outra coisa boa para quests melhores:

 

Portas com Keys: ( peguei do post do All_Mad_Maniac, ele retirou do OTFans)

 

Em actions.xml adicione :

 

Cita´ão:

 

 

<action itemid="2086" script="key.lua" />

<action itemid="2087" script="key.lua" />

<action itemid="2088" script="key.lua" />

<action itemid="2089" script="key.lua" />

<action itemid="2090" script="key.lua" />

<action itemid="2091" script="key.lua" />

<action itemid="2092" script="key.lua" />

 

 

 

 

Em data/actions/scripts crie um arquivo lua com o seguinte conteudo :

 

Cita´ão:

function onUse(cid, item, frompos, item2, topos)

if item.actionid == item2.actionid then

if item2.itemid == 1209 or item2.itemid == 1212 or item2.itemid == 1231 or item2.itemid == 1234 or item2.itemid == 1249 or item2.itemid == 1252 then

doTransformItem(item2.uid,item2.itemid+2)

elseif item2.itemid == 1210 or item2.itemid == 1213 or item2.itemid == 1232 or item2.itemid == 1235 or item2.itemid == 1250 or item2.itemid == 1253 then

doTransformItem(item2.uid,item2.itemid-1)

elseif item2.itemid == 1211 or item2.itemid == 1233 or item2.itemid == 1251 then

doTransformItem(item2.uid,item2.itemid-2)

end

elseif item2.itemid >= 1209 and item2.itemid <= 1214 then

doPlayerSendCancel(cid,"The key does not match.")

elseif item2.itemid >= 1231 and item2.itemid <= 1236 then

doPlayerSendCancel(cid,"The key does not match.")

elseif item2.itemid >= 1249 and item2.itemid <= 1254 then

doPlayerSendCancel(cid,"The key does not match.")

else

return 0

end

return 1

end

 

 

Agora explicando como colocar as chaves na portas :

Apenas coloque o ACTION ID pelo map editor na porta (por exemplo : ACTION ID = 1234) e o ACTION ID na key.

Caso você queira fazer uma quest que venha uma Key com este action ID coloque assim por exemplo :

 

Cita´ão:

function onUse(cid, item, frompos, item2, topos)

 

if item.uid ==7573 then --unique ID do bau da quest pode ser qualquer um

queststatus = getPlayerStorageValue(cid,7573) --storage value, para saber se fez a quest ou nao

if queststatus == 1 then

doPlayerSendTextMessage(cid,22,"This Chest is empty.") --msg caso ja tenha feito a quest

 

else

doPlayerSendTextMessage(cid,22,"Msg de quando pegar o item da quest")

doSendMagicEffect(topos,12)

key_uid = doPlayerAddItem(cid,2088,1) --ID da chave que voce recebe (crystal, woode, cooper, etc...)

doSetItemActionId(key_uid,1234) --action ID da key que vc ganha na quest

setPlayerStorageValue(cid,7573,1)

end

return 0

end

return 1

end

 

 

Nao esque´a de adicionar a tag no arquivo actions.xml caso você fa´a uma quest.

 

Cita´ão:

<action uniqueid="7573" script="nome do arquivo.lua" />

 

 

Agora como fazer uma Anihi:

 

Cita´ão:

function onUse(cid, item, frompos, item2, topos)

 

if item.uid == 7000 and item.itemid == 1945 then

player1pos = {x=448, y=536, z=9, stackpos=253}

player1 = getThingfromPos(player1pos)

 

player2pos = {x=447, y=536, z=9, stackpos=253}

player2 = getThingfromPos(player2pos)

 

player3pos = {x=446, y=536, z=9, stackpos=253}

player3 = getThingfromPos(player3pos)

 

player4pos = {x=445, y=536, z=9, stackpos=253}

player4 = getThingfromPos(player4pos)

 

 

if player1.itemid > 0 and player2.itemid > 0 and player3.itemid > 0 and player4.itemid > 0 then

queststatus1 = getPlayerStorageValue(player1.uid,7000)

queststatus2 = getPlayerStorageValue(player2.uid,7000)

queststatus3 = getPlayerStorageValue(player3.uid,7000)

queststatus4 = getPlayerStorageValue(player4.uid,7000)

 

if queststatus1 == -1 and queststatus2 == -1 and queststatus3 == -1 and queststatus4 == -1 then

nplayer1pos = {x=465, y=545, z=9}

nplayer2pos = {x=464, y=545, z=9}

nplayer3pos = {x=463, y=545, z=9}

nplayer4pos = {x=462, y=545, z=9}

 

doSendMagicEffect(player1pos,2)

doSendMagicEffect(player2pos,2)

doSendMagicEffect(player3pos,2)

doSendMagicEffect(player4pos,2)

 

doTeleportThing(player1.uid,nplayer1pos)

doTeleportThing(player2.uid,nplayer2pos)

doTeleportThing(player3.uid,nplayer3pos)

doTeleportThing(player4.uid,nplayer4pos)

 

doSendMagicEffect(nplayer1pos,10)

doSendMagicEffect(nplayer2pos,10)

doSendMagicEffect(nplayer3pos,10)

doSendMagicEffect(nplayer4pos,10)

 

doTransformItem(item.uid,item.itemid+1)

else

doPlayerSendCancel(cid,"Somebody in your team has already done this quest.")

end

else

doPlayerSendCancel(cid,"You need four players for this quest.")

end

 

elseif item.uid == 7000 and item.itemid == 1946 then

if getPlayerAccess(cid) >= 0 then

doTransformItem(item.uid,item.itemid-1)

else

doPlayerSendCancel(cid,"Sorry, not possible.")

end

else

return 0

end

 

return 1

end

 

 

Explicando: if item.uid == 7000 and item.itemid == 1945 then

player1pos = {x=448, y=536, z=9, stackpos=253}

player1 = getThingfromPos(player1pos)

 

player2pos = {x=447, y=536, z=9, stackpos=253}

player2 = getThingfromPos(player2pos)

 

player3pos = {x=446, y=536, z=9, stackpos=253}

player3 = getThingfromPos(player3pos)

 

player4pos = {x=445, y=536, z=9, stackpos=253}

player4 = getThingfromPos(player4pos)

Primeiro o Unique Id, logo após vem as posi´oes ( os quadradinhos que os players tem q ficar enfileirados pra ir pros demons.) coloque os x y z deles.

 

if player1.itemid > 0 and player2.itemid > 0 and player3.itemid > 0 and player4.itemid > 0 then

queststatus1 = getPlayerStorageValue(player1.uid,7000)

queststatus2 = getPlayerStorageValue(player2.uid,7000)

queststatus3 = getPlayerStorageValue(player3.uid,7000)

queststatus4 = getPlayerStorageValue(player4.uid,7000) Storage Value como ja sabem...

 

 

if queststatus1 == -1 and queststatus2 == -1 and queststatus3 == -1 and queststatus4 == -1 then

nplayer1pos = {x=465, y=545, z=9}

nplayer2pos = {x=464, y=545, z=9}

nplayer3pos = {x=463, y=545, z=9}

nplayer4pos = {x=462, y=545, z=9} Aonde o player vai cair apos usar a alavanca, o lugar onde tem os demons.

 

doSendMagicEffect(player1pos,2)

doSendMagicEffect(player2pos,2)

doSendMagicEffect(player3pos,2)

doSendMagicEffect(player4pos,2)

 

doTeleportThing(player1.uid,nplayer1pos)

doTeleportThing(player2.uid,nplayer2pos)

doTeleportThing(player3.uid,nplayer3pos)

doTeleportThing(player4.uid,nplayer4pos)

 

doSendMagicEffect(nplayer1pos,10)

doSendMagicEffect(nplayer2pos,10)

doSendMagicEffect(nplayer3pos,10)

doSendMagicEffect(nplayer4pos,10) Efeitos de magia no teleport.

 

doTransformItem(item.uid,item.itemid+1)

else

doPlayerSendCancel(cid,"Somebody in your team has already done this quest.")

end

else

doPlayerSendCancel(cid,"You need four players for this quest.")

end Faz aparecer essa msg qnd ja a alguem na anihi ou quando nao há 4 players.

 

Agora o Script dos Chest:

 

Cita´ão:

function onUse(cid, item, frompos, item2, topos)

 

if item.uid == 5006 then

queststatus = getPlayerStorageValue(cid,5010)

if queststatus == -1 then

doPlayerSendTextMessage(cid,22,"You have found a Demon Armor.")

doPlayerAddItem(cid,2494,1)

setPlayerStorageValue(cid,5010,1)

else

doPlayerSendTextMessage(cid,22,"It is empty.")

end

elseif item.uid == 5007 then

queststatus = getPlayerStorageValue(cid,5010)

if queststatus == -1 then

doPlayerSendTextMessage(cid,22,"You have found a Magic Sword.")

doPlayerAddItem(cid,2400,1)

setPlayerStorageValue(cid,5010,1)

else

doPlayerSendTextMessage(cid,22,"It is empty.")

end

elseif item.uid == 5008 then

queststatus = getPlayerStorageValue(cid,5010)

if queststatus == -1 then

doPlayerSendTextMessage(cid,22,"You have found a Stonecutter's Axe.")

doPlayerAddItem(cid,2431,1)

setPlayerStorageValue(cid,5010,1)

else

doPlayerSendTextMessage(cid,22,"It is empty.")

end

elseif item.uid == 5009 then

queststatus = getPlayerStorageValue(cid,5010)

if queststatus == -1 then

doPlayerSendTextMessage(cid,22,"You have found a Present Box.")

doPlayerAddItem(cid,1990,1)

setPlayerStorageValue(cid,5010,1)

else

doPlayerSendTextMessage(cid,22,"It is empty.")

end

else

return 0

end

 

return 1

end

 

 

Nao precisa explicar, sao 4 Simple Quest com os 4 StorageValue iguais.

 

Agora vamos come´ar a parte dos Npcs de quest!

 

Um ótimo npc para quests eh um Npc Trader, ou seja ele troca um item pelo outro APENAS UMA VEZ.

 

(lembrando vou adicionar apenas as fun´oes dos npc de quest )

 

Cita´ão:

if msgcontains(msg, 'trade') and focus == cid then

itemstatus = doPlayerRemoveItem(cid,1990)

if itemstatus == -1 then

selfSay('Qual é o item?')

else

setPlayerStorageValue(cid,9999)

selfSay('Ai esta...')

buy(cid,1990,1,0)

talk_start = os.clock()

end

 

 

Explicando: itemstatus = doPlayerRemoveItem(cid,1990) id do item que voce vai dar para o receber outro em troca.

 

setPlayerStorageValue(cid,9999) Isto é para o player só poder fazer a troca uma vez!

 

 

buy(cid,1990,1,0) ID e quantidade do item que ele vai dar pro Player em troca do outro ( deixe o outro 0 )

 

 

Agora um Npc que faz uma pergunta, se estiver correta ele da o item:

 

Cita´ão:

if string.find(msg, '(%a*)Charada(%a*)') and focus == cid then

selfSay('Oque é oque é?')

talk_start = os.clock()

price = 0

talkcount = 2

itemid = 2647

count = 1

return

end

 

if string.find(msg, '(%a*)é isso(%a*)') and cid == focus then

if talkcount == 1 then

buy(cid,itemid,count,price)

talk_start = os.clock()

end

if talkcount == 2 then

sell(cid,itemid,count,price)

talk_start = os.clock()

end

 

 

EXPLICANDO: if string.find(msg, '(%a*)Charada(%a*)') and focus == cid then Msg q o player ira dizer para que o npc de a Charada.

 

selfSay('Oque é oque é?')

talk_start = os.clock() Aki voce coloca a Charada.

 

price = 0

talkcount = 2

itemid = 2647

count = 1

return

end Pre´o, Id, Quantidade.

 

if string.find(msg, '(%a*)é isso(%a*)') and cid == focus then A Resposta...

 

Edited---

(quests que você recebe bags com coisas dentro!) Retirei do Evolutions e editei.

 

Cita´ão:

function onUse(cid, item, frompos, item2, topos)

 

if item.uid == 2300 then

queststatus = getPlayerStorageValue(cid,2300)

if queststatus == -1 then

doPlayerSendTextMessage(cid,22,"You found a Bag.")

container = doPlayerAddItem(cid, 1987, 1)

container2 = doContainerAddItem(container, 1988, 1)

doContainerAddItem(container2, 2120, 1)

doContainerAddItem(container2, 2554, 1)

doContainerAddItem(container, 2457, 1)

doContainerAddItem(container, 2463, 1)

doContainerAddItem(container, 2647, 1)

doContainerAddItem(container, 2643,1)

doContainerAddItem(container, 2525, 1)

doContainerAddItem(container, 2409, 1)

setPlayerStorageValue(cid,2300,1)

else

doPlayerSendTextMessage(cid,22,"It is empty.")

end

 

 

 

Bom, coloquei algumas coisas essencias para uma quest boa! se voce usar tudo isso usando criatividade da uma boa quest!

 

espero que gostem!

flw.

 

Créditos:Mys

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.