Дядя Миша писал: Зашибись, то есть мы ещё на разных платформах можем столкнуться с разным поведением?
Всё ещё хуже - можешь указать другую версию STL прямо в опциях gcc при компиляции.
Добавлено 21-02-2025 в 10:10:
Но в целом - STL стандартизован, разница - в идеале - должна быть только в частях, не описанных стандартом, то есть где поведение unspecified (не путать с undefined). Вот только никто не идеален, увы.
XaeroX писал: А можно, пожалуйста, пример такой реализации? Не совсем понял, о чём тут речь.
Да обычная хэшмапа поверх массива, как в сишке, без плюсов даже.
Добавлено 21-02-2025 в 20:14:
Цитата:
Дядя Миша писал: Зашибись, то есть мы ещё на разных платформах можем столкнуться с разным поведением?
В теории да. На практике не слышал за всё время, чтоб кто-то с таким сталкивался, но думаю вполне ненулевой шанс этого есть. Потому что в том же линуксе даже с libc какой-то бардак полный которых есть несколько штук непонятно зачем разных, между собой несовместимых.
SNMetamorph писал: Да обычная хэшмапа поверх массива, как в сишке, без плюсов даже.
Как раз "хешмапа поверх массива" и позволяет сохранить валидными итераторы при её изменении. Там другая проблема - нужно заранее выделить этот массив, то есть знать число значений хэш-функции.
SNMetamorph писал: Основную работу завершил около недели назад, теперь занимаюсь побочными делами: дорабатываю save-restore систему, чтобы можно было читать/писать значения через лямбда-коллбэки, т.к. текущая система может работать только со значениями которые находятся по некоему оффсету в памяти относительно объекта самой энтити.
В общем, возиться с save-restore системой я закончил и меня очень устроило, каким образом её получилось неинтрузивно доработать под новый код. Теперь она полностью удовлетворяет новым требованиям. Далее я начал переделывать код оружий под новую систему, 8 оружий из 14 уже готово, дело (почти) за малым. На последок останутся Egon, Gauss, Satchel и RPG - с ними возни будет побольше, чем со всем остальным. Ну а после того, как адаптирую весь этот код, останется только сделать окончательный обзор сделанных изменений и внести мелкие правки, если это потребуется. И в общем-то можно будет наконец-то мерджить этот пулл реквест, над которым я уже 8 месяцев работаю.
После этого я планирую начать доделывать до конца освещение, сейчас над этим ведёт работу ncuxonaT, и у него есть много наработок, но деталями исследованного и проделанного он пока ещё не делился. Ну вот и получается, я приму от него эту эстафету.
Краткие итоги проделанной работы (как это вижу я):
1. Теперь для компиляции требуются свежие версии студии, с поддержкой лямбд. На старых этот код уже не соберётся
2. Никакого нового функционала в процессе не добавилось, для пользователя абсолютно ничего не изменилось
3. Код стал нечитабельным и непривычным для пользователя. Лямбды ужасно уродуют код, на него без слёз нельзя смотреть.
Цитата:
SNMetamorph писал: После этого я планирую начать доделывать до конца освещение
Дядя Миша писал: Теперь для компиляции требуются свежие версии студии, с поддержкой лямбд. На старых этот код уже не соберётся
У меня нет задачи поддерживать что-то старее чем C++17 (которому уже как 8 лет), как и задачи поддерживать что-либо кроме актуальных версий Windows/Linux/Android. Насчёт MacOS не знаю: во-первых, эта платформа никому из релевантных юзеров не интересна, во-вторых неясно, можно ли её поддерживать малыми усилиями, как это и обстоит с другими платформами. Вполне возможно что морочиться с её поддержкой не будет стоить потраченного времени вообще.
Цитата:
Дядя Миша писал: Код стал нечитабельным и непривычным для пользователя.
Если б я его хотел оставить привычным, я бы его тогда не рефакторил. Моя задача напротив состоит в том, чтобы хотя бы частично разгрести ту кучу дерьма и откровенно плохих (вероятно, сделанных в спешке) решений, которых в HLSDK немало (одним из которых как раз был предикт оружия). Но задачи сделать всё идеально нет - напротив, исправить надо всё только самое плохое. Причём, некоторые вещи даже не требуют больших усилий, но делают работу с SDK гораздо проще, как например исправление банального header hell. Довольно классическая ситуация, когда кто-то начинает ковырять код в SDK, что-то меняет в хидерах, и на него сваливается тонна абсолютно невнятных ошибок, и новички абсолютно теряются
Цитата:
Дядя Миша писал: Никакого нового функционала в процессе не добавилось, для пользователя абсолютно ничего не изменилось
Ну это пускай юзеры сами прокомментируют. Если конечно кто-то из них ещё заходит на форум, в чём я вообще не уверен, ибо давно все уже ушли кто в ВК, кто в Discord, некоторые из них вообще только в ЛС мне пишут.
Что касательно самих юзеров, мне известно как минимум 5 живых проектов, из которых 1 уже не далёк от релиза (та самая Ионизация). Вполне возможно кто-то делает что-то ещё и я об этом не знаю, или же банально я кого-то забыл: https://github.com/SNMetamorph/Prim...ased-on-primext
SNMetamorph писал: Моя задача напротив состоит в том, чтобы хотя бы частично разгрести ту кучу дерьма
Так народ вообще лишний раз в сейв-рестор не лезет и не хочет этим заниматься. Хоть с лямбдами, хоть без. А в C++ ты в любом случае обречён прописывать метаинформацию руками. Хоть в какие макросы ты это обверни.
Если кто-то что-то и добавляет в SDK, не понимая сути, он это делает строго по туториалу. Ты же своими действиями просто обнулил нахрен все туториалы, которые копились годами. Теперь их не добавишь. Молодец.
Если же кто-то понимает что он делает, то он и без тебя там всё перепишет, как ему потребно, тот же SoloKiller, к примеру.
Ну и да, я сильно сомневаюсь, что автор Ионизации что-то кодил в SDK, т.к. он не по этой части. Но если бы туторы не утратили актуальность - мог бы что-то и добавить. Кстати Aynekko начинал именно так - добавлял туторы и потихоньку начал понимать что он делает, подразобрался и набрался опыта.
Ты для всех новичков просто закрыл нахрен эту возможность и сидишь довольный. Зато теперь всё на лямбдах стало, какая радость.
Я вообще не понимаю зачем там лямбды нужны.
Добавлено 09-03-2025 в 15:56:
ЗЫ. Я ведь в своё время так и написал: не стану трогать в ксаше стоковый код оружия, чтобы сохранить возможность добавлять туда туторы, чтобы была совместимость. А ты об этом совершенно не подумал.
Дядя Миша писал: Если кто-то что-то и добавляет в SDK, не понимая сути, он это делает строго по туториалу. Ты же своими действиями просто обнулил нахрен все туториалы, которые копились годами. Теперь их не добавишь. Молодец.
Если же кто-то понимает что он делает, то он и без тебя там всё перепишет, как ему потребно, тот же SoloKiller, к примеру.
Ну и да, я сильно сомневаюсь, что автор Ионизации что-то кодил в SDK, т.к. он не по этой части. Но если бы туторы не утратили актуальность - мог бы что-то и добавить. Кстати Aynekko начинал именно так - добавлял туторы и потихоньку начал понимать что он делает, подразобрался и набрался опыта.
Ты для всех новичков просто закрыл нахрен эту возможность и сидишь довольный. Зато теперь всё на лямбдах стало, какая радость.
Я вообще не понимаю зачем там лямбды нужны.
Я каждодневно мониторю англоязычное коммьюнити (которое гораздо больше русскоязычного) и прекрасно вижу, как это всё происходит. Туториалов там тоже кратно больше, спросить есть у кого, но в итоге народ всё равно сегментируется на две чётко очерченных группы - первая это те, кто ничего осилить не может даже с туториалами и/или персональной помощью (их тот самый Solokiller отправляет учить C++, 90% людей на этом этапе отваливаются), и вторая это те, кто просто своим усердием добивается чего планировалось даже без какой-либо помощи извне, либо с её минимальным количеством (что мне кажется как раз таки про Aynekko и в том числе). То есть по итогу все эти туториалы, да и персональная помощь, в общем-то не делают особой погоды, а ключевую роль играют собственные усилия человека. Мне прекрасно понятно, почему оно так - HL-моддинг в плане программирования никогда не был особо дружелюбным, во-первых банально потому что там не простой скриптовый язык, а мешанина из C/C++, притом ещё и с отвратительным кодстайлом и самой структурой проекта. Это, конечно, не идёт ни в какое сравнение с гаррисмодовским или роблоксовским Lua. Так что попытки свести туториалы к копипасте (из-за чего приходится категорически не вносить изменений в код) тут буквально как мёртвому припарка. Англоязычное коммьюнити в свою очередь тоже попытались сделать некий проект в лице Unified SDK, куда можно было бы копипастить код из их же туториалов с TWHL, но уже давно видно, что это не работает как задумано.
Потому что люди, пытаясь делать мод без базового знания C++, не могут даже самые элементарные ошибки заметить и уж тем более исправить. И таких вот подавляющее большинство.
СолоКиллер им токсично отвечает конечно. Ну впрочем - его дело.
Я собственно именно поэтому и говорю, что если народ хочет новую пушку или нового NPC (законное вобщем-то желание), не надо его отправлять учить C++. Не надо отправлять его учить C# или Lua. Человеку не нужно знание языка. Ему новый монстр нужен. Или пушка. Тут классическая подмена понятий. Ему бы такой скриптег с параметрами, чтобы добавил и готово.
Там визуально интуитивно можно за полминуты разобраться. И не надо ставить никакую студию. Потому что человек за студией полезет на торренты, ему там насуют полную панаму вирусов и ему будет уже не до игр.
SNMetamorph писал: их тот самый Solokiller отправляет учить C++
Звучит жестоко
Цитата:
SNMetamorph писал: HL-моддинг в плане программирования никогда не был особо дружелюбным
Ты скачиваешь архив с сорцами Спирита, распаковываешь, открываешь проект и одной кнопкой мгновенно собираешь его в бинарник.
Хотя я никогда не лез в оружия, да.
А что там более дружелюбно чем моддинг HL? На том же Луа в роблоксе, если это эталон, как долго происходит настройка проекта? Нужно ли лезть в консольные менеджеры пакетов как в Питоне?
Что дают эти лямбды ваши? Сейврестор поглядел, не увидел их о_О
Crystallize писал: На том же Луа в роблоксе, если это эталон, как долго происходит настройка проекта? Нужно ли лезть в консольные менеджеры пакетов как в Питоне?
Насчет конкретно роблокса не знаю, но в гаррисмодовском Lua вся подготовка это создание текстового файла с .lua расширением, и всё. Тебе даже по факту никакая IDE не нужна.
Цитата:
Crystallize писал: А что там более дружелюбно чем моддинг HL?
Не упускай деталь, что я именно про моддинг в контексте программирования говорил. HL-моддинг конкретно в плане работы с контентом наверное самое дружелюбное из того что есть, примерно наравне со всеми играми на Source движке, включая и гаррис мод.
Что дружелюбнее в плане работы с кодом: майнкрафт, гмод, роблокс, AMXX (боже упаси, но факт) и вместе с ним же Pawn который в SAMP используется (я сам с этого и начинал кодить в начале 10-х). Что точно НЕ дружелюбнее чем HLSDK, так это скриптинг под Skyrim. Он просто отвратителен и ужасен, у них там используется свой скриптовый язык и они умудрились сделать так, что оно хуже всего остального существующего, даже лоу-левельных языков. Левел-эдитор у них тоже просто отвратителен, неописуемо ужасен. Я очень слабо себе представляю, как при таком блевотном инструментарии народ сделал так много модов на него, но это опять таки подтверждает мой поинт про то что в моддинге народ на 2 принципиально разных группы сегментируется.
Цитата:
Crystallize писал: Что дают эти лямбды ваши? Сейврестор поглядел, не увидел их о_О
Если ты посмотришь мой PR, то увидишь, что в сейв-ресторе лямбды там используются только в одном месте и дважды. А ещё то, что это существующий код вообще никак не затрагивает. Я не зря упомянул про то, что всё получилось сделать неинтрузивно.