Repository navigation
Conversation
Заморозка должна быть доступна только старшему имму (34). Сейчас это не так,
и уровень тут вообще ни при чём.
Как устроено на самом деле:
- В таблице команд стоит kLvlFreeze (structs.h:91), и он равен kLvlGreatGod,
то есть 33. Но для иммортальских команд уровень не проверяется ВООБЩЕ:
ModernHasPrivilege (privilege.cpp:129) сверяет уровень только при
minimum_level < kLvlImmortal. Для всего, что 31 и выше, решает
privilege.xml.
- Значит kLvlFreeze ни на что не влияет, а заморозить может любой бог с
флагом FullAccess. Сейчас таких семеро.
Поэтому проверка поставлена не в команду, а в punishments::SetFreeze -- туда
сходятся все пять путей: "заморозить"/"freeze", "unfreeze", "set <чар> frozen",
"set all frozen" и снятие из do_unfreeze. Одна проверка закрывает и заморозку,
и разморозку: в SetFreeze они обе, times == 0 размораживает.
Условие: privilege::IsOwner(ch) || GetRealLevel(ch) >= kLvlImplementator.
Все вызывающие уже умеют обрабатывать false.
Сборка без предупреждений, 872 теста проходят.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Задача: заморозка — только старшему имму (34).
Почему одной правки уровня мало
В таблице команд стоит
kLvlFreeze(structs.h:91), и он равенkLvlGreatGod, то есть 33. Но поднять его до 34 бесполезно: для иммортальских команд уровень не проверяется вообще.Короткий путь по уровню работает только при
minimum_level < kLvlImmortal. Для всего, что 31 и выше, решаетprivilege.xml: владелец, флагFullAccessили команда в списке. Отсюда два следствия:kLvlFreezeни на что не влияет;FullAccess, а их сейчас семеро.Где поставлена проверка
Не в команде, а в
punishments::SetFreeze, потому что туда сходятся все пять путей:заморозить/freezedo_wizutil.cpp:73set <чар> frozendo_set.cpp:399, 409set all frozendo_set_all.cpp:74, 92unfreezedo_unfreeze.cpp:63Одна проверка закрывает и заморозку, и разморозку: в
SetFreezeони обе,times == 0размораживает. Иначе бог 33-го смог бы снять то, что поставил 34-й.Все вызывающие уже умеют обрабатывать
false.Кого это затрагивает
Богов с
FullAccessниже 34-го уровня: они перестанут замораживать и размораживать. Владелец (проверяется по имени,privilege.cpp:63) и любой 34-й — могут.Проверено
build/(release, с тестами) без предупреждений../tests/tests— 872 проходят, 3 отключены давно.Замечено, не тронуто
kLvlFreezeвstructs.h:91теперь окончательно мёртвая константа. Удалять её в этом PR не стал — она ещё стоит в таблице команд и выпиливается отдельно.🤖 Generated with Claude Code