Skip to content

Учим алиенов глотать людей #53

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open

Учим алиенов глотать людей #53

wants to merge 7 commits into from

Conversation

Miracler112
Copy link
Contributor

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

В будущем планируется:

  1. Ввести новый класс для переноса большего количества людей за раз
  2. Починка злополучного ферри шатла для ЕРТ и прочих прелестей с ЦК
  3. Может что-то еще, если будут предложения

Miracler added 4 commits August 18, 2017 20:08
Даем возможность выплевывать хуманов, небольшой костыль с уроном
Даем возможность алиенам глотать хуманов
Небольшой нерф боевого ножа, что бы они не кромсали несущих их алиенов за пару чиков
По просьбе Ольта расширяем максимальный размер загружаемых файлов для музыки
@ZVee
Copy link
Contributor

ZVee commented Aug 18, 2017

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

Саунд на 7~ метров не надо, я знаю что вы абузите мп3 переименовывая в огг, вместо использования конвертации нормальной что как раз срезает неплохо размер.

@Miracler112
Copy link
Contributor Author

@ZVee Повторения кода можно было бы легко избежать, если бы я чуть более знал как бьенд тут всё это воспринимает. А так же можно было бы избежать костыль с флагами, будь прок, который отвечал за постоянное событие, но и этот будет грузить лишними повторяющимся расчетами. Я лишь выполнил просьбу, и как по мне в реалиях билда это могло бы разнообразить, уж лучше чем тройной граб и тащить за собой хуманов как хуман. Размер музыки увеличил не для того, что бы безбожно форсить же музыку под 10 минут, сохранить качество чуть более, чем приемлимо невозможно, особенно если нужно укладываться в 1 метр, тогда хотя бы разреши до 6 метров. Ну а остальное на твой суд и суд других

@ZVee
Copy link
Contributor

ZVee commented Aug 18, 2017

Не надо увлекаться музыкой вообще - во первых у нас играют далеко люди не на супер железе, во вторых внезапно даже в 2к17 есть люди использующие мобильный интернет (да, можете смеяться, но я услышал слова "модем" и "трафик" сегодня снова, значит не стоит исключать, что таких людей может быть больше) и эти композиции (даже если отключить проигрывание, бъенд все равно стелсово отошлет) пожрет игроку не совсем лишний трафик. Плюс от музыки еще и подфриживает сервер (опять же особенность бъенда). Вообще, я уже разжёвывал на тему музыки неоднократно. И в целом, какой в этом смысл, если часть игроков вообще играет без звука, а еще можно просто с ютуба слушать, зачем именно насильно пихать только потому что есть кнопка?

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

@Miracler112
Copy link
Contributor Author

@ZVee Да, там идет повторение того остатка, что было раньше, стереть и подчистить его - меньшая проблема. Что по поводу кусания мозгов, как тесты показали и не один раз при разных обстоятельствах, мозги он ест нормально и не затрагивает прок того, что он еще при этом заглатывает свою цель. Как хуманов, так и обезьянок ел он нормально, да, возникала проблема, что прок может активироваться несколько раз, однако серьёзных багов после этого не было, код просто заканчивал свою цепочку, ну и на этом собственно все. Если проверка по какой-то причине не пройдет, то оно дальше и не должно работать, потому что это совсем не требуется. За исключением можно добавить какую-нибудь надпись игроку, что бы он понимал, что "Что-то не так". Если и отслеживать баги такого уровня, то нужно сидеть часами, но и тестов на это и времени я тоже не пожалел, как уже сказал, особых ошибок и разрывов во времени не происходило, так же со временем не возникали разные баги или проблемы. Возможно они и проявятся, если с этим будут играться очень много игроков разов, но как уже сказал. Многочисленные тесты и проверки не показали особых багов и проблем при работе

@ZVee
Copy link
Contributor

ZVee commented Aug 18, 2017

Как минимум надо код хотя бы встроить в тот же иф который есть выше.

Однако как и говорил - это убрали намерено из билда и возвращать вроде как и не планировалось, изначально эта фича есть и поэтому если внезапно обнаруживается отсутствие - значит убрано целенаправленно.

@Miracler112
Copy link
Contributor Author

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

if(!do_mob(assailant, affecting)||!do_after(assailant, 20, target = affecting)) return
assailant.visible_message("<span class='danger'>[assailant] devours [affecting]!</span>")
if(holder.stat == DEAD)
holder.gib()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Еще один момент - вот у тебя тут гиб прописан- а ниже мобу которого гибнуло и кинуло на удаление из игры - зачем-то прописывается слипинг и бессмертие. А если хумана выплюнит не алиум, а алиума гибнут или хуман ему живот вспорит и вылезет, у него тоже останется годмод?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Слип прописан для того, что бы на время остановить хумана, что бы он его не бил короткое время. Если он ему вспорет ножем брюхо, то это компенсируется в файле ниже, где идет прок на смерть алиена. Т.е если он кого-то проглотил, грубо говоря, то при его смерти он гибается и выпускает съеденого, а годмод с него так же там и убирается. Бесмертие прописано потому, что я не нашел никакого более менее хорошего способа, что бы хумана внутри не дамажило

if(stomach_contents.len)
for(var/mob/M in src)
if(M in stomach_contents)
M.status_flags = 15
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Волшебные цифры вида 15 некорректно прописывать, надо искать флаги конкретные и возвращать, к тому же таким выставлением - еще и затираешь любые, которые могли быть кастомные выставлены.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нет, фиксировать тоже не вариант, надо просто добавлять битфлаг к текущим флагам и отнимать конкретный, а не через оператор = выставляя насильно число определенное или флаг. флаги забираются и выдаются обычно через |= bit и &= ~bit.
Только зачем вообще годмод выдавать?

if(holder.stat == DEAD)
holder.gib()
holder.sleeping = 8
holder.status_flags = GODMODE
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут тоже затираешь флаги которые стоят и просто выставляешь годмод опять же, а не прибавляешь его к текущим флагам.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Miracler added 3 commits August 22, 2017 00:03
Как говорится ни тебе, ни мне. Разреши выделить максимум 4мб для загружаемого контента, этот максимум не должен сильно потреблять ресурсы игроков и других и хватит для форса интересностей.
Теперь флаги после освобождения из алиена или после выплевывания не устанавливаются на магическое число 15. Даже если будет проглочен моб с иными флагами, они ему вернуться после
То же самое с флагами + потер остаточный код, который остался после, дабы не было повторов
if(M in stomach_contents)
stomach_contents.Remove(M)
M.loc = loc
M.status_flags -= GODMODE
Copy link
Contributor

@ZVee ZVee Aug 21, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+ и - не используется в битфлагах, а что если уже висел годмод до этого или был снят? Тогда вычитание и прибавка попросту сломает код, т.к отнимет или добавит к числу попросту еще одно число. Я ведь писал что битфлаги шатаются через (|= bit) и (&= ~bit). К тому же все равно может быть конфликт с тем, что код отменит любое из состояний связанных с этим флагом, может кто-то из администраторов включит, а код отменит его, может какая-то фича будет использовать и тоже.
К тому же я спрашивал, зачем вообще использовать годмод с тем, кого пожрали?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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


if(M == assailant && state >= GRAB_AGGRESSIVE)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://github.com/TauCetiStation/ColonialMarines_Redone/pull/53/files#diff-0d58be00f177298faed0e648e735056eR212 - таки посмотри на строку 212. Зачем два раза одно и тоже спрашивать? А еще у тебя нет проверки на isalienadult(), потому что в alien входит вообще целиком класс алиумов, а не только взрослые особи.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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


if(M == assailant && state >= GRAB_AGGRESSIVE)
if( (ishuman(assailant) && ismonkey(affecting) ) || ( isalien(assailant) && iscarbon(affecting) && !isalien(affecting) && !istype(assailant, /mob/living/carbon/alien/humanoid/drone) && !istype(assailant, /mob/living/carbon/alien/humanoid/runner ) ))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Т.е теперь можно пожирать за хуманов обезьян не имея мутации фат? Зачем было код выше удалять, убирая еще и else блок.

Copy link
Contributor Author

@Miracler112 Miracler112 Aug 22, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

@@ -145,7 +145,7 @@
state = GRAB_AGGRESSIVE
icon_state = "grabbed1"
else
if(state < GRAB_NECK)
if(state < GRAB_NECK && !isalien(assailant))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Почему нет? (!isalien(assailant))

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А он должен быть, видимо по какой-то причине сохранение файла не прошло, тоже поправлю

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не, наоборот спрашиваю - почему заблокирован апгрэйд граба для алиумов? Почему им внезапно нельзя душить?

@ZVee
Copy link
Contributor

ZVee commented Aug 22, 2017

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

@Miracler112
Copy link
Contributor Author

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

@StrikS
Copy link
Contributor

StrikS commented Aug 22, 2017

Я вообще пулю и таклю марина, не парясь. Когда он встает обычно с 1-2 таклов снова падает. Ни разу не убежали. Стоит задуматься.

@Miracler112
Copy link
Contributor Author

Miracler112 commented Aug 22, 2017

@StrikS У меня больших проблем с этим тоже не возникало, но многим не нравится суть того, что хуманы либо встают и убегают\шахидятся. И в связи с этим процесс переноса можно было бы чутка разнообразить. Но сейчас собственно всё зависит только от того, что сам народ скажет

@StrikS
Copy link
Contributor

StrikS commented Aug 22, 2017

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

@Miracler112
Copy link
Contributor Author

@StrikS в том-то и дело, что через трипл граб вырваться у жертвы совсем нет шансов. С проглатыванием жертва будет иметь все шансы выбраться и даже убить алиена, если тот ничего не предпримет и хотя бы не выплюнет свою жертву

@StrikS
Copy link
Contributor

StrikS commented Aug 22, 2017

Так сделай чтобы контрился резистом, с шансом, но низким.

@ZVee
Copy link
Contributor

ZVee commented Aug 22, 2017

А с загрузкой файлов все еще остается проблема фриза сервера. Если оно умудряется фризануть на секунды две при мегабайте и 60 онлайне, что же будет при 4-х мегабайтах?

@Olt1771
Copy link
Contributor

Olt1771 commented Aug 22, 2017

По поводу музыки, тогда есть Альтернатива, сделать пак музыки как на фолыча билде, встроеную в сам билд. Либо 4 метра. А при метре оно на пол секунды, максимум на секунду фризит и музыку форсят жеж не просто так, а для красивого/эпичного боя. Или локальные звуки, дабы попугать выживших/одинокий маринад.

@Belfogor
Copy link
Contributor

Предлагаю альтернативу. Разрешите чужим пуллить за собой хуманов без штрафов к скорости. Хер с этим заглотом.

@WallShrabnic
Copy link

Так они и так их довольно быстро пуллят. Кидаешься лицехвата, третий граб, падеба

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants