Commit Graph

180 Commits

Author SHA1 Message Date
AoShinHo
61b3f4a34d Converted ZC_USE_SKILL to struct (#8599)
Co-authored-by: Atemo <Atemo@users.noreply.github.com>
Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
2024-09-15 01:42:12 +02:00
AoShinHo
d5267c63a9 Converted ZC_NOTIFY_ACT to struct (#8571)
Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
2024-08-27 09:59:26 +02:00
AoShinHo
f3c8c70c81 Improved status_isdead and status_get_status_data (#8570)
Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
2024-08-22 22:36:29 +02:00
Playtester
78a2babe4d Monster Losing Target Display (#8479)
- When a monster loses its target, it will now properly display movement to the next cell rather than snapping back to the previous cell
- Looters will no longer spam movement packets to the client when they go for loot
- Added some base implementation for sub-cell coordinates
- Fixes #8232

Co-authored-by: Lemongrass3110
2024-07-06 12:51:58 +02:00
Atemo
ce5de23874 Updated get_bosstype and UMOB_MODE (#8439)
* Updated mob_data::get_bosstype() to use current mob data instead of db data to fix issue when the mode is changed via the setunitdata script command.
* Added unit_refresh in UMOB_MODE to refresh the mini icon near the monster indicating the monster type.
2024-06-17 19:38:00 +02:00
Atemo
6451925430 Updated npcspeed, npcwalkto and npcstop script commands (#8354)
* Added the optional parameter <npc name> to npcspeed to change the walking speed of the npc with the said name.
  Usage : npcspeed( <speed value> {,"<npc name>"} );

* Added the optional parameter <npc name> to npcwalkto to move the npc with the said name at the given coordinates.
  Usage : npcwalkto( <x>,<y> {,"<npc name>"} } );

* Added the optional parameters `<npc name>` and `<flag>` to `npcstop` to stop the movement of the npc with the said name with options.
  Usage : `npcstop( {"<npc name>", {"<flag>"}});`

Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
Co-authored-by: Aleos <aleos89@users.noreply.github.com>
2024-06-16 14:57:59 +02:00
Daegaladh
0d3550e7ea Fixed clif_move to use the correct movement packets (#8405)
* Removed unused ZC_NOTIFY_MOVE (0x86) packet
---------

Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
2024-06-11 00:03:43 +02:00
Vincent Stumpf
92722db3ab Fix dynamic npc timer mismatch (#8265)
* Fix dynamic npc timer mismatch

Fixes #8241
This adds some missing placement news that I'm surprised hasn't blown up yet.
2024-06-10 21:11:19 +02:00
Playtester
ec9a5fae4b Monster Loot / Item Dropping Position (#8347)
- When a monster is killed, its first item will now always drop at the exact cell the monster was on
- When a monster drops more than one item, the items will be deployed on 3 cells around the monster (looping): SE, W and N
- Fixed drop position of looted items (similar to regular drops but independent to it and starts north)
- Fixed item drop order (script-granted -> regular drops -> looted drops)
- Fixed looted items showing special drop effects
- Searching for a free cell to drop an item on now uses the official algorithm
- When a monster drops an item, it will no longer drop on cells that are occupied by characters or pets
- When a player drops an item, it will now drop in a 5x5 area around the player
- Items dropped by players can now stack on the same cell unless the new "item_stacking" config is disabled
- When an MVP drop drops to the floor because the player's inventory was full, it will now always drop on that player's cell
- Fixes #8345
2024-06-07 18:29:01 +02:00
Lemongrass3110
48b4623f3e Fixed all warnings in MSVS (#8391)
Fixes #2859
Fixes #3570
Fixes #8389
2024-06-04 03:07:16 +02:00
Lemongrass3110
660b194ade Changed droplists from ERI to STL (#8370) 2024-06-04 02:40:55 +02:00
idk-whoami
f60a4bdfaf Corrected script for some item #28 (#8340) 2024-05-31 17:10:01 +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
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