Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 2 ПерваяПервая 1 2
Показано с 11 по 18 из 18

Тема: Плагины

  1. #11
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Странно, я думал, что спрашивали о плагинах и фиксах, "необходимых для нормальной работы" и о TimerFix в частности.
    Ну а разве "необходимые" это не то же, что и "обязательные"?) Обязательность для установки и подразумевает, что без плагинов/фисков сервер не будет нормально работать.
    Да и речь о том, что даже практика большинства работающих серверов показывает, что TimerFix не обязателен "для нормальной работы". Проблем с таймерами ещё нужно постараться добиться, о чём я писал в предыдущих сообщениях.

    Касаемо погрешности - 99% всех систем, требующих той или иной точности, реализуются через таймер с маленьким промежутком срабатывания (секундный таймер, например) + gettime. Очень редки системы, в которых даже минутная погрешность будет существенно влиять на игру. Как, собственно, редки таймеры, частота обновлений которых больше минуты (обычно подобные вещи как раз через секундный таймер+gettime и реализуют, ибо можно легко настроить то, в какую именно минуту часа должна срабатывать та или иная система. Что, например, хорошо для всяких оповещений, которые с обычным таймером могут сработать в одно время и зафлудить чат).

    В общем, как я уже которое сообщение говорю - TimerFix не является каким-то обязательным плагином, не установив который вы обязательно столкнётесь с какими-либо проблемами. Он призван решить конкретные проблемы и, как по мне, смысл его ставить есть только тогда, когда вы с этими проблемами встречаетесь, а не пытаться решить проблему, которой ещё нет. Особенно с учётом того, что для применения плагина достаточно просто его подключить. Даже код переписывать не придётся.
    Последний раз редактировалось DeimoS; 12.04.2019 в 21:49.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Проблем с таймерами ещё нужно постараться добиться, о чём я писал в предыдущих сообщениях.
    Для некритичных задач, как к примеру, обновление ТД - да, это будет незаметно. Если же потребуется, к примеру, сделать таймер на mute/unmute в чате для игрока, обойтись простым декрементом счётчика секунд в таймерной функции уже не выйдет (нет, при желании, конечно, можно, но время будет отсчитываться дольше задуманного), для точности придётся впихивать лишний вызов gettime().

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Касаемо погрешности - 99% всех систем, требующих той или иной точности, реализуются через таймер с маленьким промежутком срабатывания (секундный таймер, например) + gettime.
    Собственно, как я и упомянул выше, это всего лишь способ обхода проблемы, который совсем не факт что проще обычного декремента переменной, как в упомянутом выше примере.
    Хотя стоит признать, когда привыкаешь не полагаться на точность таймеров (или даже учишься этому по чужому коду с самого начала, не зная альтернативы) и считаешь костыль нормой, то перестаёшь и осознавать, что это проблема и что без бага можно было написать код проще. Поэтому нет абсолютно ничего удивительного в том, что никто не жалуется на неточные таймеры.

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Как, собственно, редки таймеры, частота обновлений которых больше минуты (обычно подобные вещи как раз через секундный таймер+gettime и реализуют, ибо можно легко настроить то, в какую именно минуту часа должна срабатывать та или иная система. Что, например, хорошо для всяких оповещений, которые с обычным таймером могут сработать в одно время и зафлудить чат)
    Это уже немного другая проблема, хотя и её, по идее, можно решить без gettime(), с помощью доп. функций, предоставляемых в fixes2, указав в таймере время до первого срабатывания и интервал по отдельности.
    1. native SetTimer_(const func[], const delay, const interval, const count);
    2. native SetTimerEx_(const func[], const delay, const interval, const count, const format[], {Float, _}:...);


    Цитата Сообщение от DeimoS Посмотреть сообщение
    В общем, как я уже которое сообщение говорю - TimerFix не является каким-то обязательным плагином, не установив который вы обязательно столкнётесь с какими-либо проблемами.
    Во-первых, нельзя внезапно "столкнуться" с проблемой, с которой уже живёшь с самого начала и которую привык не замечать.
    Во-вторых, я разве где-то говорил, что TimerFix - это обязательный плагин? Многие баги можно обойти, в том числе и в таймерах.

    Кстати про TimerFix,
    Цитата Сообщение от Paradox Посмотреть сообщение
    Я в том плане, вот допустим тот же Fix Timer, что-то вроде фиксов, может каких нибудь полезных функций.
    Я бы скорее посоветовал fixes2 - в этом плагине тоже реализованы точные таймеры. В отличие от TimerFix, он больше проверен временем и не подвержен накоплению погрешностей при каждом срабатывании таймера, не говоря уже о доп. функциях (см. цитатой выше).
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

    Статус
    Оффлайн
    Регистрация
    08.06.2015
    Адрес
    Запорожье
    Сообщений
    117
    Репутация:
    1 ±
    Спасибо большое за ответы, очень кстати.

  4. #14
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Для некритичных задач, как к примеру, обновление ТД - да, это будет незаметно. Если же потребуется, к примеру, сделать таймер на mute/unmute в чате для игрока, обойтись простым декрементом счётчика секунд в таймерной функции уже не выйдет (нет, при желании, конечно, можно, но время будет отсчитываться дольше задуманного), для точности придётся впихивать лишний вызов gettime().
    Мут игрока давно делают через запись "gettime()+время_мута" и сверкой этих значений везде, где нужно запретить использовать код игроку с мутом.
    В остальных случаях (тюрьма и т.п.) используется либо такая же схема, как с мутом, либо секундный таймер и вычитание единицы из переменной, хранящей количество секунд, которое нужно отсчитать, либо секундный таймер+метод с мутом, только проверка уже в самом таймере. Таймерами никто не выдаёт подобные вещи, как минимум, потому что игроку как-то нужно сообщать сколько времени осталось до конца.
    А даже если бы и выдавали, игрок особо не заметит разницы даже в +40 секунд (которые обычно набегают только для таймеров с совсем уж большими интервалами, равными десяткам минут или даже часам).


    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Собственно, как я и упомянул выше, это всего лишь способ обхода проблемы, который совсем не факт что проще обычного декремента переменной, как в упомянутом выше примере.
    Хотя стоит признать, когда привыкаешь не полагаться на точность таймеров (или даже учишься этому по чужому коду с самого начала, не зная альтернативы) и считаешь костыль нормой, то перестаёшь и осознавать, что это проблема и что без бага можно было написать код проще. Поэтому нет абсолютно ничего удивительного в том, что никто не жалуется на неточные таймеры.
    Нет, это просто приемлемая реализация, ибо в большинстве случаев даже самая большая погрешность таймеров не сыграет большой роли на фоне того, что SA-MP сам по себе имеет кучу проблем с производительностью и синхронизацией. Даже если игроки заметят задержку, для них это будет очередной лёгкий лаг сервера, коих в SA-MP полно при большом онлайне даже без участия какого-то дополнительного кода. Не говоря уже о том, что многие игроки играют на компьютерах, которые редко и 30 FPS в GTA выдают стабильно.
    Да и, как ниже будет подмечено мной, есть многие системы, для которых подобная реализация либо создаёт дополнительные удобства при поддержке кода, либо вообще необходима.


    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Это уже немного другая проблема, хотя и её, кстати, можно решить без gettime(), с помощью доп. функций, предоставляемых в fixes2, указав в таймере время до первого срабатывания и интервал по отдельности.
    1. native SetTimer_(const func[], const delay, const interval, const count);
    2. native SetTimerEx_(const func[], const delay, const interval, const count, const format[], {Float, _}:...);
    И потом высматривать все таймеры, выискивая когда же появляется свободное окно, в котором можно будет воспроизвести тот или иной код, вместо того, чтоб иметь один простой switch с поминутным разделением вызовов функций с нужным кодом.
    И я напомню, что без gettime не обойтись в таймере, ибо есть много систем, требующих обработки кода в конкретное время, а не через конкретный интервал (тот же PayDay).


    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Во-первых, нельзя внезапно "столкнуться" с проблемой, с которой уже живёшь с самого начала и которую привык не замечать.
    Опять же, ты сейчас намеренно преувеличиваешь :) Ты почему-то забываешь о том, что вообще такое SA-MP и как он работает. Даже задержки в 25%, которых получится добиться, разве что, делая таймеры по часу, на фоне общей нестабильности будут выглядеть вполне естественно со стороны игроков. Так какая же это тогда проблема, если никакого негатива в большинстве случаев она не создаёт?
    Первые фиксы таймеров, призванные сократить задержку, создавались исключительно для реализации конкретных систем, требующих максимальной точности. А в оставшемся большинстве систем эта точность никак на игру ровным счётом не повлияет и игроки ощутимой разницы не заметят.

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Во-вторых, я разве где-то говорил, что TimerFix - это обязательный плагин? Многие баги можно обойти, в том числе и в таймерах.
    То ты говоришь, что мы тут обсуждаем плагины, которые "необходимых для нормальной работы и о TimerFix в частности", то теперь TimerFix не обязателен.
    Если он не обязателен, то к чему весь этот диалог? Повторюсь в очередной раз: я нигде не призывал всецело отказываться от этого плагина. Я лишь говорил, что он не решает каких-то актуальных проблем, которые коснуться обязательно каждого. И говорил, что использовать его есть смысл только тогда, когда "баги таймеров" коснуться лично вас.
    То бишь, то же самое, что и говоришь ты (только я более трезво смотрю на проблему таймеров).



    UPD: Ах да, так же хочу заострить внимание на том, что в реальности все твои аргументы насчёт задержек не работают, ибо эти задержки просто не заметны из игры. Даже для таймеров без gettime и прочих ухищрений. Просто потому что игроки не сидят с секундомерами и не замеряют то, как точно в пиратском мультиплеере, собранном на коленке, срабатывают те или иные действия. Перфекционизм, конечно, можно подключить, но проку от него не будет ровным счётом никакого (наоборот мы лишь часть ресурсов сольём в трубу), ибо игра не начнёт вдруг в 7 раз быстрее работать и тот же пинг, из-за которого происходит большая часть задержек в игре, вдруг не исчезнет.
    Последний раз редактировалось DeimoS; 13.04.2019 в 18:37.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Мут игрока давно делают через запись "gettime()+время_мута" и сверкой этих значений везде, где нужно запретить использовать код игроку с мутом.
    В остальных случаях (тюрьма и т.п.) используется либо такая же схема, как с мутом, либо секундный таймер и вычитание единицы из переменной, хранящей количество секунд, которое нужно отсчитать, либо секундный таймер+метод с мутом, только проверка уже в самом таймере. Таймерами никто не выдаёт подобные вещи, как минимум, потому что игроку как-то нужно сообщать сколько времени осталось до конца.
    А даже если бы и выдавали, игрок особо не заметит разницы даже в +40 секунд (которые обычно набегают только для таймеров с совсем уж большими интервалами, равными десяткам минут или даже часам).
    Да, уже вспомнил. Возможно, начинать писать ответ в 3 часа ночи было не самой лучшей идеей :)


    Цитата Сообщение от DeimoS Посмотреть сообщение
    Нет, это просто приемлемая реализация, ибо в большинстве случаев даже самая большая погрешность таймеров не сыграет большой роли на фоне того, что SA-MP сам по себе имеет кучу проблем с производительностью и синхронизацией. Даже если игроки заметят задержку, для них это будет очередной лёгкий лаг сервера, коих в SA-MP полно при большом онлайне даже без участия какого-то дополнительного кода. Не говоря уже о том, что многие игроки играют на компьютерах, которые редко и 30 FPS в GTA выдают стабильно.
    Обилие других проблем - такое себе оправдание, на самом деле...


    Цитата Сообщение от DeimoS Посмотреть сообщение
    Да и, как ниже будет подмечено мной, есть многие системы, для которых подобная реализация либо создаёт дополнительные удобства при поддержке кода, либо вообще необходима.
    Так я разве говорил, что подход с gettime() во всех случаях плох? Наоборот, в предыдущем посте я отмечал, что в отдельных кейсах этот подход как раз таки нужен (но не во всех).


    Цитата Сообщение от DeimoS Посмотреть сообщение
    И потом высматривать все таймеры, выискивая когда же появляется свободное окно, в котором можно будет воспроизвести тот или иной код, вместо того, чтоб иметь один простой switch с поминутным разделением вызовов функций с нужным кодом.
    Завести константы под временные смещения (или даже enum, чтобы присваивать значения автоматически), которые потом указывать при создании таймеров (в варианте из fixes2) - не вариант?


    Цитата Сообщение от DeimoS Посмотреть сообщение
    И я напомню, что без gettime не обойтись в таймере, ибо есть много систем, требующих обработки кода в конкретное время, а не через конкретный интервал (тот же PayDay).
    При запуске сервера рассчитать время до следующего payday и его указать при создании таймера. Дальше в таймерной функции вызов gettime() по идее должен быть необходим только если нужно рассчитать ещё какой-то временной промежуток.


    Цитата Сообщение от DeimoS Посмотреть сообщение
    Опять же, ты сейчас намеренно преувеличиваешь :) Ты почему-то забываешь о том, что вообще такое SA-MP и как он работает. Даже задержки в 25%, которых получится добиться, разве что, делая таймеры по часу, на фоне общей нестабильности будут выглядеть вполне естественно со стороны игроков.
    Не факт. Если посадить игрока в тюрьму на час (полагаясь именно на таймеры, без gettime()), он может посмотреть на время и отойти от ПК по своим делам примерно на час, а как вернётся - сюрприз, откуда ни возьмись, ещё 10 минут, что, естественно, вызовет недовольство у игрока. Сужу по собственному игровому опыту восьмилетней давности, когда приходилось и самому натыкаться на несоответствии времени в тюрьме, и слышать жалобы на это от других игроков.


    Цитата Сообщение от DeimoS Посмотреть сообщение
    То ты говоришь, что мы тут обсуждаем плагины, которые "необходимых для нормальной работы и о TimerFix в частности", то теперь TimerFix не обязателен.
    Не вижу в этом никакого противоречия. Все перечисленные в этой теме фиксы в принципе не обязательны и не факт, что скриптер может наткнуться на исправляемые ими проблемы.


    Цитата Сообщение от DeimoS Посмотреть сообщение
    Если он не обязателен, то к чему весь этот диалог?
    Изначально претензия была к тому, что ты рекомендуешь fixes.inc, но не согласен с актуальностью TimerFix, после чего из поста в пост копились и другие вопросы. И, как видишь, даже сейчас остаются вопросы, на которые хотелось бы услышать твоё или чьё-либо ещё мнение (если кто-то ещё пожелает ответить).


    Цитата Сообщение от DeimoS Посмотреть сообщение
    Я лишь говорил, что он не решает каких-то актуальных проблем, которые коснуться обязательно каждого.
    Как вариант, владелец сервера или скриптер может и не знать о наличии той или иной проблемы (как в приведённом мной выше примере с тюрьмой), но сама проблема от этого никуда не пропадёт :)
    Повторюсь, мой посыл в том, что цель использования TimerFix или fixes2 не столько решить существующие проблемы, сколько перестраховаться от возможных проблем в будущем, о которых потом можешь и не узнать.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  6. #16
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Обилие других проблем - такое себе оправдание, на самом деле...
    Это не оправдание, а принятие реальности :) С тем же успехом ты можешь уйти сейчас в лес и начать строить там убежище на случай нападения динозавров. А что, ведь факт того, что динозавры вымерли - такое себе оправдание. Надо заранее просчитывать все варианты, независимо от их актуальности!


    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Завести константы под временные смещения (или даже enum, чтобы присваивать значения автоматически), которые потом указывать при создании таймеров (в варианте из fixes2) - не вариант?
    А в чём существенное отличие, если у нас уже есть секундный таймер, в котором в любом случае будет вызов gettime и сверка минут? Зачем забивать оперативу дополнительными таймерами?
    Ты предлагаешь шило на мыло поменять)


    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    При запуске сервера рассчитать время до следующего payday и его указать при создании таймера. Дальше в таймерной функции вызов gettime() по идее должен быть необходим только если нужно рассчитать ещё какой-то временной промежуток.

    И вместо одного таймера + gettime, данные которой будут использоваться в куче других случаев (даже не связанных с вызовом кода в определённое время. Например, gettime пригодится для текстдрава часов), ты создашь кучу отдельных таймеров, продумав для них альтернативную реализацию всего того, что решалось через switch и, в итоге, лишь усложнив код + выделив лишнюю оперативную память.
    Собственно, главный вопрос, который я задаю уже который пост подряд: зачем? Зачем, если и без того всё работает вполне нормально?

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Не факт. Если посадить игрока в тюрьму на час (полагаясь именно на таймеры, без gettime()), он может посмотреть на время и отойти от ПК по своим делам примерно на час, а как вернётся - сюрприз, откуда ни возьмись, ещё 10 минут, что, естественно, вызовет недовольство у игрока. Сужу по собственному игровому опыту восьмилетней давности, когда приходилось и самому натыкаться на несоответствии времени в тюрьме, и слышать жалобы на это от других игроков.
    Почему ты опять используешь такие нерелевантные примеры? Никто в здравом уме не будет делать какое-либо наказание или любое подобное действие на таймерах (даже сверхточных), ибо, как минимум, нужно иметь возможность сообщать игроку то, сколько времени осталось до окончания отсчёта. Можно, конечно, сейчас найти или написать плагин, который не только таймеры будет создавать, но и возвращать остаток времени до следующего срабатывания, но зачем, когда есть более простой и проверенный временем вариант?
    Да и нужно так же вспомнить о том, что то же время наказания в тюрьме нужно сохранять на случай выхода. Даже если реализовывать всё через таймер с возможностью просмотра остатка времени, получится ненужное дублирование информации, ибо эту самую информацию нужно где-то хранить до создания таймера. Хотя, опять же, можно и тут извратиться, сделав работоспособную систему, но зачем всё усложнять, если всё и так работает хорошо?

      Открыть/закрыть
    Вся эта ситуация похожа на ситуацию оптимизаторов, которые задрачивают на миллисекунды, прогоняя код, который будет раз в десяток минут вызываться, через цикл на миллиарды итераций. Что в том случае от такой оптимизации игровой процесс никак не изменится, что в этом. Собственно, как и какая-либо нагрузка на сервер (скорее, наоборот мы потреяем больше оперативы на дополнительные таймеры для разных действий, которые раньше либо вообще без таймеров обходились, либо срабатывали через switch, на вызов которого уходило мизерное количество времени).




    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Не вижу в этом никакого противоречия. Все перечисленные в этой теме фиксы в принципе не обязательны и не факт, что скриптер может наткнуться на исправляемые ими проблемы.
    Ну а теперь возвращаемся к вопросу автора темы и видим, что он спрашивает какие плагины стоит ставить сразу (то бишь, обязательно). А потом находим моё первое сообщение в этой теме и видим ответ: нет обязательных плагинов, ибо всё нужно использовать по случаю. Потом видим как автор темы упоминает TimerFix, а я отвечаю, что и этот плагин далеко не обязателен, а решает конкретные задачи. Собственно, ты сейчас говоришь то же самое :)



    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Изначально претензия была к тому, что ты рекомендуешь fixes.inc, но не согласен с актуальностью TimerFix, после чего из поста в пост копились и другие вопросы. И, как видишь, даже сейчас остаются вопросы, на которые хотелось бы услышать твоё или чьё-либо ещё мнение (если кто-то ещё пожелает ответить).
    Я изначально и насчёт fixes.inc хотел сказать, что его просто стоит держать у себя в памяти и знать какие баги он правит, дабы использовать его для исправления этих багов, когда понадобиться. Но если fixes.inc во многих случаях решает действительно актуальные проблемы (например, правит кривости синхронизации во время смерти в разных случаях и т.п.), с которыми практически каждый скриптер сталкивается, кто хотя бы пытался писать мод с нуля, то в случае с TimerFix ситуация совершенно противоположная.
    Ну и ещё я был уверен, что если против fixes.inc что-то скажу, то кто-то обязательно влезет в полемику на этот счёт, чего я не хотел. Но прилетело оттуда, откуда не ждали (со стороны TimerFix) :D

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

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


    UPD: В общем, как я вижу, мы уже сошлись во мнении о том, что TimerFix - это далеко не обязательный, хоть и полезный плагин. Предлагаю вопрос с важностью этого плагина закрыть и озвучить лишь те вопросы, которые тебя интересуют, дабы не разводить ещё больший разговор об одном и том же)
    Последний раз редактировалось DeimoS; 13.04.2019 в 23:20.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    С тем же успехом ты можешь уйти сейчас в лес и начать строить там убежище на случай нападения динозавров. А что, ведь факт того, что динозавры вымерли - такое себе оправдание. Надо заранее просчитывать все варианты, независимо от их актуальности!
    И снова в ход идут откровенно преувеличенные аналогии, причём преувеличенные на грани вырывания из контекста. В который раз приходится повторять, что установка fixes2 или TimerFix - это не что-то сложное и сверхзатратное, это делается буквально за минуту.


    Цитата Сообщение от DeimoS Посмотреть сообщение
    И вместо одного таймера + gettime, данные которой будут использоваться в куче других случаев (даже не связанных с вызовом кода в определённое время. Например, gettime пригодится для текстдрава часов), ты создашь кучу отдельных таймеров, продумав для них альтернативную реализацию всего того, что решалось через switch и, в итоге, лишь усложнив код + выделив лишнюю оперативную память.
    Собственно, главный вопрос, который я задаю уже который пост подряд: зачем? Зачем, если и без того всё работает вполне нормально?
    Я где-то говорил, что нужно менять и без того рабочий код? Нет, это, как минимум, нецелесообразно. Тот подход, который я предлагаю, есть смысл использовать в моде с 0, но никак не комбинировать с применением другого, более распространённого подхода. И, касаемо текстдрава часов, повторюсь, что да, для отдельных случаев gettime() тоже понадобится.


    Цитата Сообщение от DeimoS Посмотреть сообщение
    Почему ты опять используешь такие нерелевантные примеры? Никто в здравом уме не будет делать какое-либо наказание или любое подобное действие на таймерах (даже сверхточных), ибо, как минимум, нужно иметь возможность сообщать игроку то, сколько времени осталось до окончания отсчёта.
    А с чего ты решил, что это должен быть таймер с периодом именно на час? Речь была об односекундном таймере (сам в этом удостоверился, копаясь в паблик-моде, который, как оказалось, и послужил основой для того сервера), в котором, среди других задач, производился декремент переменной-счётчика (вернее, элементов массива), если она не равна нулю. Как следствие, можно было узнать время до выхода на свободу, это время сохранялось при перезаходе на сервер, но присутствовала свойственная всем таймерам погрешность, на которую жаловались игроки в описанном мной случае. Что в этом "не релевантного"?


    Цитата Сообщение от DeimoS Посмотреть сообщение
    Вся эта ситуация похожа на ситуацию оптимизаторов, которые задрачивают на миллисекунды, прогоняя код, который будет раз в десяток минут вызываться, через цикл на миллиарды итераций. Что в том случае от такой оптимизации игровой процесс никак не изменится, что в этом. Собственно, как и какая-либо нагрузка на сервер (скорее, наоборот мы потреяем больше оперативы на дополнительные таймеры для разных действий, которые раньше либо вообще без таймеров обходились, либо срабатывали через switch, на вызов которого уходило мизерное количество времени).
    Примерно то же самое можно сказать про твой взгляд относительно "отжирания ресурсов": при нормальной своей реализации таймеры настолько легковесны, что их ничтожно малой нагрузкой (как на ЦП, так и по потреблению памяти) можно приберечь и сконцентрироваться на том подходе, который в первую очередь удобен тебе самому.


    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну а теперь возвращаемся к вопросу автора темы и видим, что он спрашивает какие плагины стоит ставить сразу (то бишь, обязательно). А потом находим моё первое сообщение в этой теме и видим ответ: нет обязательных плагинов, ибо всё нужно использовать по случаю. Потом видим как автор темы упоминает TimerFix, а я отвечаю, что и этот плагин далеко не обязателен, а решает конкретные задачи. Собственно, ты сейчас говоришь то же самое :)
    Раз так, то, скорее всего, это было банальное недопонимание с моей стороны, каюсь :)
    В любом случае, я не жалею об участии в сей дискуссии, ибо подвернулся замечательный повод получше изучить, что находится "под капотом" у таймеров (как стандартных, так и из сторонних реализаций) и причины, почему таймеры в SA-MP - отстой. При желании материала может на целый урок хватить.


    Цитата Сообщение от DeimoS Посмотреть сообщение
    Опять же, если ты посмотришь на описание всех этих плагинов, то авторы не пишут там о каких-то утечках памяти или чём-то ещё, что было найдено тобой для wiki.
    Так я и не раз упоминал, что краша ещё нужно добиться - т.е. создавать много таймеров, для чего, скорее всего, понадобится много игроков и значительное время без рестарта мода. Либо в SetTimer(Ex) использовать спецификаторы "a" или "s" - тогда смерть будет быстрой :) Но похоже, что, к счастью, ими никто и не пользуется, раз нет жалоб.


    Цитата Сообщение от DeimoS Посмотреть сообщение
    UPD: В общем, как я вижу, мы уже сошлись во мнении о том, что TimerFix - это далеко не обязательный, хоть и полезный плагин. Предлагаю вопрос с важностью этого плагина закрыть и озвучить лишь те вопросы, которые тебя интересуют, дабы не разводить ещё больший разговор об одном и том же)
    Согласен, хотя вполне возможно, что есть смысл создать список инклудов и плагинов из разряда "must have", по возможности с обоснованием их выбора (по крайней мере, судя по вопросам в этой теме, для подобного списка должен быть спрос). Впрочем, это уже тема для отдельного обсуждения.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  8. #18
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    И снова в ход идут откровенно преувеличенные аналогии, причём преувеличенные на грани вырывания из контекста.
    Она такая преднамеренно, ибо я уже которое сообщение подряд пытался донести одну и ту же мысль, а ты отвечал на это одним и тем же образом :) Уже не знаю как ещё донести то, что с проблемой таймеров никто осознанно не сталкивается из тех, кому не требуются точные таймеры.

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

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    А с чего ты решил, что это должен быть таймер с периодом именно на час? Речь была об односекундном таймере (сам в этом удостоверился, копаясь в паблик-моде, который, как оказалось, и послужил основой для того сервера), в котором, среди других задач, производился декремент переменной-счётчика (вернее, элементов массива), если она не равна нулю. Как следствие, можно было узнать время до выхода на свободу, это время сохранялось при перезаходе на сервер, но присутствовала свойственная всем таймерам погрешность, на которую жаловались игроки в описанном мной случае. Что в этом "не релевантного"?
    Мой косяк. Ну стоило тогда более конкретизировать пример. Твоё "полагаясь только на таймеры" меня и ввело в заблуждение :)
    Опять же, в этом случае гораздо разумнее использовать gettime, ибо и действий гораздо меньше будет лишних, и точнее. Даже при использовании точных таймеров лучше сделать упор на gettime.

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


    Хотя ещё можно совместить оба метода, записав время gettime в переменную для отображения остатка времени, а таймер запустить не секундный, а с интервалом, равным времени наказания (чтоб это самое наказание снять в конце). Это позволит избавиться от посекундных проверок, но нужно будет и с остановкой таймера заморочиться, и ещё некоторые вопросы решить, немного усложнив, в итоге, код (ну и памяти чуть больше потратить придётся, ибо нужно будет, как минимум, ID таймера хранить). Такой вариант тоже имеет право на существование. И не совсем уверен,что все эти танцы с бубном стоят того, чтоб убрать одно простое условие со сверкой значения двух переменных.

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Примерно то же самое можно сказать про твой взгляд относительно "отжирания ресурсов": при нормальной своей реализации таймеры настолько легковесны, что их ничтожно малой нагрузкой (как на ЦП, так и по потреблению памяти) можно приберечь и сконцентрироваться на том подходе, который в первую очередь удобен тебе самому.
    Напомню, что мы говорим тут про плагины, которые обязательно стоит ставить при разработке :) Именно в этом ключе я говорю о том, что прикручивать точные таймеры просто для того, чтоб они были, а не потому что они нужны - глупая затея. Точнее, я не стал бы называть такие плагины обязательными для использования, ибо всю свою суть они раскрывают только там, где действительно нужны точные таймеры (не секундный таймер с декрементом переменной, а таймеры, которые иначе никак нормально не реализовать).
    Последний раз редактировалось DeimoS; 14.04.2019 в 12:29.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 
Страница 2 из 2 ПерваяПервая 1 2

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

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

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

Ваши права

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