New Features:
• Teleport command now cycles per-player through fiendish/influenced
forge monsters and creatures by name, with clear status messages.
Bug Fixes
• Forge population reliably clears, repopulates, and removes stale
entries each update.
• Fiendish and influenced creation respect configured limits and stop
early when full.
• Creation logic decoupled so influenced and fiendish counts update
independently and avoid improper gating.
New Features:
• Food effect duration tracking added — consumable foods now create
visible active food buffs with remaining time.
• Many consumables now grant timed food effects (commonly 1 hour; select
items extend up to 24 hours).
• Character summary now lists active foods and remaining durations for
easier management.
• Various dishes updated to set or refresh their food timers when
consumed.
New Features:
• Added MONK vocation: Players can now create characters of the new MONK
class with specialized starting equipment, including a jo staff, brass
armor set, boots, scarf, and a starter container filled with essentials
like a shield, rope, shovel, and health potions.
feat: add Way of the Monk quest, monster updates, and core data improvements
This commit introduces the complete implementation of the Way of the Monk quest, along with multiple updates to monsters, bosses, items, and core gameplay data.
Quest:
• Added full quest definition for Way of the Monk, including mission flow, shrine tracking, and storage handling.
• Registered the new quest module in the quest catalog.
• Introduced new storage keys related to monk quest progression and items.
• Added a sample monk player migration (DB version 55) for testing purposes.
• Added Blue Valley to the towns list to support quest locations.
Monsters and Bosses:
• Added new monster Tame Terror Bird with complete stats, behaviors, and loot.
• Reworked Mitmah Vanguard boss with updated events, attributes, attacks, defenses, elemental modifiers, loot, and lifecycle hooks.
• Expanded loot tables for bosses such as The Brainstealer and The Monster, including monk-related items and potions.
Items and Loot:
• Updated frazzlemaw and guzzlemaw loot to drop traditional sai instead of sai.
• Added monk-related item IDs to destruction scripts and Dawnport cleanup logic.
Gameplay:
• Added Monk’s Apparition to the Soul War quest apparition list.
• Introduced a new combat formula for fist fighting skill.
• Removed legacy fist fighting attack speed configuration from server settings.
Workflow:
• Improved GitHub Actions workflow to ensure reusable checks run on the correct branch.
Add a zone-based ambient and music sound system with day/night support
Introduces a Lua-driven ambient and music sound system with zone triggers
and day/night variants. Adds engine and Lua APIs for ambient/music effects,
new sound enums, player methods, and protocol support. Includes admin
commands to force periods and manually trigger sounds for testing.
Refactor event callback dispatch and Lua invocation
Simplify Lua callback execution by removing explicit function-pointer parameters from C++ callback invocations and centralizing dispatch through the callback manager, with short-circuit behavior. Update combat callbacks to use dispatchReturnValue and change creatureOnCombat to mutate CombatDamage instead of returning tuples. Fix callback registration to be stably sorted by descending priority, enforce duplicate blocking only when skipDuplicationCheck is false, and ignore disabled callbacks or invalid script IDs. Align EventCallback construction with current usage and clean up redundant includes. Update documentation and Lua scripts to match the new callback types and argument conventions, and add unit tests covering ordering duplication rules, short-circuiting, and the damage mutation roundtrip.
Add JSON JSON-based event scheduler system
Introduce a new JSON-driven event scheduler to manage in-game events more easily and flexibly. Add initial events.json data, documentation, and example scripts. Integrate event-driven effects into server gameplay logic, including login notifications, bestiary and bosstiary bonuses, forge success rate adjustments, and fast exercise handling. Ensure backward compatibility by supporting both XML and JSON schedules, with JSON loaded after scripts. Update the build configuration to require and link the nlohmann_json library, and include scheduler access in the player logic.
This update introduces several enhancements to the loot system, allowing
for more flexible loot management across different monsters without the
need to modify each monster's individual script. A global loot option
has been added, which is disabled by default, to assign items that any
monster can drop. This feature simplifies the addition of common loot
across multiple monsters, enhancing the modularity of loot management.
The "registerLoot" function has been improved to eliminate code
duplication and enhance efficiency. The "closeContainer" function has
been updated to remove problematic code that could cause crashes when
"container" used before "erase". Additionally, a new Lua function,
"getMonsterTypeByName", has been introduced to facilitate getting
monster types.
These changes make a small but significant fix to the familiar system
on player login. It ensures that the remaining familiar summon time is
never negative by clamping the value to zero. This prevents potential
issues if the stored summon time is in the past.
- Clamp `familiarTimeLeft` to zero to prevent negative values by using
`math.max(0, familiarSummonTime - os.time())` in
`familiarOnLogin.onLogin`
(`data/scripts/creaturescripts/familiar/on_login.lua`).
Resolves#3710
Ensure the database state is initialized to avoid RAID check exceptions.
Otherwise, errors like the following can occur:
[2025-31-08 09:34:43.520] [thread 140345198] [error] Lua Script Error Detected
---------------------------------------
Interface: Scripts Interface
Script ID: data/scripts/globalevents/raids.lua:callback
Error Description: data/libs/systems/raids.lua:87: attempt to perform arithmetic on local 'checksToday' (a nil value)
stack traceback:
[C]: in function '__add'
data/libs/systems/raids.lua:87: in function 'canStart'
data/libs/systems/raids.lua:51: in function 'tryStart'
data/scripts/globalevents/raids.lua:11: in function <data/scripts/globalevents/raids.lua:5>
---------------------------------------
The Player has previously managed the storage system through a raw
storageMap, with direct insertions, deletions, and range generation
(genReservedStorageRange). This change caused unnecessary complete
rewrites on save and spreads logic across Player, IOLoginData, and
related components.
Changes
- Introduced a new PlayerStorage component to encapsulate all
storage-related logic
- Removed the legacy storageMap from Player, centralizing load/save and
manipulation in the new component
- Implemented incremental persistence: only modified or removed keys are
saved to the database, avoiding complete rewrites
- Added support for reserved key ranges (outfits, familiars) within
PlayerStorage::getReservedRange
- Updated IOLoginDataLoad and IOLoginDataSave to delegate load/save to
PlayerStorage
- Added missing benchmark.cpp implementation and updated build files
accordingly
- Removed storage name in favor of KV.
This change refactor improves code organization, maintainability, and
performance. By persisting only modified keys instead of the full
storage set, save operations are faster and reduce unnecessary database
load.
feat: add client and server features for gameplay and UI improvements
- Renamed Supply Stash to Stash and removed depot slot limit count
- Added advanced filters for Stash item categories
- Reworked Cyclopedia Combat Stats into Offense, Defense, and Misc Stats
- Added detailed tooltips and integrated stats into Skills widget
- Introduced Magical Archive interface for spells and runes with filters
- Overhauled Quest Log and Tracker with pinning, search, sort, compact display, and notifications
- Enhanced Exaltation Forge with boots tier bonus and Dust management
- Redesigned Charms System with new Major and Minor charms and balance changes
- Added new mounts and outfits for customization
- Improved server and client behavior with advanced stash, spell archive, detailed stats, and enhanced tier systems
- Verified features through manual and in-game testing
This way the killer list will show who gave the final hit, who did the
most damage and all other participants, whether monsters or players.
PR Complement: https://github.com/opentibiabr/myaac/pull/134
This new command is to add an icon to the player, it also has a counter
function to use the command, follow the examples:
/playericon 1, 10 -- this way it will apply icon 1 with the counter at
10 and it will decrease every second after reaching 0, it will be
removed after 10 seconds.
/playericon 1, 10, up -- this way the counter will start at 0 and will
go up to 10 after 10 seconds, it will remove the icon.
This change fixes an issue in the `Combat::applyExtensions` function
where the "Low Blow" charm critical hit was incorrectly triggering the
global critical hit as well, resulting in unexpected behavior. The bug
was caused by the independent calculation of `lowBlowChance` using
`charm->percent` alone, which led to a downstream misinterpretation of
critical hits. The fix adjusts the "Low Blow" chance calculation to
`baseChance + charm->percent`, aligning it with the Tibia Global
mechanics where "Low Blow" acts as an extension of the base critical
chance, only triggering when the global critical does not occur.
Additionally, this PR adapts `applyExtensions` to handle multiple
targets instead of a single target, improving compatibility with
area-based combat effects.
Co-authored-by: valdzera <146901121+valdzera@users.noreply.github.com>
• Dummy Movement Restriction:
Before: The dummy could be moved or rotated without strict ownership
verification.
Now: Only the house owner is allowed to move or rotate the dummy.
Additionally, the system checks if someone is training on the dummy
before allowing the action. This prevents unauthorized modifications and
ensures that the dummy is only used as intended.
• Enhanced Account-Level Checks:
New Feature: A "buy house" talk action has been added specifically for
god-level accounts.
Improvement: The system now verifies the player's account type when
processing talk actions. This means that if a talk action requires a
certain account privilege (for example, only GM-level or lower actions),
the system will enforce that check. In short, even if a character
appears eligible based on their group, the underlying account type must
also have the necessary permissions.
This fixes multiple issues regarding house door list handling and
door usage via the "aleta grav" spell. The changes ensure that:
• The "House Door List" spell now works correctly when the player is
both in front of and inside the door.
• Both door lists are properly loaded from the database, and cached
entries are cleared once applied.
• The door usage check now validates that the player's current tile
belongs to the same house as the door, preventing usage when the player
is outside the house.
Allow GM access to depot tiles and refine supply stash notifications:
• Fixed "Your depot contains/stash contains" message to appear in the "serverlog".
• Enable God/GM accounts to step on depot tiles to trigger stash/depot search.
• Restrict the "You can't use supply stash right now." message to normal players only.
• Activate step-in tile functionality on player login, excluding only teleports.
Reverts opentibiabr/canary#3239
This caused inconsistencies in the "onUse" of other things, several
people reported bugs in onUse to me so I preferred to revert, so the
author can analyze it better and we can test the new pr with the reports
made. For example, when there is a "border" below a dummy, it gets the
id of the border and not the dummy (when using exercise rod)