This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

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

vpn

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



Специально для вас накидал тестовый вариант на 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" флаг указывается одной цифрой, и судя по всему это правильно, потому-что когда я ставил 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
Не суть важно что он в таймауте, я написал этот код просто для теста.
Ты кажется не понял суть данного топика, тут вопрос не про чистоту кода(Я вообще пишу на 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