-
Posts
415 -
Joined
-
Last visited
-
Days Won
31
Everything posted by SoprachevAK
-
Yes, its still blocked, but also, everyone bypasses these blocks, and most likely, if a person knows what Discord is, then he knows how to bypass the blocking
-
Какая из? Проверил на основном wotstat и снизу на сайте позиций, обе активны и работают https://discord.gg/7K8W9JE6xU
-
Привет, удивительно что из всех мест ты написал именно сюда Напиши на почту [email protected] и разберёмся с твоей ситуацией. Вообще ключи всем приходят, они доступны сразу после покупки, дублируются на указанную почту, а ещё, можно через почту войти в личный кабинет и там найти историю покупок
-
Ну в общем ответ на мой первоначальный вопрос как добавить слой на миникарту 1. Спавним AbstractView 2. Находим BaseBattlePage 3. Берём BaseBattlePage.minimap 4. Если это Minimap то кладём наш слой в minimap.entriesContainer и сдвигаем на minimap.entriesContainer.flags.width/2, если EpicMinimap то в epicMinimap.background и не сдивгаем 5. Размер миникарты в поинтах не зависит от зума и получить его можно их minimap.entriesContainer.flags и epicMinimap.background.originalWidth соответственно AS3 public class MinimapOverlay extends AbstractView { private var demo:Sprite = new Sprite(); override protected function configUI():void { super.configUI(); var battlePage:BaseBattlePage = getBattlePage(); if (battlePage == null) return; if (battlePage.minimap is Minimap) { var minimap:Minimap = battlePage.minimap as Minimap; var index:int = minimap.entriesContainer.getChildIndex(minimap.entriesContainer.flags); minimap.entriesContainer.addChildAt(demo, index); overlayWidth = minimap.entriesContainer.flags.width; overlayHeight = minimap.entriesContainer.flags.width; demo.x = -overlayWidth / 2; demo.y = -overlayHeight / 2; } else if (battlePage.minimap is EpicMinimap) { var epicMinimap:EpicMinimap = battlePage.minimap as EpicMinimap; epicMinimap.background.addChild(demo); overlayWidth = epicMinimap.background.originalWidth; overlayHeight = epicMinimap.background.originalHeight; } } private function getBattlePage():BaseBattlePage { var viewContainer:MainViewContainer = App.containerMgr.getContainer(LAYER_NAMES.LAYER_ORDER.indexOf(LAYER_NAMES.VIEWS)) as MainViewContainer; if (viewContainer == null) return null; for (var i:int = 0; i < viewContainer.numChildren; ++i) { var child:DisplayObject = viewContainer.getChildAt(i); if (child is BaseBattlePage) return child as BaseBattlePage; } return null; } } Python OVERLAY_VIEW = "WOTSTAT_POSITIONS_MINIMAP_OVERLAY_VIEW" def setup(): mainViewSettings = ViewSettings( OVERLAY_VIEW, MinimapOverlay, "wotstat.positions.minimapOverlay.swf", WindowLayer.WINDOW, None, ScopeTemplates.GLOBAL_SCOPE, ) g_entitiesFactories.addSettings(mainViewSettings) def onAppInitialized(event): if event.ns != APP_NAME_SPACE.SF_BATTLE: return app = ServicesLocator.appLoader.getApp(event.ns) # type: AppEntry if not app: return app.loadView(SFViewLoadParams(OVERLAY_VIEW)) g_eventBus.addListener(events.AppLifeCycleEvent.INITIALIZED, onAppInitialized, EVENT_BUS_SCOPE.GLOBAL) Но есть нюанс, XVM удаляет инстанс battlePage.minimap вместе с нашим слоем, и создаёт свою миникарту но уже без. Так что инжектить наш слой надо не на configUI, а на COMPONENT_REGISTERED и подчищать на COMPONENT_UNREGISTERED def onComponentRegistered(event): if event.alias == BATTLE_VIEW_ALIASES.MINIMAP: setup() def onComponentUnregistered(event): if event.alias == BATTLE_VIEW_ALIASES.MINIMAP: unSetup() g_eventBus.addListener(events.ComponentEvent.COMPONENT_REGISTERED, onComponentRegistered, scope=EVENT_BUS_SCOPE.GLOBAL) g_eventBus.addListener(events.ComponentEvent.COMPONENT_UNREGISTERED, onComponentUnregistered, scope=EVENT_BUS_SCOPE.GLOBAL) После всех этих манипуляций можно смело рисовать внутри нашего спрайта всё что захочется. Рисует оно векторно, так что проблем быть не должно. (скрин стального зашакален, других нет)
-
AS3 BitmapData draw premultiplied
SoprachevAK replied to SoprachevAK's topic in ActionScript & Python
Да, смотрел, но там нет подходящей комбинации Как я понял тут два выхода 1. Писать свой шейдер для ScaleForm (но они где то там в движке живут) 2. Вручную процессить bitmap после отрисовки и обратно делить на прозрачность, но флеш слишком медленный, чтоб это было оптимально. Как вариант можно наверное разбить картинку на чанки, и обрабатывать по одному чанку в кадр, но как то конечно костыльненько и я уже не запаривался -
У меня есть Sprite, в который я через graphics.drawRect рисую кучу всего, настолько кучу, что она приводит к падению fps (не в момент отрисовки, а просто так). Потому что через graphics рисуются векторные фигуры, которые потом каждый кадр рендерятся на монитор. Я хотел оптимизировать это, и закешировать в BitMap Пробую так: _batchContainer = new Sprite(); bmpData = new BitmapData(width, height, true, 0x00000000); bmpData.draw(_batchContainer); И вот этот bmpData.draw рисует в premultiplied формате. То есть RGB каналы уже умножены на прозрачность. После чего, я кладу BitmapData в Bitmap, которые рендерится на монитор в unpremultiplied, то есть ещё раз домножает на прозрачность. Я конечно не надеюсь, но может быть кто нибудь знает, как закешировать векторную графику спрайта в прозрачную битмапу? Белый полупрозрачный квадрат (FFFFFF / 50%) - справа – векторный спрайт - слева – векторный спрайт отрисованный в BitMap Если взять его по bitmapData.getPixel32, получаю 0x7F7F7F7F Что как раз и есть premultiplied
-
Демонтаж и установка оборудования
SoprachevAK replied to SoprachevAK's topic in ActionScript & Python
Ну я не видел( Там пока не сделают модлоадер для JS, ничего и не появится -
Ссылка верная, никаких вирусов нет, там у самого мода открытый исходный код, так что потенциальные вирусы и стиллеры были бы видны
-
А что такое 3D настройки? Есть просто настройки, есть маркеры в 3д, но маркеры всегда есть Чтоб настройки в ангаре были, надо два дополнительных модика поставить, там в инструкции есть на сайте
-
Виджеты? Виджеты. Виджеты! (от WotStat)
SoprachevAK replied to SoprachevAK's topic in Mods and Software
Для серебра пока нет Для опыта есть универсальная прогрессия, там можно много чего настроить, так ещё и взводом соревноваться. Но можно и соло -
Ого ну да, думаю это причина Но у меня есть для тебя решение – напиши свой ключ одной строчкой в текстовый файл и сохрание его в /mods/wotstat.positions.license (без версии игры, wotstat.positions.license это сам файл, без .txt)
-
Виджеты? Виджеты. Виджеты! (от WotStat)
SoprachevAK replied to SoprachevAK's topic in Mods and Software
Инфографика -> Виджеты -> Прогрессия -> Нанесённый урон https://wotstat.info/session/widgets/efficiency/sum/solo/damage Там можно даже обратный отсчёт сделать, например от 100к сколько осталось. А можно и вперёд тоже -
Попробуй в настройках винды поменять браузер по умолчанию. Скорее всего у тебя там не установлен никакой. Надо установить.
-
Уже работает
-
Всё что у меня есть на текущий момент. Ну точно меньше трёх дней, тк за 3 дня этот сервер в принципе собрали с нуля и установили в ДЦ.
-
True. But i still want continue use it. Probability of failure is low, and 8 TB is worth the risk. But in this case I'm out of luck. Fortunately, db backups were made every day.
-
[WOT STAT] Мод для анализа подкруток
SoprachevAK replied to SoprachevAK's topic in Mods and Software
Пофиксили этот баг в 1.32 К сожалению я потерял табличку, а теперь ещё и запрос, но успел проверить в первый день после патча -
Демонтаж и установка оборудования
SoprachevAK replied to SoprachevAK's topic in ActionScript & Python
Yes. Add this cote to end of Games\WOT\res\packages\gui-partX.pkg\gui\gameface\js\index.js window.engine.on('Ready', () => { const style = document.createElement('style'); style.innerHTML = ` .highlight-rect { box-sizing: border-box; position: absolute; border: 2px solid cyan; pointer-events: none; z-index: 100000; display: none; } .info-div { box-sizing: border-box; position: absolute; background-color: rgba(0, 0, 0, 0.7); color: #fff; padding: 10px 10px; border-radius: 10px; pointer-events: none; font-size: 1em; transform: translate(0, -100%); z-index: 100000; line-height: 1.2; } .info-div p { margin: 0; } .target-point { position: absolute; width: 5px; height: 5px; background-color: #ff000059; border-radius: 50%; pointer-events: none; z-index: 100000; } `; document.head.appendChild(style); const highlightRect = document.createElement('div'); highlightRect.className = 'highlight-rect'; document.body.appendChild(highlightRect); const infoDiv = document.createElement('div'); infoDiv.className = 'info-div'; document.body.appendChild(infoDiv); const targetPoint = document.createElement('div'); targetPoint.className = 'target-point'; document.body.appendChild(targetPoint); document.body.addEventListener('mousemove', (event) => { const element = document.elementFromPoint(event.clientX - 15, event.clientY - 30); targetPoint.style.left = `${event.clientX - 15}px`; targetPoint.style.top = `${event.clientY - 30}px`; if (element) { infoDiv.style.left = `${event.clientX + 20}px`; infoDiv.style.top = `${event.clientY - 30}px`; infoDiv.innerHTML = ''; let parent = element; while (parent) { const parentInfo = document.createElement('p'); parentInfo.textContent = `${parent.tagName} > ${parent.className} #${parent.id}`; infoDiv.appendChild(parentInfo); parent = parent.parentElement; } } if (element && element !== document.body && element !== document.documentElement) { const rect = element.getBoundingClientRect(); highlightRect.style.left = `${rect.left}px`; highlightRect.style.top = `${rect.top}px`; highlightRect.style.width = `${rect.width}px`; highlightRect.style.height = `${rect.height}px`; highlightRect.style.display = 'block'; } else { highlightRect.style.display = 'none'; } }); }); gui-partX.pkg is regular zip archive, you can open it using 7zip index.js can be located randomly in gui-part1.pkg or gui-part2.pkg or gui-part3.pkg Html picker is 20px above cursor (small red dot) to prevent hovering