TimerObject = {} function TimerObject:New(team, timer, id, flags) local self = {} self.a_timer = 0 self.a_num = 0 self.a_max = 0 self.a_obj = {} local i = 1 self.a_obj[1] = bf:findObjectById(1 + id) while self.a_obj[i] ~= nil do self.a_obj[i]:setTeam(-2) if self.global then self.a_obj[i]:setGlobal(false) end i = i + 1 self.a_obj[i] = bf:findObjectById(i + id) end self.a_max = i - 1 self.a_num = 1 self.a_timer_max = timer self.a_team = team self.global = (flags == 1) self.checkFlag = (flags == 2) function self:onTick(timePassed) self.a_timer = self.a_timer + timePassed if self.a_timer > self.a_timer_max then self.a_timer = 0 if self.global then self.a_obj[self.a_num]:setGlobal(false) end local changeTeam = true; if self.checkFlag then changeTeam = self.a_obj[self.a_num]:hasFlag() == false; end if changeTeam then if self.a_team == -2 then self.a_obj[self.a_num]:setTeam(-1) end self.a_obj[self.a_num]:setTeam(-2) end self.a_num = self.a_num + 1 if self.a_num > self.a_max then self.a_num = 1 end if self.global then self.a_obj[self.a_num]:setGlobal(true) end if self.a_team == -2 then self.a_obj[self.a_num]:setTeam(-1) end self.a_obj[self.a_num]:setTeam(self.a_team) end end return self end timerObjects = {} pos_p1 = nil pos_p2 = nil function onTick(timePassed) for index, obj in pairs(timerObjects) do obj:onTick(timePassed) end local items = {} bf:findAllObjectsInArea(items, pos_p1, pos_p2, ObjType.Ship, ObjType.Robot) for index, item in ipairs(items) do item:setHealth(item:getHealth() - 0.001 * timePassed) end end function Geom.min(geom) local v = point.new(geom[0]) for _, p in pairs(geom) do if p.x > v.x then v = point.new(p.x, v.y) end if p.y > v.y then v = point.new(v.x, p.y) end end return v end function Geom.max(geom) local v = point.new(geom[0]) for _, p in pairs(geom) do if p.x < v.x then v = point.new(p.x, v.y) end if p.y < v.y then v = point.new(v.x, p.y) end end return v end function main() timerObjects[1] = TimerObject:New(-2, 180, 300, 1) timerObjects[2] = TimerObject:New(-1, 150, 200, 1) timerObjects[3] = TimerObject:New(2, 30, 0, 1) timerObjects[4] = TimerObject:New(1, 900, 600, 2) timerObjects[5] = TimerObject:New(2, 900, 650, 2) timerObjects[6] = TimerObject:New(1, 1800, 700, 0) timerObjects[7] = TimerObject:New(2, 1840, 750, 0) local object1 = bf:findObjectById(999) pos_p1 = Geom.min(object1:getGeom()) pos_p2 = Geom.max(object1:getGeom()) subscribe(Event.Tick) end