Arena Sobrevivencia Event System

drakylucas

Draky Scripter
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 12/09/10Posts: 416Char no Tibia: Draky Lucas

Bom, esse sistema é requisitado por muitos donos de servidores..

sempre quando pedem as pessoas fazem e enviam por PM, por ser meio dificil...

 

Essa é minha versão desse sistema :D

Créditos 90% Draky Lucas (eu)

10% Vodkart (uma função que utilizei e me explicou como funcionaria o sistema, q os players nao sabem explica direito kk)

 

O que ele é?

o GM do servidor digita /arena X, onde o X é o numero de jogadores necessarios para o evento começar..

supondo que o GM digitou /arena 5:

o evento criaria um teleport na posição configurada;

esperaria 5 players entrarem nesse teleport (não contando os GM's.. também configuravel);

assim que o 5º player entrasse, o evento esperaria um delay (configuravel) e sumonaria os bixos de cada level do evento (monstros e leveis configuraveis), e assim que criasse os monstros, contaria o mesmo delay varias veses para ir avançando de nivel (e criando mais monstros), os que sobreviverem ao ultimo nivel (configuravel) ganham premios (configuraveis). Não se morre no evento e não se adquire loot dos monstros, mas ganha exp dos monstros também!

[SIM, É CONFUSO DE ENTENDER.. COLOQUE NO SERVIDOR E VEJA VOCÊ MESMO]

 

TESTADO COM The Lost Server 8.6

(Caso dê erro de storage, é pq não sei se no TFS/Baiak tem as funçoes setStorage com esse nome, mas me avise que eu arrumo a versão TFS/BAIAK)

 

Instalando o sistema:

Mapa:

 

arenaz.gif

 

Script:

na pasta onde fica o executavel do server, há uma pasta chamada Mods, entre nela e crie um arquivo chamado arena.xml e nele coloque isso:

[PS: Editado 01:39 - 14/07/2012 por correção de um erro ortográfico do forum que comeu um parenteses do script]

<?xml version="1.0" encoding="UTF-8"?>
<mod name="Arena" version="1.0" author="DrakyLucas" contact="XTibia" enabled="yes">
<config name="arena_config"><![CDATA[
 config = {
  delay = 60, -- tempo de um level para o outro
  posicaoPlayer = {x = 37,y = 96,z = 7}, -- posição q o player vai cair dps de entra no TP
  posicaoArena = {{x = 35,y = 94,z = 7},{x = 42,y = 99,z = 7}},
  premio = {
  {2160,70},
  {2152,50},
  }, -- ID, Quantidade... só aceita de 1 a 100 por vez, e você pode adicionar quantos itens quiser.
  storage = 15444, -- não mecha..
  posicaoTp = {x = 37, y = 91, z = 7}, -- posicao que o teleporte vai aparecer
  acesso = 3, -- acesso  minimo para ser ignorado pelo evento, e o mesmo acesso para poder inicializa-lo
 }
 -- você pode adicionar quantos leveis desejar
 -- [NumeroDoLevel] = {{"Nome",Quantidade},{"Nome",Quantidade},{"Nome",Quantidade},{"Nome",Quantidade},{"Nome",Quantidade}},
 leveis = {
 [1] = {{"Dragon",5}},
 [2] = {{"Dragon",5},{"Dragon Lord",2}},
 [3] = {{"Dragon Lord",5}},
 [4] = {{"Demodras",2},{"Demon",1}},
 [5] = {{"Demon",5},{"Orshabaal",1},{"Ferumbras",1}},
 }

  function abrirTeleport(n)
doItemSetAttribute(doCreateItem(1387, config.posicaoTp), "aid", 2941) -- cria o tp e deixa aid 2941
doBroadcastMessage("O Evento arena vai começar! teleport foi aberto e faltam ".. n .. " pessoas para o evento iniciar!")
doSetStorage(config.storage, n)
  end

  function fecharTPeAguardarEvento()
doRemoveItem(getTileItemById(config.posicaoTp, 1387).uid,100)
doBroadcastMessage("O evento ja concluio " .. #getPlayersInArena() .. " players e começará em " .. config.delay .. " segundos!")
addEvent(evento,config.delay*1000,1)
  end


  function HaveCreatureArena(area, remove, clean) -- função do Vodkart
		for x = area[1].x - 1, area[2].x + 1 do
			for y = area[1].y - 1, area[2].y + 1 do
				local pos = {x=x, y=y, z=area[1].z}
				local m = getTopCreature(pos).uid
				if remove ~= false and m ~= 0 and isMonster(m) then doRemoveCreature(m) end
				if clean ~= false then doCleanTile(pos, false) end
			end
  end
  end
  function resetEvento()
doSetStorage(config.storage, -1)
  end

  function criarMonstros(lv)
local monstro = leveis[lv]
local area = {config.posicaoArena[1],config.posicaoArena[2]}
for i = 1,#monstro do
 for k=1,monstro[i][2]do
	pos = {x=math.random(area[1].x,area[2].x), y=math.random(area[1].y,area[2].y), z=area[1].z}
  monstrinho = doCreateMonster(monstro[i][1], pos)
  registerCreatureEvent(monstrinho, "removerCorpse")
 end
end
  end

  function evento(i)
if #getPlayersInArena() == 0 then
 doBroadcastMessage("Ninguem sobreviveu a arena =/")
 doBroadcastMessage("EVENTO TERMINADO!")
 HaveCreatureArena({config.posicaoArena[1],config.posicaoArena[2]}, true, true) -- remove monstros, itens da arena
 resetEvento()
 return true
end

if i == (#leveis +1) then
HaveCreatureArena({config.posicaoArena[1],config.posicaoArena[2]}, true, true)
  doBroadcastMessage("Evento finalizado, " .. #getPlayersInArena() .. " sobreviveram ao evento!")
 for _, pid in ipairs(getPlayersInArena()) do
  doPlayerSendTextMessage(pid,22,"Parabens, você sobreviveu ao evento!")
  addItens(pid)
  doTeleportThing(pid,getTownTemplePosition(getPlayerTown(pid)))
 end
  resetEvento()
  return true
end
 for _, pid  in ipairs(getPlayersInArena()) do
  doPlayerSendTextMessage(pid,22,"GoGo Nivel " .. i .. " !!!")
 end
criarMonstros(i)
addEvent(evento,config.delay*1000,i+1)
  end
  function addItens(pid)
for i=1,#config.premio do
 doPlayerAddItem(pid,config.premio[i][1],config.premio[i][2])
end
doPlayerSendTextMessage(pid,22,"Parabens, voce recebeu seus premios!")
  end

  function getPlayersInArena()
  local t = {}
for _, pid in pairs(getPlayersOnline()) do
 if getPlayerAccess(pid) < config.acesso then
 if isInRange(getCreaturePosition(pid), config.posicaoArena[1], config.posicaoArena[2]) then
					table.insert(t, pid)
 end
 end
end
  return t
  end

]]></config>
<talkaction words="/arena" event="buffer"><![CDATA[
 domodlib('arena_config')
 if getPlayerAccess(cid) < config.acesso then
  return doPlayerSendCancel(cid,"Voce nao tem acesso para esse comando")
 end
 if tonumber(param) ~= nil then -- se o parametro é numerico
  if tonumber(param) > 0 then
doSetStorage(config.storage, param)
abrirTeleport(param)
  end
 else
 doPlayerSendTextMessage(cid,19,"Digite /arena e um numero.. \n exemplo: \n/arena 5")
 end

]]></talkaction>

<movevent type="StepIn" actionid="2941" event="script"><![CDATA[
	domodlib('arena_config')
		 if getPlayerAccess(cid) > config.acesso then doTeleportThing(cid, config.posicaoPlayer) return false end -- GM nao conta
doSetStorage(config.storage,getStorage(config.storage) - 1)
doTeleportThing(cid, config.posicaoPlayer)
registerCreatureEvent(cid, "naoAtacarPlayer")
registerCreatureEvent(cid, "morrerNaArena")
if getStorage(config.storage) <= 0 then
fecharTPeAguardarEvento()
end
return true	  
]]></movevent>
<event type="login" name="VerSeTaNaArenaEExpulsa" event="script"><![CDATA[
domodlib('arena_config')
if isInRange(getCreaturePosition(cid), config.posicaoArena[1], config.posicaoArena[2]) then
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
end
return true  
]]></event>
<event type="combat" name="naoAtacarPlayer" event="script"><![CDATA[
			 domodlib('arena_config')
			 if isPlayer(cid) and isPlayer(target) then
				   if isInRange(getPlayerPosition(cid), config.posicaoArena[1], config.posicaoArena[2]) and isInRange(getPlayerPosition(target), config.posicaoArena[1], config.posicaoArena[2]) then
							doPlayerSendCancel(cid, "Nao ataque seus amigos.")
							return false
					end
			end
			return true
]]></event>
<event type="death" name="removerCorpse" event="script"><![CDATA[
			 domodlib('arena_config')
 doCreatureSay(cid,"Ninguem terá meu loot! Buaahahahha",1)
 pos = getCreaturePosition(cid)
 addEvent(doCleanTile,1,pos, false)
			return true
]]></event>
<event type="statschange" name="morrerNaArena" event="script"><![CDATA[
			 domodlib('arena_config')
 if isInRange(getPlayerPosition(cid), config.posicaoArena[1], config.posicaoArena[2]) then
 if type == STATSCHANGE_HEALTHLOSS then
  if isPlayer(cid) then
							if value >= getCreatureHealth(cid) then
	 doTeleportThing(cid,getTownTemplePosition(getPlayerTown(cid)))
	 doPlayerSendTextMessage(pid,22,"Você morreu na arena =/.. veja pelo lado positivo, você nao perdeu nada!")
	 doCreatureAddHealth(cid,getCreatureMaxHealth(cid) - getCreatureHealth(cid))
	return false
	end
					end
  end
			end
			return true
]]></event>
</mod>

 

 

 

 

pronto, sistema adicionado.. agora vamos configurar:

config = {

delay = 10, -- tempo de um level para o outro

posicaoPlayer = {x = 37,y = 96,z = 7}, -- posição q o player vai cair dps de entra no TP

posicaoArena = {{x = 35,y = 94,z = 7},{x = 42,y = 99,z = 7}},

premio = {

{2160,70},

{2152,50},

}, -- ID, Quantidade... só aceita de 1 a 100 por vez, e você pode adicionar quantos itens quiser.

storage = 15444, -- não mecha..

posicaoTp = {x = 37, y = 91, z = 7}, -- posicao que o teleporte vai aparecer

acesso = 3, -- acesso minimo para ser ignorado pelo evento, e o mesmo acesso para poder inicializa-lo

}

-- você pode adicionar quantos leveis desejar

-- [NumeroDoLevel] = {{"Nome",Quantidade},{"Nome",Quantidade},{"Nome",Quantidade},{"Nome",Quantidade},{"Nome",Quantidade}},

leveis = {

[1] = {{"Dragon",5}},

[2] = {{"Dragon",5},{"Dragon Lord",2}},

[3] = {{"Dragon Lord",5}},

[4] = {{"Demodras",2},{"Demon",1}},

[5] = {{"Demon",5},{"Orshabaal",1},{"Ferumbras",1}},

}

 

Tempo entre cada level

Posição que está em branco na foto

Posições que estão em azul na foto

Premios (copie e cole como está, mude valores, adicione mais itens.. não há um limite de premios)

Posição que o TP aparecerá para os players entrarem no event

Acesso minimo para dar /arena X

Monstros de cada Level (Obs: você pode adicionar quantos leveis desejar para o evento)

 

 

 

Possiveis Erros:

 

caso dê erro citado por algumas pessoas no forum (logo abaixo)

20/07/2012 09:52:50] > Loading event.xml...[Error - ScriptingManager::loadFromXml] Cannot load mod mods/event.xml

[20/07/2012 09:52:50] Line: 6, Info: Input is not proper UTF-8, indicate encoding !

 

[20/07/2012 09:52:50] Bytes: 0xE7 0xE3 0x6F 0x20

 

é porque vocês utilizam uma distro diferente da minha e incompativel com UTF-8 então mudem

<?xml version="1.0" encoding="UTF-8"?>

por

<?xml version="1.0" encoding="ISO-8859-1"?>

 

e tudo deverá funcionar.

Correção do erro feita pelo usuario KUNGLOW

obrigado pela atenção

 

 

 

Obrigado

:D.. EXCLUSIVO XTIBIA

Vodkart

Sumus Validus
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 21/05/10Posts: 3406Gênero: Masculino

até que fez rápido o sistema

qndo eu tiver em casa vou testar, gostei da parte de remover o corpse do monster xD

parabéns rep+

bossisg.png

beddy

O fais TUDO...
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/12/06Posts: 355Gênero: Masculino

Muito massa cara, acho que vou implementar para fazer um mini rank por DB de ganhadores do evento! Muito massa!

a.png

drakylucas

Draky Scripter
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 12/09/10Posts: 416Char no Tibia: Draky Lucas

comecei a faze la pas 2 e poco (hr q flei com vc vodk).. fiz ateh as 5 e poco, parei pa i pa academia, voltei e terminei de ajeita os detalhes tals, dae postei :p

 

dicas de outros sistemas plz? :D

Subwat

GAUCHO MACHO
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 27/07/09Posts: 1516Char no Tibia: Gean Riot

aqui nao funcionou.

 

uso o executavel do mix ot

Entrem Server online desde o dia 22/02/2013 Monster 24HORAS dedicado!

IP: monster24h.com

PROTOCOL:8.60

PORT:7171

 

RATES:

Exp: 9999x~10x

Skills:800x

Magic:200x

Loot:2x

Pvp-e Advanced: 1.1x Ao matar players de level semelhante.

 

Accounts Pelo Account Manager!

drakylucas

Draky Scripter
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 12/09/10Posts: 416Char no Tibia: Draky Lucas

EDIT: Achei o erro (mais o erro foi do fórum, nao meu ¬¬)..

eu salvei uma copia do meu script (q enviei no forum) e testei copiando e colando do forum...

o forum apagou um parenteses na linha 122 ¬¬...

 

é só colocar o parenteses que vai funciona.. eu atualizei aqui, copia dinovo o script e testa agora subwat

 

 

 

EEEEEEEEEEEE Xtibianos em geral, vale lembra que só contam jogadores no evento que não são acesso acima de XX (definidos na configuração do mesmo), entao se o teleport for criado e você entrar com o GM, não irá funcionar mesmo.. crie um char normal e teste :p

Subwat

GAUCHO MACHO
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 27/07/09Posts: 1516Char no Tibia: Gean Riot

ta dando a msma coisa o.O

Entrem Server online desde o dia 22/02/2013 Monster 24HORAS dedicado!

IP: monster24h.com

PROTOCOL:8.60

PORT:7171

 

RATES:

Exp: 9999x~10x

Skills:800x

Magic:200x

Loot:2x

Pvp-e Advanced: 1.1x Ao matar players de level semelhante.

 

Accounts Pelo Account Manager!

drakylucas

Draky Scripter
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 12/09/10Posts: 416Char no Tibia: Draky Lucas

se vc postasse o erro, ajudaria ¬¬

RHCP

avatar
Cavaleiro
Cavaleiro

INFOS

Grupo: CavaleiroRegistrado: 27/07/07Posts: 178

Não há como fazer ele funcionar por global event? ele poderia verificar o dia e automaticamente, fazer meio que o comando com um limite máximo de pessoas...

 

Bem, só dei dica xD

MatheusEnjoy

Criminal Monkey
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 07/08/11Posts: 301

Se foi você mesmo que escreveu o script parabéns, precisamos de mais iniciativas assim.

Rep+

Vou testar depois.

ipCIakq.png

kwutpVE.png

 

Membro desde 12/2012

Coordenador desde 08/2012

Colaborador desde 08/2011

http://www.matheusvieira.info/

drakylucas

Draky Scripter
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 12/09/10Posts: 416Char no Tibia: Draky Lucas

vlw... e sim, fui eu.. nao faço plagios....

 

ee galera se vcs duvidam q posso ser bom, eu e + 2 colegas (thalia e tk) vamos começar um projeto... logo + postarei teasers de sistemas feitos por nós :D

Demonbholder

avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 13/10/08Posts: 1551Char no Tibia: Demonbholder

quem é tk?

Oie :D

caotic

Afinal de contas,sou um mordomo e tanto
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 04/03/11Posts: 1599Char no Tibia: No Have

Muito e um script bem legal a ideia esta fastantica.

Uso e abuso de de criaçoes funçoes.

 

Fico grandinho mais esta otimo.

So pela quantidade de verificaçoes nas posiçoes podem causar um pouco de laag

 

Mais esta Incrivell.

Parabens

drakylucas

Draky Scripter
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 12/09/10Posts: 416Char no Tibia: Draky Lucas

quem é tk?

 

um amigo nosso... parça de old times :D

ele num manja qse nd de scripting, mas sabe mapear bem e também da boas ideias pos servidores, alem do mais oq mais falta nesse mundo é criatividade, e ele tem muita :D

KennyConrad

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/08/11Posts: 470Char no Tibia: ...

aff adorei o sistema mais comigo não funciono

da esse erro:

 

[20/07/2012 09:52:50] > Loading event.xml...[Error - ScriptingManager::loadFromXml] Cannot load mod mods/event.xml

[20/07/2012 09:52:50] Line: 6, Info: Input is not proper UTF-8, indicate encoding !

[20/07/2012 09:52:50] Bytes: 0xE7 0xE3 0x6F 0x20

 

ajuda ae