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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±

    zvehcomp - дополнительные функции для компонентов транспорта

    zvehcomp
    GitHub

    Описание

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

    Пример использования

    Получить список всех доступных компонентов для модели транспорта с ID 400:
    1. new
    2. compatible_types[ZVEH_MAX_COMPONENT_TYPES],
    3. compatible_types_count;
    4.  
    5. GetVehicleCompatibleTypes(400, compatible_types, compatible_types_count);
    6.  
    7. for (new i = 0; i < compatible_types_count; i++) {
    8. printf("%d", compatible_types[i]);
    9. }


    Функции

    1. GetVehicleComponentTypeId(name[]);
    2. GetVehicleComponentTypeName(type, name[], size = sizeof(name));
    3. GetVehicleCompatibleTypes(model, array[ZVEH_MAX_COMPONENT_TYPES], &array_size);
    4. GetVehicleComponentName(componentid, cname[], size = sizeof(cname));
    5. GetVehicleCompatibleUpgrades(model, array[ZVEH_MAX_COMPONENTS], &array_size);
    6. IsVehicleUpgradeCompatible(model, componentid);


    GetVehicleComponentTypeId(name[])

    Получает ID типа компонента по его названию.

    Параметры:
    • name[] - массив с именем типа компонента, который нужно найти

    Возвращает:
    • ID типа компонента
    • INVALID_COMPONENT_ID в случае, если тип не найден


    GetVehicleComponentTypeName(type, name[], size = sizeof(name))

    Получает название типа компонента по его ID.

    Параметры:
    • type - ID типа компонента
    • name[] - массив для записи имени типа компонента
    • size - размер name

    Возвращает:
    • Количество символов у названия типа в случае, если тип найден
    • 0 в случае, если тип не найден


    GetVehicleCompatibleTypes(model, array[ZVEH_MAX_COMPONENT_TYPES], &array_size)

    Получает список совместимых типов компонентов по модели транспорта.

    Параметры:
    • model - ID модели транспорта
    • array[ZVEH_MAX_COMPONENT_TYPES] - массив для записи совместимых типов компонентов
    • array_size - количество элементов, записанных в массив

    Возвращает:
    • 1 в случае, если совместимые типы найдены и записаны в массив
    • 0 в случае, если совместимых типов не найдено


    GetVehicleComponentName(componentid, cname[], size = sizeof(cname))

    Получает название компонента по его ID.

    Параметры:
    • componentid - ID компонента
    • cname[] - массив для записи имени компонента
    • size - размер cname

    Возвращает:
    • Количество символов у названия компонента в случае, если компонент найден
    • 0 в случае, если тип не найден


    GetVehicleCompatibleUpgrades(model, array[ZVEH_MAX_COMPONENTS], &array_size)

    Получает список совместимых компонентов по модели транспорта.

    Параметры:
    • model - ID модели транспорта
    • array[ZVEH_MAX_COMPONENTS] - массив для записи совместимых компонентов
    • array_size - количество элементов, записанных в массив

    Возвращает:
    • 1 в случае, если совместимые типы записаны в массив
    • 0 в случае ошибки


    IsVehicleUpgradeCompatible(model, componentid)

    Проверяет совместимость компонента и модели транспорта.

    Параметры:
    • model - ID модели транспорта
    • componentid - ID компонента

    Возвращает:
    • 1 в случае, если данный компонент можно установить на указанную модель транспорта
    • 0 в случае, если данный компонент нельзя установить на указанную модель транспорта


    Константы

    1. ZVEH_INVALID_COMPONENT_ID (255)
    2. ZVEH_MAX_COMPONENTS (48)
    3. ZVEH_MAX_COMPONENT_NAME (64)
    4. ZVEH_MAX_COMPONENT_TYPES (14)
    5. ZVEH_MAX_COMPONENT_TYPE_NAME (16)


    ZVEH_INVALID_COMPONENT_ID

    Недействительный ID компонента (равен 255).

    ZVEH_MAX_COMPONENTS

    Максимальное число компонентов у одной модели транспорта (равен 48).

    ZVEH_MAX_COMPONENT_NAME

    Максимальная длина имени компонента (равна 64).

    ZVEH_MAX_COMPONENT_TYPES

    Максимальное число типов компонентов (равен 14).

    ZVEH_MAX_COMPONENT_TYPE_NAME

    Максимальная длина имени типа компонента (равна 16).

    Полезные ссылки



    Благодарности



    Скачать

    Последний раз редактировалось ziggi; 15.03.2018 в 20:25.

  2. 14 пользователя(ей) сказали cпасибо:
    $continue$ (18.01.2016) Avertus (19.01.2016) Daniel_Cortez (18.01.2016) Desulaid (18.01.2016) Geebrox (15.12.2017) Kovshevoy (20.11.2018) L0ndl3m (18.01.2016) Nexius_Tailer (19.01.2016) Nurick (19.01.2016) Profyan (19.01.2016) Seregamil (19.01.2016) SliM (20.01.2016) VVWVV (19.01.2016) [ForD] (18.01.2016)
  3. #2
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Используется заранее сгенерированный массив данных, что положительно сказывается на производительности.
    Каким образом этот массив генерировался, если не секрет?


    Цитата Сообщение от ziggi Посмотреть сообщение
    GetComponentTypeId(name[])

    Получает ID типа компонента по его имени.

    Параметры:
    • name[] - массив с именем типа компонента, который нужно найти
    Можно примеры таких имён? Чтобы не копировать сюда строки из инклуда, можно было бы сделать здесь ссылку прямиком на массив допустимых имён.
    С именами в других функциях то же самое.


    PHP код:
    #pragma library z_vehicle_component 
    Что это делает в инклуде?


    По поводу названий макросов (INVALID_COMPONENT_ID, MAX_COMPONENTS, etc.), компоненты могут быть не только у машины, но и ещё у чего-нибудь в каких-то системах в моде.
    Отсюда вероятность, что такие названия в моде уже могут использоваться. Чтобы перестраховаться от этого, можно добавить к названиям макросов префикс, уникальный для твоего инклуда - "ZVEH_", например.
    Т.е. получится ZVEH_MAX_COMPONENTS, ZVEH_MAX_COMPONENT_NAME, ZVEH_INVALID_COMPONENT_ID, etc.


    kthx
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. #3
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Каким образом этот массив генерировался, если не секрет?
    Взял алгоритм и массив из fixes.inc:
    PHP код:
    for (new componentid 1000componentid <= 1191componentid++) {
        if (
    gVehicleMods[(modelid 400) * + (componentid 1000 >>> 5)] & << (componentid 1000 0b00011111)) {
            
    // этот компонент совместим, добавить
        
    }

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Можно примеры таких имён? Чтобы не копировать сюда строки из инклуда, можно было бы сделать здесь ссылку прямиком на массив допустимых имён.
    С именами в других функциях то же самое.
    Да, так будет удобнее, добавил.

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Что это делает в инклуде?
    Всегда писал, даже не задумывался о необходимости, уберу.

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    По поводу названий макросов (INVALID_COMPONENT_ID, MAX_COMPONENTS, etc.), компоненты могут быть не только у машины, но и ещё у чего-нибудь в каких-то системах в моде.
    Отсюда вероятность, что такие названия в моде уже могут использоваться. Чтобы перестраховаться от этого, можно добавить к названиям макросов префикс, уникальный для твоего инклуда - "ZVEH_", например.
    Т.е. получится ZVEH_MAX_COMPONENTS, ZVEH_MAX_COMPONENT_NAME, ZVEH_INVALID_COMPONENT_ID, etc.
    Согласен, исправлю.

  5. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Взял алгоритм и массив из fixes.inc:
    PHP код:
    for (new componentid 1000componentid <= 1191componentid++) {
        if (
    gVehicleMods[(modelid 400) * + (componentid 1000 >>> 5)] & << (componentid 1000 0b00011111)) {
            
    // этот компонент совместим, добавить
        
    }

    В таком случае следовало бы указать ссылку на fixes.inc в комментариях к коду (и, желательно, автора того фикса, который составил таблицу компонентов и алгоритм поиска), не то это будет равноценно плагиату.


    Цитата Сообщение от ziggi Посмотреть сообщение
    Да, так будет удобнее, добавил.
    Цитата Сообщение от ziggi Посмотреть сообщение
    Всегда писал, даже не задумывался о необходимости, уберу.
    Цитата Сообщение от ziggi Посмотреть сообщение
    Согласен, исправлю.
    Если честно, я ожидал, что на этом опять начнётся какой-то спор.
    Радует, что есть люди, которые могут прислушиваться к чужим советам, если в них есть логика, а не слепо отвергать всё подряд, апеллируя тем, что каждый имеет право кодить, как ему вздумается (ИМХО, это уже само по себе признание своей некомпетентности, как скриптера, ведь единственный аргумент таких людей в том, что они могут постить любой говнокод только потому, что это не запрещено законом).
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  6. 3 пользователя(ей) сказали cпасибо:
    $continue$ (19.01.2016) L0ndl3m (19.01.2016) VVWVV (19.01.2016)
  7. #5
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    В таком случае следовало бы указать ссылку на fixes.inc в комментариях к коду (и, желательно, автора того фикса, который составил таблицу компонентов и алгоритм поиска), не то это будет равноценно плагиату.
    Добавил. И в тему тоже.

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Если честно, я ожидал, что на этом опять начнётся какой-то спор.
    Радует, что есть люди, которые могут прислушиваться к чужим советам, если в них есть логика, а не слепо отвергать всё подряд, апеллируя тем, что каждый имеет право кодить, как ему вздумается (ИМХО, это уже само по себе признание своей некомпетентности, как скриптера, т.к. единственный аргумент таких людей в том, что они могут постить любой говнокод только потому, что это не запрещено законом).
    Все мы учимся, нет ничего зазорного в признании своей ошибки.

    UPD: Оформил информацию о компонентах и их типах в удобные таблицы на GitHub Wiki.
    Последний раз редактировалось ziggi; 19.01.2016 в 12:23.

  8. Пользователь сказал cпасибо:
    VVWVV (19.01.2016)
  9. #6
    Аватар для SliM
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.11.2015
    Сообщений
    40
    Репутация:
    10 ±
    Это большой труд, спасибо, мне это нужно! Никогда бы не переборол свою лень и не написал такое, мне лень это сделать даже на всем готовом. Вы избавили меня от этой работы.

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

    Статус
    Оффлайн
    Регистрация
    20.01.2016
    Сообщений
    16
    Репутация:
    0 ±
     Цитаты великих критиков
    Цитата Сообщение от Fantom
    Скриптер не должен строить свою жизнь вокруг трафика с Яндекса. Это не должно быть вопросом жизни и смерти сервера.
    Цитата Сообщение от DeimoS Посмотреть сообщение
    А что мешало просто взять и попробовать? ;) Или обязательно нужно было услышать: "да, можно"?

  11. #8
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Забыл сказать вчера, функции, по хорошему, тоже следовало бы переименовать - по той же причине, что и макросы.
    Инклуд специализируется на компонентах транспорта и уже есть функции GetVehicleCompatibleUpgrades и IsVehicleUpgradeCompatible, поэтому логично было бы оставить их названия, как есть, и добавить в названия других функций "Vehicle", т.е. GetComponentTypeId -> GetVehicleComponentTypeId, etc. Этого вполне должно хватить, чтобы уточнить названия, сделать их не такими общими и расплывчатыми.

    Ещё одно предложение: убрать отдельный файл с лицензией, перенеся текст в инклуд в виде многострочного комментария. Не придётся искать лицензию, если кто-то забудет скопировать файл LICENSE вместе с инклудом.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  12. #9
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Забыл сказать вчера, функции, по хорошему, тоже следовало бы переименовать - по той же причине, что и макросы.
    Инклуд специализируется на компонентах транспорта и уже есть функции GetVehicleCompatibleUpgrades и IsVehicleUpgradeCompatible, поэтому логично было бы оставить их названия, как есть, и добавить в названия других функций "Vehicle", т.е. GetComponentTypeId -> GetVehicleComponentTypeId, etc. Этого вполне должно хватить, чтобы уточнить названия, сделать их не такими общими и расплывчатыми.
    Даже не знаю, почему сразу так не назвал. Исправил.

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Ещё одно предложение: убрать отдельный файл с лицензией, перенеся текст в инклуд в виде многострочного комментария. Не придётся искать лицензию, если кто-то забудет скопировать файл LICENSE вместе с инклудом.
    Добавил информацию о лицензии в .inc файл, но файл LICENSE всё же лучше оставить (рекомендации GitHub).

  13. #10
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Обновлено, добавлены универсальные компоненты. Спасибо Альберту Миронову.

  14. Пользователь сказал cпасибо:
    Geebrox (15.12.2017)
 

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

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

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

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

Ваши права

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