Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor SpecForcesSystem #589

Merged
merged 7 commits into from
May 2, 2024
Merged

Refactor SpecForcesSystem #589

merged 7 commits into from
May 2, 2024

Conversation

Roudenn
Copy link
Collaborator

@Roudenn Roudenn commented Apr 29, 2024

Описание PR

Данный ПР оптимизирует код спецсил, добавляя в него систему прототипов.

Краткая документация о прототипе:
SpecForceTeam прототип позволяет добавлять администраторам свои спецотряды через AdminBus, а также гораздо упрощает их добавление. Прототип позволяет изменять много параметров, однако принцип работы спавна в основном заимствован из прошлой версии кода, то есть:

  • Спавнятся все сущности из списка guaranteedSpawn
  • Подсчитывается оставшееся количество ролей, которые можно заспавнить
  • По порядку спавнятся все сущности из списка specForceSpawn. Если список закончился и всё ещё нужно заспавнить роли, цикл начинается заново, пока все роли не будут заспавнены.

Другие изменения

  • Был добавлен CVar со стороны сервера, позволяющий менять время кулдауна вызова спецсил
  • Обновлён код выбора спавнпоинтов спецсил, теперь он работает как надо
  • Добавлен савмилл, пока лишь отображает в консоль сколько каких сущностей было заспавнено + предупреждение если на шаттле нету маркеров спецсил

Проверки

  • PR полностью завершён и мне не нужна помощь чтобы его закончить.
  • Я внимательно просмотрел все свои изменения и багов в них не нашёл.
  • Я запускал локальный сервер со своими изменениями и всё протестировал.
  • Я добавил скриншот/видео демонстрации PR в игре, или этот PR этого не требует.

Код системы спецсил переработан под использование прототипов.
@Roudenn Roudenn requested a review from Rxup as a code owner April 29, 2024 12:22
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Почти всё для создания прототипов я брал с кода, только maxRoleAmount я поставил в основном на своё усмотрение. Баланс тут можно перелопачивать как вам угодно

Content.Server/Backmen/GameTicking/Rules/BlobRuleSystem.cs Outdated Show resolved Hide resolved
Content.Server/Backmen/SpecForces/SpecForcesSystem.cs Outdated Show resolved Hide resolved

if (countExtra > 2 && _random.Prob(0.3f))
// Spawn Guaranteed SpecForces from the prototype.
foreach (var mob in proto.GuaranteedSpawn)
Copy link
Owner

Choose a reason for hiding this comment

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

тут не должно быть такого, см у оффов есть списки с весами и шансами и группой.
см. EntitySpawnCollection.GetSpawns(component.SpawnEntries);
см.

    /// <summary>
    /// Selects what entities can be given out by the giver.
    /// </summary>
    [DataField("spawnEntries", required: true)]
    public List<EntitySpawnEntry> SpawnEntries = default!;
  - type: LimitedItemGiver
    spawnEntries:
      - id: PresentRandom
        orGroup: present
      - id: PresentRandomCash
        prob: 0.20
        orGroup: present
      - id: PresentRandomAsh
        prob: 0.05
        orGroup: present

как пример

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Ентри здесь просто не подходит, поскольку спецсилы требуют возможность для чёткой балансировки, и рандом тут будет лишним
В старой версии кода рандом был только со спавном ОСО, сейчас же я просто добавил ОСО гарантом к Альфе и РХБЗЗ

Copy link
Owner

Choose a reason for hiding this comment

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

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

Roudenn added 2 commits May 1, 2024 14:01
- Добавлен CVar со стороны сервера меняющий кулдаун для вызова спесцил
- Исправлены типы данных в прототипе Спецсил
- Пофикшены спавнеры спецсил и добавлено чуть-чуть логов для более удобного дебага
- Добавлены выборы вариантов во время ввода команды callspecforces
- Теперь все отряды ОБР воспроизводят их админбус звук
@Roudenn Roudenn requested a review from Rxup May 1, 2024 11:20
return args.Length switch
{
1 => CompletionResult.FromHintOptions(Enum.GetNames<SpecForcesType>(),
"Тип вызова"),
1 => CompletionResult.FromHintOptions(variants, "Тип вызова"),
Copy link
Owner

Choose a reason for hiding this comment

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

эээээ не понятно зачем этот variants запихни в 1 строку

Copy link
Owner

@Rxup Rxup left a comment

Choose a reason for hiding this comment

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

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

@github-actions github-actions bot added the Changes: Localization Can be reviewed or fixed by people who are knowledgeable with translation label May 2, 2024
- В прототипе спецсил теперь используются SpawnEntry вместо просто списка айдишников
- Микрофикс команды спецсил
- Фикс локализации на уровне кода в конце раунда
@Roudenn Roudenn requested a review from Rxup May 2, 2024 11:33
@Rxup Rxup merged commit f0ea06f into Rxup:master May 2, 2024
9 checks passed
@Roudenn Roudenn deleted the specforces-refactor branch May 3, 2024 12:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Changes: Localization Can be reviewed or fixed by people who are knowledgeable with translation
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants