• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в RAGE Multiplayer.

    Ошибка: Ваша версия Grand Theft Auto V не поддерживается RAGE Multiplayer.
    ERROR: Your game version is not supported by RAGE Multiplayer.

    Данная ошибка говорит о том, что GTA V обновилась до новой версии (GTA Online тоже). Вам необходимо обновить саму игру в главном меню вашего приложения (Steam / Epic Games / Rockstar Games).
    Если после этого RAGE:MP все равно не работает - вам нужно дождаться выхода патча для самого мультиплеера (обычно это занимает от нескольких часов до нескольких дней).

    Новости и апдейты Rockstar Games - https://www.rockstargames.com/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

Взаимодействие с entity

qweqweqwe123123123

Участник портала
24 Июн 2025
87
13
18
Привет, подскажите пожалуйста) Сразу с примера)

Пример 1. server-side (синхронный код):
Код:
 mp.events.add('myCustomEvent', (player: PlayerMp, entity: EntityMp) => {
    // надо ли здесь делать проверку на exists ?
    // if (!mp.players.exists(entity)) return;
    entity.position = new mp.Vector3(....)
    
    // ...еще какой-то синхронный код...

    // надо ли здесь делать проверку на exists ?
    // if (!mp.players.exists(entity)) return;
    entity.setVariable('qwe', null)
        
    // ...и еще какой-то синхронный код...

    // надо ли здесь делать проверку на exists ?
    // if (!mp.players.exists(entity)) return;
    const one = entity.getVariable('qqqq123')
  });


Пример 2. server-side (Асинхронный код):
Код:
 mp.events.add('myCustomEvent', async (player: PlayerMp, entity: EntityMp) => {
    // надо ли здесь делать проверку на exists ?
    // if (!mp.players.exists(entity)) return;
    entity.position = new mp.Vector3(....)
    
    // ...еще какой-то асинхронный код...
    await mp.game.waitAsync(50);

    // надо ли здесь делать проверку на exists ?
    // if (!mp.players.exists(entity)) return;
    entity.setVariable('qwe', null)
        
    // ...и еще какой-то асинхронный код...
   await mp.game.waitAsync(50);

    // надо ли здесь делать проверку на exists ?
    // if (!mp.players.exists(entity)) return;
    const one = entity.getVariable('qqqq123')
  });

Суть вопроса:
1) Надо ли перед тем как ты обращаешься к entity (player, object, ped, vehicle и любые другие entity), проверять её наличие на exist ?
2) Как часто надо проверять на exist ? Перед каждым обращением или 1-ого раза достаточно ? Или зависит от sync/asycn ?
3) exist() принимает либо EntityMp, либо number (id), без разницы, что туда передавать ?
А вдруг игрок/объект вышел/удален на сервере и был создан/вошел и в игру и к нему присвоился такой же id ?
 

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
2,884
291
100
1) В синхронном коде обычно достаточно проверить existence один раз в начале, если entity не меняется в процессе.
2) В асинхронном коде — проверять перед каждым критичным обращением, особенно после await, т.к. entity мог исчезнуть.
3) Проверять лучше по объекту EntityMp, а не по id, так как id может быть переиспользован после удаления. Проверка через exists(entity) — надёжнее.
 
Реакции: Inoi

Inoi

/dev/null
Команда форума
Moderator
VIP
15 Окт 2020
4,842
2,437
208
36
Мыш всё верно говорит

В синхронном коде, в рамках одного евент-лупа энтити никогда никуда не испарится посередине функции, она уже "в памяти" твоего эээ метода, и это просто невозможно.
Поэтому в 99% случаев тебе достаточно одного
Код:
if (!entity || !entity.handle || !mp.entities.exists(entity)) return;
в начале твоего кода.

Проверять перед каждой строкой - не нужно.

В асинке да, чел мог выйти, тачку могли взорвать, объект уничтожить, ну ТЕОРЕТИЧЕСКИ за время твоего таймера
Поэтому после авейта лучше проверить снова
 
Реакции: qweqweqwe123123123

Inoi

/dev/null
Команда форума
Moderator
VIP
15 Окт 2020
4,842
2,437
208
36
Реакции: qweqweqwe123123123

qweqweqwe123123123

Участник портала
24 Июн 2025
87
13
18
Мыш всё верно говорит

В синхронном коде, в рамках одного евент-лупа энтити никогда никуда не испарится посередине функции, она уже "в памяти" твоего эээ метода, и это просто невозможно.
Поэтому в 99% случаев тебе достаточно одного
Код:
if (!entity || !entity.handle || !mp.entities.exists(entity)) return;
в начале твоего кода.

Проверять перед каждой строкой - не нужно.

В асинке да, чел мог выйти, тачку могли взорвать, объект уничтожить, ну ТЕОРЕТИЧЕСКИ за время твоего таймера
Поэтому после авейта лучше проверить снова
в целом тоже согласен.... когда написал эту темку по сути дал себе ответ уже..))

но этот вопрос интересный, player.id , object.id и другие entity.id... -> да, они уникальны на сервере, но если уничтожить entity и создать новый, то id может повториться

что думаешь по третьему пункту
 

X-Clusiv

Модератор
Команда форума
Moderator
BackEnd developer
4 Окт 2020
766
360
161
31
в целом тоже согласен.... когда написал эту темку по сути дал себе ответ уже..))

но этот вопрос интересный, player.id , object.id и другие entity.id... -> да, они уникальны на сервере, но если уничтожить entity и создать новый, то id может повториться

что думаешь по третьему пункту
Проверяй объект. Тогда точно не прогадаешь. Объект повторно не создать.( для супер пупер подстраховки можешь сдeлать так)
JavaScript:
mp.players.at(player?.id) === player
 

Similar threads