Skip to content

Releases: HerculesWS/Hercules

v2023.10

20 Oct 22:41
b097666
Compare
Choose a tag to compare

Added

  • Added an option to synchronize the flinch animation with walk delay, improving positional lag. The option is disabled by default, uncomment the WALKDELAY_SYNC definition in src/config/core.h to enable it. (#3232)
  • Implemented logic to generate "item links" serverside and the related script command getitemlink(), including various core functionalities this relies on. (#3236, #3238)
    • This also adds basic support for the base62 encoding used by the client.

Changed

  • Refactored Auto Spell (Hindsight) and moved its configuration to a libconfig table. (#3237)
    • The configuration is available in the {re,pre-re}/autospell_db.conf file, see the documentation in the file header.
    • The separation between game logic (in skill.c) and client/display logic (in clif.c) has been improved.
    • Cast end logic has been separated from the large skill castend function into smaller dedicated functions.
    • The function skill->autospell() has been renamed to skill->autospell_spell_selected() to make its purpose clearer.
    • This refactoring will simplify some of the upcoming rebalance changes.
  • Added concurrency settings to the GitHub CI workflows to cancel old ongoing builds when a new commit is pushed, speeding up testing the up to date version. (#3238)

Fixed

  • Fixed the HPMHooking API plugin builds in VS 17.x (#3231)
  • Fixed AM_ACIDTERROR not ignoring defense on units other than those defined in battle_config.vit_penalty_target (i.e. players). (#3234)
  • Fixed Sage's free case increasing ASPD instead of decreasing it when the skill level is lower than 10. (#3235)
  • Fixed the clang-13 build in the GitHub CI, failing due to a removed package in debian unstable. (#3238)
  • Fixed AppVeyor CI builds, failing due to a missing mysql56 image. (#3238)

v2023.08

17 Aug 15:06
ca85f56
Compare
Choose a tag to compare

Note: with this release the versioning scheme has slightly changed: the release day is no longer included in the release tag and is set to 00 in the HERCULES_VERSION constant. Hotfix releases will take the form v2023.08.001 ~ v2023.08.999 (and will set HERCULES_VERSION to 202308001 ~ 202308999). Releases will still happen around the second wednesday of each month when possible.

Added

  • Added support for choosing between localtime and UTC output in the script command gettime() (defaults to localtime for backward compatibility). (#3224)
  • Added support for choosing between localtime and UTC input in the script command getcalendartime() (defaults to localtime for backward compatibility). (#3224)
  • Added the GETTIMETICK_* constants to be used with the gettimetick() script commands. It's recommended to update custom scripts to use the constants instead of numbers, as there is no guarantee that the values will not change in the future. (#3224)
  • Added an option to allow Venom Dust to give experience points. See venom_dust_exp in conf/battle/battle.conf. (#3226, issue #3188)
  • Added the missing common/packets_struct.h include to HPMapi.c and HPMlogin.c. (#3228)

Changed

  • Changed Poisoning Weapon to show the type of poison used when applied. (#3219)
  • Moved the GETTIME_* constants to source. (#3224)
  • Documented a quirk of gettimetick(GETTIMETICK_HOUROFDAY_S) (formerly known as type 1) when the server is running with a local timezone on the day daylight savings begin or end. (#3224)
  • Changed gettimetick() to reject unknown types instead of defaulting to type 0. (#3224)

Fixed

  • Fixed a typo in the sc_start() rate description in the command documentation. (#3219)
  • Fixed the duration and rate of Poisoning Weapon getting reduced more than they were supposed to be. (#3219)
  • Fixed the duration of the Venom Bleed poison effect. (#3219)
  • Fixed a missing VS 2022 solution for the HPMHooking API plugin. (#3222)
  • Fixed TF_DOUBLE not granting the Hit bonus when triggered. (#3225)
  • Fixed the command getcalendartime() returning the wrong timestamp when fed with a localtime input while daylight savings are in effect. (#3224)
  • Fixed a warning about an unused variable in npc.c with some compilers. (#3224)
  • Fixed the attendance system returning the wrong timestamp when the server is running on a local timezone and daylight savings are in effect. (#3224)
  • Fixed temporary skills not getting cleared from the skill tree on recent clients when the item granting them is unequipped. (#3227, issue #3209)

v2023.07.12

14 Jul 20:29
59eea47
Compare
Choose a tag to compare

Added

  • Added a macro to toggle the logging of login/logout events in the API server. Disabled by default, uncomment the DEBUG_ONLINEDB_LOG definition in aclif.c to enable it. (#3207)
  • Added support for skill_db2.conf to extend/override the skill DB. Just like the item and mob databases, it supports the Inherit field to allow overriding part of a skill's entry without having to copy the rest. (#3216)

Changed

  • Increased the default value of the API server setting remove_disconnected_delay from 5000 to 50000. (#3207)
  • Reduced the timeout in the GitHub Actions CI scripts to 60 minutes, to avoid stuck jobs preventing further builds from starting for 6 hours and wasting a large amount of runner minutes. (part of #3217)
  • Replaced some lengthy pieces of repeated code in the skill DB parser with a loop. (part of #3216)
  • Changed case-insensitive checks to case-sensitive for many database fields: (#3216)
    • SkillInfo flag names
    • SkillType flag names
    • DamageType flags names
    • Requirements/WeaponTypes flags names
    • Requirements/AmmoTypes flags names
    • Requirements/State values
    • Unit/Flag flag names
    • Unit/Target values
      • NOTE: the SameGuild value was previously incorrectly listed as Sameguild in the examples and documentation. The correct version is SameGuild.
    • For debugging purposes, a piece of code similar to https://github.com/HerculesWS/Hercules/files/11782956/compare_skills.diff.txt can be used to print the values before and after applying this patch, to check the differences and ensure that no unintended changes were introduced in the parsing of one's custom entries.
  • Added a target argument to skill->check_condition_castend() to allow additional checks that require information about the skill's target. (part of #3215)

Fixed

  • Added some missing null pointer checks and assertions. (part of #3207)
  • Added API-server related configs into the copy actions of the VS projects. (part of #3207)
  • Fixed an unreliable health check in the CI builds based on MariaDB containers. (#3217)
  • Fixed some interactions of MO_KITRANSLATION. (#3215)
    • It should fail with a skill failure message and not consume requirements when: (#3215)
      • being cast on Gunslinger class
      • being cast on a player that already has 5 spheres
      • being cast on friendly non-player units (e.g. Mercenary)
  • Fixed some interactions of MO_ABSORBSPIRITS. (#3215)
    • It should fail and not consume SP when:
      • the target player doesn't have spheres
      • the target player is of Gunslinger class (due to teh game implementation not allowing them to have spheres)
      • the target player is friendly
    • It should fail and consume SP when:
      • used on a BOSS monster
      • used on a non-boss monster, but failing the 20% check
      • used on non-player units (like mercenaries)
    • moved the target check to condition cast end
  • Fixed the error message when a gunslinger is attempting to use a skill that requires coins without having the necessary amount. (#3215)
  • Fixed the stacking of WM_POEMOFNETHERWORLD to match the behavior described in the 2012.08.22 official patch notes: (#3215)
    • it cannot be placed over another instance of the skill
    • when trying to do so, it should show a position error to client

v2023.06.14

15 Jun 22:50
ce0392b
Compare
Choose a tag to compare

Added

  • Implemented the Unit Parameters DB, to allow splitting some battle configs into separate pre-renewal and renewal databases and fine tune them in configuration groups associated to each job. (#3214)
    • The new database is in db/pre-re/unit_parameters_db.conf / db/re/unit_parameters_db.conf and it is referenced by the job db through the new ParametersGroup field.
    • Support for plugins to extend the DB is provided, through addToUnitParam(), getfromUnitParam(), removefromUnitParam().
    • The following fields are available, with the respective macros to access them from the source:
      • MaxHP (replaces battle_configuration/max_hp) - pc_maxhp_cap(sd)
      • MaxASPD (extends battle_configuration/max_aspd and supersedes battle_configuration/max_third_aspd) - pc_max_aspd(sd)
      • MaxStats (extends battle_configuration/max_parameter and battle_configuration/max_third_parameter, supersedes battle_configuration/max_extended_parameter, battle_configuration/max_summoner_parameter, battle_configuration/max_baby_parameter, battle_configuration/max_baby_third_parameter) - pc_maxstats(sd) (replaces pc_maxparameter(sd))
      • NaturalHealWeightRate (replaces battle_configuration/natural_heal_weight_rate) - pc_overhealweightrate(sd) and the helper pc_isoverhealweight(sd) (replaces pc_is50overweight(sd))
    • The MaxHP field supports defining level ranges to make the parameter vary based on the character's level.
    • Detailed documentation is available in doc/unit_parameters_db.md
    • Additional upgrade notes including an upgrade cheatsheet can be reviewed in the pull request description at #3214

Changed

  • Changed the animation delay to be applied at castbegin instead of castend, to match official behavior. skill_amotion_leniency now defaults to 0 which offers a more accurate official behavior. Users that wish to block more speedhacks may still increase it. (#3187, issue #2703)
  • Changed the player's maximum HP to be capped differently based on the player's level (Renewal, episode 15.1). (part of #3214, related to issue #243)

Fixed

  • Fixed some (false positive) sprintf() overflow warnings. (#3212)

Removed

  • Removed the deprecated LGTM badge from the main README. (#3211)
  • Removed the following battle configuration settings, superseded by the unit parameters db - see above for details: (part of #3214)
    • battle_configuration/max_hp
    • battle_configuration/max_third_aspd
    • Note: battle_configuration/max_aspd still exists but is only used for Homunculus and as a fallback for players whose job can't be determined
    • battle_configuration/max_extended_parameter
    • battle_configuration/max_summoner_parameter
    • battle_configuration/max_baby_parameter
    • battle_configuration/max_baby_third_parameter
    • Note: battle_configuration/max_parameter and battle_configuration/max_third_parameter are retained since some logic still depends on them
    • battle_configuration/natural_heal_weight_rate

v2023.05.10

12 May 18:38
e54b0be
Compare
Choose a tag to compare

Added

  • Added support to clone the definition of an item in the item_db. A cloned item inherits all the fields (except item ID and AegisName) of its original, allowing a compact definition with only the fields that differ. See the definition of CloneItem in doc/item_db.txt for details. (#3206)
  • Added the script commands openquestui() and opentipboxui(). (#3201)

Changed

  • Updated the Thanatos Tower with its Renewal changes (only affecting Renewal mode), based on the official patch notes, until before the revamp update. (#3204)
    • Changes from 2012.04.04 kRO Patch:
      • It is no longer required to have several players near the NPC to move to the 3rd floor
    • Changes from 2016.06.29 kRO Patch:
      • Burled Request quest exp reward updated:
        • Base EXP: 120,000 -> 1,200,000
        • Job EXP : 100,000 -> 1,000,000
      • Burled Request quest required level changed
        • No level requirement -> Level 91 or higher required
      • Changed weapon level required to progress Burled Request quest
        • Level 4 Weapon -> Level 3 or 4 Weapon
      • Changed restrictions to enter upper floors of the tower with a Black Key
        • Before: Reborn, 3rd classes or Expanded jobs level 95 or above
        • Now: Any character level 95 or above
    • Edited lines were also updated to current Hercules' standards and HULD
  • Disabled full request logging in the api server. (#3203)
  • Added the warning flag -Wenum-int-mismatch to the build settings. (#3203)
  • Extended the ZC_OPEN_UI packet functions to allow passing the data field as a parameter. (part of #3201)

Fixed

  • Added the missing EXP rewards for the Amatsu Dungeon quest. (#3205)
  • Fixed errors in the MinGW builds (#3203)
    • Added a missing stdbool.h include.
    • Fixed the plugin file extension.
  • Added a check for an empty char server response in the API handler emblem_download (i.e. when requesting the emblem of a nonexistent guild). (#3203)
  • Fixed the unit-specific dmg_taken_rate getting ignored in favor of the database-defined value (mostly when using setunitdata(UDT_DAMAGE_TAKEN_RATE, ...). (#3202)
  • Added the missing documentation for the openbank() script command. (#3201)
  • Fixed handling of multiple RoDEX item claim requests (such as when retrieving multiple attachments at once) by queuing up the requests. (#3189, issues #3186, 3009)

v2023.04.12

14 Apr 00:11
21b7f9e
Compare
Choose a tag to compare

Note: everything included in this release is part of PR #3198 which consists of 301 commits. To avoid extreme redundancy the PR link will not be repeated for each line of the changelog.

Added

  • Added a brand new fourth server (api-server) to support HTTP-based client features as well as, potentially, third party tools
    • The api-server listens by default on port 7121.
    • The server is a separate process and can be started in the same way as login, char and map servers.
    • Configuration can be found in conf/api/ and supports the same import mechanism as the other servers.
    • HPM plugins are supported in the same way as login, char and map servers and sample plugins are included.
    • The api-server can be customized (i.e. through HPM plugins) to provide an easily accessible HTTP API for use by third party tools that want to communicate with the Hercules server.
    • The server offers some built-in basic protection (limiting connections by IP, limiting request and headers size, trusted IPs, etc.), but as with any externally exposed service, caution is recommended, and a system administrator should decide whether it is necessary to use additional forms of filtering (such as a judiciously configured reverse proxy or web application firewall) for public deployments.
    • The connection interfaces are as follows:
      • client - api-server (aclif)
      • login-server (lapiif) - api-server (aloginif)
      • char-server (capiif) - api-server
      • map-server (mapiif) - api-server
    • The http parser library can be switched at compile time to llhttp (--with-http_parser=llhttp) and defaults to http-parser (--with-http_parser=http-parser)
    • Visual Studio solutions have been updated (as a best-effort approach, those files are unmaintainable and are looking to be replaced by a generator such as CMake in order to avoid repetition and desynchronization). Xcode project has not been updated at the current time.
    • Some parameters can be edited at compile time to alter various behaviors. See src/api/aclif.h, src/api/httpsender.h, src/api/mimepart.h, common/apipackets.h for a list of macros that can be redefined (undocumented and may have unexpected side-effects, edit after familiarizing with the code that uses them).
  • Added support for user configuration in clients that support the HTTP API at the /userconfig/load and /userconfig/save endpoints
    • emotes are persisted by the char server into the emotes table (SQL migration is included), default emotes can be edited in conf/emotes.conf
    • hotkeys (v1) are currently not supported
    • hotkeys (v2) are persisted by the char server into the hotkeys table (SQL migration is included)
  • Added support for character settings in clients that support the HTTP API at the /charconfig/load endpoint
  • Added support for guild emblems in clients that support the HTTP API at the /emblem/upload and /emblem/download endpoints
    • Supports BMP (static) and GIF (static or animated) emblems
    • The emblem_data field in the guild table has been changed to a mediumblob (SQL migration is included)
    • Validation parameters can be changed in conf/common/emblems.conf
  • Added support for party/adventurer agency functions in clients that support the HTTP API at the /party/list, /party/get, /party/add, /party/del endpoints
    • Search is currently not supported
    • Adventurer agency data is persisted by the char server into the adventurer_agency table (SQL migration is included)
    • A new module (int_adventurer_agency) has been added to the char server
  • Added the following third party libraries, used by the api-server:
    • http-handler from the node-js http-parser (3rdparty/http-parser)
    • multipart-parser (3rdparty/multipart-parser)
    • cJSON (3rdparty/cJSON)
    • llhttp (3rdparty/llhttp)
    • GIFLIB (3rdparty/libgif)
  • Extended the SQL interface with the SQL->QueryStrFetch() method, to execute a query and fetch a row.
  • Added support for sending/receiving chunked packets (for sending and receiving packets that would exceed the maximum packet size)
    • See related macros in src/common/chunked/rfifo.h and src/common/chunked/wfifo.h
    • Tests are included, in src/test/test_chunked.c
    • Chunked packets are usable for both server-server and client-server communication
  • Added extraconf interface (currently supporting conf/common/emblems.conf) for configuration files used by multiple servers

Changed

  • The create_session() function is now part of the socket interface and adds support for configurable connection and termination handlers.
  • The delete_session() function is now part of the socket interface.
  • Updated token generation in the login server to support communication with the API server.
  • Updated gitignore with temporary files from python and ccache.
  • Updated handling of packet CZ_REQ_GUILD_EMBLEM_IMG (now PACKET_CZ_REQ_GUILD_EMBLEM_IMG1) to use the struct format and added the PACKET_CZ_REQ_GUILD_EMBLEM_IMG2 and CZ_REQ_GUILD_EMBLEM_IMG3 variants.
  • Updated handling of packets ZC_CHANGE_GUILD, ZC_GUILD_EMBLEM_IMG, CHARMAP_GUILD_EMBLEM, CHARMAP_GUILD_INFO, CHARMAP_GUILD_INFO_EMPTY, MAPCHAR_GUILD_EMBLEM to use the struct format.
  • Updated packets ZC_CHANGE_GUILD, ZC_GUILD_EMBLEM_IMG.
  • Renamed clif->guild_emblem_area() into clif->guild_emblem_id_area().
  • Renamed DEFAULT_AUTOSAVE_INTERVAL to DEFAULT_CHAR_AUTOSAVE_INTERVAL and DEFAULT_MAP_AUTOSAVE_INTERVAL to avoid conflicting definitions of the same macro.
  • Extended the console.console_msg_log (conf/global/console.conf) setting to work on all servers instead of just the map server.
    • Log filenames will be named accordingly: log/login-msg_log.log, log/char-msg_log.log, log/map-msg_log.log, log/api-msg_log.log.
  • Changed emblem_data in struct guild to be a pointer instead of a fixed size array (this may require updates to any custom code copying or allocating/deallocating the struct).
  • Switched to python3 for all the debian/ubuntu jobs in Gitlab-CI
  • Enabled memory leak on exit checks to the address sanitizer configuration for CI builds

Fixed

  • Fixed a compilation error with ccache.
  • Fixed packetvers in clif_friendslist_send().

v2023.03.08

10 Mar 03:27
b50a0de
Compare
Choose a tag to compare

Added

  • Added documentation for include overrides in configuration files (#3191)
  • Implemented the DynamicNPC Create request packets and the related script command dynamicnpcresult(). An example can be found in npc/other/dynamicnpc_create.txt. (#3192)
  • Implemented support for the GoldPC UI (a.k.a. Mileage), disabled by default, which can be enabled from conf/map/battle/feature.conf for packetver 20140611 and newer. (#3192)
    • The initial implementation includes two modes (single and double), configurable in db/goldpc_db.conf, and selectable in feature.conf.
    • An example NPC can be found in doc/sample/goldpc.txt, demonstrating the use of the GoldPC system script commands (setgoldpcmode()).
    • A custom GoldNPC NPC is spawned by players upon clicking the GoldPC button, see npc/other/goldpc.txt.
    • Further documentation of the system is available in doc/goldpc.md.

Changed

  • Added paths for include overrides to .gitignore so that they won't show up as untracked in git status or risk getting committed by accident. Those that wish to commit them to their fork are still free to do so by issuing a git add command. (#3191)

Fixed

  • Fixed the RA_WUGBITE immobile status (#2813)
  • Fixed the SC_FEINTBOMB cloak status not working (#2813)
  • Fixed an UnknownStatusChange error triggered by SC__BLOODYLUST (#2813)

v2023.01.11

14 Jan 01:32
491048a
Compare
Choose a tag to compare

Added

  • Added a skeleton function for generating an auth token. This doesn't add actual token generation capabilities at this time, but allows plugins to hook into it to implement custom behavior. (#3183)
  • Added the missing effects of Fire Expansion level 3 and 4 (#2920)

Changed

  • Changed validateinterfaces.py to run on python3. (#3185)
  • Changed the CI builds to use python3 instead of python2, as it's getting removed by linux distributions including debian unstable. (part of #3185)
  • Changed the show_monster_hp_bar option to show the HP bar on WoE guardians when it's enabled for Emperium (flag '2', disabled by default) instead of when it's enabled for MvPs/bosses (flag '4', also disabled by default.) (#2931, related to #2008, #2912)

Fixed

  • Fixed a missing package php-dom in CI builds. (part of #3185)

Other

  • Updated copyright headers for year 2023.

v2022.12.07

09 Dec 00:00
9003a6c
Compare
Choose a tag to compare

Added

  • Added the nosendmail mapflag, adding the ability to prevent players from sending emails (RODEX and classic) from a map. (#2962)
  • Added the item_drop_bonus_max_threshold configuration flag in conf/map/battle/drops.conf, making the item bonus rate cap configurable. (#3136)

Changed

  • Updated script_commands.txt, fixing typos and incorrect file names, adding documentation for missing checkoption() flags and updating some external URLs. (#3177)

Fixed

  • Added some missing checks for null in sd->inventory_data pointers to prevent crashes. (#3176)
  • Fixed the item bonus rate cap getting applied to the base item drop rates and the server's drop rate modifiers, making their real values different from what @mi shows. The cap now only applies to drop-time bonuses (cash shop SCs, race-specific drop rate modifiers, luk or size custom influence, renewal level modifiers, etc). (part of #3136)

v2022.11.02+1

04 Nov 19:07
f663f63
Compare
Choose a tag to compare

Added

  • Added support for newer packetvers/encryption keys/client messages (up to 20221019). (#3174)
  • Added support for packet ZC_SPECIALPOPUP related to the Special Popup messages. (part of #3174)
  • Implemented script command specialpopup() to open a popup and/or show a chat text message from the spopup.lub file. An example script has been provided in npc/custom/specialpopup.txt. (#3174)
  • Implemented the specialpopup mapflag, to automatically show the popup text configured clientside. All GvG maps have been configured to show popup with type 1. (#3174)

Changed

  • Updated many packets with the correct Zero client packetver checks. (part of #3174)
  • Updated GitHub Actions workflows to use the latest packetver. (part of #3174)
  • Updated GitHub Actions workflow to include a gcc-12 build. (part of #3174)

Fixed

  • Fixed a conflicting variable name pinfo, causing warnings about shadowed variables when building plugins. (part of #3174)

Removed

  • Removed the unused value vendinglistType from enum packet_headers. (part of #3174)