Ir para conteúdo

Arena Sobrevivencia Event System


Posts Recomendados

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 por DrakyLucas
Link para o comentário
Compartilhar em outros sites

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 por DrakyLucas
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...