54 Commits

Author SHA1 Message Date
Lemongrass3110
660b194ade
Changed droplists from ERI to STL (#8370) 2024-06-04 02:40:55 +02:00
Playtester
b4ae40d401
Synchronize Damage Feature (#8305)
- Added a new monster stat "ClientAttackMotion" to mob_db.yml which is the time from when a monster attacks until which the damage shows on the client at 1x speed
- Added a new config synchronize_damage; when set to "yes", the client will display the damage of normal monster attacks at the exact time it is applied on the server, removing position lag (fixes #259)

Special thanks to all people who worked together to make this possible.

Co-authored-by: aleos, Lemongrass3110, Atemo
2024-05-25 18:59:22 +02:00
Playtester
5d232db89e
Spawn and Free Cell Search Behavior (#8324)
- When searching for a map-wide free cell, the tiles 15 cells from the edge are no longer considered
  * Added a configuration to change the edge size to any value between 1 and 40
- When searching for a free cell, the tiles 4-5 cells from the edge are now considered invalid and trigger a retry
  * If you make the edge size smaller than this, it will use edge size instead
- Searching for a free cell now defaults to 50 tries, but if the "no spawn on player" option is active, those failed attempts are not counted towards the limit anymore
- When a monster spawns in a defined area there will now be 8 attempts to spawn it on a valid cell within the area and then one attempt on the center cell; if all 9 attempts fail, there will now be 50 tries to spawn it map-wide before it gives up
- When a monster has fixed spawn coordinates, but those coordinates are a wall, it will now spawn in a random location map-wide instead
  * This also applies to icewall blocking the cell unless the boss_monster command was used
- Each monster in an area spawn will now receive its own spawn center within the spawn area on server start
  * This results in the spawn area being larger but having a bias towards the center
  * Added a configuration to disable this behavior
- Fixed slave monsters always being active and constantly calling the "search freecell" function even though neither them nor their master have been spotted yet
- Fixed map server crash when setting no_spawn_on_player to 100 (follow-up to 33b2b02)
- Updated prontera field spawns to official episode 18+
- Updated all champion mob respawn times to 3 minutes and sorted them by map name
- Fixes #8300
2024-05-19 17:12:44 +02:00
eppc0330
949a33081f
Fix slavemob bahavior (#7978)
Fixes #6885

Co-authored-by: aleos89 <aleos89@users.noreply.github.com>
2024-05-19 14:10:23 +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
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
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
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
Vincent Stumpf
f20f8b01be
Fix maximum ratio for MOB_ITEM_RATIO_DB (#7836)
Fixes #7835
2023-07-03 19:19:18 -07: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
Vincent Stumpf
e235c9cab4
Change common and config includes to use <> (#7596) 2023-02-12 12:46:06 -08: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
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
Atemo
53d5fc609a
Updated damagetaken (#7372)
Save damagetaken in mob_data for mob controller
2022-10-22 12:57:46 +02:00
munkrej
4800b5bf72
adds missing mob skill conditions MSC_GROUNDATTACKED and MSC_DAMAGEDGT (#7138) 2022-09-22 15:30:17 +02: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
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
Playtester
5181c70626
Improved chasing behavior (#6903)
- Fixes #6899
- Monsters will now always walk to the end of their chase path before checking for their target again (you can still change this by changing monster_chase_refresh in monster.conf)
- A monster's chase range is now exactly as defined in mob_db.yml except when it was just attacked
- A just-attacked monster's chase range is now only enhanced until it reaches its original target cell
- Ranged monsters will now always stop when their target is in attack range, even if they still have attack delay
- Fixed a small math error when calculating chase path
- When a monster loses its target, it will now always spread to an empty cell when it was chasing something and reaches the end of its chase path, but will no longer spread when it was already attacking the target that disappeared (it will still spread if you set the custom mob_ai setting for this)
- Fixed monsters not starting to chase a target while they are randomly walking

Thanks to @aleos89 for support.
2022-04-29 21:34:39 +02:00
Lemongrass3110
01261dbf3d
Cleanup after RYML merge (#6785)
Speeded things up even more by making use of C++'s reference feature.
Fixed #6770 warning while at it.
Added back support for case insensitive booleans.
Fixed a very rare issue with cached databases.
Removed .children() calls
Added back type safety reports
Added ryml to login-server makefile

Thanks to @aleos89, @Atemo and @idk-whoami
2022-04-03 04:02:13 +02:00
Jittapan Pluemsumran
d1b7061f5a
YAML loading optimization (#5997)
* Use rapidyaml library to parse YAML databases instead of yaml-cpp.
* Drastically reduces the parse time for yaml databases.
* Removes yaml-cpp content from main servers, except for tool emitter.
Co-authored-by: Vincent Stumpf <vincents.995@gmail.com>
Co-authored-by: Atemo <capucrath@gmail.com>
Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
Co-authored-by: Aleos <aleos89@users.noreply.github.com>
2022-03-30 16:38:52 -04:00
Lemongrass3110
534c5b2edd
Add more Github Actions (#6530)
Renames "build_servers.yml" to "build_servers_gcc.yml"
Removed Pre-Renewal and Renewal from GCC compilation
Added an action for Pre-Renewal and Renewal
Added an action for VIP
Added an action for different packet versions
Added MSVS build
Changed some make server to make all
Added master building
Disabled LTO by default
Added some missing override declarations
Added Clang building
Disabled Clang 12 and 13 for the time being

Thanks to @aleos89 and @Akkarinage for their help and input.
2022-01-19 00:08:28 +01:00
Lemongrass3110
7556453dfc
Merge of Rytech's 4CrAM (#6414)
Merged Rytech2/4CrAM-Open@978d4fc406

Original author is @Rytech2 and all credits belong to him.
Cleanups by @Lemongrass3110, @aleos89 and @Atemo.

Co-authored-by: Rytech2 <rytech16@gmail.com>
Co-authored-by: aleos <aleos89@users.noreply.github.com>
Co-authored-by: Atemo <capucrath@gmail.com>
2021-12-30 20:25:19 +01:00
Atemo
3abc86e02d
Wave mode instances - walkthrough conversions (#3884)
* Wave mode instances - walkthrough conversions

* NPC_EMOTION and NPC_EMOTION_ON disrupted the walking system and have been restricted on the maps.
* Implemented AI_SPECIALs. AI and normal monsters can naturally fight each others. However monsters with AI_SPECIAL can't be hit by normal monsters.

* Implemented mob_setidleevent command.
`mob_setidleevent <GID>,<event>;`
This command will attach an event label to the monster with the given <GID> which will execute when the <GID> is idle.

* Added parameters to unitskilluseid and unitskillusepos
-- `<cancel>`: define if the skill can be interrupted when hit (by default the cancel value was 'castcancel' from skill_db.txt)
-- `<Line_ID>` : the monster will say the message from 'Line_ID' in mob_chat_db.yml when casting the skill

* Added `UMOB_IGNORE_CELL_STACK_LIMIT` for setunitdata/getunitdata script command.
When true, the monster will ignore the stack limit (max number of characters that can stack within a single cell) defined by 'official_cell_stack_limit' in misc.conf

* The script is disabled by default like on KRO

Thanks to @Lemongrass3110 @aleos89 @Badarosk0 @sigtus @Questune09 !
2021-10-26 14:56:47 +02:00
SeravySensei
72aafdadea
Fixed drop rate bonuses (#3986)
Fixes #2613

Co-authored-by: aleos <aleos89@users.noreply.github.com>
Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
Co-authored-by: Atemo <Atemo@users.noreply.github.com>
2021-08-27 23:00:41 +02:00
Atemo
99eed0c9b1
Converted mob_item_ratio to YAML (#6021)
* Converted mob_item_ratio to YAML
* Includes CSV2YAML converter.
* Added the possibility to remove an item from monster drop using this feature

Co-authored-by: Aleos <aleos89@users.noreply.github.com>
Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>

Thanks to @idk-whoami !
2021-08-11 16:28:46 +02:00
Lemongrass3110
af97f7f9bd
Added ID field to mob_db structure (#6069)
Fixes #6055

Thanks to @k1ngJ
2021-07-03 17:48:30 +02:00
Atemo
9322f67002
Converted mob_boss to yaml (#6011)
* Converts the Monster summon group Database into YAML. (mob_boss.txt, mob_branch.txt, mob_classchange.txt, mob_poring.txt, mob_mission.txt, mob_pouch.txt, mob_random_db.txt)
* Includes CSV2YAML converter.

Thanks to @Lemongrass3110 !
2021-06-12 21:52:45 +02:00
Atemo
7f71f4c0c3
mob_chat_db txt to yml (#5976)
* Converted mob_chat_db txt to yml
* mob_skill_db now display a warning when the chat ID doesn't exist

Thanks to @Lemongrass3110 and @aleos89 !
2021-06-01 15:02:33 +02:00
Aleos
26632604f4
Adds support for Green Aura MVP damage (#5749)
Adds the DamageTaken flag which reduces damage done to specific naturally spawning MVP.

Fixes #3324.

Thanks to @admkakaroto, @SonaSonaSona and @Atemo!

Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
2021-02-21 23:33:15 +01:00
Aleos
7992e0891b
Converts the mob database to YAML (#5435)
* Combines mob_race2 and mob_drop databases into one.
* General cleanups and optimizations.
* Includes CSV2YAML conversion tool.
Thanks to @vstumpf, @lukasrmattos, and @Lemongrass3110!
2021-02-16 17:09:06 -05:00
Lemongrass3110
f57b037b83
Fixed monster exp definitions (#5672)
Fixes #5656

Thanks to @Skystar18
2021-01-06 18:42:43 +01:00
Aleos
2d97ece2a2
Implements new guild skills (#5192)
* Fixes #4183.
* Adds 3 new guild skills: GD_CHARGESHOUT_FLAG, GD_CHARGESHOUT_BEATING, and GD_EMERGENCY_MOVE
* Changes 5 minute guild global cooldown to be 3 minute individual cooldowns for GD_RESTORE, GD_REGENERATION, GD_BATTLEORDER, GD_EMERGENCYCALL, and GD_ITEMEMERGENCYCALL.
* Reduces GD_RESTORE fixed cast time from 10 seconds to 1.
2020-11-28 17:16:22 -05:00
Lemongrass3110
f37990414f
Cleanup of MVP mode checking (#5559)
Fixes #5368

Thanks to @mazvi, @attackjom and @aleos89
2020-11-22 02:09:02 +01:00
Aleos
be9babee32
Converts the random option databases to YAML (#5494)
* Fixes #3084.
* Creating random option groups now further reflects official behavior.
* Group bonuses can now be created without having to create multiple permutations of the same group.
* Specific slot options can now be defined which guarantee a bonus.
* Non-guaranteed options can now be defined along with a maximum amount.
* Random option value can now be defined as a range instead of a static value.
* Adds conversion of official random option groups.
* Includes CSV2YAML conversion tool.
Thanks to @Lemongrass3110!
Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
2020-11-08 12:21:52 -05:00
Aleos
7367714d40
Moves AUTOLOOT_DISTANCE macro define location (#5421)
* Fixes #5375.
* Moves the macro define for AUTOLOOT_DISTANCE to mob.hpp as mob.cpp requires this, not atcommand.cpp.
Thanks to @vstumpf!
2020-10-19 08:49:57 -04:00
Vincent Stumpf
3776bfbaa3
Support itemids up to ~2 billion (#5141)
Co-authored-by: aleos89 <aleos89@users.noreply.github.com>
Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
2020-08-08 12:06:07 +02:00
Atemo
5ba29be2a3
Added support for race/size/element/min level/max level quest objectives (#5191)
* Added support for race/size/element/min level/max level quest objectives
* Enabled Butler for the Richards hunting quests (ep16.1) 

Co-authored-by: Aleos <aleos89@users.noreply.github.com>

Thanks to @attackjom, @Balferian !
Took some parts from b67c688e79 (diff-f3653b71c45029581a98314726e4d8f5) thanks to @exneval !
2020-07-20 18:59:50 +02:00
Aleos
2931c00bd4
Implemented the Battleground Queue System (#3995)
* Fixes #1310.
* Added a battle config which allows toggling of the Battleground Queue client feature and also toggles between the modes of scripts.
* Added script commands bg_reserve, bg_unbook, and bg_desert.
* Removed old custom Battleground scripts.
Thanks to @Lemongrass3110, @Locien, @secretdataz, @InusualZ, @Normynator, @Atemo, @iubantot, @admkakaroto, and @noobzter003!
2020-02-12 08:26:59 -05:00
Aleos
b0119631a4
Allow NPC view data modifications (#4385)
* Fixes #4289.
* Updated script commands setunitdata and getunitdata to support the modification of NPC view data.
* Converted mob_avail database to YAML.
Thanks to @Lemongrass3110, @4144, @exneval, @Balferian, @cahya1992 and @teededung!
Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
2019-12-22 10:27:43 -05:00
Jittapan Pluemsumran
ac558d7c1e
Initial implementation of pet evolution system + Pet DB conversion to YAML (#3544)
* Implemented official pet evolution system
* Added evolved pets to pet database
* Corrected various pet system mechanics
* Migrated pet database to YAML format and the converter from CSV format

Thanks to @Lemongrass3110 @aleos89 and @Atemo for their suggestions and additional fixes
2019-03-26 22:51:57 +07:00
Jittapan Pluemsumran
f5e8af0d9c Fixed possible null pointer dereference in Taekwon Mission skill logic. Fixes #3996
Thanks to @cydh
2019-03-05 15:00:04 +07:00
Lemongrass3110
a5fc39e0e3
Fixed a few more leftovers from 64bit tick (#3885)
Fixes #3864

Thanks to @darhylism, @nubspixel, @Daegaladh and @aleos89!
2019-01-22 23:14:50 +00:00
Lemongrass3110
01f61cfa4f
Added support for 64bit ticks (#3768)
Fixes #3017

Thanks to Hercules for the idea and their implementation of it.

This deprecates Windows XP support. If you want to use it to run your server on it, you have to forcefully enable it now.
Since 64bit ticks do not exist on XP, you might encounter some issues that are already fixed on other OS.
2018-12-21 00:02:19 +01:00
Aleos
7040057a9f
Corrected Taekwon Mission mob generator (#3509)
* Fixes #3499.
* Corrected the way target monsters are generated for Taekwon Mission.
* Requires: The mob ID is in the range [MOBID_PORING, MOBID_GREEN_IGUANA], the mob must have below 30,000 HP, the mob must give Base EXP, the mob must be CLASS_NORMAL.
* Added a new mob group: MOBG_Taekwon_Mission
* Removed hard coded checks.
* Created constants for random monster group flags.
Thanks to @mrjnumber1, @Lemongrass3110, and @cydh!
2018-09-25 13:32:11 -04:00
Aleos
2ab298076c
Cleaned up header guard names (#3395)
* Fixes #3385.
* Updated the header guard names to C++ standards.
Thanks to @elfring's suggestion!
2018-08-10 15:57:50 -04:00
Lemongrass3110
c4d7dc76d3
Hid timer function parameters in a macro (#3311) 2018-07-15 23:17:15 +02:00
Aleos
11b42569fc
Synchronized source file headers (#3212)
* Alphabetically sorted includes.
* Updated copyright and license text to match across all files.
* Removed pragma once define in header files in lieu of ifdef guards.
2018-06-20 18:08:30 -04:00
Lemongrass3110
801d3ed942
Moved common, config and mapcache to C++ (#3200)
Dropped BETA_THREAD_TEST and everything around it
Dropped mt19937
Replaced msinttypes with cinttypes
Removed IRC link and updated README name
2018-06-14 21:51:58 +02:00
Aleos
a40b1da4d0
Updated Cultivation plant spawn formula (#2910)
* Fixes #2892.
* Corrected level 2 Cultivation formula for spawning plants.
Thanks to @mrjnumber1!
2018-02-15 21:49:12 -05:00