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

Проблема Дублирование строк после каждого выполнения

dereksjq

Участник портала
17 Июн 2023
64
10
20
Написал команду создания авто со взятием названия из базы данных, все вроде-бы хорошо, но после каждого спавна дублируются строки с названием авто.

Код:
mp.events.addCommand("veh", (player, args) => {
    if (args == null) {
        player.outputChatBox("/veh [Название Авто]");
    }
    var pos = player.position;
    pos.x += 5.0
    player.veh = mp.vehicles.new(args, pos);
    player.veh.dimension = player.dimension;
    player.putIntoVehicle(player.veh, 0);
    mp.events.call("getCarNameFromSQL", args);

    mp.events.add("getCarName", (carFullName) => {
        return player.outputChatBox("Вы заспавнили автомобиль: " + carFullName); });

});
Код:
mp.events.add("getCarNameFromSQL", (carName) => {
    connection.query(`SELECT * FROM cars WHERE carName = '${carName}' LIMIT 1`, function (error, results) {
        if (error) {
            return console.log("Error: " + error);
        } else {
            console.log(results);
            return mp.events.call("getCarName", results[0].fullName);
        }
    });
});

 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
3,121
1,836
211
28
Всё дело в том, что ты создаёшь новый event каждый раз при использовании команды.
Соответственно, при первом вводе команды - у тебя будет 1 такой ивент, при втором вводе - уже два, и так далее.
Тебе нужно создать всего лишь 1 такой ивент, в дальнейшем ты можешь использовать его сколько угодно раз.

Нужно сделать вот так:

JavaScript:
mp.events.add("getCarName", (player, carFullName) =>
{
    if (!player) return;
   
    player.outputChatBox("Вы заспавнили автомобиль: " + carFullName);
});

mp.events.addCommand("veh", (player, args) =>
{
    if (args == null)
    {
        player.outputChatBox("/veh [Название Авто]");
        return;
    }
    var pos = player.position;
    pos.x += 5.0
    player.veh = mp.vehicles.new(args, pos);
    player.veh.dimension = player.dimension;
    player.putIntoVehicle(player.veh, 0);
    mp.events.call("getCarNameFromSQL", player, args);
});

Я не вижу смысла в данном варианте просто потому, что event не делает ничего полезного, он получает переменную и её же выводит. Если ты собираешься в будущем доделать это - ОК, но если нет - смысла с такого event'а никакого, просто впиши метод отправки сообщения (player.outputChatBox) в тот же метод команды "veh".
 
Реакции: dereksjq и kirillzver

dereksjq

Участник портала
17 Июн 2023
64
10
20
Да, спасибо вам двоим - я изначально думал, что отдельно ивент без аргумента player не сможет вывести сообщение в чат. Спасибо за помощь.
 
Реакции: kirillzver и XDeveluxe

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
3,121
1,836
211
28
А ты всё верно думал.
Я недоглядел.
Конечно же нужно передать player ещё раз аргументом.
Вот так:
JavaScript:
mp.events.add("getCarName", (player, carFullName) =>
{
    if (!player) return;
   
    player.outputChatBox("Вы заспавнили автомобиль: " + carFullName);
});
Ну и соответственно использовать вот так:
JavaScript:
mp.events.call("getCarNameFromSQL", player, args);
 
Реакции: dereksjq

Similar threads