Клиент поддерживает автоматический разбор и исполнение строки ввода с учетом слеш-команд. Слеш-команды могут иметь префикс (например, команды "/say" или "/tell" убираются из чата, показывая вместо этого префикс и оставляя только текст сообщения) или не иметь его (например, команда "/invite" пишется просто в строку никак не меняя ее).
Типичная схема работы со слеш-командами. Берется текст из EditLine и помещается в строку разбора чата миссии. Результат анализируется, при необходимости показывается префикс и оставшийся текст помещается обратно в EditLine. Строка разбора чата миссии при этом запоминает, какая была введена слеш-команда. В любой момент можно выполнить строку разбора чата миссии. Необходимые команды будут выполнены автоматически, а состояние очищено (аналог нажатия "Enter" в чате). Также очистить состояние можно явно в любой момент (аналог нажатия "Esc" в чате). При выполнении или очистке строки разбора чата миссии также нужно явно обновлять EditLine чата в игре (очищать или переформатировать).
Настройки слеш-команд хранятся в /Client/GameStateRoot.xdb, поле "slashCommands".
В текущей реализации поддерживаются два вида "слеша": "/" и "\". Т.е. будет работать как команда "/command", так и "\command". В дальнейшем настройка вида "слешей" планируется через базу.
В текущей реализации объекты в строке ввода чата игнорируются. В дальнейшем они также должны будут разбираться (например, для отправки через сервер и т.п.).
Комментарий к описанию команд, описанных ниже:
* Если у команды есть префикс, то вместе с именем команды разбираются дополнительные аргументы (нужны для формирования префикса). Количество (дополнительных) аргументов прописано в базе (может быть 0). Оставшая строка является основным аргументом (есть всегда) и передается в команду без дополнительного разбора.
* Если у команды нет префикса, то количество аргументов зависит от команды. Для этого случая количество аргументов в базе прописано в -1 (нет префикса и его разбора).
Текущие доступные слеш-команды:
* чат:
* /say - префикс, без дополнительных аргументов
* /tell - префикс, 1 дополнительный аргумент - имя игрока
* /party - префикс, без дополнительных аргументов
* /yell - префикс, без дополнительных аргументов
* /zone - префикс, без дополнительных аргументов
* /zoneyell - префикс, без дополнительных аргументов
* /world - префикс, без дополнительных аргументов
* /raid - префикс, без дополнительных аргументов
* /raidwarning - префикс, без дополнительных аргументов
* группа и отряд:
* /invite - без префикса, пока работает только на текущей цели (без аргументов)
* /leave - без префикса, нет аргументов
* /kick - без префикса, 1 аргумент - имя игрока
* /disband - без префикса, нет аргументов. роспуск группы или отряда лидером
* /readycheck - без префикса, нет аргументов. посылает всем членам группы или отряда запрос о готовности.
* гильдия:
* /guild - префикс, без дополнительных аргументов. сообщение в гильдийский чат
* /officer - префикс, без дополнительных аргументов. сообщение в офицерский чат
* /ginvite - без префикса, на текущей цели (без аргументов) или 1 аргумент - имя игрока. приглашение в гильдию офицером
* /gkick - без префикса, на текущей цели (без аргументов) или 1 аргумент - имя игрока. выкидывание из гильдии офицером
* /gleave - без префикса, нет аргументов. самостоятельный выход из гильдии негильдмастером
* /gdisband - без префикса, нет аргументов. роспуск гильдии гильдмастером
* /ginfo - без префикса, 1 аргумент - имя гильдии (без префикса берется своя гильдия). текстовая информация о количестве членов гильдии всего, количестве членов гильдии онлайн и имени гильдмастера этой гильдии.
* /gdeprive - без префикса, на текущей цели (без аргументов) или 1 аргумент - имя игрока. понижение гильд-ранга члена гильдии с более низким рангом до самого низкого ранга не имеющего прав.
* эмоции, эмоция может быть без цели или с текущей целью игрока:
* /emote - без префикса, 1 аргумент - текстовое сообщение. В ответ придет EventCustomEmote.
* /... - команды, заданные в \Client\SlashCommands\SlashCommands.(SlashCommands).xdb через массив: emoteCommands. В ответ придет, помимо проигрывания анимации (если есть), EventEmoteText (если есть).