165 Commits

Author SHA1 Message Date
Jittapan Pluemsumran
d445497870
Converted a bunch of packets to structs (#8295)
Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
2024-05-09 23:06:32 +02:00
Playtester
ffe40def4a
NPC_RUN, Monster Skill Interval (#8302)
- Monsters will now properly run away when using NPC_RUN (fixes #7941)
- Introduced a new function unit_get_walkpath_time that returns the time the unit needs to walk its current walkpath
  * This is now used for NPC_RUN and random walking
- Fixed an issue with mismatching timer warnings when a monster casts NPC_RUN multiple times in row

- Monsters will now always attempt to use non-berserk-state skills once per second (fixes #1700)
  * This completely replaces the "ugly" solution to use a walk_count for idle, walk and chase skills
  * This interval is now a lot more accurate and no longer influenced by external factors such as canact delay
  * This interval is now also used for lazy monsters rather than MIN_MOBTHINKTIME*10 so that MIN_MOBTHINKTIME can be reduced without having to worry about skills being cast more often
  * Angry skills no longer replace the normal attack and now follow the once per second rule; they will always first be attempted at the end of the walk delay after a normal attack
- The special follow-up attack skill monsters use when you move out of their attack range, now is only used when they are in Angry state
  * Also fixed a bug that this was checked every 100ms until the monster used a skill, instead of just once per second

- Monsters now can use chase skills even before they start moving (assuming one second has already passed since last skill check)
- Removed "hack" to make monsters cast chase skills when trapped in icewall
  * This was solved by implementing checking for chase skills before starting to move

- Monsters will now receive an aMotion walk delay after having used a skill
- A monster that could not walk randomly because of walk delay will now walk immediately once the walk delay expires
- Using angry or berserk skills will now set a monster's attack delay
2024-05-08 09:02:48 +02:00
Lemongrass3110
b48948822a
Replaced NULL with nullptr (#8298) 2024-05-03 19:38:13 +02:00
Lemongrass3110
827517f8cf
Cleaned up a few TODOs from #7963 (#8254) 2024-05-02 22:44:31 +02:00
Playtester
cad5cab976
Coma Rework, Exp Calc Type, Fiber Lock Range (#8287)
- Coma item bonus is no longer an additional effect / status change, but instead replaces the attack damage with setting HP/SP to 1
  * That means Coma attacks will never kill someone, even if the original attack would be lethal
  * When doing a Coma attack, the attack displays the original damage and this is also what counts towards the mob damage log
- Coma is checked for every single event that applies damage, including reflect damage, and for Provoke / Self Provoke
  * Some Renewal-only effects couldn't be tested and were left unchanged (e.g. damage from White Imprison)
- Coma now sets SP to 1 instead of 0
- bComaRace, bWeaponComaRace and bWeaponComaEle won't work on bosses, GVG and battlefield objects
- bComaClass and bWeaponComaClass no longer work on GVG and battlefield objects, but can work on bosses if you specify Class_Boss or Class_All
- Edge is now defined to only work on normal monster
- The default exp_calc_type 0 no longer counts the first attacker twice and instead works like on official servers
- Added a new exp_calc_type 2 that counts the first attacker twice as previously
- The damage logged will now include overkill damage on exp_calc_type 0 and 2, but not count Coma damage (it will count the damage you would have originally dealt instead)
- Fiber Lock now has a range of 9 instead of 7
- Fixes #8279
2024-05-01 08:58:51 +02:00
Playtester
2963e52fc6
Pre-Re Monster Stats, CSV2YAML Converter, Damage Inaccuracy Fix (#8278)
- Fixed several pre-re monster stats being 1 instead of 0
  * Issue was introduced in 05a17d8 as safety measure to prevent division by 0, but it results in wrong damage numbers
  * Players can get 0 on stats as well, so it's better to put such safety measures at the point where the division takes place
- Minimum stat for monsters is now 0 instead of 1
- Monsters that have 0 Luk after this change can no longer be cursed
- Improved csv2yaml converter to no longer lose the information whether a stat is 0 or 1
- Fixed an issue with converting Race2 in the csv2yaml converter
- Removed arbitrary "+1 MATK" bonus that was probably added due to people not figuring out why the damage was off by 1
- Fixed small damage inaccuracy issue in PVP
- Fixes #8277
2024-04-24 21:04:34 +02:00
Playtester
f15cb72f94
Monster AI Improvements, Clashing Spiral, Skid Trap, Throw Stone (#8269)
- Added config setting mob_unlock_time that defines how long a monster can be trapped (immobile) before it unlocks its target 
  * Default is 2000ms, which makes Clashing Spiral no longer cause monsters to drop their target, but Ankle Snare still will even at minimum duration 
- Monsters will now promptly use idle skills while trapped (there was a delay before)
- Increased the time the AI is still active when there are no players left on the map from 0ms to 5000ms
  * This fixes an issue that monsters never unlocked their target if it was the last player to leave the map
- Clashing Spiral now has a range of 4 instead of 5
- Skid Trap no longer has a stop effect in pre-re, but it will make monsters unlock their target and become idle
- Skid Trap still stops targets for 3 seconds in renewal, but will no longer activate on bosses
- Throw Stone now deals 30 damage when used by monsters
- Fixes #7846
2024-04-22 08:39:11 +02:00
Atemo
c70bc39751
Implemented SC_PERIOD_RECEIVEITEM_2ND and SC_PERIOD_PLUSEXP_2ND (#8197) 2024-04-10 14:01:12 +02:00
Lemongrass3110
cb42dceb87
Switched most C headers to C++ (#8225) 2024-04-07 22:14:51 +02:00
Playtester
1a004f0164
Mercenary, Regen and Frenzy Improvements (#8185)
- When a Mercenary gains a bonus, there will now be an animation
- Mercenary bonuses now last for 5 minutes instead of 10 minutes
- Fixed HP/SP recovery values of Mercenaries (and Elementals)
- Mercenaries now recover HP when walking
- Homunculi no longer recover SP when walking
- Mercenary natural recovery interval is 8s for HP and 6s for SP
- Homunculus natural recovery interval is 2s for HP and 4s for SP
- MER_CRASH now only deals 1 hit and can be cast-cancelled
- Frenzy now drains HP every 10 seconds instead of every 15 in pre-renewal
- Fixed SP cost Mercenary Frenzy (100 -> 200 SP)
- Killing monsters exactly 2 times below you base level now still counts as mercenary kill
- Fixes #8184 
- Fixes #7663
2024-03-27 11:48:05 +01:00
Lemongrass3110
9139a21adc
Resolved a few size_t related warnings (#8085)
Disabled warnings in libconfig only for MSVS
2024-02-28 21:05:18 +01:00
Vincent Stumpf
61c2480d89
Add explicit [[fallthrough]] attributes (#8054)
Fixes #7918
2023-12-29 01:08:24 +01:00
Vincent Stumpf
f2a3bad3e2
Cleanup uses of SWAP macro (#8051) 2023-12-27 11:36:46 +01:00
idk-whoami
c8980072a5
Corrected script for some item #26 (#8026)
Thanks to @Pokye, @Atemo
2023-12-15 15:59:55 +01:00
Vincent Stumpf
02cd29c57b
Set mob's jname to name if not specified (#8003)
Fixes #8001
2023-11-03 08:25:35 -04:00
Aleos
2487d2bf79
Implement s_mob_db constructor (#7799)
* Follow up to 65200eb.
* Removes a lot of else cases when parsing monster data.
* Fixes an issue where the damagetaken value of monsters would be reset after issuing a mob_spawn().
Thanks to @Lemongrass3110, @mplaten, and @vstumpf!
2023-10-25 08:58:04 -04:00
idk-whoami
61311f5912
Corrected script for some item #25 (#7946) 2023-10-10 13:47:08 +02:00
Aleos
442cf87fcc
Fixes monster escape AI issues (#7927)
* Fixes #7904 and fixes #7916.
* Resolves NPC_RUN and NPC_RANDOMMOVE monsters not always reaching their intended escape distance.
* Resolves Marine Sphere calling the run skill too early resulting in the distance escaped not always being the same.
* Resolves Wink of Charm not forcing the target to fail skill use on the caster.
* Renames the monster alchemist state to can_escape to fit multiple uses.
Thanks to @Leemonn and @Lemongrass3110!
2023-09-14 12:41:47 -04:00
Aleos
6e0a5bfa83
Adds missing mob SQL column for Illusion Turtle (#7926)
* Fixes #7925.
* Follow up to 0f18869.
Thanks to @SpineOfSteel and @Atemo!
Co-authored-by: Atemo <capucrath@gmail.com>
2023-09-13 08:50:30 -04:00
Vincent Stumpf
f20f8b01be
Fix maximum ratio for MOB_ITEM_RATIO_DB (#7836)
Fixes #7835
2023-07-03 19:19:18 -07:00
Vincent Stumpf
833966f47b
Convert guild_db to unordered_map (#7612)
* Refactor guild db to STL container

* Split up struct guild and MapGuild/CharGuild
2023-06-16 19:42:55 -07:00
Vincent Stumpf
08a1c41d1b
Refactor MapFlag accessors (#7783)
Use methods instead of direct member access.
2023-06-03 17:38:29 -07:00
Atemo
b4b69a2cc1
Fixed an issue where mobs instantly walked after being spotted (#7738)
* Fixed an issue where mobs instantly walked after being spotted
  MIN_RANDOMWALKTIME was initialized too early
* This behavior is only applied on the monster script command
2023-05-12 00:34:36 +02:00
Atemo
84bf6b87f1
Fixed an issue for map_drops.yml (#7735)
The key for umap should be the index, to allow to define the same item in yaml file
2023-04-26 23:35:24 +02:00
Everade
7853e926c2
Episode 17.2 - Sage's Legacy (#6799)
* Episode 17.2 Initial Release of instances and quests
* Added warp portals and monster spawn scripts
* Added Episode 17.2 related database entries

Closed #6470 

Thanks to @Megelith @Pokye 

Co-authored-by: JohnnyPlayy <JohnnyPlayy@users.noreply.github.com>
Co-authored-by: Everade <privacy@gatheringro.com>
Co-authored-by: crazyarashi <26841779+crazy-arashi@users.noreply.github.com>
Co-authored-by: Atemo <capucrath@gmail.com>
2023-04-12 21:27:34 +02:00
Atemo
74b2834502
Updates map_drops.yml (#7676)
* adjusted the rate in map_drops.yml to 1/100000 instead of 1/10000

Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
2023-04-08 16:48:01 +02:00
Aleos
65200eba50
Fixes an issue with clones receiving 1 damage (#7670)
* Fixes #7579.
* Adds an extra conditional check for reducing Green Aura type mobs to ignore cloned monsters.
Thanks to @vietlubu and @Lemongrass3110!
2023-04-03 18:47:53 -04:00
Vincent Stumpf
819b7cb361
Fix ASAN crashes and LSAN leaks (#7649) 2023-03-20 09:32:41 -07:00
Vincent Stumpf
7dd6eb5182
Add other player in mail transactions (#7568)
* Add other player's char_id in mail transactions

Thanks to @tokeiburu

Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
2023-03-14 02:30:23 -07:00
Jittapan Pluemsumran
1985662045
Made debug ShowStatus calls easier to disable (#7618)
Co-authored-by: Aleos <aleos89@users.noreply.github.com>
2023-02-21 11:34:52 +07:00
Vincent Stumpf
e235c9cab4
Change common and config includes to use <> (#7596) 2023-02-12 12:46:06 -08:00
Vincent Stumpf
eff6131087
Speed up loading of npcs and maps (#7597) 2023-02-12 11:01:14 -08:00
Vincent Stumpf
6938722f02
Replace the bitshift optimizations for multiplication (#7590)
* These were originally bitshifts because it was 'faster', but now with modern compilers and hardware, the only thing it does now is confuse developers who have to read the code
2023-02-08 16:00:11 -08:00
Lemongrass3110
4d734abc53
Cleaned up monster skill status checks (#7495)
Fixes 4 more warnings introduced in 1f4c068
2022-12-16 21:56:55 +01:00
Singe Horizontal
8eac71f57f
Cleaned struct tokens for map_session_data and status_change (#7490)
Fixes #7492
2022-12-16 19:16:29 +01:00
Aleos
da375a04c1
Adds battle config mob_respawn_time (#7312)
* Adjusts the minimum respawn time of a monster to be 1 second as it is officially.
* Adds a battle config to allow for easy adjustment.
* Monsters that don't define a delay1 for permanent spawn scripts are defaulted to 5 seconds.
Thanks to @mrjnumber1, @vstumpf, @Lemongrass3110, and @Atemo!
Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
2022-12-14 14:17:41 -05:00
Vincent Stumpf
1f4c068c39
Refactor status change entries (#7356)
* Make map_session_data a class, call constructor/destructor on alloc/free

* add getSCE

* add create, delete, clear SCE

* Use getSCE, make data access private

* add a cache for last-fetched status
2022-12-13 23:47:53 -08:00
Singe Horizontal
5a533a7a12
Fixes drop rate for size-moded mobs (#7482)
* Fixes #7481.
* Restores correct drop rate for spawned size-modified monsters so that they read the current memory instead of the database value if changed.
2022-12-13 08:23:00 -05:00
userid0
4836e09199
Fix compiler warning C4244. (#7295) 2022-10-24 10:02:27 -04:00
Aleos
4ae56ba94c
Fixes Marine Sphere behavior (#7333)
* Fixes #7332.
* Resolves an issue where Marine Sphere were not casting their skills after being hit.
Thanks to @violent01 and @Daegaladh!
2022-10-07 15:54:07 -04:00
munkrej
4800b5bf72
adds missing mob skill conditions MSC_GROUNDATTACKED and MSC_DAMAGEDGT (#7138) 2022-09-22 15:30:17 +02:00
Lemongrass3110
b1b371f4b8
Cleaned up status_change_end (#7211)
* Removed leftover old debug info that made it necessary to the hide the real function behind a define.
* Introduced a C++ default argument for timer id, as the timer id is only needed a single time, when the status expires naturally.
* Replaced all currently existing calls that had INVALID_TIMER as argument and made use of the new default argument.
2022-08-26 22:23:40 -04:00
Lemongrass3110
c06492def6
Implemented map specific drops (#7156)
Thanks to @Atemo and @aleos89.
2022-08-09 19:15:13 +02:00
munkrej
84d295e784
Adds new mob skill condition MSC_MOBNEARBYGT (#7130)
* Adds new mob skill condition MSC_MOBNEARBYGT as on official some monsters trigger skills when specific amount of other monsters are nearby.
2022-07-25 11:11:20 -04:00
Aleos
8038e71322
Speed up item and mob information commands (#7084)
* Fixes #7081.
* Small refactor of the atcommands: iteminfo, mobinfo, whodrops, and idsearch.
* Item information gathering is now sped up.
* Refactored itemdb_searchname_array to store results in a std::map so that the data is sorted by ID automatically.
* Cleanups across the board to remove extra calls for itemdb_exists().
Thanks to @voyfmyuh, @CairoLee, and @Lemongrass3110!
2022-07-22 15:11:44 -04:00
Balfear
ec659d576a
Added robe for monster avail feature (#7103)
* Added robe to mob avail.
2022-07-14 14:08:29 -04:00
Aleos
256735a136
Fixes mob and item atcommand sorting issues (#7058)
* Fixes #7055.
* Fixes several atcommands used for mob and item information were not properly accounting for order.
* Resolves an issue where YAML databases were not properly utilizing the cache feature.
* Increased MAX_SEARCH to 10 by default as in renewal there are many more items with duplicated names.
Thanks to @Playtester!
Co-authored-by: Playtester <Kenji.Ito@gmx.de>
2022-06-24 09:53:31 -04:00
Aleos
aad3a70bbc
Fixes script commands unitwalkto/unitwalk (#7007)
* Fixes #5340.
* Resolves an issue where monsters may tend to lose their target if they are too slow and the destination is too far when using script commands unitwalkto/unitwalk.
* Allow script command unitstopwalk to remove the state tracking for script commands unitwalk/unitwalkto.
* Print a warning to the console if a unit is forced to walk again and hasn't yet reached its initial destination.
Thanks to @NeutralDev and @Lemongrass3110!
2022-06-07 15:07:51 -04:00
Daegaladh
fa363b972d
Fixed dead monsters stuck after killed (#5263) 2022-05-20 13:27:26 +02:00
Playtester
6bf1b7c2ad
Fixed rebirthed monster exp (#6966)
- Fixes #6965 
- When a rebirthed monster is killed it will now only give exp for the HP it was revived with (e.g. if it revived with 40% HP then it will give 40% of its exp on the second kill)
- The first kill will still give 100% exp and drops
2022-05-19 21:40:24 +02:00