Перейти к содержимому

[Autoit] Удобное добавление пользовательского прицела


sakhaliness

На форуме мне попадалась тема о ручной замене пользовательских прицелов.

В ней предлагался полный набор папок со всей техникой (на момент создания темы).

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

 

На лайве я взял простой прицел, с разметкой на 6 километров, и немного доработал под себя (сместил цифры шкалы дальности, и линии сделал потоньше).

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

Надоело. Написал скрипт на Autoit для автоматизации этого процесса.
Если у кого-то также имеется один прицел, который вы тоже постоянно меняете для всего на чём играете, то думаю скрипт будет вам полезен.

 

Делает он следующее: 

1. Вызывает окно настроек, выбирает опцию "Использовать альтернативную сетку прицела", выбирает "Добавить прицельную сетку". Выходит из настроек.

2. Удаляет стандартный прицел, копирует ваш файл прицела, в созданную в первом пункте папку (можно было бы и просто заменять стандартный, но уже сделал так), перегружает прицелы.

3. Повторяет пункт 1, выбирая скопированный прицел.


Ваш файл прицела должен находится в корне папки "UserSights".

Измените под себя следующие настройки:

$gameDir = 'a:\Games\WarThunder' ; корневая папка игры
$fileForCopy = '\my_6km_simple.blk' ; ваш файл прицела

 

А также измените, если надо клавишу для перезагрузки прицелов (F9 по умолчанию)

Send('{F9 Down}') ; клавиша для перезагрузки прицелов

Send('{F9 Up}') ; клавиша для перезагрузки прицелов

Подробное описание клавиш Autoit

Далее вы можете для исполнения скрипта назначить горячую клавишу например используя Mkey или любую другую программу для горячих клавиш.

Я например использую nnCron и запись для этого в nncron.tab выглядит так:

#( ChangeUserSights
WatchHotKey: "^{F9}" \ назначено на "CTRL+F9"
Rule: WIN-EXIST: "War Thunder (DirectX 11, 32bit)*"
Action:
START-APPW: "c:\scripts\autoit\WTChangeUserSightsNoLogging.au3"
)#

 

Ниже код скрипта.

 

Скрытый текст

#Include <File.au3>
#Include <Array.au3>

;########   БЛОК НАСТРОЕК    ########
	Opt("SendKeyDelay", 50) ; задержка между нажатиями клавиш.
	$gameDir = 'a:\Games\WarThunder' ; корневая папка игры
	$userSightsDir = $gameDir & '\UserSights\' ; стандартная папка с прицелами
	$StandartFile = '\sight_1.blk' ; файл автоматически созданного прицела
	$fileForCopy = '\my_6km_simple.blk' ; ваш файл прицела
;####################################

Func changeUserSights($copied = 0)
	$hWnd = WinGetHandle("[CLASS:DagorWClass]")
	WinActivate($hWnd)
	WinWaitActive($hWnd)

	If ($copied) Then ; вторичный вызов функции после копирования прицела
		Send('{F9 Down}') ; клавиша для перезагрузки прицелов
		Sleep(100)
		Send('{F9 Up}') ; клавиша для перезагрузки прицелов
		;Sleep(1000) ; ожидание перезагрузки прицелов (увеличивать при большом их количестве)
	EndIf

	Send("{ESC Down}")
	Sleep(100)
	Send('{ESC Up}')
	Sleep(500)

	Send("{DOWN}")
	Send("{ENTER}")
	Sleep(500) ; Ожидание закрузки окна настроек

	$i = 1
	While $i <= 7
		Send("{DOWN}")
		$i = $i + 1
	WEnd

	Send("{RIGHT}")
	Send("{DOWN}") ; отрываем список прицелов
	Send("{LEFT}") ; выбираем
	Send("{ESC}") ; закрываем сообщение о добавлении прицела
	Sleep(500)
	Send("{ESC}") ; в главном окне настроек

	If Not ($copied) Then
		Sleep(500)
		Send("{ESC}")
	EndIf
EndFunc

Func copyUserSights()

	$AllFile = _FileListToArray($userSightsDir, Default, 2) ; Получение массива с именами папок в указанной дирректории

	If IsArray($AllFile) Then ;Если массив создан
		;Для начала предполагаем, что первая папка и есть последняя созданная
		$LastCreatedDir = $AllFile[1]
		$LastCreatedDirDate = FileGetTime($userSightsDir & $AllFile[1], 1, 1)
		If $AllFile[0] > 1 Then ; Если найдено больше, чем одна папка
			For $i = 2 To $AllFile[0] ; Сравниваем дату создания каждой из папок
				If FileGetTime($userSightsDir & $AllFile[$i], 1, 1) > $LastCreatedDirDate Then
					$LastCreatedDir = $AllFile[$i]
					$LastCreatedDirDate = FileGetTime($userSightsDir & $AllFile[$i], 1, 1)
				EndIf
			Next
		EndIf
		$targetDir = $userSightsDir & $LastCreatedDir
		$StandartFile =  $targetDir & $StandartFile

		If FileExists($StandartFile) Then
			FileDelete ($StandartFile) ; удаляем автоматически созданный прицел
		EndIf

		If Not FileExists($targetDir & $fileForCopy) Then
			FileCopy ( $userSightsDir & $fileForCopy, $userSightsDir & $LastCreatedDir)
		EndIf
	EndIf
EndFunc

changeUserSights()
copyUserSights()
changeUserSights(1)

 


Готовый файл скрипта : WTChangeUserSightsNoLogging.txt Измените расширение на .au3

И файл прицела my_6km_simple.txt Измените расширение на .blk

Изменено пользователем Einsamen_Wolf
medal medal medal medal medal medal medal

Поделиться сообщением


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

   Полезная штука:good:.

  Правда я по старинке лучше буду,  благо времени много не занимает)))

medal medal medal medal medal medal

Поделиться сообщением


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

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

благо времени много не занимает)))

не занимает, но зачем клацать, когда можно автоматизировать. Я всегда так делаю.

medal medal medal medal medal medal medal

Поделиться сообщением


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

  • 9 месяца/месяцев спустя...

v.1.1

Теперь пользовательский прицел копируется со стандартным именем "sight_1.blk", заменяя стандартный созданный, для того чтобы не вызвать окно настроек повторно и не выбирать, т.е. теперь весь процесс замены происходит в два раза быстрее.

Скрытый текст

; WTChangeUserSights_v.1.1.au3
; AutoIt скрипт для удобного добавления пользовательского прицела в игре War Thunder
; Инструкция: https://forum.warthunder.ru/index.php?/topic/269335-autoit-udobnoe-dobavlenie-polzovatelskogo-pritsela/&ct=1589896230
; © sakhalines 2020


#Include <File.au3>
#Include <Array.au3>

;########   БЛОК НАСТРОЕК    ########
    Opt("SendKeyDelay", 50) ; задержка между нажатиями клавиш.
    $gameDir = 'a:\Games\WarThunderCh\' ; корневая папка игры
    $userSightsDir = $gameDir & 'UserSights\' ; стандартная папка с прицелами
    $StandartFile = 'sight_1.blk' ; файл автоматически созданного прицела
    $fileForCopy = 'my_6km_simple.blk' ; ваш файл прицела
;####################################


Func changeUserSights()
    $hWnd = WinGetHandle("[CLASS:DagorWClass]")
    WinActivate($hWnd)
    WinWaitActive($hWnd)

    Send("{ESC Down}")
    Sleep(500)
    Send('{ESC Up}')
    Sleep(500)

    Send("{DOWN}")
    Send("{ENTER}")
    Sleep(2000) ; Ожидание загрузки окна настроек

    $i = 1
    While $i <= 8
        Send("{DOWN}")
        $i = $i + 1
    WEnd

    Send("{RIGHT}") ; отрываем список прицелов
    Send("{DOWN}") ; выбираем
    Send("{LEFT}") ; создаём
    Send("{ESC}") ; закрываем сообщение о добавлении прицела
    Sleep(100)
    Send("{DOWN}")
    Send("{DOWN}")
    Send("{DOWN}")

    Send("{RIGHT}") ; снова отрываем список прицелов
    Send("{DOWN}") ; выбираем
    Send("{LEFT}") ; выбираем созданный

    Send("{ESC}") ; в главном окне настроек
    Sleep(500)
    Send("{ESC}") ; в игре
EndFunc


Func copyUserSights()

    $AllFile = _FileListToArray($userSightsDir, Default, 2) ; Получение массива с именами папок в указанной дирректории

    If IsArray($AllFile) Then ;Если массив создан
        ;Для начала предполагаем, что первая папка и есть последняя созданная
        $LastCreatedDir = $AllFile[1]
        $LastCreatedDirDate = FileGetTime($userSightsDir & $AllFile[1], 1, 1)
        If $AllFile[0] > 1 Then ; Если найдено больше, чем одна папка
            For $i = 2 To $AllFile[0] ; Сравниваем дату создания каждой из папок
                If FileGetTime($userSightsDir & $AllFile[$i], 1, 1) > $LastCreatedDirDate Then
                    $LastCreatedDir = $AllFile[$i]
                    $LastCreatedDirDate = FileGetTime($userSightsDir & $AllFile[$i], 1, 1)
                EndIf
            Next
         EndIf
         FileCopy ( $userSightsDir & $fileForCopy, $userSightsDir & $LastCreatedDir & "\" &  $StandartFile, 1 ) ; 1 = флаг для перезаписи
    EndIf
EndFunc

changeUserSights()
copyUserSights()

Send('{F9 Down}') ; клавиша для перезагрузки прицелов
Sleep(100)
Send('{F9 Up}') ; клавиша для перезагрузки прицелов
; Sleep(2000) ; ожидание перезагрузки прицелов (увеличивать при большом их количестве)

 

 

WTChangeUserSights_v.1.1.txt

Изменено пользователем sakhaliness
medal medal medal medal medal medal medal

Поделиться сообщением


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

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×
×
  • Создать...