Rampoch / Chaotic-Onyx

The code for Baystation12's branch of SS13
http://baystation12.net/
Other
3 stars 11 forks source link

мейк водокалий грейт эгейн, сынок #279

Closed Ruforce closed 6 years ago

Epicus7 commented 6 years ago

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

Ruforce commented 6 years ago

и вместе с гибом сносить нахуй обшивку?

Epicus7 commented 6 years ago

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

Ruforce commented 6 years ago

по хуману водокалий наносит 20 дамага, делая взрыв с флешрадиусом в целый один тайл

Epicus7 commented 6 years ago

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

Ruforce commented 6 years ago

я просто люблю нестандартные пути решения проблемы

Epicus7 commented 6 years ago

А потом получается Бейстейшен 12. У них там целый клуб таких любителей

Rodial-Admiral commented 6 years ago

Тут вопрос в том, что мы хотим сделать. Гиб людей, принимающих эти вещества, или нормальные взрывы от гранат с сопутствующими гибами?

Rodial-Admiral commented 6 years ago

Порывшись в коде, нетрудно заметить, что дело не в "нерабочем" коде, а в том, что amount в химии рассчитывается, как round (created_volume/10, 1), т.е. при реакции больших бутылочек 120 и 120 на выходе получаем 240 и amount, соответственно, 24. Весь цимес в том, что на мобах это значение режется в два раза. А если они живые - в ЧЕТЫРЕ. Смотрим код взрывов - 24/4 = 6. Даже не будем говорить про параметр девайстейшона, посмотрим на HEAVY. Он равен единичке тогда, когда amount/6 больше или равен двойке. То есть даже если мы вольем одновременно (хотя это невозможно) две больших банки воды и калия в хумана, у него не будет heavy-параметра. LIGHT появляется тогда, когда amount/3 больше или равен двойке. Т.е. чтобы у нас взрыв был с LIGHT=1 внутри живого человечка, мы должны влить ровно по одной большой банке воды и калия одновременно. Или больше - но это просто технически неосуществимо. А теперь смотрим на FLASH и получаем, с учетом реалий взрывов (применение таблеток по 60, а не полных банок по 120) - как раз получается небольшая вспышка. (но проблема в том, что даже в гранатопроизводстве из этих реагентов параметра DEVASTATION фактически не достичь без блуспесс-баночек. Так-то. У нас всё кривое) К СУТИ ДЕЛА Мы никак не можем зафиксить эти взрывы, кроме как подкруткой параметров. Но веселых гибов, скорее всего, не возникнет, а с учетом дебаффа на взрывы внутри живых мобов наша подкрутка приведет к тому, что смесь, способная нанести серьезный вред при вливании в человека, будет подрывать станцию на уровне DEVASTATION. tl;dr Эпикус, этот новый прок не дает никакой дополнительной нагрузки на код. Если прямо совсем не хочешь впиливать всё в таком виде, то придется менять функцию reagents_explosion, вводя туда костыли с просмотром холдера. А сейчас она довольно универсальная. Прок Соляра впилен под проверку на living, т.о. с архитектурой всё в норме. Не знаю, короче говоря, на что ты так триггернулся. Если лезть во взрывы, их придется перепиливать целиком. Нам оно надо?

Ruforce commented 6 years ago

без деления значения на четыре 120/120 подрываются аж в лимит, да.

ZerlGray commented 6 years ago

водно каливые лимитки, хотет А нельзя просто параметр деления уменьшить. Не 4, а что нибудь поменьше?

Rodial-Admiral commented 6 years ago

Смотрим на 120/120 amount = 240/10 = 24 Девастейшон = -1 + 24/12 = 1 Хеви = -1 + 24/6 = 3 Лайт = -1 + 24/3 = 7 У нас бомбкап 1,3,7 стоит?

Rodial-Admiral commented 6 years ago

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

Ruforce commented 6 years ago

а, не, наебал, я в полтора выкрутил эквивалент

Rodial-Admiral commented 6 years ago

Тут проблема в том, что бейцы занерфали взрывы внутри живых хуманов в четыре раза Логики в таком нерфе нет, есть логика в нерфе внешнего взрыва и впиливании последствий для тех, в ком происходит взрыв Ну скажем, 60/60 Хеви получается (вне человечков) -1+12/6 = 1 Логично предположить, что если такой бах сдерживается, так сказать, плотью То должно происходить что-то, похожее на гиб, а наружу уже выходит несколько порезанный взрыв (нахрен логику, на самом деле, но это же ССка) А если реактивов было меньше и хеви-параметра нет, то просто травма внутренних органов и брутдамаг по частям тела.

Epicus7 commented 6 years ago

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

Соляр берет и пишет точно такой же код рядом, который не взрыв вызывает, а гиб. Что мешает в set_up добавить проверку на isliving(), сохранить ссылку на моба, если это моб и добавить вызов гиба в start(), если моб определен?

Зачем вот это вот все: if (round(amount/12) > 0) if (round(amount/6) > 0) if (round(amount/3) > 0) if (flashing && flashing_factor)

Потом опять: if (round(amount/8) > 0) else if (round(amount/4) > 0) else if (round(amount/2) > 0)

Если не нравятся коэффициенты, может их и для взрыва подкрутить надо? Или код Бея писали гении, их код трогать нельзя?

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

Rodial-Admiral commented 6 years ago

Нет, он потеряет. Я выше объяснил, почему. Одновременно происходит взрыв по стандартной логике, а прок прописывает последствия для моба этого взрыва, порезанного в четыре раза.

Rodial-Admiral commented 6 years ago

Мешает то, что у тебя будет одной лишней проверкой в коде больше. А сейчас это впилено под уже существующий иф.

Rodial-Admiral commented 6 years ago

Коэффициенты со внешними взрывами сейчас, в принципе, для водокалия относительно логичны. Ты читаешь комментарии-то?

Rodial-Admiral commented 6 years ago

В бейонде есть функция логарифма?

Ruforce commented 6 years ago

вроде как, да.

Rodial-Admiral commented 6 years ago

Как она выглядит? С log тут точно проблема

Ruforce commented 6 years ago

вы в какие дебри-то полезли. image

Rodial-Admiral commented 6 years ago

Просто твой код можно сократить вот в это вот if (amount >= 2) holder.ex_act(round(max(1, 4 - log(2, amount))))

Rodial-Admiral commented 6 years ago

Из очевидных соображений: amount >= 8 => dmglevel = 1 4 <= amount < 8 => dmglevel = 2 2 <= amount < 4 => dmglevel = 3 amount < 2 => dmglevel = 4

Ruforce commented 6 years ago

как все сложно

лучше бы дальше в гробу лежал!

Rodial-Admiral commented 6 years ago

действительно

Ruforce commented 6 years ago

и тебе советую тоже в гробу лежать!

Epicus7 commented 6 years ago

Нет, он потеряет. Я выше объяснил, почему. Одновременно происходит взрыв по стандартной логике, а прок прописывает последствия для моба этого взрыва, порезанного в четыре раза.

Но это не объяснение. Ты ставишь проверки на то, инициализирована ли у тебя новая переменная holder_mob и код остается таким же универсальным.

Коэффициенты со внешними взрывами сейчас, в принципе, для водокалия относительно логичны. Ты читаешь комментарии-то?

(но проблема в том, что даже в гранатопроизводстве из этих реагентов параметра DEVASTATION фактически не достичь без блуспесс-баночек. Так-то. У нас всё кривое)

А ты сам читаешь, что ты пишешь? То у тебя коэффициенты нормальные, то рассуждаешь на тему их фикса.

Мешает то, что у тебя будет одной лишней проверкой в коде больше. А сейчас это впилено под уже существующий иф.

Сейчас бы считать количество проверок. Что важнее: количество проверок или читаемость кода?

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

Есть отдельный класс/datum/effect/effect/system/reagents_explosion. Просто запихать в него всю логику и вызвать его ОДИН раз, зачем во внешний код вытаскивать лишние вызовы? Чтобы не было проверки.

И нет, не надо сокращать код в это:

Просто твой код можно сократить вот в это вот if (amount >= 2) holder.ex_act(round(max(1, 4 - log(2, amount))))

Читаемость кода важнее, чем псевдооптимизизации. Кстати log работать будет, скорее всего, медленнее чем 4 ифа.

Rodial-Admiral commented 6 years ago

Не знаю, где он не читается.

Rodial-Admiral commented 6 years ago

Это не псевдооптимизация, залезь в матчасть. я погромист это фотошоп

ZerlGray commented 6 years ago

Я фотошоп, это матчасть. Залезь в погромиста. А вообще, разве логарифм вычисляется не дольше, чем пара условий?

Rodial-Admiral commented 6 years ago

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

Ruforce commented 6 years ago

давайте просто добавим комментарий, который сообщает месторасположение прока

че вы

Rodial-Admiral commented 6 years ago

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

Rodial-Admiral commented 6 years ago

И снова рубрика "для тех, кто в танке". Сейчас реагент_экспложен работает по принципу Взрывной Уклад Един Ему плевать на холдера, он даже призывает того, в ком произошел взрыв, магией поиска людей в радиусе 1. Если ты в самом начале этой функции впилишь что-то в духе ЕСЛИ (носитель ПРИНАДЛЕЖИТ ТИПУ моб); ИНАЧЕ То ты сделаешь две функции. Впиханные в одну. С т А н Д а Р т Ы о Р г А н И з А ц И и К о Д а

Ruforce commented 6 years ago

ты просто не понимаешь всю силу ифов

Ruforce commented 6 years ago

он даже призывает того, в ком произошел взрыв, магией поиска людей в радиусе 1.

охуительно

Rodial-Admiral commented 6 years ago

Еще одна очевидная вещь - мы не можем в функцию, вызывающую взрыв, работающую ПАРАЛЛЕЛЬНО получению дамага непосредственно от реакции, впиливать лишний нагружающий ее функционал. Вывод - почему бы не впилить строчку с совершенно прозрачной логарифмической зависимостью туда, откуда Соляр исходно вызывает свой прок?

Rodial-Admiral commented 6 years ago

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

Rodial-Admiral commented 6 years ago

А, вейт. Не учтена одна вещь. Нитроглицериновые взрывы в хуманах тоже режутся в четыре раза.

Ruforce commented 6 years ago

в четыре раза

image

Rodial-Admiral commented 6 years ago

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

Epicus7 commented 6 years ago

работающую ПАРАЛЛЕЛЬНО

прозрачной логарифмической зависимостью

Лол, да ты угараешь.

Короче я не вижу смысла с тобой спорить из-за 10 измененных строк. Я вечером сам напишу так, как считаю нужным и посмотришь, если тебе интересно. Нет, ПРОЗРАЧНЫХ логарифмов я пихать туда, где они не нужны, не буду.

Rodial-Admiral commented 6 years ago

еее индусский кодер детектед спешите видеть.

Rodial-Admiral commented 6 years ago

"Меня недавно спросили, почему программисты ненавидят работать с чужим кодом. Долго думал, как донести до обычного пользователя всю суть пиздеца. Решил привести небольшую аналогию:

Вот представь, что тебе доверили достроить за другим прорабом лабораторию на острове. Ты приходишь на объект, а там кроме недостроенного здания: огромный вентилятор (размером со здание), большой воздушный шар и комната набитая швабрами. Почесав голову, ты разбираешь этот хлам и доделываешь лабораторию. Сдаешь объект ученным, но через 5 минут они выбегают с криком: "УТЕЧКА ЯДОВИТОГО ГАЗА!!!".

Rodial-Admiral commented 6 years ago

Нет, ну если ты сделаешь это нормально, я буду совершенно таки не против посмотреть

Rodial-Admiral commented 6 years ago

вечер :thinking: