Commit graph

40 commits

Author SHA1 Message Date
hankhotspur
4776bdc86d Quest locks for caution spots 2026-06-07 19:42:05 +01:00
Paul Campbell
3a824a506f offical pawn updates
- Add support to manually assign crafting levels
- Add support for static level
2026-06-06 14:18:24 -04:00
Paul Campbell
c2d314193d feat: Add option for unlock reqs to official pawn
- Added the virtual function IsUnlocked to IOfficialPawnScript
- By default, if no implementation is supplied, it returns true
- Updated README.md on how to use this new feature
2026-05-31 10:16:00 -04:00
Paul Campbell
937b2e04ce feat: Official Pawns
- Added support for server admin to define offical pawns.
- Added support for dynamically defined official pawns which change
  based on the hiring player level.
- Added a new settings file official_pawns.csx
- Added new official pawns
  - Annuate, Puala, Rumi and WhiteKnight
2026-05-31 08:31:27 -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
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
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
418588edd7 Fixup Scheduler
Fix an issue where the next time stamp was not always calculated correctly in the /schedule command
2026-04-05 08:02:02 -04: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
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
bb2ec29ea9 feat: Area/Dungeon Boss AP reward
- Enemies which are now labeled as an area boss will reward AP when
  the group is defeated.
- The amount of AP is configurable via the new setting AreaBossApReward.
  - The default value is 500 AP for the current Area the defeated enemy
    is in.
- Added a new member to instance enemy properties which allows a rank to
  be assigned to a scripts. The rank helps to control the order scripts
  are executed. The scripts with a lower rank are executed before
  scripts with a higher rank.
- Added a new script module InstanceEnemyDropGenerator. This module can
  be used to have the server assign drops to an enemy when killed.
  Intended to eventually replace the event item generator via json.
- Fixed a few await warnings introduced from PR #919 related to
  scripting.
2025-07-05 10:36:47 -04: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
Paul Campbell
8b7f8aed30 feat: Add summer seasonal quests
Added support for summer seasonal event.

Co-authored-by: Dixdros
2025-06-07 16:01:49 -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
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
Paul Campbell
6dbd85a4ba feat: Default Drops
Added a mechanism for the server to assign a close approximation of the
retail gathering items across the game world.
2025-04-10 20:44:05 -04:00
Paul Campbell
305a4d503b feat: Add support for contents release
- Added support for the adventure guide.
- Add support for quests to unlock different content and menus.
- Implemented a world manage quest to track job tutorials.
- Implemented the following personal quests which unlock systems:
    - The Arisen's Abilities
    - Reliable Source of Information
    - Crafted Token of the Heart
    - Gathering in the Clan Tavern
    - Lestania's Best Dressed
    - Road to Mastery
    - The Temple's Tradespeople
    - Living with the Partner Pawn
    - Shining Within a Loyal Heart
    - Extend Garden
    - Custom-Made Workshop 1: Searcher's Return
    - Custom-Made Workshop 2: Limit Break
    - Custom-Made Workshop 3: Ultimate Arms Synthesis
    - Arms With the Power of the Dragon 1
    - Arms With the Power of the Dragon 2
- Implemented the following job quests:
    - Fighter Tactics Trial: A Stubborn Shield
    - Fighter Tactics Trial: Break Attack
    - Seeking the Master Fighter
    - Priest Tactics Trial: Purification
    - Priest Tactics Trial: Break Attack
    - Seeking the Master Priest
    - Seeker Tactics Trial: A Whirlwind
    - Seeking the Master Seeker
    - Shield Sage Tactics Trial: A Magick Shield
    - Shield Sage Tactics Trial: Break Attack
    - Seeking the Master Shield Sage
    - Hunter Tactics Trial: An Ambushing Bow
    - Hunter Tactics Trial: Break Attack
    - Seeking the Master Hunter
    - Sorcer Tactics Trial: A Magick Attack
    - Seeking the Master Sorcerer
    - Element Archer Tactics Trial: A Magick Bow
    - Seeking the Master Element Archer
    - Warrior Tactics Trial: A Strong Sword
    - Seeking the Master Warrior
    - Alchemist Tactics Trial: Alchemy
    - Seeking the Master Alchemist
    - Spirit Lancer Tactics Trial: A Spirit Lance
    - Seeking the Master Spirit Lancer
- Rewrote or updated the following main story quests:
    - Rewrote "Resolutions and Omens" as a quest script
    - Updated "The Slumbering God" to use newer JSON block types
    - Rewrote "Soldiers of the Rift" as a quest script
    - Rewrote "The Crimson Crystal" as a quest script
    - Updated "The Dull Grey Ark" to have proper enemies for the boss fight
    - Updated "Envoy of Reconciliation" to have proper enemy nameplates in
      the cellar
    - Updated additional existing main story quests to distribute contents released
- Split IsBo an IsHo enemy parameter from the BO amount field to match
  behavior of old playback videos where an enemy has a normal health bar
  but still rewards BO/HO
- Added a generic mechanism to handle quest work items
- Added the message "The entire party has returned to a safe area." when
  the instance gets reset while the player is in a party
- Added better unlock support to json
2025-04-01 20:57:15 -04: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
Paul Campbell
67ce3cc44f feat: Add area rank caution spots
- Added a new EnemySetGenerator interface for selecting enemies for a particular enemy group.
    - Implemented the following enemy set generators:
        - QuestEnemySetGenerator
        - EpitaphRoadEnemySetGenerator
        - CautionSpotEnemySetGenerator
        - WorldEnemySetGenerator
- Added a new EnemyPropertyGenerator for modifying attributes of selected enemies for a set.
    - New scripting module was introduced to allow a variety of properties to be applied
    - Implemented a new .csx script to auto assign BO to enemies in Epitaph Road dungeons
      when certain requirements are met.
    - Implemented a new ,csx script to handle adjustments of enemies in The Rift when
      performing a pawn rescue.
- Updated EXP mixin interface and default implementation
    - Added a new CharacterCommon parameter.
    - Implemented an algorithm which attempts to calculate enemy exp
      based on player level, enemy level and other properites such as
      boss, quest and nameplate modifiers.
- Add support for enemy caution spots
    - Implemented a new "World Manage" quest which handles sending the "Caution" message to
      players when they come across a "Caution Spot".
    - Added new scripting module which allows "Caution Spot" enemies to be defined.
        - Implemented caution spots for:
            - Hidell Plains
            - Breya Coast
            - Mysree Forest
            - Volden Mines
            - Dowe Valley
            - Mysree Grove
	    - Deenan Woods
	    - Betland Plains
	    - Northern Betland Plains
	    - Zandora Wastelands
	    - Eastern Zandora
	    - Mergoda Ruins
2025-03-06 21:55:39 -05:00
Paul Campbell
00d78059bb refactor: Remove Server argument
Removed the server argument from the function
IQuest.AcceptRequirementsMet.
2025-02-26 10:39:41 -05:00
Paul Campbell
0a2db63eaf feat: Namespace LibDdon functions
Added LibDdon functions to various "namespaces" to declutter the dot
syntax.
2025-02-26 10:37:23 -05:00
Paul Campbell
060de5cb1c feat: Implement the EXM "Recurrence of Darkness"
- Partial implemention of the EXM "Recurrence of Darkness" (q50204000) using the
  scripted quest system.
- Moved all scripts to a seperate Arrowgene.Ddon.Scripts project to
  support out of project comde completion in csx scripts.
- Updated the README.md in the scripting project with details on how to
  enable csx autocompletion in Visual Studio Code.
- Enabled scripted quests to have some dyanmic state for the instance of
  the quest.
- Continued to build out QuestBlockUtil and QuestResultCommnandUtil to
  make it more convient to write scripted quests.
- Updated the script callback function to pass a new object
  QuestCallbackParam and updated the function to support passing
  anonymous functions as an argument.
- Moved index calculations for JSON quests to the asset deserializer.
- Adjusted some "discovered quests" to not show the marker on the map
  until after the quest is engaged.
- Renamed the script_dll directory to script_assemblies which is used
  for csx debug support.
- Updated the README.md for the scripts directory.
2025-02-26 10:28:00 -05:00
Paul Campbell
ff461605e2 feat: Script addendum support
Added the ability to define fine grained edits of server script files
without changing the originals.
2025-02-24 13:34:54 -05:00
Paul Campbell
2abf7bb276 feat: Add support for debugging csx scripts
If the build is a debug build, it is possible to debug csx scripts
loaded by the server. Fixed an issue where the datetime range compare
was incorrect with a peroid crosses from one month to the next. Added a
new field EnableCancel which can be used by tutorial quests.
2025-02-21 20:03:44 -05:00
Paul Campbell
08baa54e3e feat: Extract point modification behavior to scripts
Extracted all the different point modification algorithms to scripts so
it's easier for server admins to adjust and add new modifiers to their
servers at runtime. A new "point modifiers" scripting module was added.
The generic term point means exp, jp and pp earned by players and pawns.
Moved settings from the generic GameLogicSettings.csv to a new settings
file PointModifiers.csx where appropriate.

Each modifier defines the following properties
- The point type that is being modified.
- Which quanity of point type it impacts (base amount or bonus amount).
- The behavior of the multiplier (additive or multiplicative).
- The source of point type (enemy vs quest).
- The player types it applies to (Player and/or MyPawn).

Like other scripting modules, a README.md file is created in the module
directory outlining basic usage and guidelines for the scripting module.
2025-02-21 16:37:45 -05:00
Paul Campbell
f88dee7ca1 feat: Add lambda callbacl functions to QuestBlock
- Added a new member to the QuestBlock which a quest can define an
  arbitary number of callbacks to be executed at the end of a quest step.
- Added a new function to QuestBlockUtility to make adding the callback
  easier in quest scripts.
2025-02-17 18:51:11 -05:00
Paul Campbell
d482e6c903 feat: Add EXM "Crucible of Demons"
- Added an implementation of the EXM "Crucible of Demons".
- Added + icons to Gritten Fort time enemies.
- Add party in stage checks to prevent desync in "Phindym War
  Chronicles".
- Added new InstancedRandomEnemy class and libddon helper function to
  use it in scripts.
2025-02-17 14:44:30 -05:00
Paul Campbell
2b566c9538 Create StageInfo
Created a new class called StageInfo. The stage Info contains the
StageId, StageNo, AreaId and Name of the stage. Removed all constants
tied to the StageId class. Renamed the StageId class to StageLayoutId
to match the CData type it reflects. Updated all existing quest files
to use the new StageInfo class. Added new helper methods to the
QuestBlockUtils to accept the StageInfo class where appropriate.
2025-02-16 11:28:17 -05:00
Paul Campbell
a6cd0e5bb5 feat: Implement EXM "Battle for Gritten Fort: Recapture Battle"
- Implemented the EXM "Battle for Gritten Fort: Recapture Battle"
- Updated scripted quest system to support EXMs
- Added a new random quest reward type that doesn't depend on chance
  amounts.
2025-02-08 19:55:36 -05:00
Paul Campbell
9752093131 quest: Allow ItemId enum for quest files
Added the ability to provide reward items using the ItemId enum instead
of numeric literals in quest JSON files.
2025-02-04 18:31:58 -05:00
Ryan Yappert
52b3d190cd InstancedEnemies know their spawn location. 2025-01-17 01:54:32 -08:00
Paul Campbell
2fdac2a791 maint: Add misc data
- Added new enum which contains all item ids
- Added new enum which contains all enemy ids
- Added new enmy which contains all hm preset ids
- Adjusted scripts to use new enums so they are more clear.
2025-01-03 13:55:55 -05:00
Paul Campbell
bc2f21ea36 feat: Scripted Chat Commands
- Created a new scripting module to handle chat commands.
- Migrated all existing chat commands to scripted chat commands.
- Updated the help command to only list commands which fall within the
  AccountState limitations.
- Updated many chat commands to have an account state of type Admin.
- Added a new settings file ChatCommands.csx.
- Support hotloading of modifying or adding new chat commands.
2025-01-02 17:23:05 -05:00
Paul Campbell
07f21f7927 feat: Scripted Quests
- Added the ability to define quests using C# script.
- Implemented the 2018 Christmas quests using C# script.
- Implemented the 2017 Halloween quests using C# script.
- Implemented the 2018 Halloween quests using C# script.
- Added the ability to load external scripts from the "libs" directory
  in scripts loaded by the GameServer project.
- Added new documentation for scripts.
- Updated existing 'holiday_personal_quests.md' to include directions
  for enabling the event quests.
2024-12-31 09:40:11 -05:00
Paul Campbell
2791b8ef99 comments: Add some comments about exp mixin
- Added a short list of some low level enemy exp values found watching some
  videos.
- Added a comment about the default behavior of the current exp mixin.
- Renamed exp_curve.cs to exp.cs in the mixin module.
2024-12-26 10:38:17 -05:00
Paul Campbell
67876aa7bf feat: Add mixin module
Added a mixin module which is used to collect various scripts which
implement common functionality shared across the server and other
scripts.
2024-12-26 10:38:17 -05:00
Paul Campbell
5b425a645e feat: Implement 'game_item' module
- Created a new 'game_item' module.
- Created RookiesRing.csx in the 'game_item' module.
- Moved Rookie's Ring settings from general server logic to specific
  RookiesRing.csx settings file.
- Implemented a new 'constant' and 'dynamic' mode for the Rookie's Ring.
- Added a new option to completely disable the Rookie's Ring.
2024-12-26 10:38:17 -05:00
Paul Campbell
872275e95e feat: Add C# scripting support
- Added Roslyn to the project.
- Added an example of parsing game logic settings from a .csx file.
- Made GameLogicSettings.csx hotloadable.
- Adjusted exp point modifier settings for enemies and quests to be
  hotload friendly.
- Implemented a ScriptModule interface for GameServer scripts.
- Converted extended NPC facilities into scripting .csx files for each
  NPC and made directory hotloadable. New NPC options can be added after
  the server starts without a restart.
2024-12-26 10:38:16 -05:00