• Из-за обновления 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) последний раз были обновлены:

Проблема Не работает testPointToPoint ignoredEntity

vpn

Начинающий специалист
29 Май 2022
138
66
85
Всем привет!
Значит для написания одной из функции(Для работы в паблик), столкнулся с проблемой с mp.raycasting.testPointToPoint.
На WIKI RageMp указан такой синтаксис:
1695568322839.png



Специально для вас накидал тестовый вариант на JS.
Index file
JavaScript:
setTimeout(() => {

    const object = mp.objects.new(mp.game.joaat('prop_paints_can07'), new mp.Vector3(0, 0, 71)); //Объект который будет перемещен
    const distance = 100;
    const camera = mp.cameras.new('gameplay');
    const getGameplayCameraDirection = () => camera.getDirection();
    const getGameplayCameraPosition = () => camera.getCoord();

    mp.events.add('render', () => {
        const pos = getGameplayCameraPosition();
        const dir = getGameplayCameraDirection();
        const farAway = new Vector3(dir.x * distance + pos.x, dir.y * distance + pos.y, dir.z * distance + pos.z);
        const raycast = mp.raycasting.testPointToPoint(pos, farAway, [object], 1);
        if (!raycast) {
            return;
        }
        console.log(raycast.entity == object); //true
        object.position = raycast.position;
    });
}, 5000);

В чем проблема:
1) mp.raycasting.testPointToPoint не игнорирует созданный object, из-за чего сталкивается с ним, и с каждым кадром объект становится все ближе к камере игрока.
2) На RageMP WIKI в "Client-Side example" флаг указывается одной цифрой
1695568523689.png
, и судя по всему это правильно, потому-что когда я ставил flag для взаимодействия с педами(4), то raycast по понятным причинам начал триггерится только на мне.
3) Когда я поставил "flag = 1", то mp.raycasting.testPointToPoint так-же триггерится на этом объекте, хотя flag 1 предназначен для "Intersect with map",
а для "Intersect with objects" есть отдельный 16-ый флаг.

Мои попытки исправить данный казус:

JavaScript:
const raycast = mp.raycasting.testPointToPoint(pos, farAway, [object], 1); //not working
const raycast = mp.raycasting.testPointToPoint(pos, farAway, [object.handle], 1); //not working
const raycast = mp.raycasting.testPointToPoint(pos, farAway, object, 1); //not working
const raycast = mp.raycasting.testPointToPoint(pos, farAway, object.handle, 1); //not working


Работающим решением в данном случае выступил код:

JavaScript:
setTimeout(() => {
    const object = mp.objects.new(mp.game.joaat('prop_paints_can07'), new mp.Vector3(0, 0, 71)); //Объект который будет перемещен
    const distance = 100;
    const camera = mp.cameras.new('gameplay');
    const getGameplayCameraDirection = () => camera.getDirection();
    const getGameplayCameraPosition = () => camera.getCoord();

    mp.events.add('render', () => {
        const pos = getGameplayCameraPosition();
        const dir = getGameplayCameraDirection();
        const farAway = new Vector3(dir.x * distance + pos.x, dir.y * distance + pos.y, dir.z * distance + pos.z);

        object.position = new mp.Vector3(0, 0, 71); //add this

        const raycast = mp.raycasting.testPointToPoint(pos, farAway, [object], 1);
        if (!raycast) {
            return;
        }

        console.log(raycast.entity == object); //false

        object.position = raycast.position; //В таком случае это работает нормально
    });

}, 5000);

До последнего пытался что-то сделать, но нормально это не работает.
Главный вопрос - Кто с этим сталкивался? Что происходит? И как это пофиксить?
Я бы мог оставить все как есть, но!
Возможно, данная проблема может возникнуть когда нужно будет игнорировать каких нибудь игроков сервера, и если я буду менять позицию игроков, то столкнусь с рассинхроном и потерей оптимизации за счет entityStreamIn.
Но так-же стоит добавить, что я не знаю будет ли эта догадка про игнорирование игроков верна, так-как проверить ее пока не с кем.
 

rusak <3

Новый участник
23 Сен 2022
11
2
40
Помести 4 параметр в массив [17] или [1] какой флаг тебе нужен

+ Ты рендер поместил зачем то в таймаут, просто создай где то этот объект и передавай в отдельную функцию этот объект в 3 параметр в игнор
 

vpn

Начинающий специалист
29 Май 2022
138
66
85
Помести 4 параметр в массив [17] или [1] какой флаг тебе нужен

+ Ты рендер поместил зачем то в таймаут, просто создай где то этот объект и передавай в отдельную функцию этот объект в 3 параметр в игнор
Не суть важно что он в таймауте, я написал этот код просто для теста.
Ты кажется не понял суть данного топика, тут вопрос не про чистоту кода(Я вообще пишу на TS, а тут я просто накинул код что-бы вы сами могли его затестить)

Идея про флаги в массиве хорошая, но, к сожалению, это все таки так не работает (Проверенно только что)
(
Флаги должны быть указаны цифрой -
  • flags: Int representing sum of flags - example: 17 (intersect with map [1] and objects [16])
).
 

vpn

Начинающий специалист
29 Май 2022
138
66
85
UPD:
Похоже этот баг случается только с "клиентскими" entity.

JavaScript:
/*----------------------CODE ONE---------------------*/
const raycast = mp.raycasting.testPointToPoint(pos, farAway, mp.players.local, 4); //ignored
/*----------------------CODE TWO---------------------*/
const ped = mp.peds.new(mp.game.joaat('mp_m_freemode_01'), new mp.Vector3(0, 0, 74), 0);
const raycast = mp.raycasting.testPointToPoint(pos, farAway, ped, 4); //not ignored
/*----------------------Уточнение---------------------*/
 const raycast = mp.raycasting.testPointToPoint(pos, farAway, mp.players.local, 4); //ignored
 const raycast = mp.raycasting.testPointToPoint(pos, farAway, [mp.players.local], 4); //not ignored