Trinitycore Вопрос об API, доступных для скриптов LUA
Прежде всего, позвольте мне извиниться, если это неправильное место для размещения этого вопроса.
Я играю с сервером Single Player Project для 3.3.5. Я пытаюсь создать сценарий, который телепортирует игрока всякий раз, когда пользователь указывает на карту внутри игры.
Я изменил аддон Carbonite, чтобы добавить элемент в контекстное меню карты, чтобы он отправлял команду gm[.go zonexy][3] [zonecoordinate X] [zonecoordinate Y]
.
Однако это очень хорошо работает с одной загвоздкой. Работает только для текущей зоны игрока. Я хочу, чтобы он работал для всех зон, которые я вижу на карте. Для этого мне нужен zoneId, расположенный в AreaTableID. (Это необязательный аргумент для команды.go zonexy)
Да хоть убей, я не могу понять, как получить текущий идентификатор карты на стороне клиента. Я просмотрел его и нашел только GetCurrentMapZone(), который дает мне номер, с которым я действительно не знаю, что делать. И GetRealZoneText(), который возвращает имя зоны, на которую указывает курсор на карте. Это почти то, что мне нужно. Мне нужен идентификатор зоны, а не имя зоны. И GetCurrentMapAreaID(), который также дает мне mapID, но не соответствует нужному мне zoneID.
Поэтому я подумал создать lua-скрипт на стороне сервера, который берет [координату зоны X] [координату зоны Y] [имя зоны] от клиента и преобразует имя зоны в идентификатор зоны. Или, альтернативно, каким-то образом вычисляет zoneid из GetCurrentMapZone() и GetCurrentMapAreaID().
Однако я не нашел документации о том, какие API доступны в скрипте Lua. Я просмотрел несколько сценариев, которые поставлялись вместе с однопользовательским проектом. Один из них - "System_Group_commands.lua" (прилагается ниже), к которому я подключился. Я успешно передал информацию от клиента, но я не знаю, можно ли найти строковое имя зоны и получить ее идентификатор из AreaTableID из LUA. Кроме того, еще одна проблема в том, что я передаю координаты зоны. Но функция Player: Teleport в LUA требует абсолютных координат карты. Я посмотрел исходный код на C++ для функций Teleport и для функции.go zonexy, и мне кажется, что функция.go zonexy преобразует локальные координаты в глобальные. С помощью
Zone2MapCoordinates(x, y, zoneEntry->ID); //line 454 in cs_go.cpp attached below
Однако я не знаю, доступна ли эта функция сценариям LUA.
Я был бы очень признателен, если бы мне кто-нибудь помог. Может быть, есть простой способ получить идентификатор зоны со стороны клиента или что-то еще, что мне не хватает...
Спасибо
PS. Картинка стоит 1000 слов... Вот как это работает до сих пор. Было бы здорово распространить его на другие области карты.