Скорее всего это нативка от Cfx (движка fivem), надеюсь, правильно выразился. Вы можете создать свою собственную с использованием raycast от позиции колеса (которое можно получить с использованием натива или же rageAPI) до землиВсем привет, может кто знает подобную нативку, но для рейджа. В nbase не нашёл такую.
(GET_VEHICLE_WHEEL_SURFACE_MATERIAL)
Она должна возвращать материал под колёсами машины.
Посмотреть вложение 16227
смотрел использование метода с raycastСкорее всего это нативка от Cfx (движка fivem), надеюсь, правильно выразился. Вы можете создать свою собственную с использованием raycast от позиции колеса (которое можно получить с использованием натива или же rageAPI) до земли
let pos = localPlayer.vehicle.position;
let isRoadLoad = mp.raycasting.testPointToPoint(pos, new mp.Vector3(pos.x, pos.y, pos.z - 5), true, [1]);
{
"position": {
"x": 13.01,
"y": 12.23,
"z": 70.02
},
"surfaceNormal": {
"x": 0.93,
"y": -0.04,
"z": -0.34
},
"entity": <entity object>
}
mp.console.logInfo(JSON.stringify(isRoadLoad['entity']));
Нашел нативку этой функции ( тк в вики про последний параметр entityHit не описано толком,а в нативке его нет), но что-то делаю не так
mp.game.invoke('0x3D87450E15D98694', isRoadLoad, true, JSON.stringify(isRoadLoad['position']), JSON.stringify(isRoadLoad['surfaceNormal']), isRoadLoad['entity'])
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.
mp.raycasting.testCapsuleсмотрел использование метода с 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
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])));
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
я из c# делал через эту функцию, используется в связке из StartShapeTestRayНашел нативку этой функции ( тк в вики про последний параметр 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 независимо от поверхности
да, это то, что я искал, спасибо. последний вопрос только
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.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'
});
Для чего планируешь использовать данные вычисления?Оставлю всем на будущее ( мало ли кто будет искать поверхность под машиной, а подобного до этой темы не было)
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' });
Потом сравниваем полученный материал с материалами из списка и выполняем нужный код если все сошлось
система шин, в зависимости от поверхности меняется сцепление с нейДля чего планируешь использовать данные вычисления?
Лето/зима/всесезонка - в таком плане?система шин, в зависимости от поверхности меняется сцепление с ней
± да, но так же думаю (ещё пока наброски только, буду додумывать) обычные дорожные, спортивные с лучшим сцеплением с поверхностью и тп.Лето/зима/всесезонка - в таком плане?
let materials = {
"5236042":"Blood",
"13626292":"Temp30",
"15972667":"MetalHollowSmall",
"32752644":"Spine3",
"47470226":"Temp11",
"63305994":"Temp10"
// и тд
}
"4044798976":"RoadGrid",
if (entityMaterial) LastMaterialID = materials[`${entityMaterial}`];
mp.events.callRemote('console', entityMaterial); // return 4044798976
mp.events.callRemote('console', materials[`${entityMaterial}`]); // return null
mp.events.callRemote('console', materials[`4044798976`]); // return 'RoadGrid'
сейчас попробую, спасибо. просто интересно то, что этим способом ищется всё, кроме значений, которых не было в вики списке, но они отдают свой идс, который я и добавляю в объектПиши просто:
Не нужно лишних превращений в строку.JavaScript:materials[entityMaterial]