You've already forked Arcturus-Morningstar-Extended
mirror of
https://github.com/duckietm/Arcturus-Morningstar-Extended.git
synced 2026-06-20 15:36:17 +00:00
Merge pull request #110 from simoleo89/pr/update-permissions-broadcast
feat(commands): :update_permissions broadcasts refreshed permissions to every online client
This commit is contained in:
+40
-1
@@ -2,7 +2,12 @@ package com.eu.habbo.habbohotel.commands;
|
|||||||
|
|
||||||
import com.eu.habbo.Emulator;
|
import com.eu.habbo.Emulator;
|
||||||
import com.eu.habbo.habbohotel.gameclients.GameClient;
|
import com.eu.habbo.habbohotel.gameclients.GameClient;
|
||||||
|
import com.eu.habbo.habbohotel.permissions.PermissionsManager;
|
||||||
|
import com.eu.habbo.habbohotel.permissions.Rank;
|
||||||
import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
|
import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
|
||||||
|
import com.eu.habbo.habbohotel.users.Habbo;
|
||||||
|
import com.eu.habbo.habbohotel.users.HabboManager;
|
||||||
|
import com.eu.habbo.messages.outgoing.users.UserPermissionsComposer;
|
||||||
|
|
||||||
public class UpdatePermissionsCommand extends Command {
|
public class UpdatePermissionsCommand extends Command {
|
||||||
public UpdatePermissionsCommand() {
|
public UpdatePermissionsCommand() {
|
||||||
@@ -13,7 +18,41 @@ public class UpdatePermissionsCommand extends Command {
|
|||||||
public boolean handle(GameClient gameClient, String[] params) throws Exception {
|
public boolean handle(GameClient gameClient, String[] params) throws Exception {
|
||||||
Emulator.getGameEnvironment().getPermissionsManager().reload();
|
Emulator.getGameEnvironment().getPermissionsManager().reload();
|
||||||
|
|
||||||
gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_update_permissions"), RoomChatMessageBubbles.ALERT);
|
// PermissionsManager.reload() rebuilt the rank table — each online
|
||||||
|
// Habbo's HabboInfo still references the OLD Rank object, so
|
||||||
|
// server-side hasPermission() / wire composers would keep
|
||||||
|
// reporting stale data until relogin. Re-bind every connected
|
||||||
|
// user to the freshly-loaded Rank by id, then ship the new
|
||||||
|
// UserPermissionsComposer (which carries clubLevel,
|
||||||
|
// securityLevel, isAmbassador, rank metadata and the resolved
|
||||||
|
// permission_definitions map) so Nitro clients' React-side
|
||||||
|
// useHasPermission(key) / useUserRank() / useUserPermissions()
|
||||||
|
// consumers re-render against the updated tables without an F5.
|
||||||
|
HabboManager habboManager = Emulator.getGameEnvironment().getHabboManager();
|
||||||
|
PermissionsManager permissions = Emulator.getGameEnvironment().getPermissionsManager();
|
||||||
|
|
||||||
|
int refreshed = 0;
|
||||||
|
|
||||||
|
for (Habbo habbo : habboManager.getOnlineHabbos().values()) {
|
||||||
|
if (habbo == null || habbo.getHabboInfo() == null || habbo.getClient() == null) continue;
|
||||||
|
|
||||||
|
int currentRankId = habbo.getHabboInfo().getRank().getId();
|
||||||
|
// Defensive fallback: if the admin deleted the rank from the
|
||||||
|
// permission_ranks table between sessions, fall back to rank 1
|
||||||
|
// (Member) so the user isn't stranded with a null Rank.
|
||||||
|
Rank freshRank = permissions.rankExists(currentRankId)
|
||||||
|
? permissions.getRank(currentRankId)
|
||||||
|
: permissions.getRank(1);
|
||||||
|
|
||||||
|
habbo.getHabboInfo().setRank(freshRank);
|
||||||
|
habbo.getClient().sendResponse(new UserPermissionsComposer(habbo));
|
||||||
|
refreshed++;
|
||||||
|
}
|
||||||
|
|
||||||
|
gameClient.getHabbo().whisper(
|
||||||
|
Emulator.getTexts().getValue("commands.succes.cmd_update_permissions") + " (" + refreshed + " online refreshed)",
|
||||||
|
RoomChatMessageBubbles.ALERT
|
||||||
|
);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user