Commit graph

30 commits

Author SHA1 Message Date
Paul Campbell
d3d0ff30a2 fix: Add a server config for IANA ID
Some timers are running off local server time, while others are using
UTC 0. Added a a new setting ServerTimeZone which uses a IANA ID. It is
used by the task scheduler and and other calendar aware timing events.
By default it is set to "TimeZoneId.Japan" (JST +9). A helper class named
TimeZoneId.cs exists so a admin can use a named constant instead of magic numbers.
2026-04-24 07:23:48 -04:00
sebastian-heinz
afc14ad4ae
Networking 2.x (#982) 2026-03-17 09:29:37 +08: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
fee662597d fix: Fix new script issues
- Fixed an issue where script assemblies could not be debugged.
- Fixed an issue where script's can't be hotloaded when contents change.
2025-07-03 10:04:32 -04:00
Ryan Yappert
35285ed153 Fix for file lock. 2025-06-29 19:01:58 -07:00
Ryan Yappert
1a6682fa60 Review comments. 2025-06-29 18:09:06 -07:00
Ryan Yappert
29ee46a1f6 Store MD5 hashes of scripts and use the DLLs when possible to reduce startup time. 2025-06-29 02:07:13 -07:00
Paul Campbell
8002967a16 fix: Fix scripting module load dependencies
- Fixed an issue where the addendum module was not always loaded last.
- Fixed an issue where the world manage quest for caution spots was
  loaded before all caution spots were parsed.
2025-06-26 18:28:09 -04:00
Paul Campbell
1ac6810ec5 fix: Clean up duplicate NPCs
Removed Quintus from the stage so he is not standing in front of Nedo in
S3.0 CS. Removed Spirit Dragin and Modred from the stage so they are not
there blocking multiple cutscenes in Season 2.
2025-06-12 01:17:35 -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
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
e119d09734 Add PSQL optimized ON CONFLICT queries and fix nested transactions in pawn queries. 2025-04-21 16:50:36 +02:00
Paul Campbell
7e259df594 fix: Fix issue with scripts not using asset path correctly
- Fixed an issue where the script project didn't output templates files to
  the correct location.
- Fixed an issue where the script project didn't output the debug
  assemblies to the correct location.
2025-04-12 18:46:12 -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
0832e5938f refactor: Change #load root in scripts
Change the #load path to be the script root directory. This makes it
easier to support vscode autocompletion for everyone with less setup.
It also forces scripts to apprend the "lib/" prefix when loading
libraries making it more clear where the file comes from. Added a new
libs file to help with auto completions being easier to setup. Updated
the README.md in the root script directory with directions.
2025-02-26 15:35:52 -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
7c31026f77 feat: Server settings templates and defaults
- Server settings which are read by the C# server software now provide
  defaults in the server code.
- When the server loads, using reflection, it generates a csx setting file
  in a new script_templates directory. The server admin can copy these
  templates into the "settings" module to be loaded and override the
  default settings.
- Server defaults apply first, then settings provided in the script
  override the defaults. The script files only need to provide the
  settings they wish to override. They do not need to provide all
  settings.
- Removed the files GameLogicSettings.csx, SeasonalEvents.csx,
  ChatCommands.csx and PointModifiers.csx.
2025-02-25 20:09:04 -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
64e1043763 feat: Script module overlay support
Adds the ability for the server admin to have customized scripts without
overwriting the original ones.
2025-02-24 10:43:41 -05:00
Ryan Yappert
5577425d36 Adjustments to Area Rank data structure; add toggle for ranks controlling spots. 2025-02-21 21:38:13 -08:00
Ryan Yappert
014d1cee7b Add AP support to quests, provide all existing quests with some AP values based on wiki-crawling. 2025-02-21 21:38:11 -08: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
24ca1820e6 feat: Valentines Day Seasonal Event
- Implemented the 2017 Valentines day seasonal event quests.
- Updated the EventDrops.json to drop Handpicked Cacao when the event is
  active.
- Added new settings in SeasonalEvents.csx.
- Updated the QuestBlock and QuestBlockUtils class to accept new
  commands and block types.
- Added new QuestNotifyCommand values.

Co-authored-by: Dixdros
2025-02-16 14:54:23 -05:00
Jun
1fd9a4a123 Add separate exp modifier for BBM enemies 2025-01-07 10:50:46 -08: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
e6845c8760 fix: Path fixes for Linux host
Fixed paths to use "/" seperator which is understood in dotnet and mono
on all OS.
2024-12-26 11:18:59 -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
e6e5073737 refactor: Refactor code and show different scripting example
- Refactored code so implementation can be shared between Server and
  DdonGameServer.
- Moved settings into settings module and implemented an example using a
  less structured scripting module interface.
- Created new ScriptableSettings class to assist with interacting with
  non-structured settings module.
- Created README.md files for suggestions and guidelines for module
  implementation.
2024-12-26 10:38:17 -05:00