• Из-за обновления 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
2,395
237
100
Добрый день! К сожалению, функция GET_VEHICLE_WHEEL_SURFACE_MATERIAL не является стандартной в RageMP. Возможно, вам придется создать собственную нативную функцию для выполнения требуемой задачи.
 

JJIGolem

Старожил
High developer
BackEnd developer
19 Окт 2020
239
289
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 developer
BackEnd developer
19 Окт 2020
239
289
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
 
Реакции: 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

Старожил
BackEnd developer
16 Сен 2020
771
284
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); попробуй так
 
Реакции: 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

Гуру
BackEnd developer
2 Ноя 2020
190
117
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

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

DDStudio

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