Перейти к контенту
Азраэль

Курилка программистов

Рекомендуемые сообщения

Ну, вообще-то приведенный вариант - он уже тоже "несколько" устарел, но по смыслу - да.

в call_upd3() мы проверяем - есть ли ожидающие своей очереди арты. Если есть - проверяем еще и условия, что пора. В простейшем варианте - такое условие - время: n игровых секунд от начала игры, допустим.

(в своем варианте я заменил на "от загрузки", но это не принципиально).

 

В не простейшем - но это уже разговор о вкусе фломастеров - я бы предпочел вариант "насыщения" аномалии, а не время.

 

Назвать это таймером - можно и назвать, конечно. Почему ж нельзя ? Если хочется ?

 

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

 

 

	if t5000i == 0 then	-- ни чем не заняты ?
		if global_time_ms >= t5000t then t5000t, t5000i = global_time_ms + t5000q, 1
			-- здесь можно сделать что-нибудь полезное
		end
	else
		gp_fn =  t5000[t5000i]	-- выполняем последовательно что там еще есть
		if gp_fn then t5000i, amk.oau_watchdog = t5000i + 1, gp_fn[2]; gp_fn[1]()
		else t5000i = 0		-- и используем остаток
	end	end

Но это уже, простите, уже совсем не таймеры. ;)

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

Мы уже выяснили, что есть сложности с формулировками :)

Таймер - нечто, позволяющее выполнить какое-либо действие через минимальное определенное время © Примерно так. Каким образом это нечто функционирует, вопрос реализации.

И тут самое интересное - как не извращайся, количество проверок на такие события не изменится. Другое дело интерфейс. Я за удобство, а быстрее работать заставить вряд ли выйдет. Точнее не так - ресурсов использовать меньше. Все ветвления и "медленные" обработчики делаются опять же разными способами, не меняя сути в принципе.

  • Нравится 1

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

Ссылка на комментарий

есть ли ожидающие своей очереди арты

Само собой, пустоту мы и проверить "на пора" не сможем.

вариант "насыщения" аномалии

Опять же, что такое "насыщение"?

if global_time_ms >= t5000t then

Для меня это и есть таймер. Если время пришло, фигачим что нибудь (а именно, выполнение этих самых функций из t5000, я бы так сделал). Остальное (я про t5000i) - дополнительная надстройка, нужна она или нет, решать разрабу.

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

Если так немного отстраниться, то в этом случае можно запилить "каскад", т.е. вызвали первую функцию по срабатыванию на global_time_ms >= t5000t, далее перед последним эндом вызываем следующую (асинхронно, это вообще возможно в луа?), и так далее. Кстати, есть шанс того, что таймер может вновь сработать еще до завершения каскада.

  • Согласен 1

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

Ну, о терминологии: "таймер" и "очередь" - вообще-то взаимоисключающие понятия.

Таймер - это мы должны бросить все, и немедленно выполнить. Очередь - это именно когда дойдет - вот тогда и...

 

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

 

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

 

 

Так вот, в первоначальном утверждении, с которого начался сыр-бор, было о том, что вот нет в игре ничего такого, чтоб "вот прям счаз все бросить, и начать выполнять это", чтобы было обусловлено именно временем.

Ссылка на комментарий

Ну, о терминологии: "таймер" и "очередь" - вообще-то взаимоисключающие понятия.

Нет, это просто разные понятия

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

... о! можно попросить словарик? :) Ну какая у тебя терминология. А то постоянно ты непонят остаешься.

Так вот, в первоначальном утверждении, с которого начался сыр-бор, было о том, что вот нет в игре ничего такого, чтоб "вот прям счаз все бросить, и начать выполнять это", чтобы было обусловлено именно временем.

Сие к таймерам ну никак не относится.

  • Нравится 2

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

Ссылка на комментарий

Но периодически длинные апдейты приводили к тому, что просыпаешься на полчаса позже

 

 

Даже при использовании fastcall-а "пролетало"? %)

******************

Вообще по сну просто интересная заметка, по крайнем мере работающая в ЗП - для перемотки времени можно использовать банальный "спидхак" из какого нибудь Cheat Engine например. (или реализовать движковый аналог)

 

Он ускоряет все процессы игры в 2-100 раз, тем самым по сути несколько игровых часов пролетают за пару секунд как при перемотке, при этом происходят абсолютно все события как будто игрок эти часы просто стоял на месте и ждал. При этом те же апдейты продолжают вызываться аналогично с ускорением. Это самая что ни на есть "настоящая" реализация сна.

 

То-есть решается проблема когда игрок "засыпает" рядом с бежащим на него монстром и просыпается через 10 игровых часов рядом со всё тем же всё ещё бежащим на него монстром.

 

Правда можно столкнутся с проблемой что после долгого сна в игре может что то слететь. :D

По типу того как слетал game_time() после, кажется, игрового месяца. 

(Это как если бы стоять на одной локации несколько реальных часов без перезагрузок)

Изменено пользователем *Shoker*
  • Нравится 2
  • Полезно 1

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

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

Просто надо помнить, что точно и через него ничего не отмерить. Где-то сам же malandrinus и описывал.

 

game_time() - проблема с разрядностью. Да, так называемое "45-е мая". Ну, тут все по разному решают. Я вот, опять же, остановился на том, что 45 игровых дней на одной локации без единой перезагрузки сидеть вряд-ли кто будет.

 

 

2 xStream, к вопросу об определениях:

"Таймер - нечто, позволяющее выполнить какое-либо действие через минимальное определенное время" - в принципе, годится. Хотя, вообще-то, "гарантированно выдерживаемый интервал времени".

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

Всем привет!

Вот заглянул в тему посмотреть что вы тут курите. :)

Накурили примерно на 100 милиБздэнов, не меньше.

Бздэн - мера спёртости воздуха, равная такой спёртости воздуха, при которой эталонный топор из платиноиридиевого сплава массой в 1 килограмм висит на высоте 1 метр в течении 1 секунды. Ввиду очень большой величины, на практике для измерения спёртости воздуха пользуются мили- или микроБздэнами.)

 

По поводу рефакторинга... Я всегда с уважением относился и отношусь к любому чужому труду. Наработки команды АМК и лично xStream (мадам, снимаю шляпу) для того времени были настолько прогрессивны, что, я не побоюсь этого слова и скажу, - они опередили время. На базе АМК было сделано немало интересных модов. Более того, и сейчас некоторые наработки лично я использую. А почему бы и нет? Если меня работа этой функции устраивает, то зачем мне ее переписывать? Да, время не стоит на месте, нужды и требования растут и многое пришлось переписать самому "в духе времени". Но ни в коем разе это не умоляет заслуг и не затмевает гения людей, творивших в команде АМК, да и не только их. Поэтому, давайте будем толерантны до конца. То, что нас уже не устраивает - обсудим и перепишем, но без каких либо оскорбительных выпадов в адрес авторов.

По поводу таймеров... В метрологии есть понятие допусков и если измеряемая величина укладывается в это поле допусков, то точность считается приемлемой. Поэтому, я и задался вопросом - каков допуск на сон? :russian_ru:

Катастрофично ли дать поспать ГГ на полчаса больше? И для себя пришел к выводу, что ни на что в сюжете точность плюс/минус полчаса не повлияют, а, стало быть, лично я этим заморачиваться не стану. Другой вопрос, если таки нужно отследить временной интервал с более высокой точностью. Например, "...Штирлиц проснется ровно через двадцать минут. Эту привычку он выработал в себе годами...". Тут никуда не денешься, придется быстрым апдейтом отслеживать или еще как.

Ссылка на комментарий

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

 

А вот вопрос о том, что из этого следует использовать в 2015 году, и в каком виде - вопрос уже другой.

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

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

В общем, даже странно, что именно об этом только здесь 5 страниц, не считая других тем, и не считая того, что отправилось в корзину ну вот хотя бы за пару последних месяцев.

 

Остается только еще раз повторить:

Посчитали нужным сделать - сделали. Посчитали нужным выложить - выложили. Посчитали нужным описать: что сделано, как работает, как используется - опять же, написали.

Увидели, что нечто можно/нужно поправить - опять же, выложили свой вариант.

 

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

 

Ну и дальше уже дело хозяйское, кто что для себя выберет.

 

P.S. А, да, остается только добавить, что "бывают и просто сны", и не всегда стоит искать какие-то намеки на неведомое в простых фразах, относящихся к самому предмету поста.

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

 

 

Посчитали нужным сделать - сделали. Посчитали нужным выложить - выложили. Посчитали нужным описать: что сделано, как работает, как используется - опять же, написали. Увидели, что нечто можно/нужно поправить - опять же, выложили свой вариант. Так же в принципе общеполезно может быть и "вот имеющийся вариант обладает такими вот особенностями, я их использую вот таким способом, а недостаток в моем случае ни как себя не проявляет/не мешает, поскольку вот в таких вот условиях он никогда не проявится".

То есть обсуждать и критиковать в принципе не разрешается?

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

Ссылка на комментарий

Что значит, "не разрешается" ? Где это написано ?

Просто обсуждать и критиковать можно так, чтобы с этого была какая-то польза, а можно - чтобы получилось лишь много букв.

 

"не умеете их готовить" - это и есть много букв.

Покажите, как вы их готовите - будет польза.

Изменено пользователем Dennis_Chikin
  • Согласен 1
Ссылка на комментарий

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

Ссылка на комментарий

 

 

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

 

 

Остальная критика как по мне - снобизм.

А я считаю, что те, кто написал такие же велосипеды, имеют право критиковать - опыт есть.

 

 

Да и для большинства модов суперсистем

Это что за системы такие? Если вы про высокоуровневые, то у меня для вас плохие новости: вы повторяете путь тех, кто прошел "эволюцию" несколько лет назад, выдаете такие же решения, и при этом говорите, что костыльного типа решения (один в один как те, олдскульные и якобы непригодные) - айс, а получше и поэффективнее - фигня. Удачи, чо :)

 

 

оно уже есть в нормальном варианте,

Как вы смеете это использовать?! Это же суперсистема!

 

 

опять же я сам лично колоссальных различий не замечал

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

  • Согласен 1

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

Ссылка на комментарий

Вот теперь уже я хочу пояснений. Означает ли все написанное, что в 2015-ом году все обязаны делать вот так: https://dl.dropboxusercontent.com/u/27871782/amk.script

только прикрутить еще куда-то сбоку систему ивинтов и песочницу от одного конкретного автора (указать, какого именно) ?

 

Кто не хочет делать так - отключить от интернетов и сослать на лесоповал ?

Ссылка на комментарий

 

только прикрутить еще куда-то сбоку систему ивинтов и песочницу от одного конкретного автора (указать, какого именно) ?

 

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

  • Нравится 1
  • Согласен 2

Отладчик и скриптер мода OGSE. Автор схемы "Компаньоны", стреляющего БТРа и многих других полезностей :wink:

Ссылка на комментарий

Означает ли все написанное, что в 2015-ом году все обязаны делать вот так:

Это означает, что выкинуть это "вот так" вообще в принципе :) И это не зависит от года. Твой лисапед не сильно от этого отличается.

только прикрутить еще куда-то сбоку систему ивинтов и песочницу от одного конкретного автора (указать, какого именно)

Системы ивентов - всего лишь один файл! О.Д.И.Н. с более менее внятными примерами. И для его работы напрочь не нужно "вот так".

Кто не хочет делать так - отключить от интернетов и сослать на лесоповал ?

Естественно. На земле дерьмокода и так тысячи :)

  • Согласен 1

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

Ссылка на комментарий

Таки вопрос опять же: что делать с приведенным выше образцом ?

 

Указанные проблемы/возможность проблем (про "перестаравшись" и про затраты времени) - да, согласен, есть. Да, несомненно, есть спортивный элемент, в какой-то степени. Или не спортивный, а разгребая вот то, что, опять же, в приведенном примере - заодно и переписал.

 

И, отдельно, по поводу "все", "у всех" и "некрофилия" - несколько категорично. Не все и не у всех, во-первых, во-вторых - некоторым вещам тоже лет по пять-шесть.

 

 

"- Кто не хочет делать так - отключить от интернетов и сослать на лесоповал ?

- Естественно."

 

О, вот мы и дошли до сути. Благодарю, вопросов больше нет.

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

@xStream, вообще тебя не понял. Про бритву-то слышал, только в противном случае ты должна меня ткнуть носом в какую-то более менее вменяемую сборку модулей, где вот все вышеперечисленное (ивенты там, таймеры и все прочее) есть в понятном виде. Что-бы вот я конкретно я это смог использовать. Лично я никакого отношения к моддингу на амк1.4 никогда не имел и иметь не буду, т.е. я олдскульного вида костыли на него не мастерил, и уж тем более никогда нигде их не выдавал, и совсем никогда не говорил, что это - айс :).

Ну и:

 

 

А я считаю, что те, кто написал такие же велосипеды, имеют право критиковать - опыт есть.

Обратного я и не говорил, только лишь с условием что покажи свой велосипед, тогда и критикуй. 

 

 

Это что за системы такие?

Сарказм как-бы. Ну это вот всякие новомодные ивенты, хранилища и тэпэ (хотя и это все далеко не вчера придумано ;)).

 

 

Как вы смеете это использовать?! Это же суперсистема!

Видимо ты меня не поняла...

Ссылка на комментарий

 

Таки вопрос опять же: что делать с приведенным выше образцом ?

 

В музей моддинга Сталкера под стекло.

 

 

Указанные проблемы/возможность проблем (про "перестаравшись" и про затраты времени) - да, согласен, есть. Да, несомненно, есть спортивный элемент, в какой-то степени. Или не спортивный, а разгребая вот то, что, опять же, в приведенном примере - заодно и переписал.

 

 

Вы лучше вот что сделайте. В движке игры есть специальные функции для профилирования кода. Вот эти:

 

 

C++ class profile_timer {

    profile_timer ();

    profile_timer (profile_timer&);

 

    operator +(const profile_timer&, profile_timer);

    function stop();

    function start();

    function time() const;

    function __tostring(profile_timer&);

    operator <(const profile_timer&, profile_timer);

};

 

 

На них очень легко себе сделать инструмент для профилирования. Например вот такой:

https://dl.dropboxusercontent.com/u/54347025/ogse/ogse_profiler.script

 

Так вот очень советую перед тем как какие-то участки кода переписывать, замерить профилировщиком время их исполнения до рефактора. Затем если время кажется ну уж очень большим - сделать рефактор и проверить снова. Обычно (если в исходном скрипте не совсем уж лютый дерьмокод) полученные результаты напрочь, полностью и навсегда отбивают желание из спортивного интереса переделывать трейд-менеджер и остальное мелкое одноразовое добро. ^_^  Lua-подсистема на самом деле очень и очень быстрая, медленней всего в ней, как ни странно, работют вызовы функций из движка, поэтому даже тотальный рефактор всего и вся способен добавить не более нескольких процентов скорости (опять же если это не дерьмокод, где на каждом апе перебираются все 65535 объектов игры).

  • Согласен 1

Отладчик и скриптер мода OGSE. Автор схемы "Компаньоны", стреляющего БТРа и многих других полезностей :wink:

Ссылка на комментарий

 

 

только в противном случае ты должна меня ткнуть носом в какую-то более менее вменяемую сборку модулей

Тыкали. Неоднократно. Но видимо там слишком сложно с интрукцией и примерами.

 

 

Ну это вот всякие новомодные ивенты, хранилища и тэпэ (хотя и это все далеко не вчера придумано ).

То же самое - новомодному сто лет в обед. Даже у Артоса, которого так хвалишь, благополучно затырены в мод все эти вещи.

 

 

Видимо ты меня не поняла...

Поняла, но есть такая штука, как сарказм :)

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...