Ir para conteúdo

Perda De Xp Na Arena Pvp


GodBz

Posts Recomendados

Galera to com um problema ja a um tempo e ainda não consegui achar solução, é bem simples e acho que podera ser resolvido facilmente.

È o seguinte: tenho uma arena pvp em meu server, e ela funciona perfeitamente, porem eu sempre faço invasões de monstros nela, e quando os players morrem pra monstros eles perdem XP e Skills, isso não acontece quando um player mata o outro, mais acontece quando o player morre pra algum monstro.

Fico muito grato pela ajuda, o que eu gostaria é que os players não perdecem xp mesmo morrendo pra monstros.

Informações do server: TFS 0.2.0.0 / 8.40

Note: trocar a versão do server não é viavel

Att

Link para o comentário
Compartilhar em outros sites

Amigo, eu Não sou nada Profissional, mas acontece que Arena PVP

ta programada para player morrer para Player e Não perder nada,

Agora se quer fazer Lugar para Raids, aconselho fazer uma Ilha De eventos.

 

:button_ok:

Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...

tenta fazer um creatureevent, pra quando um player morre pra um determinado monstro ele volte pro templo

 

e esses monstros deveriam ter apenas nas suas invasoes

 

nao eskece de colokar a tag no monstro e no login.lua

Link para o comentário
Compartilhar em outros sites

Não é isso que eu quero amigo... vc entendeu errado...

Nos meus eventos eu quero a liberdade de por qualquer monstro, e isso não é nenhum absurdo pois eu ja trabalhei em um server em que se morria na arena pra monstro criado com /m e não se perdia xp!

Sera que ninguem vai receber meu REP++??

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

Tente pelo map editor!

Assim.. você vai na zona desejada, e usa o PVP Zone Tool.

Uma imagem do PVP Zone Tool:

1278446906-U248410.png

 

 

Se não funcionar, poste aqui o Script da arena para que possamos ajuda-lo.

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

GodBz,


Normalmente o script de uma Arena PVP contém uma verificação para saber se o atacante era um jogador ou uma criatura,

Como você pode ver no exemplo abaixo:

 

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

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)

if isPlayer(cid) then
if isInArea(getPlayerPosition(cid), arena.frompos, arena.topos) then
	if doCreatureAddHealth(cid, getCreatureMaxHealth(cid) - getCreatureHealth(cid), TRUE) == TRUE then
		if doTeleportThing(cid, arena.exit) == TRUE then
			doSendMagicEffect(arena.exit, 10)
			doPlayerSendTextMessage(mostDamageKiller,MESSAGE_STATUS_CONSOLE_BLUE,'[ARENA] You have defeated '..getPlayerName(cid)..'!')
			doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,'[ARENA] You where defeated by '..getPlayerName(mostDamageKiller)..'!')
			return FALSE
		end
	end
end
end
return TRUE
end

 

No caso a verificação de jogador é representada pela função isPlayer(cid), se você quer que a sua "arena" seja universal tanto para MVP e PVP, basta retirar essa estrutura de condição que contém a função. No caso o script para a "arena" ficaria assim:

 

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

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)

if isInArea(getPlayerPosition(cid), arena.frompos, arena.topos) then
if doCreatureAddHealth(cid, getCreatureMaxHealth(cid) - getCreatureHealth(cid), TRUE) == TRUE then
	if doTeleportThing(cid, arena.exit) == TRUE then
		doSendMagicEffect(arena.exit, 10)
		doPlayerSendTextMessage(mostDamageKiller,MESSAGE_STATUS_CONSOLE_BLUE,'[ARENA] You have defeated '..getPlayerName(cid)..'!')
		doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,'[ARENA] You where defeated by '..getPlayerName(mostDamageKiller)..'!')
		return FALSE
	end
end
end
return TRUE
end

 

Isso fará o que você quer,

O script acima foi só uma exemplificação, contém muitos erros. Não o copie para seu servidor.


 

Cya

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

  • 2 weeks later...

Oneshot sua linha de raciocinio foi perfeita, e acho q isso quase resolve o problema, porém não sei onde localizar esse script, ja tinha escutado falar de um script para arena, mais a maior parte dos server isso ja é altomatico (eu acho) e nem existe um script, bom acho q ja vi praticamente todos meus scripts e naum vi nada parecido com isso ai, se souber me dizer onde acha-lo (tfs 0.2) fico mt grato..

Att

GodBz,


Normalmente o script de uma Arena PVP contém uma verificação para saber se o atacante era um jogador ou uma criatura,

Como você pode ver no exemplo abaixo:

 

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

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)

if isPlayer(cid) then
if isInArea(getPlayerPosition(cid), arena.frompos, arena.topos) then
	if doCreatureAddHealth(cid, getCreatureMaxHealth(cid) - getCreatureHealth(cid), TRUE) == TRUE then
		if doTeleportThing(cid, arena.exit) == TRUE then
			doSendMagicEffect(arena.exit, 10)
			doPlayerSendTextMessage(mostDamageKiller,MESSAGE_STATUS_CONSOLE_BLUE,'[ARENA] You have defeated '..getPlayerName(cid)..'!')
			doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,'[ARENA] You where defeated by '..getPlayerName(mostDamageKiller)..'!')
			return FALSE
		end
	end
end
end
return TRUE
end

 

No caso a verificação de jogador é representada pela função isPlayer(cid), se você quer que a sua "arena" seja universal tanto para MVP e PVP, basta retirar essa estrutura de condição que contém a função. No caso o script para a "arena" ficaria assim:

 

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

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)

if isInArea(getPlayerPosition(cid), arena.frompos, arena.topos) then
if doCreatureAddHealth(cid, getCreatureMaxHealth(cid) - getCreatureHealth(cid), TRUE) == TRUE then
	if doTeleportThing(cid, arena.exit) == TRUE then
		doSendMagicEffect(arena.exit, 10)
		doPlayerSendTextMessage(mostDamageKiller,MESSAGE_STATUS_CONSOLE_BLUE,'[ARENA] You have defeated '..getPlayerName(cid)..'!')
		doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,'[ARENA] You where defeated by '..getPlayerName(mostDamageKiller)..'!')
		return FALSE
	end
end
end
return TRUE
end

 

Isso fará o que você quer,

O script acima foi só uma exemplificação, contém muitos erros. Não o copie para seu servidor.


 

Cya

Link para o comentário
Compartilhar em outros sites

GodBz

Ops, falha minha,

O script se localiza na pasta data/creaturescripts/scripts.

 

Não sei o nome, mas ele normalmente vem como pvparena.lua.

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

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...