Closed Ruforce closed 6 years ago
и вместе с гибом сносить нахуй обшивку?
Ну если ты не хочешь взрыва, то этот код вообще выпилить надо. Я вот не понимаю, взрыв то в коде есть, но в игре, говорят, нет? Ты проверял?
по хуману водокалий наносит 20 дамага, делая взрыв с флешрадиусом в целый один тайл
Ну энивей, этот весь код лучше бы в start внести, а то у тебя получается одна и та же логика, только результат разный.
я просто люблю нестандартные пути решения проблемы
А потом получается Бейстейшен 12. У них там целый клуб таких любителей
Тут вопрос в том, что мы хотим сделать. Гиб людей, принимающих эти вещества, или нормальные взрывы от гранат с сопутствующими гибами?
Порывшись в коде, нетрудно заметить, что дело не в "нерабочем" коде, а в том, что 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, т.о. с архитектурой всё в норме. Не знаю, короче говоря, на что ты так триггернулся. Если лезть во взрывы, их придется перепиливать целиком. Нам оно надо?
без деления значения на четыре 120/120 подрываются аж в лимит, да.
водно каливые лимитки, хотет А нельзя просто параметр деления уменьшить. Не 4, а что нибудь поменьше?
Смотрим на 120/120 amount = 240/10 = 24 Девастейшон = -1 + 24/12 = 1 Хеви = -1 + 24/6 = 3 Лайт = -1 + 24/3 = 7 У нас бомбкап 1,3,7 стоит?
Водно-калиевые лимитки теоретически должны быть при применении блуспесс-баночек так точно.
а, не, наебал, я в полтора выкрутил эквивалент
Тут проблема в том, что бейцы занерфали взрывы внутри живых хуманов в четыре раза Логики в таком нерфе нет, есть логика в нерфе внешнего взрыва и впиливании последствий для тех, в ком происходит взрыв Ну скажем, 60/60 Хеви получается (вне человечков) -1+12/6 = 1 Логично предположить, что если такой бах сдерживается, так сказать, плотью То должно происходить что-то, похожее на гиб, а наружу уже выходит несколько порезанный взрыв (нахрен логику, на самом деле, но это же ССка) А если реактивов было меньше и хеви-параметра нет, то просто травма внутренних органов и брутдамаг по частям тела.
Ну вы логику размазываете по коду зачем-то. 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)
Если не нравятся коэффициенты, может их и для взрыва подкрутить надо? Или код Бея писали гении, их код трогать нельзя?
Никакой универсальности код не потеряет, зато будут понятны степени тяжести взрыва и из-за чего они возникают.
Нет, он потеряет. Я выше объяснил, почему. Одновременно происходит взрыв по стандартной логике, а прок прописывает последствия для моба этого взрыва, порезанного в четыре раза.
Мешает то, что у тебя будет одной лишней проверкой в коде больше. А сейчас это впилено под уже существующий иф.
Коэффициенты со внешними взрывами сейчас, в принципе, для водокалия относительно логичны. Ты читаешь комментарии-то?
В бейонде есть функция логарифма?
вроде как, да.
Как она выглядит? С log тут точно проблема
вы в какие дебри-то полезли.
Просто твой код можно сократить вот в это вот if (amount >= 2) holder.ex_act(round(max(1, 4 - log(2, amount))))
Из очевидных соображений: amount >= 8 => dmglevel = 1 4 <= amount < 8 => dmglevel = 2 2 <= amount < 4 => dmglevel = 3 amount < 2 => dmglevel = 4
как все сложно
лучше бы дальше в гробу лежал!
действительно
и тебе советую тоже в гробу лежать!
Нет, он потеряет. Я выше объяснил, почему. Одновременно происходит взрыв по стандартной логике, а прок прописывает последствия для моба этого взрыва, порезанного в четыре раза.
Но это не объяснение. Ты ставишь проверки на то, инициализирована ли у тебя новая переменная 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 ифа.
Не знаю, где он не читается.
Это не псевдооптимизация, залезь в матчасть. я погромист это фотошоп
Я фотошоп, это матчасть. Залезь в погромиста. А вообще, разве логарифм вычисляется не дольше, чем пара условий?
Объясняю для тех, кто в танке. Если ты пишешь четыре магических ифа с коэффициентами, которые прописаны в функции, а не в глобальных дефайнах, то ты - индус. Если ты делаешь логарифмическую зависимость от чего-то, то ежу ясно, что это ОДНА функция.
давайте просто добавим комментарий, который сообщает месторасположение прока
че вы
Собственно, поэтому у нас весь реагент_экспложен и кривой (я это имел в виду, да) - он работает на шаманизме и магических цифрах из воздуха. Например, четыре ифа зачем-то, когда можно тупо в два раза делить полученное один раз значение. В одной функции.
И снова рубрика "для тех, кто в танке". Сейчас реагент_экспложен работает по принципу Взрывной Уклад Един Ему плевать на холдера, он даже призывает того, в ком произошел взрыв, магией поиска людей в радиусе 1. Если ты в самом начале этой функции впилишь что-то в духе ЕСЛИ (носитель ПРИНАДЛЕЖИТ ТИПУ моб); ИНАЧЕ То ты сделаешь две функции. Впиханные в одну. С т А н Д а Р т Ы о Р г А н И з А ц И и К о Д а
ты просто не понимаешь всю силу ифов
он даже призывает того, в ком произошел взрыв, магией поиска людей в радиусе 1.
охуительно
Еще одна очевидная вещь - мы не можем в функцию, вызывающую взрыв, работающую ПАРАЛЛЕЛЬНО получению дамага непосредственно от реакции, впиливать лишний нагружающий ее функционал. Вывод - почему бы не впилить строчку с совершенно прозрачной логарифмической зависимостью туда, откуда Соляр исходно вызывает свой прок?
У нас в чемистри_ресайпс всё, кроме взрыва, работает прямо. Прямое получение дамага, прямое лечение и всё такое прочее. Тут у нас тоже де-факто однострочная функция получения определенного рода урона. Не вижу причин, по которым ее надо в принципе выносить из чемистри_ресайпс
А, вейт. Не учтена одна вещь. Нитроглицериновые взрывы в хуманах тоже режутся в четыре раза.
в четыре раза
Туда бы тоже гиб докинуть одной строчкой. Код on_reaction что у водокалия, что у нитроглицерина и так, и так одинаковый, не вижу проблем в досыпании одного вызова получения дамага от этого дела.
работающую ПАРАЛЛЕЛЬНО
прозрачной логарифмической зависимостью
Лол, да ты угараешь.
Короче я не вижу смысла с тобой спорить из-за 10 измененных строк. Я вечером сам напишу так, как считаю нужным и посмотришь, если тебе интересно. Нет, ПРОЗРАЧНЫХ логарифмов я пихать туда, где они не нужны, не буду.
еее индусский кодер детектед спешите видеть.
"Меня недавно спросили, почему программисты ненавидят работать с чужим кодом. Долго думал, как донести до обычного пользователя всю суть пиздеца. Решил привести небольшую аналогию:
Вот представь, что тебе доверили достроить за другим прорабом лабораторию на острове. Ты приходишь на объект, а там кроме недостроенного здания: огромный вентилятор (размером со здание), большой воздушный шар и комната набитая швабрами. Почесав голову, ты разбираешь этот хлам и доделываешь лабораторию. Сдаешь объект ученным, но через 5 минут они выбегают с криком: "УТЕЧКА ЯДОВИТОГО ГАЗА!!!".
Как так-то, блять! Должно же работать! - в отчаянии кричишь ты и звонишь прошлому прорабу:
Вася, у нас ядовитый газ потёк! В чем проблема?
Не знаю, должно было все работать. Что-то в проекте менял?
Немного, швабры вынес...
Швабры потолок держали!
Что??? Что, блять, извините???
Говорю, швабры потолок держали. Над ними цистерны с газом были. Очень тяжелые, пришлось в комнату снизу швабры напихать.
Ты хотя бы записку на двери повесил бы, что швабры для держания потолка! У нас тут ядовитый газ течет! Что нам делать?
Включай вентилятор. Он сдует газ с острова.
Я его, блять, демонтировал сразу же!
Зачем?
Зачем ты построил 120 тонный вентилятор? Ты не мог положить ящик блядских ПРОТИВОГАЗОВ?
Ящик противогазов искать нужно, а вентилятор у меня с прошлого заказа оставался.
Вася, я убрал твой вентилятор! Мы тут задыхаемся!
Херли вы тогда там делаете? Садитесь на воздушный шар и уебывайте!"
Нет, ну если ты сделаешь это нормально, я буду совершенно таки не против посмотреть
вечер :thinking:
А в чем фишка этой правки? Насколько я вижу, там есть обработка взрыва и она гораздо круче, чем то, что ты написал. Другой вопрос, что она, похоже, не работает. Так надо ее пофиксить, а не вторую рядом писать.