Commit graph

161 commits

Author SHA1 Message Date
Nirrudn
1525f022ee Feature: Serverside Localization
Adds serverside translation based on a player-set locale. See DispelGetLockSettingsHandler for example usage.

Accounts now have a locale field, which is set via a new /locale command.

A new server asset has been created, allowing for JSON files in the localization folder to be used to translate text sent by the server into the account's language of choice. See Files/Assets/localization/BitterblackSealing.en-US.json as an example of the format.
2026-07-07 11:26:47 -04:00
Nirrudn
07723c423a Update schema_sqlite.sql
Update DB schema to match migration changes in PR #1080 so new databases don't throw errors on character creation and hang the client.
2026-07-04 10:01:26 -04:00
Paul Campbell
3c19970df0 refactor: Improve Job Training
- Extracted season 3.2 updates for default config file from donutland.jp
- Made server more tolerant to json changes so admin can change json
  without needing to update database per character.
- Updated json to use the UIID name directly instead of converting enemy
  id to UUID.
- Added missing enemy ids
2026-05-09 15:34:07 -04:00
Paul Campbell
fcff123fd4 feat: Add support for partial deliveries
Allow a player to trade in x/y items and remember that x was traded next
time they log in.

- Added checkpoints to
  - q20000017.json
  - q20000017_1.json
  - q20000017_2.json

Database Version 61 -> 62
2026-05-09 08:57:52 -04:00
Paul Campbell
dce9495e37 code review: Fix issues reported
- High: persisted instanced rewards are cloned as non-instanced.
- High: instanced reward UIDs are cached on quest definition objects.
- Medium: legacy reward-box materialization inserts instanced box rows without staged rows.
- Medium: missing staged data is treated as success and destroys the reward.
- Low/Medium: JSON crest level default disagrees with the schema.

Additionally:
- Removed support for wrongly spelled json keys in rewards
- Updated generic_quest_state_machine.md
- Cleaned up reward syntax while making it backwards compat.
2026-05-03 22:02:47 -04:00
Paul Campbell
d98008c97d feat: Add support for instanced item rewards
- Quests can now define rewards which have crests, color, etc. as part of
  the item reward.
- Quests can define items with random crests rolled when claimed.

Database version 60 -> 61
2026-05-03 22:02:46 -04:00
Paul Campbell
49845889d8 feat: Improve quest rewards
- Added support for first time ever, in period and helping rewards.
- New quest rewards will no longer be tied to the quest file
  implementation after being rewarded.
- Quests now support partial reward claims.
- Added a new daily reset task for extreme missions.
- Fixed an issue with the next time being calculated on the same day as
  the reset for newly added tasks.

Database version 59 -> 60
2026-05-03 22:02:46 -04:00
Ryan Yappert
c8a28972aa
Fix: General Bugfixes, April 2026 (#1031)
* Fix bug where appraising certain items in BBM while you had a copy of that item in your regular character's storage chest would throw an error. Fix bugs where SQLite would occasionally have a DB lock conflict due to poor connection management.

* Be more aggressive when clearing out invalid priority quests.

* Fix bug where the Beauty Shop would sometimes complain about PRICE_NO_MATCH when trying to pay with Silver Tickets.

* Fix bugs where pawn search wouldn't display craft levels, and didn't support filtering by craft level.

* Migrate 58 > 59. Store character_id in the connections table so we can use it for player tracking. Adjust player tracking to be driven by the DB.

* Fix bugs where bazaar processes could sometimes delete items if the storage was full.

* Add feature where you can sell special items (like PP crystals) to consume them, instead of having to spam use them.

* Fix bug where deleting pawns would badly mangle the equipment entries of other pawns owned by the same character.

* Add support for LightQuestRepeatsPerDay, limiting the number of times a board quest can be offered to a single player per day.

* Research for EquipStatId.

* Maybe fix bug where base game augments were secretly applying even in BBM? Maybe fix bug where certain alt-pallet skills wouldn't work in multiplayer due to missing context information.

* Update database migration version.

* Automatically promote localhost players to admin when running in debug mode. Adjust /finishquesttype to clear progress when finishing quests.

* Fix bug where hired pawns wearing job emblems weren't benefiting from the stats on them. Hired pawns now reflect the hiring character's job emblems entirely.
2026-04-30 21:28:52 -07:00
Paul Campbell
7200ef02f0 feat: World Quest Rewards
- Added support to handle randomization of quest rewards on repeat
  clears.
- Added support to configure reduction of point rewards on repeat
  clears.
- Once the world quest stask fires, full rewards will be available until
  first clear for that period again.
2026-04-24 20:07:16 -04:00
Paul Campbell
0bd7bcd404 feat: Add Sub Story Quest Handlers
Added handlers and required packets for:
- QuestAddPackageQuestPointHandler
- QuestGetPackageQuestInfoDetailHandler
- QuestGetPackageQuestInfoHandler

Added new quests
- q10300102.csx
- q60300030.csx

Added a new settings file substory.csx to describe the mission
requirements.

Database 56 -> 57

Co-authored-by: @hankhotspur
2026-04-21 23:02:46 -04:00
Ryan Yappert
0e865d30cf
Feature: Communication Features (#983)
* Adds packet structures, handlers, and server support for Player Mail, Blacklists, Group Chats and Message Sets.
Implements rudimentary GM features via chat command.
Adds support for IP Bans and muted players.
Simplifies how login stamps are handled.
Cleans up and modernizes some old packet handlers.

* Rebase. Fix CommandRoute and AccountRoute. Cleanup and response to PR comments. Rearrange some of the schedule_next stuff in the DB creation schema for clarity.
2026-04-18 01:27:57 -07:00
Paul Campbell
8849b28e09 feat: Implement World Quest Rotation
Implemented the world quest rotation as it was in the original game.
Added a setting which allows this version or the reset every instance
version to be used. Added a setting which toggles filtering world quests
by party leader area rank or not.
2026-04-05 08:02:02 -04:00
Ashley
33e06fa12e
Comma fix. I hate commas. 2026-03-18 23:15:44 +01:00
Ashley
35800d266a
Little Adjustments for the Pawn ID. 2026-03-18 23:12:03 +01:00
Ashley
3589a53f7b
Fix Partner Pawn Rewards - by Bunie 2026-03-17 16:16:43 +01:00
Ashley
53f47f8b40
In-Memory Caching, RPC Synchronization & more. 2026-03-15 14:36:44 +01:00
Ashley
3f05443de7
Code Cleanup, Comments & Migration 2026-03-14 19:24:33 +01:00
Ryan Yappert
0c689e2a33 Review comments. Implement GG limit on resetting BBM. 2025-09-11 15:33:34 -07:00
Ryan Yappert
9d9f39f788 Implement BBM reset tickets, with proper tracking for seals earned and limited treasure (bracelets, earrings) taken. 2025-09-11 15:33:34 -07:00
Ryan Yappert
4a32358133 Migrate DB 51 -> 52. Implement BBM Red Mark Sealing of effects. Expose earring roll math to a mixin. Clean up some code duplication regarding rolling crests for BBM jewelry. 2025-09-11 15:33:34 -07:00
Ryan Yappert
48d9146eac Fix Postgres migration... again. 2025-08-27 01:38:28 -07:00
Ryan Yappert
593d8ec123 Migrate DB 50->51. Clean up unused AdditionalStatus DB methods. Add support for Slayer Stones / "Add Status" when crafting. Implement EquipGetCraftLockedElementListHandler. Adjust the data structure of the limit break table and the corresponding CData. Add crafting recipes for remaining slayer stones. 2025-08-24 23:12:54 -07:00
Ryan Yappert
b360534cc4 Migrate DB -> v49. Remove GameStructure.cs and distribute its functionality. Refactor TimerManager and PartnerPawnManager. Implement proper persistence for rental pawns and pawn profile functionality. Implement rental points. Implement additional handling for support pawns losing their anchoring main pawn. 2025-07-20 19:31:51 -07:00
Paul Campbell
1fecb64ac3 feat: Implement 3.0 HiBO tree and enable Epitaph Road (Rathnite)
- Added support for the 3.0 HiBO tree.
- Enabled Epitaph Road (Rathnite)
  - Updated q60300020.json
  - Moved unlock from MSQ to personal quest
- Reorganized scripts for job orb tree
  - Delete old ones if copy+paste
2025-06-11 21:00:20 -04:00
Ryan Yappert
49a6221d75 Remove skiptutorial. Add /ql for quest lookup due to ID changes.
Decayed quest cancellation notice on area reset.
Clean up EnemyId/EnemyUIId/ClientItemInfos implementation; use ItemId, EnemyId, and EnemyUIId when possible instead of uints
Light quest DB stuff, adjustments to handle variant ids, removing decayed quests when returning to town, rotation task and RPC for child servers.
Fix some tasks announcing to the non-head servers on the wrong route.
Migration 43 -> 44; add support for new quest_id + variant_index scheme for decoupling quest and schedule id.
Cleanup inconsistent packet id naming; add some new quest cancellation packets.
Light quest generation, mixin for light quest rewards, and asset.
Add DeliveryItemsLight and KillTargetEnemies block support to QuestBlockExtension. Add explicit support for DistributionStart/End in the quest asset and quest system.
Remove existing board quests.
2025-06-06 20:50:28 -07:00
Paul Campbell
c594b0dc0c feat: Add pawn favorites
Added the ability to save pawn favorites.
2025-05-31 16:31:48 -04:00
Paul Campbell
a3316815af feat: Job Emblems
- Added support for job emblems
- Created new personal quests to unlock emblems.
- Added support for emblems using the menus at Renton.
- Created new handlers and packets for the new menus.
2025-05-23 23:00:13 -04:00
Paul Campbell
f5905e8e7d feat: Add support for "Skill Augmentation"
- Add new scripting module for "Skill Augmentation"
- Locked EM4 skills behind completion of EM4
- Implemented tree layouts for all jobs
- Implemented new REQ, RES and handlers for Skill Augmentation
- Implemented the quest Skill Augmentation Guidance of a Renewed White Dragon
- Implemented augmentation trials for all jobs
- Updated adventure guide logic to handle when to present quests better.
- Adjusted how personal quests for vocation are distributed to remove
  the need to change areas or log out to get them to show.

Thanks for help from multiple players to help us collect the skill tree
data.

Co-authored-by: 𝔢𝔪𝔪𝔞 𝔢𝔳𝔢𝔯𝔤𝔞𝔯𝔡
Co-authored-by: Cold Blood
Co-authored-by: Genzyuro
Co-authored-by: あゆふぁ
Co-authored-by: 鬼頭オパーリン
Co-authored-by: GaethanT
Co-authored-by: Sapphiratelaemara
Co-authored-by: King Flipsta
2025-05-10 15:19:53 -04:00
Sehkah
5a61567a5b Add new primary key & efficient upsert to ddon_job_master_active_orders_progress; migrates DB from v39->v40. 2025-04-27 22:39:40 +02:00
Sehkah
a0eef2ec3c Add new UUIDv7 based item UID approach; migrates DB to v39. 2025-04-27 17:33:55 +02:00
Paul Campbell
af5490f51a fixes: Add fixes found while testing
- Added a primary key to ddon_completed_quests
- Fix pawn rewards crash
2025-04-25 20:17:41 -04:00
Sehkah
48d97e8af8 Reintroduce "IF NOT EXISTS" in base schema now that MariaDB is no longer a concern. 2025-04-20 22:38:19 +02:00
Sehkah
6520d83f1a Add convenience script to convert SQLite schema without having to start up the application.
Avoid "if not exists" in base schema as this is only expected to run once anyway, otherwise mariadb is not happy about conditional indexes.
2025-04-20 22:10:55 +02:00
Sehkah
080a868259 Refactor persistence layer, add new 37>38 migration. 2025-04-19 15:23:30 +02:00
Sehkah
aeaa2c8ace Make pg_loader consume less RAM by batching. 2025-04-18 16:59:06 +02:00
Sehkah
3fcfb9bfa8 Add indexes for slow queries to speed up some queries. 2025-04-18 13:22:19 +02:00
Sehkah
a9a25f7887 Change ddon_edit_info from SMALLINT to INTEGER. 2025-04-18 13:22:19 +02:00
Paul Campbell
2195a68b9d feat: Job Masters and Job Training
- Added support for Job Masters.
- All custom skills above level 4 are rolled back to level 4
- All augments above level 3 are rolled back to level 3
- Skills which are rolled back have their job points refunded to the
  player.
- All skills and augments are unequipped from all players.

Miscellaneous Changes:
- Implemented the personal quest "The High Scepter's Heir" which is used
  to unlock High Scepter and High Scepter job training.
- Adjusted automatic EXP and BO calculations.
2025-04-16 09:33:33 -04:00
Sehkah
50c245943d Update to net9.0/C#13, expand range of item UIDs, fix docker builds, fix mariadb. 2025-04-12 17:01:55 +02:00
Ryan Yappert
ae5efc1ec5 MyRoom customization persistence. 2025-04-09 18:21:22 -07:00
Ryan Yappert
c79a245310 Unlocking items framework for card backgrounds, recipes, furniture; recieving rewards. Bump maximum pawn affection to 26 to support new achievement. 2025-04-09 18:21:19 -07:00
Ryan Yappert
1ca3b34114 Achievements 2025-04-09 18:21:15 -07:00
Paul Campbell
75ff836696 feat: Limit Break
Added the ability to use the limit break option at Craig under the
"Custom-Made Arms" category.
2025-03-27 00:18:46 -04:00
Paul Campbell
8c03891849 feat: Add support for "Arms Resource Disassembly"
Added support to breakdown equipment into BO, R, G and some random items
based on some parameters. Exposed the item selection algorithm as a new
script equipment_recycle.csx. Added a new settings script under the
uncategorized section called equipment_recycle.csx. This contains
settings related to disassembly of equipment.

Addiitonal Changes:
- Fixed an issue with the task scheduler where timers were not stored in
  the task manager, which leads to them eventually getting garbage
  collected.
- Updated the schedule script to print what type of task it is reporting
  for.
- Added behavior for Custom-Made Service Ticket and Silver Ticket when
  the player receives them as an item from a quest to put them in the
  wallet.
2025-03-24 22:39:20 -04:00
Mike Salerno
166cce174d fixes diplicate private key name
fixes postgres issue casued by duplicate private key name
2025-03-15 17:52:11 -04:00
Paul Campbell
dcd24e1a85 code review feedback
Made changes based on feedback in the code review.
2025-03-12 20:27:41 -04:00
Paul Campbell
6d13b7a920 feat: Added support for Partner Pawns
- Player can now assign a partner pawn at the riftstone and the server
  will remember which pawn it is.
- All rewards besides achivements and recipies are obtainable.
- Player gets credit once per day for:
    - Delivering 2 Riftstone Shards to the pawn
    - Performing 1 craft with the pawn as the craft master
    - Adventuring with the pawn for 30 minutes.
- Reset occurs every day at 5:00am local server time.
- A new setting "PartnerPawnAdventureDurationInSeconds" has been added
  to configure the time in seconds it takes before the server considers
  enough time has passed to give the player credit.
- Added a new function PauseTimer to the timer manager.
- Added a new PartnerPawnManager class.
2025-03-12 19:41:31 -04:00
Ryan Yappert
604470fc35 Ranking Boards. 2025-02-21 21:55:15 -08:00
Ryan Yappert
b262c2fea3 Area Rank stuff in the DB. Migrates DB version 27 -> 28. 2025-02-21 21:37:43 -08:00
Mike Salerno
5acc1b621e fix data type of boolean column so postgres works 2024-12-22 19:50:46 -05:00