ai-streetraces для разработчиков
У ai-streetraces нет экспортов. Его вызов полиции, причины операций и приватные события.
У ai-streetraces нет экспортов и state bags. Гонки живут только в памяти сервера, а деньги, вызовы и пункт меню идут через AI Core.
Вызов полиции
Когда начинается обратный отсчёт гонки, она может отправить один вызов (по настройке панели Alert chance) через dispatch.alert из lib: заголовок "Street race", сообщение "(count) vehicles lining up for an illegal race" («(count) машин выстраиваются для нелегальной гонки»), на линии старта, с первым гонщиком в качестве source, иконка flag-checkered. Вызов попадает в тот скрипт оповещений, который запущен.
Деньги
Все деньги проходят через счёт из настройки панели Money account с такими причинами операций:
| Причина | Когда |
|---|---|
streetrace:<raceId> | Ставка списывается при создании или присоединении. |
streetrace:refund | Ставка возвращается (ушёл до старта, гонка отменена, слишком мало гонщиков, остановка ресурса). |
streetrace:won | Победитель получает банк. |
streetrace:split | Время вышло; каждый оставшийся гонщик получает долю. |
Как открыть меню из другого скрипта
Сервер открывает меню гонки клиентским событием ai-streetraces:client:openMenu (это делает /race). Используйте его, чтобы поместить меню в своё приложение телефона или точку взаимодействия.
Сторона: сервер -> клиент · Аргументы: нет
// сервер
emitNet("ai-streetraces:client:openMenu", source);Меню показывает только то, что игрок может сделать сейчас (создать гонку до метки, принять приглашение, начать, отменить, уйти или сдаться), и каждый выбор проверяется на сервере, поэтому открывать его кому угодно безопасно.
Приватные события и колбэки
Собственный контракт скрипта (resource/common/race.ts). Сервер при каждом вызове проверяет транспорт, расстояние, деньги и состояние гонки. Они могут меняться между версиями: не вызывайте и не слушайте их из других ресурсов.
| Имя | Направление | Что передаёт |
|---|---|---|
ai-streetraces:create | client callback | (buyIn, finishX, finishY): создать гонку от позиции игрока до финиша. |
ai-streetraces:join | client callback | (raceId): присоединиться к гонке, в которую игрока пригласили (платит ставку). |
ai-streetraces:leave | client callback | (): покинуть гонку; если хозяин уходит до старта, гонка отменяется. |
ai-streetraces:begin | client callback | (): хозяин завершает время присоединения сейчас. |
ai-streetraces:finish | client callback | (): гонщик доехал до финиша. |
ai-streetraces:client:state | server -> racer | (race, serverNow): снимок гонки, в которой участвует игрок. |
ai-streetraces:client:racer | server -> racers | (racer, pot): гонщик присоединился. |
ai-streetraces:client:racerLeft | server -> racers | (racerId, pot): гонщик ушёл. |
ai-streetraces:client:start | server -> racers | (startAt, serverNow): идёт обратный отсчёт; старт в startAt (по часам сервера). |
ai-streetraces:client:ended | server -> racer | (): гонка для этого игрока закончилась. |
ai-streetraces:client:invite | server -> players near a new race | (invite, serverNow). |
ai-streetraces:client:uninvite | server -> invited players | (raceId): гонка больше не принимает гонщиков. |