Перейти к содержанию

Сделал скрипт для радикальной смены наборов аддонов в игре.


Veerbat

Рекомендуемые сообщения

Updated 17.02.2021: Манипуляции с папкой "SavedVariables" признаны лишними и убраны из кода скрипта и из описания.

 

Не раз слышал, что не используемые в данный момент аддоны, просто находясь в папке аддонов, могут негативно влиять на игру. Лаги, фризы и всякое такое. 
Мне казалось, что можно бороться с этим с помощью аддона (AddonSelector), просто внимательно относясь к галочкам на библиотеках и не загружая то, что не нужно. Однако вчера разговаривал с достаточно квалифицированным в игре человеком и он утверждает, что после зачистки папки с аддонами, стало куда лучше. 

Может быть это и так. Почему бы благородным донам и не попробовать. Но уборка мусора это тяжело. Но можно поступить как Мартовский Заяц и хитро пересаживаться с грязного места на чистое.
Иначе говоря иметь разные наборы аддонов в разных папках и использовать в данный момент ту которая подходит. Например в одной папке будет куча всякого полезного и красивого барахла, но пользоваться этим будешь только гуляя по локациям и квестам и пусть себе тормозит, если может. 
Зато в папке для боя будет, например, один только Combat Alerts и используя именно эту папку для триалов ты будешь точно знать, что фризы имеют другую причину)

Для смены папок с наборами аддонов воспользуемся скриптом в .bat файле. Есть куча куда более лучших способов автоматизации чем эти командные файлы Виндовз, но этот удобен тем что уже встроен в Виндовз, код виден в простом блокноте, копируется со страниц форума и превращается в исполняемый простым переименованием .txt в .bat. Подходит в равной степени и для параноиков и для домохозяек.

Что делает скрипт в целом: 
Игра пользуется папкой  "AddOns" (там лежат наши аддоны).
Альтернативный набор аддонов для боя у нас лежит, например, в папке "Addons.Combat".
При вызове скрипта (даже во время игры) он переименовывает папку "Addons.Combat" в "Addons" и, после релоада (по кнопке или /reloadui в чате), вы уже с новым свежим набором аддонов. Убранный набор сохраняется в папке под другим именем для последующей загрузки и использования.

Например это удобно, если стоишь в очереди в данж и с кучей аддонов занимаешься крафтом, квестами, торговлей да мало ли чем еще (пользуя полный набор оч полезных аддонов FullStuff) . И когда вас уже притянуло в данж, просто прожмите файл Combat.bat и ваш набор аддонов станет минималистичным Combat. Это займет меньше секунды и после релоада вы готовы к бою.  
Набор аддонов FullStuff при этом сохранится в папке AddOns.FullStuff. Разных наборов может быть сколько угодно, вас ограничивает только место на диске.

Как это сделать:

0. Сделайте бэкап своих аддонов!) Зайдите в папку с настройками игры. Это папка в ваших Документах - \Elder Scrolls Online\live\   Вы там должны обязательно увидеть папки AddOns и SavedVariables. Создайте папку Архив и скопируйте туда папки AddOns и SavedVariables. Обязательно. Сделали? Точно сделали?! Уверены?)

1. В текущей папке "live" cоздайте текстовой файл (.txt).  Скопируйте текст скрипта с форума в этот текстовой файл, сохраните, закройте.

2. Переименуйте файл в, например, Combat.bat (или Trial.bat  или как угодно, только чтобы в конце было .bat)

3. Придумайте под каким именем вы хотите сохранить текущий набор аддонов. Например это будет FullStuff

4. Зайдите в папку  AddOns и создайте там текстовой файл. Переименуйте его в FullStuff.activity

5. Сделайте дубликат файла Combat.bat и переименуйте его в FullStuff.bat.

Теперь все готово. 
В папке AddOns помимо аддонов лежит файл FullStuff.activity. Это важно, по имени этого файла (FullStuff) скрипт определяет название текущего используемого набора, а по расширению (activity) узнает этот файл.  В папке live (в ней вы по-прежнему видите папку AddOns и  теперь также лежат два абсолютно одинаковых по содержимому .bat файла, но с разными названиями - Combat.bat и FullStuff.bat

6. Вы можете теперь кликать (запускать) любой .bat файл из двух. 
- Допустим вы хотите продолжить использовать полный набор аддонов и запускаете FullStuff.bat  Ничего не происходит, скрипт определил что вы им уже пользуетесь. 
- Но вот вы хотите создать новый набор для боя и запускаете Combat.bat. Скрипт сохраняет текущий набор аддонов в папке  AddOns.FullStuff, очищает папку  AddOns и помещает туда ключевой файл Combat.activity. Теперь когда вы сделаете релоад у вас будет чистая игра без аддонов. Устанавливайте нужные как раньше через миньон (он тоже будет пустой).
- Когда вы снова захотите полный набор, запускаете FullStuff.bat, скрипт видит что в текущей папке AddOns лежит ключевой файл Combat.activity и сохраняет текущий набор аддонов в папку AddOns.Combat и переименовывает папку AddOns.FullStuff в папку AddOns. Таким образом игра начинает использовать этот набор и после релоада в игре вы увидите свою старую кучу аддонов.

В дальнейшем, чтобы добавить новый набор (чистый) вы просто дублируете один из .bat файлов и называете его как вам нравится. И всё. Например PVP.bat При первом его запуске игра опять будет чистой, вы устанавливаете нужные аддоны. При последующих запусках скрипт будет загружать вам нужный набор. Его персональная папка (она создастся сама) будет называться AddOns.PVP

Много слов для неопытных, на самом деле все процедуры занимают несколько минут. Главное в самом начале положить файл *.activity в папку AddOns, чтобы просто сохранить текущую конфигурацию под каким то названием.

Скрипт должен работать при любом пути к папке live, главное чтобы сами батники лежали там. От них лучше кинуть ссылки/ярлыки на рабочий стол и обязать запускаться от имени администратора (ПКМ на ярлыке - Свойства - вкладка Ярлык - Дополнительно - галку на Запуск от имени администратора) . Можно сделать возможность вызова замены папок и из аддона прямо в окне игры, но это навряд ли кошерно и выходит сильно за рамки простого батника-утилиты. Проще всего настроить вызов по горячей клавише через какую-нибудь дополнительную бесплатную програмку типа Кеу Remapper. 

Собственно сам то скрипт занимает всего 3 строчки в конце. Остальное вначале - защита данных от неправильных действий юзера).

Сам пока не особо пользовался, вроде работает, если что не так пишите поправлю. 

Сам скрипт в следующем посте, с обильными комментариями. Я специально сделал логику прямой как лом без всяких вложенных конструкций.

Просто ВСЁ скопировать и вставить в текстовой файл.

UPD: Дополнил про запуск с ярлыка от имени администратора. 

UPD1: Убрал манипуляции с SavedVariables

Изменено пользователем Veerbat
Убрал манипуляции с SavedVariables
Ссылка на комментарий
Поделиться на другие сайты

 

@echo off

::        ПРЕПЯТСТВУЕМ СЛУЧАЙНОМУ УДАЛЕНИЮ ДАННЫХ

:: Ищем ключевое слово (*.activity) в папке AddOns.
:: Продолжаем только если оно есть и оно одно, иначе заканчиваем и идем в ту папку смотреть в чем дело.

set cnt=0
for %%A in ("%~dp0AddOns\*.activity") do set /a cnt+=1
If %cnt% NEQ 1 (
echo.
Echo . %cnt% key words in "AddOns" folder. Please check. Program closed.
echo.
Pause
Exit
)

:: Проверяем не вызываем ли мы тот набор, что у нас уже загружен
:: Смотрим на имя запущеного нами бат файла и сравниваем с именем ключевого *.activity файла 
:: в AddOns папке. Если они одинаковые, то больше действий не требуется. Выходим.

set BatFileName=%~n0
for /f %%i in ('dir /b "%~dp0AddOns\*.activity"') do set AddOnsActivityFileName=%%~ni
If /i %BatFileName% EQU %AddOnsActivityFileName% (
exit
)

:: Проверяем есть ли уже папка с вызываемым именем. Если их нет, создаем и кладем туда ключевой файл.

If not exist "%~dp0AddOns.%BatFileName%" (
MD "%~dp0AddOns.%BatFileName%"
cd.>"%~dp0AddOns.%BatFileName%\%BatFileName%.activity"
)

::                               НАКОНЕЦ САМ СКРИПТ

:: Папка с именным названием просто удаляется. Поверх записывать не будем. 

rmdir /S /Q "%~dp0AddOns.%AddOnsActivityFileName%"

:: Папка AddOns переименовываются в именную (ту которую только что удалили).

rename "%~dp0AddOns" "AddOns.%AddOnsActivityFileName%"

:: И переименовываем нужную именную папку в стандартную AddOns

rename  "%~dp0AddOns.%BatFileName%" "AddOns"

:: Выходим, закрываем окошечко.

exit

 

Изменено пользователем Veerbat
убрал лишние манипуляции с SavedVariables
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Veerbat сказал:

Не раз слышал, что не используемые в данный момент аддоны, просто находясь в папке аддонов, могут негативно влиять на игру.

Вот это весьма сомнительное утверждение. Есть подтверждение? ИМХО отключенные аддоны не подгружают свои библиотеки и не влияют на производительность игры.

Ссылка на комментарий
Поделиться на другие сайты

18 минут назад, Weaver сказал:

Вот это весьма сомнительное утверждение. Есть подтверждение? ИМХО отключенные аддоны не подгружают свои библиотеки и не влияют на производительность игры.

1. Это не утверждение. 2. Ваше мнение оч важно для нас. 3. Наврядли у нас есть квалификация для обсуждения механизма работы библиотек.

 

Ссылка на комментарий
Поделиться на другие сайты

Хоть и не хотелось бы, но придется немного обломать кайф. Самую малость. :) Чудеса со скриптом отлично зайдут для папки с аддонами с условием что после замены папки клиент будет перезапускаться полностью. Некоторые аддоны хорошо переживут замену при запущенном клиенте и выполненном /reloadui, но не все. Это связано с особенностью загрузки аддонов клиентом игры. LUA код и TXT файлы описания аддонов загружаются каждый раз когда перс входит в игру (и соответственно при смене перса). А вот картинки и шрифты, если таковые в аддоне есть, грузятся всего один раз - при запуске клиента игры. Соответственно, если во вновь подкидываемой папке есть аддоны с картинками или шрифтами, то эти картинки не отобразятся, а вместо шрифтов скорее всего возьмется какой-нибудь из стандартных.

Ссылка на комментарий
Поделиться на другие сайты

47 минут назад, ForgottenLight сказал:

Хоть и не хотелось бы, но придется немного обломать кайф. Самую малость. :) Чудеса со скриптом отлично зайдут для папки с аддонами с условием что после замены папки клиент будет перезапускаться полностью. Некоторые аддоны хорошо переживут замену при запущенном клиенте и выполненном /reloadui, но не все. Это связано с особенностью загрузки аддонов клиентом игры. LUA код и TXT файлы описания аддонов загружаются каждый раз когда перс входит в игру (и соответственно при смене перса). А вот картинки и шрифты, если таковые в аддоне есть, грузятся всего один раз - при запуске клиента игры. Соответственно, если во вновь подкидываемой папке есть аддоны с картинками или шрифтами, то эти картинки не отобразятся, а вместо шрифтов скорее всего возьмется какой-нибудь из стандартных.

Да кайф то был по правде так себе, чего уж там) Так, для попробовать с чистого листа, с сохранением старого. Да и то не для себя.  Делать для себя через батник, так себе занятие :)

Но вот теперь уже есть вопрос. Это выглядит так, что если я захожу с полным набором аддонов, а потом подставляю папку с 3-4 (которые уже были и так раньше ) то все что для них нужно уже получено в первую загрузку. То-есть главное зайти в игру с полным набором, а потом уже тасовать как хочешь. Я правильно понял?  И еще получается что-то от аддонов подгружается уже при входе и потом вполне игнорирует AddonSelector? Или я что то не так понял?

Ссылка на комментарий
Поделиться на другие сайты

11 часов назад, Veerbat сказал:

Это выглядит так, что если я захожу с полным набором аддонов, а потом подставляю папку с 3-4 (которые уже были и так раньше ) то все что для них нужно уже получено в первую загрузку. То-есть главное зайти в игру с полным набором, а потом уже тасовать как хочешь. Я правильно понял?  И еще получается что-то от аддонов подгружается уже при входе и потом вполне игнорирует AddonSelector? Или я что то не так понял?

Если зайти в игру с полным набором аддонов, а потом часть из них убирать и заново добавлять по мере надобности, то да - все будет работать. Но тогда уменьшается полезность всей системы с батниками, поскольку картинки и шрифты от не используемых аддонов все равно будут грузиться в память. Т.е. ситуация не будет отличаться от выставления галочек в игре загружать аддон или нет. :)

У себя я использую похожую идею, только саму папку AddOns не трогаю, а переношу в нее и из нее аддоны. У меня все аддоны можно разделить на три группы - используемые всегда, используемые для крафта, используемые для торговли. Надо сказать, что крафтом и торговлей я пользуюсь редко, по этому для меня есть смысл при обычной игре их убирать. Рядом с папкой AddOns я создал AddOnsCraft и AddOnsTrade. В папке AddOnsCraft лежит пара аддонов от Долгубона и еще один по Вритам, ну и соответственно библиотеки к ним, которые не используются в основной коллекции аддонов. В папке AddOnsTrade сейчас один аддон - АвесамГильдСторе и библиотеки к нему. Раньше юзал МастерМерчанта но сейчас от него отказался, смотрю цены на https://eu.tamrieltradecentre.com/pc/Trade?lang=ru-RU . Мне скрипты было писать лень, я просто в Far Manager`е переношу папки из AddOnsCraft в AddOns и обратно. :) Поскольку аддонов мало, то их поиск в AddOns при обратном переносе не напрягает. Для того чтобы не париться по поводу библиотек, какая к чему относится, все библиотеки от основной коллекции аддонов я скинул в папку AddOns\AAA_Libs. Все библиотеки от крафтовых в AddOnsCraft\AAB_Libs и от торговых AddOnsTrade\AAC_Libs. Благо в библиотеках нет шрифтов и картинок, а следовательно и путей к ним от папки AddOns. А вот с аддонами такой фокус не прокатит, если конечно аддон использует шрифты или картинки.

Ссылка на комментарий
Поделиться на другие сайты

Раз уже начал этой ерундой маяться..  

Почитал папку "SavedVariables". И раньше знал, но теперь точно убедился, что это простые текстовые базы данных и записывают-отдают данные по вызову.  Посмотрел на  пассивное использование памяти аддонами(т.е. луа). Если луевая функция collectgarbage не врет, то хоть сколько не весит папка SavedVariables, на использование памяти это никак не влияет. Не загружается она в память, а только читается-пишется. Ее существование не мешает нам точно, если нет аддона который к ней обращается. Вердикт:  Наконец убираем из скрипта манипуляции с папкой SavedVariables. Скрипт делается сильно короче. Да и не надо заново настраивать и синхронизировать аддоны.

ForgottenLight: А можно спросить зачем вы то переносите аддоны туда-сюда?) Экономия на шрифтах и картинках в памяти имела смысл когда было 64 мегабайта ограничение для памяти для аддонов (году в 15ом?:)). Сейчас это зачем? Или вы не пользуетесь AddonSelector'ом?  Я хотя и сделал скрипт по просьбе друзей, для тестов, но сам пока что не уверен, что такое физическое удаление-добавление дает преимущество. 

 

Ссылка на комментарий
Поделиться на другие сайты

47 минут назад, Veerbat сказал:

Раз уже начал этой ерундой маяться..  

Почитал папку "SavedVariables". И раньше знал, но теперь точно убедился, что это простые текстовые базы данных и записывают-отдают данные по вызову.  Посмотрел на  пассивное использование памяти аддонами(т.е. луа). Если луевая функция collectgarbage не врет, то хоть сколько не весит папка SavedVariables, на использование памяти это никак не влияет. Не загружается она в память, а только читается-пишется. Ее существование не мешает нам точно, если нет аддона который к ней обращается. Вердикт:  Наконец убираем из скрипта манипуляции с папкой SavedVariables. Скрипт делается сильно короче. Да и не надо заново настраивать и синхронизировать аддоны.

ForgottenLight: А можно спросить зачем вы то переносите аддоны туда-сюда?) Экономия на шрифтах и картинках в памяти имела смысл когда было 64 мегабайта ограничение для памяти для аддонов (году в 15ом?:)). Сейчас это зачем? Или вы не пользуетесь AddonSelector'ом?  Я хотя и сделал скрипт по просьбе друзей, для тестов, но сам пока что не уверен, что такое физическое удаление-добавление дает преимущество. 

 

 

AddonSelector'ом не пользуюсь. Переношу для того чтобы клиент игры при старте и перезаходах персов не перебирал лишние папки и файлы. Даже если аддон отключен, все равно клиент игры залазит в папку аддона и в каждую дочернюю папку аддона, считывает оттуда все файлы TXT, чтобы определить какие аддоны лежат в этих папках, и только тогда уже принимает решение, какие файлы LUA и XML грузить, а какие не надо.

Теперь по поводу SavedVariables. Менять эту папку крайне плохая идея. Заменять ее можно только при соблюдении двух условий:
1. Замену производить только при НЕ запущенном клиенте игры;
2. В разных вариантах подборок аддонов нет пересекающихся. Т.е., в описанных тобой случаях, в папках AddOns.Combat, AddOns.FullStuff, AddOns.PVP и т.д. нет одинаковых аддонов.
Если эти правила не соблюдены можно огрести нехилых глюков. Причиной тому - особенность работы клиента игры с сохраненками. Сохраненки считываются один раз при старте игры и больше не считываются - только записываются. Записываются при выходе персов и при смене локации персами. Причем сохраненки при выходе перса отличаются от сохраненок при смене локации. Первые форматированы переносом строк и пробелами, а вторые в одну строку и без лишних пробелов, соответственно заметно меньше по размеру файла.

Теперь рассмотрим чудеса на конкретных примерах. :)
Пусть у тебя есть две версии папок с аддонами AddOns.Combat и AddOns.Craft. В папке AddOns.Combat есть полезный аддон БандитГирМенеджер (ну или аналогичный - АльфаГир, ДрессингРум и т.п.), а в папке AddOns.Craft его нет, т.к. при крафте он нафиг не нужен. Далее, на момент запуска игры у тебя в аддоны установлена папка AddOns.Combat и соответствующая ей SavedVariables.Combat. Ты зашел в игру и решил по настраивать сеты и билды в БандитГирМенеджер, а после этого не выключая игру и не выходя персом запускаешь батник перехода на аддоны крафта, после чего делаешь /reloadui чтобы считать новые аддоны. Так вот при этом настройки от БандитГирМенеджера сохранятся у тебя не в папку SavedVariables.Combat, а в SavedVariables.Craft. Заодно туда же сохранятся и все дописки от всех аддонов из AddOns.Combat. :) Далее выключаем игру, запускаем батник перехода на AddOns.Combat, запускаем игру и вуаля все сделанные настройки в БандитГирМенеджере потеряны ну и по остальным аддонам тоже. :) 

Случай когда один аддон у тебя есть в нескольких папках, например тот же БандитГирМенеджер, приведет к еще большей путанице с настройками - ты реально перестанешь понимать когда что и куда сохраняется. :)

В случае БандитГирМенеджера ты просто потеряешь время на настройку заново билда. А вот в случае с моим аддоном WPamA, можно не уследить за откатом триалов и вскрытия коферов. Т.е. лишний раз сходишь в триал или вскроешь кофер не получив оттуда жеоду.

Ко всем этим глюкам наиболее чувствительны аддоны, которые сохраняют не просто настройки внешнего вида окошек и т.п., а какую-то информацию о персонажах, например содержимое инвентаря, помеченные предметы, изученные книги и т.п.

 

Ссылка на комментарий
Поделиться на другие сайты

 

В целом, если бы я реализовывал идею с батниками я поступил бы немного иначе. Рядом с папкой AddOns я создал бы одну единственную папку AddOnsOff. Для каждого из пресетов (Combat, PVP, Craft, Trade и т.д.) создал бы два батника типа Combat.Inst.bat и Combat.Del.bat . Первый переносит папки аддонов, связанных с Combat из AddOnsOff в AddOns, а второй наоборот. Еще бы сделал один батник с менюшкой вида:
0. Выход
1. Установить все
2. Удалить все
3. Установить Combat
4. Удалить Combat
5. Установить PVP
6. Удалить PVP
7. Установить Craft
8. Удалить Craft
9. Установить Trade
A. Удалить Trade
B. При установке удалять остальные (сейчас: ДА)

Где каждый из пунктов с 1 по A запускает один или несколько вышеописанных батников. С пунктом B хитрее - он переключает переменную окружения, которая влияет на пункты 3, 5, 7 и 9. Если переменная стоит в НЕТ, то при выборе пункта 3 вызовется только Combat.Inst.bat, а вот если ДА, то перед вызовом Combat.Inst.bat будут вызваны PVP.Del.bat, Craft.Del.bat и Trade.Del.bat . :)

ЗЫ: Под виндами начиная с XP рекомендуется использовать вместо расширения BAT расширение CMD. Начиная вроде с Вынь7 файлы CMD обрабатываются движком PowerShell, вместо обычной командной строки, на котором можно сделать больше всяких чудес. :) А в последних виндах обычной командной строки вообще нет, вместо нее осталась как раз PowerShell.

 

Ссылка на комментарий
Поделиться на другие сайты

PowerShell  мог бы быть нужен тут для формы с галочками только, чего не может олдскульная командная строка . Но, как раз формы это не его сильная сторона)   Да и вообще это оверкил, имхо.

Не, для всяких наборов оставим Addon Selector, там все достаточно удобно, а для перфекционизма, для заведомо чистого, с 4-5 аддонами только, боевого набора, достаточно простого батника. И я тоже сначала было сделал с реальными перемещением файлов по папкам, но потом сознательно перешел на переименование папок. Это куда быстрее, безопаснее и код короче.

Пока, по текущему опыту в Сиродиле и ИГ, чистый набор (с 3-4 аддонами) по ощущениям, да, ощущается получше чем выгрузка через  Addon Selector. Но это всё же субъективно. Объективные данные пока методологически непонятно как получить. Я лично буду пока пользоваться, это быстро и не сложно, а эффект может вдруг и дает). Смена набора без перезагрузки игры (чисто по релоаду) работает.

UPD: да и конечно эффект впрямую зависит от того сколько вообще мусора в паке аддонов. Если там десяток аддонов/библиотек и все свежие, то наверное толку нет. Но если папка не чистилась 2 года, то там при внимательном изучении может найтись всякое, и нерабочие и "форковые" версии. Я вот пользуюсь аддоном Autocategory и только сейчас увидел, что пользуюсь старой необновляемой версией, а актуальная версия дается для загрузки отдельно (по сути форк - разветвление версий получилось). В результате все это может работать хуже чем могло бы. Установка заново 3-4 аддонов с чистого листа заведомо решает все проблемы чистки. Может быть именно (и только) это и влияет.

 

Изменено пользователем Veerbat
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...