uma Dica, no ultimo action troque o false por return true
- Fórum
- OTServ
- Recursos
- Scripting
- Actions e Talkactions
- [RPG] Quest dinâmica
GS
action
[RPG] Quest dinâmica
Por GstvoLiber, 24 de mar. de 2014 em Actions e Talkactions
quest
script
bau
teleport
waves
3
1.6k
info
Grupo: Campones
Registrado: 24/03/14
Posts: 31
Reputação: +1

24 de março de 2014 às 15:59
1 mês depois...
info
Grupo: Campones
Registrado: 07/03/14
Posts: 64
Reputação: +19

01 de abril de 2014 às 11:55
uma Dica, no ultimo action troque o false por return true
Onde ?
Cita a parte que voce quer dizer, pra eu poder achar mais facil rsrs

info
Grupo: Campones
Registrado: 07/03/14
Posts: 64
Reputação: +19
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)]) endEntão, embaixo de:
Adicione quantas waves quiser, seguindo o modelo:
n = numero da wave
MONSTRO = nome do monstro
Depois, em baixo de:
Adicione quantas waves vc tiver, seguindo o modelo:
Onde n = numero da wave
Feito isso tudo, bora configurar para iniciar o evento...
Em actions.xml adicione a linha:
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 endModifique 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:
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:
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 endFaça as modificações que achar necessário.
Depois em actions.xml adicione:
No RME, agora no baú, adicione a uniqueid, no meu caso 2001.
Bom, espero que goste e utilize em seu servidor!!
Se possivel, +REPUtilizei como base Script do Vodkart para o teleport. ( acho que é assim que escreve o nick dele ).
-GstavoLiber
Editado Abril 1 por GstavoLiber