- Implemented the fully official damage calculation for this skill, it's now 100% accurate
** Partially reverted c3f4618
** The damage bonus is: [((SkillLv x 20) + 100) x srcBaseLevel / 150] + srcINT + srcMATK - tarMDEF - tarMDEF2
** The damage bonus from base level and INT is calculated when the status change starts
** The damage bonus from MATK and the reduction from MDEF/MDEF2 is calculated per hit
* Follow up to 32c829d.
* Added a missing break on guild type instance creation.
- Thanks to @Canoe!
* Added instance name back to script command instance_enter.
- This will present the proper error message when trying to enter another instance.
Expanded the instance system to support new modes
* New modes include: No player attached, single player, and guild.
* Modified the instance_db to allow instance idle time to be adjustable.
* Removed Map1 from the instance_db as the EnterMap is always the same value.
* Adjusted the stored maps of instances to dynamic arrays to conserve memory.
- Max amount of possible maps increased to 255.
* Instances will now be destroyed even if the owner cannot be found.
* Corrected the return value when entering an instance when a character, party, or guild does not have an instance.
* Expanded script command instance_create to take in an owner ID and an optional mode.
* Added a new script command instance_check_guild (works the same as instance_check_party).
* Corrected a few script commands to properly stop the script engine on failures for instance script commands.
* Removed the instance name lookup for when entering an instance as instance_id is now passed.
- Adjusted script command instance_enter to no longer require the instance name.
* Cleaned up script command instance_warpall.
* Adjusted script command instance_announce to check when instance ID is 0 rather than -1 since instance IDs are stored as unsigned now.
* Refactored all instance_id to unsigned short.
* Updated documentation to reflect changes.
* Follow up to 2cfb844.
* Adjusted the instance_db documentation.
* Adjusted script command instance_announce to check when instance ID is 0 rather than -1 since instance IDs are stored as unsigned now.
* Added a couple of checks when sending instance information to the client.
* Fixed a compile warning.
* Follow up to c97be60.
* Added some safety measures when sending the instance name to the client.
* Adjusted the stored maps of instances to dynamic arrays to conserve memory.
- Max amount of possible maps increased to 255.
* Removed Map1 from the instance_db as the EnterMap is always the same value.
* Instances will now be destroyed even if the owner cannot be found.
* Corrected the return value when entering an instance when a character, party, or guild does not have an instance.
* Corrected a few script commands to properly stop the script engine on failures for instance script commands.
* Removed the instance name lookup for when entering an instance as instance_id is now passed.
- Adjusted script command instance_enter to no longer require the instance name.
* Adjusted script command instance_create to keep backwards compatibility.
* Cleaned up script command instance_warpall.
* Updated script documentation to reflect changes.
* Updated instance_db to reflect changes.
* Corrected active_transform and transform stacking display issues.
* Implemented ZC_EFST_SET_ENTER and ZC_EFST_SET_ENTER2.
- Adjusted the sc_display to make use of this.
Thanks to @exneval for the packet info!
* Properly implemented the skill as a unit skill.
* Corrected the damage calculation and removed attempts at diving by zero.
* The skill now ignores the target's defense.
* Resolves Exceed Break, Spell Fist, and Giant Growth being able to do more damage with Vellum-type weapons.
* Optimized the battle_vanish calculations to their respective case.
* Defender now reduces Acid Demonstration damage (renewal mode).
* Defender no longer reduces Throw Zeny and Rapid Throw damage.
* Acid Demonstration now misses on targets in Neutral Barrier.
* Works the same as script command transform and can be stacked with it as well.
* active_transform has display priority if transform is active.
Thanks to Ziu and @Darkelfen!
* New modes include: No player attached, single player, and guild.
* Expanded script command instance_create to take in an owner ID and an optional mode.
* Added a new script command instance_check_guild (works the same as instance_check_party).
* Refactored all instance_id to unsigned short.
* Graffiti will no longer remove all units of the Rogue class.
* Graffiti will now fail to cast again if a Graffiti already exists on the map.
* Graffiti should only be removed on map changes, but Remover/Cleaner still removes it (custom) since the skill was never officially implemented.
* Increases an equipped weapon's ATK/MATK by given rate.
* bWeaponMatkRate does not work in pre-renewal as there is no MATK for weapons in pre-renewal.
* Renamed 'bonus2 bWeaponAtkRate' to 'bonus2 bWeaponDamageRate'.
- Seems to be unused in the current item database.
- Damage fits the bonus name better as it increased the final damage, not the weapon's attack specifically.
Refactored part of guild emblem validation
* Corrected clif_validate_emblem returning incorrect value types.
* Created readable constants.
Thanks to @wilkemeyer!
Corrected some packet structure issues
* Resolves a chatting issue while using fake names.
* Resolves an incorrect packet header size for requesting player registries.
Thanks to @wilkemeyer!
* Follow up to 55e4df1.
* Added an extra check to make sure block list is not null on skill use.
Thanks to @Vomaito, @keitenai, @spinzaku, @Playtester, and @Tokeiburu!
Bug:
It was Initially declared as size of UINT16_MAX (0xffff) but as the skill-id itself which will be used
as offset can reach this value, it's too small.
Pathfinding uses BHEAP_* (vector) operations from db.h, before this optimization each pathsearch resulted in an call to aMalloc() / aFree() which is quite costly as it fragments memory over time & may cause software stalls when the application's heap must be resized.
Now it allocates the Heap once (& may grow it accordingly) and re-uses the allocated memory every time/call.
This makes also tons of monsters less cpu-time intensive.
- Marionette Control now has a range of 7 (fixes#1239)
- Mechanic Back/Front Slide skills are no longer blocked by gear that makes you knock-back immune (fixes#1227)