Jump to content
Korean Random
GPCracker

Улучшенная система прицеливания / Advanced Aiming System

Recommended Posts

Межмододельная совместимость файлов.

Я в том смысле, что, к примеру, кто-то делает кнопку "В бой!", а кто-то - меняет, допустим, заголовок окна ЛБЗ. А и то и то лежит в файле menu. Как предложишь совмещать?)

Каждый мододел создает себе отдельный персональный *.mo файл. Пишет туда что ему вздумается. Поскольку файл персональный, конфликты могут быть разве если мододелы один файлнейм не поделят. А дальше т.н. ремап. Ну да, тут нужен скрипт толковый и конфиг.

К примеру:

#A:B заменить на #C:D

#A:E Заменить на Random(#F:G, #H:I, #J:K)

#L:M заменить на Seq(#F:G, #H:I, #J:K)

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

И в том же духе. Систему с распределенным конфигом, т.е. для каждого мода свой файл замен + плюс бут-файл - порядок загрузки, либо просто в алфавитном грузить (как вариант такой файл может создавать сам пользователь для решения конфликтов между модами).

Как-то так.

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

Edited by GPCracker
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

 

 

Каждый мододел создает себе отдельный персональный *.mo файл. Пишет туда что ему вздумается. Поскольку файл персональный, конфликты могут быть разве если мододелы один файлнейм не поделят.

А что мешает сделать так?

 

Каждый мододел создает себе отдельный персональный .json файл. Пишет туда что ему вздумается. Поскольку файл персональный, конфликты могут быть разве если мододелы один файлнейм не поделят. А дальше т.н. ремап. Ну да, тут нужен скрипт толковый и конфиг.

К примеру:
#menu:headerButtons/hangar заменить на "Гараж"
#menu:headreButtons/battle заменить на Random("За Сталина!", "За бритами!", "Burzuuum")
И в том же духе. Систему с распределенным конфигом, т.е. для каждого мода свой файл замен. + Алфавитный порядок загрузки конфигов для разрешения межключевых конфликтов со склейкой последовательностей замен из разных файлов.

Как-то так.

Ни один уже существующий и стремительно приближающийся к 35к юзеров мод не напоминает? :gg:

Share this post


Link to post

Short link
Share on other sites

Ни один уже существующий и стремительно приближающийся к 35к юзеров мод не напоминает?

Ну так не напоминал бы, наверное тут этого диалога не было :)

Просто ты спросил - я ответил. Как я решение такого вопроса примерно вижу. По крайней мере наши мнения и подходы по большей части совпадают :)

Хотя так-то есть чего в том модике и допилить :)

 

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

Некоторые вещи в моде очень неудобно хранить в XML, если их оттуда убрать, то в принципе ОК. Просто рассматриваю gettext как самый логичный вариант.

А что мешает сделать так?

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

Потому и создал задачу на трекере. Ибо если они этот вопрос решат, так будет интереснее всем :)

Edited by GPCracker
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
Хотя так-то есть чего в том модике и допилить :)

D83DDE11.png

Знать бы, что именно :)

 

Хотя лично мне интересно не столько патчинг существующих файлов, сколько создание своих для хранения теКстовых значений. (насчет К я предположил :P)

В принципе - можно объединить наши подходы. В JSON-е сделать ремап ключ-ключ (а не ключ-текст, как у меня :) ) и по этому ремапу дёргать тексты из кастомных файлов .mo. Но опять же - излишнее усложнение работы по созданию конфига, ИМХО :)

 

Некоторые вещи в моде очень неудобно хранить в XML, если их оттуда убрать, то в принципе ОК.

А в версии, которая выйдет вместе с 9.15.1, я вообще полностью убрал поддержку XML, остался только JSON :)

 

P.S. Только что подумал, что благодаря JSON-у можно уйти от textList = textString.split(';') и вместо этого просто захардкодить в JSON сразу массив. Быстро и красиво :)

*ушел кодить :P

 

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

А где проблема с копированием? Модик-который-негласно-решено-не-называть вообще папку text для работы не требует. Standalone, если можно так выразиться :)

Edited by Polyacov_Yury

Share this post


Link to post

Short link
Share on other sites

походу накрыли....

/------------------------------------------------------------------------------------------\
WorldOfTanks 0.9.15.1 (compiled at 13:18:16 Jul 7 2016) starting on 07/26/16 16:56:52

2016-07-26 16:56:52.598: INFO: [Config] Command line: G:/World_of_Tanks_ru/WorldOfTanks.exe -clientGraphicsAPI d3d9
2016-07-26 16:56:53.607: INFO: [Config] Default encoding set to utf-8
2016-07-26 16:56:53.639: INFO: [PY_DEBUG] Release Client - Content Type: sd

2016-07-26 16:56:53.639: INFO: [PY_DEBUG] Checking ./res_mods/0.9.15.1: mods found
2016-07-26 16:56:53.717: INFO: WARNING: WWISE support IS enabled.
2016-07-26 16:57:03.251: INFO: [NOTE] package loaded: mod_modsListAPI
2016-07-26 16:57:03.259: INFO: [NOTE] package loaded: mod_modsSettingsApi
2016-07-26 16:57:03.259: INFO: [NOTE] package loaded: mod_pro_achivments
2016-07-26 16:57:03.472: INFO: [NOTE] package loaded: mod_pro_armor_resist
2016-07-26 16:57:03.654: INFO: [NOTE] package loaded: mod_pro_minimap_guns
2016-07-26 16:57:05.941: INFO: [NOTE] package loaded: mod_pro_potapov
2016-07-26 16:57:06.329: INFO: [NOTE] package loaded: mod_pro_sound
2016-07-26 16:57:06.540: INFO: [NOTE] package loaded: mod_pro_staff
2016-07-26 16:57:06.808: INFO: [NOTE] package loaded: mod_sight
2016-07-26 16:57:06.809: INFO: [OLD MODS LOADER] loading mod: AdvancedAimingSystem
2016-07-26 16:57:06.830: INFO: [OLD MODS LOADER] Error in module AdvancedAimingSystem:
2016-07-26 16:57:06.830: ERROR: Traceback (most recent call last):
2016-07-26 16:57:06.831: ERROR: File "mod_old_mods_loader", line 20, in init
2016-07-26 16:57:06.831: ERROR: File "scripts/common/Lib/importlib/__init__.py", line 37, in import_module
2016-07-26 16:57:06.831: ERROR: File "AdvancedAimingSystem.py", line 58, in
2016-07-26 16:57:06.831: ERROR: ImportError: No module named aims
2016-07-26 16:57:06.948: NOTICE: [NOTE] (scripts/client/post_processing/__init__.py, 269): The quality = 4 was selected.
2016-07-26 16:57:06.948: NOTICE: [NOTE] (scripts/client/post_processing/__init__.py, 269): The quality = 3 was selected.
2016-07-26 16:57:18.893: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: LOGIN - 26.297000885
2016-07-26 16:57:18.944: NOTICE: [NOTE] (scripts/client/ConnectionManager.py, 220): User authentication method: basic
2016-07-26 16:57:21.611: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: CONNECTED - 29.0149993896
2016-07-26 16:57:23.224: NOTICE: [NOTE] (scripts/client/account_helpers/settings_core/options.py, 723): Change state of voip: (True,)
2016-07-26 16:57:23.285: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: SHOW GUI - 30.688999176
2016-07-26 16:57:29.222: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: QUESTS SYNC - 36.6259994507
2016-07-26 16:57:29.283: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: USS SYNC - 36.6870002747
2016-07-26 16:57:29.903: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: SPACE LOADING START - 37.3069992065
2016-07-26 16:57:30.430: NOTICE: [NOTE] (scripts/client/game.py, 426): [sPACE] Loading space: spaces/hangar_v2
2016-07-26 16:57:30.470: WARNING: [WARNING] (scripts/client/account_helpers/CustomFilesCache.py, 36): Method "__run_read" takes too much time 0.566999912262
2016-07-26 16:57:32.091: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: VEHICLE LOADING START - 39.4949989319
2016-07-26 16:57:35.660: ERROR: Traceback (most recent call last):
2016-07-26 16:57:35.660: ERROR: File "scripts/client/messenger/proto/xmpp/gloox_wrapper.py", line 484, in onHandleIq
2016-07-26 16:57:35.660: ERROR: File "scripts/client/messenger/proto/xmpp/gloox_wrapper.py", line 506, in __handleEvent
2016-07-26 16:57:35.660: ERROR: File "scripts/client/messenger/proto/xmpp/spa_requesters.py", line 154, in __handleIQ
2016-07-26 16:57:35.661: ERROR: File "scripts/client/messenger/proto/xmpp/spa_requesters.py", line 115, in __doCallback
2016-07-26 16:57:35.661: ERROR: File "scripts/client/gui/shared/utils/requesters/RequestsController.py", line 140, in _callbackWrapper
2016-07-26 16:57:35.661: ERROR: File "scripts/client/gui/shared/view_helpers/UsersInfoHelper.py", line 176, in
2016-07-26 16:57:35.661: ERROR: File "scripts/client/gui/prb_control/invites.py", line 684, in onUserNamesReceived
2016-07-26 16:57:35.661: ERROR: File "scripts/client/gui/prb_control/invites.py", line 871, in _inviteMaker
2016-07-26 16:57:35.661: ERROR: AttributeError: 'NoneType' object has no attribute 'get'
2016-07-26 16:57:36.624: ERROR: Traceback (most recent call last):
2016-07-26 16:57:36.627: ERROR: File "scripts/client/gui/shared/utils/requesters/RequestsController.py", line 75, in _doRequest
2016-07-26 16:57:36.627: ERROR: File "scripts/client/gui/shared/view_helpers/UsersInfoController.py", line 122, in _getNicknames
2016-07-26 16:57:36.627: ERROR: File "scripts/client/messenger/proto/xmpp/spa_requesters.py", line 92, in resolve
2016-07-26 16:57:36.627: ERROR: File "scripts/client/messenger/proto/xmpp/spa_requesters.py", line 115, in __doCallback
2016-07-26 16:57:36.627: ERROR: File "scripts/client/gui/shared/utils/requesters/RequestsController.py", line 140, in _callbackWrapper
2016-07-26 16:57:36.627: ERROR: File "scripts/client/gui/shared/view_helpers/UsersInfoHelper.py", line 176, in
2016-07-26 16:57:36.627: ERROR: File "scripts/client/gui/prb_control/invites.py", line 684, in onUserNamesReceived
2016-07-26 16:57:36.627: ERROR: File "scripts/client/gui/prb_control/invites.py", line 871, in _inviteMaker
2016-07-26 16:57:36.627: ERROR: AttributeError: 'NoneType' object has no attribute 'get'
2016-07-26 16:57:36.697: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: VEHICLE LOADING END - 44.1010017395
2016-07-26 16:57:37.739: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: SPACE LOADING END - 45.1430015564
2016-07-26 16:57:37.742: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: HANGAR READY - 45.1459999084
2016-07-26 16:57:37.742: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 276): HANGAR LOADING STATE: SUMMARY TOTAL = 18.8489990234
2016-07-26 16:58:09.570: NOTICE: [NOTE] (scripts/client/gui/battle_control/arena_info/arena_dp.py, 511): Player's team not found.
2016-07-26 16:58:09.570: NOTICE: [NOTE] (scripts/client/gui/battle_control/arena_info/arena_dp.py, 517): Player's vehicle ID not found.
2016-07-26 16:58:09.570: NOTICE: [NOTE] (scripts/client/gui/battle_control/arena_info/arena_dp.py, 521): Uses slow player search by name
2016-07-26 16:58:09.901: NOTICE: [NOTE] (scripts/client/game.py, 426): [sPACE] Loading space: spaces/11_murovanka
2016-07-26 17:03:35.593: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: CONNECTED - 402.997009277
2016-07-26 17:03:37.904: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: SHOW GUI - 405.308990479
2016-07-26 17:03:38.969: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: QUESTS SYNC - 406.37298584
2016-07-26 17:03:39.039: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: USS SYNC - 406.442993164
2016-07-26 17:03:39.544: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: SPACE LOADING START - 406.947998047
2016-07-26 17:03:39.550: NOTICE: [NOTE] (scripts/client/game.py, 426): [sPACE] Loading space: spaces/hangar_v2
2016-07-26 17:03:42.500: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: VEHICLE LOADING START - 409.903991699
2016-07-26 17:03:44.304: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: VEHICLE LOADING END - 411.708007812
2016-07-26 17:03:45.067: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: SPACE LOADING END - 412.471984863
2016-07-26 17:03:45.067: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 248): HANGAR LOADING STATE: HANGAR READY - 412.471984863
2016-07-26 17:03:45.067: NOTICE: [NOTE] (scripts/client/helpers/statistics.py, 276): HANGAR LOADING STATE: SUMMARY TOTAL = 9.47497558594
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

походу накрыли....

Походу они со своим AS3 и туда добрались...
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

тоска без дальномера играть. ..  :sob0::sob:

GPCracker подай надежду.   :thx:

Edited by Scharfhobel
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

GPCracker подай надежду.

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

Изменения коснулись многих модов, в особенности тех, кто работал с GUI, миникартой, частично с системами наведения. Как было тогда с модельками. Что-то удается коллективно поднять при помощи адских костылей (маркеры на миникарте как пример), что-то требует значительных правок.

КТТС, в общем. По мере наличия свободного времени и сил.

По крайней мере, ИМХО, вряд ли что в этой области в ближайшее время будут кардинально менять. Затишье бывает не только перед бурей, но и обычно наступает после нее. А так, за один заход исправить дешевле и проще, чем по частям, меньше затрат на согласование старого и нового кода и вылезающих из этого костылей. Ну и так - проще сделать и забыть, точнее перейти на другое направление спокойно чем постоянно прыгать туда-сюда.

Upd. Мне кажется, или маркер орудия все еще AS2 или в легаси режиме? Флешку прицельной сетки они вытащили, выкинув в публичный межмодульный доступ дескрипторы типа смещения прицела на экране, зума и позицию маркера...

А вот класса на контроль маркера в DAAPI я не нашел чего-то... Может плохо искал. Зато в AIH хвосты на него еще висят.

В целом пока общая логика не менялась. Нужно только править хвосты касательно GUI (ну а вместе с ним еще и систему захвата цели), да и некоторые вещи давно пора уже раскидать по своим местам, плюс систематизировать основной модуль - корректировку дальномера. А то уж больно у него обвес серьезный со временем нарисовался.

Upd 2. Что-то они там реально с GUI намутили. Походу еще не все допилили, или не весь мусор прибрали.

Edited by GPCracker
  • Upvote 3

Share this post


Link to post

Short link
Share on other sites

А вот класса на контроль маркера в DAAPI я не нашел чего-то... Может плохо искал. Зато в AIH хвосты на него еще висят.

And I have not found here in the class marker control DAAPI something ... maybe bad looking. But in AIH tails it is still hanging.

is this what your looking for?

 

scripts/client/gui/Scaleform/daapi/view/meta/AimMeta.py

and/or

scripts/client/gui/Scaleform/daapi/view/battle/shared/crosshair_panel.py

Share this post


Link to post

Short link
Share on other sites

is this what your looking for?

It is not enough to redirect aim update callbacks... there are more changes. Fix one and you will get the next exception. And there were enough bugs in 0.9.15.0.1 already. Complex fix is required, as long full functional check. Hotfix will be real buggy even if I make it.
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

На сайте тузов появился мод автозахвата за препятствиями ( и на расстоянии корпуса от танка во все стороны, не обязательно внутрь контура наводиться ) с индикацией, внутри ссылка на Еврофорум танков http://forum.worldoftanks.eu/index.php?/topic/441413-09151-autoaim-indicationsnappingaddins/

Share this post


Link to post

Short link
Share on other sites

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

Да видел уже этот мод, ему так-то уже не один патч. Особо не копался, времени не было. Edited by GPCracker

Share this post


Link to post

Short link
Share on other sites

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


Куда и как скинуть прицел чтобы вам его показать?

  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

Куда и как скинуть прицел чтобы вам его показать?

Ничего никуда скидывать не нужно.

Нужно для начала прочитать то, что написано в шапке темы, перед тем, как писать посты. Это как минимум. Это касается вообще ЛЮБОЙ темы.

Этот мод - ЭТО НЕ ПРИЦЕЛ. К прицелу вообще не имеет никакого отношения. Это СКРИПТЫ КОРРЕКТИРОВКИ ДАЛЬНОМЕРА, плюс всякие дополнительные плюшки.

Сколько еще раз это нужно написать, чтобы все услышали?

Как подогнать его под это обновление, учитывая что я не шарю во всём этом.

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

 

З.Ы. Сорян за тон, только приехал с поезда, устал жутко.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Кстати после обновы в игре собственные трассеры появились..

так то трассеры собственные всегда были

Share this post


Link to post

Short link
Share on other sites

Кстати после обновы в игре собственные трассеры появились..

 

Кривые моды у тебя были ))))

Share this post


Link to post

Short link
Share on other sites

Обнадёжь хозяин,когда ждать твой шедевр? Без него реально невозможно.

Share this post


Link to post

Short link
Share on other sites

Обнадёжь хозяин,когда ждать твой шедевр? Без него реально невозможно.

Картошка втихаря за несколько патчей "приготовила подарок" в виде перехода на AS3. Изменилось много чего. За один патч они бы столько не смогли накодить. Там одного питона как за два или три патча. Не говоря уже про флешки, которые полностью почти заменили. Туда же атласы, и новый обработчик миникарты... Да, картоха перепилила еще и класс движка, который за миникарту отвечает! Теперь там другая система слоев маркеров, и для каждого типа маркеров свои классы. Явно не за патч запилили, короч.

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

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

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

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

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

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

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

Вот даже взять рентген-сканер цели. Либа низкого уровня, лежит в XModLib. Вектор сканирования берется по перекрестию прицела. Это aim offset. Картоха перенесла параметр, пока еще толком не разбирался.

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

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

Не говоря уже о том, что нужно уже впиливать класс-обработчик дальномера и еще несколько внутренних апдейтов.

В момент обновы все это было в таком несколько раскопанном состоянии, поэтому есть некоторые сложности привести все это в порядок.

Короч, work in progress. По мере наличия времени, сил и желания этим заниматься. Последний год вообще какой-то напряженный, если на 2 курсе не делали вообще ничего и закрывались на хор и в срок, то тут постоянно что-то приходится делать по учебе, так еще и в сроки не совсем вписываешься. Парни с 4го говорят, что там вообще п****ц полный, ну не знаю, посмотрим, как говорится.

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

Единственно, что радует - на предприятии особо появляться не заставляют, но нужно на днях будет замоделить одну аналоговую схемку, снять кучу параметров и запилить отчет... А еще даже софт не ставил, не говоря уже про чтение ТУ на компонент.

Так что... как-то так. КТТС.

  • Upvote 4

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...