Skip to content

Фиксы+приколы#575

Open
BlindFoldened wants to merge 1 commit intoAdventureSpaceTeam:masterfrom
BlindFoldened:Фиксы+приколы

Hidden character warning

The head ref may contain hidden characters: "\u0424\u0438\u043a\u0441\u044b+\u043f\u0440\u0438\u043a\u043e\u043b\u044b"
Open

Фиксы+приколы#575
BlindFoldened wants to merge 1 commit intoAdventureSpaceTeam:masterfrom
BlindFoldened:Фиксы+приколы

Conversation

@BlindFoldened
Copy link
Copy Markdown
Contributor

  • Исправлен баг, позволяющий раскладывать телескопический щит в сумках, из-за чего он начинал занимать в сумке больше места, чем надо. Это также исправлено с энергощитами, зажигалками, энергетическими/игрушечными мечами/ручками.
  • Исправлен визуальный баг кастомизации вульп "Носки на лапах"
  • Добавлен заказ на прожектор, стоимостью 1250 кредитов (для облегчения работы в космосе при постройке цели/утилизаторстве).
  • Постеры теперь можно демонтировать с помощью alt+лкм в скрученные постеры. Добавлен заказ на постеры стоимостью 1250 кредитов, содержащий 8 случайных легальных постеров. В аплинк в категорию "безделушки" добавлен ящик, содержащий 6 случайных нелегальных постеров, стоимостью 2 тк.

Copy link
Copy Markdown
Contributor

@aristophanivan aristophanivan left a comment

Choose a reason for hiding this comment

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

В целом еще что хочу сказать. У тебя код взаимодействует по факту с клиентом через DoAfter и достаточно рационально будет обрабатывать его не на сервере, а на shared-е, с учетом того, что все твои методы используют Shared системы. Это будет соответствовать гайдлайнам виззардов по Predict-у.

public sealed partial class PosterComponent : Component
{
[DataField("prototype", customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
public string? Prototype { get; private set; }
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

По текущим гайдлайнам правильно будет использование EntProtoId вместо всей этой конструкции. То есть выглядеть будет как:

[DataField]
public EntProtoId Prototype { get; private set; }

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

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Кстати давно не видел { get; private set; } конструкции в компонентах, в принципе оно уместно в твоём случае, но я удивлен, что кто-то всё же пишет с ними.

SubscribeLocalEvent<PosterComponent, AfterInteractEvent>(HandleAfterInteract);
}

private async void HandleAfterInteract(EntityUid uid, PosterComponent component, AfterInteractEvent args)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Не советую использовать асинхронные функции в EntitySystem-ах сосаки. Их есть смысл использовать только при взаимодействии с БД. А ну еще если ты делаешь систему, которая подразумевает асинхронное выполнение.

{
BreakOnMove = true,
};
var result = await _doAfterSystem.WaitDoAfter(doAfterArgs);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Опять же асинхронность можно убрать, если просто подписаться на завершение DoAfter-а. Для этого нужно конечно этот ивент создать, но это нетрудно, 3 секунды занимает. Но это избавляет от проблем с асинхронностью. Я честно с этим не работаю, так как хрен его знает что может случиться.

Copy link
Copy Markdown
Contributor Author

@BlindFoldened BlindFoldened Mar 29, 2026

Choose a reason for hiding this comment

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

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

if (component.Deleted)
return;

if (TryComp<StackComponent>(uid, out var stackComp)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Метод TryUse подразумевает уже проверку на наличие компонента Stack у uid, так что еще раз смотреть бессмысленно, старайся оптимизировать код.

return;

if (TryComp<StackComponent>(uid, out var stackComp)
&& component.RemoveOnInteract && !_stackSystem.TryUse((uid, stackComp), 1))
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Я не знаю зачем тут RemoveOnInteract, можешь объяснить? И в принципе начиная с этого if-а объяснить логику...

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Комменты хде

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants