- Properly detect client timeout when logged into a character after a configurable time (default 60s) has passed without the client sending any packets.
- Fixes issues with crashed clients leaving characters in the world for a very long time (default 15 minutes), as well as edge case exploits involving intentionally pausing client execution for some amount of time.
(cherry picked from commit 7dfd472f8dff6ce067572e2887c2beb56d9ba9de)
- Move on-create customs (all explored, all reputations) to CharacterHandler::HandlePlayerLogin for first login. Fixes#19839.
- Add Wrath factions to all reputations custom (it only had BC factions).
- Remove unused ReputationMgr::SendStates. Add ReputationMgr::SendState handling for sending all updated states in arbitrary order if nullptr is passed (used in point #1).
- Fix all weapon skills max custom to properly apply on learning new weapon skills.
(cherry picked from commit 4b6351e6a5a2e2c986f3c0ea8e25bc76055c5b2c)
- Leader can invite multiple people before the first invite is accepted
- Leader can cancel group formation by sending CMSG_GROUP_DISBAND (using /run LeaveParty() or similar)
Fixes#17258.
(cherry picked from commit 132538db1dfb3c495294eeb5acfead59dea02b5c)
- Now only requires the either target's group leader or target itself to be on your map
- Now summons all applicable group members even if one member fails checks
- No longer has some truly weird edge case instance unbind code that could cause exploit behavior (Really, I have no idea why this existed, because it certainly didn't do what it might've been meant to do.)
(cherry picked from commit ca0262995053e0e5baef7e97211fec8f81664ea7)
Then it turned out that gameobject LoS is already fixed. So all this does, really, is restructure some stuff.
And remove the hack from Sapphiron because I could.
(cherry picked from commit d57307f63d8deb51003d61163adccce4e2c1bd47)
Partially revert 753e7074d84b5a2e8d3c3e92d25c54bb25ba477e and 12c680f9b1f1068099c3b19443d93d456690ac56 to simplify the code and to only remove GMs from the target list.
(cherry picked from commit f9cfc202e90ded24fe0dcf5d06035d2aab2cf6af)
- This would incur in a crash after attempting to convert the Corpse object into Player
Closes#19227Closes#19862
(cherry picked from commit 753e7074d84b5a2e8d3c3e92d25c54bb25ba477e)
* Add new method Map::getFullVMapDataForPosition to get area info and liquid info in a single vmap lookup
* Use this lookup in Map:: relocation methods to update m_areaId and m_zoneId fields on WorldObject
* Adjust GetZoneId/GetAreaId on WorldObject to always return these cached fields
* Clean up liquid state handling on Unit and Player
* Hand floor's Z coord up through GetFullTerrainStatusForPosition, use it to update a new field in WorldObject, and use that to feed a new GetFloorZ call on WorldObject.
Closes#16489
(cherry picked from commit f6c849729b27b77228704b595de3adaf24da2c10)
* Pet/Guardian AI hook re-organizing:
- Adjust OwnerAttacked/OwnerAttackedBy hooks on CreatureAI to fire for all owned units, not just player pets. This should allow guardians to more reliably recognize valid targets.
- Kill off the AttackedBy hook. While it was defined in CreatureAI.h as virtual, it was only ever invoked for player pets in specific situations. This makes it classic developer bait.
- Adjust PetAI to use DamageTaken instead of AttackedBy.
- Adjust behavior of AttackStart on PetAI to compensate.
(cherry picked from commit 1660bb7d27d6f42b49012a6b57e3c2b2eab20fd3)