Закрыть Привет! Если вы читаете это - Вы еще не зарегистрированы. Это займет не больше минуты. Нажмите здесь, чтобы пройти регистрацию в несколько простых шагов, чтобы пользоваться всеми возможностями нашего форума. Обратите внимание, запрещены непристойные, матерные, бессмысленные (цифры, случайный набор букв) ники. Удачи!

Тема: s_freeseat - свободное место в транспорте

Показано с 1 по 10 из 10

  1. #1
    i'm nasty, i'm insane

    Аватар для #Samurai

    Статус: Оффлайн
    Регистрация:16.09.2017
    Адрес:Не удалось определить
    Сообщений:428
    Репутация:324 [+/-] 

    s_freeseat - свободное место в транспорте

    Инклуд, позволяющий определить свободное место в транспорте.


    Автор: #Samurai aka un[x]pected
    Ссылка на загрузку и подробное описание: GitHub


    Функции:
    PHP код:
    GetVehicleFreeSeat(vehicleid)
    // vehicleid - ID транспортного средства, у которого нужно найти свободное место.
    // Возвращаемые значения: номер свободного места или -1, если такового нет. 


    Пример использования:
    PHP код:
    CMD:freeseat(playerid)
    {
        new 
    veh GetPlayerVehicleID(playerid);
        if(!
    veh) return 1;

        new 
    chatStr[20];
        
    format(chatStrsizeof(chatStr), "Свободное место: %i"GetVehicleFreeSeat(veh));
        
    SendClientMessage(playerid, -1chatStr);
        return 
    1;

    Последний раз редактировалось #Samurai; 07.07.2018 в 20:54.

  2. 4 пользователей сказали cпасибо #Samurai за это полезное сообщение:

    #Rips (08.07.2018), bullplex (07.07.2018), Iwka (07.07.2018), Salery (08.07.2018)

  3. #2
    Зарегистрированый

    Аватар для #keroz

    Статус: Оффлайн
    Регистрация:16.01.2018
    Сообщений:10
    Репутация:0 [+/-] 
    Полезно)
  4. #3
    Пользователь

    Аватар для Richie56

    Статус: Оффлайн
    Регистрация:01.05.2014
    Сообщений:560
    Репутация:173 [+/-] 
    братан, не проверяешь функцию GetPlayerVehicleSeat, она может вернуть 128

    PHP код:
    stock GetVehicleFreeSeat(vehicleid)
    {
        new 
    model GetVehicleModel(vehicleid);
        if(!
    model) return -1;
        new 
    seatidseats[9 char];
        
    #if defined _foreach_included
        
    foreach(new Player)
        
    #else
        
    for(new GetPlayerPoolSize(); >= 0v--)
        
    #endif
        
    {
            if(
    IsValidVehicle(v))
            {
                if(
    IsPlayerInVehicle(vvehicleid))
                {
                    
    seatid GetPlayerVehicleSeat(v);
                    if(
    seatid != 128seats{seatid} = 1;
                }
            }
        }
        for(new 
    iMaxSeats[model 400]; i++)
        {
            if(!
    seats{i}) return i;
        }
        return -
    1;

  5. #4
    /proger/

    Аватар для whale

    Статус: Оффлайн
    Регистрация:20.09.2013
    Сообщений:700
    Репутация:203 [+/-] 
    Релизить инклуд ради одной функции? Бред, как по мне. Стоило просто в раздел функций добавить.
  6. #5
    i'm nasty, i'm insane

    Аватар для #Samurai

    Статус: Оффлайн
    Регистрация:16.09.2017
    Адрес:Не удалось определить
    Сообщений:428
    Репутация:324 [+/-] 
    Релизить инклуд ради одной функции? Бред, как по мне. Стоило просто в раздел функций добавить.
    Та просто до некоторого момента там был совершенно другой код с перехватами функций и прочим, но я решил отказаться от этого бреда, сделал новый код и удалил коммиты.

    ---------- Сообщение добавлено в 16:19 ---------- Предыдущее сообщение добавлено в 16:19 ----------

    Обновил код инклуда.

  7. #6
    •Профик•

    Аватар для Nexius_Tailer

    Статус: Оффлайн
    Регистрация:19.05.2013
    Адрес:Гомель, Беларусь
    Сообщений:1,321
    Репутация:635 [+/-] 
    братан, не проверяешь функцию GetPlayerVehicleSeat, она может вернуть 128
    Не может. По крайней мере в актуальных версиях место делится с остатком на 64 (и даже послав читом его 128, сервер вернёт всё равно 128 % 64 = 0). Тем не менее код даже с этой проверкой не учитывает возвращаемые места 63 и около того, которые начинают занимать игроки, севшие в автобус (431 и 437 модели) на 8+ пассажирское место.

    И вот что действительно упущено:
    1. В примере с командой /freeseat нету в конце "return 1;";
    2. В функции GetVehicleFreeSeat не проверяется узнаваемая модель тачки на валидность (и хотя перед этим стоит проверка с IsValidVehicle, надёжнее и быстрее было бы сразу узнавать и проверять её модель на 0, и в таком случае уже обрывать код, перед тем как она подставляется в массив);
    3. Массив с количеством максимальных мест также имеет неправильные данные для некоторых моделей:

    Жёлтым - некорректные данные из твоего массива, зелёным - данные из fixes

    [Скрыть]

    Советую обновить его из fixes, там на данный момент он самый актуальный и корректный, насколько я знаю.
    Последний раз редактировалось Nexius_Tailer; 07.07.2018 в 18:25.

    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker
  8. #7
    Пользователь

    Аватар для Richie56

    Статус: Оффлайн
    Регистрация:01.05.2014
    Сообщений:560
    Репутация:173 [+/-] 
    Не может. По крайней мере в актуальных версиях место делится с остатком на 64 (и даже послав читом его 128, сервер вернёт всё равно 128 % 64 = 0). Тем не менее код даже с этой проверкой не учитывает возвращаемые места 63 и около того, которые начинают занимать игроки, севшие в автобус (431 и 437 модели) на 8+ пассажирское место.
    Не знал, пасиб.
    Насколько я знаю если 8 мест уже занято то игрок в автобус тупо не может сесть.
  9. #8
    i'm nasty, i'm insane

    Аватар для #Samurai

    Статус: Оффлайн
    Регистрация:16.09.2017
    Адрес:Не удалось определить
    Сообщений:428
    Репутация:324 [+/-] 
    Не может. По крайней мере в актуальных версиях место делится с остатком на 64 (и даже послав читом его 128, сервер вернёт всё равно 128 % 64 = 0). Тем не менее код даже с этой проверкой не учитывает возвращаемые места 63 и около того, которые начинают занимать игроки, севшие в автобус (431 и 437 модели) на 8+ пассажирское место.

    И вот что действительно упущено:
    1. В примере с командой /freeseat нету в конце "return 1;";
    2. В функции GetVehicleFreeSeat не проверяется узнаваемая модель тачки на валидность (и хотя перед этим стоит проверка с IsValidVehicle, надёжнее и быстрее было бы сразу узнавать и проверять её модель на 0, и в таком случае уже обрывать код, перед тем как она подставляется в массив);
    3. Массив с количеством максимальных мест также имеет неправильные данные для некоторых моделей:

    Жёлтым - некорректные данные из твоего массива, зелёным - данные из fixes

    [Скрыть]

    Советую обновить его из fixes, там на данный момент он самый актуальный и корректный, насколько я знаю.
    1. Упустил, когда на хабе набрасывал пример
    2. Особой разницы в скорости работы не увидел, точнее её вообще не было, так что не думаю, что в скорости GetVehicleModel будет лучше, а вот сам факт того, что по стандарту IsValidVehicle отсутствует а инклудах всё-таки подтолкнул меня заменить на GetVehicleModel
    3. Обновил

  10. #9
    •Профик•

    Аватар для Nexius_Tailer

    Статус: Оффлайн
    Регистрация:19.05.2013
    Адрес:Гомель, Беларусь
    Сообщений:1,321
    Репутация:635 [+/-] 
    2. Особой разницы в скорости работы не увидел, точнее её вообще не было, так что не думаю, что в скорости GetVehicleModel будет лучше, а вот сам факт того, что по стандарту IsValidVehicle отсутствует а инклудах всё-таки подтолкнул меня заменить на GetVehicleModel
    Честно говоря, я сам юзаю GetVehicleModel вместо IsValidVehicle зачастую только потому, что первая гарантированно будет объявлена нативом)
    А насчёт скорости я имел в виду единичное использование GetVehicleModel и запись её значения в переменную (для использования в проверке на валидность и как индекс для последующей подстановки в массив), что было бы более эффективно, чем использование двух функций. Хотя если по тестам существенной разницы нет, то и фиг с ним.

    ---------- Сообщение добавлено в 00:17 ---------- Предыдущее сообщение добавлено в 00:14 ----------

    А, у тебя уже так и реализовано, сразу не посмотрел

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

    Интересно будет перепроверить это кому-то и на чистой игре, думаю также в интересах и автора данного инклуда xD

    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker
  11. #10
    Пользователь

    Аватар для Wallhacker

    Статус: Оффлайн
    Регистрация:08.06.2018
    Сообщений:49
    Репутация:15 [+/-] 
    Неплохо

Ваши права

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