questlines-core-1.14.0.jar
What's new
QuestLines Core – Version 1.14.0
━━━━━━━━━━━━━━━━━━━━━━
🆕 Features
• Escort NPCs now act like regular questgivers - interacting with an escort clone opens the dialogue / quest board of the NPC it was cloned from.
• Achievement kill/break/gather/travel criteria can now be scoped to a world with a trailing world: filter, so an achievement counts only events in that world.
• Plugins can now read a player's raw login streak through the API, not just test it against a threshold.
🆕 Actions
• escortQuests:escortId:quest1,quest2 - override the quests an escort companion offers instead of mirroring its source NPC; escortQuests:escortId:none clears it.
• notifystack: now takes an optional trailing sound name to play a custom SoundEvent per notification (or none to silence that card).
• The variable: action gained floordivide, modulo, floor, ceil, round, min and max operations, and its operand can be another variable - enabling math between two variables.
🆕 Requirements
• Quest kill requirements can now be scoped to a world, counting only kills in that world.
⌨ Commands
• /streak (aliases loginstreak, streaks) - players can now check their own login streak: current, all-time best, next milestone, and whether today is counted.
• Admin subcommand arguments are now positional with tab-completion, replacing the --flag= syntax (achievement list/grant, npc ftotalk/hittotalk, npccleanup).
• /ql action and /ql requirement now target another player with a leading @name prefix instead of --player=; with no prefix they still run on yourself.
🖥 UI
• /qlconfig is now a suite-wide settings window with one tab per installed QuestLines plugin, replacing the old single-page quest settings.
• Hiding the quest HUD now survives a relog, and is a toggle in the settings window instead of an API-only call.
• Players can now place and hide every MMO HUD (party, item set, duel/battle, queue) and tune notification corner, timing, sound and stack size from the MMO tab.
• The Vault tab lets players move and hide the depth HUD and boss bar, and mute Vault announcements, death cards or their sound.
• The Claims tab lets players move, restyle or hide the region entry banner and turn off claim particle borders.
• The Nations tab lets players pick the chat channel they log in to, hide their city tag, and mute war, alliance and grace announcements.
• Achievements and dialogue response buttons can now show a creature portrait instead of an item icon - set the icon to mob:EntityId (e.g. mob:Trork_Guard).
• New {mob:EntityId} text tag renders a creature portrait inline in dialogue, journal and goal-HUD text, alongside the existing {icon:ItemId}.
• Achievement title, description and rewards are now translatable - a Translate button on the ACHIEVEMENTS editor tab fills every configured locale, and players see achievements in their own language. Editing an achievement no longer wipes its existing translations.
• Dialogue response buttons can now carry up to two item icons, one per side, each with an optional number badge drawn over it that can show a live value like a running price.
• A dialogue page can now hide its portrait with HidePortrait, overriding the global and per-NPC portrait settings.
• The Achievements and Journal windows can now be re-skinned by a theme pack - their frame, panels, and every list, card and button colour - the same way the dialogue is themed. The bundled Golden Glass pack now themes them too.
• Hidden achievements can now show a vague author-written hint on hover while still locked, giving players a clue without spoiling the reveal.
⚙ Optimizations
• The quest goal HUD no longer rebuilds every refresh tick for a stationary player with unchanged objectives, sharply cutting its background memory allocation.
• players.json now re-serializes only the players that changed since the last save and streams straight to disk, instead of rebuilding the whole file as one large string every few seconds.
• Each player now runs a single background tick instead of two, and skips it entirely when there is nothing to refresh.
• A lagging server no longer stacks up pending quest ticks, so an unrelated slowdown can no longer snowball into a multi-second freeze.
• Expired damage-credit entries are now cleaned up once globally in the background instead of once per player on every tick.
• Fixed a race that could leak a background tick for a player who had already disconnected, slowly adding load over a long uptime.
• The quest goal and wave arena HUDs are now rendered once per refresh instead of two or three times.
• Walking no longer rebuilds the goal HUD every tick unless it actually shows something that changes with where you are.
⚠ Breaking Changes
• The dialogue UI contract is now 2. A theme pack overriding the dialogue .ui files must declare "contract": 2 and add the new @MobIconInner / @InlineMobSize tokens, or Core ignores its overrides and renders the built-in UI. The bundled Golden Glass pack is already updated.
🐛 Fixes
• Achievement criteria with a display label (e.g. hasTag:someFlag::My Label) now unlock correctly - tag, string, permission and npcName criteria could never pass. Affected achievements unlock retroactively.
• item: requirements with a variable in the item id (e.g. item:Ore_{string:key}:15:true) now consume correctly on turn-in.
• The SQLite/MySQL storage backend now saves login streaks, visited places, escort progress, daily quest resets and input-field values - these were dropped when migrating away from flat-file storage.
• A tracked daily quest that expires at rotation reset now clears from the goal HUD instead of lingering on screen.
• The editor relay now logs a clear fix when two servers share a relay_server_id (from a copied config) instead of silently reconnect-looping.
Support Development
If you would like to help support development:
https://ko-fi.com/redstoner
https://www.patreon.com/c/RedStoner_Pro
This mod has no additional files

