Ir para conteúdo
  • 0

Folspa

Pergunta

Estava a ver um tutorial do Addict, porém nele não deixa claro o que eu faço com a parte do .xml.

http://www.xtibia.com/forum/topic/52720-como-fazer-uma-pvp-arena-100/

 

Lá diz apenas o que tem que se fazer, mas não onde, gostaria de saber onde eu coloco essas coisas aí.

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Postado 10/June/2007

Aquele tutorial tem mais de 6 anos. Tem maneiras mais tranquilas de se criar uma arena PVP hoje em dia.

Use o RME e selecione a ferramenta PVP (bandeira vermelha) para selecionar uma arena PVP. Depois, crie aquele script de alavanca que tem no tutorial e pronto, você tem sua arena PVP.

 

Outra maneira, sem usar o RME, é assim: crie um arquivo chamado pvparena.lua em creaturescripts/scripts com esse código:

 

local arena = {
frompos = {x=121, y=33, z=9},
topos = {x=128, y=37, z=9},
exit = {x=125, y=31, z=9} 
}

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
	if isPlayer(cid) then
		if isInArea(getPlayerPosition(cid), arena.frompos, arena.topos) then
			doTeleportThing(cid, arena.exit)
			doCreatureAddHealth(cid, getCreatureMaxHealth(cid), 65535, 256, true)
			doCreatureAddMana(cid, getCreatureMaxMana(cid))
			doRemoveConditions(cid, false)
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "[Arena] You were defeated.")
			return false
		end
	end
	return true
end

 

 

 

Em frompos você coloca a posição do canto superior esquerdo da sua arena e em topos você coloca a do canto inferior direito.

Adicione essa tag em creaturescripts.xml:

<event type="preparedeath" name="PVP_Arena" event="script" value="pvparena.lua"/>

E em login.lua (na pasta creaturescripts/scripts), procure por registerCreatureEvent, pule uma linha e adicione:

registerCreatureEvent(cid, "PVP_Arena")

E você ainda tem que fazer a alavanca como manda o tutorial do Addict. A segunda maneira é preferível porque você pode devolver o cara pra uma posição específica. Se usar a primeira, ele vai pro templo.

Link para o comentário
Compartilhar em outros sites

  • 0

Então, eu tentei uma gambiarra e até deu certo, mas acho que ficou estranho, segui o tutorial do Addict, porém usei a talkaction de teleport do outro tópico.

 

Esses meios seguram os itens dos jogadores? No caso, é para os jogadores não perderem os itens e nem ganharem exp.

Link para o comentário
Compartilhar em outros sites

  • 0

Então, eu tentei uma gambiarra e até deu certo, mas acho que ficou estranho, segui o tutorial do Addict, porém usei a talkaction de teleport do outro tópico.

 

Esses meios seguram os itens dos jogadores? No caso, é para os jogadores não perderem os itens e nem ganharem exp.

 

Claro, você morre e volta como se nada tivesse acontecido. Se você combinar os dois, nem fica com skull. Se usar só o primeiro, vai pro templo. Se usar o segundo, recebe skull. Mas em nenhum caso há nenhuma morte e a skull vai ser junto com o pz.

Link para o comentário
Compartilhar em outros sites

  • 0

Só mais uma coisa, tem como fazer algo sumir do mapa com uma talkaction? Por exemplo, tem uma parede ali, daí eu mando o comando e a parede some. Seria que nem o teleport com talkaction do outro tópico, só poderia usar esse comando de dentro de uma região específica.

Link para o comentário
Compartilhar em outros sites

  • 0

Só mais uma coisa, tem como fazer algo sumir do mapa com uma talkaction? Por exemplo, tem uma parede ali, daí eu mando o comando e a parede some. Seria que nem o teleport com talkaction do outro tópico, só poderia usar esse comando de dentro de uma região específica.

 

 

-- Mesma coisa: superior esquerdo e inferior direito
local frompos = {x=160, y=250, z=7}
local topos = {x="etc..."}

local parede_pos = {} -- Posição da parede

function onSay(cid, words, param)
	if isInArea(getThingPos(cid), frompos, topos) then
		local parede = getThingFromPos(parede_pos)
		if parede.itemid > 0 then
			doRemoveItem(parede.uid, 1)
		end
	else
		doPlayerSendCancel(cid, "You may not use this command here.")
	end
	return true
end

 

 

 

Avise/denuncie se estiver satisfeito ou comente se seu pedido ainda não tiver sido atendido.

Link para o comentário
Compartilhar em outros sites

  • 0

 

 

-- Mesma coisa: superior esquerdo e inferior direito
local frompos = {x=160, y=250, z=7}
local topos = {x="etc..."}

local parede_pos = { -- Posição das paredes
	[1] = {x=1,y=2,z=3},
	[2] = {x=3, y=4, z=6},
} 

function onSay(cid, words, param)
	if isInArea(getThingPos(cid), frompos, topos) then
		for _, ppos in ipairs(parede_pos) do
			local parede = getThingFromPos(ppos)
			if parede.itemid > 0 and getThingPos(parede.uid).stackpos > 0 then
				doRemoveItem(parede.uid, 1)
			end
		end
	else
		doPlayerSendCancel(cid, "You may not use this command here.")
	end
	return true
end

 

 

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

×
×
  • Criar Novo...