Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]
BloodDick
03-05-2012, 09:39
Ответите мб?)
R.i.m.s.k.y.
03-05-2012, 09:40
BlackInferno,
Source: "C:\Program Files\WCS Real 2003\Redist\DirectX.exe"; DestDir: {app}\Redist ; Flags: ignoreversion; Components: Component1
Source: "C:\Program Files\WCS Real 2003\Redist\GameSpy Arcade.exe"; DestDir: {app}\Redist ; Flags: ignoreversion; Components: Component2
Ну и конечно эти экзешники должны лежать в WCS Real 2003\Redist и не больжно быть в WCS Real 2003
В текущей реализации в этих двух строчках нет смысла, сначала вы копируете всё что есть независимо от выбора компонентов, а потом еще раз при выбранном компоненте
Надо вынести WCS Real 2003\Redist\* в другую папку
Кстати когда компонентов станет больше трех придет запоздалое понимание того что называть их Component1/2 было плохой идеей ;)
Можно любое слово, даже неприличное
BloodDick
03-05-2012, 09:43
R.i.m.s.k.y. »
Можешь пожалуйста по подробней расписать?)
BlackInferno
03-05-2012, 09:45
внимательно смотри на 3 и 4 строчку раздела [Files] параметр DestDir »
Как я понял параметр DestDir обязательный и идет с константой "{app}", по этому выкинуть я его не могу. Может после "{app}" дописать папку?
Что-то вроде этого:
DestDir: {app}\Redist;
Или может значние изментить в параметре Flags?
Кстати а чегой-то у тебя нету секции реестра? потом ни патч не накатишь ничего официального не поставишь »
Игра просто колоссально допотопная там даже банального руссификатора не предвидится)
И не забывай жмякать "Полезное сообщение" »
Ой, да, просто не знаком со структурой форума. Жмякнул)
R.i.m.s.k.y.
03-05-2012, 09:47
BlackInferno, а куда подробнее
Твой скрипт самый простой, именно на таких и приходит понимание чего там внутри крутится
Слово Component1 замени на DirectXSetup, Component2 на GameSpySetup
Инсталлер работает по секциям сверху вниз, порядок выполнения секций ищи в справке по слову installation order
Так же искать в справке значения констант, {app} это папка в которую будет установлена прога, можно выкинуть и все будет поставлено в место где лежит дистр
Во флагах ничего менять не нужно, ignoreversion значит что все файлы в будут в {app} перезатерты без проверки (если есть)
Правильно держать Source папки не в одной как у тебя в \WCS Real 2003, а разделять их: одна папка именно для проги, вторая для компонентов, третья для рисунков инсталлера
Причем все эти папки не должны быть вложенными
Еще правильнее вообще для каждой задачи и компонента по независимой подпапке, так ничего не перепутается
BloodDick
03-05-2012, 09:50
Спасибо)
R.i.m.s.k.y.
03-05-2012, 10:18
BloodDick, а блин промахнулся, оба-два на Bl
не тебе не хелпну ибо а) это заподло и б) я не умею делать музыку и рисунки в Инно, видишь последнюю строчку в подписи? вотт
BloodDick
03-05-2012, 10:20
=((((((((((((((((((
Народ помогитееее))))))
BlackInferno
03-05-2012, 10:35
R.i.m.s.k.y., огромнейшее спасибо, человечеще! Все работает как надо!
Так на будущее, опиши как надо "правильно" вносить данные в реестр.
Вот нашел такую инфу, может дополнишь чем-нибудь, только попонятнее напиши)))
нажмите Win+R (или пуск->выполнить) - В строке пишите "regеdit" нажимаешь "Enter"
Таким образом мы попадаем в редактор реестра Windows... В реестре все значения и данные хранятся в виде ключей разных типов.
Откройте ветку HKEY_LOCAL_MACHINE -> SOFTWARE и найдите там свою игру которую вы установили.
Нашли? - подсвечиваем мышку к этой папке и нажимаем правую кнопку мыши (т.е. контекстное меню) -> "Экспортировать"
Дальше сохраняете этот файл (.reg - ключик реестра windows) для удобности себе на "Рабочий стол".
Потом создаёте инсталятор через Inno Setup.
Потом уж сохраняете этот скрипт.
Дальше зайдите в ISTool откройте в нём тот скрипт который сохранили.
Дальше с левой стороны выбираете секцию "Реестр" И справа от этих "секций" у тебя будет поле в клеточку. Вот на этом поле нажмите на правую кнопку мыши и выберите "Импортировать из файла"
Выберите тот файл "реестра" который вы сохранили.
Дальше выбирайте секцию "Скрипт"
Опускайтесь в самый низ и там будет вкладка "[Registry]"
В этой вкладке синим шрифтом написано "ValueData": и вот то-что после этой "ValueData" написано, сотрите.
И вставьте вот это:
{app}; Flags: uninsdeletekey
Дальше сохраняйте скрипт. Потом заходите опять в Inno Setup. Откройте этот скрипт и запустите чтобы он делал инсталятор.
Может что еще посоветуешь? Я просто ранее сталкивался с такой проблемой: после выполнения всего вышеперечисленного я открывал скрипт, что бы запустить его на создание репака, но выбивало ошибку, что мол есть синтаксичеческая ошибка. Типо кавычек создавалось дофига...
R.i.m.s.k.y.
03-05-2012, 10:46
BlackInferno, советую использовать регшот, он дает готовый файл для имортирования его в скрипт, только потом надо поудалять лишний шум и поменять папки на переменные {app}
BloodDick
03-05-2012, 10:48
на чём такое хоть сделать можно?))
R.i.m.s.k.y.
03-05-2012, 10:56
BloodDick, на ассемблере точно
BlackInferno
03-05-2012, 11:01
R.i.m.s.k.y., все-таки решил и в реестр внести информацию пусть будет репак грамотным.
Вот у меня образовался такой вот скрипт:
[Registry]
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: ; ValueData:
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: Servername; ValueData: PC
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: Version; ValueData: 10.8
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: CD_KEY; ValueData: CD_KEY
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: InstallDir; ValueData: C:\Program Files\WCS Real 2003\
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: string; ValueName: ; ValueData:
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: REQH; ValueData: e0 01 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: REQW; ValueData: 80 02 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: REQBPP; ValueData: 20 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: SFX; ValueData: 01 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: MUSIC; ValueData: 01 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: TRIPLE; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: TEXEL; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: WINDOW; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: SFOFF; ValueData: 01 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: SAVELIST; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: INDEX; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: CHECKSUM; ValueData: e3 70 1a 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: REFL; ValueData: 02 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: AAOFF; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: LOD; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: REFRESHRATE; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: SWVP; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: SHADOWS; ValueData: 01 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: CROWD; ValueData: 01 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: EXTRAANIMS; ValueData: 02 00 00 00
Мне после всех "ValueData" нужно стирать и дописывать "{app}; Flags: uninsdeletekey"???
R.i.m.s.k.y.
03-05-2012, 11:06
BlackInferno, нед
заменить C:\Program Files\WCS Real 2003\ на {app}, угадай зачем
Флаг uninsdeletekey, но пользуйся им осторожно, прочитай почему
BlackInferno
03-05-2012, 11:16
заменить C:\Program Files\WCS Real 2003\ на {app}, угадай зачем »
Ну это для того, если пользователь будет устанавливать прогу в место отличное от моего места, вроде так...
Флаг uninsdeletekey, но пользуйся им осторожно, прочитай почему »
Да, прочитал, можно случайно удалить и виндосовские фалы.
[hr]
Вообщем у меня скрипт секции реестра получился вот таким:
[Registry]
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: ; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: Servername; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: Version; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: CD_KEY; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: InstallDir; ValueData: {app}
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: string; ValueName: ; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: REQH; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: REQW; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: REQBPP; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: SFX; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: MUSIC; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: TRIPLE; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: TEXEL; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: WINDOW; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: SFOFF; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: SAVELIST; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: INDEX; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: CHECKSUM; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: REFL; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: AAOFF; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: LOD; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: REFRESHRATE; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: SWVP; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: SHADOWS; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: CROWD; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: EXTRAANIMS; ValueData: {app}; Flags: uninsdeletekey
У меня при компиляции вышеуказанного срипта ошибка:
http://i36.fastpic.ru/thumb/2012/0503/c8/5f66ff13cf1a9ad54a2a5cc1baf7a1c8.jpeg (http://fastpic.ru/view/36/2012/0503/5f66ff13cf1a9ad54a2a5cc1baf7a1c8.png.html)
Как ее исправить?
R.i.m.s.k.y.
03-05-2012, 11:20
BlackInferno, как говорил Весемир: "Бенджи тежко"
1. Ты зачем все поменял на {app}?
1.1. нет, {app} это папка установки, если у тебя в Files все кидается в {app} то и в реестре соответсвенно надо прописывать {app}
2. реестр и файл разные вещи, если с собачьим проблемы в шапке русская справка, флаги для секции [Files] не подходят для [Registry]
3. Ошибка потому что поменял бинарные значения на строковые. Я ж сказал только одно значение поменять, и на твой вопрос "менять ли все?" ответил "нет"
BlackInferno
03-05-2012, 11:29
Понятно. Вроде сейчас компиляция иден нормально.
Код вот такой, заменил в нем только то, что ты и сказал "заменить C:\Program Files\WCS Real 2003\ на {app}".
Вот что получилось:
[Registry]
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: ; ValueData:
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: Servername; ValueData: PC
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: Version; ValueData: 10.8
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: CD_KEY; ValueData: CD_KEY
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003; ValueType: string; ValueName: InstallDir; ValueData: {app}
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: string; ValueName: ; ValueData:
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: REQH; ValueData: e0 01 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: REQW; ValueData: 80 02 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: REQBPP; ValueData: 20 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: SFX; ValueData: 01 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: MUSIC; ValueData: 01 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: TRIPLE; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: TEXEL; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: WINDOW; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: SFOFF; ValueData: 01 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: SAVELIST; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: INDEX; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: CHECKSUM; ValueData: e3 70 1a 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: REFL; ValueData: 02 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: AAOFF; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: LOD; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: REFRESHRATE; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: SWVP; ValueData: 00 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: SHADOWS; ValueData: 01 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: CROWD; ValueData: 01 00 00 00
Root: HKLM; SubKey: SOFTWARE\Codemasters\World Championship Snooker 2003\STARTUP; ValueType: binary; ValueName: EXTRAANIMS; ValueData: 02 00 00 00
А как мне тогда написать, что бы все реестровые данные после удаления программы тоже удалялись? Тут же полюбому нужен "Flags: uninsdeletekey". Куда его тогда ставить? На каждую строчку?
R.i.m.s.k.y.
03-05-2012, 11:31
Тут же полюбому нужен "Flags: uninsdeletekey". Куда его тогда ставить? На каждую строчку? »
Можно на одну корневую ветку, т.е к первой строчке прилепить флаг uninsdeletekey
Про осторожность выше ты угадал причину - чтобы не смахнуть вендовые ветки
Temyraz@fb
03-05-2012, 11:38
ребята подскажите мне, как сделать следующее
при удалении запускается приложение
[UninstallRun]
FileName: "{app}\Uninstalls.exe"
как сделать так что если в том приложении нажали на отмена, тут тоже отменилась удаление?
BlackInferno, R.i.m.s.k.y., ну и зачем городить такой огород? Запихивать в инсталлятор дистрибутив, распаковывать его в папку установки и только потом, оттуда, запускать? Не проще ли (да и быстрее по времени) расположить папку с дистрибутивом рядом с Setup.exe и запускать оттуда, не копируя файлы в {app}? Тогда и в директории установки не будут создаваться файлы дистрибутива. И ещё, обычно дополнительный софт располагают не на странице выбора компонентов, а на странице дополнительных задач.
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
SolidCompression=yes
Compression=lzma/ultra
ShowTasksTreeLines=true
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Tasks]
Name: Redist; Description: Дополнительное программное обеспечение:
Name: Redist\directx; Description: Обновить Microsoft DirectX;
[Run]
Filename: {src}\Redist\DirectX\DXSETUP.exe; WorkingDir: {src}\Redist\DirectX\; Parameters: /silent; StatusMsg: Идет обновление DirectX... Пожалуйста, подождите.; Tasks: Redist\directx; Flags: skipifdoesntexist waituntilterminated
Папку Redist с вложенной в неё папкой DirectX располагаешь рядом с Setup.exe в папке Output по умолчанию. Ну и соответственно потом на диске установки (если будет создаваться) должна находиться папка Redist.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.