SM
globalevent

Monster War Arena System 1.0 - By SmiX

Por SmiX, 01 de jan. de 2013 em Globalevents e Spells

tibia
script
otserv
9
1.6k
SmiXS
01 de janeiro de 2013 às 14:47

Olá pessoal, hoje venho postar o meu primeiro evento do ano ^^. Ele é para ots que gostam de comemorar datas especiais, como o ano novo. Vou explicar como ele funciona:

 

Como funciona tio SmiX?

O evento só começa se tiver "x" players registrados. Como eu vejo muitos scripts de pokémon legais por ai, pensei; "Por que não adpitar um deles para Tibia"?. O evento é chamado de "Monster War Arena". Ela sai invocando monstros em uma "arena" e os players serão teleportado para ela, para killar todos os mostros. Semelhante ao "Golden Arena" da PXG.

 

Vamos instala-lo?

Não >.<

 

 

Vá em (globalevents/scripts) e crie um arquivo chamado "event1.lua" e cole o seguinte código dentro:

function doSummonMonsterInEvent(cid)
    summonMonster = getGlobalStorageValue(29474) 
    summonMonsterInPos = math.random(arenaPositionInitial, arenaPositionEnd)
    for g = 1, #monstersPositions do
        monster = doSummonCreature(levels[summonMonster][g], monstersPositions[g])
        doSendMagicEffect(getThingPos(monster), 21)
        local sto = getGlobalStorageValue(29474) == -1 and 0 or getGlobalStorageValue(29474)
         setGlobalStorageValue(29474, sto+1) 
  for _, sid in ipairs(getPlayersOnline()) do
      if getPlayerStorageValue(sid, playerstoragewararena) == 1 then
         doPlayerSendTextMessage(sid, 21, "The "..summonMonster.." level monsters appeared.")   
         doPlayerSendTextMessage(sid, 28, "The "..summonMonster.." level monsters appeared.")
      end
  end
    end
addEvent(doSummonMonsterInEvent, 30000, cid)
end

function getPlayerInEvent(cid)
        if getGlobalStorageValue(wararenastor) >= minPLayers then
           for _, poid in ipairs(getPlayersOnline()) do
               if getPlayerStorageValue(poid, playerstoragewararena) == 1 then
                  doPlayerSendTextMessage(poid, 25, "Prepare your weapons warrior. The monsters will spawn in 30 seconds.")
                  doTeleportThing(poid, math.random(arenaPositionInitial, arenaPositionEnd), false)
                  addEvent(doSummonMonsterInEvent, 30 * 1000, cid) 
               end
           end
        end
end
function onTimer(cid, interval, lastExecution) 
        setGlobalStorageValue(29474, 1)
        doBroadcastMessage("The Monster War Arena will start 5 minuts.")
        addEvent(getPlayerInEvent, 5 * 1000 * 60, cid) 
end

 

A tag:

<globalevent name="Event1" time="2:50;7:50;11:50;16:50;21:50" event="script" value="event1.lua"/>

 

Agora vamos em lib e criemos um arquivo chamado "eventArena.lua" e cole isto dentro:

wararenastor = 10101 -- Global storage
playerstoragewararena = 10102 -- Npc storage
minPLayers = 5 -- Minimo de players
arenaPositionInitial = { x = 1, y = 1, z = 1 } -- Posição da ponta inferior direita da arena
arenaPositionEnd = { x = 1, y = 1, z = 1 } -- Posição da ponta superior esquerda da arena, formando assim um quadrado; --------
																												   |	 *|
																												   |	  |
																												   |*	 |
																												   --------
local monstersPositions = {
{ x = 1, y = 1, z = 1 },
{ x = 1, y = 1, z = 1 },
{ x = 1, y = 1, z = 1 },-- posição aonde os monstros vão nescer
{ x = 1, y = 1, z = 1 },
{ x = 1, y = 1, z = 1 },
{ x = 1, y = 1, z = 1 },
{ x = 1, y = 1, z = 1 },
{ x = 1, y = 1, z = 1 },
{ x = 1, y = 1, z = 1 },
{ x = 1, y = 1, z = 1 },
}
local levels = {
  [1] = {monsters = {"Rat", "Cave rat", "Rotworm", "Assassin", "Rat", "Cave rat", "Rotworm", "Assassin", "Zombie", ""}},
																												 --/\ Caso não queira colocar os dez monstros deixe um espaço nas aspas
}

 

agora vamos em data/talkactions/scripts, crie um arquivo chamado "event1.lua" e colemos isso dentro:


function onSay(cid, words, param, channel)

if param and (param == "register" or param == "Register") then
  if getPlayerStorageValue(cid, playerstoragewararena) < 1 then
     if getGlobalStorageValue(wararenastor) > minPLayers then
        setPlayerStorageValue(cid, playerstoragewararena, 1)
        doPlayerSendTextMessage(cid, 27, "You are a registred in the event. Good luck!")
     end
  end
end 
return true
end

 

tag:

<talkaction words="/event" event="script" value="event1.lua"/>

 

Acho que eu esqueci algo, vale lembrar que eu não testei. Preciso da ajuda de vocês para isso. Obrigado.

ShyrriroS
01 de janeiro de 2013 às 15:46

Ta bom, da pra melhorar duro trabalho leva o rep.

SmiXS
01 de janeiro de 2013 às 16:38

Obrigado usuário. Quero melhorar mais e mais...

drakylucasD
01 de janeiro de 2013 às 18:56

parece legalzinho.. dica: ao invés do user colocar a posição que o bicho vai nascer, faz um random pra nascer em qualquer lugar de dentro da arena :D... dae os players num vao ficar esperando resp nas posições corretas :)

SmiXS
01 de janeiro de 2013 às 21:17

Obrigado! Mais acho que isso fica meio ruim, até pensei em colocar o math.random() nas posições mais achei melhor não.

2 semanas depois...
garepG
08 de janeiro de 2013 às 23:16

Cara não sei se coloquei errado mais eu falo a cmd aqui e ñ funfa, e ñ esta dando erro no serve.

 

 

 

worriedsmiley.gif

Editado Janeiro 8 por garep

11 meses depois...
01 de dezembro de 2013 às 12:14

Oi, Sei que já faz Muito Tempo que este Tópico Foi Adicionado no Xtibia, Mas mesmo assim vou perguntar.....

Nos Talkactions, Tenho que adicionar a Tag Nos players..? e eles falam /event Register ?

se for responda por favor!

Outra coisa Qual id Do item que precisa para Registrar... Ou melhor aonde muda, Queria por para 2160. Caso não tenha item para começar só me responda a primeira Valeu ai ! mdr.gif

ScythePhantomS
01 de dezembro de 2013 às 19:32
Parabéns brother, muito bom.

Editado Dezembro 1 por ScythePhantom

5 semanas depois...
30 de dezembro de 2013 às 08:53

Obrigado! Mais acho que isso fica meio ruim, até pensei em colocar o math.random() nas posições mais achei melhor não.

Eu acho que seria melhor msm, com math.random