DR
sistema

Arena Sobrevivencia Event System

Por drakylucas, 13 de jul. de 2012 em Mods, funções e outros

otserv
tibia
script
5.0 (1)
45
11.9k
drakylucasD
13 de julho de 2012 às 20:38

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

Editado Julho 22 por DrakyLucas

VodkartV
13 de julho de 2012 às 22:27

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+

beddyB
13 de julho de 2012 às 22:41

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

drakylucasD
13 de julho de 2012 às 23:43

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

SubwatS
14 de julho de 2012 às 00:08

aqui nao funcionou.

 

uso o executavel do mix ot

drakylucasD
14 de julho de 2012 às 01:17

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

Editado Julho 14 por DrakyLucas

SubwatS
14 de julho de 2012 às 22:57

ta dando a msma coisa o.O

drakylucasD
15 de julho de 2012 às 13:47

se vc postasse o erro, ajudaria ¬¬

RHCPR
16 de julho de 2012 às 14:27

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

MatheusEnjoyM
16 de julho de 2012 às 14:30

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

Rep+

Vou testar depois.

drakylucasD
16 de julho de 2012 às 15:56

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

16 de julho de 2012 às 15:58

quem é tk?

caoticC
16 de julho de 2012 às 16:10

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

drakylucasD
16 de julho de 2012 às 16:22

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

KennyConradK
20 de julho de 2012 às 09:54

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