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

Вопрос Пару вопросов по рейджу

Wa3Rix

Активный участник
high coder
19 Ноя 2020
32
4
30
Заинтересовался идеей сделать сервер, но листая википедию меня с ходу поставил в тупик факт создания машины на стороне клиента и сервера одновременно.
Ссылка: https://wiki.rage.mp/index.php?title=Vehicle::Vehicle

Что будет если создать на сервере или клиенте и возможно ли что зайдя с софтом игрок сможет спавнить машины видимые для других?
И еще момент: Я искал функцию money в "server side functions" и не нашел, а при разборе РП мода нашел функционал АЗС на стороне клиента, вроде бы как деньги списывались и потом "машине добавлялся бензин". Это безопасно?

Если я что-то путаю - поправьте, идея мне пришла только вчера и с функционалом МП я еще лишь формально знаком.

P.S. Fake-Wa3Rix
 

JJIGolem

Гуру
high coder
19 Окт 2020
225
283
142
Все, что делается на стороне клиенте, остается на клиенте, пока вы не синхронизируете это с другими игроками. Тот же спавн транспорта на клиенте, транспорт будет виден лишь вам.
Деньги и прочее лучше всего держать на стороне сервера, и при их изменении просто сообщать клиенту. Держу к сведении, что тот же cheat engine спокойно может работать и менять игровые данные из памяти. Будь-то жизнь, телепорт, всё, что на клиенте. Поэтому лучше себя обезопасить и установить хорошую связь между клиентом и сервером
 

Wa3Rix

Активный участник
high coder
19 Ноя 2020
32
4
30
У меня возникли траблы с автомобилем) Можно пример создания и синхронизации? (Что бы его видели все игроки)
 

X-Clusiv

Модератор
Команда форума
high coder
4 Окт 2020
681
338
161
29
чтобы его видели все, создайте авто на стороне сервера.
 

X-Clusiv

Модератор
Команда форума
high coder
4 Окт 2020
681
338
161
29
Как по мне, клиент это здравая мысль, можно реализовывать к примеру автосалоны, с просмотром авто в нем, не нагружая сервер спавном этих авто.(Как пример) Как говорится, что было создано на клиенте, остается на клиенте.
 
Реакции: Wa3Rix

Mikhayloff

Модератор
Команда форума
high designer
9 Окт 2020
1,436
976
211
Владян, ты лучший, у тебя всё получится юхуу! <3
 
Реакции: saveitll

Wa3Rix

Активный участник
high coder
19 Ноя 2020
32
4
30
Не могу вызвать ивент для посадки в машину с сервера. Пробовал передать число, потом нагуглил тему в которой писали что передавать можно только строки.
Но всё равно передается "undefined", где тут ошибка?

Сервер
Код:
if(nearVehicle)
    {
        player.stored.hCarHack = nearVehicle;
        player.call("RPC_TryVehicleHack", JSON.stringify(nearVehicle));
        player.outputChatBox("...");
        
    }
    else
        player.outputChatBox("Рядом с Вами нет подходящей машины");


Клиент
Код:
mp.events.add("RPC_TryVehicleHack", function (vehicleid)
{
    if (carhacker_ui)
    {
        carhacker_ui.reload(false);
        carhacker_ui.active = true;
    }

    vehicle_to_hack = vehicleid;//mp.vehicles.atRemoteId(vehicleid);
    mp.gui.cursor.show(true, true);
    mp.gui.chat.push(`Начинаем взлом ${vehicleid}...`);
});
 

Harland David Sanders

Куратор портала
Команда форума
Куратор портала
VIP
high coder
media
10 Сен 2020
3,404
2,776
219

Покажи больше кода..что такое nearVehicle?
 

Wa3Rix

Активный участник
high coder
19 Ноя 2020
32
4
30
Весь код покажи.
Код:
mp.events.addCommand("test", (player, _) =>
{
    player.stored.race_step = 0;
    player.stored.is_in_race = true;
    race_winer = null;

    race_vehicles.forEach((vehicle) =>
    {
        vehicle.destroy();
    });
    race_vehicles = [];

    cp_list.forEach((cp, id) =>
    {
        let next_pos = new mp.Vector3(cp.x, cp.y, cp.z);
        if(cp_list.length > id + 1)
            next_pos = new mp.Vector3(cp_list[id + 1].x, cp_list[id + 1].y, cp_list[id + 1].z);

        cp_list[id].handle = mp.checkpoints.new(1, new mp.Vector3(cp.x, cp.y, cp.z), 5,
        {
            direction: next_pos,
            color: [ 100, 255, 0, 255 ],
            visible: false,
            dimension: 0
        });
    });

    race_vehicles.push(player.stored.vehicle = mp.vehicles.new(mp.joaat("turismor"), new mp.Vector3(-394.9336, 1215.1986, 324.8054),
    {
        locked: true,
        numberPlate: "z1",
        color: [[255, 255, 255],[0, 0, 0]]
    }));

    race_vehicles.push(player.stored.vehicle = mp.vehicles.new(mp.joaat("turismor"), new mp.Vector3(-404.4807, 1217.6987, 324.8057),
    {
        locked: true,
        numberPlate: "z1",
        color: [[0, 0, 0],[255, 255, 255]]
    }));

    cp_list[0].handle.showFor(player);
    player.position = new mp.Vector3(-418.3911, 1228.9887, 325.7583);
    player.outputChatBox("Вы приняли участие в гонке.");   
});

/*mp.events.addCommand("add_cp", (player, _, comment) =>
{
    let pos = player.position;
    if(!comment || comment.trim().length == 0)
        return player.outputChatBox(JSON.stringify(pos));

    pos.comment = comment;
    cp_list.push(pos);
    
    let fs = require("fs");
    fs.writeFileSync("checkpoints.json", JSON.stringify({"CheckPoints": cp_list}));
    player.outputChatBox(JSON.stringify(pos));
})*/

mp.events.addCommand("ch", (player, _) =>
{
    let nearDist = 10, nearVehicle = null;
    mp.vehicles.forEach((vehicle) =>
    {
        let dist = vehicle.dist(player.position);
        if(nearDist > dist)
        {
            nearDist = dist;
            nearVehicle = vehicle;
        }
    });

    if(nearVehicle)
    {
        player.stored.hCarHack = nearVehicle;
        player.call("RPC_TryVehicleHack", [nearVehicle.id]);
        player.outputChatBox("...");
        
    }
    else
        player.outputChatBox("Рядом с Вами нет подходящей машины");
});

mp.events.add("RPC_VehicleHack", (player, is_success, chanse) =>
{
    if(!is_success)
        return;

    let vehicle = player.stored.hCarHack;
    vehicle.locked = false;
    player.outputChatBox(`Mission complite (${is_success}, ${chanse})`);
});

mp.events.add("playerStartEnterVehicle", (player, vehicle) =>
{
    if(vehicle.locked)
    {
        player.outputChatBox("hey man!");
        return false;
    }
});

Код:
let carhacker_ui;
let vehicle_to_hack;

mp.events.add('guiReady', () =>
{
    if (!carhacker_ui)
    {
        carhacker_ui = mp.browsers.new('package://carhacker/carhack.html');
        carhacker_ui.active = false;
    }
});

mp.events.add("LPC_VehicleHackResult", function (is_success, chanse)
{
    if (carhacker_ui)
        carhacker_ui.active = false;

    mp.gui.cursor.show(false, false);
    mp.events.callRemote("RPC_VehicleHack", is_success, chanse);
    if(is_success)
    {
        vehicle_to_hack.setSirenSound(false); // Не работает
        //vehicle_to_hack.SetDoorsLocked(1); // Крашит
        mp.players.local.taskEnterVehicle(vehicle_to_hack.handle, 10000, -1, 2.0, 1, 0);
    }
    else vehicle_to_hack.setSirenSound(true); // не работает
});

mp.events.add("RPC_TryVehicleHack", function (vehicleid)
{
    if (carhacker_ui)
    {
        carhacker_ui.reload(false);
        carhacker_ui.active = true;
    }

    vehicleid = parseInt(vehicleid.toString(), 10);
    vehicle_to_hack = mp.vehicles.atRemoteId(vehicleid);
    mp.gui.cursor.show(true, true);
    mp.gui.chat.push("Начинаем взлом...");
});

На клиенте добавил строку на "vehicleid = parseInt(vehicleid.toString(), 10);" перед "vehicle_to_hack = mp.vehicles.atRemoteId(vehicleid);", вроде работает, хотя наверняка это не правильное использование. Но "vehicle_to_hack.SetDoorsLocked(1); // Крашит" и сирену не включает.

Задумка была такая что бы при взломе машины открывалась браузерная мини игра, при прохождении её машину открывало, а при провале включало сигнализацию.
Но что-то пошло не так
 

Wa3Rix

Активный участник
high coder
19 Ноя 2020
32
4
30
Почему код не работает с дверями?
let vehicle = mp.vehicles.atRemoteId(vehicleid);
vehicle_to_hack.SetDoorsLocked(1);
я функции с вики взял, есть нюансы какие-то? vehicleid соответствует ID машины на сервере, я проверял
 

X-Clusiv

Модератор
Команда форума
high coder
4 Окт 2020
681
338
161
29
Отлови ошибку через try{}catch(e){}
 

X-Clusiv

Модератор
Команда форума
high coder
4 Окт 2020
681
338
161
29

X-Clusiv

Модератор
Команда форума
high coder
4 Окт 2020
681
338
161
29
JavaScript:
let vehicle = mp.vehicles.atRemoteId(vehicleid);
vehicle_to_hack.SetDoorsLocked(1);
И здесь вы указали что создаете переменную vehicle а не vehicle_to_hack
 

X-Clusiv

Модератор
Команда форума
high coder
4 Окт 2020
681
338
161
29
На сервере, когда вызываете событие на клиенте нужно передавать параметры массивом.
JavaScript:
player.call("RPC_TryVehicleHack", JSON.stringify(nearVehicle)); // не верно
player.call("RPC_TryVehicleHack", [JSON.stringify(nearVehicle)]); // верно
 

Евгений Бусько

Начинающий специалист
16 Янв 2021
35
9
48
чтобы его видели все, создайте авто на стороне сервера.
Как синхронизировать машины между клиентов и сервером? Пример: чел на клиенте создал машину и поехал куда ему надо, да, ее не видно никому, но он выполнил свою задачу - доехал до места назначения. Как это будет выглядеть у других игроков, машины не видно(ведь она создана читом на клиенте), но игрок двигается быстро.
 

X-Clusiv

Модератор
Команда форума
high coder
4 Окт 2020
681
338
161
29
писать античит. Проверять к примеру, евентом, если игрок сел в машину а vehicle.remoteID нет. то отправляем на сервер эвент о том что игрок подозревается в читерстве и кикаем его.
 

Wa3Rix

Активный участник
high coder
19 Ноя 2020
32
4
30
Да эту опечатку я заметил, скидывал закоментирвоаную строку, но причина не в ней. Только за ПК сел, сейчас проверю её тип и отпишу.

Благодарю за разъяснение, а массив может состоять из чисел?

Вообще лучше не доверять клиенту, т.к. он может поставить нопы на ивенты и кататься на созданных софтом машинах. Но вообще интересно, как выглядит это со стороны?
К примеру в SAMP'e если создать машину софтом, то игрок отправляет синхру с ног каждый тик обусловленный стоянием (в 10 раз реже чем при движении вроде бы), хоть и движется. События входа/выхода в машину, анимации, клавиши и аналогичные данные существующие в синхронизации машин не передаются.

А что в рейдже, будет ли это как простой телепорт с ног, отправка какой-то инфы или клиент просто будет стоять на месте пока не выйдет из фейк такси?