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 ![]()





info
Grupo: Visconde
Registrado: 30/11/12
Posts: 252
Reputação: +13
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..
Valendo REP+
No aguardo, muito obrigado pela atenção.
Editado Abril 16 por FenixBorges