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.
This refactors a comprehensive set of modules for the GameStore system,
including constants, helpers, and parsers. The changes establish a
robust foundation for handling store offers, user actions, and
transactions in a modular and maintainable way. The most important
changes are the addition of a detailed constants file, helper functions
for offer handling, and a parser module that manages all store-related
protocol events and purchase logic.
**GameStore System Foundation**
* Added a new `gamestore.constants.lua` file containing all core
constants for the GameStore, such as offer types, sub-actions, action
types, coin types, error codes, packet codes, default values,
descriptions, and item limits. This centralizes configuration and
improves maintainability.
**Helper Functions**
* Introduced `gamestore.helpers.lua` with utility functions for
converting offer types to display types and determining if an offer
requires configuration, improving code reuse and clarity in offer
handling.
**Store Event and Purchase Parsing**
* Added `gamestore.parsers.lua` which handles all GameStore protocol
events, including opening the store, searching offers, buying offers,
transferring coins, and transaction history. This module coordinates
with helpers and senders to process requests and responses, including
error handling and purchase validation.
These changes collectively lay out the structure for a feature-rich,
extensible GameStore system, making future enhancements and debugging
easier.
---------
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Refined the logic for purchasing all blessings in the game store,
ensuring that players cannot exceed the maximum blessing count and that
purchases correctly handle partial blessing states. The changes focus on
improving the validation and processing of the "All Blessings" offer to
prevent over-purchasing and to handle edge cases where some blessings
are already at their maximum.
Blessing purchase logic improvements:
- Updated the validation in `Player.canBuyOffer` to check blessings 2
through 8 for maximum count before disabling the "All Blessings" offer,
ensuring players can only buy it if at least one blessing is not maxed.
- Refactored `GameStore.processAllBlessingsPurchase` to add only the
necessary amount of each blessing, respecting the maximum count per
blessing and handling cases where some blessings are already partially
acquired.
Fix gamestore homepage offer state display inconsistency by implementing proper state validation logic in sendHomePage() function. This change aligns the homepage behavior with other gamestore functions that already implement correct offer state handling.
Co-authored-by: Madara <158350170+caiozord@users.noreply.github.com>
Fixed the exploit when holding enter and clicking the buy button multiple times, buying the same item multiple times even though it was charged for each purchase, this was used to stock up on many exp buffs.
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
# Description
- Fixed stackable items in store;
- Created script to remove empty parcels from the store inbox on login.
---------
Co-authored-by: Luan Luciano <luanluciano@outlook.com>
Started moving daily reward to KV since it's easier to share that
between lua/cpp and it's the direction the project is going.
Co-authored-by: Elson Costa <elsongabriel@hotmail.com>
Created config to enable/disable players with red/black lose store items
and moved the validation from script `blessing.lua` to config.
Fixes#2014
---------
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Luan Santos <github@luan.sh>
Co-authored-by: Luan Santos <git@luan.sh>
This add the ability to set ownership on items. An owned item cannot be
picked up or used by anyone except the character that owns it.
If an owned item is inside a container (backpack, etc) that container is
now also treated as owned. "looking" at an owned item shows you the
owner.
New function:
- `item:setOwner(ownerPlayer or id)`
- `item:getOwnerId()`
- `item:getOwnerName()`
- `item:hasOwner()`
- `item:canBeMoved()`
I also sneaked in some other unrelated improvements that didn't fit any
individual PR in here, but the are pretty small.
---------
Co-authored-by: Eduardo Dantas <eduardo.dantas@hotmail.com.br>
Free players will win all rewards, and vip/premium players will win
bonus rewards correctly.
Fixes#2051
---------
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
Players will get the adventurer's blessing until reach the
'adventurersBlessingLevel' level config from your server.
Players in Rookgaard (without vocation) ignore this validation, and be
like a player without blessing.
- Fixed and improved adventurer's blessing.
- Improvement of PR #1743
Adds a `/namelock` command to help you ax those offensive names from
your server.
It works by providing the player with a "free" mandatory name change
upon login.
---------
Co-authored-by: Elson Costa <elsongabriel@hotmail.com>
- changed return 'false' to 'true' in talkaction (when return is true,
the command isn't showed in chat).
- adjusted '/listplayers' command.
- fixed ids from 'Darkfire Devourer' and 'Spirit of Purity' mounts.
Make the debug message: "[NetworkMessage::addString] - Value string is
empty" less vague by adding a context parameter to it.
- addString(value, function)
Resolves#1926
Addressed a conflict between hireling system and gamestore subaction IDs, which led to occasional loss of offers and inconvenienced players who had to repurchase the offers. To resolve this issue, we increased the IDs to larger numbers and conducted a minor system overhaul. This involved transitioning to the use of Key-Value (KV) storage, removing obsolete cache code, and enhancing system clarity and performance for a smoother player experience.
Co-authored-by: Luan Santos <git@luan.sh>
Fixes bug introduced from #1821
A mount was added that does not yet exist in appearances, until we add a new dat, we will just ignore their existence.
Removed invalid mounts.
Continues fixing of #1784 and #1847
• Improved message on exercise_training.
• Fixes reward charges.
• Created flag in prison bosses' scripts to enable minus players and removed already created functions.
• Removed create torch when player login.
• Fixes in 'clearBossRoom' function usage on bosses teleports.
• Fixed count days and time on ferumbras_lever and fixed mechanic of Ascending Ferumbras boss.
• Fixed xp boost storage resetter (on very ss, the storage was being presented, and the player always buy it with 30 tc).
• Added 13.21 new mounts, reordered and fixed typos, changed the word moveable to movable.
• Removed unnecessary spaces.
Continues fixing of #1741
• Created a function to check time in levers and changed with `creature:getStorageValue(config.storage) > os.time()`;
• Adjusted save_interval messages.
• Added check to show msg with payment information when traveling as free.
• Fixed loot to custodian.
• Fixed some typos.
• Adjusted reward talkaction, to check cap.
• Fixed adventurer's stone usage.
• Added messages when starting or stopping using exercise weapons.
• Fixed some events of bosses.