Ir para conteúdo
  • 0

Morrer em tal área e mandar ao templo.


Lumus

Pergunta

Olá, alguém poderia fazer algo assim:

o jogador está lutando com um monstro, e morre para o monstro, ao morrer, ele não perde nada, loot, xp, nada, e é teleportado ao templo dando a msg que ele perde o combate. Isso, dentro de uma área definida.

 

Agradeço a todos.

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Testei aqui e funcionando 100% :

local arena = {
	frompos = {x = 137, y = 380, z = 7},
	topos = {x = 154, y = 403, z = 7},
}

function isInRange(pos, fromPos, toPos)
  return pos.x >= fromPos.x and pos.y >= fromPos.y and pos.z >= fromPos.z and pos.x <= toPos.x and pos.y <= toPos.y and pos.z <= toPos.z
end

function onPrepareDeath(player, killer, mostDamageKiller)

	if player:isPlayer() and killer:isMonster() then
		local ppos = player:getPosition()
		if isInRange(ppos, arena.frompos, arena.topos) then
			player:teleportTo(player:getTown():getTemplePosition())
    		        player:addHealth(player:getMaxHealth())
    		        player:addMana(player:getMaxMana())
    		        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You were killed by '.. killer:getName() ..'.')
		end
	end
	return true
end

function onLogin(player)
	player:registerEvent("MArena")
	return true
end

	<event type="preparedeath" name="MArena" script="arquivo.lua"/>
	<event type="login" name="verf_MArena" script="arquivo.lua"/>
Editado por ScreaM
Link para o comentário
Compartilhar em outros sites

  • 0

amigo não tem muito segredo a forma mais simples disso e você editar o mapa na área do Boss você coloca zona pvp enf. mais pratico do que fazer script.

Link para o comentário
Compartilhar em outros sites

  • 0

amigo não tem muito segredo a forma mais simples disso e você editar o mapa na área do Boss você coloca zona pvp enf. mais pratico do que fazer script.

Este é o problema... no tfs 1.1 isso não funciona.. :(

Link para o comentário
Compartilhar em outros sites

  • 0

Acredito ser um script simples, ou pelo menos não vi nenhum possivel problema.

no caso

 

No mapa coloque ao redor da arena coloque actions nos tiles com o seguinte id : 46645

Em movements/movements.xml adicione as linhas

    <movevent type="StepIn" actionid="46645" event="script" value="arena.lua"/>
    <movevent type="StepOut" actionid="46645" event="script" value="arena.lua"/>    

Crie um script com o nome de Arena dentro da pasta movements scripts com o nome de arena.lua
dentro cole o script :

function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
doSetCreatureDropLoot(cid, false)
doSetCreatureDropLoot(cid, false)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce entrou na arena.")
          return true
    end
function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
doSetCreatureDropLoot(cid, true)
doSetCreatureDropLoot(cid, true)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce saiu da arena.")
        return true
    end

Bom uso.

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

  • 0

Aparece alguma mensagem quando entra ou sai da zone? para ser mais especifico uma das seguintes mensagens:

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce entrou na arena.")
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce saiu da arena.")
Link para o comentário
Compartilhar em outros sites

  • 0

 

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
local from,to =  {x = 154, y = 68, z = 7},{x = 160, y = 70, z = 7}
if isPlayer(cid) and isMonster(lastHitKiller[1]) and isInRange(getCreaturePosition(cid), from, to) then
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
doCreatureAddHealth(cid, getCreatureMaxHealth(cid), 65535, 256, true)
doCreatureAddMana(cid, getCreatureMaxMana(cid))
doRemoveConditions(cid, false)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce saiu da arena.")
return false
end
return true
end
Link para o comentário
Compartilhar em outros sites

  • 0

Estive esses dois dias tentando pensar em alguma coisa e não obtive sucesso, por isso nao retornei a mensagem.

Mas parece que a solução do Vodkart dará certo.

 

Caso a duvida esteja sanada marque a Solução como melhor resposta para que seja movido o topico.

Link para o comentário
Compartilhar em outros sites

  • 0
function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
local from,to =  {x = 154, y = 68, z = 7},{x = 160, y = 70, z = 7}
if isPlayer(cid) and isMonster(lastHitKiller[1]) and isInRange(getCreaturePosition(cid), from, to) then
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
doCreatureAddHealth(cid, getCreatureMaxHealth(cid), 65535, 256, true)
doCreatureAddMana(cid, getCreatureMaxMana(cid))
doRemoveConditions(cid, false)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce saiu da arena.")
return false
end
return true
end

Nada....

Eu tenho um que funciona perfeitamente só que só para players vs players, veja:

local arena = {
	frompos = {x = 1000, y = 1009, z = 7},
	topos = {x = 1011, y = 1019, z = 7},
	exitpos = {x = 1013, y = 1015, z = 7}
}

function onPrepareDeath(player, creature, lastHitKiller, mostDamageKiller)
	if player:isPlayer() then
		local ppos = player:getPosition()
		if isInRange(ppos, arena.frompos, arena.topos) then
			local maxhp = player:getMaxHealth()
			player:addHealth(maxhp)
			addEvent(doCreatureAddHealth, 100, player:getId(), maxhp)
		end
		if isInRange(ppos, arena.frompos, arena.topos) then
			player:teleportTo(arena.exitpos)
			return true
		end
	end
	return true
end

function onLogin(player)
	player:registerEvent("arena")
	return true
end

esqueci de citar, tfs 1.1 D:

Link para o comentário
Compartilhar em outros sites

  • 0

Nada....

Eu tenho um que funciona perfeitamente só que só para players vs players, veja:

local arena = {
	frompos = {x = 1000, y = 1009, z = 7},
	topos = {x = 1011, y = 1019, z = 7},
	exitpos = {x = 1013, y = 1015, z = 7}
}

function onPrepareDeath(player, creature, lastHitKiller, mostDamageKiller)
	if player:isPlayer() then
		local ppos = player:getPosition()
		if isInRange(ppos, arena.frompos, arena.topos) then
			local maxhp = player:getMaxHealth()
			player:addHealth(maxhp)
			addEvent(doCreatureAddHealth, 100, player:getId(), maxhp)
		end
		if isInRange(ppos, arena.frompos, arena.topos) then
			player:teleportTo(arena.exitpos)
			return true
		end
	end
	return true
end

function onLogin(player)
	player:registerEvent("arena")
	return true
end
esqueci de citar, tfs 1.1 D:

 

A função onPrepareDeath está fazendo duas vezes a mesma pergunta:

 

function onPrepareDeath(player, creature, lastHitKiller, mostDamageKiller)
	if player:isPlayer() then
		local ppos = player:getPosition()
		if isInRange(ppos, arena.frompos, arena.topos) then
			local maxhp = player:getMaxHealth()
			player:addHealth(maxhp)
			addEvent(doCreatureAddHealth, 100, player:getId(), maxhp)
			player:teleportTo(arena.exitpos)
		end
	end
	return true
end
Link para o comentário
Compartilhar em outros sites

  • 0

 

A função onPrepareDeath está fazendo duas vezes a mesma pergunta:

 

function onPrepareDeath(player, creature, lastHitKiller, mostDamageKiller)
	if player:isPlayer() then
		local ppos = player:getPosition()
		if isInRange(ppos, arena.frompos, arena.topos) then
			local maxhp = player:getMaxHealth()
			player:addHealth(maxhp)
			addEvent(doCreatureAddHealth, 100, player:getId(), maxhp)
			player:teleportTo(arena.exitpos)
		end
	end
	return true
end

Esse script que postei funciona perfeitamente... postei ele como exemplo pro que estou precisando..

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...