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

Вопрос Определяем материал поверхности под машиной

DDStudio

Участник портала
17 Авг 2024
20
5
15
! Решение проблемы находится в конце темы !

Всем привет, может кто знает подобную нативку, но для рейджа. В nbase не нашёл такую.

(GET_VEHICLE_WHEEL_SURFACE_MATERIAL)

Она должна возвращать материал под колёсами машины.
Screenshot_20240917_191743_com.huawei.browser_edit_108139788976726.jpg
 
Последнее редактирование:

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
1,763
1,305
5
Добрый день! К сожалению, функция GET_VEHICLE_WHEEL_SURFACE_MATERIAL не является стандартной в RageMP. Возможно, вам придется создать собственную нативную функцию для выполнения требуемой задачи.
 

JJIGolem

Гуру
high coder
19 Окт 2020
228
286
142
Всем привет, может кто знает подобную нативку, но для рейджа. В nbase не нашёл такую.

(GET_VEHICLE_WHEEL_SURFACE_MATERIAL)

Она должна возвращать материал под колёсами машины.
Посмотреть вложение 16227
Скорее всего это нативка от Cfx (движка fivem), надеюсь, правильно выразился. Вы можете создать свою собственную с использованием raycast от позиции колеса (которое можно получить с использованием натива или же rageAPI) до земли
 

DDStudio

Участник портала
17 Авг 2024
20
5
15
Скорее всего это нативка от Cfx (движка fivem), надеюсь, правильно выразился. Вы можете создать свою собственную с использованием raycast от позиции колеса (которое можно получить с использованием натива или же rageAPI) до земли
смотрел использование метода с raycast


JavaScript:
let pos = localPlayer.vehicle.position;
let isRoadLoad = mp.raycasting.testPointToPoint(pos, new mp.Vector3(pos.x, pos.y, pos.z - 5), true, [1]);

в isRoadLoad возращается объект
JSON:
{
    "position": {
        "x": 13.01,
        "y": 12.23,
        "z": 70.02
    },
    "surfaceNormal": {
        "x": 0.93,
        "y": -0.04,
        "z": -0.34
    },
    "entity": <entity object>
}

position и surfaceNormal возращают, как я понимаю, координаты того, с чем пересекается луч. а вот entity заинтересовало меня. если я его вывожу
JavaScript:
mp.console.logInfo(JSON.stringify(isRoadLoad['entity']));

то получается число ( которое изменяется на одной и той же дороге, грубо говоря. и не меняется если я заезжаю, например, на траву)
Снимок экрана (11).png


пока так и не нашел как можно получить материал под Т/С , тк raycast выдает видимо не то
 

DDStudio

Участник портала
17 Авг 2024
20
5
15
Нашел нативку этой функции ( тк в вики про последний параметр entityHit не описано толком,а в нативке его нет), но что-то делаю не так
JavaScript:
mp.game.invoke('0x3D87450E15D98694', isRoadLoad, true, JSON.stringify(isRoadLoad['position']), JSON.stringify(isRoadLoad['surfaceNormal']), isRoadLoad['entity'])

параметры для нативки ставил согласно описанию в nbase
Код:
Parameters:
rayHandle - Ray Handle from a casted ray, as returned by CAST_RAY_POINT_TO_POINT
hit - Where to store whether or not it hit anything. False is when the ray reached its destination.
endCoords - Where to store the world-coords of where the ray was stopped (by hitting its desired max range or by colliding with an entity/the map)
surfaceNormal - Where to store the surface-normal coords (NOT relative to the game world) of where the entity was hit by the ray
entityHit - Where to store the handle of the entity hit by the ray

Returns:
Result? Some type of enum.

но при вызове всегда возращает 0 независимо от поверхности
 

JJIGolem

Гуру
high coder
19 Окт 2020
228
286
142
смотрел использование метода с raycast


JavaScript:
let pos = localPlayer.vehicle.position;
let isRoadLoad = mp.raycasting.testPointToPoint(pos, new mp.Vector3(pos.x, pos.y, pos.z - 5), true, [1]);

в isRoadLoad возращается объект
JSON:
{
    "position": {
        "x": 13.01,
        "y": 12.23,
        "z": 70.02
    },
    "surfaceNormal": {
        "x": 0.93,
        "y": -0.04,
        "z": -0.34
    },
    "entity": <entity object>
}

position и surfaceNormal возращают, как я понимаю, координаты того, с чем пересекается луч. а вот entity заинтересовало меня. если я его вывожу
JavaScript:
mp.console.logInfo(JSON.stringify(isRoadLoad['entity']));

то получается число ( которое изменяется на одной и той же дороге, грубо говоря. и не меняется если я заезжаю, например, на траву)
Посмотреть вложение 16240

пока так и не нашел как можно получить материал под Т/С , тк raycast выдает видимо не то
mp.raycasting.testCapsule
 
  • Like
Реакции: DDStudio

DDStudio

Участник портала
17 Авг 2024
20
5
15
да, это то, что я искал, спасибо. последний вопрос только

JavaScript:
let pos = localPlayer.vehicle.position;
mp.console.logInfo(JSON.stringify(mp.raycasting.testCapsule(pos, new mp.Vector3(pos.x, pos.y, pos.z - 5), 0.5, localPlayer.vehicle, [1])));

оно возращает материал, но не игнорирует сущность localPlayer.vehicle и выводит его материл, позицию, объект и тп

может что-то не так в параметрах сделал, есть идеи? вроде все по вики

Код:
mp.raycasting.testCapsule(pos1, pos2, radius, [ignoredEntity], [flags]);

Required Arguments
    pos1: Vector3
    pos2: Vector3
    radius: Float
    ignoreEntity: Array of entities handle or object
    flags: Array of ints
 

DaVilka

Гуру
16 Сен 2020
709
259
128
Нашел нативку этой функции ( тк в вики про последний параметр entityHit не описано толком,а в нативке его нет), но что-то делаю не так
JavaScript:
mp.game.invoke('0x3D87450E15D98694', isRoadLoad, true, JSON.stringify(isRoadLoad['position']), JSON.stringify(isRoadLoad['surfaceNormal']), isRoadLoad['entity'])

параметры для нативки ставил согласно описанию в nbase
Код:
Parameters:
rayHandle - Ray Handle from a casted ray, as returned by CAST_RAY_POINT_TO_POINT
hit - Where to store whether or not it hit anything. False is when the ray reached its destination.
endCoords - Where to store the world-coords of where the ray was stopped (by hitting its desired max range or by colliding with an entity/the map)
surfaceNormal - Where to store the surface-normal coords (NOT relative to the game world) of where the entity was hit by the ray
entityHit - Where to store the handle of the entity hit by the ray

Returns:
Result? Some type of enum.

но при вызове всегда возращает 0 независимо от поверхности
я из c# делал через эту функцию, используется в связке из StartShapeTestRay

да, это то, что я искал, спасибо. последний вопрос только

JavaScript:
let pos = localPlayer.vehicle.position;
mp.console.logInfo(JSON.stringify(mp.raycasting.testCapsule(pos, new mp.Vector3(pos.x, pos.y, pos.z - 5), 0.5, localPlayer.vehicle, [1])));

оно возращает материал, но не игнорирует сущность localPlayer.vehicle и выводит его материл, позицию, объект и тп

может что-то не так в параметрах сделал, есть идеи? вроде все по вики

Код:
mp.raycasting.testCapsule(pos1, pos2, radius, [ignoredEntity], [flags]);

Required Arguments
    pos1: Vector3
    pos2: Vector3
    radius: Float
    ignoreEntity: Array of entities handle or object
    flags: Array of ints

mp.raycasting.testCapsule(pos, new mp.Vector3(pos.x, pos.y, pos.z - 5), 0.5, null, 1); попробуй так
 
  • Like
Реакции: DDStudio

DDStudio

Участник портала
17 Авг 2024
20
5
15
Оставлю всем на будущее ( мало ли кто будет искать поверхность под машиной, а подобного до этой темы не было)


JavaScript:
mp.keys.bind(0x45, true, function() { // На клавишу E (англ) выполняется код
    if(!localPlayer.vehicle || localPlayer.vehicle.getPedInSeat(-1) !== localPlayer.handle) return; // Проверяем сидит ли игрок в машине и на каком месте
    let pos = localPlayer.vehicle.position; // позиция ТС
    
    mp.console.logInfo(JSON.stringify(mp.raycasting.testCapsule(pos, new mp.Vector3(pos.x, pos.y, pos.z - 5), 0.5, null, 1))); // Нужный нам идс будет в возращаемом объекте и называется 'material'
});

Потом сравниваем полученный материал с материалами из списка и выполняем нужный код если все сошлось
 

kirillzver

Гуру
2 Ноя 2020
167
122
104
Оставлю всем на будущее ( мало ли кто будет искать поверхность под машиной, а подобного до этой темы не было)


JavaScript:
mp.keys.bind(0x45, true, function() { // На клавишу E (англ) выполняется код
    if(!localPlayer.vehicle || localPlayer.vehicle.getPedInSeat(-1) !== localPlayer.handle) return; // Проверяем сидит ли игрок в машине и на каком месте
    let pos = localPlayer.vehicle.position; // позиция ТС
   
    mp.console.logInfo(JSON.stringify(mp.raycasting.testCapsule(pos, new mp.Vector3(pos.x, pos.y, pos.z - 5), 0.5, null, 1))); // Нужный нам идс будет в возращаемом объекте и называется 'material'
});

Потом сравниваем полученный материал с материалами из списка и выполняем нужный код если все сошлось
Для чего планируешь использовать данные вычисления?
 

DDStudio

Участник портала
17 Авг 2024
20
5
15
Лето/зима/всесезонка - в таком плане?
± да, но так же думаю (ещё пока наброски только, буду додумывать) обычные дорожные, спортивные с лучшим сцеплением с поверхностью и тп.
например, спортивные какие-нибудь шины будут иметь хорошее сцепление с дорогой, но при выезде на бездорожье их эффективность снижается.
сейчас почти сверстал интерфейс 'шиномонтажки', если можно так сказать и параллельно искал метод как раз определения материала под тс.
 

DDStudio

Участник портала
17 Авг 2024
20
5
15
Неожиданно появился такой вопрос, относящийся, можно считать, к этой теме.

Есть объект
JavaScript:
let materials = {
    "5236042":"Blood",
    "13626292":"Temp30",
    "15972667":"MetalHollowSmall",
    "32752644":"Spine3",
    "47470226":"Temp11",
    "63305994":"Temp10"
    // и тд
}


Там основные материалы, но многих нет. Решил добавить ( в пример возьму дорожную решетку)
Дописал в объекте
Код:
"4044798976":"RoadGrid",

идс верный, возвращается при наезде на тот объект, но когда ищу его в объекте
Код:
if (entityMaterial) LastMaterialID = materials[`${entityMaterial}`];
выдает null

Решил 'продебажить:cool:', но все равно не могу догнать из-за чего такое

JavaScript:
mp.events.callRemote('console', entityMaterial);                 // return 4044798976
mp.events.callRemote('console', materials[`${entityMaterial}`]); // return null
mp.events.callRemote('console', materials[`4044798976`]);        // return 'RoadGrid'

те значения и ключи, которые шли в объекте изначально выводятся корректно, но не те, которые я добавил.
может имеются идеи какие?:unsure:
 

kirillzver

Гуру
2 Ноя 2020
167
122
104
Пиши просто:
JavaScript:
materials[entityMaterial]
Не нужно лишних превращений в строку.
 

DDStudio

Участник портала
17 Авг 2024
20
5
15
Пиши просто:
JavaScript:
materials[entityMaterial]
Не нужно лишних превращений в строку.
сейчас попробую, спасибо. просто интересно то, что этим способом ищется всё, кроме значений, которых не было в вики списке, но они отдают свой идс, который я и добавляю в объект