Releases: HerculesWS/Hercules
Releases · HerculesWS/Hercules
v2023.08
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 theHERCULES_VERSION
constant. Hotfix releases will take the formv2023.08.001
~v2023.08.999
(and will setHERCULES_VERSION
to202308001
~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 thegettimetick()
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
inconf/battle/battle.conf
. (#3226, issue #3188) - Added the missing
common/packets_struct.h
include toHPMapi.c
andHPMlogin.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
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 inaclif.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 theInherit
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 namesSkillType
flag namesDamageType
flags namesRequirements/WeaponTypes
flags namesRequirements/AmmoTypes
flags namesRequirements/State
valuesUnit/Flag
flag namesUnit/Target
values- NOTE: the
SameGuild
value was previously incorrectly listed asSameguild
in the examples and documentation. The correct version isSameGuild
.
- NOTE: the
- 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 toskill->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)
- It should fail with a skill failure message and not consume requirements when: (#3215)
- 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
- It should fail and not consume SP when:
- 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
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
(replacesbattle_configuration/max_hp
) -pc_maxhp_cap(sd)
MaxASPD
(extendsbattle_configuration/max_aspd
and supersedesbattle_configuration/max_third_aspd
) -pc_max_aspd(sd)
MaxStats
(extendsbattle_configuration/max_parameter
andbattle_configuration/max_third_parameter
, supersedesbattle_configuration/max_extended_parameter
,battle_configuration/max_summoner_parameter
,battle_configuration/max_baby_parameter
,battle_configuration/max_baby_third_parameter
) -pc_maxstats(sd)
(replacespc_maxparameter(sd)
)NaturalHealWeightRate
(replacesbattle_configuration/natural_heal_weight_rate
) -pc_overhealweightrate(sd)
and the helperpc_isoverhealweight(sd)
(replacespc_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
- 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
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
andbattle_configuration/max_third_parameter
are retained since some logic still depends on them battle_configuration/natural_heal_weight_rate
v2023.05.10
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 ofCloneItem
indoc/item_db.txt
for details. (#3206) - Added the script commands
openquestui()
andopentipboxui()
. (#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
- Burled Request quest exp reward updated:
- Edited lines were also updated to current Hercules' standards and HULD
- Changes from 2012.04.04 kRO Patch:
- 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 thedata
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 usingsetunitdata(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
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
- client - api-server (
- The http parser library can be switched at compile time to llhttp (
--with-http_parser=llhttp
) and defaults tohttp-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 inconf/emotes.conf
- hotkeys (v1) are currently not supported
- hotkeys (v2) are persisted by the char server into the
hotkeys
table (SQL migration is included)
- emotes are persisted by the char server into the
- 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 theguild
table has been changed to amediumblob
(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
)
- http-handler from the node-js http-parser (
- 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
andsrc/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
- See related macros in
- Added
extraconf
interface (currently supportingconf/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
(nowPACKET_CZ_REQ_GUILD_EMBLEM_IMG1
) to use the struct format and added thePACKET_CZ_REQ_GUILD_EMBLEM_IMG2
andCZ_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()
intoclif->guild_emblem_id_area()
. - Renamed
DEFAULT_AUTOSAVE_INTERVAL
toDEFAULT_CHAR_AUTOSAVE_INTERVAL
andDEFAULT_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
.
- Log filenames will be named accordingly:
- Changed
emblem_data
instruct 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
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 innpc/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 packetver20140611
and newer. (#3192)- The initial implementation includes two modes (single and double), configurable in
db/goldpc_db.conf
, and selectable infeature.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
.
- The initial implementation includes two modes (single and double), configurable in
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
v2023.01.11
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
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 inconf/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 missingcheckoption()
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
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 thespopup.lub
file. An example script has been provided innpc/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
fromenum packet_headers
. (part of #3174)
v2022.11.02
Added
- Updated the map cache and map list with new maps. (#3156)
- Updated the NPC ID constants and Hat effect constants with new IDs. (part of #3156)
- Implemented the package item selection UI for recent clients that support it. (#3158)
- A new item type,
IT_SELECTPACKAGE
is defined for this purpose (see theSelect_Example1
item).
- A new item type,
- Added support for constants and bitmask arrays in
mob_skill_db.conf
, for theConditionData
,val<n>
andEmotion
fields. (#3164, issue #2768) - Exposed monster modes (
MD_*
constants) to the script engine. (part of #3164) - Implemented the
@quest
atcommand, to manipulate a character's quest log. (#3166) - Implemented the Rebuilding the Destroyed Morroc quests from episode 14.3. Note: the quests (except the reward NPCs) are disabled by default. (#3167)
- Implemented the Enchant User Interface for clients that support it. (#3159)
- The enchantments are defined in the newly introduced
db/*/enchant_db.conf
database.
- The enchantments are defined in the newly introduced
Changed
- Refactored
status->get_sc_def()
and its call chain (includingstatus->change_start()
and thesc_start*()
macros to include the skill ID, used for SC immunity checks. (part of #3155) - Updated the CodeQL GitHub workflow to follow the latest upstream templates. (part of #3169)
- Removed duplication and consolidated the functions of the
itemdb->lookup_const()
/mob->lookup_const()
functions asmap->setting_lookup_const()
. (part of #3164) - Moved the function
itemdb->lookup_const_mask()
into the map interface asmap->setting_lookup_const_mask()
. (part of #3164) - Renamed the
BA_FROSTJOKER
skill and related constant to the official nameBA_FROSTJOKE
. The old name is left behind as a deprecated constant, to ease migration of custom code. (#3170) - Split
constants.md
intoconstants_re.md
andconstants_pre-re.md
, since there are large variations in the available constants and their values between modes. The generator plugin and related CI script have been updated accordingly. (#3171) - Refactored and simplified some code after the removal of the multi-zone leftovers. (part of #3173)
- Cheatsheet for updating custom code:
MAX_MAP_SERVERS
has been removed, and any code that used it in a loop needs to be refactored to remove the loop that is no longer necessary.chr->server[]
has becomechr->map_server
(and it's a single object rather than an array of one element).- packet
H->Z
0x2b04 (chrif->recvmap()
) has been removed without a replacement as it was never sent. - many functions that took a
map_id
/server_id
argument no longer need it (since it would be always zero). Code that used it likely needs to be refactored or removed. - packet
H->Z
0x2b20 (chrif->removemap()
) has been removed without a replacement as it was never sent. mapif->sendallwos()
has been removed without a replacement as it never sent anything since there couldn't be more than one map server connected at any given time.mapif->sendall()
is replaced bymapif->send()
(but mind the different return value).mapif->send()
no longer requires a server id argument since there can only be one (and its return value changed).- several pieces of code have been completely removed since they were not reachable through any code path: any custom code part of them was likely never called and can be safely removed.
map->map_db
and any related functions have been removed, as it could never get populated.chrif->other_mapserver_count
and any related functions have been removed, as it could never become nonzero.- packets
Z->H
0x2b05 andH->Z
0x2b06 have been removed as they could never be sent. chr->search_mapserver()
andchr->search_default_maps_mapserver()
have been completely overhauled and their purpose is now fulfilled bychr->mapserver_has_map()
andchr->find_available_map_fallback()
, with different return values and arguments.- the
map_fd
argument has been removed from several non-mapif functions that should have no business with it. The map server's fd can be retrieved throughchr->map_server.fd
, but in most cases it shouldn't be necessary and could be a code smell. - the
chrif->changemapserver()
function has been removed with no replacement as it was never called. - the
server
field ofstruct online_char_data
has been replaced with an enum and renamed tomapserver_connection
. It no longer encodes the server ID (since it could only be zero) but only the connection state. The old-2
special value maps toOCS_UNKNOWN
,-1
toOCS_NOT_CONNECTED
and>= 0
toOCS_CONNECTED
.
- Cheatsheet for updating custom code:
- Moved the
chrif
packet documentation topackets_chrif_len.h
, where the packet lengths are defined. (part of #3173)
Fixed
- Fixed/implemented Official behavior for the Golden Thief Bug Card, blocking SCs caused by magic-type skills, regardless of the SC type. (#3155)
- Exceptions apply: Magnificat, Gloria and Angelus are blocked, even if they aren't magic-type skills.
- Some skills that would be broken now have temporary workarounds to apply the right behavior if it doesn't match what their type dictates.
- The
NoMagicBlocked
flag has been removed from skills that no longer require it.
- Fixed the
AttackType
for many skills to match the official value. (part of #3155) - Fixed the zeny payments through the Stylist UI to be properly logged and count toward achievements. (#3157)
- This includes a potentially very long running database migration for the logs database (adding the picklog type '5').
- Fixed
PF_SOULCHANGE
to match the official behavior, preventing its use against characters in the Berserk state and against boss monsters and allowing it to disregardSC_FOGWALL
. (#3160) - Fixed a case of the Doctor Quest taking items and not rewarding in return, as well as some
delitem()
that aren't executed in the same run loop ascountitem()
. (#3162) - Fixed some possible exploits in the Pickocked Quest, allowing only one instance of the NPC to be available at any time. (#3162)
- Fixed the Dual Monster Race logic to disregard the relative order of the winning monsters and simplified the script logic. (#3162)
- Fixed Kihop wrongly counting the bearer Taekwon for the bonus calculation. (#3161)
- Fixed the interaction of Lex Aetherna with Freeze and Stone Curse. (#3161)
- Fixed the SP cost behavior for Tarot Card of Fate when under the effect of Service for You. (#3161)
- Fixed the duration of Super Novice's Steel Body when dying at 99% experience. (#3161)
- Fixed the cast time and after cast delay of Napalm Beat. (#3161)
- Fixed
CH_CHAINCRUSH
not working afterMO_COMBOFINISH
. (#3161) - Fixed several security issues (including a number of false positives) reported by CodeQL (overflows, misleading implicit type conversions, ambiguous regular expressions, etc) and refactored some related code to reduce dangerous variable reuses. (#3169)
- Fixed some cases of movement notifications sent to the client after a monster dies, causing visual glitches such as mobs not cleared and still standing or moving after their death. (#3163, issues #2047, #2109)
- Fixed an integer overflow in the image size for the Macro interface. (#3165)
- Fixed a failed assertion when a quest has 3 objectives. (#3166)
- Fixed various quest related packets sent to the client. (#3166)
- Fixed the labelling for quests that use monster size, race or element as conditions.
- Fixed swapped values for the mob size.
- Fixed the mob ID not being sent for special cases (with map names, races, sizes or elements) and requiring a new log in to see the correct quest objectives.
- Fixed the Zeny retrieval process from RoDEX, causing potential loss of Zeny. (#3168)
- Fixed output character encoding in the
setup_mariadb.ps1
script. (#3172) - Fixed a buffer overflow in
mapif->rodex_getitemsack()
. (part of #3173)
Deprecated
- Deprecated the
BA_FROSTJOKER
skill ID and constant, renamed to the official nameBA_FROSTJOKE
. (part of #3170)
Removed
- Removed the
itemdb->lookup_const()
andmob->lookup_const()
functions, replaced bymap->setting_lookup_const()
. (part of #3164) - Removed the
itemdb->lookup_const_mask()
function, replaced bymap->setting_lookup_const_mask()
. (part of #3164) - Removed support for the deprecated
View
field in the item DB, replaced in 2016 byViewSprite
andSubType
with #1828. (#3170) - Removed the deprecated constants
Job_Alchem
andJob_Baby_Alchem
, replaced in 2016 byJob_Alchemist
andJob_Baby_Alchemist
with #1088. (#3170) - Removed the old
VAR_*
setlook constants, deprecated since 2016 with #908. (#3170) - Removed the
useatcmd()
script command, deprecated in 2017 with #1841. (#3170) - Removed code (mostly dead code) related to the long unsupported and long broken multi-zone functionality. (#3173)