Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 7 из 7
  1. #1
    Аватар для NewGreen
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.09.2014
    Сообщений
    61
    Репутация:
    44 ±

    ЭМИ система для удаленного отключения транспорта

    Приветствую, наверное многие видели как в Need For Speed (в некоторых частях) полицейские могли обезвреживали машину гонщика при помощи ЭМИ.
    Как нам известно ЭМИ - это Электромагнитный импульс, который блокирует работу двигателя автомобиля попутно выводя из строя всю электронную начинку.

    Сегодня хочу представить вам подобную систему для SA:MP, но с некоторыми отличиями от той что была в NFS.
    Основное отличие, в том что, в оригинальной NFS оборудование ЭМИ установлено в автомобиле, в нашей же системе, в качестве ЭМИ используется переностное оружие, вы можете настроить ЭМИ на любом огнестрельном оружии.

    Приступим к описанию:

    Основные функции:

    SetEMPStatusToPlayer(playerid,status) - функция позволяющая включить/выключить возможность использовать ЭМИ для игрока.
    Код:
    параметры:
              playerid - ID игрока
              status - переключатель true, false
    опции:
              true - включить ЭМИ для игрока
              false - выключить ЭМИ для игрока
    IsVehicleUnderEMP(vehicleid) - функция проверяющая был ли транспорт, атакован при помощи ЭМИ.
    Код:
    параметры:
              vehicleid - ID транспорта.
    возвращает:
              true - если машина не в рабочем состоянии, т.е. была под воздействием ЭМИ.
              false - если машина в рабочем состоянии.
    SetPlayerEMPWeapon(playerid,weaponid) - функция позволяющая установить для игрока статус ЭМИ для любого огнестрельного оружия.
    Код:
    параметры:
              playerid - ID игрока
              weaponid - ID огнестрельного оружия

    Дополнительные настройки


    #define EMP_SOUND_ID 6600 - определяет ID звука ЭМИ который слышен окружающим при воздействии ЭМИ на транспорт
    #define EMP_WORK_DISTANCE 50 - определяет рабочую дистанцию ЭМИ.

    Приступим к установке:

    Первое что нужно сделать это - скачать и подключить файл empsystem.inc
    PHP код:
    #include <a_samp>
    #include <empsystem>
    // ... 
    Важно подключить файл после файла a_samp.inc !

    Некоторые нюансы/советы в работе системы ЭМИ:

    1. Первый выстрел из оружия ЭМИ лишь повредит электронную часть транспорта, последующие выстрелы будут наносить прямой урон.
    Это сделано для того чтобы игрок мог "отключить" транспорт в плохом физическом состоянии (дымящийся) не взорвав его.
    2. На каждый транспорт вам дается один ЭМИ выстрел.
    3. Функцию SetEMPStatusToPlayer можно использовать в таймере, чтобы ограничить время перезарядки ЭМИ.
    Подобное решение позволит ограничить количество выстрелов ЭМИ, например можно сделать чтобы ЭМИ заряд был доступен раз в 10 сек

    Upd:
    Код:
    v 1.1
    - Проведена оптимизация функции GetDistanceFromPlayerToVehicle, за счет нативной функции VectorSize,
      скорость работы функции возросла в ~3,5 раза.
    - Убраны расширенные настройки, с целью не создавать излишнюю функциональность.
    - Проведены легкие "косметические" изменения.

    Ссылки для скачивания:


    http://rghost.ru
    http://pastebin.com/

    Спасибо за внимание!

    Автор: NewGreen
    Последний раз редактировалось NewGreen; 12.11.2015 в 19:51. Причина: обновление

  2. Пользователь сказал cпасибо:
    Desulaid (22.10.2015)
  3. #2
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

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

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

    Статус
    Оффлайн
    Регистрация
    29.09.2014
    Сообщений
    61
    Репутация:
    44 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Спрошу сразу: готовы ли вы прислушиваться к чужой критике и учитывать пожелания в этой теме в новых версиях инклуда (если таковые вообще планируются)?
    Просто раньше уже были случаи с игнорированием всяческих советов и пожеланий (пример, ещё пример, и ещё), не хотелось бы попросту сотрясать здесь воздух.
    Конечно, я только за, честная критика помогает учится и улучшатся!
    Последний раз редактировалось NewGreen; 22.10.2015 в 18:26.

  5. Пользователь сказал cпасибо:
    Unreal (02.11.2015)
  6. #4
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    По сути функция должна, что то вернуть. (Предлагаю вернуть статус [true/false])
    PHP код:
    forward SetEMPStatusToPlayer(playerid,bool:status);
    public 
    SetEMPStatusToPlayer(playerid,bool:status)
    {
            
    playerEMPStatus{playerid} = status;

    Удобство? Не думаю. То есть, я должен порыться в коде, что бы увидеть что обращение идет к char
    PHP код:
    #define IsVehicleUnderEMP(%0) vehicleEMPStatus{%0} 
    Ну и в добавок какие то кривые названия переменных (EMP).
    Что это?
      Открыть/закрыть



    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    По сути функция должна, что то вернуть. (Предлагаю вернуть статус [true/false])
    PHP код:
    forward SetEMPStatusToPlayer(playerid,bool:status);
    public 
    SetEMPStatusToPlayer(playerid,bool:status)
    {
            
    playerEMPStatus{playerid} = status;

    Это "Set", а не "Get".

    Цитата Сообщение от $continue$ Посмотреть сообщение
    Ну и в добавок какие то кривые названия переменных (EMP).
    Что это?
      Открыть/закрыть



    wp:Electromagnetic pulce (EMP)

    P.S.: Свои замечания опубликую чуть позже. Пока что можете посмотреть замечание по поводу #define здесь, у вас проблема точно такая же (нужно редактировать инклуд, в то время, как можно передать параметры в инклуд из использующего скрипта без редактирования чужого кода). И определитесь с префиксом в перехватах: ставить дефолтный "MyLib" - куда это годно? Проявите хоть немного уникальности в этом плане, это же инклуд с реализацией EMP, а не какая-то серая "MyLib".
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  8. 2 пользователя(ей) сказали cпасибо:
    $continue$ (22.10.2015) NewGreen (22.10.2015)
  9. #6
    Аватар для NewGreen
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.09.2014
    Сообщений
    61
    Репутация:
    44 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    По сути функция должна, что то вернуть. (Предлагаю вернуть статус [true/false])

    PHP код:
    forward SetEMPStatusToPlayer(playerid,bool:status);
    public 
    SetEMPStatusToPlayer(playerid,bool:status)
    {
            
    playerEMPStatus{playerid} = status;

    Функция лишь переключает положение, вкл/выкл для игрока, и ничего не возвращает.
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Удобство? Не думаю. То есть, я должен порыться в коде, что бы увидеть что обращение идет к char
    PHP код:
    #define IsVehicleUnderEMP(%0) vehicleEMPStatus{%0} 
    Сначала отвечу сам, потом задам вам встречный вопрос)
    Сделано это, как вы отметили - для удобства, т.к. по сути дела это интерфейс к состоянию переключателя, и приятнее будет когда он будет выглядеть так:
    PHP код:
    IsVehicleUnderEMP(vehicleid
    нежели
    PHP код:
    vehicleEMPStatus{vehicleid
    сути дела это не меняет, но, добавляет единообразия в систему.
    char - используется лишь в целях экономии, да и значений всего два это - true и false.

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

    Цитата Сообщение от $continue$ Посмотреть сообщение
    Ну и в добавок какие то кривые названия переменных (EMP).
    Что это?
      Открыть/закрыть



    EMP от слова electromagnetic pulse - что в переводе Электромагнитный импульс
    Последний раз редактировалось NewGreen; 22.10.2015 в 19:18.

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

    Статус
    Оффлайн
    Регистрация
    29.09.2014
    Сообщений
    61
    Репутация:
    44 ±
    Upd:
    Код:
    v 1.1
    - Проведена оптимизация функции GetDistanceFromPlayerToVehicle, за счет нативной функции VectorSize,
      скорость работы функции возросла в ~3,5 раза.
    - Убраны расширенные настройки, с целью не создавать излишнюю функциональность.
    - Проведены легкие "косметические" изменения.
    Последний раз редактировалось NewGreen; 12.11.2015 в 19:40.

 

 

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

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

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

Ваши права

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