# Wired Full Reference ## 1. Scope This document is a code-based reference for the current wired runtime in `Arcturus-Morningstar-Extended`. It covers: - general wired engine rules - tick and delay rules - protection and monitor rules - custom variable rules - every registered wired trigger, effect, selector, condition, extra, and variable definition Primary runtime sources used for this reference: - `Emulator/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java` - `Emulator/src/main/java/com/eu/habbo/habbohotel/wired/core/WiredManager.java` - `Emulator/src/main/java/com/eu/habbo/habbohotel/wired/core/WiredEngine.java` - `Emulator/src/main/java/com/eu/habbo/habbohotel/wired/tick/WiredTickService.java` - `Emulator/src/main/java/com/eu/habbo/habbohotel/wired/WiredHandler.java` This file is meant to describe the runtime behavior and configuration surface, not the Nitro UI layout in detail. For `:wired` monitor and inspection tooling, also see `Arcturus-Morningstar-Extended/docs/wired_tools_reference.md`. --- ## 2. Wired Engine, Tick, and General Runtime Rules ### 2.1 Main runtime architecture The modern wired runtime is centered around these components: - `WiredManager` - initializes the wired runtime - loads config - owns the centralized engine and stack index - exposes high-level trigger methods such as user click, walk on, say, signal, game events, and so on - `WiredEngine` - receives `WiredEvent` objects - finds candidate stacks through the room stack index - evaluates selectors, conditions, extras, and effects - enforces abuse protection, delayed queue limits, recursion limits, and diagnostics - `RoomWiredStackIndex` - caches stack membership so the engine can quickly find candidate stacks for a given event type - `WiredTickService` - runs a single global tick loop - keeps repeaters and other tickables synchronized across rooms - `WiredHandler` - legacy compatibility path that still exists in the codebase - still useful to understand older stack execution logic and some compatibility behavior ### 2.2 Current execution model At a high level, the engine processes a stack like this: 1. receive an event 2. find candidate stacks for the event type 3. check whether the trigger matches 4. build a `WiredContext` 5. run selectors first, so the target set is available 6. apply selection-filter extras if present 7. evaluate conditions 8. apply stack-level gates such as execution limit 9. activate the trigger and extras 10. execute or schedule effects Important consequences of this model: - selectors run before conditions in the new engine - conditions can inspect the selected targets or even the whole stack - effects may run immediately or with delay - extras can modify selection, condition evaluation, effect ordering, and effect subset choice ### 2.3 Tick rules The centralized tick service is defined in `WiredTickService`. Current core rules: - default global tick interval: `50ms` - hard allowed range: `10ms` to `500ms` - repeaters and other tickables use a shared global tick counter - tickables are registered per room - when a room is unloaded, tickables should be unregistered This means: - repeaters are synchronized with each other - two repeaters with the same timing do not drift independently per room - unload/cleanup behavior matters for room-scoped temporary state ### 2.4 Delay rules The classic wired delay value is stored in half-second steps. Runtime rule: - `effective delay in milliseconds = delay * 500` Examples: - delay `0` = immediate execution - delay `1` = `500ms` - delay `2` = `1000ms` This rule is used both by the legacy path and by the new engine. ### 2.5 Stack ordering rules There are several separate notions of order: - **stack candidate order** - candidate stacks are found through the index for the specific event type - **item ordering inside one tile stack** - `WiredExecutionOrderUtil` sorts by: - `z` - then `item id` - **effect subset modifiers** - `wf_xtra_random` can choose only part of the effects - `wf_xtra_unseen` can rotate through effects without repeats - **ordered execution** - `wf_xtra_exec_in_order` is the explicit “run in stable stack order” modifier Practical takeaway: - if there is no order modifier, execution may depend on the collection/order produced by the runtime path - if exact order matters, `wf_xtra_exec_in_order` is the intended box to use ### 2.6 Selection rules Selectors build or refine the `WiredTargets` inside `WiredContext`. In practice: - target users and target furni are built before conditions are checked - later effects consume those selected targets - some selectors are pure “build a selection” tools - some extras then trim, sort, or invert that selection ### 2.7 Condition rules Conditions are evaluated after selectors. General behavior: - if there are no conditions, the stack can continue directly to effects - if there are conditions, all configured condition logic must pass according to the current evaluation mode - `wf_xtra_or_eval` changes how the condition results are aggregated The runtime supports both: - ordinary condition matching - grouped OR semantics through condition operators and the OR-eval extra ### 2.8 Protection rules The wired runtime has multiple safety layers: - maximum steps per stack - recursion depth protection - per-room event rate limiting - room temporary wired ban after abuse - delayed queue cap - execution budget / usage cap per room window Main defaults from runtime/config: - `wired.engine.maxStepsPerStack = 100` - `wired.abuse.max.recursion.depth = 10` - `wired.abuse.max.events.per.window = 100` - `wired.abuse.rate.limit.window.ms = 10000` - `wired.abuse.ban.duration.ms = 600000` - `wired.monitor.usage.window.ms = 1000` - `wired.monitor.usage.limit = 1000` - `wired.monitor.delayed.events.limit = 100` ### 2.9 Monitor and diagnostics rules The new engine tracks room diagnostics through `WiredRoomDiagnostics`. This is where `:wired` monitor gets values such as: - usage in current window - delayed events count - average execution time - peak execution time - recursion state - heavy room status - overload windows Heavy/overload decisions are based on rolling windows, not on a single event. ### 2.10 Legacy compatibility notes The project still contains `WiredHandler`. Important practical notes: - `WiredManager` is the intended modern entrypoint - `wired.engine.enabled` and `wired.engine.exclusive` are treated as compatibility-only flags by `WiredManager` - `WiredHandler` still exists and is useful for compatibility and for understanding legacy behavior So when documenting stacks, it is best to think in terms of: - modern runtime: `WiredManager` + `WiredEngine` - legacy compatibility surface: `WiredHandler` ### 2.11 Custom variable rules Custom wired variables are defined by: - `wf_var_user` - `wf_var_furni` - `wf_var_room` Shared rules: - variable names must be unique across the whole room, even across different variable types - allowed name length: `1..40` - allowed characters: letters, numbers, `_` Availability rules: - `wf_var_user` - room-scoped while the user is in the room - or permanent - `wf_var_furni` - room-active while the room is active/loaded - or permanent - `wf_var_room` - room-active - or permanent Timestamp rules: - user variables: creation/update are tied to the assignment on that user - furni variables: creation/update are tied to the assignment on that furni - room variables: practically meaningful timestamp is mainly the last update time Current context-status note: - `context` appears in several variable-related layouts - it is still partial / placeholder in several runtime paths - `user`, `furni`, and `room/global` are the truly active targets today ### 2.12 Useful global config keys | Key | Meaning | |---|---| | `wired.engine.enabled` | Compatibility-only legacy flag | | `wired.engine.exclusive` | Compatibility-only legacy flag | | `wired.engine.maxStepsPerStack` | Loop/step protection limit | | `wired.engine.debug` | Verbose engine logging | | `wired.custom.enabled` | Legacy custom wired compatibility behavior | | `hotel.wired.furni.selection.count` | Max furni selection size stored by wired boxes | | `hotel.wired.max_delay` | Max accepted delay value | | `hotel.wired.message.max_length` | Max wired/bot text size | | `wired.effect.teleport.delay` | Teleport effect delay | | `wired.tick.interval.ms` | Global tick loop interval | | `wired.tick.debug` | Tick debug logging | | `wired.tick.thread.priority` | Tick thread priority | | `wired.abuse.max.recursion.depth` | Recursion protection | | `wired.abuse.max.events.per.window` | Event spam protection | | `wired.abuse.rate.limit.window.ms` | Abuse window size | | `wired.abuse.ban.duration.ms` | Temporary room wired-ban duration | | `wired.monitor.usage.window.ms` | Usage monitor window size | | `wired.monitor.usage.limit` | Execution budget per window | | `wired.monitor.delayed.events.limit` | Delayed queue ceiling | | `wired.monitor.overload.average.ms` | Overload average threshold | | `wired.monitor.overload.peak.ms` | Overload peak threshold | | `wired.monitor.heavy.usage.percent` | Heavy-room usage threshold | | `wired.highscores.displaycount` | Wired highscore rows shown to users | --- ## 3. Triggers ### `wf_trg_walks_on_furni` - **Class:** `WiredTriggerHabboWalkOnFurni` - **Behavior:** fires when a user walks onto the selected furni/tile stack. - **Main settings:** selected furni, standard trigger cooldown. - **Notes:** commonly used as the first event in movement or pressure-style stacks. ### `wf_trg_walks_off_furni` - **Class:** `WiredTriggerHabboWalkOffFurni` - **Behavior:** fires when a user leaves the selected furni/tile stack. - **Main settings:** selected furni, standard trigger cooldown. - **Notes:** useful for exit logic, cleanup logic, and delayed “leave area” patterns. ### `wf_trg_click_furni` - **Class:** `WiredTriggerHabboClicksFurni` - **Behavior:** fires when a user clicks a furni. - **Main settings:** selected furni. - **Notes:** click-based stacks often combine this with selectors or trigger-user conditions. ### `wf_trg_click_tile` - **Class:** `WiredTriggerHabboClicksTile` - **Behavior:** fires when a user clicks a tile. - **Main settings:** selected click-tile furni / trigger area depending on setup. - **Notes:** often used for invisible tile-style interactions. ### `wf_trg_click_user` - **Class:** `WiredTriggerHabboClicksUser` - **Behavior:** fires when one avatar clicks another avatar. - **Main settings:** runtime flags such as menu blocking and rotation behavior. - **Notes:** the event carries both the clicking user and the clicked user. ### `wf_trg_user_performs_action` - **Class:** `WiredTriggerHabboPerformsAction` - **Behavior:** fires when a user performs a configured avatar action. - **Main settings:** action id and action parameter. - **Notes:** pairs naturally with the matching positive/negative action conditions. ### `wf_trg_enter_room` - **Class:** `WiredTriggerHabboEntersRoom` - **Behavior:** fires when a user enters the room. - **Main settings:** none beyond default cooldown. - **Notes:** common for welcome logic, spawn logic, variable assignment, and snapshot restore. ### `wf_trg_leave_room` - **Class:** `WiredTriggerHabboLeavesRoom` - **Behavior:** fires when a user leaves the room. - **Main settings:** none beyond default cooldown. - **Notes:** common for cleanup and last-known-state stacks. ### `wf_trg_says_something` - **Class:** `WiredTriggerHabboSaysKeyword` - **Behavior:** fires when a user says the configured text/keyword. - **Main settings:** text/keyword, message hiding mode. - **Notes:** can optionally suppress the visible chat output when configured to hide the message. ### `wf_trg_clock_counter` - **Class:** `WiredTriggerClockCounter` - **Behavior:** fires when a selected counter reaches its configured match point. - **Main settings:** target counter(s), counter matching behavior. - **Notes:** often combined with `wf_act_control_clock` and `wf_act_adjust_clock`. ### `wf_trg_periodically` - **Class:** `WiredTriggerRepeater` - **Behavior:** fires on a repeating interval. - **Main settings:** repeat interval. - **Notes:** synchronized through the global tick service. ### `wf_trg_period_short` - **Class:** `WiredTriggerRepeaterShort` - **Behavior:** faster repeating trigger with short cadence. - **Main settings:** short repeater timing. - **Notes:** aligned to the global `50ms` tick service. ### `wf_trg_period_long` - **Class:** `WiredTriggerRepeaterLong` - **Behavior:** repeating trigger with longer cadence. - **Main settings:** long repeater timing. - **Notes:** intended for lower-frequency repeating behavior. ### `wf_trg_state_changed` - **Class:** `WiredTriggerFurniStateToggled` - **Behavior:** fires when the state of the selected furni changes. - **Main settings:** selected furni. - **Notes:** runtime is shared with `wf_trg_stuff_state`. ### `wf_trg_stuff_state` - **Class:** `WiredTriggerFurniStateToggled` - **Behavior:** same runtime behavior as `wf_trg_state_changed`. - **Main settings:** selected furni. - **Notes:** kept as a second key/alias for compatibility/content mapping. ### `wf_trg_at_given_time` - **Class:** `WiredTriggerAtSetTime` - **Behavior:** fires once after the configured time target is reached. - **Main settings:** time value. - **Notes:** behaves like a one-shot timer rather than a repeater. ### `wf_trg_at_time_long` - **Class:** `WiredTriggerAtTimeLong` - **Behavior:** long-duration variant of the set-time trigger. - **Main settings:** time value. - **Notes:** used when the short version is not sufficient for the desired range. ### `wf_trg_collision` - **Class:** `WiredTriggerCollision` - **Behavior:** fires when the configured collision case is detected. - **Main settings:** collision participants / collision mode. - **Notes:** can easily produce loops when combined with chase/flee unless protections are configured. ### `wf_trg_game_starts` - **Class:** `WiredTriggerGameStarts` - **Behavior:** fires when the room game starts. - **Main settings:** none beyond default cooldown. - **Notes:** useful for score resets, timers, and spawn setup. ### `wf_trg_game_ends` - **Class:** `WiredTriggerGameEnds` - **Behavior:** fires when the room game ends. - **Main settings:** none beyond default cooldown. - **Notes:** useful for rewards, cleanup, and reset logic. ### `wf_trg_bot_reached_stf` - **Class:** `WiredTriggerBotReachedFurni` - **Behavior:** fires when a bot reaches the selected furni. - **Main settings:** bot path target furni. - **Notes:** typically paired with bot movement effects. ### `wf_trg_bot_reached_avtr` - **Class:** `WiredTriggerBotReachedHabbo` - **Behavior:** fires when a bot reaches an avatar. - **Main settings:** target avatar/source mode. - **Notes:** useful for escort, interaction, or story-style flows. ### `wf_trg_score_achieved` - **Class:** `WiredTriggerScoreAchieved` - **Behavior:** fires when the configured score threshold is reached. - **Main settings:** score threshold. - **Notes:** usually tied to game or team score flows. ### `wf_trg_game_team_win` - **Class:** `WiredTriggerTeamWins` - **Behavior:** fires when a team wins the current room game. - **Main settings:** target team. - **Notes:** can be used for reward or celebration logic. ### `wf_trg_game_team_lose` - **Class:** `WiredTriggerTeamLoses` - **Behavior:** fires when a team loses the current room game. - **Main settings:** target team. - **Notes:** often paired with reset or consolation logic. ### `wf_trg_recv_signal` - **Class:** `WiredTriggerReceiveSignal` - **Behavior:** fires when a matching signal is received from `wf_act_send_signal`. - **Main settings:** selected antenna(s), signal/channel matching. - **Notes:** can receive user/furni payload carried by the signal event. --- ## 4. Effects ### `wf_act_toggle_state` - **Class:** `WiredEffectToggleFurni` - **Behavior:** toggles the state of the selected furni. - **Main settings:** selected furni, effect delay. - **Notes:** one of the most common state-manipulation effects. ### `wf_act_reset_timers` - **Class:** `WiredEffectResetTimers` - **Behavior:** resets compatible timer/repeater-style boxes. - **Main settings:** selected timer/counter/repeater items. - **Notes:** used to restart timing flows cleanly. ### `wf_act_match_to_sshot` - **Class:** `WiredEffectMatchFurni` - **Behavior:** restores furni to a saved snapshot of state/position/rotation settings. - **Main settings:** selected furni, snapshot match mode/settings. - **Notes:** usually paired with move/rotate or state-change effects. ### `wf_act_move_rotate` - **Class:** `WiredEffectMoveRotateFurni` - **Behavior:** moves and/or rotates furni according to the configured pattern. - **Main settings:** selected furni, movement direction, rotation behavior, effect delay. - **Notes:** obeys move physics extras when present. ### `wf_act_give_score` - **Class:** `WiredEffectGiveScore` - **Behavior:** gives score to the target user/player. - **Main settings:** score amount. - **Notes:** room/game scoring effect. ### `wf_act_show_message` - **Class:** `WiredEffectWhisper` - **Behavior:** sends the configured message text. - **Main settings:** message text, effect delay. - **Notes:** text length is limited by wired message config. ### `wf_act_teleport_to` - **Class:** `WiredEffectTeleport` - **Behavior:** teleports the target user to the configured destination. - **Main settings:** target furni/tile, effect delay. - **Notes:** also respects `wired.effect.teleport.delay`. ### `wf_act_join_team` - **Class:** `WiredEffectJoinTeam` - **Behavior:** moves the target user into the selected team. - **Main settings:** team id/color. - **Notes:** game-specific utility effect. ### `wf_act_leave_team` - **Class:** `WiredEffectLeaveTeam` - **Behavior:** removes the target user from their team. - **Main settings:** effect delay. - **Notes:** typically used in game cleanup. ### `wf_act_chase` - **Class:** `WiredEffectMoveFurniTowards` - **Behavior:** moves furni toward the configured target. - **Main settings:** selected furni, target source, movement distance/direction rules. - **Notes:** can interact strongly with collision and movement validation. ### `wf_act_flee` - **Class:** `WiredEffectMoveFurniAway` - **Behavior:** moves furni away from the configured target. - **Main settings:** selected furni, target source, movement rules. - **Notes:** often paired with collision or proximity triggers. ### `wf_act_move_to_dir` - **Class:** `WiredEffectChangeFurniDirection` - **Behavior:** changes furni direction/rotation. - **Main settings:** selected furni, new direction or direction mode. - **Notes:** pure direction-change effect without full movement pathing. ### `wf_act_give_score_tm` - **Class:** `WiredEffectGiveScoreToTeam` - **Behavior:** gives score directly to a team. - **Main settings:** team id and score amount. - **Notes:** separate from single-user score. ### `wf_act_toggle_to_rnd` - **Class:** `WiredEffectToggleRandom` - **Behavior:** toggles a random compatible furni among the selected set. - **Main settings:** selected furni. - **Notes:** randomness is per execution. ### `wf_act_move_furni_to` - **Class:** `WiredEffectMoveFurniTo` - **Behavior:** moves furni to a configured target position. - **Main settings:** selected furni, destination tile/furni, effect delay. - **Notes:** works with movement physics and animation extras. ### `wf_act_give_reward` - **Class:** `WiredEffectGiveReward` - **Behavior:** gives a configured reward. - **Main settings:** reward type, reward content, amount, inventory/catalog parameters depending on reward mode. - **Notes:** may generate inventory items, badges, or related reward outputs depending on configuration. ### `wf_act_call_stacks` - **Class:** `WiredEffectTriggerStacks` - **Behavior:** triggers other stacks indirectly. - **Main settings:** selected furni/tile sources. - **Notes:** recursion protection is important here. ### `wf_act_kick_user` - **Class:** `WiredEffectKickHabbo` - **Behavior:** kicks the target user from the room. - **Main settings:** target source, effect delay. - **Notes:** administrative/gameplay removal effect. ### `wf_act_mute_triggerer` - **Class:** `WiredEffectMuteHabbo` - **Behavior:** mutes the target user. - **Main settings:** mute duration / target source depending on layout. - **Notes:** often used in moderation or mini-game penalties. ### `wf_act_bot_teleport` - **Class:** `WiredEffectBotTeleport` - **Behavior:** teleports the selected bot. - **Main settings:** bot source and destination. - **Notes:** bot-only effect. ### `wf_act_bot_move` - **Class:** `WiredEffectBotWalkToFurni` - **Behavior:** makes a bot walk toward the selected furni. - **Main settings:** bot source, target furni. - **Notes:** commonly paired with bot reached triggers. ### `wf_act_bot_talk` - **Class:** `WiredEffectBotTalk` - **Behavior:** makes a bot say configured text. - **Main settings:** bot source, message text. - **Notes:** subject to wired/bot text size limits. ### `wf_act_bot_give_handitem` - **Class:** `WiredEffectBotGiveHandItem` - **Behavior:** gives a handitem to a bot. - **Main settings:** bot source, handitem id. - **Notes:** bot cosmetic / state effect. ### `wf_act_bot_follow_avatar` - **Class:** `WiredEffectBotFollowHabbo` - **Behavior:** makes a bot follow an avatar. - **Main settings:** bot source, avatar source. - **Notes:** useful for escort or scripted behaviors. ### `wf_act_bot_clothes` - **Class:** `WiredEffectBotClothes` - **Behavior:** changes a bot’s clothes/look. - **Main settings:** bot source, look string. - **Notes:** bot appearance effect. ### `wf_act_bot_talk_to_avatar` - **Class:** `WiredEffectBotTalkToHabbo` - **Behavior:** makes a bot talk toward an avatar/target. - **Main settings:** bot source, avatar target, text. - **Notes:** dialogue-oriented bot effect. ### `wf_act_give_respect` - **Class:** `WiredEffectGiveRespect` - **Behavior:** gives respect to the target user. - **Main settings:** respect amount / target source. - **Notes:** social reward effect. ### `wf_act_alert` - **Class:** `WiredEffectAlert` - **Behavior:** sends an alert window/message. - **Main settings:** alert text. - **Notes:** distinct from whisper-style chat output. ### `wf_act_give_handitem` - **Class:** `WiredEffectGiveHandItem` - **Behavior:** gives a handitem to the target user. - **Main settings:** handitem id. - **Notes:** user state/cosmetic effect. ### `wf_act_give_effect` - **Class:** `WiredEffectGiveEffect` - **Behavior:** gives an avatar effect to the target user. - **Main settings:** effect id. - **Notes:** visual avatar effect. ### `wf_act_freeze` - **Class:** `WiredEffectFreeze` - **Behavior:** freezes the selected user targets. - **Main settings:** target source, effect delay. - **Notes:** mainly game/control utility. ### `wf_act_unfreeze` - **Class:** `WiredEffectUnfreeze` - **Behavior:** unfreezes the selected user targets. - **Main settings:** target source, effect delay. - **Notes:** counterpart to `wf_act_freeze`. ### `wf_act_furni_to_user` - **Class:** `WiredEffectFurniToUser` - **Behavior:** moves furni toward/on a user target. - **Main settings:** furni source, user source, effect delay. - **Notes:** movement batching/physics extras may change the visible result. ### `wf_act_user_to_furni` - **Class:** `WiredEffectUserToFurni` - **Behavior:** moves a user toward a furni target. - **Main settings:** user source, furni target. - **Notes:** a user-targeted movement effect. ### `wf_act_furni_to_furni` - **Class:** `WiredEffectFurniToFurni` - **Behavior:** moves one furni set onto another furni set. - **Main settings:** primary furni source, secondary furni source. - **Notes:** supports double-selection source flow. ### `wf_act_set_altitude` - **Class:** `WiredEffectSetAltitude` - **Behavior:** sets furni altitude. - **Main settings:** selected furni, altitude value or altitude mode. - **Notes:** used in advanced movement / stacking setups. ### `wf_act_rel_mov` - **Class:** `WiredEffectRelativeMove` - **Behavior:** moves furni using relative X/Y offsets. - **Main settings:** selected furni, X offset, Y offset. - **Notes:** easier to reason about than absolute destination when building movement loops. ### `wf_act_control_clock` - **Class:** `WiredEffectControlClock` - **Behavior:** controls counter boxes. - **Main settings:** selected counter(s), action mode such as start/stop/reset/pause/resume. - **Notes:** works directly with counter-based trigger/condition flows. ### `wf_act_adjust_clock` - **Class:** `WiredEffectAdjustClock` - **Behavior:** adjusts a counter’s current value. - **Main settings:** selected counter(s), operation mode, amount. - **Notes:** intended for dynamic counter manipulation. ### `wf_act_move_rotate_user` - **Class:** `WiredEffectMoveRotateUser` - **Behavior:** moves and/or rotates user targets. - **Main settings:** user source, movement mode, direction/rotation settings. - **Notes:** user-side analogue of furni move/rotate logic. ### `wf_act_send_signal` - **Class:** `WiredEffectSendSignal` - **Behavior:** sends a signal through antenna-based wiring. - **Main settings:** selected antenna furni, signal payload/source options. - **Notes:** can carry user/furni payload to `wf_trg_recv_signal`. ### `wf_act_give_var` - **Class:** `WiredEffectGiveVariable` - **Behavior:** assigns a custom variable to a compatible target. - **Main settings:** variable definition, target type/source, overwrite flag, initial value if the variable has value. - **Notes:** works with `wf_var_user` and `wf_var_furni`; room/global variables are definition-driven and do not need this assigner. ### `wf_act_remove_var` - **Class:** `WiredEffectRemoveVariable` - **Behavior:** removes a custom variable assignment from the selected target. - **Main settings:** variable definition, target type/source. - **Notes:** counterpart to `wf_act_give_var`. ### `wf_act_change_var_val` - **Class:** `WiredEffectChangeVariableValue` - **Behavior:** changes the value of a variable by applying an operation. - **Main settings:** variable selection, operation, reference mode, constant or reference variable, reference source, target source. - **Supported operations:** assign, add, subtract, multiply, divide, power, modulo, min, max, random, absolute, bitwise AND/OR/XOR/NOT, left shift, right shift. - **Notes:** one of the most flexible variable effects; textual rendering is separate and handled by extras. --- ## 5. Selectors ### General selector notes Selectors typically do one or both of these: - build a new target set - filter/transform an existing target set When the UI exposes classic selector options, those usually include: - filter the existing selection - invert the result ### `wf_slc_furni_area` - **Class:** `WiredEffectFurniArea` - **Behavior:** selects furni in a configured area. - **Main settings:** area size/position. - **Notes:** foundational room-space selector. ### `wf_slc_furni_neighborhood` - **Class:** `WiredEffectFurniNeighborhood` - **Behavior:** selects furni in a local neighborhood around the source point. - **Main settings:** neighborhood/radius. - **Notes:** useful for adjacency-based logic. ### `wf_slc_furni_bytype` - **Class:** `WiredEffectFurniByType` - **Behavior:** selects furni by base furni type. - **Main settings:** furni type. - **Notes:** good for “all chairs”, “all switches”, and similar patterns. ### `wf_slc_furni_altitude` - **Class:** `WiredEffectFurniAltitude` - **Behavior:** selects furni by altitude relation/value. - **Main settings:** compare mode and altitude target. - **Notes:** useful in stacked build logic. ### `wf_slc_furni_onfurni` - **Class:** `WiredEffectFurniOnFurni` - **Behavior:** selects furni that are on top of other furni. - **Main settings:** base furni selection. - **Notes:** stack-inspection selector. ### `wf_slc_furni_picks` - **Class:** `WiredEffectFurniPicks` - **Behavior:** selects a hand-picked list of furni. - **Main settings:** selected furni list. - **Notes:** capped by `hotel.wired.furni.selection.count`. ### `wf_slc_furni_signal` - **Class:** `WiredEffectFurniSignal` - **Behavior:** selects furni carried by a signal event. - **Main settings:** signal source mode. - **Notes:** meaningful only in signal-driven stacks. ### `wf_slc_users_area` - **Class:** `WiredEffectUsersArea` - **Behavior:** selects users in a configured area. - **Main settings:** area size/position. - **Notes:** area equivalent of the furni selector. ### `wf_slc_users_neighborhood` - **Class:** `WiredEffectUsersNeighborhood` - **Behavior:** selects users in a nearby neighborhood. - **Main settings:** neighborhood/radius. - **Notes:** good for local interaction logic. ### `wf_slc_users_signal` - **Class:** `WiredEffectUsersSignal` - **Behavior:** selects users carried by a signal event. - **Main settings:** signal source mode. - **Notes:** signal-only context. ### `wf_slc_users_bytype` - **Class:** `WiredEffectUsersByType` - **Behavior:** selects users by runtime category. - **Main settings:** user type such as habbo, bot, pet. - **Notes:** useful for mixed rooms with bots and pets. ### `wf_slc_users_team` - **Class:** `WiredEffectUsersTeam` - **Behavior:** selects users by team membership. - **Main settings:** team id/color. - **Notes:** game-centric selector. ### `wf_slc_users_byaction` - **Class:** `WiredEffectUsersByAction` - **Behavior:** selects users by current action/state. - **Main settings:** action type / action parameter. - **Notes:** complements the action trigger/conditions. ### `wf_slc_users_byname` - **Class:** `WiredEffectUsersByName` - **Behavior:** selects users whose names are listed in the text area. - **Main settings:** multiline list of usernames. - **Notes:** direct name-driven selector. ### `wf_slc_users_handitem` - **Class:** `WiredEffectUsersHandItem` - **Behavior:** selects users holding a specific handitem. - **Main settings:** handitem id. - **Notes:** useful for role/item possession flows. ### `wf_slc_users_onfurni` - **Class:** `WiredEffectUsersOnFurni` - **Behavior:** selects users standing on selected furni. - **Main settings:** base furni selection. - **Notes:** common in pressure/tile gameplay. ### `wf_slc_users_group` - **Class:** `WiredEffectUsersGroup` - **Behavior:** selects users by group relationship in the room. - **Main settings:** group relation/mode. - **Notes:** useful for rights/group-room logic. ### `wf_slc_furni_with_var` - **Class:** `WiredEffectFurniWithVariable` - **Behavior:** selects furni that hold a chosen custom variable. - **Main settings:** variable selection, optional value filter, comparison operator, constant or variable reference, reference source, selector options. - **Notes:** if value filtering is disabled, it behaves as a presence-only selector. ### `wf_slc_users_with_var` - **Class:** `WiredEffectUsersWithVariable` - **Behavior:** selects users that hold a chosen custom variable. - **Main settings:** variable selection, optional value filter, comparison operator, constant or variable reference, reference source, selector options. - **Notes:** user-side analogue of the furni variable selector. --- ## 6. Conditions ### General condition notes Conditions can be thought of as gates for the stack. Common patterns: - positive/negative counterpart pairs - threshold checks - “match the current selection” - variable-based checks - time/date checks ### `wf_cnd_has_furni_on` - **Class:** `WiredConditionFurniHaveFurni` - **Behavior:** true if the configured furni have other furni on top. - **Main settings:** target furni selection. ### `wf_cnd_furnis_hv_avtrs` - **Class:** `WiredConditionFurniHaveHabbo` - **Behavior:** true if the configured furni currently have avatars on top. - **Main settings:** target furni selection. ### `wf_cnd_stuff_is` - **Class:** `WiredConditionFurniTypeMatch` - **Behavior:** true if the furni match the configured type. - **Main settings:** furni type. ### `wf_cnd_actor_in_group` - **Class:** `WiredConditionGroupMember` - **Behavior:** true if the acting user is in the required group relation. - **Main settings:** group relation. ### `wf_cnd_user_count_in` - **Class:** `WiredConditionHabboCount` - **Behavior:** true if room user count satisfies the configured threshold. - **Main settings:** comparison and count value. ### `wf_cnd_wearing_effect` - **Class:** `WiredConditionHabboHasEffect` - **Behavior:** true if the target user is wearing the configured effect. - **Main settings:** effect id. ### `wf_cnd_wearing_badge` - **Class:** `WiredConditionHabboWearsBadge` - **Behavior:** true if the target user wears the configured badge. - **Main settings:** badge code. ### `wf_cnd_time_less_than` - **Class:** `WiredConditionLessTimeElapsed` - **Behavior:** true if less than the configured time has elapsed. - **Main settings:** duration. ### `wf_cnd_match_snapshot` - **Class:** `WiredConditionMatchStatePosition` - **Behavior:** true if the current furni state/position matches the stored snapshot. - **Main settings:** selected furni, snapshot fields to compare. ### `wf_cnd_time_more_than` - **Class:** `WiredConditionMoreTimeElapsed` - **Behavior:** true if more than the configured time has elapsed. - **Main settings:** duration. ### `wf_cnd_not_furni_on` - **Class:** `WiredConditionNotFurniHaveFurni` - **Behavior:** logical negation of `wf_cnd_has_furni_on`. - **Main settings:** target furni selection. ### `wf_cnd_not_hv_avtrs` - **Class:** `WiredConditionNotFurniHaveHabbo` - **Behavior:** logical negation of `wf_cnd_furnis_hv_avtrs`. - **Main settings:** target furni selection. ### `wf_cnd_not_stuff_is` - **Class:** `WiredConditionNotFurniTypeMatch` - **Behavior:** logical negation of `wf_cnd_stuff_is`. - **Main settings:** furni type. ### `wf_cnd_not_user_count` - **Class:** `WiredConditionNotHabboCount` - **Behavior:** logical negation of the user-count match. - **Main settings:** comparison and count value. ### `wf_cnd_not_wearing_fx` - **Class:** `WiredConditionNotHabboHasEffect` - **Behavior:** true if the user is not wearing the configured effect. - **Main settings:** effect id. ### `wf_cnd_not_wearing_b` - **Class:** `WiredConditionNotHabboWearsBadge` - **Behavior:** true if the user is not wearing the configured badge. - **Main settings:** badge code. ### `wf_cnd_not_in_group` - **Class:** `WiredConditionNotInGroup` - **Behavior:** true if the user is not in the configured group relation. - **Main settings:** group relation. ### `wf_cnd_not_in_team` - **Class:** `WiredConditionNotInTeam` - **Behavior:** true if the user is not in the configured team. - **Main settings:** team id/color. ### `wf_cnd_not_match_snap` - **Class:** `WiredConditionNotMatchStatePosition` - **Behavior:** logical negation of snapshot match. - **Main settings:** selected furni, snapshot fields to compare. ### `wf_cnd_not_trggrer_on` - **Class:** `WiredConditionNotTriggerOnFurni` - **Behavior:** true if the triggerer is not on the selected furni. - **Main settings:** selected furni. ### `wf_cnd_actor_in_team` - **Class:** `WiredConditionTeamMember` - **Behavior:** true if the actor belongs to the required team. - **Main settings:** team id/color. ### `wf_cnd_trggrer_on_frn` - **Class:** `WiredConditionTriggerOnFurni` - **Behavior:** true if the triggerer is on the selected furni. - **Main settings:** selected furni. ### `wf_cnd_has_handitem` - **Class:** `WiredConditionHabboHasHandItem` - **Behavior:** true if the user currently holds the configured handitem. - **Main settings:** handitem id. ### `wf_cnd_not_has_handitem` - **Class:** `WiredConditionNotHabboHasHandItem` - **Behavior:** logical negation of the handitem condition. - **Main settings:** handitem id. ### `wf_cnd_date_rng_active` - **Class:** `WiredConditionDateRangeActive` - **Behavior:** true if current server time is between the configured absolute date/time bounds. - **Main settings:** start timestamp, end timestamp. ### `wf_cnd_valid_moves` - **Class:** `WiredConditionMovementValidation` - **Behavior:** simulates movement-related effects in the current stack and fails if a movement would be invalid. - **Main settings:** no major user-facing setting besides stack composition. - **Notes:** especially useful before move/rotate stacks. ### `wf_cnd_counter_time_matches` - **Class:** `WiredConditionCounterTimeMatches` - **Behavior:** true if the selected counter(s) match the configured time value. - **Main settings:** counter selection, compare mode, target value, quantifier. ### `wf_cnd_match_time` - **Class:** `WiredConditionMatchTime` - **Behavior:** true if server local time matches the configured clock rule. - **Main settings:** hour/minute/second or related time fields. ### `wf_cnd_match_date` - **Class:** `WiredConditionMatchDate` - **Behavior:** true if server local date matches the configured date rule. - **Main settings:** weekday/day/month/year. ### `wf_cnd_actor_dir` - **Class:** `WiredConditionActorDir` - **Behavior:** true if the actor faces the configured direction. - **Main settings:** direction. ### `wf_cnd_slc_quantity` - **Class:** `WiredConditionSelectionQuantity` - **Behavior:** true if the current selection size matches the configured threshold. - **Main settings:** compare mode and amount. ### `wf_cnd_user_performs_action` - **Class:** `WiredConditionUserPerformsAction` - **Behavior:** true if the tracked user action matches. - **Main settings:** action id / action parameter. ### `wf_cnd_not_user_performs_action` - **Class:** `WiredConditionNotUserPerformsAction` - **Behavior:** logical negation of the user action condition. - **Main settings:** action id / action parameter. ### `wf_cnd_has_altitude` - **Class:** `WiredConditionHasAltitude` - **Behavior:** true if the selected furni satisfy the altitude comparison. - **Main settings:** compare mode and altitude value. ### `wf_cnd_triggerer_match` - **Class:** `WiredConditionTriggererMatch` - **Behavior:** true if the triggerer matches the required target/source rule. - **Main settings:** target source/match mode. ### `wf_cnd_not_triggerer_match` - **Class:** `WiredConditionNotTriggererMatch` - **Behavior:** logical negation of triggerer match. - **Main settings:** target source/match mode. ### `wf_cnd_team_has_score` - **Class:** `WiredConditionTeamHasScore` - **Behavior:** true if the selected team score satisfies the configured comparison. - **Main settings:** team id, comparison mode, score threshold. ### `wf_cnd_team_has_rank` - **Class:** `WiredConditionTeamHasRank` - **Behavior:** true if the selected team currently has the configured rank/placement. - **Main settings:** team id, rank target. ### `wf_cnd_has_var` - **Class:** `WiredConditionHasVariable` - **Behavior:** true if the target entity holds the chosen variable. - **Main settings:** variable selection, quantifier (`all` / `any`), variable source target. - **Notes:** current layout/runtime is centered on user and furni variables; context exists as future placeholder. ### `wf_cnd_neg_has_var` - **Class:** `WiredConditionNotHasVariable` - **Behavior:** logical negation of `wf_cnd_has_var`. - **Main settings:** variable selection, quantifier, source target. ### `wf_cnd_var_val_match` - **Class:** `WiredConditionVariableValueMatch` - **Behavior:** compares a variable value against a constant or another variable. - **Main settings:** variable selection, compare type (`>`, `≥`, `=`, `≤`, `<`, `≠`), reference mode, reference variable/source, quantifier. - **Notes:** room/global variables are supported here; context remains partial. ### `wf_cnd_var_age_match` - **Class:** `WiredConditionVariableAgeMatch` - **Behavior:** compares variable age against a duration. - **Main settings:** variable selection, compare field (`creation` or `update` time), compare type (`lower than` / `higher than`), duration value + unit, quantifier, source. - **Notes:** room/global variables are mostly meaningful for update time. --- ## 7. Extras ### `wf_xtra_random` - **Class:** `WiredExtraRandom` - **Behavior:** executes only a random subset of effects instead of all effects. - **Main settings:** number of effects to choose, optional recent-history protection. - **Notes:** effect subset changes at each execution. ### `wf_xtra_unseen` - **Class:** `WiredExtraUnseen` - **Behavior:** rotates through effects without repeating one until the full cycle is exhausted. - **Main settings:** hidden runtime state / no-repeat cycle. - **Notes:** useful when true round-robin behavior is preferred over randomness. ### `wf_blob` - **Class:** `WiredBlob` - **Behavior:** special wired/game helper item. - **Main settings:** blob-specific gameplay/runtime state. - **Notes:** not a normal logic extra in the same sense as the others, but it is registered in the wired extra family. ### `wf_xtra_or_eval` - **Class:** `WiredExtraOrEval` - **Behavior:** changes how condition results are aggregated. - **Main settings:** evaluation mode and compare value. - **Notes:** lets stacks use modes beyond plain “all conditions must pass”. ### `wf_xtra_filter_furni` - **Class:** `WiredExtraFilterFurni` - **Behavior:** trims the current furni selection to a limited quantity. - **Main settings:** quantity. - **Notes:** selection-filter extra, not a normal selector. ### `wf_xtra_filter_user` - **Class:** `WiredExtraFilterUser` - **Behavior:** trims the current user selection to a limited quantity. - **Main settings:** quantity. - **Notes:** same runtime family as `wf_xtra_filter_users`. ### `wf_xtra_filter_users` - **Class:** `WiredExtraFilterUser` - **Behavior:** same runtime behavior as `wf_xtra_filter_user`. - **Main settings:** quantity. - **Notes:** alias key kept for content compatibility. ### `wf_xtra_filter_furni_by_var` - **Class:** `WiredExtraFilterFurniByVariable` - **Behavior:** sorts furni by variable metric and keeps only the top N. - **Main settings:** variable selection, sort mode, quantity mode, constant quantity or variable reference, reference source. - **Supported sort modes:** highest value, lowest value, oldest creation, latest creation, oldest update, latest update. ### `wf_xtra_filter_users_by_var` - **Class:** `WiredExtraFilterUsersByVariable` - **Behavior:** sorts users by variable metric and keeps only the top N. - **Main settings:** variable selection, sort mode, quantity mode, constant quantity or variable reference, reference source. - **Supported sort modes:** highest value, lowest value, oldest creation, latest creation, oldest update, latest update. ### `wf_xtra_mov_carry_users` - **Class:** `WiredExtraMoveCarryUsers` - **Behavior:** carries users together with moved furni. - **Main settings:** carry mode. - **Notes:** affects how movement results are applied when furni move. ### `wf_xtra_mov_no_animation` - **Class:** `WiredExtraMoveNoAnimation` - **Behavior:** suppresses movement animation. - **Main settings:** none besides presence in stack. - **Notes:** intended for instant or hidden movement behavior. ### `wf_xtra_anim_time` - **Class:** `WiredExtraAnimationTime` - **Behavior:** overrides movement animation time. - **Main settings:** animation duration. - **Notes:** influences visual pacing, not core selection logic. ### `wf_xtra_mov_physics` - **Class:** `WiredExtraMovePhysics` - **Behavior:** changes the physics rules applied during movement. - **Main settings:** physics flags such as collision/pass-through/stack behavior depending on layout. - **Notes:** important for advanced furni movement setups. ### `wf_xtra_exec_in_order` - **Class:** `WiredExtraExecuteInOrder` - **Behavior:** forces ordered effect execution. - **Main settings:** none besides presence in stack. - **Notes:** the explicit “do not rely on arbitrary order” extra. ### `wf_xtra_execution_limit` - **Class:** `WiredExtraExecutionLimit` - **Behavior:** allows the stack to execute only a configured number of times per window. - **Main settings:** max executions, time window. - **Notes:** stack-level throttle. ### `wf_xtra_text_output_username` - **Class:** `WiredExtraTextOutputUsername` - **Behavior:** exposes one or more usernames as a text placeholder for other wired text. - **Main settings:** placeholder name, placeholder type (single/multiple), delimiter, user source. - **Notes:** works like a text injector for later wired text output. ### `wf_xtra_text_output_furni_name` - **Class:** `WiredExtraTextOutputFurniName` - **Behavior:** exposes furni names as a text placeholder. - **Main settings:** placeholder name, placeholder type (single/multiple), delimiter, furni source. - **Notes:** furni-name counterpart to username output. ### `wf_xtra_text_output_variable` - **Class:** `WiredExtraTextOutputVariable` - **Behavior:** exposes a variable value as a text placeholder. - **Main settings:** placeholder name, variable selection, display type (`numeric` / `textual`), placeholder type (`single` / `multiple`), delimiter, dynamic variable source. - **Notes:** textual display works only when the selected variable is connected through `wf_xtra_var_text_connector`. ### `wf_xtra_var_text_connector` - **Class:** `WiredExtraVariableTextConnector` - **Behavior:** maps numeric values to text labels for a variable. - **Main settings:** text area mapping in the form `0=text`, `1=text`, and so on. - **Notes:** must live in the same stack context as the corresponding `wf_var_*` definition to be meaningful. --- ## 8. Variable Definitions ### `wf_var_user` - **Class:** `WiredExtraUserVariable` - **Behavior:** defines a custom variable that can be assigned to users. - **Main settings:** variable name, `has value` flag, availability (`while user is in room` / `permanent`). - **Notes:** assignment is done through `wf_act_give_var`; timestamps belong to the assignment on the individual user. ### `wf_var_furni` - **Class:** `WiredExtraFurniVariable` - **Behavior:** defines a custom variable that can be assigned to furni. - **Main settings:** variable name, `has value` flag, availability (`while room is active` / `permanent`). - **Notes:** non-permanent assignments are cleaned when the room is unloaded/unregistered from room tickables. ### `wf_var_room` - **Class:** `WiredExtraRoomVariable` - **Behavior:** defines a room/global variable. - **Main settings:** variable name, availability (`while room is active` / `permanent`). - **Notes:** always has a value; there is no separate “has value” checkbox for room variables. --- ## 9. Special Wired Items These are part of the wired ecosystem, even if they are not regular trigger/effect/selector/condition/extra boxes. ### `wf_highscore` - **Class:** `InteractionWiredHighscore` - **Behavior:** wired highscore furniture that stores and displays ranked score data. - **Main settings:** score type, clear/reset policy, display behavior depending on furniture configuration. - **Notes:** governed also by `wired.highscores.displaycount`. --- ## 10. Practical Design Notes ### 10.1 If exact order matters Use: - `wf_xtra_exec_in_order` Do not rely on “it seems to run in that order” when the stack becomes more complex. ### 10.2 If the stack performs movement Prefer to think about: - movement validation - movement physics extras - carry-users extra - animation/no-animation extras - snapshot restore effects Movement stacks are where most subtle runtime interactions appear. ### 10.3 If the stack uses variables Remember: - variable name must be room-unique - target type matters - room/global variables are definition-driven - textual rendering requires the text connector - `context` is not yet fully implemented everywhere ### 10.4 If the stack uses repeaters/timers Remember: - repeaters are synchronized on the global tick loop - delay units are half-seconds - counters, repeaters, and timer-style triggers often need explicit reset/control logic ### 10.5 If the stack is heavy Check: - selection size - number of delayed effects - recursion or self-trigger chains - random/unseen subsets - execution limits - room diagnostics in `:wired` --- ## 11. Quick Alias / Shared Runtime Notes - `wf_trg_state_changed` and `wf_trg_stuff_state` share the same runtime. - `wf_xtra_filter_user` and `wf_xtra_filter_users` share the same runtime. - Several positive/negative conditions are simple logical counterparts. - `wf_act_give_var`, `wf_act_remove_var`, `wf_act_change_var_val`, variable selectors, and variable conditions all operate on top of the same custom variable system defined by `wf_var_*`.