Jump to content
Korean Random

[Сниппеты / Snippets] Расширенная настройка боевого интерфейса


Recommended Posts

Я между делом переделал настройку элементов управления, и такая охрененная штука получилась! Можно настроить ООООЧЕНЬ многое через конфиг, совершенно не пересобирая код. Поддерживаются все объекты, начиная с _root, можно выводить в лог значения различных объектов, причем с разным уровнем вложенности, можно использовать математические выражения!!! и переменные в них.

 

Вот, например, передвинул счетчик боя, изменил в нем шрифт, подровнял двоеточие:

post-5504-0-42896500-1373655129_thumb.jpg

 

Делается это вот таким кодом:

snippet-bt.xc

{
  //"$log": 1,             // команда $log используется для вывода значений в лог, число - уровень вложенности
  "def": {
    "tf": {                    // подстановка для формата текста
      //"$log": 1,             // тоже можно логгировать
      "size": 30,              // размер шрифта
      "font": "$TitleFont",    // шрифт пожирнее        
      "align": "center"        // выравнивание
    }
  },
  "battleTimer": {             // будем править таймер - объект _root.battleTimer
    //"_x": "$log",            // можно логгировать отдельное значение (_x, к примеру, только так можно вывести)
    "_x": "WIDTH / 2",         // установить X по середине экрана. будет работать при любом разрешении
    "_y": 50,                  // установить Y на 50 сверху
    "dotsMC": {                // TextField: точки
      "_x": "-80/2",           // центрируем
      "_y": "-3",              // выравниваем точки относительно цифр
      "_height": 100,          // высота (с запасом)
      "_width": 80,            // ширина (с запасом)
      "text": ":",
      "$textFormat": ${"def.tf"}
    },
    "secondsMC": {             // TextField: секунды
      "_x": 5,                 // выравнивание влево, поэтому x = 5
      "_height": 100,          // высота (с запасом)
      "_width": 80,            // ширина (с запасом)
      "$textFormat": { "$ref": { "path": "def.tf" }, "align": "left" } // формат текста с выравниванием влево
    },
    "minutesMC": {             // TextField: минуты
      "_x": -85,               // выравнивание вправо, поэтому x = -(width+5)
      "_height": 100,          // высота (с запасом)
      "_width": 80,            // ширина (с запасом)
      "$textFormat": { "$ref": { "path": "def.tf" }, "align": "right" } // формат текста с выравниванием вправо
    }
  }
}
При разборе мат. выражений используются контексты - это массив объектов, которые можно использоваться для переменных. Ищутся переменные в контекстах по очереди - не нашли в одном, ищем дальше.

Список используемых контекстов:

Можно использовать иерархию объектов, если написать через ".":

"_x": "minimap._x - 20" - установить координату на 20 пикселей левее миникарты (теоретически).

 

 

Подключается это в battle.xc:

{
  "battle": {
    ...
    "elements": [ ${"snippet-bt.xc":"."} ]
  }
}
Так как это массив, сниппеты подключаются по очереди, и их может быть сколько угодно.

 

Есть набор команд в сниппетах:

"$log": N - отобразить поля текущего объекта на глубину N (не рекомендую ставить более 2-3, будет очень долго)

"$delay": N - запустить сниппет с задержкой в N мсек

"$interval": N - периодически запускать сниппет с интервалом в N мсек

 

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

sirmax-snippet-pp.xc

{
  "$delay": 100,
  "leftPanel": { "state": "short" },
  "rightPanel": { "state": "short" }
}
Можно даже установить разные режимы для ушей.

 

Очень удобно создавать отдельные сниппеты в отдельных файлах, и подключать их таким образом:

"elements": [
    ${"sirmax-snippet-bt.xc":"."}, // battle timer
    ${"sirmax-snippet-pp.xc":"."}  // players panels
  ],
В этом случае можно сделать репозиторий сниппетов, и обмениваться ими.

 

Основные элементы интерфейса (данный сниппет их отключает):

{
  "$delay": 100, // задержка в 100 мсек, чтобы все успело инициализироваться
  "leftPanel": { "state": "none" },          // панель уши левые
  "rightPanel": { "state": "none" },         // панель уши правые
  "minimap": { "_alpha": 0 },                // миникарта
  "playerMessangersPanel": { "_alpha": 0 },  // сообщения чат убитых(кто кого убил)
  "switcher_mc": { "_alpha": 0 },            // панель переключения ушей
  "fragCorrelationBar": { "_alpha": 0 },     // счёт боя
  "debugPanel": { "_alpha": 0 },             // пинг-лаг-фпс панель
  "battleTimer": { "_alpha": 0 },            // время боя
  "damagePanel": { "_alpha": 0 },            // дамаг-панель
  "sixthSenseIndicator": { "_alpha": 0 },    // индикатор(шестое чувство)
  "vehicleErrorsPanel": { "_alpha": 0 },     // сообщения в центре экрана(о снаряжении, командире)
  "messenger": { "_alpha": 0 },              // сообщения(чат что пишут игроки)
  "damageInfoPanel": { "_alpha": 0 },        // ?
  "timerBig": { "_alpha": 0 },               // таймер до начала боя
  "deathZoneTimer": { "_alpha": 0 },         // ?
  "overturnedTimer": { "_alpha": 0 },        // ?
  "drownTimer": { "_alpha": 0 },             // таймер когда тонет танк
  "langBarPanel": { "_alpha": 0 },           // ?
  "consumablesPanel": { "_alpha": 0 },       // панель расходники и патроны
  "vehicleMessagesPanel": { "_alpha": 0 },   // сообщения внизу в центре экрана(о том,кто попал,повредил тебя)
  "teamBasesPanel": { "_alpha": 0 }          // полоса захвата баз
}
Возможностей реально открывается огромное количество. Старые настройки - это ничто по сравнению с этим.

 

 

Вот результат работы сниппета { "$log": 2 }, выводящего лог значений элементов в _root до второго уровня:

_root: {// _level0

  "enabled": true,

  "timerBigStartYPos": 120,

  "soundManager": {// [object Object]

    "enabled": false

  },

  "constraints": {

    "scope": "_level0",

    "scaled": true,

    "elements": "[object Object],[object Object],[object Object],[object Object],[object Object]"

  },

  "fragCorrelationBarStartYPos": 0,

  "g_guiVisible": true,

  "BIH": {

    "m_inputDelegate": "[object Object]",

    "m_focusHandler": "[object Object]",

    "m_unFocusMC": "[scaleform Button hiddenButton]"

  },

  "disableShowCursor": false,

  "g_cursorVisible": false,

  "statsData": {

    "results": "[object Object]",

    "arenaData": "[object Object]",

    "current": -1,

    "playerTeam": -1,

    "team2": "[DataProvider (0)]",

    "team1": "[DataProvider (0)]"

  },

  "sixthSenseDuration": 2000,

  "teamByAccountDBID": {

  },

  "g_ingameMenu": null,

  "tooltipManager": {

    "getShopVehicleData": null,

    "getShopShellData": null,

    "getInventoryModuleData": null,

    "getProfileAchievementData": null,

    "getProfileRareAchievementData": null,

    "getHangarModuleData": null,

    "getTechMainModuleData": null,

    "getCarouselVehicleData": null,

    "getTankmanSkillData": null,

    "getShopModuleData": null,

    "getTankmanData": null,

    "getInventoryShellData": null,

    "getBattleResultsAchievementData": null,

    "getInventoryVehicleData": null,

    "getHangarShellData": null,

    "getTechMainShellData": null,

    "getEfficiencyParam": null

  },

  "clIntervalID": 120,

  "sixthSenseStart": -1,

  "VEHICLE_DESTROY_TIMERS": {

    "overturn": "[scaleform UIComponent overturnedTimer]",

    "drown": "[scaleform UIComponent drownTimer]",

    "death_zone": "[scaleform UIComponent deathZoneTimer]"

  },

  "radialMenuShowed": false,

  "teamBasesPanelStartYPos": 61,

  "topCenterElementsOffset": 0,

  "g_components": {

    "fragCorrelationBar": true,

    "minimap": true,

    "damagePanel": true,

    "rightPanel": true,

    "messenger": true,

    "sixthSenseIndicator": true,

    "vehicleMessagesPanel": true,

    "switcher_mc": true,

    "overturnedTimer": true,

    "postmortemTips": false,

    "timerBig": true,

    "textMoving": false,

    "teamBasesPanel": true,

    "battleTimer": true,

    "leftPanel": true,

    "drownTimer": true,

    "consumablesPanel": true,

    "debugPanel": true,

    "vehicleErrorsPanel": true,

    "deathZoneTimer": true

  },

  "tutorialLoader": {// [scaleform UILoader tutorialLoader]

    "enabled": true,

    "enabled": true,

    "enabled": true,

    "gc_getScreenSize": null,

    "gc_onLoadComplete": null,

    "__height": 0,

    "_maintainAspectRatio": false,

    "_autoSize": false,

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "__width": 0

  },

  "textMoving": {// [Wargaming TextLineMovingtextMoving]

    "enabled": true,

    "enabled": true,

    "showBrowser": null,

    "isShowMovingText": null,

    "getEntries": null,

    "__height": 28,

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "id": 426,

    "__width": 773,

    "contener": "_level0.textMoving.contener",

    "hit": "_level0.textMoving.hit",

    "maska": "_level0.textMoving.maska"

  },

  "sixthSenseIndicator": {// _level0.sixthSenseIndicator

    "enabled": true,

    "icon": "[uILoaderAlt {source = , sourceAlt = }]",

    "instance404": "_level0.sixthSenseIndicator.instance404"

  },

  "radialMenu": {// [scaleform UIComponent radialMenu]

    "enabled": true,

    "enabled": true,

    "__height": 3692,

    "_offsetAngle": 21,

    "_pauseBeforeHide": 200,

    "_isClickAction": false,

    "_state": "default",

    "_programMode": true,

    "sizeIsInvalid": false,

    "initialized": true,

    "__width": 3692,

    "negativeBtn": "[scaleform Button negativeBtn]",

    "toBaseBtn": "[scaleform Button toBaseBtn]",

    "helpBtn": "[scaleform Button helpBtn]",

    "reloadBtn": "[scaleform Button reloadBtn]",

    "attackBtn": "[scaleform Button attackBtn]",

    "positiveBtn": "[scaleform Button positiveBtn]",

    "negativeBtn1": "[scaleform Button negativeBtn1]",

    "toBaseBtn1": "[scaleform Button toBaseBtn1]",

    "helpBtn1": "[scaleform Button helpBtn1]",

    "reloadBtn1": "[scaleform Button reloadBtn1]",

    "attackBtn1": "[scaleform Button attackBtn1]",

    "positiveBtn1": "[scaleform Button positiveBtn1]",

    "negativeBtn2": "[scaleform Button negativeBtn2]",

    "toBaseBtn2": "[scaleform Button toBaseBtn2]",

    "helpBtn2": "[scaleform Button helpBtn2]",

    "reloadBtn2": "[scaleform Button reloadBtn2]",

    "attackBtn2": "[scaleform Button attackBtn2]",

    "positiveBtn2": "[scaleform Button positiveBtn2]",

    "negativeBtn3": "[scaleform Button negativeBtn3]",

    "toBaseBtn3": "[scaleform Button toBaseBtn3]",

    "helpBtn3": "[scaleform Button helpBtn3]",

    "reloadBtn3": "[scaleform Button reloadBtn3]",

    "attackBtn3": "[scaleform Button attackBtn3]",

    "positiveBtn3": "[scaleform Button positiveBtn3]",

    "pane": "_level0.radialMenu.pane",

    "background": "_level0.radialMenu.background"

  },

  "damageInfoPanel": {// [scaleform UIComponent damageInfoPanel]

    "enabled": true,

    "enabled": true,

    "__height": 85.05,

    "initialized": true,

    "sizeIsInvalid": false,

    "_disabled": false,

    "FADE_DELAY": 15,

    "__width": 799.95,

    "FADE_ALPHA_STEP": 0.33333333333333,

    "tankmen": "[scaleform TileList tankmen]",

    "devices": "[scaleform TileList devices]",

    "fire": "[scaleform UIComponent fire]"

  },

  "deathZoneTimer": {// [scaleform UIComponent deathZoneTimer]

    "enabled": true,

    "enabled": true,

    "textField": "_level0.deathZoneTimer.graphics_mc.time_mc.textField",

    "_visibility": false,

    "__height": 159,

    "progressBar": "_level0.deathZoneTimer.graphics_mc.progressBar",

    "icon": "_level0.deathZoneTimer.graphics_mc.icon",

    "_state": "warning",

    "_coolDownAnim": "[object Object]",

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "__width": 150,

    "_type": "death_zone",

    "time_mc": "_level0.deathZoneTimer.graphics_mc.time_mc",

    "graphics_mc": "_level0.deathZoneTimer.graphics_mc"

  },

  "overturnedTimer": {// [scaleform UIComponent overturnedTimer]

    "enabled": true,

    "enabled": true,

    "textField": "_level0.overturnedTimer.graphics_mc.time_mc.textField",

    "_visibility": false,

    "__height": 159,

    "progressBar": "_level0.overturnedTimer.graphics_mc.progressBar",

    "icon": "_level0.overturnedTimer.graphics_mc.icon",

    "_state": "warning",

    "_coolDownAnim": "[object Object]",

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "__width": 150,

    "_type": "overturned",

    "time_mc": "_level0.overturnedTimer.graphics_mc.time_mc",

    "graphics_mc": "_level0.overturnedTimer.graphics_mc"

  },

  "drownTimer": {// [scaleform UIComponent drownTimer]

    "enabled": true,

    "enabled": true,

    "textField": "_level0.drownTimer.graphics_mc.time_mc.textField",

    "_visibility": false,

    "__height": 159,

    "progressBar": "_level0.drownTimer.graphics_mc.progressBar",

    "icon": "_level0.drownTimer.graphics_mc.icon",

    "_state": "warning",

    "_coolDownAnim": "[object Object]",

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "__width": 150,

    "_type": "drown",

    "time_mc": "_level0.drownTimer.graphics_mc.time_mc",

    "graphics_mc": "_level0.drownTimer.graphics_mc"

  },

  "langBarPanel": {// [scaleform UIComponent langBarPanel]

    "enabled": true,

    "enabled": true,

    "sizeIsInvalid": false,

    "__height": 0,

    "initialized": true,

    "__width": 0

  },

  "fragCorrelationBar": {// [scaleform UIComponent fragCorrelationBar]

    "enabled": true,

    "enabled": true,

    "sizeIsInvalid": false,

    "__height": 66.1,

    "initialized": true,

    "scrollRect": "(x=0, y=0, width=1019, height=33.05)",

    "__width": 1019,

    "indicator": "_level0.fragCorrelationBar.indicator",

    "m_enemyTeamFragsTF": "_level0.fragCorrelationBar.m_enemyTeamFragsTF",

    "m_alliedTeamFragsTF": "_level0.fragCorrelationBar.m_alliedTeamFragsTF",

    "m_enemyTeamTF": "_level0.fragCorrelationBar.m_enemyTeamTF",

    "m_alliedTeamTF": "_level0.fragCorrelationBar.m_alliedTeamTF",

    "alliedMarkers": "[scaleform UIComponent alliedMarkers]",

    "enemyMarkers": "[scaleform UIComponent enemyMarkers]",

    "redBg": "[scaleform UIComponent redBg]",

    "greenBg": "[scaleform UIComponent greenBg]"

  },

  "timerBig": {// _level0.timerBig

    "enabled": true,

    "visible": true,

    "inspectableTarget": "",

    "mode": "manual",

    "disabled": false,

    "isVisible": false,

    "message": "_level0.timerBig.message",

    "time": "_level0.timerBig.time",

    "win": "[scaleform UIComponent win]"

  },

  "debugPanel": {// [scaleform UIComponent debugPanel]

    "enabled": true,

    "enabled": true,

    "_disabled": false,

    "sizeIsInvalid": false,

    "__height": 24.1,

    "initialized": true,

    "__width": 186.5,

    "clock": "_level0.debugPanel.clock",

    "lag": "_level0.debugPanel.lag",

    "ping": "_level0.debugPanel.ping",

    "fps": "_level0.debugPanel.fps"

  },

  "consumablesPanel": {// [scaleform UIComponent consumablesPanel]

    "enabled": true,

    "enabled": true,

    "_spacing": 0,

    "_requestPrefix": "battle.consumablesPanel",

    "__height": 0,

    "_shellRenderer": "BattleShellCooldownButton",

    "expandEquipmentSlotIdx": null,

    "_equipmentRendererMap": "[object Object]",

    "_optionalDeviceRenderer": "BattleOptionalDeviceButton",

    "renderers": "",

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "slotIdxMap": "[object Object]",

    "__width": 0

  },

  "battleTimer": {// [scaleform UIComponent battleTimer]

    "enabled": true,

    "enabled": true,

    "__height": 22.75,

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "inspectableTarget": "",

    "mode": "manual",

    "__width": 350,

    "dotsMC": "_level0.battleTimer.dotsMC",

    "messageMC": "_level0.battleTimer.messageMC",

    "secondsMC": "_level0.battleTimer.secondsMC",

    "minutesMC": "_level0.battleTimer.minutesMC"

  },

  "vehicleErrorsPanel": {// [scaleform UIComponent vehicleErrorsPanel]

    "enabled": true,

    "enabled": true,

    "enabled": true,

    "_showUniqueOnly": true,

    "itemProps": "renderer",

    "__height": 0,

    "_externalPrefix": "VehicleErrorsPanel",

    "_renderersColorMap": "[object Object]",

    "collProp": "[object Object]",

    "_defaultRenderer": "VehicleRedErrorRenderer",

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "collProps": "[object Object],[object Object],[object Object]",

    "itemObj0": "[object Object]",

    "_renderersCollection": "[object Object]",

    "_renderers": "",

    "i": 3,

    "_alphaSpeed": 1.5,

    "_lifeTime": 1.5,

    "_stackLength": 3,

    "__width": 0

  },

  "playerMessangersPanel": {// [scaleform UIComponent playerMessangersPanel]

    "enabled": true,

    "enabled": true,

    "enabled": true,

    "_showUniqueOnly": false,

    "itemProps": "renderer",

    "__height": 0,

    "_externalPrefix": "PlayerMessagesPanel",

    "_renderersColorMap": "[object Object]",

    "collProp": "[object Object]",

    "_defaultRenderer": "PlayerRedMessageRenderer",

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "collProps": "[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]",

    "itemObj0": "[object Object]",

    "_renderersCollection": "[object Object]",

    "_renderers": "",

    "i": 6,

    "_lifeTime": 10,

    "_alphaSpeed": 3,

    "__width": 0

  },

  "vehicleMessagesPanel": {// [scaleform UIComponent vehicleMessagesPanel]

    "enabled": true,

    "enabled": true,

    "enabled": true,

    "_showUniqueOnly": false,

    "itemProps": "renderer",

    "__height": 0,

    "_externalPrefix": "VehicleMessagesPanel",

    "_renderersColorMap": "[object Object]",

    "collProp": "[object Object]",

    "_defaultRenderer": "VehicleRedMessageRenderer",

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "collProps": "[object Object],[object Object],[object Object],[object Object]",

    "itemObj0": "[object Object]",

    "_renderersCollection": "[object Object]",

    "_renderers": "",

    "i": 4,

    "_alphaSpeed": 3,

    "_lifeTime": 12,

    "_stackLength": 10,

    "__width": 0

  },

  "messenger": {// [scaleform UIComponent messenger]

    "enabled": true,

    "enabled": true,

    "m_inactiveStateAlpha": 0,

    "__height": 392,

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "skipFirstInput": false,

    "__width": 349.95,

    "m_constraints": "[scaleform Constraints]",

    "instance375": "_level0.messenger.instance375",

    "messageList": "[scaleform UIComponent messageList]",

    "messageInput": "[scaleform TextInput messageInput]"

  },

  "teamBasesPanel": {// [scaleform UIComponent teamBasesPanel]

    "enabled": true,

    "enabled": true,

    "enabled": true,

    "__height": 47.6,

    "_rendererHeight": 55,

    "_itemRenderer": "CaptureBar",

    "indexByID": "[object Object]",

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "captureBars": "",

    "__width": 412,

    "_rendererWidth": 412,

    "instance170": "[scaleform ProgressBar instance170]"

  },

  "minimap": {// [scaleform UIComponent minimap]

    "enabled": true,

    "enabled": true,

    "enabled": true,

    "invalidationIntervalID": 540,

    "__height": 231,

    "constraints": "[scaleform Constraints]",

    "xvm_worker": "[object Object]",

    "m_sizeIndex": 0,

    "sizeIsInvalid": true,

    "_disabled": false,

    "initialized": true,

    "__width": 231,

    "mapHit": "_level0.minimap.mapHit",

    "iconsMask": "_level0.minimap.iconsMask",

    "icons": "[scaleform UIComponent icons]",

    "rowK": "_level0.minimap.rowK",

    "rowJ": "_level0.minimap.rowJ",

    "rowH": "_level0.minimap.rowH",

    "rowG": "_level0.minimap.rowG",

    "rowF": "_level0.minimap.rowF",

    "rowE": "_level0.minimap.rowE",

    "rowD": "_level0.minimap.rowD",

    "rowC": "_level0.minimap.rowC",

    "rowB": "_level0.minimap.rowB",

    "rowA": "_level0.minimap.rowA",

    "colsNames": "_level0.minimap.colsNames",

    "foregroundHR": "[scaleform UIComponent foregroundHR]",

    "foreground": "[scaleform UIComponent foreground]",

    "backgrnd": "_level0.minimap.backgrnd"

  },

  "damagePanel": {// _level0.damagePanel

    "enabled": true,

    "savedEntityMapping": "[object Object]",

    "_crewItemWidth": 24,

    "_crewTotalWidth": 230,

    "_crewItemMargin": 1,

    "entityMapping": "[object Object]",

    "componentsContainer": "_level0.damagePanel.componentsContainer",

    "bg": "_level0.damagePanel.bg"

  },

  "switcher_mc": {// [scaleform UIComponent switcher_mc]

    "enabled": true,

    "enabled": true,

    "__height": 24,

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "__width": 203,

    "_buttonGroup_buttonGroup": "[scaleform RadioButtonGroup buttonGroup]",

    "noneBtn": "[scaleform Button noneBtn]",

    "shortBtn": "[scaleform Button shortBtn]",

    "mediumBtn": "[scaleform Button mediumBtn]",

    "largeBtn": "[scaleform Button largeBtn]",

    "mediumBtn2": "[scaleform Button mediumBtn2]"

  },

  "rightPanel": {// [scaleform UIComponent rightPanel]

    "enabled": true,

    "enabled": true,

    "__height": 750,

    "xvm_worker": "[object Object]",

    "m_type": "right",

    "sizeIsInvalid": false,

    "panel_width": 499.95,

    "initialized": true,

    "__width": 627.95,

    "m_state": "none",

    "m_list": "[scaleform ScrollingList m_list]",

    "players_bg": "_level0.rightPanel.players_bg"

  },

  "leftPanel": {// [scaleform UIComponent leftPanel]

    "enabled": true,

    "enabled": true,

    "__height": 750,

    "xvm_worker": "[object Object]",

    "m_type": "left",

    "sizeIsInvalid": false,

    "panel_width": 499.95,

    "initialized": true,

    "__width": 627.95,

    "m_state": "none",

    "m_list": "[scaleform ScrollingList m_list]",

    "players_bg": "_level0.leftPanel.players_bg"

  },

  "statHidden": {// [scaleform UIComponent statHidden]

    "enabled": true,

    "enabled": true,

    "__height": 900,

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "__width": 1600,

    "winText": "_level0.statHidden.winText",

    "mapText": "_level0.statHidden.mapText",

    "battleIcon": "_level0.statHidden.battleIcon",

    "battleText": "_level0.statHidden.battleText",

    "team2Name": "_level0.statHidden.team2Name",

    "team1Name": "_level0.statHidden.team1Name",

    "team2": "[scaleform ScrollingList team2]",

    "team1": "[scaleform ScrollingList team1]"

  },

  "instance146": {// [scaleform UIComponent instance146]

    "enabled": true,

    "enabled": true,

    "enabled": true,

    "__height": 127.5,

    "xvm_worker": "[object Object]",

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "__width": 105.75,

    "markMC": "_level0.instance146.markMC",

    "selfIcon": "_level0.instance146.selfIcon"

  },

  "hiddenTooltip": {// [scaleform ToolTip hiddenTooltip]

    "enabled": true,

    "enabled": true,

    "_disabled": false,

    "sizeIsInvalid": false,

    "__height": 212,

    "initialized": true,

    "__width": 233,

    "background": "_level0.hiddenTooltip.background"

  },

  "instance144": {// [Wargaming Window instance144]

    "enabled": true,

    "enabled": true,

    "_offsetTop": 5,

    "invalidationIntervalID": 153,

    "__height": 0,

    "_minWidth": 0,

    "_formType": "symbol",

    "constraints": "[scaleform Constraints]",

    "_icon": "",

    "_offsetLeft": 7,

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "_maxWidth": 0,

    "_title": " ",

    "_allowDrag": true,

    "_offsetBottom": 15,

    "_offsetRight": 8,

    "_formSource": "BlankForm",

    "_maxHeight": 0,

    "formCreated": true,

    "_allowResize": false,

    "_showClose": true,

    "_minHeight": 0,

    "__width": 0,

    "form": "_level0.instance144.form",

    "form": "_level0.instance144.form",

    "resizeBtn": "[scaleform Button resizeBtn]",

    "closeBtn": "[WG SoundButton closeBtn]",

    "minimizeBtn": "[WG SoundButton minimizeBtn]",

    "iconMovie": "_level0.instance144.iconMovie",

    "titleBtn": "[Wargaming TextFieldShort titleBtn",

    "hit": "_level0.instance144.hit",

    "background": "_level0.instance144.background"

  },

  "hiddenButton": {// [scaleform Button hiddenButton]

    "enabled": true,

    "enabled": true,

    "toggle": false,

    "__height": 768,

    "invalidationIntervalID": 539,

    "_focused": true,

    "constraints": "[scaleform Constraints]",

    "sizeIsInvalid": true,

    "initialized": true,

    "_disableFocus": false,

    "bindingEnabled": false,

    "_disableConstraints": false,

    "state": "over",

    "__width": 1295

  },

  "instance22": {// [scaleform Dialog instance22]

    "enabled": true,

    "enabled": true,

    "enabled": true,

    "__height": 720.95,

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "__width": 1025.45,

    "_buttonGroup_buttonGroup": "[scaleform RadioButtonGroup buttonGroup]",

    "printscreen": "[scaleform Label printscreen]",

    "instance142": "_level0.instance22.instance142",

    "instance141": "_level0.instance22.instance141",

    "CMD_MINIMAP_VISIBLE": "[scaleform Label CMD_MINIMAP_VISIBLE]",

    "CMD_TOGGLE_GUI": "[scaleform Label CMD_TOGGLE_GUI]",

    "instance138": "_level0.instance22.instance138",

    "instance326": "_level0.instance22.instance326",

    "CMD_RELOAD_PARTIAL_CLIP": "[scaleform Label CMD_RELOAD_PARTIAL_CLIP]",

    "instance136": "_level0.instance22.instance136",

    "instance325": "_level0.instance22.instance325",

    "CMD_CM_VEHICLE_SWITCH_AUTOROTATION": "[scaleform Label CMD_CM_VEHICLE_SWITCH_AUTOROTATION]",

    "instance134": "_level0.instance22.instance134",

    "CMD_DECREMENT_CRUISE_MODE": "[scaleform Label CMD_DECREMENT_CRUISE_MODE]",

    "instance132": "_level0.instance22.instance132",

    "instance131": "_level0.instance22.instance131",

    "instance130": "_level0.instance22.instance130",

    "show_cursor": "[scaleform Label show_cursor]",

    "instance128": "_level0.instance22.instance128",

    "CMD_VEHICLE_MARKERS_SHOW_INFO": "[scaleform Label CMD_VEHICLE_MARKERS_SHOW_INFO]",

    "instance126": "_level0.instance22.instance126",

    "CMD_MOVE_FORWARD": "[scaleform Label CMD_MOVE_FORWARD]",

    "instance124": "_level0.instance22.instance124",

    "CMD_CM_ALTERNATE_MODE": "[scaleform Label CMD_CM_ALTERNATE_MODE]",

    "instance122": "_level0.instance22.instance122",

    "CMD_CM_LOCK_TARGET_OFF": "[scaleform Label CMD_CM_LOCK_TARGET_OFF]",

    "instance120": "_level0.instance22.instance120",

    "CMD_CM_LOCK_TARGET": "[scaleform Label CMD_CM_LOCK_TARGET]",

    "instance118": "_level0.instance22.instance118",

    "CMD_CM_SHOOT": "[scaleform Label CMD_CM_SHOOT]",

    "instance116": "_level0.instance22.instance116",

    "CMD_VOICECHAT_MUTE": "[scaleform Label CMD_VOICECHAT_MUTE]",

    "voiceChatLabel": "_level0.instance22.voiceChatLabel",

    "CMD_INCREMENT_CRUISE_MODE": "[scaleform Label CMD_INCREMENT_CRUISE_MODE]",

    "instance112": "_level0.instance22.instance112",

    "CMD_ROTATE_RIGHT": "[scaleform Label CMD_ROTATE_RIGHT]",

    "instance110": "_level0.instance22.instance110",

    "CMD_ROTATE_LEFT": "[scaleform Label CMD_ROTATE_LEFT]",

    "instance108": "_level0.instance22.instance108",

    "CMD_MOVE_BACKWARD": "[scaleform Label CMD_MOVE_BACKWARD]",

    "instance106": "_level0.instance22.instance106",

    "CMD_MOVE_FORWARD": "[scaleform Label CMD_MOVE_FORWARD]",

    "instance104": "_level0.instance22.instance104",

    "instance103": "_level0.instance22.instance103",

    "instance102": "_level0.instance22.instance102",

    "instance101": "_level0.instance22.instance101",

    "CMD_CHAT_SHORTCUT_ATTACK": "[scaleform Label CMD_CHAT_SHORTCUT_ATTACK]",

    "instance99": "_level0.instance22.instance99",

    "CMD_RADIAL_MENU_SHOW": "[scaleform Label CMD_RADIAL_MENU_SHOW]",

    "instance97": "_level0.instance22.instance97",

    "instance96": "_level0.instance22.instance96",

    "instance95": "[scaleform Label instance95]",

    "instance93": "_level0.instance22.instance93",

    "instance92": "[scaleform Label instance92]",

    "instance90": "_level0.instance22.instance90",

    "instance89": "[scaleform Label instance89]",

    "instance87": "_level0.instance22.instance87",

    "instance86": "[scaleform Label instance86]",

    "instance84": "_level0.instance22.instance84",

    "instance83": "_level0.instance22.instance83",

    "instance82": "_level0.instance22.instance82",

    "instance81": "_level0.instance22.instance81",

    "instance80": "_level0.instance22.instance80",

    "instance79": "_level0.instance22.instance79",

    "instance78": "_level0.instance22.instance78",

    "instance77": "_level0.instance22.instance77",

    "instance76": "_level0.instance22.instance76",

    "instance75": "_level0.instance22.instance75",

    "instance74": "_level0.instance22.instance74",

    "instance73": "_level0.instance22.instance73",

    "instance72": "_level0.instance22.instance72",

    "instance71": "_level0.instance22.instance71",

    "instance70": "_level0.instance22.instance70",

    "instance69": "_level0.instance22.instance69",

    "instance68": "_level0.instance22.instance68",

    "instance67": "_level0.instance22.instance67",

    "instance66": "_level0.instance22.instance66",

    "instance65": "_level0.instance22.instance65",

    "instance64": "_level0.instance22.instance64",

    "instance63": "_level0.instance22.instance63",

    "instance62": "_level0.instance22.instance62",

    "instance61": "_level0.instance22.instance61",

    "instance60": "_level0.instance22.instance60",

    "instance59": "_level0.instance22.instance59",

    "instance58": "_level0.instance22.instance58",

    "instance57": "_level0.instance22.instance57",

    "instance56": "_level0.instance22.instance56",

    "instance55": "_level0.instance22.instance55",

    "instance54": "_level0.instance22.instance54",

    "instance53": "_level0.instance22.instance53",

    "instance52": "_level0.instance22.instance52",

    "instance51": "_level0.instance22.instance51",

    "instance50": "_level0.instance22.instance50",

    "settingsButton": "[WG SoundButton settingsButton]",

    "instance324": "_level0.instance22.instance324",

    "instance323": "_level0.instance22.instance323",

    "instance322": "_level0.instance22.instance322",

    "instance321": "_level0.instance22.instance321",

    "instance320": "_level0.instance22.instance320",

    "instance47": "_level0.instance22.instance47",

    "instance319": "_level0.instance22.instance319",

    "instance318": "_level0.instance22.instance318",

    "instance317": "_level0.instance22.instance317",

    "instance316": "_level0.instance22.instance316",

    "instance315": "_level0.instance22.instance315",

    "instance314": "_level0.instance22.instance314",

    "instance313": "_level0.instance22.instance313",

    "instance312": "_level0.instance22.instance312",

    "instance311": "_level0.instance22.instance311",

    "instance310": "_level0.instance22.instance310",

    "instance309": "_level0.instance22.instance309",

    "instance308": "_level0.instance22.instance308",

    "instance307": "_level0.instance22.instance307",

    "instance306": "_level0.instance22.instance306",

    "instance305": "_level0.instance22.instance305",

    "instance304": "_level0.instance22.instance304",

    "instance303": "_level0.instance22.instance303",

    "example_hit": "_level0.instance22.example_hit",

    "example_hp": "_level0.instance22.example_hp",

    "example_name": "_level0.instance22.example_name",

    "instance43": "_level0.instance22.instance43",

    "instance42": "_level0.instance22.instance42",

    "instance41": "_level0.instance22.instance41",

    "instance40": "_level0.instance22.instance40",

    "instance39": "_level0.instance22.instance39",

    "instance38": "_level0.instance22.instance38",

    "instance37": "_level0.instance22.instance37",

    "instance36": "_level0.instance22.instance36",

    "instance35": "_level0.instance22.instance35",

    "instance34": "_level0.instance22.instance34",

    "instance33": "_level0.instance22.instance33",

    "instance32": "_level0.instance22.instance32",

    "instance31": "_level0.instance22.instance31",

    "instance30": "_level0.instance22.instance30",

    "instance29": "_level0.instance22.instance29",

    "instance28": "_level0.instance22.instance28",

    "instance27": "_level0.instance22.instance27",

    "instance26": "_level0.instance22.instance26",

    "instance25": "_level0.instance22.instance25",

    "instance24": "_level0.instance22.instance24",

    "instance23": "_level0.instance22.instance23",

    "instance21": "_level0.instance22.instance21",

    "instance302": "_level0.instance22.instance302"

  },

  "hiddenIngameMenu": {// [scaleform Dialog hiddenIngameMenu]

    "enabled": true,

    "enabled": true,

    "enabled": true,

    "mustReopen": true,

    "__height": 214.95,

    "sizeIsInvalid": false,

    "_disabled": false,

    "initialized": true,

    "__width": 197.95,

    "_buttonGroup_buttonGroup": "[scaleform RadioButtonGroup buttonGroup]",

    "dialogTitle": "[Wargaming TextFieldShort dialogTitle",

    "quitBattleBtn": "[WG SoundButton quitBattleBtn]",

    "helpBtn": "[WG SoundButton helpBtn]",

    "cancelBtn": "[WG SoundButton cancelBtn]",

    "settingsBtn": "[WG SoundButton settingsBtn]",

    "instance299": "_level0.hiddenIngameMenu.instance299",

    "instance298": "_level0.hiddenIngameMenu.instance298",

    "instance297": "_level0.hiddenIngameMenu.instance297",

    "background": "_level0.hiddenIngameMenu.background"

  },

  "hiddenMessageDialog": {// [scaleform Dialog hiddenMessageDialog]

    "enabled": true,

    "enabled": true,

    "enabled": true,

    "invalidationIntervalID": 151,

    "sizeIsInvalid": false,

    "__height": 169,

    "initialized": true,

    "__width": 386,

    "cancelBtn": "[WG SoundButton cancelBtn]",

    "submitBtn": "[WG SoundButton submitBtn]",

    "messageField": "_level0.hiddenMessageDialog.messageField",

    "closeBtn": "[WG SoundButton closeBtn]",

    "dragBar": "[scaleform Label dragBar]",

    "wndBg": "_level0.hiddenMessageDialog.wndBg"

  },

  "hiddenPopUpModal": {// _level0.hiddenPopUpModal

    "enabled": true

  },

  "hiddenSettingsDialog": {// [scaleform Dialog hiddenSettingsDialog]

    "enabled": true,

    "enabled": true,

    "enabled": true,

    "altVoicesPreview": null,

    "isSoundModeValid": null,

    "__height": 631,

    "mustReopen": true,

    "config": "[object Object]",

    "sizeIsInvalid": false,

    "initialized": true,

    "__width": 825,

    "isInited": false,

    "titleBtn": "[Wargaming TextFieldShort titleBtn",

    "tabs": "net.wargaming.controls.ButtonBarEx",

    "s_tab_line": "_level0.hiddenSettingsDialog.s_tab_line",

    "cancelBtn": "[WG SoundButton cancelBtn]",

    "applyBtn": "[WG SoundButton applyBtn]",

    "submitBtnNew": "[WG SoundButton submitBtnNew]",

    "view": "[scaleform ViewStack view]",

    "background": "_level0.hiddenSettingsDialog.background"

  }

}

 

Положение элементов на экране:

post-5504-0-41631900-1366791579_thumb.png
Edited by sirmax
  • Upvote 18
Link to comment
Short link
Share on other sites

sirmax а можно как то расшифровать названия?

ну лично для меня не все понятны что делают.

например: overturnedTimer, teamBasesPanel, langBarPane, drownTimer, deathZoneTimer, vehicleErrorsPanel

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

из тех что понял, не стал бы перемещать: fragCorrelationBar, minimap, damagePanel, sixthSenseIndicator

  • Upvote 1
Link to comment
Short link
Share on other sites

Ждем серафима, как основного заказчика данной фичи.

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

По настройке:

из нужного к примеру мне постоянно это minimap,playerMessangersPanel(сообщения об уничтожении)

Многие юзают интерфейс смещёный к вверху экрана,это fragCorrelationBar,rightPanel,leftPanel,switcher_mc,battleTimer,debugpanel

Ну и consumablesPanel не помешает тем кто делает панельку хп по центру.

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

Edited by 7serafim7
Link to comment
Short link
Share on other sites

Ок, сделаю перечисленное, если надо будет еще что-то, добавлю.

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

 

В общем, в каком-то виде оно работает, пока весьма сырое.

Надо потестировать, решить, стоит ли оно вообще усилий.

В общий конфиг добавлять настройки не буду, кто хочет поиграться, добавьте этот блок в секцию "battle":

       // Visual elements
       "elements": {
	  // x - X position
	  // y - Y position
	  // w - width
	  // h - height
	  // a - alpha
	  // ha - horizontal align
	  // va - vertical align
	  // debug - draw border, element name and geometry
	  // x, y values can be:
	  //   null - use default client value
	  //   -xxxx..xxxx
	  //   xx.xx%
	  // ha values can be:
	  //   null - use default client value
	  //   1 - left
	  //   2 - right
	  // va values can be:
	  //   null - use default client value
	  //   1 - top
	  //   2 - bottom
         "minimap":			   { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
         "playerMessangersPanel": { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
         "leftPanel":			 { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
         "rightPanel":		    { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
         "switcher_mc":		   { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
         "fragCorrelationBar":    { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
         "debugPanel":		    { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
         "battleTimer":		   { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
         "damagePanel":		   { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
         "sixthSenseIndicator":   { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
         "vehicleErrorsPanel":    { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false }
       }

 

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

  • Upvote 3
Link to comment
Short link
Share on other sites

Ок, сделаю перечисленное, если надо будет еще что-то, добавлю.

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

 

В общем, в каком-то виде оно работает, пока весьма сырое.

Надо потестировать, решить, стоит ли оно вообще усилий.

В общий конфиг добавлять настройки не буду, кто хочет поиграться, добавьте этот блок в секцию "battle":

// Visual elements
"elements": {
	 // x - X position
	 // y - Y position
	 // w - width
	 // h - height
	 // a - alpha
	 // ha - horizontal align
	 // va - vertical align
	 // debug - draw border, element name and geometry
	 // x, y values can be:
	 // null - use default client value
	 // -xxxx..xxxx
	 // xx.xx%
	 // ha values can be:
	 // null - use default client value
	 // 1 - left
	 // 2 - right
	 // va values can be:
	 // null - use default client value
	 // 1 - top
	 // 2 - bottom
"minimap":			 { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
"playerMessangersPanel": { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
"leftPanel":			 { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
"rightPanel":		 { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
"switcher_mc":		 { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
"fragCorrelationBar": { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
"debugPanel":		 { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
"battleTimer":		 { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
"damagePanel":		 { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
"sixthSenseIndicator": { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false },
"vehicleErrorsPanel": { "x":null, "y":null, "w":null, "h":null, "ha":null, "va":null, "a":null, "debug":false }
}

 

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

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

XVM.xvmconf

  • Upvote 1
Link to comment
Short link
Share on other sites

  • 2 weeks later...

"playerMessangersPanel" по горизонтали двигается хорошо, а по вертикали не хочет...кажется он привязан к миникарте

Долго мучался: то как надо показывает- то возвращает всё обратно. Думаю это из за перегруженности сервера...

Хотелось бы ещё боевой чат подвигать, что то я его здесь не нашёл.

Edited by tolikportnoy
Link to comment
Short link
Share on other sites

Вот эти элементы не включены:

//		  timerBig:			  { x:null, y:null, w:null, h:null, ha:null, va:null, a:null, debug:false },
//		  damageInfoPanel:	   { x:null, y:null, w:null, h:null, ha:null, va:null, a:null, debug:false },
//		  deathZoneTimer:	    { x:null, y:null, w:null, h:null, ha:null, va:null, a:null, debug:false },
//		  overturnedTimer:	   { x:null, y:null, w:null, h:null, ha:null, va:null, a:null, debug:false },
//		  drownTimer:		    { x:null, y:null, w:null, h:null, ha:null, va:null, a:null, debug:false },
//		  langBarPanel:		  { x:null, y:null, w:null, h:null, ha:null, va:null, a:null, debug:false },
//		  consumablesPanel:	  { x:null, y:null, w:null, h:null, ha:null, va:null, a:null, debug:false },
//		  vehicleMessagesPanel:  { x:null, y:null, w:null, h:null, ha:null, va:null, a:null, debug:false },
//		  messenger:			 { x:null, y:null, w:null, h:null, ha:null, va:null, a:null, debug:false },
//		  teamBasesPanel:	    { x:null, y:null, w:null, h:null, ha:null, va:null, a:null, debug:false }

Какие добавить?

 

upd: в общем все добавил, кому-то может и пригодится. будет в следующем тесте

  • Upvote 1
Link to comment
Short link
Share on other sites

messenger,teamBasesPanel

а остальные, я просто не знаю за что они отвечают))

upd: в общем все добавил, кому-то может и пригодится. будет в следующем тесте

Спасибо)))

Edited by tolikportnoy
Link to comment
Short link
Share on other sites

  • 2 weeks later...

Как убрать у DebugPanel счетчик FPS, если возможно.

зато можно всю панельку убрать :)

да, кстати что-то тут совсем затихли, никто не пользуется настройкой интерфейса? ну да ладно, покажу что можно сделать

- можно сдвинуть панели пинга-лага и таймера, и поднять уши

post-7128-0-76936900-1352829798_thumb.jpg

 

- а можно и совсем панельку пинго-лага убрать

post-7128-0-83109600-1352829806_thumb.jpg

  • Upvote 2
  • Downvote 1
Link to comment
Short link
Share on other sites

зато можно всю панельку убрать :)

да, кстати что-то тут совсем затихли, никто не пользуется настройкой интерфейса? ну да ладно, покажу что можно сделать

- можно сдвинуть панели пинга-лага и таймера, и поднять уши

post-7128-0-76936900-1352829798_thumb.jpg

 

- а можно и совсем панельку пинго-лага убрать

post-7128-0-83109600-1352829806_thumb.jpg

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

и если можно подробнее что вот это за элементы

vehicleErrorsPanel

damageInfoPanel

deathZoneTimer

overturnedTimer

drownTimer

langBarPanel

switcher_mc

consumablesPanel

vehicleMessagesPanel

Link to comment
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...