Вопросы

Tookie Johnson
Активный

Здравствуйте. Делаю фулл рп мод с нуля. Не подскажете как сделать автоматическое удаление незанятого транспорта с сервера с сообщением «Весь незанятый транспорт был автоматически удалён с сервера»?

Поделиться сообщением


Ссылка на сообщение

10 ответов на этот вопрос

  • 1
Cawfee
Великий Гуру

@Tookie Johnson,

 

  открыть спойлер

 

Поделиться сообщением


Ссылка на сообщение
  • 0
𝙡𝙖𝙨𝙩 𝙚𝙢𝙥𝙚𝙧𝙤𝙧.
Создатель WayDev

@Cawfee, не вижу смысла расписывать каждое условие, если его можно совместить в одно. Так же, не вижу смысла приравнивать новую переменную к нулю, когда она и так равна нулю. В целом, оба варианта рабочие.

stock DestroyUnoccupiedVehicles() {
    for (new vehicleID = 1; vehicleID <= GetVehiclePoolSize(); vehicleID++) {
        if(IsValidVehicle(vehicleID) && !IsVehicleOccupied(vehicleID)) // если транспортное средство не существует и не занято
            DestroyVehicle(vehicleID); // уничтожаем незанятое транспортное средство
        else
            continue;
    }
}

Да и в цикле вместо MAX_PLAYERS будет разумнее использовать функцию GetPlayerPoolSize:

stock bool:IsVehicleOccupied(vehicleid) {
    for (new i; i <= GetPlayerPoolSize(); i++) {
        if(!IsPlayerConnected(i))
            continue;

        new const vehicleID = GetPlayerVehicleID(playerid);
        if(vehicleID == INVALID_VEHICLE_ID)
            continue;

        return true;
    }
    return false;
}

 

P.S: обновил код функции DestroyUnoccupiedVehicles.

Отредактировано пользователем 𝙡𝙖𝙨𝙩 𝙚𝙢𝙥𝙚𝙧𝙤𝙧.

Поделиться сообщением


Ссылка на сообщение
  • 0

Кажется, что IsVehicleOccupied не совсем правильно написана, она не использует переданный ей аргумент vehicleid

Вроде так правильно будет 

stock bool:IsVehicleOccupied(vehicleId) {
    for (new i; i <= GetPlayerPoolSize(); i++) {
        if(!IsPlayerConnected(i))
            continue;

        new const playerVehicleId = GetPlayerVehicleID(playerid);
        if(playerVehicleId == INVALID_VEHICLE_ID || playerVehicleId != vehicleId)
            continue;

        return true;
    }
    return false;
}

 

Поделиться сообщением


Ссылка на сообщение
  • 0
𝙡𝙖𝙨𝙩 𝙚𝙢𝙥𝙚𝙧𝙤𝙧.
Создатель WayDev

@DEST, двоякая ситуация. Тут либо делать проверку на одно авто с передаваемым параметром, либо делать на все сразу. Если учитывать задачу, для которой она требуется, тогда лучше сделать функцию с передаваемым параметром. К тому же, функция неверна.

Более оптимизированный вариант. В данном варианте избегаем двух проверок: 1. IsPlayerInAnyVehicle; 2. GetPlayerVehicleID;

stock bool:IsVehicleOccupied(vehicleid) {
    for(new i; i <= GetPlayerPoolSize(); i++) {
        if(!IsPlayerConnected(i))
            continue;

        if(vehicleid == INVALID_VEHICLE_ID)
            continue;

        if(IsPlayerInVehicle(i, vehicleid))
            continue;
        
        return true;
    }
    return false;
}

 

Отредактировано пользователем 𝙡𝙖𝙨𝙩 𝙚𝙢𝙥𝙚𝙧𝙤𝙧.

Поделиться сообщением


Ссылка на сообщение
  • 0
𝙡𝙖𝙨𝙩 𝙚𝙢𝙥𝙚𝙧𝙤𝙧.
Создатель WayDev
  В 2/15/2024 в 15:19, Cawfee сказал:

Вот только к стилю не хватало придираться.

Читать далее...  

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

Поделиться сообщением


Ссылка на сообщение
  • 0
  В 2/15/2024 в 15:16, 𝙡𝙖𝙨𝙩 𝙚𝙢𝙥𝙚𝙧𝙤𝙧. сказал:

Если учитывать задачу, для которой она требуется, тогда лучше сделать функцию с передаваемым параметром

Читать далее...  

Тут не соглашусь, все же функция не должна зависеть от места вызова. Т.е. я должен иметь возможность воспользоваться этой функцией из любого места в проекте, и не должно быть разницы в ее работе. Не всегда, конечно, так получается, но к этому определенно нужно стремиться. 

 

По названию этой функции можно сказать, что она возвращает true, если авто занято кем-либо, и false, если нет. Не понял что ты поменял, функция IsPlayerInVehicle и GetPlayerVehicleID имеют скорее всего одинаковую скорость работы, т.к. обращаются к одним и тем же данным. Просто одна возвращает bool, а другая - ID машины. 

 

  В 2/15/2024 в 15:22, 𝙡𝙖𝙨𝙩 𝙚𝙢𝙥𝙚𝙧𝙤𝙧. сказал:

Не знаю, почему ты принимаешь мои слова на свой счёт

Читать далее...  

Так ты в начале сообщения его тегнул, на чей счет это можно еще принять? :bk:

Поделиться сообщением


Ссылка на сообщение
  • 0
Tookie Johnson
Активный

Ребят, спасибо вам за помощь. Сейчас буду пробовать ваши коды. Как остановлюсь на рабочем - напишу и закроете тему.

Поделиться сообщением


Ссылка на сообщение
  • -1
Cawfee
Великий Гуру

@𝙡𝙖𝙨𝙩 𝙚𝙢𝙥𝙚𝙧𝙤𝙧.,

 

  В 2/15/2024 в 10:19, 𝙡𝙖𝙨𝙩 𝙚𝙢𝙥𝙚𝙧𝙤𝙧. сказал:

не вижу смысла расписывать каждое условие, если его можно совместить в одно

Читать далее...  

Вот только к стилю не хватало придираться. Всегда пишу в таком стиле. Далее фрагмент из рабочего проекта, чтоб уж совсем добить твои глаза.

 

  открыть спойлер

 

  В 2/15/2024 в 10:19, 𝙡𝙖𝙨𝙩 𝙚𝙢𝙥𝙚𝙧𝙤𝙧. сказал:

Так же, не вижу смысла приравнивать новую переменную к нулю, когда она и так равна нулю

Читать далее...  

Жертва языков с автоматическим управлением памятью... С меня не будет от того, что лишний раз явно инициализирую переменную.

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • watson
      От watson
      Продаётся проект Criminal RolePlay с 8-летней историей.

      Проект заморожен и не используется длительное время.
      Потратил на него около 250.000 рублей, продаю за приемлимую цену.

      В комплекте:
      Полноценный игровой мод Мобильный лаунчер с Figma-дизайном Кэш клиентской части Все версии оформления проекта Все группы проекта Criminal RolePlay Шаблоны всех версий сайта, включая ранее не выпущенный шаблон Модуль автодоната YooMoney Помощь с установкой игрового мода на хостинг Цена:
      49 900₽ — за весь комплект.
      Возможен торг при адекватных предложениях.

      Важное:
      Проект продаётся в одни руки. Если в течение месяца не найдётся покупатель, будет рассмотрена продажа по частям.
      Связаться: https://vk.com/rosetta
    • watson
      От watson
      Продаётся проект Criminal RolePlay с 8-летней историей.

      Проект заморожен и не используется длительное время.
      Потратил на него около 250.000 рублей, продаю за приемлимую цену.

      В комплекте:
      Полноценный игровой мод Мобильный лаунчер с Figma-дизайном Кэш клиентской части Все версии оформления проекта Все группы проекта Criminal RolePlay Шаблоны всех версий сайта, включая ранее не выпущенный шаблон Модуль автодоната YooMoney Помощь с установкой игрового мода на хостинг Цена:
      49 900₽ — за весь комплект.
      Возможен торг при адекватных предложениях.

      Важное:
      Проект продаётся в одни руки. Если в течение месяца не найдётся покупатель, будет рассмотрена продажа по частям.
      Связаться: https://vk.com/rosetta
    • vexlinee
      От vexlinee
      Всем здравствуйте, сидел я на майнкрафт читиках и поднадоело, теперь хочу сделать студию либо свой крмп проектик
      Так вот вопросы:
      1. Какие программы лучше всего использовать для лаунчеров? В большенстве видел Android studio
      2. Как запустить сам мод, можно ли это сделать локально и быстро, или стоит переносить на хост 
      3. Про какой кеш говорят типы под лаунчерами 
      4. Как сделать установку сборки через лаунчер по кнопке играть