local _detalhes = _G._detalhes ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> local pointers local _ipairs = ipairs --lua local local _math_floor = math.floor --lua local local _pairs = pairs --lua local local _table_insert = table.insert --lua local local _table_wipe = table.wipe --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