Jump to content

Rpg, Como Usa-lo Em Seu Mapa!


Addict

Recommended Posts

..::Rpg, como usa-lo em seu mapa::..

 

Primeiramente, oque é Rpg?

OTserv já é um Rpg, somente por você entrar lá e começar a matar monstros e ganhar level, você já está jogando um tipo de rpg.

 

Mas e nos mapas, como é o Rpg?

Bom, em um mapa o Rpg na maioria das vezes é tratado como uma quest ou uma missão, você tem que fazer varias coisas para chegar a um objetivo, descobrir coisas, decifrar códigos e muito mais! No tutorial trata diverças formas de Rpg para você acrescentar a seu mapa.

 

Rpg tipo 1:

Lendo um livro em determinada posição.

 

Esse é bem intereçante, você pode usa-la para esconder o livro em algum corpo carregado pelo mapa, ou coloca-lo em alguma estante de bibliotéca, ai nesse livro pode ter alguma informação de alguma missão ou quest, algum código para ser decifrado, mas tem que ter alguma informação que esse livro só pode ser lido em algum lugar, pedra mágica ou algo do tipo.

 

• Agora vamos para a action:

 

livronamesa14ti.jpg

 

OBS: Onde está:

1: Mesa 1, Texto1.

2: Lugar que não dará para ler o livro.

3: Mesa 2, Texto2.

 

livronamesa26bt.jpg

 

livronamesa37og.jpg

 

livronamesa40he.jpg

 

Primeiramente ache no seu "actions.xml" essas linhas:

 

<action itemid="1951" script="rwitems.lua" />

 

e...

 

<action itemid="1953" script="rwitems.lua" />

 

Delete as duas.

Agora crie um novo arquivo chamado livro.lua (na pasta data/actions/scripts)

 

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

posmesa1 = {x=30, y=26, z=5, stackpos=2}
mesa1 = getThingfromPos(posmesa1)
posmesa2 = {x=32, y=26, z=5, stackpos=2}
mesa2 = getThingfromPos(posmesa2)

if item.uid == mesa1.uid then
doTransformItem(item.uid,1953)
doSetItemText(item.uid,"Oh! Você está lendo esse livro em cima da mesa mágica número 1!")
doShowTextWindow(item.uid,500,0)
elseif item.uid == mesa2.uid then
doTransformItem(item.uid,1953)
doSetItemText(item.uid,"Oh! Você está lendo esse livro em cima da mesa mágica número 2!")
doShowTextWindow(item.uid,500,0)
else
doTransformItem(item.uid,1951)
doSendCancel(cid,"Este livro só poderá ser lido se você o colocar na mesa mágica.")
end

return 1
end

 

Explicando:

 

* posmesa1 ~~> coloque a posição da mesa 1

* posmesa2 ~~> coloque a posição da mesa 2

 

 

Agora vá na sua pasta actions e adicione isto ao arquivo actions.xml:

 

<action itemid="1951" script="livro.lua" />
<action itemid="1953" script="livro.lua" />

 

Créditos dessa parte: Frerety

 

Rpg tipo 2:

 

Movendo livros e abrindo paredes.

 

Essa é bastante util, você quer criar passagens secrétas que nem aquelas dos filmes.

Ela pode ser usada para esconder lugares, para esconder qualquer coisa, isso contribue bastante no Rpg.

 

• Agora vamos para a action:

 

pedao1xy2.jpg

 

pedao2qq4.jpg

 

Nas SS's acima vemos uma sala, com as prateleiras de livros, uma caixa normal suportando um candelabro uma mesa com um livro e "enfeites" para ambientar o lugar.

A idéia parte de que, você esconda a alavanca "chave" que irá abrir a passagem, assim quando o player entrar na sala terá a impressão de que não irá o levar a lugar nenhum... Porém, você tem que ajudá-lo a achar a alavanca, como muitos não gostam de ler livros, eu os uso bastante para que os interessados nas histórias contadas neles sejam privilegiados. Como vemos o player está lendo o livro e logo após lê-lo parte para perto da caixa.

 

pedao3ue4.jpg

 

pedao4th0.jpg

 

No livro havia uma história e logo após ela há um diálogo do escritor do livro com o leitor, o informando da localização da alavanca, isso intriga os players... Rapidamente ele corre para verficar, acha a alavanca e a aciona, quando a passagem se abre, o player se surpreende... Isso é realmente muito bom para um mapa bem elaborado, PURO RPG!

 

Agora vamos ao que intereça!

 

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

itempos = {x=814, y=509, z=9, stackpos=1}  -- Posição da 1ª Prateleira
itemid = 1718												-- ID da prateleira
item3 = getThingfromPos(itempos)
item2pos = {x=815, y=509, z=9, stackpos=1}  -- Posição da 2ª Prateleira
item2id = 1718											   -- ID da prateleira
item4 = getThingfromPos(item2pos)
item3pos = {x=814, y=508, z=9, stackpos=1}  -- Posição da 1ª parede
item3id = 1050												-- ID da parede
item5 = getThingfromPos(item3pos)
item4pos = {x=815, y=508, z=9, stackpos=1}  -- Posição da 2ª parede
item4id = 1050												-- ID da parede
item6 = getThingfromPos(item4pos)
item5pos = {x=813, y=509, z=9, stackpos=1} -- Coordenadas para aonde a 1ª prateleira irá
item5id = 1718											   -- Id da prateleira
item7 = getThingfromPos(item5pos)
item6pos = {x=816, y=509, z=9, stackpos=1} -- Coordenadas para aonde a 2ª prateleira irá
item6id = 1718											   -- Id da prateleira
item8 = getThingfromPos(item6pos)

if item.itemid == 1945 then
doTransformItem(item.uid,1946)
doRemoveItem(item3.uid,1)
doRemoveItem(item4.uid,1)
doRemoveItem(item5.uid,1)
doRemoveItem(item6.uid,1)
doCreateItem(item5id,1,item5pos)
doCreateItem(item6id,1,item6pos)

elseif item.itemid == 1946 then
doTransformItem(item.uid,1945)
doCreateItem(itemid,1,itempos)
doCreateItem(itemid,1,item2pos)
doCreateItem(item3id,1,item3pos)
doCreateItem(item4id,1,item4pos)
doRemoveItem(item7.uid,1)
doRemoveItem(item8.uid,1)
end

return 1
end

 

Coloque isso em um arquivo .lua em sua pasta OT>Data>Actions>Scripts>

Exemplo: passagem.lua

 

E em Data>Actions> Actions.xml crie uma linha com:

 

<action uniqueid="1001" script="passagem.lua" />

 

O Unique Id deve ser o mesmo da Alavanca.

E para quem não sabe e que não costuma mexer com isso...

Unique Id de um item do Mapa se põe pelo MapEditor.

Neste caso a Action foi feita para ser usada com uma Alavanca, mas ela pode ser alterada para ser usada com qualquer item, somente modifique em:

 

if item.itemid == 1945 then		  -- ID do item que será usado 1945
doTransformItem(item.uid,1946)  --  ID do item após ser usado 1946

 

Modifique também na 2ª:

 

elseif item.itemid == 1946 then	-- ID do item após ser usado 1946
doTransformItem(item.uid,1945)  -- ID do item inicial			   1945

 

Créditos dessa parte: Thyranic

 

Armadilhas:

 

As armadilhas são muito importantes para um bom Rpg, sem elas fica monótono, facil de solucionar.

Como elas funcionam?

Basicamente, é você pisar em tal SQM e uma função acontecer.

 

• Armadilha numero 1

Tal vocação pisar e perder X life

 

Você pode usar essa armadilha em salas onde você tem que pisar nos lugares certos para acontecer tal função, ou pode ser questão de sorte ou pode estár exclarecido de algum geito, isso fica a base do criador do mapa.

 

• Agora vamos para a action (movements)

Vá até a pasta data/movements/scripts e crie um arquivo chamado hitsorcerer.lua

Dentro dele coloque:

 

function onStepIn(cid, item, pos)
---Action by Jovial---

--Config--
voc = 1	--0 = no vocation, 1 = sorcerer, 2 = druida, 3 = paladin, 4 = knight--

dano = 200 --quanto ira tirar de vida
cor = 180 --cor da letra do hit 5=azul, 180=red, etc
efeito = 30  --numero do efeito desejado
--End Config--

hp = getPlayerHealth(cid)
topos = getPlayerPosition(cid)
pvoc = getPlayerVocation(cid)

if voc == pvoc then
if getPlayerHealth(cid) >= dano then
doPlayerAddHealth(cid, -dano)
doSendAnimatedText(topos, dano, cor)
 doSendMagicEffect(topos, efeito)
else
doPlayerAddHealth(cid, -hp)
doSendAnimatedText(topos, hp, cor)
 doSendMagicEffect(topos, efeito)
end
end
return 1
end

 

Explicando:

 

voc = 1 - Aqui você coloca a ID da vocação que irá sofrer o dano.

dano = 200 - Quanto ira tirar de vida

cor = 180 - Cor da letra do hit 5=azul, 180=red, etc

efeito = 30 - Numero do efeito desejado

 

Agora no arquivo movements.xml (data/movements) você adiciona a seguinte tag:

 

<movevent event="StepIn" actionid="1111" script="hitsorcerer.lua" />

 

Explicando:

 

actionid="1111" - Aqui você coloca a actionid do piso (Ps: Você terá que colocar a action ID que você preenxer aqui no piso lá no map editor)

script="hitsorcerer.lua" - Aqui vai o nome do arquivo, no caso: hitbysorcerer.lua

 

Você pode fazer isso para qualquer vocação, basta configurar a seu gosto.

 

Créditos do script: Janus

Créditos no tutorial: Dragonheart

 

• Armadilha numero 2

Pisando e teleportado.

 

Esse pode ser usado para o mesmo esquema, você está numa sala, cheia de armadilhas, e quando você está prestes a chegar perto do objetivo você pisa no lugar errado e é teleportado para o ínicio.

 

Vá até a pasta data/amovements/scripts e crie um arquivo chamado teleank.lua e coloque isso nele:

 

--Action by Rogui =]--
function onStepIn(cid, item, pos)  

player1pos = getPlayerPosition(cid)
novapos1 = {x=629, y=213, z=14}

if item.uid == 6001 then

getThingfromPos(player1pos)
doTeleportThing(cid,novapos1)

end
return 1
end

 

Explicando:

 

novapos1 = {x=629, y=213, z=14} - Ai vai a posição para onde o player sera teleportado.

if item.uid == 6001 then Ai vai a unique ID do piso que iniciara o processo.

 

Agora abra o [imovements.xml[/i] localizado na pasta data/movements e adicione a seguinte tag:

 

<movevent event="StepIn" uniqueid="6001" script="teleank.lua" />

 

Explicando:

 

uniqueid="6001" - Ai vai unique id do piso que iniciara todo o processo (Ps: Você terá que colocar a action ID que você preenxer aqui no piso lá no map editor).

script="teleank.lua" /> - Aqui vai o nome do arquivo.

 

Créditos do script: Rogui

Créditos no tutorial: Dragonheart

 

• Armadilha numero 3

 

Mina terrestre.

 

Essa é a mais intereçante de todas, você pode espalhar essas minas por campos ou até por salar quem tenham seguimento. Nessa action você tera que editar o items.otbm para funcionar.

 

Vá para data/movements/scripts e crie um arquivo chamado mina.lua.

 

function onStepIn(cid, item, pos)
--Mina terrestre by lobii lecter!!!
xs = -1
ys = -1
pul = math.random(1,100)
if pul < 95 then -- a mina tem 95% de chances de funcionar e 5% de chances de falhar
repeat
repeat
posa = {x=pos.x + xs, y=pos.y + ys, z=pos.z, stackpos="255"}
ui = getThingfromPos(posa)
doSendMagicEffect(posa,4)
if ui.uid > 0 then
loss = math.random(300,500)
doSendAnimatedText(posa, loss, 180)
sangue = doCreateItem(2019, 2, posa)
doDecayItem(sangue)
doPlayerAddHealth(ui.uid,-loss)
end
xs = xs + 1
until xs == 2
xs = -1
ys = ys + 1
until ys == 2
end
fogo = doCreateItem(5063, 1, pos)
doDecayItem(fogo)
fogo = doCreateItem(5061, 1, {x = pos.x, y = pos.y - 1, z = pos.z})
doDecayItem(fogo)
fogo = doCreateItem(5062, 1, {x = pos.x - 1, y = pos.y, z = pos.z})
doDecayItem(fogo)
fogo = doCreateItem(5064, 1, {x = pos.x - 1, y = pos.y, z = pos.z})
doDecayItem(fogo)
fogo = doCreateItem(5065, 1, {x = pos.x + 1, y = pos.y, z = pos.z})
doDecayItem(fogo)
fogo = doCreateItem(5065, 1, {x = pos.x + 1, y = pos.y + 1, z = pos.z})
doDecayItem(fogo)
fogo = doCreateItem(5064, 1, {x = pos.x + 1, y = pos.y + 1, z = pos.z})
doDecayItem(fogo)
fogo = doCreateItem(5066, 1, {x = pos.x, y = pos.y + 1, z = pos.z})
doDecayItem(fogo)
fogo = doCreateItem(5066, 1, {x = pos.x, y = pos.y - 1, z = pos.z})
doDecayItem(fogo)
fogo = doCreateItem(5064, 1, {x = pos.x + 1, y = pos.y, z = pos.z})
doDecayItem(fogo)
fogo = doCreateItem(5066, 1, {x = pos.x + 1, y = pos.y, z = pos.z})
doDecayItem(fogo)
doRemoveItem(item.uid,1)
else
doSendMagicEffect(pos,2)
end
end

 

Agora abra o editor do items.otb (lembre-se... apenas no avançado) e veja o q fazer no spoil

procure pelas burning walls e mude isso:

sid:5061 bote o DecayTo para: 5064 e o DecayTime: 20

sid:5062 bote o DecayTo para: 5066 e o DecayTime: 20

sid:5063 bote o DecayTo para: 5066 e o DecayTime: 20

sid:5064 bote o DecayTo para: 0 e o DecayTime: 20

sid:5065 bote o DecayTo para: 0 e o DecayTime: 20

sid:5066 bote o DecayTo para: 0 e o DecayTime: 20

sid:5067 bote o DecayTo para: 0 e o DecayTime: 20

 

Bom... Foi escolhido item que eu escolhi lá eu coloquei assim o nome:

Strange floor elevation

Aí a pessoa irá perceber que tem algo se der look... achei assim melhor

 

Agora vocês só precisam abrir seu map editor e procurar um item que não tenha imagem (existem vários)... isso mesmo! você por acaso não pensou em colocar uma mina terrestre a vista não né?

 

Então... após encontrar o item sem imagem.. pegue a ID delee coloque-a no movements.xml como itemid=.

 

<movevent event="StepIn" itemid="4350" script="mina.lua" />

 

No meu item.otb esse item 4350 estáva sem imagem, mas pode ocorrer que no seu tenha algo assossiado a ele... Então é só você procurar por outro e trocar.

 

PS: Não fique fazendo milhares de minas uma por cima da outra que isso vai dar debug... no gm e no coitado que passar por cima delas...

 

Créditos: Lobiilecter

 

Bom gente, é isso, apenas quis trazer uma lógica por Rpg para vocês.

Existe milhões de formas de criar um bom Rpg, nesse tutorial eu trouxe as principais e as mais simples apra você, mas não é porque são simples que são ruins, muito pelo contrario, sabendo usa-las seu mapa ficará com um ótimo Rpg.

 

Oque mais irá definir a qualidade do Rpg de seu mapa não é nem as actions que você usa, e sim a sua criatividade!

Procure fazer coisas inéditas, coisas que você nunca viu em OT nenhum, mas tambem, não faça nada muito absurdo xD

 

Créditos pela criação do tópico em geral: Dragonheart

Link to comment
Share on other sites

Perfeito, hoje em dia os mapas que vem com as versões de otserv

 

está muito sem rpg, agora com este tutorial espero que muitos usem como base para fazer um mapa!

 

 

está de parabéns addict

 

 

 

Abraços,

Favorefty.

Link to comment
Share on other sites

Addict, vê se dá pra você me ajudar. Quero um scripts assim: você clica no corpo de um cara morto e ganha um livro. Mas eu quero que esse livro tenha um determinado texto e que qualquer pessoa possa pegar 1 cópia dele no corpo, como se fosse um baú de quest.

 

Valeu!

Link to comment
Share on other sites

GOD, na verdade não. Se você ver, meu outro post foi ontem. Hoje é que estou com esta dúvida. Repostei porque duvidava que ele fosse olhar o post antigo caso eu editasse-o. Mas aí, alguém sabe me ajudar?

Link to comment
Share on other sites

@Lord X

mesmo assim é post duplo

E isso é por actions, tente ver na seção especializada em actions e aprnder algo

 

@Addict

Muito bom cara

está de parabéns

Esse tópico merece fixo!

Link to comment
Share on other sites

  • 3 weeks later...
  • 1 month later...

nao funfo no meu, o do livro nao da pra ler em cima do balcao, só se clicar em cima e depois arrastar pra baxo, a da alavanca tb nada feito, :p explica melhor pow...

Link to comment
Share on other sites

  • 2 weeks later...
×
×
  • Create New...