* [Quest API] Add Bot Special Attacks for Immune Aggro/Damage
# Notes
- Adds `IMMUNE_AGGRO_BOT` and `IMMUNE_DAMAGE_BOT` for uses in special abilities.
* Cleanup
* Update attack.cpp
Helper template was not deducing float for lower/upper values allowing invalid sizes
Limit to sane values of 1-255 unrestricted and 3-15 for clients and pets
* [Bug Fix] Fix issue with NPC heads
# Notes
- We were overwriting head material within this secondary loop which caused NPC's heads to show their body texture in some places or no texture if their `showhelm` was not flagged.
# Images
* Update mob.cpp
* Update mob.cpp
* Update mob.cpp
* [Factions] Remove from shared memory and simplify
- Removes factions from shared memory and moves to zone based storage of repositories and changes the NPC `faction_list` to also use repositories.
- This affects NPC Factions and Faction Associations.
* Bug fixes.
* Update client.cpp
* Update client.cpp
* Update client.cpp
* Cleanup
* Update client.cpp
* Update client.cpp
* Update client.cpp
* Final push
* Update CMakeLists.txt
* Consolidate reloading.
* [Cleanup] PR # 3999 (#4039)
* [Fixes for PR # 3999
* [Reload actual in game factions, not just the umbrella data.
* syntax
* Fix typo
* Foix bug where primary_faction not filled in when no hits
* Fix typos
* Fix splash factions for kills.
* Fix typo
* Fix more variable names to be accurate
* Fix Loads to load new ones as they come in.
* Load npc_factions without primary (tasks) and support old task faction
* Rename to make way for new LoadFactionAssocition (by faction_id)
* Fix some review comments
* Add code to load factions for splash tasks and quests.
* Fix issue with sign and RewardFaction, fix Log Message
---------
Co-authored-by: Paul Coene <noudess@gmail.com>
* [Rule] Classic Triple Attack
Classic Triple attack pre-dates skill based triple attack.
Originally it was only for a few classes but was expanded to Warrior, Monks, Berserkers and finally rangers for Dragons of Norrath. After which it was converted to a skill based feature.
These were innate starting level 60 and had a flat % to trigger.
* Requested Changes
* [Commands] Cleanup #appearance Command
# Notes
- Cleanup messages and logic.
- Cleanup appearance type constants to use a namespace with constexpr instead.
- Cleanup animation constants to use a namespace with constexpr instead.
* Update emu_constants.cpp
* Cleanup
* [Cleanup] Gender constants cleanup
# Notes
- Convert to a `Gender` namespace using `constexpr`.
- Cleanup spots where we were using magic numbers for gender values.
* Cleanup
* [Bug] NPC Faction War prevention.
This should assist with prevention of NPC Faction waring. I have been using this code on my server for over 5 years with no coredumps or any noted bugs. This was brought up as users have reported a few events where they can trigger NPC's to fight each other.
* Correct a few entries to line up with updated code.
* Re-add missing RestTimer functionality
# Notes
- Entities killed by a spell with #cast were not reporting their pre-death entity ID properly.
- Added an `entity_id_override` to `GetTargetDescription()` and added a pre-defined entity ID variable to the cast command so we can message the proper pre-death entity ID.
* [Bug Fix] Fix Appearance Issues
# Notes
- Changing race, gender, or texture of a Mob could result in it changing sizes due to use not sending the size as part of the appearance packet.
- Also converts the parameterized method to a struct parameter so that we can optionally send things without back-filling multiple arguments.
* Gender cleanup.
* Fix.
* Formatting.
* [Data Buckets] Zone-Based Data Bucket Caching
# Notes
- Adds a data bucket cache so we're not needlessly hitting the database every time we need to read a data bucket value.
* Cleanup and unify GetData access patterns
* Cache work
* Push
* Add to cache when we fetch and do a db hit
* Handle bucket misses in cache
* Formatting
* Logging
* [Data Buckets] Zone-Based Data Bucket Caching
- Adds a data bucket cache so we're not needlessly hitting the database every time we need to read a data bucket value.
* Cleanup and unify GetData access patterns
* Cache work
* Push
* Add to cache when we fetch and do a db hit
* Handle bucket misses in cache
* Formatting
* Remove redundant fetches from cache since GetData does the same thing
* Push progress
* Distributed cache work
* Logging
* Fix issue with scoping where same named keys could return overlapping results
* Misses cache tweak, logging, comments
* Add bot, client, and NPC bucket methods to Lua.
---------
Co-authored-by: Akkadius <akkadius1@gmail.com>
* [RAID] Add Raid Features
[RAID] Add Raid Features
- Add delegate main assist
- Add delegate main marker
- Add target ring for main assisters. Uses MA1, then MA2, then MA3
- Add /assist raid respecting /assist on and /assist off
- Add Raid Notes. Functions across zones
- Add Raid XTarget functional
- Raid Leader can mark without being delegated Main Marker. Must have the appropriate AA
* Update to new db routines
* Updated several formatting issues based on review
* Update to pp->tribute_time_remaining to avoid edge case. Unrelated to raid updates.
* Updates to resolve comments/review.
Added a few edge case updates as well.
* Refactored to use database repositories for raid_details and raid_members. Other updates as noted in review.
* Updated database manifest and fixed potential leak within Client::Handle_OP_AssistGroup
* Update for remaining review items
* Refactor SendAssistTarget to use struct/vector loop
* Have IsAssister use range based for loop and return bool
* General cleanup
* Simplify SendRaidAssistTarget to use struct / vector
* Formatting in Handle_OP_RaidDelegateAbility
* Format SendRemoveRaidXTargets and clean up error statements
* Format SendRemoveAllRaidXTargets
* Formatting
* Default return FindNextRaidDelegateSlot to -1
* Change fields to marked_npc_1/2/3 (missing last underscore)
---------
Co-authored-by: Akkadius <akkadius1@gmail.com>
* [Cleanup] Consolidate #show commands into a singular #show command
# Notes
- All `#show` commands like `#showbuffs` are now subcommands of `#show`.
- All aliases like `#showbuffs` still function.
* Push up progress.
* Final push.
* Cleanup.
* Update ip_lookup.cpp
* emotes not emote
* Cleanup
* Update servertalk.h
* Update show.cpp
* Fix
* Final push.
* #aggro
* #who
* [Quest API] Add GetClassPlural() and GetRacePlural() to Perl/Lua
# Perl
- Add `$mob->GetClassPlural()`.
- Add `$mob->GetRacePlural()`.
# Lua
- Add `mob:GetClassPlural()`.
- Add `mob:GetRacePlural()`.
# Notes
- Allows operators to get the plural of a player class or race, example being `Warrior` as `Warriors` or `Dark Elf` as `Dark Elves`.
* Update mob.cpp
* [Quest API] Add HasSpellEffect() to Perl/Lua
# Perl
- Add `$mob->HasSpellEffect(effect_id)`.
# Lua
- Add `mob:HasSpellEffect(effect_id)`.
# Notes
- Allows operators to see if a Mob has an effect ID from any of their buffs.
* Update mob.cpp
# Perl
- Add `$mob->GetDefaultRaceSize(race_id)`.
- Add `$mob->GetDefaultRaceSize(race_id, gender_id)`.
# Lua
- Add `mob:GetDefaultRaceSize(race_id)`.
- Add `mob:GetDefaultRaceSize(race_id, gender_id)`.
# Notes
- This allows you to get a default size for a race and gender that isn't the current mob's race and gender.