|
|
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
local _detalhes = _G._detalhes
|
|
|
|
|
local _tempo = time()
|
|
|
|
|
local _
|
|
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
--> local pointers
|
|
|
|
|
|
|
|
|
|
local _table_insert = table.insert --lua local
|
|
|
|
|
local _ipairs = ipairs --lua local
|
|
|
|
|
local _pairs = pairs --lua local
|
|
|
|
|
local _math_floor = math.floor --lua local
|
|
|
|
|
local _time = time --lua local
|
|
|
|
|
|
|
|
|
|
local _GetTime = GetTime --api local
|
|
|
|
|
|
|
|
|
|
local timeMachine = _detalhes.timeMachine --details local
|
|
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
--> constants
|
|
|
|
|
local _tempo = _time()
|
|
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
--> core
|
|
|
|
|
|
|
|
|
|
timeMachine.ligada = false
|
|
|
|
|
|
|
|
|
|
local calc_for_pvp = function (self)
|
|
|
|
|
for tipo, tabela in _pairs (self.tabelas) do
|
|
|
|
|
for nome, jogador in _ipairs (tabela) do
|
|
|
|
|
if (jogador) then
|
|
|
|
|
if (jogador.last_event+3 > _tempo) then --> okey o jogador esta dando dps
|
|
|
|
|
if (jogador.on_hold) then --> o dps estava pausado, retornar a ativa
|
|
|
|
|
jogador:HoldOn (false)
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
if (not jogador.on_hold) then --> n�o ta pausado, precisa por em pausa
|
|
|
|
|
--> verifica se esta castando alguma coisa que leve + que 3 segundos
|
|
|
|
|
jogador:HoldOn (true)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local calc_for_pve = function (self)
|
|
|
|
|
for tipo, tabela in _pairs (self.tabelas) do
|
|
|
|
|
for nome, jogador in _ipairs (tabela) do
|
|
|
|
|
if (jogador) then
|
|
|
|
|
if (jogador.last_event+10 > _tempo) then --> okey o jogador esta dando dps
|
|
|
|
|
if (jogador.on_hold) then --> o dps estava pausado, retornar a ativa
|
|
|
|
|
jogador:HoldOn (false)
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
if (not jogador.on_hold) then --> n�o ta pausado, precisa por em pausa
|
|
|
|
|
--> verifica se esta castando alguma coisa que leve + que 10 segundos
|
|
|
|
|
jogador:HoldOn (true)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function timeMachine:Core()
|
|
|
|
|
_tempo = _time()
|
|
|
|
|
_detalhes._tempo = _tempo
|
|
|
|
|
_detalhes:UpdateGears()
|
|
|
|
|
|
|
|
|
|
if (_detalhes.is_in_battleground or _detalhes.is_in_arena) then
|
|
|
|
|
return calc_for_pvp (self)
|
|
|
|
|
else
|
|
|
|
|
return calc_for_pve (self)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function timeMachine:Ligar()
|
|
|
|
|
self.atualizador = self:ScheduleRepeatingTimer ("Core", 1)
|
|
|
|
|
self.ligada = true
|
|
|
|
|
self.tabelas = {{}, {}} --> 1 dano 2 cura
|
|
|
|
|
|
|
|
|
|
local danos = _detalhes.tabela_vigente[1]._ActorTable
|
|
|
|
|
for _, jogador in _ipairs (danos) do
|
|
|
|
|
if (jogador.dps_started) then
|
|
|
|
|
jogador:RegistrarNaTimeMachine()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function timeMachine:Desligar()
|
|
|
|
|
self.ligada = false
|
|
|
|
|
self.tabelas = nil
|
|
|
|
|
if (self.atualizador) then
|
|
|
|
|
self:CancelTimer (self.atualizador)
|
|
|
|
|
self.atualizador = nil
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function timeMachine:Reiniciar()
|
|
|
|
|
table.wipe (self.tabelas[1])
|
|
|
|
|
table.wipe (self.tabelas[2])
|
|
|
|
|
self.tabelas = {{}, {}} --> 1 dano 2 cura
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function _detalhes:DesregistrarNaTimeMachine()
|
|
|
|
|
if (not timeMachine.ligada) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local timeMachineContainer = timeMachine.tabelas [self.tipo]
|
|
|
|
|
local actorTimeMachineID = self.timeMachine
|
|
|
|
|
|
|
|
|
|
if (timeMachineContainer [actorTimeMachineID] == self) then
|
|
|
|
|
self:TerminarTempo()
|
|
|
|
|
self.timeMachine = nil
|
|
|
|
|
timeMachineContainer [actorTimeMachineID] = false
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function _detalhes:RegistrarNaTimeMachine()
|
|
|
|
|
if (not timeMachine.ligada) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local esta_tabela = timeMachine.tabelas [self.tipo]
|
|
|
|
|
_table_insert (esta_tabela, self)
|
|
|
|
|
self.timeMachine = #esta_tabela
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function _detalhes:ManutencaoTimeMachine()
|
|
|
|
|
for tipo, tabela in _ipairs (timeMachine.tabelas) do
|
|
|
|
|
local t = {}
|
|
|
|
|
local removed = 0
|
|
|
|
|
for index, jogador in _ipairs (tabela) do
|
|
|
|
|
if (jogador) then
|
|
|
|
|
t [#t+1] = jogador
|
|
|
|
|
jogador.timeMachine = #t
|
|
|
|
|
else
|
|
|
|
|
removed = removed + 1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
timeMachine.tabelas [tipo] = t
|
|
|
|
|
|
|
|
|
|
if (_detalhes.debug) then
|
|
|
|
|
--_detalhes:Msg ("timemachine r"..removed.."| e"..#t.."| t"..tipo)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function _detalhes:Tempo()
|
|
|
|
|
|
|
|
|
|
if (self.pvp) then
|
|
|
|
|
--> pvp timer
|
|
|
|
|
if (self.end_time) then --> o tempo do jogador esta trancado
|
|
|
|
|
local t = self.end_time - self.start_time
|
|
|
|
|
if (t < 3) then
|
|
|
|
|
t = 3
|
|
|
|
|
end
|
|
|
|
|
return t
|
|
|
|
|
elseif (self.on_hold) then --> o tempo esta em pausa
|
|
|
|
|
local t = self.delay - self.start_time
|
|
|
|
|
if (t < 3) then
|
|
|
|
|
t = 3
|
|
|
|
|
end
|
|
|
|
|
return t
|
|
|
|
|
else
|
|
|
|
|
if (self.start_time == 0) then
|
|
|
|
|
return 3
|
|
|
|
|
end
|
|
|
|
|
local t = _tempo - self.start_time
|
|
|
|
|
if (t < 3) then
|
|
|
|
|
if (_detalhes.in_combat) then
|
|
|
|
|
local combat_time = _detalhes.tabela_vigente:GetCombatTime()
|
|
|
|
|
if (combat_time < 3) then
|
|
|
|
|
return combat_time
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
t = 3
|
|
|
|
|
end
|
|
|
|
|
return t
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
--> pve timer
|
|
|
|
|
if (self.end_time) then --> o tempo do jogador esta trancado
|
|
|
|
|
local t = self.end_time - self.start_time
|
|
|
|
|
if (t < 10) then
|
|
|
|
|
t = 10
|
|
|
|
|
end
|
|
|
|
|
return t
|
|
|
|
|
elseif (self.on_hold) then --> o tempo esta em pausa
|
|
|
|
|
local t = self.delay - self.start_time
|
|
|
|
|
if (t < 10) then
|
|
|
|
|
t = 10
|
|
|
|
|
end
|
|
|
|
|
return t
|
|
|
|
|
else
|
|
|
|
|
if (self.start_time == 0) then
|
|
|
|
|
return 10
|
|
|
|
|
end
|
|
|
|
|
local t = _tempo - self.start_time
|
|
|
|
|
if (t < 10) then
|
|
|
|
|
if (_detalhes.in_combat) then
|
|
|
|
|
local combat_time = _detalhes.tabela_vigente:GetCombatTime()
|
|
|
|
|
if (combat_time < 10) then
|
|
|
|
|
return combat_time
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
t = 10
|
|
|
|
|
end
|
|
|
|
|
return t
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function _detalhes:IniciarTempo (tempo)
|
|
|
|
|
self.start_time = tempo
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function _detalhes:TerminarTempo()
|
|
|
|
|
if (self.end_time) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if (self.on_hold) then
|
|
|
|
|
self:HoldOn (false)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
self.end_time = _tempo
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--> diz se o dps deste jogador esta em pausa
|
|
|
|
|
function _detalhes:HoldOn (pausa)
|
|
|
|
|
if (pausa == nil) then
|
|
|
|
|
return self.on_hold --retorna se o dps esta aberto ou fechado para este jogador
|
|
|
|
|
|
|
|
|
|
elseif (pausa) then --> true - colocar como inativo
|
|
|
|
|
self.delay = _math_floor (self.last_event) --_tempo - 10
|
|
|
|
|
if (self.delay < self.start_time) then
|
|
|
|
|
self.delay = self.start_time
|
|
|
|
|
end
|
|
|
|
|
self.on_hold = true
|
|
|
|
|
|
|
|
|
|
else --> false - retornar a atividade
|
|
|
|
|
local diff = _tempo - self.delay - 1
|
|
|
|
|
if (diff > 0) then
|
|
|
|
|
self.start_time = self.start_time + diff
|
|
|
|
|
end
|
|
|
|
|
--if (_tempo - self.start_time < 20) then
|
|
|
|
|
-- self.start_time = self.start_time - 1
|
|
|
|
|
--end
|
|
|
|
|
self.on_hold = false
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function _detalhes:PrintTimeMachineIndexes()
|
|
|
|
|
print ("timemachine damage", #timeMachine.tabelas [1])
|
|
|
|
|
print ("timemachine heal", #timeMachine.tabelas [2])
|
|
|
|
|
end
|