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

Вопрос Двигатель машины при выходе из тачки

Robert_Easter

Активный участник
17 Июл 2024
103
13
28
Здраствуйте,

Проблема с первого взгляда был простым но я что то не смог его решить. Есть скрипт серверской части которая на самем деле помогает оставить двигатель машины без изменений после выхода из тачки; но это происходит ТОЛЬКО у игрока который вышел тачки; для других игроков двигатель всегда отключается. Пример : Игрока А вышел из тачки оставивь его включённым; он сам если сядит будет сразу его водить без нужды включить мотор а чужой игрок когда сядит должен сначало включить мотор. Пробовал ставить разные timeout-ы не помогает; я вообще увидлён что не получается синхрить всё это у всех (. Пробовал с vehicle.setEngineOn(toggle, instantly, otherwise); тоже не работала
Server side :
Код:
mp.events.add('playerStartExitVehicle', (player) => {
    if (player.vehicle && player.vehicle.engine) {
        if (isExcludedVehicle(player.vehicle)) {
            return;
        }
        player.vehicle.engine = true;
        mp.players.forEach((_player) => {
            _player.call('syncVehicleEngineState', [player.vehicle.id, true]);
        });
    }
});
Client side :
Код:
mp.events.add('syncVehicleEngineState', (vehicleId, engineState) => {
    const vehicle = mp.vehicles.at(vehicleId);
    if (vehicle) {
        vehicle.engine = engineState;
    }
});
 

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
1,771
1,305
5
Привет! Похоже, что проблема заключается в том, что при выходе игрока из транспортного средства, двигатель остается включенным только для этого игрока, но не синхронизируется для других игроков. Для того чтобы исправить это, вам нужно сделать так, чтобы состояние двигателя синхронизировалось для всех игроков в игре. Попробуйте изменить ваш серверный скрипт следующим образом:
Код:
mp.events.add('playerStartExitVehicle', (player) => {
    if (player.vehicle && player.vehicle.engine) {
        if (isExcludedVehicle(player.vehicle)) {
            return;
        }
        player.vehicle.engine = true;
        const vehicleId = player.vehicle.id;
        mp.players.forEach((_player) => {
            if (_player.vehicle && _player.vehicle.id === vehicleId) {
                _player.vehicle.engine = true;
            }
            _player.call('syncVehicleEngineState', [vehicleId, true]);
        });
    }
});
Таким образом, состояние двигателя будет синхронизировано для всех игроков, когда кто-то выходит из транспортного средства. Надеюсь, это поможет решить проблему!
 

Robert_Easter

Активный участник
17 Июл 2024
103
13
28
Не помогло
 

youngBeaver

Мастер
high coder
24 Янв 2023
1,146
692
171
24
Никогда с этим не сталкивался, но если двигатель действительно автоматически не синхронизируется между игроками, то при выходе игрока можно просто вешать свойство с его состоянием двигателя и при входе нового игрока в авто дергать это свойство.
 

Robert_Easter

Активный участник
17 Июл 2024
103
13
28
Тоесть в чистом сервере Рейдж МП если выходишь с тачки то он его оставляет заведенным ? нет конечно отключает двигатель всегда при выходе и сразу включает двигаетель всегда когда садился в машину. Я сделал систему завидении автомобиля на кнопку 2 и что сразу не заведился; все отлично работает только вот этот косяк при выходе из автомобиля двигатель машины сохраняется только у игрока который был за рулём а для остальных он отключается. Спасибо за ответ но это тоже пробавал но не вышло.
 

Swayze

Начинающий специалист
6 Окт 2022
66
16
45
Условно если ты задашь машине на сервер сайде "vehicle.setVariable('engineStatus', false)" и при входе в машину достаешь эту переменную, ставишь от нее статус для vehicle.setEngineOn(toggle, false, false), это не работает
 

Swayze

Начинающий специалист
6 Окт 2022
66
16
45
Лично я делал всегда статус двигателя на сервере(vehicle.engine = true/false) и всегда работало без всяких проблем.
 

Robert_Easter

Активный участник
17 Июл 2024
103
13
28
Я уже все через vehicle.engine делаю ничё не менялась.Да не просто бери этот код и ставь в серверской части в чистой рейдж мп сервере увидешь что у тебя меняется статус а у других нет я не пойму все операции с двигателям в серверсой части происходят рейдж так любит мазолить простые вещи :
Код:
mp.events.add('playerStartExitVehicle', (player) => {
    if (player.vehicle && player.vehicle.engine) {
        if (isExcludedVehicle(player.vehicle)) {
            return;
        }


        player.vehicle.engine = true;
    }
});
 
Последнее редактирование:

Swayze

Начинающий специалист
6 Окт 2022
66
16
45
Используй playerExitVehicle с аргументамы player, vehicle. Проверяй значение у vehicle из аргументов, а не из машины человека, учитывай что он может выходить из пассажирского места.
 

Robert_Easter

Активный участник
17 Июл 2024
103
13
28
Сделал не сработала. Знаешь прикол ? если взять и с машины просто выкинуть другого игрока и не садится в машину(останавливать анимацию) то у них оба состояние матора сохраняется. Да просто все это происходит из за того что дурак берёт и отключает машину при выходе. Ответь немного я скину сюда код нормальный если рабочий будет просто не хочу г**но сюда закинуть всякое
 

Robert_Easter

Активный участник
17 Июл 2024
103
13
28
Вопрос уже будет вот такой. Как убрать автоматическое отключение двигателя при ВЫХОДЕ из тачки ?
 

Swayze

Начинающий специалист
6 Окт 2022
66
16
45
Код:
mp.players.local.setConfigFlag(241, true); //Disable Stopping Engine When Leave Vehicle
mp.players.local.setConfigFlag(429, true); //Disable Starting Engine When Enter Vehicle

 

Robert_Easter

Активный участник
17 Июл 2024
103
13
28
Код:
mp.players.local.setConfigFlag(241, true); //Disable Stopping Engine When Leave Vehicle
mp.players.local.setConfigFlag(429, true); //Disable Starting Engine When Enter Vehicle
Спасибо тебе огромное дружище ты красавчик вообще; теперь вся моя система нормально будет работать. На самом деле можете оставить серверский код он вообще не помешает а иногда даже помогает(если только клиент оставить то всегда первый подход работать не будет). Спасибо тебе я для входа тачки нашёл способ устранить а для выхода не нашёл раньше.
Server side:
Код:
mp.events.add('playerStartExitVehicle', (player) => {
    if (player.vehicle && player.vehicle.engine) {
        player.vehicle.engine = true;
    }
});
Client side :
Код:
mp.events.add('playerLeaveVehicle', (vehicle, seat) => {
    if (seat === -1) {
        mp.players.local.setConfigFlag(241, true);
    }
});
 

Robert_Easter

Активный участник
17 Июл 2024
103
13
28
Короче код сервер сайда убираем он мещает. Вот код клиент сайд :
Код:
mp.events.add('playerLeaveVehicle', (vehicle, seat) => {
    if (seat === -1) {
        mp.players.local.setConfigFlag(241, true);
    }
});

А почему он всегда работает со второго подхода ?(timeout ставил всякое пробывал; все сихронизирован у меня теперь но с 2-ого подхода; с первого опять дуралей берет и отключает)
 

Swayze

Начинающий специалист
6 Окт 2022
66
16
45
Вынеси его отдельно, не нужно использовать в ивенте
 

Robert_Easter

Активный участник
17 Июл 2024
103
13
28
Всё я решил наконец то проблему; просто брал регал на сервере статус каждой машины по vehicle.engine и при входе выходе их обновлял и всё ! все работает как в сампике. Спасибо за ответы Swayze
 

Robert_Easter

Активный участник
17 Июл 2024
103
13
28
Финальное решение проблемы самый оптимизированный :
CLIENT SIDE :
Код:
mp.events.add('playerEnterVehicle', (vehicle, seat) => {
    if (seat === -1) {
        mp.players.local.setConfigFlag(241, true);
        mp.players.local.setConfigFlag(429, true);
    }
});

SERVER SIDE :
По желанию.