Ir para conteúdo

[RPG] Quest dinâmica


GstvoLiber

Posts Recomendados

Bom, fiz esse script para sanar uma dúvida de um membro da comunidade, e quero compartilhar com vocês, acho que não chega a ser um tutorial, mas está bem explicado e espero que usem =)

 

Veja:

 

-Antes de mais nada, entre no seu RME e faça a área da quest, depois modifique as coordenadas no script segundo seu mapa.

- Lembre-se de colocar um tile diferente para ajudar o player a saber a posição correta de onde estar, e de por a alavanca no lugar correto.

- Adicione mais posições para nascer os monstros, quanto mais posições mais dinamico fica sua quest.

Em Actions/scripts, adicione um novo documento .lua com nome que desejar, e ponha isso dentro..


local TeleportInPos = { x = 74, y = 111, z = 10} -- Posição para onde os players serão teleportados
local LeverPos = { x = 90, y = 110, z = 10} -- Posição da Alavanca
local timeToRemove = 40 -- Time before quest reset
local tile1Pos = { x = 80, y = 80, z = 8 } -- lugar que o player deverá estar para puxar a alavanca
local str = 2000 -- modifique para um storage valido no seu server

local config = {
{ x = 19, y = 8, z = 7 },
{ x = 20, y = 10, z = 7 },
{ x = 23, y = 12, z = 7 },
{ x = 22, y = 11, z = 7 },
{ x = 28, y = 20, z = 7 }
}

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

if(getCreaturePosition(cid) == tile1Pos) then
if(getPlayerStorageValue(uid, str) == 0) then
doTeleportThing(cid, TeleportInPos)
doSendMagicEffect(TeleportInPos, CONST_ME_TELEPORT)
doPlayerSendTextMessage(cid,22,"Agora começará sua quest. Bom sorte! ")
addEvent(wave1(cid), 10)
addEvent(wave2(cid), 10)
addEvent(wave10(cid), 1)
else
doPlayerSendTextMessage(cid,22,"Você não está na posição correta, ou já fez essa quest! ") -- Mensagem caso o char n esteja no tile correto
end
end
end

function wave1(cid)
doCreateMonster(Dragon, config[math.random(1, #config)])
doCreateMonster(Demodras, config[math.random(1, #config)])
end

function wave2(cid)
doCreateMonster(Hydra, config[math.random(1, #config)])
doCreateMonster(Spider, config[math.random(1, #config)])
end

function wave10(cid)
doCreateMonster(TheBoss, config[math.random(1, #config)])
end

Então, embaixo de:

function wave2(cid)
doCreateMonster(Hydra, config[math.random(1, #config)])
doCreateMonster(Spider, config[math.random(1, #config)])
end

Adicione quantas waves quiser, seguindo o modelo:

function waveN(cid)
doCreateMonster(MONSTRO, config[math.random(1, #config)])
doCreateMonster(MONSTRO, config[math.random(1, #config)])
end

n = numero da wave

MONSTRO = nome do monstro

 

Depois, em baixo de:

addEvent(wave2(cid), 10)

Adicione quantas waves vc tiver, seguindo o modelo:

addEvent(waveN(cid), 10)

Onde n = numero da wave

 

Feito isso tudo, bora configurar para iniciar o evento...

Em actions.xml adicione a linha:

<action uniqueid="1026" script="nomedoarquivo.lua"/>

Mude o nome do arquivo, e no RME coloque o uniqueid 1026 na sua alavanca, que deverá estar no lugar correto também.

 

Depois disso, devemos modificar o arquivo do monstro ( The Boss). Para isso continue:

Em Creaturescript/scripts adicione um arquivo com nome de sua escolha .lua e coloque isso dentro:

function onDeath(cid, corpse, killer)
local Pos = {x = 340, y = 840, z = 15} -- posicao para onde o player irá (sala de premios)
local monstName = "TheBoss" -- nome do monstro
            
                 if isMonster(cid) then
                     if string.lower(getCreatureName(cid)) == string.lower(monstName) then
                         doTeleportThing(killer[1], Pos)
                     end
                 end
     return TRUE
end

Modifique apenas a posição para a qual o player será teleportado e o nome do monstro boss.

 

Feito isso, volte para creaturescripts.xml e adicione:

<event type="death" name="Teleportquest" event="script" value="quest1.lua"/>

Modificando o nome do arquivo.

 

Estamos quase acabando ! rsrs

Vá para a pasta monster e procure pelo arquivo do monstro escolhido para ser o boss, no meu caso escolhi o TheBoss, dentro do arquivo do boss, coloque:

<script>
<event name="Teleportquest"/>
</script>

E pronto !! A quest está feita.

 

EXTRA

 

Agora, basta ir em actions/scripts e criar um novo arquivo para o bau da quest com qualquer nome .lua e adicionar dentro:


function onUse(cid, item, frompos, item2, topos)
         if item.uid == 2001 then -- mude para um valor que será colocado em uniqueid no bau
            queststatus = getPlayerStorageValue(cid,2000) -- mude para o numero da sua storage
              if queststatus == -1 or queststatus == 0 then
                 doPlayerSendTextMessage(cid,22,"Você Achou Um Bolo De 100k")
                 item_uid = doPlayerAddItem(cid,2160,10) -- mude o premio! 2160 = Crystal Coin e 10 = quantidade.
                 setPlayerStorageValue(cid,2000,1) -- mude apenas o 2000 para o valor da sua storage
              else
                  doPlayerSendTextMessage(cid,22,"Você já fez esta quest! ")
              end
         end
return true
end

Faça as modificações que achar necessário.

 

Depois em actions.xml adicione:

<action uniqueid="2001" script="bau1.lua"/>

No RME, agora no baú, adicione a uniqueid, no meu caso 2001.

 

Bom, espero que goste e utilize em seu servidor!!

 

Se possivel, +REP

Utilizei como base Script do Vodkart para o teleport. ( acho que é assim que escreve o nick dele ).

-GstavoLiber

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

×
×
  • Criar Novo...