* [Quest API] Add Last Login and First Login Flags to EVENT_CONNECT
* Push
* Update base_character_data_repository.h
* Update version field
---------
Co-authored-by: Chris Miles <akkadius1@gmail.com>
* [Performance] Store Player Title Sets in Zone Memory
* Move to client memory
* Update client_packet.cpp
* Update zonedb.cpp
* Save only when necessary
* Single Insert
* Add optional insert flag
* Update client.h
* Consolidation
* Add trader/buyer cleanup actions
Add trader/buyer db cleanup for
- on zone idle
- on client first login
- when world drops a zone connection
- in Client::ProcessMovePC
Cleanup several compiler warnings
* Formatting Updates
* [Bots] Fix bots getting stuck on ^pull
- Removed initial LoS check from bots and rely only on owner when told to ^pull. This prevents bots from getting stuck in a loop if they don't have LoS when trying to initiate the pull.
* [Bots] Add valid state checks to ^clickitem
- Bots previously weren't checking if they were in a valid state or not before trying to click an item when told (in a death state, held, feared, silenced, in group/raid, etc.)
* [Bots] Add valid state checks to ^clickitem
- Bots previously weren't checking if they were in a valid state or not before trying to click an item when told (in a death state, held, feared, silenced, in group/raid, etc.)
Miscommit
* undo
* Cleanup and Fixes
- Cleanup
- Fixed Animation Empathy checks and consolidates
- Enchanter pets will honor Animation Empathy rules all around
- Pets will properly guard if allowed when pulling
* [Bugfix] Fix uninitialized char* in object.cpp.
* [Bugfix] Clear object user and user tradeskill object on reset.
* [Bugfix] Send clear object packet on Object::Close()
* [Bots] Fix creation limit, spawn limit, level requirement checks
- Previously if buckets were being used to control any of these values and the appropriate rule was set to 0, unset class specific buckets would override the main limit buckets.
- For example, if `Bots:SpawnLimit` is set to `0` and a player has their `bot_spawn_limit` set to `5` but they don't have a class bucket set for the class they're attempting to spawn a Cleric, the unset `bot_spawn_limit_Cleric` would return 0 and prevent Clerics from being spawned.
- This affected spawn limits, creation limits and level requirements to use bots if controlled by buckets.
- `#gm on` is required to be on for those beyond the ruled min status requirements to bypass the limits.
Rewrote checks and tested every scenario of set unset rules/buckets.
* Cleanup, fix bot count
- Fixes QueryBotCount to not account for soft deleted bots (`-deleted-`)
- Casters could endlessly flee a mob if they had target reflection and were too close.
- Prevents all bots that aren't taunting from adjusting if they're too close and have target reflection. This is safer than limiting it to just casters and ranged bots to prevent situations where melee bots might not be able to outrun the mob to get to their melee range and continually flee.
- WE'LL GET THIS RIGHT EVENTUALLY /sigh
* Clean up for fear related bonus variables
SPA 181 FearResistChance (% chance to outright resist fear) and SPA 102 Fearless (on live used only on pets for full fear immunity if presents)
The way were calculating the bonuses was mixing the variables we used for each together in a way that could cause conflicts when combined with negate spell effect.
While doing some live testing was able to confirm SPA102 when cast on pets will terminate the fear on the next tick which is consistent with how we have the mechanic coded.
* Update spells.cpp
---------
Co-authored-by: Akkadius <akkadius1@gmail.com>
* [Bots] Positioning rewrite
- Fixes positioning issues where bots could run back and forth or stay at the target's feet.
- Adds checks to ensure bots don't spam positioning updates and complete their initial positioning.
- Cleans up logic and makes it easier to read.
* Cleanup
* [Bots] Add valid state checks to ^clickitem
- Bots previously weren't checking if they were in a valid state or not before trying to click an item when told (in a death state, held, feared, silenced, in group/raid, etc.)
* Add error output on no bots selected.=
- [#4756](https://github.com/EQEmu/Server/pull/4756) changed the way overwriting worked for buffs. It allowed stronger spells to overwrite lesser spells if they were already on the target.
- However, this is a positive change but has its drawbacks with spells of similar value. It could cause an endless buff loop where they constantly replaced one another.
Overall, the con of endless buffing outweighs the benefit of automatic overwriting lesser spells and the control should be left to only spell lists via `^spells` for bot owners as it was before to determine which buffs bots will cast.
- Certain resist spells have a DS bonus on them and can be casted as a resist rather than a damage shield. This forces anything with a damage shield as a damage shield buff.
* SPA180 bypassed by field no_resist (field209)
SPA 180 SE_ResistSpellChance provides chance to resist spells outright. This should not be checked to resist a spell if spell has (field209 / no_resist) set to 1.
* Update spells.cpp
confirmed on live unresistable spells are not blocked by sanctification disc or related AA's
* SPA 378 update
Update to SPA 378
SE_SpellEffectResistChance provides chance to resist specific spell effects.
This updates allows support for multiple resistance checks against different effects in same spell.
Example. If a spell has a silence and a blind effect and the target has an AA that gives 10% chance to resist silence and 5% chance to resist blind. It will roll against effect respectively each giving a chance to resist the spell.
* Update spells.cpp
Unresistable spells (resisttype = 0) do not ever resist a spell even with SPA378
Example: Pheonix Charm in Plane of Fire, or Storm Comet in Bastion of Thunder. Parsed both and never got a resist despite having the AA that has effect specific resists which both those spells match.