Ir para conteúdo
  • 0

(Sistema) Arena PVP para TFS 0.4


FenixBorges

Pergunta

Bom gente, através do "Search" ali em cima

eu não consegui encontrar um Tutorial "claro" de como criar

uma Arena..

Bom eu já tenho o mapa e talz, agora só falta os Scripts

que basicamente são:

*alavancas que léva o player para a arena

*ground/tile da arena, faz com que o player ñ perca items, level, skills.

Só isso..

 

regionwy.png

 

Valendo REP+

No aguardo, muito obrigado pela atenção.

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

10 respostass a esta questão

Posts Recomendados

  • 0

Ok amigão, vamos lá, primeiramente iremos instalar uma função na sua lib, vá em data/lib, abra o 050-function.lua ou function.lua, na última linha de todas, pule 2 e cole:

 

function getPlayersInArea(area)
local players = {}
for x = area.fromx,area.tox do
for y = area.fromy,area.toy do
for z = area.fromz,area.toz do
local m = getTopCreature({x=x, y=y, z=z}).uid
if m ~= 0 and isPlayer(m) then
table.insert(players, m)
end
end
end
end
return players
end

 

Muito bem, agora iremos criar as alavancas, vá em data/actions/scripts, crie um arquivo chamado leverpvp.lua e adicione dentro:

 

 

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

local cfg = {
  firstSquare = {x = 500, y = 400, z = 7},
  secondSquare = {x = 400, y = 500, z =7},
  arenaPos1 = {x = 450, y = 540, z = 7},
  arenaPos2 = {x = 450, y = 540, z = 7},
}

local area = {fromx = 1008, fromy = 1018, fromz = 7, tox = 1025, toy = 1033, toz = 7} -- Positions
local check = getPlayersInArea(area)

if #check > 1 then
doPlayerSendTextMessage(cid, 27, "Wait for the current battle ends.")
return true
end

if getThingfromPos(cfg.firstSquare).itemid > 0 and getThingfromPos(cfg.secondSquare).itemid > 0 then
doTeleportThing(getThingfromPos(cfg.firstSquare).uid, cfg.arenaPos1)
doTeleportThing(getThingfromPos(cfg.secondSquare).uid, cfg.arenaPos2)
doSendAnimatedText(cfg.arenaPos1, "START!", math.random (1,255))
doSendAnimatedText(cfg.arenaPos2, "START!", math.random (1,255))
end
return true
end

  • Configurando:

local cfg = {
  firstSquare = {x = 500, y = 400, z = 7},
  secondSquare = {x = 400, y = 500, z =7},
  arenaPos1 = {x = 450, y = 540, z = 7},
  arenaPos2 = {x = 450, y = 540, z = 7},
}

 

firstSquare, você coloca as coordenadas do SQM da alavanca do player1, e secondSquare é a mesma coisa, só que do player2.

 

arenaPos1 você coloca a posição do SQM de dentro da arena do player1, e arenaPos2 a mesma coisa só que para o player2.

 

Essa parte:

 

local area = {fromx = 1008, fromy = 1018, fromz = 7, tox = 1025, toy = 1033, toz = 7} -- Positions
local check = getPlayersInArea(area)

 

fromx , fromy e fromz são as coordenadas (X,Y,Z), coloque nesses 3 as coordenadas do canto esquerdo superior da arena, e tox, toy e toz coloca do canto inferior direito.

 

Em actions.xml adicione essa tag:

 

<action actionid="19229" event="script" value="leverpvp.lua"/>

 

Agora adicione ACTION ID 19229 nas 2 alavancas, pelo RME MAP EDITOR :)

 

~~

 

Muito bem, agora vamos criar o código da arena, aonde ao morrer ali irão ser teleportados para o templo e não perderão vida/loot, correto?

 

Vá em data/creaturescripts/scripts, crie um arquivo chamado arenadeath.lua e adicione dentro:

 

 

[size=4]function onPrepareDeath(cid, lastHitKiller, mostDamageKiller) [/size]

local area = {fromx = 1008, fromy = 1018, fromz = 7, tox = 1025, toy = 1033, toz = 7} -- Positions

if isInRange(getCreaturePosition(cid), area) then
doCreatureSetDropLoot(cid, false)
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
doPlayerSendTextMessage(cid, 27, "You loose!")
doCreatureAddHealth(cid, getCreatureMaxHealth(cid) + 65500, true)
doTeleportThing(lastHitKiller, getTownTemplePosition(getPlayerTown(cid)))
doPlayerSendTextMessage(lastHitKiller, 27, "Congratulations, you won!")
end
return true
end

 

 

Em creaturescripts.xml adicione essa tag:

 

<event type="preparedeath" name="Arenadeath" event="script" value="arenadeath.lua"/>

 

Reinicie o servidor e teste, poste resultados, bjs :D

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

  • 0

Testanto...

 

@Edit

Após clicar na alavanca, o player1 no caso o "Elderzinho", não foi teleportado

para aquele tile ali que aparece a mensagem animada. =/

Obs: Não deu nenhum erro no Distro, estranho isso.

 

regionot.png

 

Cara eu acho que isso ai foi um Ctrl+C e Ctrl+V de algum tutorial por ai.

 

Sem falar que oque eu pedi foi exatamente isso:

*Alavanca com mesma função da alavanca da Annihi, que léva "x" players para "x" coordenada.

*Tiles que faz com que o player não perca level, skills, items.

Sem isso de levar para o templo/animações.

 

Mesmo assim obg por tentar ajudar.

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

  • 0

Ctrl+c ctrl+v ? Fiz na mão rapaz, apenas errei uma coisinha, troque a alavanca por:

 

 

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

local cfg = {
	  firstSquare = {x = 500, y = 400, z = 7},
	  secondSquare = {x = 400, y = 500, z =7},
	  arenaPos1 = {x = 450, y = 540, z = 7},
	  arenaPos2 = {x = 450, y = 540, z = 7},
}

local area = {fromx = 1008, fromy = 1018, fromz = 7, tox = 1025, toy = 1033, toz = 7} -- Positions
local check = getPlayersInArea(area)

if #check > 1 then
doPlayerSendTextMessage(cid, 27, "Wait for the current battle ends.")
return true
end

if getThingfromPos(cfg.firstSquare).itemid > 0 and getThingfromPos(cfg.secondSquare).itemid > 0 then
doTeleportThing(cid, cfg.arenaPos1)
doTeleportThing(cid, cfg.arenaPos2)
doSendAnimatedText(cfg.arenaPos1, "START!", math.random (1,255))
doSendAnimatedText(cfg.arenaPos2, "START!", math.random (1,255))
end
return true
end

 

 

Só configura ele dnovo

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

  • 0

Para fazer que o player não percam nada no tile basta ir no rme é colocar a area "PVP Zone Tool" em cima do tile (LEMBRANDO PLAYER AO MORRE ENCIMA DO TILE NÃO VAI PERDE NADA É VAI SER TELEPORTADO AO TEMPLO, MAIS SE VOCÊ QUISER QUE O PLAYER CONTINUE LÁ E FEITO EM SCRIPT MSM)

 

Flw

Link para o comentário
Compartilhar em outros sites

  • 0

Troca por esse e configura de novo:

 

 

[size=4]function onUse(cid, item, frompos, item2, topos)[/size]

local cfg = {
                                 firstSquare = {x = 500, y = 400, z = 7},
                                 secondSquare = {x = 400, y = 500, z =7},
                                 arenaPos1 = {x = 450, y = 540, z = 7},
                                 arenaPos2 = {x = 450, y = 540, z = 7},
}

local area = {fromx = 1008, fromy = 1018, fromz = 7, tox = 1025, toy = 1033, toz = 7} -- Positions
local check = getPlayersInArea(area)

if #check > 1 then
doPlayerSendTextMessage(cid, 27, "Wait for the current battle ends.")
return true
end

if isPlayer(getThingFromPos(cfg.firstSquare)) then
doTeleportThing(cid, cfg.arenaPos1)
doSendAnimatedText(cfg.arenaPos1, "START!", math.random (1,255))
end

if isPlayer(getThingFromPos(cfg.secondSquare)) then 
doTeleportThing(cid, cfg.arenaPos2)
doSendAnimatedText(cfg.arenaPos2, "START!", math.random (1,255))
end
return true
end
[size=4]end[/size]

 

 

E a tag do actions.xml troca por:

 

<action actionid="13589;13590" event="script" value="leverpvp.lua"/>

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

  • 0

Sim, já ta instalado também.

Mais uma vez, brigadão por me ajudar cara.

Agora só falta o VIP pro meu Aurea-OT ficar 100%

E quem sabe um dia eu pósso posta-lo para Download.

REP+ forte abraço.

 

PROBLEMA RESOLVIDO!

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

×
×
  • Criar Novo...