Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 13
  1. #1
    Аватар для Pro_Coder
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.10.2020
    Сообщений
    59
    Репутация:
    2 ±

    Как определить свободный слот транспорта?

    Доброго времени суток, у меня назрел такой вопрос, что будет лучше использовать в плане оптимизации из этих двух функциях?
    На мой взгляд, 1 будет более лучше, нежели 2 так как 2, ему еще понадобится синхронизировать с сервером.

    И еще, функция IsValidVehicle только на стороне сервера или клиента тоже?

    1. вариант
    PHP код:
    stock GetVehicleLastID()
    {
        for (new 
    1MAX_VEHICLESi++) {
            if (!
    IsValidVehicle(i)) {
                return 
    i;
            }
        }
        return 
    0;

    2. вариант
    PHP код:
    stock GetVehicleLastID()
    {
        new
            
    vehicleid CreateVehicle(4000.00.00.00.000, -1);

        if (
    vehicleid != INVALID_VEHICLE_ID) {
            
    DestroyVehicle(vehicleid);
        }
        return 
    vehicleid;


  2. #2
    Аватар для oukibt
    Пользователь

    Статус
    Оффлайн
    Регистрация
    27.02.2020
    Сообщений
    26
    Репутация:
    3 ±
    Использовать GetVehiclePoolSize?

    Твои оба варианта, кстати, не рабочие

  3. #3
    Аватар для punkochel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2018
    Адрес
    Россия
    Сообщений
    146
    Репутация:
    25 ±
    Если тебе необходимо узнать максимальный ID валидного транспорта, то уже ответили выше - GetVehiclePoolSize();
    Если проблема в том, что создать ли автомобиль игроку или добавить в очередь на создание (copy AZ-RP), то необходимо искать свободное место, должно быть, что-то вроде этого:
    1. stock GetFreeVehicleId() {
    2.  
    3. if(GetVehiclePoolSize()+1 < MAX_VEHICLES)
    4. return GetVehiclePoolSize()+1;
    5.  
    6.  
    7. for(new i; i < MAX_VEHICLES; i++) {
    8.  
    9. continue;
    10.  
    11. return i;
    12. }
    13.  
    14. return INVALID_VEHICLE_ID;
    15. }


    P.S: Набросал за пару минут, поэтому подумай, может что можно сделать лучше.

  4. Пользователь сказал cпасибо:
    Pro_Coder (14.11.2020)
  5. #4
    Аватар для Pro_Coder
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.10.2020
    Сообщений
    59
    Репутация:
    2 ±
    oukibt Кто вам такое сказал? Я сам писал, я знаю как они должны работать

    punkochel Я конечно все понимаю,твой вариант равносильный моему первому. Но суть вопроса был не в этом
    Последний раз редактировалось Pro_Coder; 14.11.2020 в 12:46.

  6. #5
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Сам вопрос поставлен некорректно. Что значит "синхронизировать с сервером" во втором варианте? И что значит "IsValidVehicle на стороне клиента тоже"? Если мы говорим про сам натив, то очевидно это часть серверного функционала.

    Касаемо вариантов в первом посту, оба имеют недоработки:
    Первый вариант остановится и вернёт не сущесвующий ид машины, который не создан на сервере, что на практике будет означать всегда "последний валидный ид тачки + 1", либо 1, если тачек не создано вообще. По этой же причине "return 0" там это почти невыполнимый код, потому что даже если на сервере машин не будет вообще, сработает условие из цикла в первой же его итерации и вернет i. (0 вернет только в случае, если сервер забит машинами до их лимита)
    Второй вариант вернет уже 65535 как последний созданный ид тачки, если машин будет создано до лимита. Плюс та же проблема, что и в первом варианте с возвратом "последнего валидного ида тачки + 1" из-за возвращения ида уже удаленной машины.

    Кароче, как тебе сказали выше, оба варианта если и не неработающие полностью, то уж точно не годные для использования в таком виде, ну и также про GetVehiclePoolSize - незачем изобретать велосипед, если нужно узнавать именно наивысший созданный ид тс.
    Последний раз редактировалось Nexius_Tailer; 14.11.2020 в 14:05.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  7. Пользователь сказал cпасибо:
    oukibt (14.11.2020)
  8. #6
    Аватар для Pro_Coder
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.10.2020
    Сообщений
    59
    Репутация:
    2 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Сам вопрос поставлен некорректно. Что значит "синхронизировать с сервером" во втором варианте? И что значит "IsValidVehicle на стороне клиента тоже"? Если мы говорим про сам натив, то очевидно это часть серверного функционала.

    Касаемо вариантов в первом посту, оба имеют недоработки:
    Первый вариант остановится и вернёт не сущесвующий ид машины, который не создан на сервере, что на практике будет означать всегда "последний валидный ид тачки + 1", либо 1, если тачек не создано вообще. По этой же причине "return 0" там это почти невыполнимый код, потому что даже если на сервере машин не будет вообще, сработает условие из цикла в первой же его итерации и вернет i. (0 вернет только в случае, если сервер забит машинами до их лимита)
    Второй вариант вернет 65535 как последний созданный ид тачки, если машин будет создано до лимита. Плюс та же проблема, что и в первом варианте с возвратом "последнего валидного ида тачки + 1" из-за возвращения ида уже удаленной машины.

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

  9. #7
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от Pro_Coder Посмотреть сообщение
    мне и нужно несуществующий
    Тогда функции из примера надо было называть не "GetVehicleLastID"
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  10. #8
    Аватар для Pro_Coder
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.10.2020
    Сообщений
    59
    Репутация:
    2 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Тогда функции из примера надо было называть не "GetVehicleLastID"
    Согласен, мой косяк, насчет синхронизации. Когда создаем CreateVehicle и если игроки в зоне стрима, машина должна синхронизировать всех игроков, чтобы они ее видели.

    Так вопрос, что тогда будет оптимизированный вариантом, 1 вариант, перебор "всех" авто, или 2 создать/удалить

  11. #9
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от Pro_Coder Посмотреть сообщение
    Согласен, мой косяк, насчет синхронизации. Когда создаем CreateVehicle и если игроки в зоне стрима, машина должна синхронизировать всех игроков, чтобы они ее видели.

    Так вопрос, что тогда будет оптимизированный вариантом, 1 вариант, перебор "всех" авто, или 2 создать/удалить
    Если создать и сразу же удалить, то не факт, что она вообще кому-то из игроков успеет прилететь. Да и создать можно на любых неудобных координатах, где игроков обычно нет. Тем не менее по эффективности могут быть разные результаты. В то время как создание/удаление тачки всегда будет занимать примерно одинаковое время и ресурсы, цикл иногда сможет очевидно быстрее определять первый попавшийся свободный ид, если машин на сервере немного. Лучше потестить, в общем.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  12. Пользователь сказал cпасибо:
    Pro_Coder (14.11.2020)
  13. #10
    Аватар для Pro_Coder
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.10.2020
    Сообщений
    59
    Репутация:
    2 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Если создать и сразу же удалить, то не факт, что она вообще кому-то из игроков успеет прилететь. Да и создать можно на любых неудобных координатах, где игроков обычно нет. Тем не менее по эффективности могут быть разные результаты. В то время как создание/удаление тачки всегда будет занимать примерно одинаковое время и ресурсы, цикл иногда сможет очевидно быстрее определять первый попавшийся свободный ид, если машин на сервере немного. Лучше потестить, в общем.
    Спасибо буду проверять

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •