// The Ants RU — версия 1.1, 03.10.2026. // Самостоятельный скрипт сайта для Scriptable, не код автора присланного фото. // Настройки: средний размер; при касании открывается расписание. const SITE='https://the-ants.ru'; const FALLBACK={"days":[{"key":"mon","name":"Понедельник","short":"Пн","theme":"Развитие муравейника"},{"key":"tue","name":"Вторник","short":"Вт","theme":"Сбор ресурсов"},{"key":"wed","name":"Среда","short":"Ср","theme":"Эволюция"},{"key":"thu","name":"Четверг","short":"Чт","theme":"Спец усиление"},{"key":"fri","name":"Пятница","short":"Пт","theme":"Вылупление солдат"},{"key":"sat","name":"Суббота","short":"Сб","theme":"На выбор (лучше сбор)"},{"key":"sun","name":"Воскресенье","short":"Вс","theme":"Сурки / район спор"}],"schedule":{"mon":[{"items":["сила зданий"]},{"items":["сила эволюции","ускор на эволюцию"]},{"items":["сила зданий"]},{"items":["все ускорения, включая лечение"],"healing":true},{"items":["сила эволюции","сила зданий"]},{"items":["сила зданий","ускор на постройку"]},{"items":["сила зданий","сила эволюции","вылупление солдат"],"shell":true},{"items":["сила зданий","сила эволюции","вылупление солдат"],"shell":true}],"tue":[{"items":["сила зданий","ускор на постройку"]},{"items":["сила зданий","клетки","эссенция жизни"]},{"items":["ускорение на вылупление"]},{"items":["сила зданий","вылупление солдат","клетки"],"shell":true},{"items":["ускор на постройку","ускор на вылупление","ускор на эволюцию"]},{"items":["сила зданий","сила эволюции","ускор на вылупление"]},{"items":["сила эволюции","сила зданий","вылупление солдат"],"shell":true},{"items":["сила зданий","клетки","эссенция жизни"]}],"wed":[{"items":["сила зданий","ускор на постройку"]},{"items":["сила эволюции","ускор на эволюцию","останки животных"],"berry":true},{"items":["ускорение на вылупление"]},{"items":["сила эволюции","сила зданий","останки животных"]},{"items":["сила зданий","вылупление солдат"],"shell":true},{"items":["ускор на постройку","ускор на вылупление","ускор на эволюцию","останки животных"]},{"items":["сила зданий","сила эволюции","ускор на вылупление"],"shell":true},{"items":["ускор на постройку","ускор на вылупление","ускор на эволюцию","останки животных"]}],"thu":[{"items":["сила зданий","ускор на постройку"]},{"items":["мут. споры","яйца","опыт","навыки"],"berry":true},{"items":["ускор на постройку","ускор на вылупление","ускор на эволюцию"]},{"items":["мут. споры","яйца","опыт","навыки"],"berry":true},{"items":["все ускорения, включая лечение"],"healing":true},{"items":["мут. споры","яйца","опыт","навыки"],"berry":true},{"items":["сила эволюции","сила зданий","ускор на вылупление"]},{"items":["мут. споры","яйца","опыт","навыки"],"berry":true}],"fri":[{"items":["все ускорения, включая лечение"],"healing":true},{"items":["ускор на постройку","ускор на вылупление","ускор на эволюцию"]},{"items":["сила зданий","сила эволюции","ускор на вылупление"]},{"items":["ускорение на вылупление"]},{"items":["сила зданий","сила эволюции","ускор на вылупление"]},{"items":["сила зданий","вылупление солдат"]},{"items":["сила эволюции","вылупление солдат"]},{"items":["все ускорения, включая лечение"],"healing":true}],"sat":[{"items":["все ускорения, включая лечение"],"healing":true},{"items":["сила эволюции","ускор на эволюцию"]},{"items":["сила зданий","ускор на постройку"]},{"items":["ускорение на вылупление"]},{"items":["сила эволюции","сила зданий","ускор на вылупление"]},{"items":["сила эволюции","сила зданий","ускор на вылупление"]},{"items":["сила зданий","вылупление солдат"],"shell":true},{"items":["сила эволюции","вылупление солдат"],"shell":true}],"sun":[{"items":["сила зданий","ускор на постройку"]},{"items":["ускорения без лечения","вылуп/улучш дикого","корм","скорлупа"],"berry":true},{"items":["ускор на постройку","ускор на вылупление","ускор на эволюцию"]},{"items":["сила эволюции","вылуп/улучш дикого","корм","скорлупа"],"berry":true},{"items":["все ускорения, включая лечение"],"healing":true},{"items":["ускор на вылупление","вылуп/улучш дикого","корм","скорлупа"],"berry":true},{"items":["сила эволюции","сила зданий","ускор на вылупление"]},{"items":["ускорения без лечения","вылуп/улучш дикого","корм","скорлупа"],"berry":true}]},"startHour":3,"schemaVersion":1,"updated":"2026-10-03","startMinute":5,"svsStartHour":3,"svsStartMinute":30,"timezone":"Europe/Moscow"}; const fm=FileManager.local(); const cache=fm.joinPath(fm.documentsDirectory(),'the-ants-widget-schedule-v1.json'); function valid(data){ return data&&data.schemaVersion===1&&Array.isArray(data.days)&&data.days.length===7&&data.days.every(d=>typeof d.name==='string'&&typeof d.theme==='string'&&Array.isArray(data.schedule[d.key])&&data.schedule[d.key].length===8&&data.schedule[d.key].every(c=>Array.isArray(c.items)&&c.items.every(t=>typeof t==='string'))); } let data=FALLBACK,cached=true; try{if(fm.fileExists(cache)){const saved=JSON.parse(fm.readString(cache));if(valid(saved))data=saved;}}catch(e){} try{ const request=new Request(SITE+'/widget/mobile/schedule.json?v=1');request.timeoutInterval=8; const fresh=await request.loadJSON(); if(valid(fresh)){data=fresh;cached=false;try{fm.writeString(cache,JSON.stringify(fresh));}catch(e){}} }catch(e){} const now=new Date(),msk=new Date(now.getTime()+10800000); const hour=msk.getUTCHours(),startMinute=5; const gameDate=new Date(msk.getTime()-10800000); const day=data.days[(gameDate.getUTCDay()+6)%7]; const cell=data.schedule[day.key][((hour-data.startHour)%8+8)%8]; const start=Date.UTC(msk.getUTCFullYear(),msk.getUTCMonth(),msk.getUTCDate(),hour,startMinute)-10800000; const end=Date.UTC(msk.getUTCFullYear(),msk.getUTCMonth(),msk.getUTCDate(),hour+1)-10800000; const pause=now.getTime()String(n).padStart(2,'0'); const widget=new ListWidget();widget.setPadding(14,16,12,16);widget.spacing=4; const gradient=new LinearGradient();gradient.colors=[new Color('233E26'),new Color('091D15')];gradient.locations=[0,1];widget.backgroundGradient=gradient; widget.url=SITE+'/event/'; const small=config.widgetFamily==='small'; function line(value,size,color,bold){const t=widget.addText(value);t.font=bold?Font.boldSystemFont(size):Font.systemFont(size);t.textColor=new Color(color);t.minimumScaleFactor=0.75;return t;} line(day.name+' · '+day.theme,small?10:11,'CFD9BD',false).lineLimit=2; line(pad(hour)+':'+pad(startMinute)+' — '+pad((hour+1)%24)+':00 мск',small?12:15,'F0E1B6',true); line(cell.items.join(' · '),small?10:12,'E6EAD8',false).lineLimit=small?3:2; widget.addSpacer(); const row=widget.addStack();row.centerAlignContent();row.spacing=10; const caption=row.addText(pause?'Перерыв\nдо старта':'До конца\nчаса');caption.font=Font.systemFont(10);caption.textColor=new Color('BFCDAF'); const timer=row.addDate(new Date(target));timer.applyTimerStyle();timer.font=Font.boldMonospacedSystemFont(small?22:28);timer.textColor=new Color('F3D992');timer.minimumScaleFactor=0.7; widget.addSpacer(3); line('the-ants.ru · '+pad(hour)+':'+pad(msk.getUTCMinutes())+' мск'+(cached?' · офлайн':''),9,'A5B799',false).lineLimit=1; widget.refreshAfterDate=new Date(Math.min(now.getTime()+15*60000,target+1000)); Script.setWidget(widget); if(!config.runsInWidget)await widget.presentMedium(); Script.complete();