From 0765a8c9b739b77ab88def091b896007205bea94 Mon Sep 17 00:00:00 2001 From: Alina Chebakova Date: Wed, 14 Jan 2026 22:38:20 +0800 Subject: [PATCH 1/3] docs: add API reference section Add new API documentation for WoT modding: - Messenger API (XMPP private messages, battle chat) - Battle Queue API (prebattle control, queue types) - Vehicle Inventory API (ItemsCache, filtering, REQ_CRITERIA) --- docs/ru/guide/scripting/api/battle-queue.md | 199 ++++++++++++++++++ docs/ru/guide/scripting/api/index.md | 60 ++++++ docs/ru/guide/scripting/api/messenger.md | 104 +++++++++ .../guide/scripting/api/vehicle-inventory.md | 186 ++++++++++++++++ 4 files changed, 549 insertions(+) create mode 100644 docs/ru/guide/scripting/api/battle-queue.md create mode 100644 docs/ru/guide/scripting/api/index.md create mode 100644 docs/ru/guide/scripting/api/messenger.md create mode 100644 docs/ru/guide/scripting/api/vehicle-inventory.md diff --git a/docs/ru/guide/scripting/api/battle-queue.md b/docs/ru/guide/scripting/api/battle-queue.md new file mode 100644 index 0000000..8734540 --- /dev/null +++ b/docs/ru/guide/scripting/api/battle-queue.md @@ -0,0 +1,199 @@ +# Очередь в бой {#battle-queue-api} + +WoT использует систему **Prebattle Control** (`gui/prb_control/`) для управления очередями в бой. + +## Ключевые компоненты {#key-components} + +| Компонент | Путь | Назначение | +|-----------|------|------------| +| `_PreBattleDispatcher` | `gui/prb_control/dispatcher.py` | Главный диспетчер всех prebattle действий | +| `PreQueueEntity` | `gui/prb_control/entities/base/pre_queue/entity.py` | Базовый класс для очередей | +| `RandomEntity` | `gui/prb_control/entities/random/pre_queue/entity.py` | Очередь случайных боёв | +| `PlayerAccount` | `Account.py` | Низкоуровневые методы очереди | + +## Типы очередей {#queue-types} + +```python +from constants import QUEUE_TYPE + +QUEUE_TYPE.RANDOMS # Случайные бои +QUEUE_TYPE.RANKED # Ранговые бои (15x15) +QUEUE_TYPE.COMP7 # Натиск (7x7) +QUEUE_TYPE.EPIC # Линия фронта +QUEUE_TYPE.BATTLE_ROYALE # Стальной охотник +QUEUE_TYPE.MAPBOX # Mapbox +QUEUE_TYPE.BOOTCAMP # Обучение +``` + +## Высокоуровневый API: Prebattle Dispatcher {#high-level-api} + +```python +from gui.prb_control.dispatcher import g_prbLoader +from gui.prb_control.settings import PREBATTLE_ACTION_NAME + +def startRandomBattle(): + """Встать в очередь случайного боя""" + dispatcher = g_prbLoader.getDispatcher() + if dispatcher: + # doAction() ставит в очередь или выходит из неё + dispatcher.doAction() + +def selectBattleMode(modeName): + """Выбрать режим боя""" + # modeName: 'random', 'ranked', 'comp7', etc. + from gui.prb_control.entities.base.ctx import PrbAction + dispatcher = g_prbLoader.getDispatcher() + if dispatcher: + action = PrbAction(modeName) + dispatcher.doSelectAction(action) +``` + +## Низкоуровневый API: Account {#low-level-api} + +```python +import BigWorld + +def enqueueRandomBattle(vehicleInvID, gameplaysMask=255): + """ + Встать в очередь случайного боя напрямую. + + :param vehicleInvID: ID танка в инвентаре (g_currentVehicle.invID) + :param gameplaysMask: Битовая маска режимов игры + """ + player = BigWorld.player() + if player: + player.enqueueRandom(vehicleInvID, gameplaysMask=gameplaysMask) + +def dequeueFromBattle(): + """Выйти из очереди""" + player = BigWorld.player() + if player: + player.dequeueRandom() +``` + +## Методы очереди на Account {#account-queue-methods} + +```python +# Случайные бои +player.enqueueRandom(vehInvID, gameplaysMask, arenaTypeID, randomFlags) +player.dequeueRandom() + +# Ранговые бои +player.enqueueRanked(vehInvID) +player.dequeueRanked() + +# Натиск (Comp7) +player.enqueueComp7(vehInvID) +player.dequeueComp7() + +# Линия фронта +player.enqueueEpic(vehInvID) +player.dequeueEpic() + +# Стальной охотник +player.enqueueBattleRoyale(vehInvID) +player.dequeueBattleRoyale() + +# Mapbox +player.enqueueMapbox(vehInvID) +player.dequeueMapbox() +``` + +## Получение Inventory ID танка {#get-vehicle-inv-id} + +```python +from CurrentVehicle import g_currentVehicle + +def getCurrentVehicleInvID(): + """Получить inventory ID текущего танка""" + if g_currentVehicle.isPresent(): + return g_currentVehicle.invID + return None +``` + +## События очереди {#queue-events} + +```python +from PlayerEvents import g_playerEvents + +# Подписка на события очереди +g_playerEvents.onEnqueued += onEnqueued # Успешно встали в очередь +g_playerEvents.onDequeued += onDequeued # Вышли из очереди +g_playerEvents.onEnqueueFailure += onEnqueueError # Ошибка постановки в очередь +g_playerEvents.onKickedFromQueue += onKicked # Выкинуло из очереди +g_playerEvents.onArenaCreated += onArenaCreated # Бой найден, загрузка арены + +def onEnqueued(queueType, *args): + print("Встали в очередь: %s" % queueType) + +def onArenaCreated(): + print("Бой найден!") +``` + +## Параметры enqueueRandom {#enqueue-random-params} + +```python +player.enqueueRandom(vehInvID, gameplaysMask=255, arenaTypeID=0, randomFlags=0) +``` + +| Параметр | Описание | +|----------|----------| +| `vehInvID` | ID танка в инвентаре (`g_currentVehicle.invID`) | +| `gameplaysMask` | Битовая маска разрешённых режимов/карт | +| `arenaTypeID` | ID конкретной карты для демонстратора (0 = любая) | +| `randomFlags` | Дополнительные флаги | + +### gameplaysMask {#gameplay-mask} + +Битовая маска включённых типов геймплея: + +```python +import ArenaType +from account_helpers import gameplay_ctx + +# Получить текущую маску из настроек +mask = gameplay_ctx.getMask() + +# Получить маску для конкретных режимов +mask = ArenaType.getGameplaysMask(('ctf', 'domination', 'assault2')) + +# Доступные режимы (constants.ARENA_GAMEPLAY_NAMES): +# 'ctf' - Стандартный бой +# 'domination' - Встречный бой +# 'assault2' - Штурм +# 'ctf30x30' - Генеральное сражение (30x30) +# 'domination3' - Господство +``` + +### randomFlags {#random-flags} + +```python +from constants import RANDOM_FLAGS + +# RANDOM_FLAGS.IS_ONLY_10_MODE_ENABLED - Только бои 10 уровня +# RANDOM_FLAGS.IS_MAPS_IN_DEVELOPMENT_ENABLED - Включить тестовые карты + +# Получить текущие флаги из настроек: +from account_helpers import gameplay_ctx +flags = gameplay_ctx.getRandomFlags() +``` + +## Названия режимов {#action-names} + +```python +from gui.prb_control.settings import PREBATTLE_ACTION_NAME + +PREBATTLE_ACTION_NAME.RANDOM # 'random' +PREBATTLE_ACTION_NAME.RANKED # 'ranked' +PREBATTLE_ACTION_NAME.COMP7 # 'comp7' (Натиск) +PREBATTLE_ACTION_NAME.EPIC # 'epicQueue' +PREBATTLE_ACTION_NAME.SQUAD # 'squad' +PREBATTLE_ACTION_NAME.BOOTCAMP # 'bootcamp' +``` + +## Важные замечания {#important-notes} + +1. **Танк должен быть выбран** — проверьте `g_currentVehicle.isPresent()` перед постановкой в очередь +2. **Используйте dispatcher для UI** — `g_prbLoader.getDispatcher().doAction()` обновляет интерфейс +3. **Прямые методы пропускают валидацию** — `player.enqueueRandom()` не проверяет танк/режим +4. **Тип очереди важен** — каждый режим имеет свой тип очереди и класс entity diff --git a/docs/ru/guide/scripting/api/index.md b/docs/ru/guide/scripting/api/index.md new file mode 100644 index 0000000..2001ba4 --- /dev/null +++ b/docs/ru/guide/scripting/api/index.md @@ -0,0 +1,60 @@ +# API Справочник {#api-reference} + +Справочник по основным API игры для разработчиков модификаций. + +## Разделы {#sections} + +### [Система сообщений](./messenger.md) {#messenger} + +Отправка приватных сообщений игрокам и работа с боевым чатом через XMPP протокол. + +- Приватные сообщения +- Боевой чат +- Чат-сессии + +### [Очередь в бой](./battle-queue.md) {#battle-queue} + +Постановка игрока в очередь на бой и управление режимами. + +- Типы очередей (случайные, ранговые, Натиск) +- События очереди +- Параметры `enqueueRandom` + +### [Инвентарь танков](./vehicle-inventory.md) {#vehicle-inventory} + +Получение списка танков игрока и работа с инвентарём. + +- Фильтрация танков +- Свойства объекта Vehicle +- Критерии поиска + +## Быстрый старт {#quick-start} + +### Получить текущий танк + +```python +from CurrentVehicle import g_currentVehicle + +if g_currentVehicle.isPresent(): + print("Танк: %s" % g_currentVehicle.item.userName) +``` + +### Встать в очередь + +```python +from gui.prb_control.dispatcher import g_prbLoader + +dispatcher = g_prbLoader.getDispatcher() +if dispatcher: + dispatcher.doAction() +``` + +### Отправить сообщение в боевой чат + +```python +from messenger.MessengerEntry import g_instance as g_messenger + +bwProto = g_messenger.protos.getPlugin('bw_chat2') +if bwProto: + bwProto.arenaChat.broadcast("Привет!") +``` diff --git a/docs/ru/guide/scripting/api/messenger.md b/docs/ru/guide/scripting/api/messenger.md new file mode 100644 index 0000000..f49cbaa --- /dev/null +++ b/docs/ru/guide/scripting/api/messenger.md @@ -0,0 +1,104 @@ +# Система сообщений {#messenger-api} + +WoT использует **XMPP протокол** (Jabber) для приватных сообщений между игроками. + +## Ключевые компоненты {#key-components} + +| Компонент | Путь | Назначение | +|-----------|------|------------| +| `MessengerEntry` | `messenger/MessengerEntry.py` | Главная точка входа, глобальный экземпляр `g_instance` | +| `ChatProvider.sendMessage()` | `messenger/proto/xmpp/messages/provider.py` | Отправка XMPP сообщений | +| `ChatSessionsProvider` | `messenger/proto/xmpp/messages/chat_session.py` | Управление чат-сессиями | +| `ClientDecorator.sendMessage()` | `messenger/proto/xmpp/gloox_wrapper.py` | Низкоуровневая отправка через BigWorld.XmppClient | +| `ArenaChatHandler.broadcast()` | `messenger/proto/bw_chat2/chat_handlers.py` | Боевой чат | + +## Отправка приватного сообщения {#send-private-message} + +```python +from messenger.MessengerEntry import g_instance as g_messenger +from messenger.proto.xmpp.jid import makeContactJID + +def sendPrivateMessage(playerDBID, message): + """ + Отправить приватное сообщение игроку по его database ID. + + :param playerDBID: ID игрока в базе данных (из arena.vehicles) + :param message: Текст сообщения + """ + # Получаем XMPP протокол + xmppProto = g_messenger.protos.getPlugin('xmpp') + if xmppProto is None: + print("[Mod] XMPP протокол недоступен") + return + + # Создаём JID (Jabber ID) для контакта + contactJID = makeContactJID(playerDBID) + + # Получаем провайдер чат-сессий + chatProvider = xmppProto.messages.chat + + # Отправляем сообщение (нужен активный канал с игроком) + chatProvider.sendMessage(contactJID, message, xmppProto.getMessageFilters()) +``` + +## Создание чат-сессии {#start-chat-session} + +Перед отправкой сообщения нужно открыть сессию: + +```python +from messenger.proto.xmpp.jid import makeContactJID + +def startChatWithPlayer(playerDBID, playerName): + """Начать чат-сессию с игроком""" + xmppProto = g_messenger.protos.getPlugin('xmpp') + if xmppProto: + contactJID = makeContactJID(playerDBID) + # Это откроет окно чата с игроком + xmppProto.messages.chat.startSession(contactJID, playerName) +``` + +## Отправка сообщений в боевой чат {#battle-chat} + +Для сообщений в бою (команде/всем) используется `bw_chat2`: + +```python +from messenger.MessengerEntry import g_instance as g_messenger + +def sendBattleMessage(text): + """Отправить сообщение в боевой чат""" + bwProto = g_messenger.protos.getPlugin('bw_chat2') + if bwProto: + # broadcast отправляет в текущий канал (команда или общий) + arenaChat = bwProto.arenaChat + arenaChat.broadcast(text) +``` + +## Получение Database ID игрока {#get-player-dbid} + +```python +import BigWorld + +def getPlayerDBID(vehicleID): + """Получить database ID игрока по ID техники""" + player = BigWorld.player() + if player and hasattr(player, 'arena'): + vehicleInfo = player.arena.vehicles.get(vehicleID) + if vehicleInfo: + return vehicleInfo.get('accountDBID') + return None +``` + +## Важные замечания {#important-notes} + +1. **Нужна активная сессия** — вызовите `startSession()` перед отправкой приватных сообщений +2. **Проверка бана** — система автоматически проверяет, не забанен ли игрок в чате +3. **Фильтры** — сообщения проходят через цепочку фильтров (цензура, спам-защита) +4. **DBID** — для идентификации игрока используйте `databaseID`: `player.arena.vehicles[vehicleID]['accountDBID']` + +## Типы сообщений {#message-types} + +Из `messenger/proto/xmpp/gloox_constants.py`: + +- `MESSAGE_TYPE.CHAT` — приватный чат 1-на-1 +- `MESSAGE_TYPE.GROUPCHAT` — MUC (групповой чат) +- `MESSAGE_TYPE.NORMAL` — одиночное сообщение без сессии \ No newline at end of file diff --git a/docs/ru/guide/scripting/api/vehicle-inventory.md b/docs/ru/guide/scripting/api/vehicle-inventory.md new file mode 100644 index 0000000..33d1d5e --- /dev/null +++ b/docs/ru/guide/scripting/api/vehicle-inventory.md @@ -0,0 +1,186 @@ +# Инвентарь танков {#vehicle-inventory-api} + +WoT использует **ItemsCache** для доступа к инвентарю игрока, включая танки. + +## Ключевые компоненты {#key-components} + +| Компонент | Путь | Назначение | +|-----------|------|------------| +| `ItemsCache` | `gui/shared/items_cache.py` | Главный кэш всех предметов | +| `ItemsRequester` | `gui/shared/utils/requesters/ItemsRequester.py` | Запрос и фильтрация предметов | +| `REQ_CRITERIA` | `gui/shared/utils/requesters/ItemsRequester.py` | Критерии фильтрации | + +## Получение всех танков {#get-all-vehicles} + +```python +from helpers import dependency +from skeletons.gui.shared import IItemsCache +from gui.shared.utils.requesters.ItemsRequester import REQ_CRITERIA + +# Получаем ItemsCache через dependency injection +itemsCache = dependency.instance(IItemsCache) + +# Получить ВСЕ танки в инвентаре +allVehicles = itemsCache.items.getVehicles(REQ_CRITERIA.INVENTORY) + +# Перебор танков +for intCD, vehicle in allVehicles.iteritems(): + print("Танк: %s, Уровень: %d, invID: %s" % ( + vehicle.userName, vehicle.level, vehicle.invID + )) +``` + +## Фильтрация танков {#filtering-vehicles} + +```python +from gui.shared.utils.requesters.ItemsRequester import REQ_CRITERIA + +# Только танки в инвентаре +REQ_CRITERIA.INVENTORY + +# Премиум танки +REQ_CRITERIA.INVENTORY | REQ_CRITERIA.VEHICLE.PREMIUM + +# Конкретный уровень (например, 10) +REQ_CRITERIA.INVENTORY | REQ_CRITERIA.VEHICLE.LEVEL(10) + +# Диапазон уровней (8-10) +REQ_CRITERIA.INVENTORY | REQ_CRITERIA.VEHICLE.LEVELS(range(8, 11)) + +# Готовые к бою (есть экипаж, снаряды) +REQ_CRITERIA.INVENTORY | REQ_CRITERIA.VEHICLE.READY + +# По классу техники +REQ_CRITERIA.INVENTORY | REQ_CRITERIA.VEHICLE.CLASSES(['heavyTank']) +# Классы: 'heavyTank', 'mediumTank', 'lightTank', 'AT-SPG', 'SPG' + +# Элитные танки +REQ_CRITERIA.INVENTORY | REQ_CRITERIA.VEHICLE.ELITE + +# Избранные танки +REQ_CRITERIA.INVENTORY | REQ_CRITERIA.VEHICLE.FAVORITE + +# Комбинация критериев +criteria = (REQ_CRITERIA.INVENTORY | + REQ_CRITERIA.VEHICLE.LEVELS(range(8, 11)) | + REQ_CRITERIA.VEHICLE.READY) +vehicles = itemsCache.items.getVehicles(criteria) +``` + +## Свойства объекта Vehicle {#vehicle-properties} + +```python +# vehicle - объект из getVehicles() +vehicle.invID # ID в инвентаре (для очереди в бой) +vehicle.intCD # Compact Descriptor (уникальный ID типа) +vehicle.userName # Локализованное имя ("ИС-7") +vehicle.shortUserName # Короткое имя +vehicle.name # Системное имя ("ussr:R45_IS-7") +vehicle.level # Уровень (1-10) +vehicle.type # Класс ('heavyTank', 'mediumTank', etc.) +vehicle.nation # ID нации (0=СССР, 1=Германия, etc.) +vehicle.nationName # Название нации строкой +vehicle.isPremium # Премиум? +vehicle.isElite # Элитный? +vehicle.isReadyToFight # Готов к бою? +vehicle.isInBattle # Сейчас в бою? +vehicle.isFavorite # В избранном? +vehicle.isRented # Арендованный? +vehicle.health # Текущее HP +vehicle.repairCost # Стоимость ремонта +vehicle.descriptor # VehicleDescriptor с полными данными +vehicle.crew# Данные экипажа +vehicle.shells # Заряженные снаряды +vehicle.eqs # Оборудование +``` + +## Получение текущего танка {#current-vehicle} + +```python +from CurrentVehicle import g_currentVehicle + +# Проверить, выбран ли танк +if g_currentVehicle.isPresent(): + invID = g_currentVehicle.invID # Inventory ID + item = g_currentVehicle.item # Объект Vehicle + intCD = g_currentVehicle.intCD # Compact descriptor + + print("Текущий: %s (invID=%s)" % (item.userName, invID)) +``` + +## Получение танка по ID {#get-vehicle-by-id} + +```python +# По inventory ID +vehicle = itemsCache.items.getVehicle(invID) + +# По compact descriptor +vehicle = itemsCache.items.getItemByCD(intCD) +``` + +## Полный пример {#full-example} + +```python +from helpers import dependency +from skeletons.gui.shared import IItemsCache +from gui.shared.utils.requesters.ItemsRequester import REQ_CRITERIA + +class VehicleListHelper(object): + itemsCache = dependency.descriptor(IItemsCache) + + def getAllVehicles(self): + """Получить все танки в ангаре""" + return self.itemsCache.items.getVehicles(REQ_CRITERIA.INVENTORY) + + def getReadyVehicles(self): + """Получить танки готовые к бою""" + criteria = REQ_CRITERIA.INVENTORY | REQ_CRITERIA.VEHICLE.READY + return self.itemsCache.items.getVehicles(criteria) + + def getVehiclesByLevel(self, level): + """Получить танки определённого уровня""" + criteria = REQ_CRITERIA.INVENTORY | REQ_CRITERIA.VEHICLE.LEVEL(level) + return self.itemsCache.items.getVehicles(criteria) + + def getVehicleByInvID(self, invID): + """Получить танк по inventory ID""" + return self.itemsCache.items.getVehicle(invID) + + def printVehicleList(self): + vehicles = self.getAllVehicles() + for intCD, veh in vehicles.iteritems(): + status = "ГОТОВ" if veh.isReadyToFight else "НЕ ГОТОВ" + print("[%d] %s (Ур.%d) invID=%s [%s]" % ( + intCD, veh.userName, veh.level, veh.invID, status + )) + +g_vehicleHelper = VehicleListHelper() +``` + +## Дополнительные критерии {#additional-criteria} + +```python +# Специальные танки +REQ_CRITERIA.VEHICLE.SPECIAL + +# Арендованные +REQ_CRITERIA.VEHICLE.RENT + +# Можно продать +REQ_CRITERIA.VEHICLE.CAN_SELL + +# Можно обменять (trade-in) +REQ_CRITERIA.VEHICLE.CAN_TRADE_IN + +# Сейчас в бою +REQ_CRITERIA.VEHICLE.IS_IN_BATTLE + +# Во взводе +REQ_CRITERIA.VEHICLE.IS_IN_UNIT + +# Заблокирован экипаж +REQ_CRITERIA.VEHICLE.IS_CREW_LOCKED + +# По тегам +REQ_CRITERIA.VEHICLE.HAS_TAGS({'premium', 'special'}) +``` From ce441d56019a036473f174d274d56d6025233fae Mon Sep 17 00:00:00 2001 From: Andrei Soprachev <13734096+SoprachevAK@users.noreply.github.com> Date: Mon, 26 Jan 2026 02:45:07 +0300 Subject: [PATCH 2/3] Add Scripting API NavItem --- docs/config.ts | 15 +++++++++++ .../battle-queue/index.md} | 26 +++++++++---------- .../introduction}/index.md | 6 ++--- .../messenger/index.md} | 16 ++++++------ .../vehicle-inventory/index.md} | 12 ++++----- 5 files changed, 45 insertions(+), 30 deletions(-) rename docs/ru/{guide/scripting/api/battle-queue.md => scripting-api/battle-queue/index.md} (80%) rename docs/ru/{guide/scripting/api => scripting-api/introduction}/index.md (87%) rename docs/ru/{guide/scripting/api/messenger.md => scripting-api/messenger/index.md} (76%) rename docs/ru/{guide/scripting/api/vehicle-inventory.md => scripting-api/vehicle-inventory/index.md} (90%) diff --git a/docs/config.ts b/docs/config.ts index 8fd3fc6..841b2c9 100644 --- a/docs/config.ts +++ b/docs/config.ts @@ -4,6 +4,7 @@ import { defineAdditionalConfig, type DefaultTheme } from 'vitepress' const nav: DefaultTheme.NavItem[] = [ { text: 'Главная', link: '/' }, { text: 'Руководство', link: '/guide/first-steps/introduction/', activeMatch: '/guide/' }, + { text: 'Scripting API', link: '/scripting-api/introduction/', activeMatch: '/scripting-api/' }, { text: 'Статьи', link: '/articles/how-to-create-remote-control-widget/', activeMatch: '/articles/' }, ] @@ -135,6 +136,20 @@ const sidebar: DefaultTheme.Sidebar = { ] } ] + }, + '/scripting-api': { + base: '/scripting-api', + items: [ + { + text: 'Scripting API', + items: [ + { text: 'Введение', link: '/introduction/' }, + { text: 'Очередь в бой', link: '/battle-queue/' }, + { text: 'Система сообщений', link: '/messenger/' }, + { text: 'Инвентарь техники', link: '/vehicle-inventory/' }, + ] + } + ] } } diff --git a/docs/ru/guide/scripting/api/battle-queue.md b/docs/ru/scripting-api/battle-queue/index.md similarity index 80% rename from docs/ru/guide/scripting/api/battle-queue.md rename to docs/ru/scripting-api/battle-queue/index.md index 8734540..b737e71 100644 --- a/docs/ru/guide/scripting/api/battle-queue.md +++ b/docs/ru/scripting-api/battle-queue/index.md @@ -1,15 +1,15 @@ # Очередь в бой {#battle-queue-api} -WoT использует систему **Prebattle Control** (`gui/prb_control/`) для управления очередями в бой. +Мир Танков использует систему **Prebattle Control** (`gui/prb_control/`) для управления очередями в бой. ## Ключевые компоненты {#key-components} -| Компонент | Путь | Назначение | -|-----------|------|------------| -| `_PreBattleDispatcher` | `gui/prb_control/dispatcher.py` | Главный диспетчер всех prebattle действий | -| `PreQueueEntity` | `gui/prb_control/entities/base/pre_queue/entity.py` | Базовый класс для очередей | -| `RandomEntity` | `gui/prb_control/entities/random/pre_queue/entity.py` | Очередь случайных боёв | -| `PlayerAccount` | `Account.py` | Низкоуровневые методы очереди | +| Компонент | Путь | Назначение | +| ---------------------- | ----------------------------------------------------- | ----------------------------------------- | +| `_PreBattleDispatcher` | `gui/prb_control/dispatcher.py` | Главный диспетчер всех prebattle действий | +| `PreQueueEntity` | `gui/prb_control/entities/base/pre_queue/entity.py` | Базовый класс для очередей | +| `RandomEntity` | `gui/prb_control/entities/random/pre_queue/entity.py` | Очередь случайных боёв | +| `PlayerAccount` | `Account.py` | Низкоуровневые методы очереди | ## Типы очередей {#queue-types} @@ -136,12 +136,12 @@ def onArenaCreated(): player.enqueueRandom(vehInvID, gameplaysMask=255, arenaTypeID=0, randomFlags=0) ``` -| Параметр | Описание | -|----------|----------| -| `vehInvID` | ID танка в инвентаре (`g_currentVehicle.invID`) | -| `gameplaysMask` | Битовая маска разрешённых режимов/карт | -| `arenaTypeID` | ID конкретной карты для демонстратора (0 = любая) | -| `randomFlags` | Дополнительные флаги | +| Параметр | Описание | +| --------------- | ------------------------------------------------- | +| `vehInvID` | ID танка в инвентаре (`g_currentVehicle.invID`) | +| `gameplaysMask` | Битовая маска разрешённых режимов/карт | +| `arenaTypeID` | ID конкретной карты для демонстратора (0 = любая) | +| `randomFlags` | Дополнительные флаги | ### gameplaysMask {#gameplay-mask} diff --git a/docs/ru/guide/scripting/api/index.md b/docs/ru/scripting-api/introduction/index.md similarity index 87% rename from docs/ru/guide/scripting/api/index.md rename to docs/ru/scripting-api/introduction/index.md index 2001ba4..eecaff2 100644 --- a/docs/ru/guide/scripting/api/index.md +++ b/docs/ru/scripting-api/introduction/index.md @@ -4,7 +4,7 @@ ## Разделы {#sections} -### [Система сообщений](./messenger.md) {#messenger} +### [Система сообщений](../messenger) {#messenger} Отправка приватных сообщений игрокам и работа с боевым чатом через XMPP протокол. @@ -12,7 +12,7 @@ - Боевой чат - Чат-сессии -### [Очередь в бой](./battle-queue.md) {#battle-queue} +### [Очередь в бой](../battle-queue) {#battle-queue} Постановка игрока в очередь на бой и управление режимами. @@ -20,7 +20,7 @@ - События очереди - Параметры `enqueueRandom` -### [Инвентарь танков](./vehicle-inventory.md) {#vehicle-inventory} +### [Инвентарь танков](../vehicle-inventory) {#vehicle-inventory} Получение списка танков игрока и работа с инвентарём. diff --git a/docs/ru/guide/scripting/api/messenger.md b/docs/ru/scripting-api/messenger/index.md similarity index 76% rename from docs/ru/guide/scripting/api/messenger.md rename to docs/ru/scripting-api/messenger/index.md index f49cbaa..47e36a7 100644 --- a/docs/ru/guide/scripting/api/messenger.md +++ b/docs/ru/scripting-api/messenger/index.md @@ -1,16 +1,16 @@ # Система сообщений {#messenger-api} -WoT использует **XMPP протокол** (Jabber) для приватных сообщений между игроками. +Мир Танков использует **XMPP протокол** (Jabber) для приватных сообщений между игроками. ## Ключевые компоненты {#key-components} -| Компонент | Путь | Назначение | -|-----------|------|------------| -| `MessengerEntry` | `messenger/MessengerEntry.py` | Главная точка входа, глобальный экземпляр `g_instance` | -| `ChatProvider.sendMessage()` | `messenger/proto/xmpp/messages/provider.py` | Отправка XMPP сообщений | -| `ChatSessionsProvider` | `messenger/proto/xmpp/messages/chat_session.py` | Управление чат-сессиями | -| `ClientDecorator.sendMessage()` | `messenger/proto/xmpp/gloox_wrapper.py` | Низкоуровневая отправка через BigWorld.XmppClient | -| `ArenaChatHandler.broadcast()` | `messenger/proto/bw_chat2/chat_handlers.py` | Боевой чат | +| Компонент | Путь | Назначение | +| ------------------------------- | ----------------------------------------------- | ------------------------------------------------------ | +| `MessengerEntry` | `messenger/MessengerEntry.py` | Главная точка входа, глобальный экземпляр `g_instance` | +| `ChatProvider.sendMessage()` | `messenger/proto/xmpp/messages/provider.py` | Отправка XMPP сообщений | +| `ChatSessionsProvider` | `messenger/proto/xmpp/messages/chat_session.py` | Управление чат-сессиями | +| `ClientDecorator.sendMessage()` | `messenger/proto/xmpp/gloox_wrapper.py` | Низкоуровневая отправка через BigWorld.XmppClient | +| `ArenaChatHandler.broadcast()` | `messenger/proto/bw_chat2/chat_handlers.py` | Боевой чат | ## Отправка приватного сообщения {#send-private-message} diff --git a/docs/ru/guide/scripting/api/vehicle-inventory.md b/docs/ru/scripting-api/vehicle-inventory/index.md similarity index 90% rename from docs/ru/guide/scripting/api/vehicle-inventory.md rename to docs/ru/scripting-api/vehicle-inventory/index.md index 33d1d5e..97951f9 100644 --- a/docs/ru/guide/scripting/api/vehicle-inventory.md +++ b/docs/ru/scripting-api/vehicle-inventory/index.md @@ -1,14 +1,14 @@ # Инвентарь танков {#vehicle-inventory-api} -WoT использует **ItemsCache** для доступа к инвентарю игрока, включая танки. +Мир Танков использует **ItemsCache** для доступа к инвентарю игрока, включая танки. ## Ключевые компоненты {#key-components} -| Компонент | Путь | Назначение | -|-----------|------|------------| -| `ItemsCache` | `gui/shared/items_cache.py` | Главный кэш всех предметов | +| Компонент | Путь | Назначение | +| ---------------- | ----------------------------------------------- | ----------------------------- | +| `ItemsCache` | `gui/shared/items_cache.py` | Главный кэш всех предметов | | `ItemsRequester` | `gui/shared/utils/requesters/ItemsRequester.py` | Запрос и фильтрация предметов | -| `REQ_CRITERIA` | `gui/shared/utils/requesters/ItemsRequester.py` | Критерии фильтрации | +| `REQ_CRITERIA` | `gui/shared/utils/requesters/ItemsRequester.py` | Критерии фильтрации | ## Получение всех танков {#get-all-vehicles} @@ -89,7 +89,7 @@ vehicle.isRented # Арендованный? vehicle.health # Текущее HP vehicle.repairCost # Стоимость ремонта vehicle.descriptor # VehicleDescriptor с полными данными -vehicle.crew# Данные экипажа +vehicle.crew # Данные экипажа vehicle.shells # Заряженные снаряды vehicle.eqs # Оборудование ``` From fe3b1feb6d2fa5804ea4a5b1449b376b795f2791 Mon Sep 17 00:00:00 2001 From: Andrei Soprachev <13734096+SoprachevAK@users.noreply.github.com> Date: Mon, 26 Jan 2026 02:45:14 +0300 Subject: [PATCH 3/3] Add english version --- docs/en/config.ts | 15 +++++++++++++++ docs/en/scripting-api/battle-queue/index.md | 6 ++++++ docs/en/scripting-api/introduction/index.md | 6 ++++++ docs/en/scripting-api/messenger/index.md | 6 ++++++ docs/en/scripting-api/vehicle-inventory/index.md | 6 ++++++ 5 files changed, 39 insertions(+) create mode 100644 docs/en/scripting-api/battle-queue/index.md create mode 100644 docs/en/scripting-api/introduction/index.md create mode 100644 docs/en/scripting-api/messenger/index.md create mode 100644 docs/en/scripting-api/vehicle-inventory/index.md diff --git a/docs/en/config.ts b/docs/en/config.ts index 0d3b576..0522624 100644 --- a/docs/en/config.ts +++ b/docs/en/config.ts @@ -4,6 +4,7 @@ import { defineAdditionalConfig, type DefaultTheme } from 'vitepress' const nav: DefaultTheme.NavItem[] = [ { text: 'Home', link: '/en/' }, { text: 'Guide', link: '/en/guide/first-steps/introduction/', activeMatch: '/en/guide/' }, + { text: 'Scripting API', link: '/en/scripting-api/introduction/', activeMatch: '/en/scripting-api/' }, { text: 'Articles', link: '/en/articles/how-to-create-remote-control-widget/', activeMatch: '/en/articles/' }, ] @@ -135,6 +136,20 @@ const sidebar: DefaultTheme.Sidebar = { ] } ] + }, + '/en/scripting-api': { + base: '/en/scripting-api', + items: [ + { + text: 'Scripting API', + items: [ + { text: 'Introduction', link: '/introduction/' }, + { text: 'Battle Queue', link: '/battle-queue/' }, + { text: 'Messenger System', link: '/messenger/' }, + { text: 'Vehicle Inventory', link: '/vehicle-inventory/' }, + ] + } + ] } } diff --git a/docs/en/scripting-api/battle-queue/index.md b/docs/en/scripting-api/battle-queue/index.md new file mode 100644 index 0000000..fb1b4d3 --- /dev/null +++ b/docs/en/scripting-api/battle-queue/index.md @@ -0,0 +1,6 @@ +# Battle Queue {#battle-queue-api} + +::: tip Help translate +If you know Russian you can help by translating this article from the Russian version. +[Русская версия этой статьи](/ru/scripting-api/battle-queue/) +::: diff --git a/docs/en/scripting-api/introduction/index.md b/docs/en/scripting-api/introduction/index.md new file mode 100644 index 0000000..da9477a --- /dev/null +++ b/docs/en/scripting-api/introduction/index.md @@ -0,0 +1,6 @@ +# Scripting API {#api-reference} + +::: tip Help translate +If you know Russian you can help by translating this article from the Russian version. +[Русская версия этой статьи](/ru/scripting-api/introduction/) +::: diff --git a/docs/en/scripting-api/messenger/index.md b/docs/en/scripting-api/messenger/index.md new file mode 100644 index 0000000..0a4dd6c --- /dev/null +++ b/docs/en/scripting-api/messenger/index.md @@ -0,0 +1,6 @@ +# Messenger System {#messenger-api} + +::: tip Help translate +If you know Russian you can help by translating this article from the Russian version. +[Русская версия этой статьи](/ru/scripting-api/messenger/) +::: diff --git a/docs/en/scripting-api/vehicle-inventory/index.md b/docs/en/scripting-api/vehicle-inventory/index.md new file mode 100644 index 0000000..d069435 --- /dev/null +++ b/docs/en/scripting-api/vehicle-inventory/index.md @@ -0,0 +1,6 @@ +# Vehicle Inventory {#vehicle-inventory-api} + +::: tip Help translate +If you know Russian you can help by translating this article from the Russian version. +[Русская версия этой статьи](/ru/scripting-api/vehicle-inventory/) +:::