Server: lock ollies for a player

A lock tool like noclip and boosts. The player's game enforces it: the roster
carries guest_ollies (protocol 53), and the jump hook gives a locked ollie no
upward speed. Plugins get player.permissions.ollies.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
waguandClaude Opus 5.5 committed 2026-10-20 09:53:31 -04:00
1 parent c02b4001a7
commit 67e8e439f7
18 files changed
+53 -33

No files matched your search

+4 -2
View File
@@ -814,10 +814,10 @@ void Host::send_roster() {
// locked tools is told those are off for them. Everyone else gets the same roster; players
// whose roster differs in the same way share one.
struct Variant {
bool noclip{}, no_bail{}, boosts{}, enforce_tuning{}, announcement{};
bool noclip{}, no_bail{}, boosts{}, ollies{}, enforce_tuning{}, announcement{};
auto operator<=>(const Variant &) const = default;
};
const Variant common{config_.noclip, config_.no_bail, config_.boosts, config_.enforce_tuning, !announcement_for_};
const Variant common{config_.noclip, config_.no_bail, config_.boosts, true, config_.enforce_tuning, !announcement_for_};
std::map<Variant, std::set<std::uint64_t>> variants;
std::set<std::uint64_t> others;
for (const auto &[id, guest] : guests_) {
@@ -831,6 +831,7 @@ void Host::send_roster() {
variant.noclip = !(locks & lock_noclip) && (config_.noclip || movement);
variant.no_bail = !(locks & lock_nobail) && (config_.no_bail || movement);
variant.boosts = !(locks & lock_boosts) && (config_.boosts || movement);
variant.ollies = !(locks & lock_ollies); // no setting turns ollies off: only a lock
}
variant.enforce_tuning = config_.enforce_tuning || (locks & lock_tuning);
}
@@ -845,6 +846,7 @@ void Host::send_roster() {
p.guest_noclip = variant.noclip;
p.guest_no_bail = variant.no_bail;
p.guest_boosts = variant.boosts;
p.guest_ollies = variant.ollies;
p.enforce_tuning = variant.enforce_tuning;
p.announcement = variant.announcement ? shown : multiplayer::ServerAnnouncement{};
broadcast(p, true, false, 0, &players);