Skip to content

Comments

Посылки экипажу.#14406

Open
DarthSidiousPalpatine wants to merge 52 commits intoTauCetiStation:masterfrom
DarthSidiousPalpatine:family_post
Open

Посылки экипажу.#14406
DarthSidiousPalpatine wants to merge 52 commits intoTauCetiStation:masterfrom
DarthSidiousPalpatine:family_post

Conversation

@DarthSidiousPalpatine
Copy link
Contributor

@DarthSidiousPalpatine DarthSidiousPalpatine commented Sep 12, 2025

Описание изменений

Добавлены случайные посылки для экипажа.

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

Посылки на шаттл прилетают в ящике для посылок:
image
image

Новый спрайт под палитру карго:
image

Почему и что этот ПР улучшит

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

Авторство

AndreyGysev

Чеинжлог

🆑 AndreyGysev

  • rscadd: Добавлены периодически присылаемые посылки для экипажа, которые карго должны доставлять.

@TauKitty
Copy link
Contributor

Changelog status: ✔️

@TauKitty TauKitty requested review from a team and volas September 12, 2025 21:07
@Slegarrr
Copy link

Гуманитарная помощь для лоупопа, чтобы 2-3 карлика совсем не зачахли

@DarthSidiousPalpatine
Copy link
Contributor Author

Гуманитарная помощь для лоупопа, чтобы 2-3 карлика совсем не зачахли

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

@WatlerJe
Copy link
Contributor

Синяя крышка у ящиков используется для ящиков с медициной.

@DarthSidiousPalpatine
Copy link
Contributor Author

Синяя крышка у ящиков используется для ящиков с медициной.

Какая же крышка для ящиков используется для почтовой службы?

@DarthSidiousPalpatine
Copy link
Contributor Author

Синяя крышка у ящиков используется для ящиков с медициной.

Обнаружил, что у нас есть цвета карго. Переделал ящик на цвета карго:
image

@AirBlack
Copy link
Contributor

сделай чтоб с оч низким шансом прокала посылка от унабомбера которая бабахала бы при открытии)

@DarthSidiousPalpatine
Copy link
Contributor Author

DarthSidiousPalpatine commented Sep 13, 2025

сделай чтоб с оч низким шансом прокала посылка от унабомбера которая бабахала бы при открытии)

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

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

@AirBlack
Copy link
Contributor

да тоже про рентген подумал гении мыслят одинаково

@DarthSidiousPalpatine
Copy link
Contributor Author

DarthSidiousPalpatine commented Sep 13, 2025

про спам-посылки, посылки с пранком/бомбой в отдельном ПРе будут с рентгеном, тут и без них много ревувать

отдельный ПР ща выложу

@DarthSidiousPalpatine
Copy link
Contributor Author

Чёт я посмотрел, у меня в нескольких разных местах одно и то же выходит, если учитывать этот ПР и ПР #14399

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

Этот ПР в драфт перевожу в надежде на #14399

@DarthSidiousPalpatine DarthSidiousPalpatine marked this pull request as draft September 14, 2025 06:53
#define FAMILY_GRANDFATHER (1<<1)
#define FAMILY_MOTHER (1<<2)
#define FAMILY_FATHER (1<<3)
#define FAMILY_BROTHERS (1<<4)
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.

Ну пока этот механ не позволяет коопиться, а только позволяет указать есть ли семья у тебя вообще или нет.

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

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.

Понятно, пойду на форум делать обсуждение.

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(mail_orders.len && clear_turfs.len)
var/i = rand(1,clear_turfs.len)
var/turf/pickedloc = clear_turfs[i]
clear_turfs.Cut(i,i+1)
Copy link
Contributor

Choose a reason for hiding this comment

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

у нас нет какой-то pick_and_pop функции?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

нашёл pick_n_take

return pick(\
prob(30);/obj/random/foods/drink_bottle,\
prob(30);/obj/random/foods/drink_can,\
prob(1);/obj/item/weapon/gun/projectile/revolver/doublebarrel,\
Copy link
Contributor

Choose a reason for hiding this comment

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

хм.

@@ -0,0 +1,59 @@
/datum/controller/subsystem/economy/proc/generate_new_crew_mail()
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.

Думаю, добавлю в спам на ПДА подписи типа "отправь 100 рублей на номер и получи ПРИЗ!!"

И будет просто раундстартом делаться ещё несколько рандомных ноунейм номеров у которых будет при перечислении денег с какого-то ака прокать действие.

У кого-то будет аж целое ничего (скам), кто-то будет отправлять вкусную вещь, а кто-то рандомную/мусорную.

if("ringtone")
chosen_ringtone = pick(global.ringtones_by_names)
if("family")
family_members = rand(0, 127)
Copy link
Contributor

Choose a reason for hiding this comment

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

rand(NONE, FAMILY_ALL)

#define FAMILY_ALL FAMILY_GRANDMOTHER|FAMILY_GRANDFATHER...и так далее

var/chosen_ringtone = "Flip-Flap"
var/custom_melody = "E7,E7,E7"

var/family_members = 12 //Mother and Father by default
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
var/family_members = 12 //Mother and Father by default
var/family_members = FAMILY_MOTHER|FAMILY_FATHER

var/list/pref_ringtones = global.ringtones_by_names + CUSTOM_RINGTONE_NAME
chosen_ringtone = sanitize_inlist(chosen_ringtone, pref_ringtones, initial(chosen_ringtone))
custom_melody = sanitize(custom_melody, MAX_CUSTOM_RINGTONE_LENGTH, extra = FALSE, ascii_only = TRUE)
family_members = sanitize_integer(family_members, 0, 127, initial(family_members))
Copy link
Contributor

Choose a reason for hiding this comment

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

вместо 127 FAMLY_ALL, вместо 0 NONE

@DarthSidiousPalpatine
Copy link
Contributor Author

Учитывая, что я для некоторых вещей сделал обёртку в ПР-е на раундстарт предметы в грузторге - тут я пока не трогаю, оно в драфте лежит, ждёт мержа того.

После того мержа тут всё поправлю.

@DarthSidiousPalpatine
Copy link
Contributor Author

кроме одного бага

Какого бага? Про баги напишите пж какой баг с посылками нашли.

Не с грузторг товарами что лежат раундстартом на складе, а с посылками.

@AltDeRo1
Copy link

AltDeRo1 commented Oct 1, 2025

Максимально нудные сейчас посылки получились.

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

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

Условно подцепить к закупам карго появление этих посылок и оплачивать их за счёт третьего не игрового счёта, а не счёта получателя. Оплатили - карго начисляют условный капитал 300± кредитов. Это нормальная цена для отдела, чуть больше чем за один проданный ящик. Это частично решает проблему заказов карго. Карго выполняют заказ на скриптовую сумму — приходит посылка. У карго появляется смысл выполнять заказы экипажа, ведь те получают посылки не от балды, а при достижении определенных условий. Собственно и сами каргонцы тогда получают шанс получить что-то с посылок, да и тех же бесполезных грузчиков можно будет занять с переменным успехом на всю смену, а не на одноразовое событие.

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

@LudwigVonChesterfield
Copy link
Contributor

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

Как туториал к ГрузТоргу и повод о нём рассказывать грузчикам (буквально закидывая игроку в корзину посылку), и повод карго выходить из отдела повзаимодействовать - ПР норм. Как лутбокс который игрок вскрывает и радуется может и не очень.

Как повод карго заработать деньжат когда никто на станции к ним не идёт - сейчас не очень, и с твоим предложением тоже будет не очень потому-что всё ещё требует закупаться для кого-то. Вместо этого я бы предложил возможность сдавать склад карго в аренду (приходит сотня посылок, и потом с ЦК приходят заказы "а отправьте-ка именно вон ту", соответственно надо складировать красиво и посортировано.), или предоставлять услуги сортировки (приходит десять пустых ящиков с накладными, и ящик с кучей вещей. надо разложить по ящикам с накладными то что куда положено. заодно проверить или всё правильно). Но это оч далеко от темы этого ПР-а, и наверняка когда-нибудь и до такого дойдём.

if (listfrom.len > 0)
var/picked = pick(listfrom)
listfrom -= picked
listfrom -= list(picked)
Copy link
Contributor

Choose a reason for hiding this comment

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

интересно ломает ли это что-либо. к примеру если у нас pick_n_take из списка списков...

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Так наоборот, оно делает возможным pick_n_take из списка списков. До этого список списков не был возможен для pick_n_take ибо при -= список из списка удаляются элементы, а не список.

@DarthSidiousPalpatine
Copy link
Contributor Author

Как повод карго заработать деньжат когда никто на станции к ним не идёт - сейчас не очень, и с твоим предложением тоже будет не очень потому-что всё ещё требует закупаться для кого-то. Вместо этого я бы предложил возможность сдавать склад карго в аренду (приходит сотня посылок, и потом с ЦК приходят заказы "а отправьте-ка именно вон ту", соответственно надо складировать красиво и посортировано.), или предоставлять услуги сортировки (приходит десять пустых ящиков с накладными, и ящик с кучей вещей. надо разложить по ящикам с накладными то что куда положено. заодно проверить или всё правильно). Но это оч далеко от темы этого ПР-а, и наверняка когда-нибудь и до такого дойдём.

Склад в аренду это имба, оно будет обязательно следующим ПРом.

/obj/random/meds/dna_injector = 100,
/obj/random/meds/chemical_bottle = 100,
/obj/random/guns/projectile_handgun = 10,
/obj/random/structures/critters_crate = 50,
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.

Ну как никто, каргонцы могут)

@LudwigVonChesterfield
Copy link
Contributor

@DarthSidiousPalpatine За две недели хоть кто-то получил посылку?

@DarthSidiousPalpatine
Copy link
Contributor Author

Чёрт его знает, у нас онлайна нет.

@DarthSidiousPalpatine
Copy link
Contributor Author

Сейчас если и делать ПРы, то надо, видимо, на синглплеер ориентироваться.

@LudwigVonChesterfield
Copy link
Contributor

пора выкатывать аренду склада и сортировочку :D

@DarthSidiousPalpatine
Copy link
Contributor Author

пора выкатывать аренду склада и сортировочку :D

Да, надо бы. И/или погребок с новыми фичами.
Но мотивация на все это испарилась.

citizenshipType = /obj/random/mail/home
itemType = PATH_OR_RANDOM_PATH(citizenshipType)

/*if(2) //Religious spam
Copy link
Contributor

Choose a reason for hiding this comment

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

лучше убрать неюзаный код. или заюзать.

@DarthSidiousPalpatine
Copy link
Contributor Author

DarthSidiousPalpatine commented Nov 9, 2025

Какой-то странный баг именно на сервере.

Посылки приходят по нескольку раз подряд одни и те же. В плане, вот посылки сгенерились, шаттл прислали, забрали, отослали обратно и через время снова посылки сгенерились, но ТЕ ЖЕ САМЫЕ.

И так несколько раз подряд. Гмм. При тестах такого не было.

@DarthSidiousPalpatine
Copy link
Contributor Author

Пофиксил, вроде, баг. Проблема в том, что на локалке у меня его не было или не замечал.

Крч, можно обновлять тестмерж.

Только тут опять ошибка Code Owners как и в других ПРах.

if(!R)
continue

var/datum/money_account/MA = get_account(R.fields["insurance_account_number"])
Copy link
Member

Choose a reason for hiding this comment

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

insurance всё же не обязательно аккаунт конкретного человека, он не надежен. У нас, кажется, нет вообще явной связи человек == аккаунт.

Надо пик делать либо от людей на станции (player_list), либо от аккаунтов (all_money_accounts), не перемешивая одно с другим.

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

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

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

Copy link
Member

Choose a reason for hiding this comment

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

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

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

Тогда если ошибки с доставкой и будут, то по крайней мере не из-за кода.

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 Author

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.

Блен, а зачем я вообще ищу людей в players_list, почему бы не пикать просто людей из записей экипажа типа из "работников" станции.

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

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

Типа, чтобы не было такого что ГП принял в экипаж условного мага и магу пришла посылка "из дома" т.к. он появился в записях экипажа)

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 Author

Choose a reason for hiding this comment

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

Божечки, сколько бюрократии и рекордсов надо менять, но это всё не в этом ПРе, это всё интересно, но тут я ещё сделать хочу чтобы мы брали посылки не из активных игроков и искали номер их акка, а чтобы мы брали любые рекордсы, искали номер акка, проверяли есть ли рекордсы, есть ли номер акка такой и уже тогда генерировали посылку.

Copy link
Member

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.

Так пусть так и делает. Смотри, если у челика есть рекордсы, но там невалидный аккаунт - посылка не придёт.
Если у челика есть рекордсы, но там валидный аккаунт, но не его - посылка придёт на имя рекордса, а числиться будет в аккаунте который указан не его. И челику надо будет либо к ГП идти разбираться втф кто там мне аккаунт поменял, либо забить и посылку банально вскрыть.

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

ГП берёт и скрытно заменяет аккаунты челикам на свои и получает зарплату за всех)))

Copy link
Contributor Author

Choose a reason for hiding this comment

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

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

@DarthSidiousPalpatine
Copy link
Contributor Author

А ещё я так и не понял что за ошибка CodeOwners и как её фиксить лично мне, я тут пофиксил посылки, но их никто не обновлял видимо на сервере потому что билд ансаксесфул из-за кодовнерсов

@DarthSidiousPalpatine
Copy link
Contributor Author

Только перед переделкой рекордсов нужно составить тз.

@DarthSidiousPalpatine
Copy link
Contributor Author

В общем тут ещё допиливаю, а по рекордсам, зарплатам и пр. жду ТЗ.

Могу лишь высказать свои хотелки того как бы я видел эту систему, если надо.

@DarthSidiousPalpatine
Copy link
Contributor Author

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

@DarthSidiousPalpatine
Copy link
Contributor Author

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

@volas volas added the Pinned ПРы с этим лэйблом будут игнорироваться Stale-ботом label Jan 16, 2026
@DarthSidiousPalpatine
Copy link
Contributor Author

А я тут разве не сделал всё что требовалось? Сейчас пересмотрю...

@DarthSidiousPalpatine
Copy link
Contributor Author

DarthSidiousPalpatine commented Jan 19, 2026

"insurance всё же не обязательно аккаунт конкретного человека, он не надежен. У нас, кажется, нет вообще явной связи человек == аккаунт.

Надо пик делать либо от людей на станции (player_list), либо от аккаунтов (all_money_accounts), не перемешивая одно с другим.

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

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

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

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

Если человек реально существует то это реальная посылка ему. Если рекордс создан во время раунда то можно сказать что спам пришёл.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Feature Новая фича Pinned ПРы с этим лэйблом будут игнорироваться Stale-ботом Sprites Test Merge Candidate ПР с этим лэйблом будет или уже находится с тест мерже

Projects

None yet

Development

Successfully merging this pull request may close these issues.