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

Проблема Решение проблемы клиентской части

XFlawless

Новый участник
31 Мар 2022
28
2
38
Ребят, всем привет, вопрос тут назрел, перерыл всю клиентскую часть сервера, скажите пожалуйста, может у кого-то была такая проблема.

JavaScript:
let unloadPoints;
let currentUnloadPoint;
let objToTrack;
let objToTrackStartZPosition;
let timer;
let arrowMarker;
let vehMarker;
let unloadMarker;
let workBlip = null;

function calculateDistance(v1, v2) {
    let dx = v1.x - v2.x;
    let dy = v1.y - v2.y;
    let dz = v1.z - v2.z;

    return Math.sqrt(dx * dx + dy * dy + dz * dz);
}

function randomIntFromInterval(min, max) { // min and max included
    return Math.floor(Math.random() * (max - min + 1) + min);
}

function placeOnGround(obj){
    obj.setActivatePhysicsAsSoonAsItIsUnfrozen(true);
    obj.placeOnGroundProperly();
    obj.setDynamic(true);
    obj.freezePosition(false);
}

mp.events.add('dockLoader:init', (cratesRemoteIds, points) => {
    cratesRemoteIds = JSON.parse(cratesRemoteIds);
    unloadPoints = JSON.parse(points);
    cratesRemoteIds.forEach(e => {
        let obj = mp.objects.atRemoteId(e);
        if(!obj || obj.handle === 0) return;
        
        for (let index = 0; !obj.doesExist() && index < 250; index++) {
            mp.game.wait(0);
        }
        placeOnGround(obj);
    });
});


mp.events.add('dockLoader:playerUnloaded', () => {
    if (objToTrack == undefined || objToTrack == null || currentUnloadPoint == null) return;
    if (calculateDistance(objToTrack.getCoords(false), currentUnloadPoint) > 5) return;
    objToTrack = null;
    if (unloadMarker != null){
        unloadMarker.destroy();
        unloadMarker = null;
    }
    currentUnloadPoint = null;
    if (timer != null) clearInterval(timer);
    mp.events.callRemote("playerUnloadedDockCrate")
});

mp.events.add("dockLoader:destroyMarker", () => {
    global.sendTip('tip_docker_up');
    if (vehMarker != null){
        vehMarker.destroy();
        vehMarker = null;
    }
});

mp.events.add('dockLoader:vehicleLoaded', (position) => {
    position = JSON.parse(position);
    if (vehMarker != null){
        vehMarker.destroy();
        vehMarker = null;
    }
    vehMarker = mp.markers.new(20, new mp.Vector3(position.x, position.y, position.z + 4), 2, {
        rotation: new mp.Vector3(0, 180, 0),
        color: [182, 211, 0, 200]
    });
});

mp.events.add('dockLoader:CrateObjectsRequested', (id) => {
    let obj = mp.objects.atRemoteId(id);
    
    objToTrack = obj;
    objToTrackStartZPosition = obj.position.z;

    obj.notifyStreaming = true;
    obj.setDynamic(true);
    obj.freezePosition(false);
    if (unloadMarker != null && unloadMarker != undefined) {
        unloadMarker.destroy();
        unloadMarker = null;
    }
    arrowMarker = mp.markers.new(20, new mp.Vector3(obj.position.x, obj.position.y, obj.position.z + 2.5), 2, {
        bobUpAndDown: true,
        rotation: new mp.Vector3(0, 180, 0),
        color: [182, 211, 0, 200]
    });
    if (timer != null) clearInterval(timer);
    timer = setInterval(checkIfCrateLifted, 500);
    createWorkBlip(obj.position);
});

mp.events.add('dockLoader:stopedWorking', () => {
    if (timer !== null) clearInterval(timer);
    currentUnloadPoint = null;
    objToTrack = null;
    if (unloadMarker !== null && unloadMarker != undefined) {
        unloadMarker.destroy();
        unloadMarker = null;
    }
    if (arrowMarker !== null && arrowMarker != undefined) {
        arrowMarker.destroy();
        arrowMarker = null;
    }
    if (vehMarker != null){   
        vehMarker.destroy();
        vehMarker = null;
    }
    if (workBlip != null && mp.blips.exists(workBlip)){
        workBlip.destroy();
    }
});

function checkIfCrateLifted(){
    if (!objToTrack || objToTrack.handle == 0) return;
    objToTrack.freezePosition(false);
    if (Math.abs(objToTrack.getCoords(false).z - objToTrackStartZPosition) > 0.2){
        var randomIndex = randomIntFromInterval(0, unloadPoints.length - 1);
        currentUnloadPoint = unloadPoints[randomIndex];
        if (timer != null) clearInterval(timer);
        createWorkBlip(currentUnloadPoint);
        mp.events.call('notify', 2, 9, "DockLoader_6", 3000);

        if (arrowMarker != null) {
            arrowMarker.destroy();
            arrowMarker = null;
        }

        unloadMarker = mp.markers.new(0, currentUnloadPoint, 1, {
            rotation: new mp.Vector3(0, 0, 0),
            color: [182, 211, 0, 200],
        });
    }
}

function createWorkBlip(position){
    if (workBlip != null && mp.blips.exists(workBlip)){
        workBlip.destroy();
    }
    workBlip = mp.blips.new(478, position,
        {
            name: "Dock Unload Point",
            scale: 1.3,
            color: 3,
            alpha: 255,
            shortRange: false,
            rotation: 0,
            dimension: 0,
        });
    mp.game.invoke('0x4F7D8A9BFB0B43E9', workBlip.handle, true);
}
1707488815706.png
 

lmklde

Активный участник
BackEnd developer
1 Мар 2021
75
44
80
После clearInterval(timer) обнуляй timer
timer = null;
 
Реакции: XFlawless